Give access to the native InputQueue to all native applications.

Bug: 116830907
Test: atest android.view.cts.InputQueueTest#testNativeInputQueue
Change-Id: Ia7741ac4922afeeca334266caef3331b521f87e4
diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp
index 70a9be7..b910d16 100644
--- a/core/jni/android_view_InputQueue.cpp
+++ b/core/jni/android_view_InputQueue.cpp
@@ -39,6 +39,7 @@
 
 static struct {
     jmethodID finishInputEvent;
+    jmethodID getNativePtr;
 } gInputQueueClassInfo;
 
 enum {
@@ -263,8 +264,15 @@
     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<AInputQueue*>(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 ac8da58..c1b611c 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 @@
     Vector<key_value_pair_t<InputEvent*, bool> > 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 8eeb955..4de2c23 100644
--- a/native/android/input.cpp
+++ b/native/android/input.cpp
@@ -329,3 +329,7 @@
     InputEvent* e = static_cast<InputEvent*>(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 29c1d8c..f00eef2 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -91,6 +91,7 @@
     AInputQueue_attachLooper;
     AInputQueue_detachLooper;
     AInputQueue_finishEvent;
+    AInputQueue_fromJava; # introduced=Tiramisu
     AInputQueue_getEvent;
     AInputQueue_hasEvents;
     AInputQueue_preDispatchEvent;