From 466c18a33b7b9fed4c43063a701a941417dfe7e2 Mon Sep 17 00:00:00 2001 From: Ameer Armaly Date: Tue, 8 Mar 2022 10:03:18 -0800 Subject: [PATCH] TouchExplorer: do not crash when the user lifts a finger while dragging. Fix: 223396885 Test: Manual. Perform two-finger drag repeatedly. Test: atest TouchExplorerTest Change-Id: I5e5d8c69e4d1541048c91fbda20ff9d27912d21b --- .../server/accessibility/gestures/TouchExplorer.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 e20b15a3e8073..6846b2e3e6f73 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java @@ -1006,12 +1006,10 @@ public class TouchExplorer extends BaseEventStreamTransformation } break; case ACTION_POINTER_UP: - if (event.getPointerId(GestureUtils.getActionIndex(event)) == mDraggingPointerId) { mDraggingPointerId = INVALID_POINTER_ID; // Send an event to the end of the drag gesture. mDispatcher.sendMotionEvent( event, ACTION_UP, rawEvent, pointerIdBits, policyFlags); - } break; case ACTION_UP: if (event.getPointerId(GestureUtils.getActionIndex(event)) == mDraggingPointerId) { @@ -1146,6 +1144,10 @@ public class TouchExplorer extends BaseEventStreamTransformation * closet to an edge of the screen. */ private void computeDraggingPointerIdIfNeeded(MotionEvent event) { + if (event.getPointerCount() != 2) { + mDraggingPointerId = INVALID_POINTER_ID; + return; + } if (mDraggingPointerId != INVALID_POINTER_ID) { // If we have a valid pointer ID, we should be good final int pointerIndex = event.findPointerIndex(mDraggingPointerId);