From 00453157ae62d3ba63fe42eccf5113d89e15cab7 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 23 Jun 2011 16:35:55 -0700 Subject: [PATCH] Add "large text" accessibility option. Also re-arrange the UI a bit to clearly put the button for enabling/disabiling accessibility services along-side said services. Change-Id: Ica1ddecddf6e97800909ba6bea9ce4e124b59c01 --- res/values/strings.xml | 12 ++-- res/xml/accessibility_settings.xml | 17 ++--- .../settings/AccessibilitySettings.java | 62 +++++++++++++++---- 3 files changed, 65 insertions(+), 26 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 5839934d518..24161c236f4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2611,12 +2611,14 @@ found in the list of installed applications. Accessibility Accessibility settings - + Manage accessibility options - - Accessibility - + + Large text + Accessibility services + + Allow accessibility services No installed accessibility services. - Accessibility scripts Download accessibility scripts diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml index 771b69efb55..90aef847ff6 100644 --- a/res/xml/accessibility_settings.xml +++ b/res/xml/accessibility_settings.xml @@ -19,20 +19,23 @@ android:title="@string/accessibility_settings_title"> - - + android:title="@string/accessibility_services_category"> + + android:persistent="false" + android:order="10000" /> mAccessibilityServices = new LinkedHashMap(); @@ -100,6 +111,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements addPreferencesFromResource(R.xml.accessibility_settings); + mToggleLargeTextCheckBox = (CheckBoxPreference) findPreference( + TOGGLE_LARGE_TEXT_CHECKBOX); + mAccessibilityServicesCategory = (PreferenceGroup) findPreference(ACCESSIBILITY_SERVICES_CATEGORY); @@ -145,7 +159,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements @Override public void onActivityCreated(Bundle savedInstanceState) { - addAccessibilitServicePreferences(); + addAccessibilityServicePreferences(); final HashSet enabled = new HashSet(); String settingValue = Settings.Secure.getString(getContentResolver(), @@ -192,6 +206,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); } + readFontSizePreference(); + super.onActivityCreated(savedInstanceState); } @@ -251,10 +267,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements int count = mAccessibilityServicesCategory.getPreferenceCount(); for (int i = 0; i < count; i++) { Preference pref = mAccessibilityServicesCategory.getPreference(i); - pref.setEnabled(isEnabled); + if (pref != mToggleAccessibilityCheckBox) { + pref.setEnabled(isEnabled); + } } - - mToggleScriptInjectionCheckBox.setEnabled(isEnabled); } @Override @@ -263,6 +279,13 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements if (TOGGLE_ACCESSIBILITY_CHECKBOX.equals(key)) { handleEnableAccessibilityStateChange((CheckBoxPreference) preference); + } else if (TOGGLE_LARGE_TEXT_CHECKBOX.equals(key)) { + try { + mCurConfig.fontScale = mToggleLargeTextCheckBox.isChecked() + ? LARGE_FONT_SCALE : 1; + ActivityManagerNative.getDefault().updateConfiguration(mCurConfig); + } catch (RemoteException e) { + } } else if (POWER_BUTTON_ENDS_CALL_CHECKBOX.equals(key)) { boolean isChecked = ((CheckBoxPreference) preference).isChecked(); // The checkbox is labeled "Power button ends call"; thus the in-call @@ -355,20 +378,22 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements /** * Adds {@link CheckBoxPreference} for enabling or disabling an accessibility services. */ - private void addAccessibilitServicePreferences() { + private void addAccessibilityServicePreferences() { AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(Service.ACCESSIBILITY_SERVICE); List installedServices = accessibilityManager.getInstalledAccessibilityServiceList(); - if (installedServices.isEmpty()) { - getPreferenceScreen().removePreference(mAccessibilityServicesCategory); - return; + for (int i = 0; i < mAccessibilityServicesCategory.getPreferenceCount(); i++) { + Preference pref = mAccessibilityServicesCategory.getPreference(i); + if (pref != mToggleAccessibilityCheckBox + && pref != mToggleScriptInjectionCheckBox) { + mAccessibilityServicesCategory.removePreference(pref); + i--; + } } - getPreferenceScreen().addPreference(mAccessibilityServicesCategory); - for (int i = 0, count = installedServices.size(); i < count; ++i) { AccessibilityServiceInfo accessibilityServiceInfo = installedServices.get(i); String key = accessibilityServiceInfo.getId(); @@ -385,6 +410,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference( getActivity(), settingsIntent); preference.setKey(key); + preference.setOrder(i); ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo; preference.setTitle(serviceInfo.loadLabel(getActivity().getPackageManager())); mAccessibilityServicesCategory.addPreference(preference); @@ -392,6 +418,16 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } } + public void readFontSizePreference() { + try { + mCurConfig.updateFrom( + ActivityManagerNative.getDefault().getConfiguration()); + } catch (RemoteException e) { + } + mToggleLargeTextCheckBox.setChecked(Float.compare(mCurConfig.fontScale, + LARGE_FONT_SCALE) == 0); + } + @Override public Dialog onCreateDialog(int dialogId) { switch (dialogId) {