Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ce8ae76 authored by Chun-Ku Lin's avatar Chun-Ku Lin
Browse files

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
parent 6e6ad596
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,16 @@ flag {
    }
    }
}
}


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 {
flag {
    name: "compute_window_changes_on_a11y_v2"
    name: "compute_window_changes_on_a11y_v2"
    namespace: "accessibility"
    namespace: "accessibility"
+13 −0
Original line number Original line Diff line number Diff line
@@ -2513,6 +2513,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    private boolean readInstalledAccessibilityShortcutLocked(AccessibilityUserState userState,
    private boolean readInstalledAccessibilityShortcutLocked(AccessibilityUserState userState,
            List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos) {
            List<AccessibilityShortcutInfo> parsedAccessibilityShortcutInfos) {
        if (!parsedAccessibilityShortcutInfos.equals(userState.mInstalledShortcuts)) {
        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.clear();
            userState.mInstalledShortcuts.addAll(parsedAccessibilityShortcutInfos);
            userState.mInstalledShortcuts.addAll(parsedAccessibilityShortcutInfos);
            userState.updateTileServiceMapForAccessibilityActivityLocked();
            userState.updateTileServiceMapForAccessibilityActivityLocked();