From 86df7e4214a208632b1be0882e00b7d0a70ec317 Mon Sep 17 00:00:00 2001 From: Jim Blackler Date: Wed, 1 Sep 2021 16:24:23 +0100 Subject: [PATCH] Give access to the native InputQueue to all native applications. Bug: 116830907 Test: atest android.view.cts.InputQueueTest#testNativeInputQueue Change-Id: Ia7741ac4922afeeca334266caef3331b521f87e4 --- core/jni/android_view_InputQueue.cpp | 8 ++++++++ .../jni/include/android_runtime/android_view_InputQueue.h | 2 ++ native/android/input.cpp | 4 ++++ native/android/libandroid.map.txt | 1 + 4 files changed, 15 insertions(+) diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp index 70a9be740810b..b910d1664ad18 100644 --- a/core/jni/android_view_InputQueue.cpp +++ b/core/jni/android_view_InputQueue.cpp @@ -39,6 +39,7 @@ namespace android { static struct { jmethodID finishInputEvent; + jmethodID getNativePtr; } gInputQueueClassInfo; enum { @@ -263,8 +264,15 @@ int register_android_view_InputQueue(JNIEnv* env) jclass clazz = FindClassOrDie(env, kInputQueuePathName); gInputQueueClassInfo.finishInputEvent = GetMethodIDOrDie(env, clazz, "finishInputEvent", "(JZ)V"); + gInputQueueClassInfo.getNativePtr = GetMethodIDOrDie(env, clazz, "getNativePtr", "()J"); return RegisterMethodsOrDie(env, kInputQueuePathName, g_methods, NELEM(g_methods)); } +AInputQueue* android_view_InputQueue_getNativePtr(jobject inputQueue) { + JNIEnv* env = AndroidRuntime::getJNIEnv(); + jlong ptr = env->CallLongMethod(inputQueue, gInputQueueClassInfo.getNativePtr); + return reinterpret_cast(ptr); +} + } // namespace android diff --git a/core/jni/include/android_runtime/android_view_InputQueue.h b/core/jni/include/android_runtime/android_view_InputQueue.h index ac8da586eed99..c1b611cf303ea 100644 --- a/core/jni/include/android_runtime/android_view_InputQueue.h +++ b/core/jni/include/android_runtime/android_view_InputQueue.h @@ -80,6 +80,8 @@ private: Vector > mFinishedEvents; }; +extern AInputQueue* android_view_InputQueue_getNativePtr(jobject inputQueue); + } // namespace android #endif diff --git a/native/android/input.cpp b/native/android/input.cpp index 8eeb9555c51c5..4de2c23e62b85 100644 --- a/native/android/input.cpp +++ b/native/android/input.cpp @@ -329,3 +329,7 @@ void AInputQueue_finishEvent(AInputQueue* queue, AInputEvent* event, int handled InputEvent* e = static_cast(event); iq->finishEvent(e, handled != 0); } + +AInputQueue* AInputQueue_fromJava(jobject inputQueue) { + return android::android_view_InputQueue_getNativePtr(inputQueue); +} diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt index 29c1d8cc1385a..f00eef2f1b001 100644 --- a/native/android/libandroid.map.txt +++ b/native/android/libandroid.map.txt @@ -91,6 +91,7 @@ LIBANDROID { AInputQueue_attachLooper; AInputQueue_detachLooper; AInputQueue_finishEvent; + AInputQueue_fromJava; # introduced=Tiramisu AInputQueue_getEvent; AInputQueue_hasEvents; AInputQueue_preDispatchEvent;