From b1d3e076af1d86cf72678cd15ec2ebc808805c9a Mon Sep 17 00:00:00 2001 From: Prabir Pradhan Date: Thu, 9 Dec 2021 23:51:52 -0800 Subject: Use SOURCE_CLASS_POINTER as the default source for MotionEvent This CL also adds a test to ensure that a pointer source is used by default when obtaining a MotionEvent, and that offsets are only applied to pointer sources. Bug: 207251886 Test: atest MotionEventTests Change-Id: Id40accc6d1238c940f139a18b26fa277dd6e11f9 --- core/java/android/view/MotionEvent.java | 2 +- .../src/android/view/MotionEventTest.java | 24 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index 40942ea7f551..80ffd40b564e 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -1860,7 +1860,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int deviceId, int edgeFlags) { return obtain(downTime, eventTime, action, x, y, pressure, size, metaState, - xPrecision, yPrecision, deviceId, edgeFlags, InputDevice.SOURCE_UNKNOWN, + xPrecision, yPrecision, deviceId, edgeFlags, InputDevice.SOURCE_CLASS_POINTER, DEFAULT_DISPLAY); } diff --git a/core/tests/coretests/src/android/view/MotionEventTest.java b/core/tests/coretests/src/android/view/MotionEventTest.java index b3450de80092..b6a182c8faf4 100644 --- a/core/tests/coretests/src/android/view/MotionEventTest.java +++ b/core/tests/coretests/src/android/view/MotionEventTest.java @@ -16,6 +16,7 @@ package android.view; +import static android.view.InputDevice.SOURCE_CLASS_POINTER; import static android.view.MotionEvent.ACTION_DOWN; import static android.view.MotionEvent.ACTION_POINTER_DOWN; import static android.view.MotionEvent.TOOL_TYPE_FINGER; @@ -189,4 +190,27 @@ public class MotionEventTest { assertEquals(950, (int) rot270.getX()); assertEquals(30, (int) rot270.getY()); } + + @Test + public void testUsesPointerSourceByDefault() { + final MotionEvent event = MotionEvent.obtain(0 /* downTime */, 0 /* eventTime */, + ACTION_DOWN, 0 /* x */, 0 /* y */, 0 /* metaState */); + assertTrue(event.isFromSource(SOURCE_CLASS_POINTER)); + } + + @Test + public void testLocationOffsetOnlyAppliedToNonPointerSources() { + final MotionEvent event = MotionEvent.obtain(0 /* downTime */, 0 /* eventTime */, + ACTION_DOWN, 10 /* x */, 20 /* y */, 0 /* metaState */); + event.offsetLocation(40, 50); + + // The offset should be applied since a pointer source is used by default. + assertEquals(50, (int) event.getX()); + assertEquals(70, (int) event.getY()); + + // The offset should not be applied if the source is changed to a non-pointer source. + event.setSource(InputDevice.SOURCE_JOYSTICK); + assertEquals(10, (int) event.getX()); + assertEquals(20, (int) event.getY()); + } } -- cgit v1.2.3-59-g8ed1b