[RESTRICT AUTOMERGE] Fix the consistency of the event stream during interrupted and continued touch exploration.
aosp/2677516 fixed the event stream when we initiate a new touch exploration which avoids a crash, but this change along with the accompanying test makes sure that the event stream is consistent in the moment rather than waiting for the next ACTION_DOWN to fix it. Bug:286037469 Bug: 290719741 Test: atest TouchExplorerTest Test: atest TouchInteractionControllerTest Test: atest TouchInteractionControllerTest#testInterruptedSwipe_generatesConsistentEventStream --rerun-until-failure 100 Change-Id: I909e150ae7652842ada5f329f25222e9093a3e6d
This commit is contained in:
@@ -634,7 +634,7 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
MotionEvent event, MotionEvent rawEvent, int policyFlags) {
|
||||
switch (event.getActionMasked()) {
|
||||
case ACTION_DOWN:
|
||||
// We should have already received ACTION_DOWN. Ignore.
|
||||
handleActionDownStateTouchExploring(event, rawEvent, policyFlags);
|
||||
break;
|
||||
case ACTION_POINTER_DOWN:
|
||||
handleActionPointerDown(event, rawEvent, policyFlags);
|
||||
@@ -840,6 +840,15 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
}
|
||||
}
|
||||
|
||||
private void handleActionDownStateTouchExploring(
|
||||
MotionEvent event, MotionEvent rawEvent, int policyFlags) {
|
||||
// This is an interrupted and continued touch exploration. Maintain the consistency of the
|
||||
// event stream.
|
||||
mSendTouchExplorationEndDelayed.cancel();
|
||||
mSendTouchInteractionEndDelayed.cancel();
|
||||
sendTouchExplorationGestureStartAndHoverEnterIfNeeded(policyFlags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles move events while touch exploring. this is also where we drag or delegate based on
|
||||
* the number of fingers moving on the screen.
|
||||
@@ -1097,12 +1106,15 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the enter events if needed. Such events are hover enter and touch explore
|
||||
* gesture start.
|
||||
* Sends the enter events if needed. Such events are hover enter and touch explore gesture
|
||||
* start.
|
||||
*
|
||||
* @param policyFlags The policy flags associated with the event.
|
||||
*/
|
||||
private void sendTouchExplorationGestureStartAndHoverEnterIfNeeded(int policyFlags) {
|
||||
if (!mState.isTouchExploring()) {
|
||||
mDispatcher.sendAccessibilityEvent(TYPE_TOUCH_EXPLORATION_GESTURE_START);
|
||||
}
|
||||
MotionEvent event = mState.getLastInjectedHoverEvent();
|
||||
if (event != null && event.getActionMasked() == ACTION_HOVER_EXIT) {
|
||||
final int pointerIdBits = event.getPointerIdBits();
|
||||
@@ -1115,7 +1127,6 @@ public class TouchExplorer extends BaseEventStreamTransformation
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determines whether a two pointer gesture is a dragging one.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user