<string name="accessibility_screen_magnification_navbar_summary">When magnification is turned on, use the Accessibility button at the bottom of the screen to quickly magnify.\n\n<b>To zoom</b>, tap the Accessibility button, then tap anywhere on the screen.\n<ul><li>Drag 2 or more fingers to scroll</li>\n<li>Pinch 2 or more fingers to adjust zoom</li></ul>\n\n<b>To zoom temporarily</b>, tap the Accessibility button, then touch & hold anywhere on the screen.\n<ul><li>Drag to move around the screen</li>\n<li>Lift finger to zoom out</li></ul>\n\nYou can’t zoom in on the keyboard or navigation bar.</string>
<!-- Summary text appearing on the accessibility preference screen to enable screen magnification from the nav bar when the feature is enabled, but the accessibility button is not configured correctly for the feature to be used [CHAR LIMIT=none] -->
<string name="accessibility_screen_magnification_navbar_configuration_warning">The Accessibility button is set to <xliff:g id="service" example="Select to Speak">%1$s</xliff:g>. To use magnification, touch & hold the Accessibility button, then select magnification.</string>
- <!-- Title for the preference to configure the accessibility shortcut. [CHAR LIMIT=35] -->
- <string name="accessibility_global_gesture_preference_title">Accessibility shortcut</string>
+ <!-- Title for the preference to configure the accessibility shortcut, which uses the volume keys. [CHAR LIMIT=35] -->
+ <string name="accessibility_global_gesture_preference_title">Volume key shortcut</string>
<!-- Title for the preference to choose the service that is turned on and off by the accessibility shortcut. [CHAR LIMIT=35] -->
<string name="accessibility_shortcut_service_title">Shortcut service</string>
<!-- Title for the switch preference that controls whether or not the accessibility shortcut works on the lock screen. [CHAR LIMIT=35] -->
<string name="accessibility_shortcut_service_on_lock_screen_title">Allow from lock screen</string>
<!-- Description of accessibility shortcut. [CHAR LIMIT=NONE] -->
- <string name="accessibility_shortcut_description">When the shortcut is on, you can press both volume buttons for 3 seconds to start an accessibility feature.</string>
+ <string name="accessibility_shortcut_description">When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature.</string>
<!-- Title for the accessibility preference to high contrast text. [CHAR LIMIT=35] -->
<string name="accessibility_toggle_high_text_contrast_preference_title">High contrast text</string>
<!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
protected void onInstallSwitchBarToggleSwitch() {
super.onInstallSwitchBarToggleSwitch();
mSwitchBar.addOnSwitchChangeListener((Switch switchView, boolean enabled) -> {
- onPreferenceToggled(Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, enabled);
+ Context context = getContext();
+ if (enabled && (getServiceInfo(context) == null)) {
+ // If no service is configured, we'll disable the shortcut shortly. Give the
+ // user a chance to select a service. We'll update the preferences when we resume.
+ Settings.Secure.putInt(
+ getContentResolver(), Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, 1);
+ mServicePreference.setEnabled(true);
+ mServicePreference.performClick();
+ } else {
+ onPreferenceToggled(Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, enabled);
+ }
});
}
@Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
Settings.Secure.putInt(getContentResolver(), preferenceKey, enabled ? 1 : 0);
+ updatePreferences();
}
private void updatePreferences() {
ContentResolver cr = getContentResolver();
+ Context context = getContext();
+ mServicePreference.setSummary(getServiceName(context));
+ if (getServiceInfo(context) == null) {
+ // If no service is configured, make sure the overall shortcut is turned off
+ Settings.Secure.putInt(
+ getContentResolver(), Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, 0);
+ }
boolean isEnabled = Settings.Secure
.getInt(cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_ENABLED, 1) == 1;
- mToggleSwitch.setChecked(isEnabled);
- CharSequence serviceName = getServiceName(getContext());
- mServicePreference.setSummary(serviceName);
+ mSwitchBar.setChecked(isEnabled);
mOnLockScreenSwitchPreference.setChecked(Settings.Secure.getInt(
cr, Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, 0) == 1);
- if (TextUtils.equals(serviceName, getString(R.string.accessibility_no_service_selected))) {
- // If there's no service configured, enabling the shortcut will have no effect
- // It should already be disabled, but force the switch to off just in case
- mToggleSwitch.setChecked(false);
- mToggleSwitch.setEnabled(false);
- mSwitchBar.setEnabled(false);
- } else {
- mToggleSwitch.setEnabled(true);
- mSwitchBar.setEnabled(true);
- }
+ // Only enable changing the service and lock screen behavior if the shortcut is on
+ mServicePreference.setEnabled(mToggleSwitch.isChecked());
+ mOnLockScreenSwitchPreference.setEnabled(mToggleSwitch.isChecked());
}
/**
* @return The name of the service or a string saying that none is selected.
*/
public static CharSequence getServiceName(Context context) {
- ComponentName shortcutServiceName = ComponentName.unflattenFromString(
- AccessibilityUtils.getShortcutTargetServiceComponentNameString(
- context, UserHandle.myUserId()));
- AccessibilityServiceInfo shortcutServiceInfo = AccessibilityManager.getInstance(context)
- .getInstalledServiceInfoWithComponentName(shortcutServiceName);
+ AccessibilityServiceInfo shortcutServiceInfo = getServiceInfo(context);
if (shortcutServiceInfo != null) {
return shortcutServiceInfo.getResolveInfo().loadLabel(context.getPackageManager());
}
return context.getString(R.string.accessibility_no_service_selected);
}
+ private static AccessibilityServiceInfo getServiceInfo(Context context) {
+ ComponentName shortcutServiceName = ComponentName.unflattenFromString(
+ AccessibilityUtils.getShortcutTargetServiceComponentNameString(
+ context, UserHandle.myUserId()));
+ return AccessibilityManager.getInstance(context)
+ .getInstalledServiceInfoWithComponentName(shortcutServiceName);
+ }
+
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
// This fragment is for details of the shortcut. Only the shortcut itself needs