summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-01-02 19:05:33 -0800
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2025-01-02 19:05:33 -0800
commit29fa2d4e480fd1e716f27f4b22ba95dfc89c84cd (patch)
treecdfa52f172cc01e790ee4f6dac4bfcefc56c4962
parent33a6bf252bd0d28a1fd72e6c763f03f28183d2ea (diff)
parentef3abf29323b1370052bcf94c36bdaaa8c5c88e7 (diff)
Merge "MotionEvent: Don't update private flags when setting flags from Java" into main am: ef3abf2932
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3431486 Change-Id: I9ff24c50e9a87809e5ed2bc59bdc64bf925813a5 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--core/jni/android_view_MotionEvent.cpp3
-rw-r--r--core/tests/coretests/src/android/view/MotionEventTest.java25
2 files changed, 27 insertions, 1 deletions
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index 240be3fe5534..c105a6098870 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -704,7 +704,8 @@ static void android_view_MotionEvent_nativeSetFlags(CRITICAL_JNI_PARAMS_COMMA jl
jint flags) {
MotionEvent* event = reinterpret_cast<MotionEvent*>(nativePtr);
// Prevent private flags from being used from Java.
- event->setFlags(flags & ~AMOTION_EVENT_PRIVATE_FLAG_MASK);
+ const int32_t privateFlags = event->getFlags() & AMOTION_EVENT_PRIVATE_FLAG_MASK;
+ event->setFlags((flags & ~AMOTION_EVENT_PRIVATE_FLAG_MASK) | privateFlags);
}
static jint android_view_MotionEvent_nativeGetEdgeFlags(CRITICAL_JNI_PARAMS_COMMA jlong nativePtr) {
diff --git a/core/tests/coretests/src/android/view/MotionEventTest.java b/core/tests/coretests/src/android/view/MotionEventTest.java
index d0f9a38720bf..419c05f5b8c1 100644
--- a/core/tests/coretests/src/android/view/MotionEventTest.java
+++ b/core/tests/coretests/src/android/view/MotionEventTest.java
@@ -49,9 +49,14 @@ public class MotionEventTest {
private static final int ID_SOURCE_MASK = 0x3 << 30;
private PointerCoords pointerCoords(float x, float y) {
+ return pointerCoords(x, y, 0f /*orientation*/);
+ }
+
+ private PointerCoords pointerCoords(float x, float y, float orientation) {
final var coords = new PointerCoords();
coords.x = x;
coords.y = y;
+ coords.orientation = orientation;
return coords;
}
@@ -295,4 +300,24 @@ public class MotionEventTest {
// Expected
}
}
+
+ @Test
+ public void testAxesAreNotAffectedByFlagChanges() {
+ final int pointerCount = 1;
+ final var properties = new PointerProperties[]{fingerProperties(0)};
+ final var coords = new PointerCoords[]{pointerCoords(20, 60, 0.1234f)};
+
+ final MotionEvent event = MotionEvent.obtain(0 /* downTime */,
+ 0 /* eventTime */, MotionEvent.ACTION_MOVE, pointerCount, properties, coords,
+ 0 /* metaState */, 0 /* buttonState */, 1 /* xPrecision */, 1 /* yPrecision */,
+ 0 /* deviceId */, 0 /* edgeFlags */, InputDevice.SOURCE_TOUCHSCREEN,
+ 0 /* flags */);
+
+ // Mark the event as tainted to update the MotionEvent flags.
+ event.setTainted(true);
+
+ assertEquals(20f, event.getX(), 0.0001);
+ assertEquals(60f, event.getY(), 0.0001);
+ assertEquals(0.1234f, event.getOrientation(), 0.0001);
+ }
}