blob: f924784a553534b84a093a2f7e945426d360164e [file] [log] [blame]
/*
* 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<List<AccessibilityTarget>> mTargetFeaturesData =
new MutableLiveData<>();
private final MutableLiveData<Integer> mSizeTypeData = new MutableLiveData<>();
private final MutableLiveData<MenuFadeEffectInfo> mFadeEffectInfoData =
new MutableLiveData<>();
private final MutableLiveData<Boolean> mMoveToTuckedData = new MutableLiveData<>();
private final MutableLiveData<Boolean> mDockTooltipData = new MutableLiveData<>();
private final MutableLiveData<Boolean> mMigrationTooltipData = new MutableLiveData<>();
private final MutableLiveData<Position> 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<AccessibilityTarget> 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<Boolean> getMoveToTuckedData() {
mInfoRepository.loadMenuMoveToTucked(mMoveToTuckedData::setValue);
return mMoveToTuckedData;
}
LiveData<Boolean> getDockTooltipVisibilityData() {
mInfoRepository.loadDockTooltipVisibility(mDockTooltipData::setValue);
return mDockTooltipData;
}
LiveData<Boolean> getMigrationTooltipVisibilityData() {
mInfoRepository.loadMigrationTooltipVisibility(mMigrationTooltipData::setValue);
return mMigrationTooltipData;
}
LiveData<Position> getPercentagePositionData() {
mInfoRepository.loadMenuPosition(mPercentagePositionData::setValue);
return mPercentagePositionData;
}
LiveData<Integer> getSizeTypeData() {
mInfoRepository.loadMenuSizeType(mSizeTypeData::setValue);
return mSizeTypeData;
}
LiveData<MenuFadeEffectInfo> getFadeEffectInfoData() {
mInfoRepository.loadMenuFadeEffectInfo(mFadeEffectInfoData::setValue);
return mFadeEffectInfoData;
}
LiveData<List<AccessibilityTarget>> getTargetFeaturesData() {
mInfoRepository.loadMenuTargetFeatures(mTargetFeaturesData::setValue);
return mTargetFeaturesData;
}
void registerObserversAndCallbacks() {
mInfoRepository.registerObserversAndCallbacks();
}
void unregisterObserversAndCallbacks() {
mInfoRepository.unregisterObserversAndCallbacks();
}
}