/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.accessibility.floatingmenu; import android.content.Context; import android.view.accessibility.AccessibilityManager; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.systemui.util.settings.SecureSettings; import java.util.List; /** * The view model provides the menu information from the repository{@link MenuInfoRepository} for * the menu view{@link MenuView}. */ class MenuViewModel implements MenuInfoRepository.OnSettingsContentsChanged { private final MutableLiveData> mTargetFeaturesData = new MutableLiveData<>(); private final MutableLiveData mSizeTypeData = new MutableLiveData<>(); private final MutableLiveData mFadeEffectInfoData = new MutableLiveData<>(); private final MutableLiveData mMoveToTuckedData = new MutableLiveData<>(); private final MutableLiveData mDockTooltipData = new MutableLiveData<>(); private final MutableLiveData mMigrationTooltipData = new MutableLiveData<>(); private final MutableLiveData mPercentagePositionData = new MutableLiveData<>(); private final MenuInfoRepository mInfoRepository; MenuViewModel(Context context, AccessibilityManager accessibilityManager, SecureSettings secureSettings) { mInfoRepository = new MenuInfoRepository(context, accessibilityManager, /* settingsContentsChanged= */ this, secureSettings); } @Override public void onTargetFeaturesChanged(List newTargetFeatures) { mTargetFeaturesData.setValue(newTargetFeatures); } @Override public void onSizeTypeChanged(int newSizeType) { mSizeTypeData.setValue(newSizeType); } @Override public void onFadeEffectInfoChanged(MenuFadeEffectInfo fadeEffectInfo) { mFadeEffectInfoData.setValue(fadeEffectInfo); } void updateMenuMoveToTucked(boolean isMoveToTucked) { mInfoRepository.updateMoveToTucked(isMoveToTucked); } void updateMenuSavingPosition(Position percentagePosition) { mInfoRepository.updateMenuSavingPosition(percentagePosition); } void updateDockTooltipVisibility(boolean hasSeen) { mInfoRepository.updateDockTooltipVisibility(hasSeen); } void updateMigrationTooltipVisibility(boolean visible) { mInfoRepository.updateMigrationTooltipVisibility(visible); } LiveData getMoveToTuckedData() { mInfoRepository.loadMenuMoveToTucked(mMoveToTuckedData::setValue); return mMoveToTuckedData; } LiveData getDockTooltipVisibilityData() { mInfoRepository.loadDockTooltipVisibility(mDockTooltipData::setValue); return mDockTooltipData; } LiveData getMigrationTooltipVisibilityData() { mInfoRepository.loadMigrationTooltipVisibility(mMigrationTooltipData::setValue); return mMigrationTooltipData; } LiveData getPercentagePositionData() { mInfoRepository.loadMenuPosition(mPercentagePositionData::setValue); return mPercentagePositionData; } LiveData getSizeTypeData() { mInfoRepository.loadMenuSizeType(mSizeTypeData::setValue); return mSizeTypeData; } LiveData getFadeEffectInfoData() { mInfoRepository.loadMenuFadeEffectInfo(mFadeEffectInfoData::setValue); return mFadeEffectInfoData; } LiveData> getTargetFeaturesData() { mInfoRepository.loadMenuTargetFeatures(mTargetFeaturesData::setValue); return mTargetFeaturesData; } void registerObserversAndCallbacks() { mInfoRepository.registerObserversAndCallbacks(); } void unregisterObserversAndCallbacks() { mInfoRepository.unregisterObserversAndCallbacks(); } }