diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 02ab60b05bca4..4fa1b1bd88227 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -130,6 +130,7 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Predicate; /** * This class is instantiated by the system as a system level service and can be @@ -389,7 +390,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } // We will update when the automation service dies. - AccessibilityUserState userState = getCurrentUserStateLocked(); + final AccessibilityUserState userState = getCurrentUserStateLocked(); // We have to reload the installed services since some services may // have different attributes, resolve info (does not support equals), // etc. Remove them then to force reload. @@ -438,15 +439,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (userId != mCurrentUserId) { return; } - AccessibilityUserState userState = getUserStateLocked(userId); - Iterator it = userState.mEnabledServices.iterator(); + final AccessibilityUserState userState = getUserStateLocked(userId); + final Predicate filter = + component -> component != null && component.getPackageName().equals( + packageName); + userState.mBindingServices.removeIf(filter); + userState.mCrashedServices.removeIf(filter); + final Iterator it = userState.mEnabledServices.iterator(); while (it.hasNext()) { - ComponentName comp = it.next(); - String compPkg = comp.getPackageName(); + final ComponentName comp = it.next(); + final String compPkg = comp.getPackageName(); if (compPkg.equals(packageName)) { it.remove(); - userState.getBindingServicesLocked().remove(comp); - userState.getCrashedServicesLocked().remove(comp); // Update the enabled services setting. persistComponentNamesToSettingLocked( Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, @@ -474,11 +478,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (userId != mCurrentUserId) { return false; } - AccessibilityUserState userState = getUserStateLocked(userId); - Iterator it = userState.mEnabledServices.iterator(); + final AccessibilityUserState userState = getUserStateLocked(userId); + final Iterator it = userState.mEnabledServices.iterator(); while (it.hasNext()) { - ComponentName comp = it.next(); - String compPkg = comp.getPackageName(); + final ComponentName comp = it.next(); + final String compPkg = comp.getPackageName(); for (String pkg : packages) { if (compPkg.equals(pkg)) { if (!doit) {