summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rhed Jao <rhedjao@google.com> 2020-05-15 16:17:42 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-05-15 16:17:42 +0000
commiteaa90b42dec8f54efedb38d55feed29ba36ca003 (patch)
tree454accc8eb63a89acd94e14df7196e0e1e7db8ee
parent769266c42ba1a47035314cda005a4beeb6e50eb3 (diff)
parent776cde5befb8e8e863f92f51e8883908dae07fd1 (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
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java31
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java19
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) {