diff options
author | 2024-01-17 15:30:41 +0000 | |
---|---|---|
committer | 2024-02-14 09:17:26 +0000 | |
commit | 982aa9d78ce91db1a5efe7afd75e586756ba32aa (patch) | |
tree | 06d655909e44e77de3bb417eb285148d8cc747f8 | |
parent | 9798b977ae05283fb2b379de80d2f18d8fd89f74 (diff) |
Add NDK API to obtain Java InputEvent from Native AInputEvent
This CL adds an NDK API to obtain a copy of native AInputEvent as Java
InputEvent.
Test: atest MotionEventTest KeyEventTest
Bug: 298948992
Change-Id: Ia8ce8ab2bdfc54289eb2402a1beaee68dd1030b0
-rw-r--r-- | native/android/input.cpp | 17 | ||||
-rw-r--r-- | native/android/libandroid.map.txt | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/native/android/input.cpp b/native/android/input.cpp index 64e8efeaa4e8..6efb0280ac02 100644 --- a/native/android/input.cpp +++ b/native/android/input.cpp @@ -314,6 +314,23 @@ const AInputEvent* AMotionEvent_fromJava(JNIEnv* env, jobject motionEvent) { return event; } +jobject AInputEvent_toJava(JNIEnv* env, const AInputEvent* aInputEvent) { + LOG_ALWAYS_FATAL_IF(aInputEvent == nullptr, "Expected aInputEvent to be non-null"); + const int32_t eventType = AInputEvent_getType(aInputEvent); + switch (eventType) { + case AINPUT_EVENT_TYPE_MOTION: + return android::android_view_MotionEvent_obtainAsCopy(env, + static_cast<const MotionEvent&>( + *aInputEvent)); + case AINPUT_EVENT_TYPE_KEY: + return android::android_view_KeyEvent_fromNative(env, + static_cast<const KeyEvent&>( + *aInputEvent)); + default: + LOG_ALWAYS_FATAL("Unexpected event type %d in AInputEvent_toJava.", eventType); + } +} + void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper, int ident, ALooper_callbackFunc callback, void* data) { InputQueue* iq = static_cast<InputQueue*>(queue); diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt index 960510879a4c..3302265fb80c 100644 --- a/native/android/libandroid.map.txt +++ b/native/android/libandroid.map.txt @@ -90,6 +90,7 @@ LIBANDROID { AInputEvent_getSource; AInputEvent_getType; AInputEvent_release; # introduced=31 + AInputEvent_toJava; # introduced=35 AInputQueue_attachLooper; AInputQueue_detachLooper; AInputQueue_finishEvent; |