diff options
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java | 23 |
1 files changed, 16 insertions, 7 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 9a257e54cf41..777c7c8e0da9 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java @@ -1417,20 +1417,29 @@ public class TouchExplorer extends BaseEventStreamTransformation mSendTouchExplorationEndDelayed.forceSendAndRemove(); } } - if (!mState.isTouchInteracting()) { + if (!mState.isTouchInteracting() && !mState.isDragging()) { // It makes no sense to delegate. - Slog.e(LOG_TAG, "Error: Trying to delegate from " - + mState.getStateSymbolicName(mState.getState())); + Slog.e( + LOG_TAG, + "Error: Trying to delegate from " + + mState.getStateSymbolicName(mState.getState())); return; } - mState.startDelegating(); - MotionEvent prototype = mState.getLastReceivedEvent(); - if (prototype == null) { + MotionEvent event = mState.getLastReceivedEvent(); + MotionEvent rawEvent = mState.getLastReceivedRawEvent(); + if (event == null || rawEvent == null) { Slog.d(LOG_TAG, "Unable to start delegating: unable to get last received event."); return; } int policyFlags = mState.getLastReceivedPolicyFlags(); - mDispatcher.sendDownForAllNotInjectedPointers(prototype, policyFlags); + if (mState.isDragging()) { + // Send an event to the end of the drag gesture. + mDispatcher.sendMotionEvent( + event, ACTION_UP, rawEvent, ALL_POINTER_ID_BITS, policyFlags); + } + mState.startDelegating(); + // Deliver all pointers to the view hierarchy. + mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags); } } |