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

Commit c3fd0241 authored by Ameer Armaly's avatar Ameer Armaly Committed by Cherrypicker Worker
Browse files

AccessibilityManagerService: remove uninstalled services from enabled list after service update.

Bug: 326485767
Test: atest AccessibilityEndToEndTest#testUpdateServiceWithoutIntent_disablesService
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:74ab528e54558b5a78a9b0f32a2e3f0a61714ae5)
Merged-In: I2d986dc8f09a3cf2f31713237e69e15dcef84514
Change-Id: I2d986dc8f09a3cf2f31713237e69e15dcef84514
24D1-dev is based on 24Q2-release. Therefore, we merged this CL to 24D1-dev.
parent d95fc067
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -2649,10 +2649,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                userState.mComponentNameToServiceMap;
                userState.mComponentNameToServiceMap;
        boolean isUnlockingOrUnlocked = mUmi.isUserUnlockingOrUnlocked(userState.mUserId);
        boolean isUnlockingOrUnlocked = mUmi.isUserUnlockingOrUnlocked(userState.mUserId);


        // Store the list of installed services.
        mTempComponentNameSet.clear();
        for (int i = 0, count = userState.mInstalledServices.size(); i < count; i++) {
        for (int i = 0, count = userState.mInstalledServices.size(); i < count; i++) {
            AccessibilityServiceInfo installedService = userState.mInstalledServices.get(i);
            AccessibilityServiceInfo installedService = userState.mInstalledServices.get(i);
            ComponentName componentName = ComponentName.unflattenFromString(
            ComponentName componentName = ComponentName.unflattenFromString(
                    installedService.getId());
                    installedService.getId());
            mTempComponentNameSet.add(componentName);


            AccessibilityServiceConnection service = componentNameToServiceMap.get(componentName);
            AccessibilityServiceConnection service = componentNameToServiceMap.get(componentName);


@@ -2712,6 +2715,25 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            audioManager.setAccessibilityServiceUids(mTempIntArray);
            audioManager.setAccessibilityServiceUids(mTempIntArray);
        }
        }
        mActivityTaskManagerService.setAccessibilityServiceUids(mTempIntArray);
        mActivityTaskManagerService.setAccessibilityServiceUids(mTempIntArray);

        // If any services have been removed, remove them from the enabled list and the touch
        // exploration granted list.
        boolean anyServiceRemoved =
                userState.mEnabledServices.removeIf((comp) -> !mTempComponentNameSet.contains(comp))
                        || userState.mTouchExplorationGrantedServices.removeIf(
                                (comp) -> !mTempComponentNameSet.contains(comp));
        if (anyServiceRemoved) {
            // Update the enabled services setting.
            persistComponentNamesToSettingLocked(
                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
                    userState.mEnabledServices,
                    userState.mUserId);
            // Update the touch exploration granted services setting.
            persistComponentNamesToSettingLocked(
                    Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
                    userState.mTouchExplorationGrantedServices,
                    userState.mUserId);
        }
        updateAccessibilityEnabledSettingLocked(userState);
        updateAccessibilityEnabledSettingLocked(userState);
    }
    }