From cb0a7a82a6c747fafd6c46c2949396a0b549a104 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Fri, 23 Sep 2011 16:47:31 -0700 Subject: [PATCH] Settings may show enabled accessiiblity services after restore even if accessibility is off. Now the state of accessibility is determined from the number of running, i.e. enabled and installed, accessibility services - more than zero access is on else it is off. After a restore the device may have some enabled and installed services but disabled accessibility setting. In such case settings should respect the restored values and the services should be displayed as disabled initially and then enabling one of them will enable accessibility. bug:5367404 Change-Id: If3756aba3f59e282000247e99f87ebff2b64c9fd --- .../settings/AccessibilitySettings.java | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java index 3de275b0cc4..67a5bdb8ef8 100644 --- a/src/com/android/settings/AccessibilitySettings.java +++ b/src/com/android/settings/AccessibilitySettings.java @@ -85,7 +85,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements // the AccessibilityServiceInfo we need for proper presentation. private static final long DELAY_UPDATE_SERVICES_MILLIS = 1000; - private static final String ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR = ":"; + private static final char ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR = ':'; private static final String KEY_ACCESSIBILITY_TUTORIAL_LAUNCHED_ONCE = "key_accessibility_tutorial_launched_once"; @@ -127,10 +127,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements // Auxiliary members. private final static SimpleStringSplitter sStringColonSplitter = - new SimpleStringSplitter(ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR.charAt(0)); + new SimpleStringSplitter(ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR); private static final Set sInstalledServices = new HashSet(); - private static final Set sEnabledServices = new HashSet(); private final Map mLongPressTimeoutValuetoTitleMap = new HashMap(); @@ -297,17 +296,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements List installedServices = accessibilityManager.getInstalledAccessibilityServiceList(); + Set enabledServices = getEnabledServicesFromSettings(getActivity()); - Set enabledComponentNames = new HashSet(); - String settingValue = Settings.Secure.getString(getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); - if (settingValue != null) { - SimpleStringSplitter splitter = sStringColonSplitter; - splitter.setString(settingValue); - while (splitter.hasNext()) { - enabledComponentNames.add(ComponentName.unflattenFromString(splitter.next())); - } - } + final boolean accessibilityEnabled = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1; for (int i = 0, count = installedServices.size(); i < count; ++i) { AccessibilityServiceInfo info = installedServices.get(i); @@ -323,8 +315,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements preference.setKey(componentName.flattenToString()); preference.setTitle(title); - final boolean enabled = enabledComponentNames.contains(componentName); - if (enabled) { + final boolean serviceEnabled = accessibilityEnabled + && enabledServices.contains(componentName); + if (serviceEnabled) { preference.setSummary(getString(R.string.accessibility_service_state_on)); } else { preference.setSummary(getString(R.string.accessibility_service_state_off)); @@ -336,7 +329,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements Bundle extras = preference.getExtras(); extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey()); - extras.putBoolean(EXTRA_CHECKED, enabled); + extras.putBoolean(EXTRA_CHECKED, serviceEnabled); extras.putString(EXTRA_TITLE, title); String description = info.getDescription(); @@ -515,6 +508,26 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } } + private static Set getEnabledServicesFromSettings(Context context) { + String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + if (enabledServicesSetting == null) { + enabledServicesSetting = ""; + } + Set enabledServices = new HashSet(); + SimpleStringSplitter colonSplitter = sStringColonSplitter; + colonSplitter.setString(enabledServicesSetting); + while (colonSplitter.hasNext()) { + String componentNameString = colonSplitter.next(); + ComponentName enabledService = ComponentName.unflattenFromString( + componentNameString); + if (enabledService != null) { + enabledServices.add(enabledService); + } + } + return enabledServices; + } + private class SettingsPackageMonitor extends PackageMonitor { @Override @@ -589,25 +602,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements public static class ToggleAccessibilityServiceFragment extends TogglePreferenceFragment { @Override public void onPreferenceToggled(String preferenceKey, boolean enabled) { - String enabledServicesSetting = Settings.Secure.getString(getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); - if (enabledServicesSetting == null) { - enabledServicesSetting = ""; - } - // Parse the enabled services. - Set enabledServices = sEnabledServices; - enabledServices.clear(); - SimpleStringSplitter colonSplitter = sStringColonSplitter; - colonSplitter.setString(enabledServicesSetting); - while (colonSplitter.hasNext()) { - String componentNameString = colonSplitter.next(); - ComponentName enabledService = ComponentName.unflattenFromString( - componentNameString); - if (enabledService != null) { - enabledServices.add(enabledService); - } - } + Set enabledServices = getEnabledServicesFromSettings(getActivity()); // Determine enabled services and accessibility state. ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey);