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
This commit is contained in:
Tyler Freeman
2023-02-01 21:28:45 +00:00
parent 0a79769c15
commit 36557e9810
2 changed files with 19 additions and 6 deletions

View File

@@ -52,6 +52,7 @@ import com.android.settings.accessibility.AccessibilityDialogUtils.DialogType;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType; import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.settings.utils.LocaleUtils; import com.android.settings.utils.LocaleUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -213,6 +214,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends
getContext(), MagnificationFollowTypingPreferenceController.PREF_KEY); getContext(), MagnificationFollowTypingPreferenceController.PREF_KEY);
getSettingsLifecycle().addObserver(mFollowTypingPreferenceController); getSettingsLifecycle().addObserver(mFollowTypingPreferenceController);
mFollowTypingPreferenceController.displayPreference(getPreferenceScreen()); mFollowTypingPreferenceController.displayPreference(getPreferenceScreen());
addPreferenceController(mFollowTypingPreferenceController);
addAlwaysOnSetting(generalCategory); addAlwaysOnSetting(generalCategory);
} }
@@ -239,6 +241,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends
getContext(), MagnificationAlwaysOnPreferenceController.PREF_KEY); getContext(), MagnificationAlwaysOnPreferenceController.PREF_KEY);
getSettingsLifecycle().addObserver(alwaysOnPreferenceController); getSettingsLifecycle().addObserver(alwaysOnPreferenceController);
alwaysOnPreferenceController.displayPreference(getPreferenceScreen()); alwaysOnPreferenceController.displayPreference(getPreferenceScreen());
addPreferenceController(alwaysOnPreferenceController);
} }
@Override @Override
@@ -344,14 +347,19 @@ public class ToggleScreenMagnificationPreferenceFragment extends
AccessibilitySettingsContentObserver contentObserver) { AccessibilitySettingsContentObserver contentObserver) {
super.registerKeysToObserverCallback(contentObserver); super.registerKeysToObserverCallback(contentObserver);
final List<String> followingTypingKeys = new ArrayList<>(); var keysToObserve = List.of(
followingTypingKeys.add(Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED); Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED,
contentObserver.registerKeysToObserverCallback(followingTypingKeys, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED
key -> updateFollowTypingState()); );
contentObserver.registerKeysToObserverCallback(keysToObserve,
key -> updatePreferencesState());
} }
private void updateFollowTypingState() { private void updatePreferencesState() {
mFollowTypingPreferenceController.updateState(); final List<AbstractPreferenceController> controllers = new ArrayList<>();
getPreferenceControllers().forEach(controllers::addAll);
controllers.forEach(controller -> controller.updateState(
findPreference(controller.getPreferenceKey())));
} }
@Override @Override

View File

@@ -175,6 +175,11 @@ public class ToggleScreenMagnificationPreferenceFragmentTest {
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED)), Settings.Secure.ACCESSIBILITY_MAGNIFICATION_FOLLOW_TYPING_ENABLED)),
eq(false), eq(false),
any(AccessibilitySettingsContentObserver.class)); any(AccessibilitySettingsContentObserver.class));
verify(mContentResolver).registerContentObserver(
eq(Settings.Secure.getUriFor(
Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED)),
eq(false),
any(AccessibilitySettingsContentObserver.class));
} }
@Test @Test