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
This commit is contained in:
Asmita Poddar
2024-07-12 14:32:57 +00:00
parent c8c8c53760
commit 78b485a3bb
3 changed files with 50 additions and 2 deletions

View File

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