WebView accessibility support - Adding opt-in setting for enabling accessibility script injection from Google

Change-Id: I1676f34c30a0e9414d51060ad4fb2c9c502b09c3
This commit is contained in:
Svetoslav Ganov
2010-06-29 19:41:43 -07:00
parent c481a7aa16
commit 3d64653d1f
3 changed files with 75 additions and 4 deletions

View File

@@ -56,6 +56,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
private static final String ACCESSIBILITY_SERVICES_CATEGORY =
"accessibility_services_category";
private static final String TOGGLE_ACCESSIBILITY_SCRIPT_INJECTION_CHECKBOX =
"toggle_accessibility_script_injection_checkbox";
private static final String POWER_BUTTON_CATEGORY =
"power_button_category";
@@ -64,6 +67,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
private CheckBoxPreference mToggleCheckBox;
private CheckBoxPreference mToggleScriptInjectionCheckBox;
private PreferenceCategory mPowerButtonCategory;
private CheckBoxPreference mPowerButtonEndsCallCheckBox;
@@ -81,11 +86,14 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
addPreferencesFromResource(R.xml.accessibility_settings);
mToggleCheckBox = (CheckBoxPreference) findPreference(
TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX);
TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX);
mToggleScriptInjectionCheckBox = (CheckBoxPreference) findPreference(
TOGGLE_ACCESSIBILITY_SCRIPT_INJECTION_CHECKBOX);
mPowerButtonCategory = (PreferenceCategory) findPreference(POWER_BUTTON_CATEGORY);
mPowerButtonEndsCallCheckBox = (CheckBoxPreference) findPreference(
POWER_BUTTON_ENDS_CALL_CHECKBOX);
POWER_BUTTON_ENDS_CALL_CHECKBOX);
addAccessibilitServicePreferences();
@@ -131,6 +139,12 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
displayNoAppsAlert();
}
// set the accessibility script injection category
boolean scriptInjectionEnabled = (Settings.Secure.getInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 0) == 1);
mToggleScriptInjectionCheckBox.setChecked(scriptInjectionEnabled);
mToggleScriptInjectionCheckBox.setEnabled(true);
if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
&& Utils.isVoiceCapable(getActivity())) {
int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
@@ -180,7 +194,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
final String key = preference.getKey();
if (TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX.equals(key)) {
boolean isChecked = ((CheckBoxPreference) preference).isChecked();
handleEnableAccessibilityStateChange((CheckBoxPreference) preference);
} else if (POWER_BUTTON_ENDS_CALL_CHECKBOX.equals(key)) {
boolean isChecked = ((CheckBoxPreference) preference).isChecked();
@@ -191,6 +204,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
(isChecked ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
: Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
} else if (TOGGLE_ACCESSIBILITY_SCRIPT_INJECTION_CHECKBOX.equals(key)) {
handleToggleAccessibilityScriptInjection((CheckBoxPreference) preference);
} else if (preference instanceof CheckBoxPreference) {
handleEnableAccessibilityServiceStateChange((CheckBoxPreference) preference);
}
@@ -236,6 +251,42 @@ public class AccessibilitySettings extends SettingsPreferenceFragment {
}
}
/**
* Handles the change of the accessibility script injection setting state.
*
* @param preference The preference for enabling/disabling accessibility script injection.
*/
private void handleToggleAccessibilityScriptInjection(CheckBoxPreference preference) {
if (preference.isChecked()) {
final CheckBoxPreference checkBoxPreference = preference;
// TODO: DialogFragment?
AlertDialog dialog = (new AlertDialog.Builder(getActivity()))
.setTitle(android.R.string.dialog_alert_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setMessage(getActivity().getString(
R.string.accessibility_script_injection_security_warning))
.setCancelable(true)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 1);
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
checkBoxPreference.setChecked(false);
}
})
.create();
dialog.show();
} else {
Settings.Secure.putInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION, 0);
}
}
/**
* Handles the change of the preference for enabling/disabling an AccessibilityService.
*