diff options
| -rw-r--r-- | core/java/android/provider/Settings.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/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 5191c9583379..5bd77abc277f 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; @@ -7477,6 +7478,16 @@ public final class Settings { "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 5aa81ac9086d..999428a5f35b 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1491,11 +1491,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() { |