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(); } } };