From 1e741b2705023be64389ac3e31c5f63d330470a5 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Tue, 20 Sep 2011 15:50:07 -0700 Subject: [PATCH] System not checking if enabled services are installed when disabling accessibility. The system is didabling accessiblity if no accessibility serivces are enabled to avoid sending events across processes if no recipients are present. The check considers enabled services which may not have been installed. Now the check is made against enabled and installed serivces. bug:5347273 Change-Id: Iad391a1a5bf0bbca470584bc8392f35821ba768c --- .../AccessibilityManagerService.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/services/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/java/com/android/server/accessibility/AccessibilityManagerService.java index 6830055367e4a..ed8fa40f9dc3d 100644 --- a/services/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -718,8 +718,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub */ private void manageServicesLocked() { populateEnabledServicesLocked(mEnabledServices); - updateServicesStateLocked(mInstalledServices, mEnabledServices); - disableAccessibilityIfNoEnabledServices(mEnabledServices); + final int enabledInstalledServicesCount = updateServicesStateLocked(mInstalledServices, + mEnabledServices); + // No enabled installed services => disable accessibility to avoid + // sending accessibility events with no recipient across processes. + if (mIsAccessibilityEnabled && enabledInstalledServicesCount == 0) { + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_ENABLED, 0); + } } /** @@ -771,13 +777,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub * * @param installedServices All installed {@link AccessibilityService}s. * @param enabledServices The {@link ComponentName}s of the enabled services. + * @return The number of enabled installed services. */ - private void updateServicesStateLocked(List installedServices, + private int updateServicesStateLocked(List installedServices, Set enabledServices) { Map componentNameToServiceMap = mComponentNameToServiceMap; boolean isEnabled = mIsAccessibilityEnabled; + int enabledInstalledServices = 0; for (int i = 0, count = installedServices.size(); i < count; i++) { AccessibilityServiceInfo installedService = installedServices.get(i); ComponentName componentName = ComponentName.unflattenFromString( @@ -790,6 +798,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub service = new Service(componentName, installedService, false); } service.bind(); + enabledInstalledServices++; } else { if (service != null) { service.unbind(); @@ -801,19 +810,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } } - } - /** - * Disables accessibility if there are no enabled accessibility services which - * to consume the generated accessibility events. - * - * @param enabledServices The set of enabled services. - */ - private void disableAccessibilityIfNoEnabledServices(Set enabledServices) { - if (enabledServices.isEmpty()) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_ENABLED, 0); - } + return enabledInstalledServices; } /**