Add Slow keys A11Y settings to PK settings page

Test: manual
Bug: 294546335
Change-Id: I9e20973e648d04b907e4d2225bd49b78e42d2089
This commit is contained in:
Vaibhav Devmurari
2024-01-19 14:48:55 +00:00
parent 5d0bd7555d
commit bd26b3a43e
3 changed files with 57 additions and 7 deletions

View File

@@ -4285,6 +4285,10 @@
<string name="bounce_keys">Bounce keys</string> <string name="bounce_keys">Bounce keys</string>
<!-- Summary text for the 'Bounce keys' preference sub-screen. [CHAR LIMIT=100] --> <!-- Summary text for the 'Bounce keys' preference sub-screen. [CHAR LIMIT=100] -->
<string name="bounce_keys_summary">Enable Bounce keys for physical keyboard accessibility</string> <string name="bounce_keys_summary">Enable Bounce keys for physical keyboard accessibility</string>
<!-- Title for the 'Slow keys' preference switch. [CHAR LIMIT=35] -->
<string name="slow_keys">Slow keys</string>
<!-- Summary text for the 'Slow keys' preference sub-screen. [CHAR LIMIT=100] -->
<string name="slow_keys_summary">Enable Slow keys for physical keyboard accessibility</string>
<!-- Title for the 'Sticky keys' preference switch. [CHAR LIMIT=35] --> <!-- Title for the 'Sticky keys' preference switch. [CHAR LIMIT=35] -->
<string name="sticky_keys">Sticky keys</string> <string name="sticky_keys">Sticky keys</string>
<!-- Summary text for the 'Sticky keys' preference sub-screen. [CHAR LIMIT=100] --> <!-- Summary text for the 'Sticky keys' preference sub-screen. [CHAR LIMIT=100] -->

View File

@@ -43,17 +43,23 @@
android:key="keyboard_a11y_category" android:key="keyboard_a11y_category"
android:title="@string/keyboard_a11y_category"> android:title="@string/keyboard_a11y_category">
<SwitchPreference
android:key="accessibility_bounce_keys"
android:title="@string/bounce_keys"
android:summary="@string/bounce_keys_summary"
android:defaultValue="false" />
<SwitchPreference <SwitchPreference
android:key="accessibility_sticky_keys" android:key="accessibility_sticky_keys"
android:title="@string/sticky_keys" android:title="@string/sticky_keys"
android:summary="@string/sticky_keys_summary" android:summary="@string/sticky_keys_summary"
android:defaultValue="false" /> android:defaultValue="false" />
<SwitchPreference
android:key="accessibility_slow_keys"
android:title="@string/slow_keys"
android:summary="@string/slow_keys_summary"
android:defaultValue="false" />
<SwitchPreference
android:key="accessibility_bounce_keys"
android:title="@string/bounce_keys"
android:summary="@string/bounce_keys_summary"
android:defaultValue="false" />
</PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -70,6 +70,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
private static final String KEYBOARD_A11Y_CATEGORY = "keyboard_a11y_category"; private static final String KEYBOARD_A11Y_CATEGORY = "keyboard_a11y_category";
private static final String SHOW_VIRTUAL_KEYBOARD_SWITCH = "show_virtual_keyboard_switch"; private static final String SHOW_VIRTUAL_KEYBOARD_SWITCH = "show_virtual_keyboard_switch";
private static final String ACCESSIBILITY_BOUNCE_KEYS = "accessibility_bounce_keys"; private static final String ACCESSIBILITY_BOUNCE_KEYS = "accessibility_bounce_keys";
private static final String ACCESSIBILITY_SLOW_KEYS = "accessibility_slow_keys";
private static final String ACCESSIBILITY_STICKY_KEYS = "accessibility_sticky_keys"; private static final String ACCESSIBILITY_STICKY_KEYS = "accessibility_sticky_keys";
private static final String KEYBOARD_SHORTCUTS_HELPER = "keyboard_shortcuts_helper"; private static final String KEYBOARD_SHORTCUTS_HELPER = "keyboard_shortcuts_helper";
private static final String MODIFIER_KEYS_SETTINGS = "modifier_keys_settings"; private static final String MODIFIER_KEYS_SETTINGS = "modifier_keys_settings";
@@ -78,6 +79,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
Secure.SHOW_IME_WITH_HARD_KEYBOARD); Secure.SHOW_IME_WITH_HARD_KEYBOARD);
private static final Uri sAccessibilityBounceKeysUri = Secure.getUriFor( private static final Uri sAccessibilityBounceKeysUri = Secure.getUriFor(
Secure.ACCESSIBILITY_BOUNCE_KEYS); Secure.ACCESSIBILITY_BOUNCE_KEYS);
private static final Uri sAccessibilitySlowKeysUri = Secure.getUriFor(
Secure.ACCESSIBILITY_SLOW_KEYS);
private static final Uri sAccessibilityStickyKeysUri = Secure.getUriFor( private static final Uri sAccessibilityStickyKeysUri = Secure.getUriFor(
Secure.ACCESSIBILITY_STICKY_KEYS); Secure.ACCESSIBILITY_STICKY_KEYS);
@@ -97,6 +100,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
@Nullable @Nullable
private TwoStatePreference mAccessibilityBounceKeys = null; private TwoStatePreference mAccessibilityBounceKeys = null;
@Nullable @Nullable
private TwoStatePreference mAccessibilitySlowKeys = null;
@Nullable
private TwoStatePreference mAccessibilityStickyKeys = null; private TwoStatePreference mAccessibilityStickyKeys = null;
@@ -127,6 +132,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
mKeyboardA11yCategory = Objects.requireNonNull(findPreference(KEYBOARD_A11Y_CATEGORY)); mKeyboardA11yCategory = Objects.requireNonNull(findPreference(KEYBOARD_A11Y_CATEGORY));
mAccessibilityBounceKeys = Objects.requireNonNull( mAccessibilityBounceKeys = Objects.requireNonNull(
mKeyboardA11yCategory.findPreference(ACCESSIBILITY_BOUNCE_KEYS)); mKeyboardA11yCategory.findPreference(ACCESSIBILITY_BOUNCE_KEYS));
mAccessibilitySlowKeys = Objects.requireNonNull(
mKeyboardA11yCategory.findPreference(ACCESSIBILITY_SLOW_KEYS));
mAccessibilityStickyKeys = Objects.requireNonNull( mAccessibilityStickyKeys = Objects.requireNonNull(
mKeyboardA11yCategory.findPreference(ACCESSIBILITY_STICKY_KEYS)); mKeyboardA11yCategory.findPreference(ACCESSIBILITY_STICKY_KEYS));
@@ -147,6 +154,9 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) { if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) {
mKeyboardA11yCategory.removePreference(mAccessibilityBounceKeys); mKeyboardA11yCategory.removePreference(mAccessibilityBounceKeys);
} }
if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
mKeyboardA11yCategory.removePreference(mAccessibilitySlowKeys);
}
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys); mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys);
} }
@@ -196,6 +206,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
mShowVirtualKeyboardSwitchPreferenceChangeListener); mShowVirtualKeyboardSwitchPreferenceChangeListener);
Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener( Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(
mAccessibilityBounceKeysSwitchPreferenceChangeListener); mAccessibilityBounceKeysSwitchPreferenceChangeListener);
Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(
mAccessibilitySlowKeysSwitchPreferenceChangeListener);
Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener( Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(
mAccessibilityStickyKeysSwitchPreferenceChangeListener); mAccessibilityStickyKeysSwitchPreferenceChangeListener);
registerSettingsObserver(); registerSettingsObserver();
@@ -208,6 +220,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
mIm.unregisterInputDeviceListener(this); mIm.unregisterInputDeviceListener(this);
Objects.requireNonNull(mShowVirtualKeyboardSwitch).setOnPreferenceChangeListener(null); Objects.requireNonNull(mShowVirtualKeyboardSwitch).setOnPreferenceChangeListener(null);
Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null); Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null);
Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(null);
Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null); Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null);
unregisterSettingsObserver(); unregisterSettingsObserver();
} }
@@ -315,10 +328,12 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
updateShowVirtualKeyboardSwitch(); updateShowVirtualKeyboardSwitch();
if (InputSettings.isAccessibilityBounceKeysFeatureEnabled() if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()
|| InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { || InputSettings.isAccessibilityStickyKeysFeatureEnabled()
|| InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2); Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2);
preferenceScreen.addPreference(mKeyboardA11yCategory); preferenceScreen.addPreference(mKeyboardA11yCategory);
updateAccessibilityBounceKeysSwitch(); updateAccessibilityBounceKeysSwitch();
updateAccessibilitySlowKeysSwitch();
updateAccessibilityStickyKeysSwitch(); updateAccessibilityStickyKeysSwitch();
} }
} }
@@ -356,6 +371,13 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
mContentObserver, mContentObserver,
UserHandle.myUserId()); UserHandle.myUserId());
} }
if (InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
contentResolver.registerContentObserver(
sAccessibilitySlowKeysUri,
false,
mContentObserver,
UserHandle.myUserId());
}
if (InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { if (InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
contentResolver.registerContentObserver( contentResolver.registerContentObserver(
sAccessibilityStickyKeysUri, sAccessibilityStickyKeysUri,
@@ -365,6 +387,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
} }
updateShowVirtualKeyboardSwitch(); updateShowVirtualKeyboardSwitch();
updateAccessibilityBounceKeysSwitch(); updateAccessibilityBounceKeysSwitch();
updateAccessibilitySlowKeysSwitch();
updateAccessibilityStickyKeysSwitch(); updateAccessibilityStickyKeysSwitch();
} }
@@ -385,6 +408,14 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
InputSettings.isAccessibilityBounceKeysEnabled(getContext())); InputSettings.isAccessibilityBounceKeysEnabled(getContext()));
} }
private void updateAccessibilitySlowKeysSwitch() {
if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilitySlowKeys).setChecked(
InputSettings.isAccessibilitySlowKeysEnabled(getContext()));
}
private void updateAccessibilityStickyKeysSwitch() { private void updateAccessibilityStickyKeysSwitch() {
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
return; return;
@@ -413,6 +444,13 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
return true; return true;
}; };
private final OnPreferenceChangeListener
mAccessibilitySlowKeysSwitchPreferenceChangeListener = (preference, newValue) -> {
InputSettings.setAccessibilitySlowKeysThreshold(getContext(),
((Boolean) newValue) ? 500 : 0);
return true;
};
private final OnPreferenceChangeListener private final OnPreferenceChangeListener
mAccessibilityStickyKeysSwitchPreferenceChangeListener = (preference, newValue) -> { mAccessibilityStickyKeysSwitchPreferenceChangeListener = (preference, newValue) -> {
InputSettings.setAccessibilityStickyKeysEnabled(getContext(), (Boolean) newValue); InputSettings.setAccessibilityStickyKeysEnabled(getContext(), (Boolean) newValue);
@@ -426,6 +464,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
updateShowVirtualKeyboardSwitch(); updateShowVirtualKeyboardSwitch();
} else if (sAccessibilityBounceKeysUri.equals(uri)) { } else if (sAccessibilityBounceKeysUri.equals(uri)) {
updateAccessibilityBounceKeysSwitch(); updateAccessibilityBounceKeysSwitch();
} else if (sAccessibilitySlowKeysUri.equals(uri)) {
updateAccessibilitySlowKeysSwitch();
} else if (sAccessibilityStickyKeysUri.equals(uri)) { } else if (sAccessibilityStickyKeysUri.equals(uri)) {
updateAccessibilityStickyKeysSwitch(); updateAccessibilityStickyKeysSwitch();
} }