summaryrefslogtreecommitdiff
path: root/native/android/input.cpp
diff options
context:
space:
mode:
author Arpit Singh <arpitks@google.com> 2024-01-17 15:30:41 +0000
committer Arpit Singh <arpitks@google.com> 2024-02-14 09:17:26 +0000
commit982aa9d78ce91db1a5efe7afd75e586756ba32aa (patch)
tree06d655909e44e77de3bb417eb285148d8cc747f8 /native/android/input.cpp
parent9798b977ae05283fb2b379de80d2f18d8fd89f74 (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
Diffstat (limited to 'native/android/input.cpp')
-rw-r--r--native/android/input.cpp17
1 files changed, 17 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);