From 684722c3999c32eebad25fe0386f2ba6e600e19b Mon Sep 17 00:00:00 2001 From: Peter_Liang Date: Wed, 9 Mar 2022 10:56:10 +0800 Subject: [PATCH] Fix that holding volume buttons to activate Extra dim feature doesn't do anything. Root cause: Original framework design which has 3 seconds restriction to prevent users from easily triggering the accessibility volume shortcut when first time using it. Solution: The system would bypass the 3 seconds restriction if users manually set any feature as the volume key shortcut. Bug: 202602908 Test: manual test Change-Id: Iace0804fc36809f7cf39d19850c1bbd8ba9fca02 --- core/java/android/provider/Settings.java | 11 +++++++++++ .../server/policy/PhoneWindowManager.java | 18 +++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index a6ad5e5863df6..8a45737354ae8 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -86,6 +86,7 @@ import android.util.Log; import android.util.MemoryIntArray; import android.view.Display; import android.view.MotionEvent; +import android.view.ViewConfiguration; import android.view.Window; import android.view.WindowManager.LayoutParams; import android.widget.Editor; @@ -7474,6 +7475,16 @@ public final class Settings { public static final String ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN = "accessibility_shortcut_dialog_shown"; + /** + * Setting specifying if the timeout restriction + * {@link ViewConfiguration#getAccessibilityShortcutKeyTimeout()} + * of the accessibility shortcut dialog is skipped. + * + * @hide + */ + public static final String SKIP_ACCESSIBILITY_SHORTCUT_DIALOG_TIMEOUT_RESTRICTION = + "skip_accessibility_shortcut_dialog_timeout_restriction"; + /** * Setting specifying the accessibility services, accessibility shortcut targets, * or features to be toggled via the accessibility shortcut. diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index e79148d52715d..66aeb3f4d0d9f 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1490,11 +1490,19 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private long getAccessibilityShortcutTimeout() { - ViewConfiguration config = ViewConfiguration.get(mContext); - return Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, mCurrentUserId) == 0 - ? config.getAccessibilityShortcutKeyTimeout() - : config.getAccessibilityShortcutKeyTimeoutAfterConfirmation(); + final ViewConfiguration config = ViewConfiguration.get(mContext); + final boolean hasDialogShown = Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0, mCurrentUserId) != 0; + final boolean skipTimeoutRestriction = + Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.SKIP_ACCESSIBILITY_SHORTCUT_DIALOG_TIMEOUT_RESTRICTION, 0, + mCurrentUserId) != 0; + + // If users manually set the volume key shortcut for any accessibility service, the + // system would bypass the timeout restriction of the shortcut dialog. + return hasDialogShown || skipTimeoutRestriction + ? config.getAccessibilityShortcutKeyTimeoutAfterConfirmation() + : config.getAccessibilityShortcutKeyTimeout(); } private long getScreenshotChordLongPressDelay() {