diff options
| -rw-r--r-- | services/accessibility/accessibility.aconfig | 10 | ||||
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java | 13 |
2 files changed, 23 insertions, 0 deletions
diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig index 015c35eed326..e10ecad20eb4 100644 --- a/services/accessibility/accessibility.aconfig +++ b/services/accessibility/accessibility.aconfig @@ -80,6 +80,16 @@ flag { } flag { + name: "reset_hover_event_timer_on_action_up" + namespace: "accessibility" + description: "Reset the timer for sending hover events on receiving ACTION_UP to guarantee the correct amount of time is available between taps." + bug: "326260351" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "scan_packages_without_lock" namespace: "accessibility" description: "Scans packages for accessibility service/activity info without holding the A11yMS lock" diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java index 3086ce1ceb40..4fc65bfeca58 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java @@ -852,6 +852,11 @@ public class TouchExplorer extends BaseEventStreamTransformation final int pointerIdBits = (1 << pointerId); if (mSendHoverEnterAndMoveDelayed.isPending()) { // If we have not delivered the enter schedule an exit. + if (Flags.resetHoverEventTimerOnActionUp()) { + // We cancel first to reset the time window so that the user has the full amount of + // time to do a multi tap. + mSendHoverEnterAndMoveDelayed.repost(); + } mSendHoverExitDelayed.post(event, rawEvent, pointerIdBits, policyFlags); } else { // The user is touch exploring so we send events for end. @@ -1554,6 +1559,14 @@ public class TouchExplorer extends BaseEventStreamTransformation } } + public void repost() { + // cancel without clearing + if (isPending()) { + mHandler.removeCallbacks(this); + mHandler.postDelayed(this, mDetermineUserIntentTimeout); + } + } + private boolean isPending() { return mHandler.hasCallbacks(this); } |