diff options
author | 2024-06-06 02:20:17 +0000 | |
---|---|---|
committer | 2024-06-11 02:38:27 +0000 | |
commit | 43a835023db95dd0e01d809cb74fd8f257305ddb (patch) | |
tree | 429f42198f6d668452f09b142e3f5fc89a51b382 | |
parent | 48d4494167a97428f0dfc4fbd55ef7c1f2cf6790 (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.cpp | 10 | ||||
-rw-r--r-- | native/android/input.cpp | 3 |
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) { |