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
This commit is contained in:
Dianne Hackborn
2011-06-23 16:35:55 -07:00
parent f52f509446
commit 00453157ae
3 changed files with 65 additions and 26 deletions

View File

@@ -2611,12 +2611,14 @@ found in the list of installed applications.</string>
<string name="accessibility_settings">Accessibility</string> <string name="accessibility_settings">Accessibility</string>
<!-- Settings title for accessibility settings screen --> <!-- Settings title for accessibility settings screen -->
<string name="accessibility_settings_title">Accessibility settings</string> <string name="accessibility_settings_title">Accessibility settings</string>
<!-- Settings summary for accessibility settings --> <!-- Settings summary for accessibility settings [CHAR LIMIT=40] -->
<string name="accessibility_settings_summary">Manage accessibility options</string> <string name="accessibility_settings_summary">Manage accessibility options</string>
<!-- Setting Checkbox title for enabling accessibility --> <!-- Setting Checkbox title for enabling accessibility large text [CHAR LIMIT=25] -->
<string name="toggle_accessibility_title">Accessibility</string> <string name="toggle_large_text_title">Large text</string>
<!-- Setting accessibility services category --> <!-- Setting accessibility services category [CHAR LIMIT=25] -->
<string name="accessibility_services_category">Accessibility services</string> <string name="accessibility_services_category">Accessibility services</string>
<!-- Setting Checkbox title for enabling accessibility services [CHAR LIMIT=40] -->
<string name="toggle_accessibility_title">Allow accessibility services</string>
<!-- Message for announcing the lack of installed accessibility services. --> <!-- Message for announcing the lack of installed accessibility services. -->
<string name="no_accessibility_services_summary">No installed accessibility services.</string> <string name="no_accessibility_services_summary">No installed accessibility services.</string>
<!-- Warning message about security implications of enabling an accessibility service, <!-- Warning message about security implications of enabling an accessibility service,
@@ -2638,8 +2640,6 @@ found in the list of installed applications.</string>
applications installed.\n\nYou can download a screen reader for your device from Android applications installed.\n\nYou can download a screen reader for your device from Android
Market.\n\nClick "OK" to install the screen reader.</string> Market.\n\nClick "OK" to install the screen reader.</string>
<!-- Accessibility settings: Webpage accessibility scripts category [CHAR LIMIT=25] -->
<string name="accessibility_script_injection_category">Accessibility scripts</string>
<!-- Accessibility settings: Checkbox title for enabling download of accessibility scripts [CHAR LIMIT=40] --> <!-- Accessibility settings: Checkbox title for enabling download of accessibility scripts [CHAR LIMIT=40] -->
<string name="accessibility_script_injection_enabled">Download accessibility scripts</string> <string name="accessibility_script_injection_enabled">Download accessibility scripts</string>
<!-- Accessibility settings: Checkbox summary for enabling download of accessibility scripts [CHAR LIMIT=65] --> <!-- Accessibility settings: Checkbox summary for enabling download of accessibility scripts [CHAR LIMIT=65] -->

View File

@@ -19,20 +19,23 @@
android:title="@string/accessibility_settings_title"> android:title="@string/accessibility_settings_title">
<CheckBoxPreference <CheckBoxPreference
android:key="toggle_accessibility_service_checkbox" android:key="toggle_large_text_checkbox"
android:title="@string/toggle_accessibility_title" android:title="@string/toggle_large_text_title"
android:persistent="false"/> android:persistent="false"/>
<PreferenceCategory android:key="accessibility_services_category" <PreferenceCategory android:key="accessibility_services_category"
android:title="@string/accessibility_services_category" /> android:title="@string/accessibility_services_category">
<CheckBoxPreference
<PreferenceCategory android:key="accessibility_script_injection_category" android:key="toggle_accessibility_service_checkbox"
android:title="@string/accessibility_script_injection_category"> android:title="@string/toggle_accessibility_title"
android:persistent="false"
android:order="-10000"/>
<CheckBoxPreference <CheckBoxPreference
android:key="toggle_accessibility_script_injection_checkbox" android:key="toggle_accessibility_script_injection_checkbox"
android:title="@string/accessibility_script_injection_enabled" android:title="@string/accessibility_script_injection_enabled"
android:summary="@string/accessibility_script_injection_enabled_summary" android:summary="@string/accessibility_script_injection_enabled_summary"
android:persistent="false" /> android:persistent="false"
android:order="10000" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory android:key="power_button_category" <PreferenceCategory android:key="power_button_category"

View File

@@ -17,14 +17,17 @@
package com.android.settings; package com.android.settings;
import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.ActivityManagerNative;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.Service; import android.app.Service;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.ListPreference; import android.preference.ListPreference;
@@ -51,7 +54,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private static final String DEFAULT_SCREENREADER_MARKET_LINK = private static final String DEFAULT_SCREENREADER_MARKET_LINK =
"market://search?q=pname:com.google.android.marvin.talkback"; "market://search?q=pname:com.google.android.marvin.talkback";
private final String TOGGLE_ACCESSIBILITY_CHECKBOX = private static final float LARGE_FONT_SCALE = 1.3f;
private static final String TOGGLE_LARGE_TEXT_CHECKBOX =
"toggle_large_text_checkbox";
private static final String TOGGLE_ACCESSIBILITY_CHECKBOX =
"toggle_accessibility_service_checkbox"; "toggle_accessibility_service_checkbox";
private static final String ACCESSIBILITY_SERVICES_CATEGORY = private static final String ACCESSIBILITY_SERVICES_CATEGORY =
@@ -66,10 +74,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private static final String POWER_BUTTON_ENDS_CALL_CHECKBOX = private static final String POWER_BUTTON_ENDS_CALL_CHECKBOX =
"power_button_ends_call"; "power_button_ends_call";
private final String KEY_TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX = private static final String KEY_TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX =
"key_toggle_accessibility_service_checkbox"; "key_toggle_accessibility_service_checkbox";
private final String KEY_LONG_PRESS_TIMEOUT_LIST_PREFERENCE = private static final String KEY_LONG_PRESS_TIMEOUT_LIST_PREFERENCE =
"long_press_timeout_list_preference"; "long_press_timeout_list_preference";
private static final int DIALOG_ID_DISABLE_ACCESSIBILITY = 1; private static final int DIALOG_ID_DISABLE_ACCESSIBILITY = 1;
@@ -77,6 +85,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private static final int DIALOG_ID_ENABLE_ACCESSIBILITY_SERVICE = 3; private static final int DIALOG_ID_ENABLE_ACCESSIBILITY_SERVICE = 3;
private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 4; private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 4;
private CheckBoxPreference mToggleLargeTextCheckBox;
private CheckBoxPreference mToggleAccessibilityCheckBox; private CheckBoxPreference mToggleAccessibilityCheckBox;
private CheckBoxPreference mToggleScriptInjectionCheckBox; private CheckBoxPreference mToggleScriptInjectionCheckBox;
private SettingsCheckBoxPreference mToggleAccessibilityServiceCheckBox; private SettingsCheckBoxPreference mToggleAccessibilityServiceCheckBox;
@@ -88,6 +97,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private ListPreference mLongPressTimeoutListPreference; private ListPreference mLongPressTimeoutListPreference;
private final Configuration mCurConfig = new Configuration();
private Map<String, AccessibilityServiceInfo> mAccessibilityServices = private Map<String, AccessibilityServiceInfo> mAccessibilityServices =
new LinkedHashMap<String, AccessibilityServiceInfo>(); new LinkedHashMap<String, AccessibilityServiceInfo>();
@@ -100,6 +111,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
addPreferencesFromResource(R.xml.accessibility_settings); addPreferencesFromResource(R.xml.accessibility_settings);
mToggleLargeTextCheckBox = (CheckBoxPreference) findPreference(
TOGGLE_LARGE_TEXT_CHECKBOX);
mAccessibilityServicesCategory = mAccessibilityServicesCategory =
(PreferenceGroup) findPreference(ACCESSIBILITY_SERVICES_CATEGORY); (PreferenceGroup) findPreference(ACCESSIBILITY_SERVICES_CATEGORY);
@@ -145,7 +159,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
addAccessibilitServicePreferences(); addAccessibilityServicePreferences();
final HashSet<String> enabled = new HashSet<String>(); final HashSet<String> enabled = new HashSet<String>();
String settingValue = Settings.Secure.getString(getContentResolver(), String settingValue = Settings.Secure.getString(getContentResolver(),
@@ -192,6 +206,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES);
} }
readFontSizePreference();
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
} }
@@ -251,10 +267,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
int count = mAccessibilityServicesCategory.getPreferenceCount(); int count = mAccessibilityServicesCategory.getPreferenceCount();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
Preference pref = mAccessibilityServicesCategory.getPreference(i); Preference pref = mAccessibilityServicesCategory.getPreference(i);
if (pref != mToggleAccessibilityCheckBox) {
pref.setEnabled(isEnabled); pref.setEnabled(isEnabled);
} }
}
mToggleScriptInjectionCheckBox.setEnabled(isEnabled);
} }
@Override @Override
@@ -263,6 +279,13 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
if (TOGGLE_ACCESSIBILITY_CHECKBOX.equals(key)) { if (TOGGLE_ACCESSIBILITY_CHECKBOX.equals(key)) {
handleEnableAccessibilityStateChange((CheckBoxPreference) preference); 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)) { } else if (POWER_BUTTON_ENDS_CALL_CHECKBOX.equals(key)) {
boolean isChecked = ((CheckBoxPreference) preference).isChecked(); boolean isChecked = ((CheckBoxPreference) preference).isChecked();
// The checkbox is labeled "Power button ends call"; thus the in-call // The checkbox is labeled "Power button ends call"; thus the in-call
@@ -355,19 +378,21 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
/** /**
* Adds {@link CheckBoxPreference} for enabling or disabling an accessibility services. * Adds {@link CheckBoxPreference} for enabling or disabling an accessibility services.
*/ */
private void addAccessibilitServicePreferences() { private void addAccessibilityServicePreferences() {
AccessibilityManager accessibilityManager = AccessibilityManager accessibilityManager =
(AccessibilityManager) getSystemService(Service.ACCESSIBILITY_SERVICE); (AccessibilityManager) getSystemService(Service.ACCESSIBILITY_SERVICE);
List<AccessibilityServiceInfo> installedServices = List<AccessibilityServiceInfo> installedServices =
accessibilityManager.getInstalledAccessibilityServiceList(); accessibilityManager.getInstalledAccessibilityServiceList();
if (installedServices.isEmpty()) { for (int i = 0; i < mAccessibilityServicesCategory.getPreferenceCount(); i++) {
getPreferenceScreen().removePreference(mAccessibilityServicesCategory); Preference pref = mAccessibilityServicesCategory.getPreference(i);
return; if (pref != mToggleAccessibilityCheckBox
&& pref != mToggleScriptInjectionCheckBox) {
mAccessibilityServicesCategory.removePreference(pref);
i--;
}
} }
getPreferenceScreen().addPreference(mAccessibilityServicesCategory);
for (int i = 0, count = installedServices.size(); i < count; ++i) { for (int i = 0, count = installedServices.size(); i < count; ++i) {
AccessibilityServiceInfo accessibilityServiceInfo = installedServices.get(i); AccessibilityServiceInfo accessibilityServiceInfo = installedServices.get(i);
@@ -385,6 +410,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference( SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference(
getActivity(), settingsIntent); getActivity(), settingsIntent);
preference.setKey(key); preference.setKey(key);
preference.setOrder(i);
ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo; ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo;
preference.setTitle(serviceInfo.loadLabel(getActivity().getPackageManager())); preference.setTitle(serviceInfo.loadLabel(getActivity().getPackageManager()));
mAccessibilityServicesCategory.addPreference(preference); 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 @Override
public Dialog onCreateDialog(int dialogId) { public Dialog onCreateDialog(int dialogId) {
switch (dialogId) { switch (dialogId) {