summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorryanlwlin <ryanlwlin@google.com>2020-05-28 18:42:50 +0800
committerryanlwlin <ryanlwlin@google.com>2020-05-29 11:30:15 +0800
commit779b7a09c5ab88f290b0bb2aecc7ca2222f4208c (patch)
treedaa9e41ff5651e451f11c3b35d21602c7b789f41 /services
parent0a62017612c6c23bdd975c61e64ad3411309b5d2 (diff)
Fix Magnification Settings didn't restore via D2D transfer
ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED is replaced with ButtonTargets setting value. We address it in data migration but not in D2D Consider D2D, we restore it to ButtonTargets value when the restored sdk version of the received intent is below R. Bug: 155943759 Test: manual test 1. prepare an Android Q device and an Android R device 2. backup settings value of Android Q device by the google account. 3. Launch setupwizard to restore it by the google account. Change-Id: I5df070dd1ef880ac1ee5c0867b42e88782348a1b
Diffstat (limited to 'services')
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java45
1 files changed, 45 insertions, 0 deletions
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) {