diff options
3 files changed, 50 insertions, 3 deletions
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 028c3041a50d..75b680dd3a88 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -80,6 +80,7 @@ public class SettingsHelper { sBroadcastOnRestore.add(Settings.Secure.UI_NIGHT_MODE); sBroadcastOnRestore.add(Settings.Secure.DARK_THEME_CUSTOM_START_TIME); sBroadcastOnRestore.add(Settings.Secure.DARK_THEME_CUSTOM_END_TIME); + sBroadcastOnRestore.add(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED); } private interface SettingsLookup { diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java index 54f8688bf5d6..197788e11973 100644 --- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java @@ -31,6 +31,7 @@ import androidx.test.runner.AndroidJUnit4; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; /** * Tests for {@link SettingsHelper#restoreValue(Context, ContentResolver, ContentValues, Uri, @@ -89,7 +90,7 @@ public class SettingsHelperRestoreTest { float restoreSettingValue = defaultSettingValue + 0.5f; mSettingsHelper.restoreValue( - mContext, + Mockito.mock(Context.class), mContentResolver, new ContentValues(2), Settings.Secure.getUriFor(settingName), @@ -132,7 +133,7 @@ public class SettingsHelperRestoreTest { Settings.Secure.putInt(mContentResolver, settingName, configuredSettingValue); mSettingsHelper.restoreValue( - mContext, + Mockito.mock(Context.class), mContentResolver, new ContentValues(2), Settings.Secure.getUriFor(settingName), @@ -154,7 +155,7 @@ public class SettingsHelperRestoreTest { int restoreSettingValue = 1; mSettingsHelper.restoreValue( - mContext, + Mockito.mock(Context.class), mContentResolver, new ContentValues(2), Settings.Secure.getUriFor(settingName), diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 22b082f84a84..7f912a4fc1ce 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -16,6 +16,7 @@ package com.android.server.accessibility; +import static android.provider.Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED; import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static android.view.accessibility.AccessibilityManager.ShortcutType; @@ -542,12 +543,56 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub intent.getStringExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE), intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE)); } + } else if (ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED.equals(which)) { + synchronized (mLock) { + restoreLegacyDisplayMagnificationNavBarIfNeededLocked( + intent.getStringExtra(Intent.EXTRA_SETTING_NEW_VALUE), + intent.getIntExtra(Intent.EXTRA_SETTING_RESTORED_FROM_SDK_INT, + 0)); + } } } } }, UserHandle.ALL, intentFilter, null, null); } + // Called only during settings restore; currently supports only the owner user + // TODO: b/22388012 + private void restoreLegacyDisplayMagnificationNavBarIfNeededLocked(String newSetting, + int restoreFromSdkInt) { + if (restoreFromSdkInt >= Build.VERSION_CODES.R) { + return; + } + + boolean displayMagnificationNavBarEnabled; + try { + displayMagnificationNavBarEnabled = Integer.parseInt(newSetting) == 1; + } catch (NumberFormatException e) { + Slog.w(LOG_TAG, "number format is incorrect" + e); + return; + } + + final AccessibilityUserState userState = getUserStateLocked(UserHandle.USER_SYSTEM); + final Set<String> targetsFromSetting = new ArraySet<>(); + readColonDelimitedSettingToSet(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, + userState.mUserId, targetsFromSetting, str -> str); + final boolean targetsContainMagnification = targetsFromSetting.contains( + MAGNIFICATION_CONTROLLER_NAME); + if (targetsContainMagnification == displayMagnificationNavBarEnabled) { + return; + } + + if (displayMagnificationNavBarEnabled) { + targetsFromSetting.add(MAGNIFICATION_CONTROLLER_NAME); + } else { + targetsFromSetting.remove(MAGNIFICATION_CONTROLLER_NAME); + } + persistColonDelimitedSetToSettingLocked(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, + userState.mUserId, targetsFromSetting, str -> str); + readAccessibilityButtonTargetsLocked(userState); + onUserStateChangedLocked(userState); + } + @Override public long addClient(IAccessibilityManagerClient callback, int userId) { synchronized (mLock) { |