Exception if receive move withouth down

Throw an IllegalStateException if recevie touch move without down,
that could give an explicit feedback about GestureDetector may not
receive the full touch stream.

Bug: 149578486
Test: manual
Change-Id: I644ec1bebbca66dd0f0c219b63a6478b1290d1e1
This commit is contained in:
arthurhung
2020-04-27 12:57:26 +08:00
parent 5749a3074f
commit a0a20dc23b

View File

@@ -288,6 +288,11 @@ public class GestureDetector {
*/
private VelocityTracker mVelocityTracker;
/**
* True if the detector can throw exception when touch steam is unexpected .
*/
private boolean mExceptionForTouchStream;
/**
* Consistency verifier for debugging purposes.
*/
@@ -467,6 +472,8 @@ public class GestureDetector {
mTouchSlopSquare = touchSlop * touchSlop;
mDoubleTapTouchSlopSquare = doubleTapTouchSlop * doubleTapTouchSlop;
mDoubleTapSlopSquare = doubleTapSlop * doubleTapSlop;
mExceptionForTouchStream = context != null
&& context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R;
}
/**
@@ -639,6 +646,13 @@ public class GestureDetector {
break;
case MotionEvent.ACTION_MOVE:
if (mExceptionForTouchStream && !mStillDown) {
throw new IllegalStateException("Incomplete event stream received: "
+ "Received ACTION_MOVE before ACTION_DOWN. ACTION_DOWN must precede "
+ "ACTION_MOVE following ACTION_UP or ACTION_CANCEL, or when this "
+ "GestureDetector has not yet received any events.");
}
if (mInLongPress || mInContextClick) {
break;
}