From 0bc3cc9c2fdc18eb305088adb9be72953df14473 Mon Sep 17 00:00:00 2001 From: Zachary Kuznia Date: Wed, 17 Feb 2016 18:57:47 -0800 Subject: [PATCH] Fix crash when cancelling an accessibility gesture with ACTION_UP. b/27090049 Change-Id: I7a5b65c4e96513539d820c9a2bef99272fb24680 (cherry picked from commit 3951e3547f2ebb5ec228b8776855e9f244b1e9e9) --- .../server/accessibility/TouchExplorer.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java index 9e6cd002e8894..3ecff405d7566 100644 --- a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java @@ -467,17 +467,18 @@ class TouchExplorer implements EventStreamTransformation, AccessibilityGestureDe if (mCurrentState == STATE_GESTURE_DETECTING) { endGestureDetection(); } else if (mCurrentState == STATE_TOUCH_EXPLORING) { - final int pointerId = mReceivedPointerTracker.getPrimaryPointerId(); - final int pointerIdBits = (1 << pointerId); + // If the finger is still moving, pass the event on. + if (event.getActionMasked() == MotionEvent.ACTION_MOVE) { + final int pointerId = mReceivedPointerTracker.getPrimaryPointerId(); + final int pointerIdBits = (1 << pointerId); - // Cache the event until we discern exploration from gesturing. - mSendHoverEnterAndMoveDelayed.addEvent(event); - - // We have just decided that the user is touch, - // exploring so start sending events. - mSendHoverEnterAndMoveDelayed.forceSendAndRemove(); - mSendHoverExitDelayed.cancel(); - sendMotionEvent(event, MotionEvent.ACTION_HOVER_MOVE, pointerIdBits, policyFlags); + // We have just decided that the user is touch, + // exploring so start sending events. + mSendHoverEnterAndMoveDelayed.addEvent(event); + mSendHoverEnterAndMoveDelayed.forceSendAndRemove(); + mSendHoverExitDelayed.cancel(); + sendMotionEvent(event, MotionEvent.ACTION_HOVER_MOVE, pointerIdBits, policyFlags); + } } }