Loading core/java/android/hardware/input/input_framework.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -61,3 +61,10 @@ flag { description: "Allows system to provide keyboard specific key drawables and shortcuts via config files" bug: "345440920" } flag { namespace: "input_native" name: "keyboard_a11y_mouse_keys" description: "Controls if the mouse keys accessibility feature for physical keyboard is available to the user" bug: "341799888" } core/java/android/provider/Settings.java +12 −0 Original line number Diff line number Diff line Loading @@ -12323,6 +12323,18 @@ public final class Settings { public static final String ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED = "accessibility_force_invert_color_enabled"; /** * Whether to enable mouse keys for Physical Keyboard accessibility. * * If set to true, key presses (of the mouse keys) on * physical keyboard will control mouse pointer on the display. * * @hide */ @Readable public static final String ACCESSIBILITY_MOUSE_KEYS_ENABLED = "accessibility_mouse_keys_enabled"; /** * Whether the Adaptive connectivity option is enabled. * Loading packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java +1 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ public class SecureSettings { Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_JOYSTICK_ENABLED, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED, Settings.Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED, Settings.Secure.ACCESSIBILITY_PINCH_TO_ZOOM_ANYWHERE_ENABLED, Settings.Secure.ACCESSIBILITY_SINGLE_FINGER_PANNING_ENABLED, Settings.Secure.ODI_CAPTIONS_VOLUME_UI_ENABLED, Loading packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +1 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,7 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS, ANY_LONG_VALIDATOR); VALIDATORS.put(Secure.ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS, ANY_LONG_VALIDATOR); VALIDATORS.put(Secure.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS, NONE_NEGATIVE_LONG_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.MANDATORY_BIOMETRICS, new InclusiveIntegerRangeValidator(0, 1)); } } services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java +26 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.annotation.MainThread; import android.annotation.NonNull; import android.content.Context; import android.graphics.Region; import android.hardware.input.InputManager; import android.os.Looper; import android.os.PowerManager; import android.os.SystemClock; import android.provider.Settings; Loading Loading @@ -54,6 +56,7 @@ import com.android.server.policy.WindowManagerPolicy; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Objects; import java.util.StringJoiner; /** Loading Loading @@ -158,6 +161,13 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo */ static final int FLAG_FEATURE_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP = 0x00001000; /** * Flag for enabling the Accessibility mouse key events feature. * * @see #setUserAndEnabledFeatures(int, int) */ static final int FLAG_FEATURE_MOUSE_KEYS = 0x00002000; static final int FEATURES_AFFECTING_MOTION_EVENTS = FLAG_FEATURE_INJECT_MOTION_EVENTS | FLAG_FEATURE_AUTOCLICK Loading Loading @@ -189,6 +199,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo private KeyboardInterceptor mKeyboardInterceptor; private MouseKeysInterceptor mMouseKeysInterceptor; private boolean mInstalled; private int mUserId; Loading Loading @@ -733,6 +745,15 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo // default display. addFirstEventHandler(Display.DEFAULT_DISPLAY, mKeyboardInterceptor); } if ((mEnabledFeatures & FLAG_FEATURE_MOUSE_KEYS) != 0) { mMouseKeysInterceptor = new MouseKeysInterceptor(mAms, Objects.requireNonNull(mContext.getSystemService( InputManager.class)), Looper.myLooper(), Display.DEFAULT_DISPLAY); addFirstEventHandler(Display.DEFAULT_DISPLAY, mMouseKeysInterceptor); } } /** Loading Loading @@ -816,6 +837,11 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mKeyboardInterceptor.onDestroy(); mKeyboardInterceptor = null; } if (mMouseKeysInterceptor != null) { mMouseKeysInterceptor.onDestroy(); mMouseKeysInterceptor = null; } } private MagnificationGestureHandler createMagnificationGestureHandler( Loading Loading
core/java/android/hardware/input/input_framework.aconfig +7 −0 Original line number Diff line number Diff line Loading @@ -61,3 +61,10 @@ flag { description: "Allows system to provide keyboard specific key drawables and shortcuts via config files" bug: "345440920" } flag { namespace: "input_native" name: "keyboard_a11y_mouse_keys" description: "Controls if the mouse keys accessibility feature for physical keyboard is available to the user" bug: "341799888" }
core/java/android/provider/Settings.java +12 −0 Original line number Diff line number Diff line Loading @@ -12323,6 +12323,18 @@ public final class Settings { public static final String ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED = "accessibility_force_invert_color_enabled"; /** * Whether to enable mouse keys for Physical Keyboard accessibility. * * If set to true, key presses (of the mouse keys) on * physical keyboard will control mouse pointer on the display. * * @hide */ @Readable public static final String ACCESSIBILITY_MOUSE_KEYS_ENABLED = "accessibility_mouse_keys_enabled"; /** * Whether the Adaptive connectivity option is enabled. * Loading
packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java +1 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ public class SecureSettings { Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_JOYSTICK_ENABLED, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED, Settings.Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED, Settings.Secure.ACCESSIBILITY_PINCH_TO_ZOOM_ANYWHERE_ENABLED, Settings.Secure.ACCESSIBILITY_SINGLE_FINGER_PANNING_ENABLED, Settings.Secure.ODI_CAPTIONS_VOLUME_UI_ENABLED, Loading
packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +1 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,7 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS, ANY_LONG_VALIDATOR); VALIDATORS.put(Secure.ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS, ANY_LONG_VALIDATOR); VALIDATORS.put(Secure.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS, NONE_NEGATIVE_LONG_VALIDATOR); VALIDATORS.put(Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.MANDATORY_BIOMETRICS, new InclusiveIntegerRangeValidator(0, 1)); } }
services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java +26 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.annotation.MainThread; import android.annotation.NonNull; import android.content.Context; import android.graphics.Region; import android.hardware.input.InputManager; import android.os.Looper; import android.os.PowerManager; import android.os.SystemClock; import android.provider.Settings; Loading Loading @@ -54,6 +56,7 @@ import com.android.server.policy.WindowManagerPolicy; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Objects; import java.util.StringJoiner; /** Loading Loading @@ -158,6 +161,13 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo */ static final int FLAG_FEATURE_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP = 0x00001000; /** * Flag for enabling the Accessibility mouse key events feature. * * @see #setUserAndEnabledFeatures(int, int) */ static final int FLAG_FEATURE_MOUSE_KEYS = 0x00002000; static final int FEATURES_AFFECTING_MOTION_EVENTS = FLAG_FEATURE_INJECT_MOTION_EVENTS | FLAG_FEATURE_AUTOCLICK Loading Loading @@ -189,6 +199,8 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo private KeyboardInterceptor mKeyboardInterceptor; private MouseKeysInterceptor mMouseKeysInterceptor; private boolean mInstalled; private int mUserId; Loading Loading @@ -733,6 +745,15 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo // default display. addFirstEventHandler(Display.DEFAULT_DISPLAY, mKeyboardInterceptor); } if ((mEnabledFeatures & FLAG_FEATURE_MOUSE_KEYS) != 0) { mMouseKeysInterceptor = new MouseKeysInterceptor(mAms, Objects.requireNonNull(mContext.getSystemService( InputManager.class)), Looper.myLooper(), Display.DEFAULT_DISPLAY); addFirstEventHandler(Display.DEFAULT_DISPLAY, mMouseKeysInterceptor); } } /** Loading Loading @@ -816,6 +837,11 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo mKeyboardInterceptor.onDestroy(); mKeyboardInterceptor = null; } if (mMouseKeysInterceptor != null) { mMouseKeysInterceptor.onDestroy(); mMouseKeysInterceptor = null; } } private MagnificationGestureHandler createMagnificationGestureHandler( Loading