Clear shortcuts associated to an A11yActivity when the A11yActivity
becomes A11yService with the same componentName

Bug: 358092445
Test: atest CtsAccessibilityServiceTestCases (with the flag on)
Flag: com.android.server.accessibility.clear_shortcuts_when_activity_updates_to_service
Change-Id: I562f532cc97f1a7a85b6f13cd3d7ce4685cc1c90
diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig
index 034127c..3bfab85 100644
--- a/services/accessibility/accessibility.aconfig
+++ b/services/accessibility/accessibility.aconfig
@@ -45,6 +45,16 @@
 }
 
 flag {
+    name: "clear_shortcuts_when_activity_updates_to_service"
+    namespace: "accessibility"
+    description: "When an a11y activity is updated to an a11y service, clears the associated shortcuts so that we don't skip the AccessibilityServiceWarning."
+    bug: "358092445"
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
+
+flag {
     name: "compute_window_changes_on_a11y_v2"
     namespace: "accessibility"
     description: "Computes accessibility window changes in accessibility instead of wm package."
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 1451dfa..ec8908b 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -2513,6 +2513,19 @@
     private boolean readInstalledAccessibilityShortcutLocked(AccessibilityUserState userState,
             List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos) {
         if (!parsedAccessibilityShortcutInfos.equals(userState.mInstalledShortcuts)) {
+            if (Flags.clearShortcutsWhenActivityUpdatesToService()) {
+                List<String> componentNames = userState.mInstalledShortcuts.stream()
+                        .filter(a11yActivity ->
+                                !parsedAccessibilityShortcutInfos.contains(a11yActivity))
+                        .map(a11yActivity -> a11yActivity.getComponentName().flattenToString())
+                        .toList();
+                if (!componentNames.isEmpty()) {
+                    enableShortcutsForTargets(
+                            /* enable= */ false, UserShortcutType.ALL,
+                            componentNames, userState.mUserId);
+                }
+            }
+
             userState.mInstalledShortcuts.clear();
             userState.mInstalledShortcuts.addAll(parsedAccessibilityShortcutInfos);
             userState.updateTileServiceMapForAccessibilityActivityLocked();