diff options
| author | 2020-05-15 16:17:42 +0000 | |
|---|---|---|
| committer | 2020-05-15 16:17:42 +0000 | |
| commit | eaa90b42dec8f54efedb38d55feed29ba36ca003 (patch) | |
| tree | 454accc8eb63a89acd94e14df7196e0e1e7db8ee | |
| parent | 769266c42ba1a47035314cda005a4beeb6e50eb3 (diff) | |
| parent | 776cde5befb8e8e863f92f51e8883908dae07fd1 (diff) | |
Merge "Removes shortcut target when an a11y service is unbound" into rvc-dev am: a0b9a209e1 am: ab1dd8d6e6 am: 250e5f855b am: 776cde5bef
Change-Id: I8d59aaf660f2eb7700b9e4ce80d87127d4fdb096
2 files changed, 50 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 856a74e36255..bc08f2a16bf9 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -1577,6 +1577,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } else { if (service != null) { service.unbindLocked(); + removeShortcutTargetForUnboundServiceLocked(userState, service); } } } @@ -2364,6 +2365,36 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub scheduleNotifyClientsOfServicesStateChangeLocked(userState); } + /** + * Remove the shortcut target for the unbound service which is requesting accessibility button + * and targeting sdk > Q from the accessibility button and shortcut. + * + * @param userState The accessibility user state. + * @param service The unbound service. + */ + private void removeShortcutTargetForUnboundServiceLocked(AccessibilityUserState userState, + AccessibilityServiceConnection service) { + if (!service.mRequestAccessibilityButton + || service.getServiceInfo().getResolveInfo().serviceInfo.applicationInfo + .targetSdkVersion <= Build.VERSION_CODES.Q) { + return; + } + final ComponentName serviceName = service.getComponentName(); + if (userState.removeShortcutTargetLocked(ACCESSIBILITY_SHORTCUT_KEY, serviceName)) { + final Set<String> currentTargets = userState.getShortcutTargetsLocked( + ACCESSIBILITY_SHORTCUT_KEY); + persistColonDelimitedSetToSettingLocked( + Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, + userState.mUserId, currentTargets, str -> str); + } + if (userState.removeShortcutTargetLocked(ACCESSIBILITY_BUTTON, serviceName)) { + final Set<String> currentTargets = userState.getShortcutTargetsLocked( + ACCESSIBILITY_BUTTON); + persistColonDelimitedSetToSettingLocked(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, + userState.mUserId, currentTargets, str -> str); + } + } + private void updateRecommendedUiTimeoutLocked(AccessibilityUserState userState) { int newNonInteractiveUiTimeout = userState.getUserNonInteractiveUiTimeoutLocked(); int newInteractiveUiTimeout = userState.getUserInteractiveUiTimeoutLocked(); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java index f724f64a3b8b..e54b0f9fb413 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java @@ -688,6 +688,25 @@ class AccessibilityUserState { } /** + * Removes given shortcut target in the list. + * + * @param shortcutType The shortcut type. + * @param target The component name of the shortcut target. + * @return true if the shortcut target is removed. + */ + public boolean removeShortcutTargetLocked(@ShortcutType int shortcutType, + ComponentName target) { + return getShortcutTargetsLocked(shortcutType).removeIf(name -> { + ComponentName componentName; + if (name == null + || (componentName = ComponentName.unflattenFromString(name)) == null) { + return false; + } + return componentName.equals(target); + }); + } + + /** * Returns installed accessibility service info by the given service component name. */ public AccessibilityServiceInfo getInstalledServiceInfoLocked(ComponentName componentName) { |