summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java1
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java7
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java45
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) {