Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36557e98 authored by Tyler Freeman's avatar Tyler Freeman
Browse files

fix(#AlwaysOnMagnifier): update state when setting is changed outside the app

Refactor to keep track of all controllers and notify them all when a key
changes, similar to ColorAndMotionFragment.java

Bug: b/265086261
Fix: 267433655

Test: atest packages/apps/Settings/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
Change-Id: Id44d1d4074318aff8c4c4bc6f07d65b3e0ffc561
parent 0a79769c
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.settings.accessibility.AccessibilityDialogUtils.DialogType;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.settings.utils.LocaleUtils;
import com.android.settingslib.core.AbstractPreferenceController;

import com.google.android.setupcompat.util.WizardManagerHelper;

@@ -213,6 +214,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends
                getContext(), MagnificationFollowTypingPreferenceController.PREF_KEY);
        getSettingsLifecycle().addObserver(mFollowTypingPreferenceController);
        mFollowTypingPreferenceController.displayPreference(getPreferenceScreen());
        addPreferenceController(mFollowTypingPreferenceController);

        addAlwaysOnSetting(generalCategory);
    }
@@ -239,6 +241,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends
                getContext(), MagnificationAlwaysOnPreferenceController.PREF_KEY);
        getSettingsLifecycle().addObserver(alwaysOnPreferenceController);
        alwaysOnPreferenceController.displayPreference(getPreferenceScreen());
        addPreferenceController(alwaysOnPreferenceController);
    }

    @Override
@@ -344,14 +347,19 @@ public class ToggleScreenMagnificationPreferenceFragment extends
            AccessibilitySettingsContentObserver contentObserver) {
        super.registerKeysToObserverCallback(contentObserver);

        final List<String> followingTypingKeys = new ArrayList<>();
        followingTypingKeys.add(Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED);
        contentObserver.registerKeysToObserverCallback(followingTypingKeys,
                key -> updateFollowTypingState());
        var keysToObserve = List.of(
            Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED,
            Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED
        );
        contentObserver.registerKeysToObserverCallback(keysToObserve,
                key -> updatePreferencesState());
    }

    private void updateFollowTypingState() {
        mFollowTypingPreferenceController.updateState();
    private void updatePreferencesState() {
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
        getPreferenceControllers().forEach(controllers::addAll);
        controllers.forEach(controller -> controller.updateState(
                findPreference(controller.getPreferenceKey())));
    }

    @Override
+5 −0
Original line number Diff line number Diff line
@@ -175,6 +175,11 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
                        Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED)),
                eq(false),
                any(AccessibilitySettingsContentObserver.class));
        verify(mContentResolver).registerContentObserver(
                eq(Settings.Secure.getUriFor(
                        Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED)),
                eq(false),
                any(AccessibilitySettingsContentObserver.class));
    }

    @Test