From 78b485a3bb2107c163dc9d0bac2c758000f68743 Mon Sep 17 00:00:00 2001 From: Asmita Poddar Date: Fri, 12 Jul 2024 14:32:57 +0000 Subject: [PATCH] Add Mouse keys A11Y settings to PK settings page Add the mouse keys toggle in the Settings under System > Keybord > Physical Keyboard > Mouse Keys. The toggle is shown when a physical keyboard is connected. DD: go/mouse-keys-android Bug: 341799888 Flag: com.android.hardware.input.keyboard_a11y_mouse_keys Test: manual Steps: 1. Connect a physical keyboard 2. Toggle the mouse keys setting to switch on the feature. 3. Mouse keys is enabled. 4. Switch off the mouse keys toggle under the setting. 5. Mouse keys is disabled. Change-Id: Ifda8c93fcc1f8b7c1fb2eccb7c91266360ff1fc8 --- res/values/strings.xml | 4 ++ res/xml/physical_keyboard_settings.xml | 6 +++ .../inputmethod/PhysicalKeyboardFragment.java | 42 ++++++++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3063f777449..1b4986b82ca 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4451,6 +4451,10 @@ Sticky keys Press one key at a time for shortcuts instead of holding keys down together + + Mouse keys + + Use the physical keyboard to control the mouse. Keyboard shortcuts diff --git a/res/xml/physical_keyboard_settings.xml b/res/xml/physical_keyboard_settings.xml index dd2b7090acd..20636186bd4 100644 --- a/res/xml/physical_keyboard_settings.xml +++ b/res/xml/physical_keyboard_settings.xml @@ -53,5 +53,11 @@ android:title="@string/slow_keys" android:defaultValue="false" /> + + diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java index 29292a17c65..bafec326e5a 100644 --- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java @@ -73,6 +73,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment 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_MOUSE_KEYS = "accessibility_mouse_keys"; private static final String KEYBOARD_SHORTCUTS_HELPER = "keyboard_shortcuts_helper"; private static final String MODIFIER_KEYS_SETTINGS = "modifier_keys_settings"; private static final String EXTRA_AUTO_SELECTION = "auto_selection"; @@ -84,6 +85,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment Secure.ACCESSIBILITY_SLOW_KEYS); private static final Uri sAccessibilityStickyKeysUri = Secure.getUriFor( Secure.ACCESSIBILITY_STICKY_KEYS); + private static final Uri sAccessibilityMouseKeysUri = Secure.getUriFor( + Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED); public static final int BOUNCE_KEYS_THRESHOLD = 500; public static final int SLOW_KEYS_THRESHOLD = 500; @@ -104,7 +107,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment private TwoStatePreference mAccessibilitySlowKeys = null; @Nullable private TwoStatePreference mAccessibilityStickyKeys = null; - + @Nullable + private TwoStatePreference mAccessibilityMouseKeys = null; private Intent mIntentWaitingForResult; private boolean mSupportsFirmwareUpdate; @@ -138,6 +142,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment getContext().getString(R.string.slow_keys_summary, SLOW_KEYS_THRESHOLD)); mAccessibilityStickyKeys = Objects.requireNonNull( mKeyboardA11yCategory.findPreference(ACCESSIBILITY_STICKY_KEYS)); + mAccessibilityMouseKeys = Objects.requireNonNull( + mKeyboardA11yCategory.findPreference(ACCESSIBILITY_MOUSE_KEYS)); FeatureFactory featureFactory = FeatureFactory.getFeatureFactory(); mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider(); @@ -160,6 +166,9 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) { mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys); } + if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { + mKeyboardA11yCategory.removePreference(mAccessibilityMouseKeys); + } InputDeviceIdentifier inputDeviceIdentifier = activity.getIntent().getParcelableExtra( KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER, InputDeviceIdentifier.class); @@ -208,6 +217,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment mAccessibilitySlowKeysSwitchPreferenceChangeListener); Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener( mAccessibilityStickyKeysSwitchPreferenceChangeListener); + Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener( + mAccessibilityMouseKeysSwitchPreferenceChangeListener); registerSettingsObserver(); } @@ -219,6 +230,7 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null); Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(null); Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null); + Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener(null); unregisterSettingsObserver(); } @@ -309,12 +321,14 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment if (InputSettings.isAccessibilityBounceKeysFeatureEnabled() || InputSettings.isAccessibilityStickyKeysFeatureEnabled() - || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) { + || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled() + || InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2); preferenceScreen.addPreference(mKeyboardA11yCategory); updateAccessibilityBounceKeysSwitch(); updateAccessibilitySlowKeysSwitch(); updateAccessibilityStickyKeysSwitch(); + updateAccessibilityMouseKeysSwitch(); } } @@ -365,9 +379,17 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment mContentObserver, UserHandle.myUserId()); } + if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { + contentResolver.registerContentObserver( + sAccessibilityMouseKeysUri, + false, + mContentObserver, + UserHandle.myUserId()); + } updateAccessibilityBounceKeysSwitch(); updateAccessibilitySlowKeysSwitch(); updateAccessibilityStickyKeysSwitch(); + updateAccessibilityMouseKeysSwitch(); } private void unregisterSettingsObserver() { @@ -398,6 +420,14 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment InputSettings.isAccessibilityStickyKeysEnabled(getContext())); } + private void updateAccessibilityMouseKeysSwitch() { + if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) { + return; + } + Objects.requireNonNull(mAccessibilityMouseKeys).setChecked( + InputSettings.isAccessibilityMouseKeysEnabled(getContext())); + } + private void toggleKeyboardShortcutsMenu() { getActivity().requestShowKeyboardShortcuts(); } @@ -422,6 +452,12 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment return true; }; + private final OnPreferenceChangeListener + mAccessibilityMouseKeysSwitchPreferenceChangeListener = (preference, newValue) -> { + InputSettings.setAccessibilityMouseKeysEnabled(getContext(), (Boolean) newValue); + return true; + }; + private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) { @Override public void onChange(boolean selfChange, Uri uri) { @@ -431,6 +467,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment updateAccessibilitySlowKeysSwitch(); } else if (sAccessibilityStickyKeysUri.equals(uri)) { updateAccessibilityStickyKeysSwitch(); + } else if (sAccessibilityMouseKeysUri.equals(uri)) { + updateAccessibilityMouseKeysSwitch(); } } };