From 5d6144056493b0d657e74d13de8e751c06510357 Mon Sep 17 00:00:00 2001 From: Casey Burkhardt Date: Thu, 6 Apr 2017 13:46:50 -0700 Subject: [PATCH] Improved multiuser support for A11y button/Magnification - Ensures NavigationBarFragment updates Accessibility button state based on the settings of the current user. - Launches AccessibilityButtonChooserActivity as the current user Bug: 36652061 Bug: 36699310 Bug: 37103953 Test: Manual Change-Id: Ieded484d548fb4631ceb8a873d667dd53fd2fd79 --- .../statusbar/phone/NavigationBarFragment.java | 11 +++++++---- .../accessibility/AccessibilityManagerService.java | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index 1f03024fb7813..7562399b1d709 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -145,7 +145,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { getContext().getMainThreadHandler()); mContentResolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED), false, - mMagnificationObserver); + mMagnificationObserver, UserHandle.USER_ALL); if (savedInstanceState != null) { mDisabledFlags1 = savedInstanceState.getInt(EXTRA_DISABLE_STATE, 0); @@ -559,20 +559,23 @@ public class NavigationBarFragment extends Fragment implements Callbacks { private boolean onAccessibilityLongClick(View v) { Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - v.getContext().startActivity(intent); + v.getContext().startActivityAsUser(intent, UserHandle.CURRENT); return true; } private void updateAccessibilityServicesState() { int requestingServices = 0; try { - if (Settings.Secure.getInt(mContentResolver, - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED) == 1) { + if (Settings.Secure.getIntForUser(mContentResolver, + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, + UserHandle.USER_CURRENT) == 1) { requestingServices++; } } catch (Settings.SettingNotFoundException e) { } + // AccessibilityManagerService resolves services for the current user since the local + // AccessibilityManager is created from a Context with the INTERACT_ACROSS_USERS permission final List services = mAccessibilityManager.getEnabledAccessibilityServiceList( AccessibilityServiceInfo.FEEDBACK_ALL_MASK); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index cb6d4df355b11..0488d22188da5 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1586,7 +1586,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private void showAccessibilityButtonTargetSelection() { Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - mContext.startActivity(intent); + mContext.startActivityAsUser(intent, UserHandle.of(mCurrentUserId)); } private void scheduleNotifyClientsOfServicesStateChange(UserState userState) {