From a132f03d1c7d6c0369af9a40a8c60882a520f933 Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Thu, 3 Nov 2022 10:03:32 +0000 Subject: [PATCH] Toggle for disabling stylus buttons. This change enables users to disable stylus button pressed from the Stylus Connected Device details Settings page. Bug: b/251199452 Test: StylusDevicesControllerTest Change-Id: Iab293cb91dec294026f3c8a96201a3d8e883b6bb --- core/java/android/provider/Settings.java | 9 +++++++++ .../src/android/provider/SettingsBackupTest.java | 1 + .../android/server/policy/PhoneWindowManager.java | 12 +++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 52b1adb876fcf..c999ac25e293a 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7205,6 +7205,15 @@ public final class Settings { @SuppressLint("NoSettingsProvider") public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard"; + /** + * Whether stylus button presses are disabled. This is a boolean that + * determines if stylus buttons are ignored. + * + * @hide + */ + @SuppressLint("NoSettingsProvider") + public static final String STYLUS_BUTTONS_DISABLED = "stylus_buttons_disabled"; + /** * Host name and port for global http proxy. Uses ':' seperator for * between host and port. diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java index f5c9bcd763b4b..f99745d3dbdd6 100644 --- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java @@ -770,6 +770,7 @@ public class SettingsBackupTest { Settings.Secure.SLEEP_TIMEOUT, Settings.Secure.SMS_DEFAULT_APPLICATION, Settings.Secure.SPELL_CHECKER_ENABLED, // Intentionally removed in Q + Settings.Secure.STYLUS_BUTTONS_DISABLED, Settings.Secure.TRUST_AGENTS_INITIALIZED, Settings.Secure.KNOWN_TRUST_AGENTS_INITIALIZED, Settings.Secure.TV_APP_USES_NON_SYSTEM_INPUTS, diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 3aa333aacdb69..553881c8e7add 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -151,6 +151,7 @@ import android.os.Vibrator; import android.provider.DeviceConfig; import android.provider.MediaStore; import android.provider.Settings; +import android.provider.Settings.Secure; import android.service.dreams.DreamManagerInternal; import android.service.dreams.DreamService; import android.service.dreams.IDreamManager; @@ -516,6 +517,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int mDoublePressOnStemPrimaryBehavior; int mTriplePressOnStemPrimaryBehavior; int mLongPressOnStemPrimaryBehavior; + boolean mStylusButtonsDisabled = false; boolean mHasSoftInput = false; boolean mHapticTextHandleEnabled; boolean mUseTvRouting; @@ -771,6 +773,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { resolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE), false, this, UserHandle.USER_ALL); + resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.STYLUS_BUTTONS_DISABLED), false, this, + UserHandle.USER_ALL); updateSettings(); } @@ -2560,6 +2565,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { Settings.Global.KEY_CHORD_POWER_VOLUME_UP, mContext.getResources().getInteger( com.android.internal.R.integer.config_keyChordPowerVolumeUp)); + + mStylusButtonsDisabled = Settings.Secure.getIntForUser(resolver, + Secure.STYLUS_BUTTONS_DISABLED, 0, UserHandle.USER_CURRENT) == 1; } if (updateRotation) { updateRotation(true); @@ -4183,7 +4191,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { case KeyEvent.KEYCODE_DEMO_APP_3: case KeyEvent.KEYCODE_DEMO_APP_4: { // TODO(b/254604589): Dispatch KeyEvent to System UI. - sendSystemKeyToStatusBarAsync(keyCode); + if (!mStylusButtonsDisabled) { + sendSystemKeyToStatusBarAsync(keyCode); + } // Just drop if keys are not intercepted for direct key. result &= ~ACTION_PASS_TO_USER;