diff options
| -rw-r--r-- | core/java/android/view/MotionEvent.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index cdf5eec32fec..70e18963d921 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -2197,6 +2197,9 @@ public final class MotionEvent extends InputEvent implements Parcelable { float xOffset, float yOffset, float xPrecision, float yPrecision, long downTimeNanos, long eventTimeNanos, int pointerCount, PointerProperties[] pointerIds, PointerCoords[] pointerCoords) { + if (action == ACTION_CANCEL) { + flags |= FLAG_CANCELED; + } mNativePtr = nativeInitialize(mNativePtr, deviceId, source, displayId, action, flags, edgeFlags, metaState, buttonState, classification, xOffset, yOffset, xPrecision, yPrecision, downTimeNanos, eventTimeNanos, pointerCount, pointerIds, @@ -2387,6 +2390,11 @@ public final class MotionEvent extends InputEvent implements Parcelable { nativeSetFlags(mNativePtr, tainted ? flags | FLAG_TAINTED : flags & ~FLAG_TAINTED); } + private void setCanceled(boolean canceled) { + final int flags = getFlags(); + nativeSetFlags(mNativePtr, canceled ? flags | FLAG_CANCELED : flags & ~FLAG_CANCELED); + } + /** @hide */ public boolean isTargetAccessibilityFocus() { final int flags = getFlags(); @@ -3510,6 +3518,14 @@ public final class MotionEvent extends InputEvent implements Parcelable { * Sets this event's action. */ public final void setAction(int action) { + final int actionMasked = action & ACTION_MASK; + if (actionMasked == ACTION_CANCEL) { + setCanceled(true); + } else if (actionMasked == ACTION_POINTER_UP) { + // Do nothing - we don't know what the real intent here is + } else { + setCanceled(false); + } nativeSetAction(mNativePtr, action); } @@ -4157,6 +4173,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { /** @hide */ @Override public final void cancel() { + setCanceled(true); setAction(ACTION_CANCEL); } |