summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Prabir Pradhan <prabirmsp@google.com> 2024-06-06 02:20:17 +0000
committer Prabir Pradhan <prabirmsp@google.com> 2024-06-11 02:38:27 +0000
commit43a835023db95dd0e01d809cb74fd8f257305ddb (patch)
tree429f42198f6d668452f09b142e3f5fc89a51b382
parent48d4494167a97428f0dfc4fbd55ef7c1f2cf6790 (diff)
MotionEvent: Differentiate directional support for AXIS_ORIENTATION
Ensure the private flags introduced in this topic do not get sent to java. Flag: NONE small behavioral change, where flagging is not required Bug: 263310669 Test: atest TouchScreenTest libinput_tests inputflinger_tests MotionEventTest Change-Id: Ideef3eceaef3d8d2a55a545d23bef5e9e372bac4
-rw-r--r--core/jni/android_view_MotionEvent.cpp10
-rw-r--r--native/android/input.cpp3
2 files changed, 10 insertions, 3 deletions
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index f914bee8da1b..cb5af91da25f 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -360,6 +360,10 @@ static jlong android_view_MotionEvent_nativeInitialize(
return 0;
}
pointerCoordsToNative(env, pointerCoordsObj, xOffset, yOffset, &rawPointerCoords[i]);
+ if (rawPointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION) != 0.f) {
+ flags |= AMOTION_EVENT_PRIVATE_FLAG_SUPPORTS_ORIENTATION |
+ AMOTION_EVENT_PRIVATE_FLAG_SUPPORTS_DIRECTIONAL_ORIENTATION;
+ }
env->DeleteLocalRef(pointerCoordsObj);
}
@@ -685,13 +689,15 @@ static jboolean android_view_MotionEvent_nativeIsTouchEvent(
static jint android_view_MotionEvent_nativeGetFlags(CRITICAL_JNI_PARAMS_COMMA jlong nativePtr) {
MotionEvent* event = reinterpret_cast<MotionEvent*>(nativePtr);
- return event->getFlags();
+ // Prevent private flags from being used in Java.
+ return event->getFlags() & ~AMOTION_EVENT_PRIVATE_FLAG_MASK;
}
static void android_view_MotionEvent_nativeSetFlags(CRITICAL_JNI_PARAMS_COMMA jlong nativePtr,
jint flags) {
MotionEvent* event = reinterpret_cast<MotionEvent*>(nativePtr);
- event->setFlags(flags);
+ // Prevent private flags from being used from Java.
+ event->setFlags(flags & ~AMOTION_EVENT_PRIVATE_FLAG_MASK);
}
static jint android_view_MotionEvent_nativeGetEdgeFlags(CRITICAL_JNI_PARAMS_COMMA jlong nativePtr) {
diff --git a/native/android/input.cpp b/native/android/input.cpp
index 0a223142954f..9a8cda357774 100644
--- a/native/android/input.cpp
+++ b/native/android/input.cpp
@@ -100,7 +100,8 @@ int32_t AMotionEvent_getAction(const AInputEvent* motion_event) {
}
int32_t AMotionEvent_getFlags(const AInputEvent* motion_event) {
- return static_cast<const MotionEvent*>(motion_event)->getFlags();
+ return static_cast<const MotionEvent*>(motion_event)->getFlags() &
+ ~AMOTION_EVENT_PRIVATE_FLAG_MASK;
}
int32_t AMotionEvent_getMetaState(const AInputEvent* motion_event) {