From 788f57484c5b96a05604bc0526ad8b4e03cade30 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Mon, 30 Jul 2018 17:46:45 -0700 Subject: [PATCH 1/2] Plumbing for SurfaceControl#setInputWindowInfo. The standard SurfaceControl plumbing, plus moving InputWindowInfo from the services jar to the framework jar so that it is accessible from SurfaceControl. Bug: 80101428 Bug: 113136004 Bug: 111440400 Test: None Change-Id: I3443a98cd04ac6b36977e1874641a34c6befca34 --- .../android/view}/InputApplicationHandle.java | 2 +- .../java/android/view}/InputWindowHandle.java | 2 +- core/java/android/view/SurfaceControl.java | 9 +++++++++ ...oid_hardware_input_InputApplicationHandle.cpp | 4 ++-- .../android_hardware_input_InputWindowHandle.cpp | 6 +++--- core/jni/android_view_SurfaceControl.cpp | 15 +++++++++++++++ .../server/input/InputManagerService.java | 2 ++ .../com/android/server/wm/AppWindowToken.java | 2 +- .../android/server/wm/DragDropController.java | 2 +- .../java/com/android/server/wm/DragState.java | 4 ++-- .../com/android/server/wm/InputConsumerImpl.java | 4 ++-- .../java/com/android/server/wm/InputMonitor.java | 7 +++++-- .../com/android/server/wm/TaskPositioner.java | 5 +++-- .../server/wm/TaskPositioningController.java | 2 +- .../java/com/android/server/wm/WindowState.java | 2 +- ..._android_server_input_InputManagerService.cpp | 16 +++++++++------- 16 files changed, 58 insertions(+), 26 deletions(-) rename {services/core/java/com/android/server/input => core/java/android/view}/InputApplicationHandle.java (97%) rename {services/core/java/com/android/server/input => core/java/android/view}/InputWindowHandle.java (99%) diff --git a/services/core/java/com/android/server/input/InputApplicationHandle.java b/core/java/android/view/InputApplicationHandle.java similarity index 97% rename from services/core/java/com/android/server/input/InputApplicationHandle.java rename to core/java/android/view/InputApplicationHandle.java index 3cf7edcd6b2eb..dc1e505ef36d7 100644 --- a/services/core/java/com/android/server/input/InputApplicationHandle.java +++ b/core/java/android/view/InputApplicationHandle.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.input; +package android.view; /** * Functions as a handle for an application that can receive input. diff --git a/services/core/java/com/android/server/input/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java similarity index 99% rename from services/core/java/com/android/server/input/InputWindowHandle.java rename to core/java/android/view/InputWindowHandle.java index bb29bf823eb8f..30a5a4584341d 100644 --- a/services/core/java/com/android/server/input/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.input; +package android.view; import android.graphics.Region; import android.view.IWindow; diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 3d16eb89c41d7..a7a5024cd2a6a 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -153,6 +153,9 @@ public class SurfaceControl implements Parcelable { private static native Display.HdrCapabilities nativeGetHdrCapabilities(IBinder displayToken); + private static native void nativeSetInputWindowInfo(long transactionObj, long nativeObject, + InputWindowHandle handle); + private final CloseGuard mCloseGuard = CloseGuard.get(); private final String mName; @@ -1459,6 +1462,12 @@ public class SurfaceControl implements Parcelable { return this; } + public Transaction setInputWindowInfo(SurfaceControl sc, InputWindowHandle handle) { + sc.checkNotReleased(); + nativeSetInputWindowInfo(mNativeObject, sc.mNativeObject, handle); + return this; + } + @UnsupportedAppUsage public Transaction setMatrix(SurfaceControl sc, float dsdx, float dtdx, float dtdy, float dsdy) { diff --git a/core/jni/android_hardware_input_InputApplicationHandle.cpp b/core/jni/android_hardware_input_InputApplicationHandle.cpp index 8ace8da77b2fe..5887fa7a08413 100644 --- a/core/jni/android_hardware_input_InputApplicationHandle.cpp +++ b/core/jni/android_hardware_input_InputApplicationHandle.cpp @@ -135,13 +135,13 @@ static const JNINativeMethod gInputApplicationHandleMethods[] = { LOG_FATAL_IF(! (var), "Unable to find field " fieldName); int register_android_server_InputApplicationHandle(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "com/android/server/input/InputApplicationHandle", + int res = jniRegisterNativeMethods(env, "android/view/InputApplicationHandle", gInputApplicationHandleMethods, NELEM(gInputApplicationHandleMethods)); (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); jclass clazz; - FIND_CLASS(clazz, "com/android/server/input/InputApplicationHandle"); + FIND_CLASS(clazz, "android/view/InputApplicationHandle"); GET_FIELD_ID(gInputApplicationHandleClassInfo.ptr, clazz, "ptr", "J"); diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index 5b722416487ba..6ecb5de35ae1f 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -221,20 +221,20 @@ static const JNINativeMethod gInputWindowHandleMethods[] = { LOG_FATAL_IF(! (var), "Unable to find field " fieldName); int register_android_server_InputWindowHandle(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "com/android/server/input/InputWindowHandle", + int res = jniRegisterNativeMethods(env, "android/view/InputWindowHandle", gInputWindowHandleMethods, NELEM(gInputWindowHandleMethods)); (void) res; // Faked use when LOG_NDEBUG. LOG_FATAL_IF(res < 0, "Unable to register native methods."); jclass clazz; - FIND_CLASS(clazz, "com/android/server/input/InputWindowHandle"); + FIND_CLASS(clazz, "android/view/InputWindowHandle"); GET_FIELD_ID(gInputWindowHandleClassInfo.ptr, clazz, "ptr", "J"); GET_FIELD_ID(gInputWindowHandleClassInfo.inputApplicationHandle, clazz, - "inputApplicationHandle", "Lcom/android/server/input/InputApplicationHandle;"); + "inputApplicationHandle", "Landroid/view/InputApplicationHandle;"); GET_FIELD_ID(gInputWindowHandleClassInfo.inputChannel, clazz, "inputChannel", "Landroid/view/InputChannel;"); diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 4eda3abdd0d62..ec9c8606e8df0 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -19,6 +19,7 @@ #include "android_os_Parcel.h" #include "android_util_Binder.h" +#include "android_hardware_input_InputWindowHandle.h" #include "android/graphics/Bitmap.h" #include "android/graphics/GraphicsJNI.h" #include "android/graphics/Region.h" @@ -324,6 +325,18 @@ static void nativeSetAlpha(JNIEnv* env, jclass clazz, jlong transactionObj, transaction->setAlpha(ctrl, alpha); } +static void nativeSetInputWindowInfo(JNIEnv* env, jclass clazz, jlong transactionObj, + jlong nativeObject, jobject inputWindow) { + auto transaction = reinterpret_cast(transactionObj); + + sp handle = android_server_InputWindowHandle_getHandle( + env, inputWindow); + handle->updateInfo(); + + SurfaceControl* const ctrl = reinterpret_cast(nativeObject); + transaction->setInputWindowInfo(ctrl, *handle->getInfo()); +} + static void nativeSetColor(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jfloatArray fColor) { auto transaction = reinterpret_cast(transactionObj); @@ -930,6 +943,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeScreenshot }, {"nativeCaptureLayers", "(Landroid/os/IBinder;Landroid/graphics/Rect;F)Landroid/graphics/GraphicBuffer;", (void*)nativeCaptureLayers }, + {"nativeSetInputWindowInfo", "(JJLandroid/view/InputWindowHandle;)V", + (void*)nativeSetInputWindowInfo }, }; int register_android_view_SurfaceControl(JNIEnv* env) diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index c20079e8a6851..80b189385f88c 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -72,6 +72,8 @@ import android.view.IInputFilter; import android.view.IInputFilterHost; import android.view.IWindow; import android.view.InputChannel; +import android.view.InputApplicationHandle; +import android.view.InputWindowHandle; import android.view.InputDevice; import android.view.InputEvent; import android.view.KeyEvent; diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 1709588477951..191715cfc36c9 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -95,6 +95,7 @@ import android.util.Slog; import android.util.proto.ProtoOutputStream; import android.view.DisplayInfo; import android.view.IApplicationToken; +import android.view.InputApplicationHandle; import android.view.RemoteAnimationDefinition; import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; @@ -105,7 +106,6 @@ import android.view.animation.Animation; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ToBooleanFunction; -import com.android.server.input.InputApplicationHandle; import com.android.server.policy.WindowManagerPolicy.StartingSurface; import com.android.server.wm.WindowManagerService.H; diff --git a/services/core/java/com/android/server/wm/DragDropController.java b/services/core/java/com/android/server/wm/DragDropController.java index ce8c979d3f874..7ed078a93375e 100644 --- a/services/core/java/com/android/server/wm/DragDropController.java +++ b/services/core/java/com/android/server/wm/DragDropController.java @@ -36,7 +36,7 @@ import android.view.SurfaceSession; import android.view.View; import com.android.internal.util.Preconditions; -import com.android.server.input.InputWindowHandle; +import android.view.InputWindowHandle; import com.android.server.wm.WindowManagerInternal.IDragDropCallback; import java.util.concurrent.atomic.AtomicReference; diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index 5483602487a20..1c1527a876d21 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -57,8 +57,8 @@ import android.view.animation.Interpolator; import com.android.internal.view.IDragAndDropPermissions; import com.android.server.LocalServices; -import com.android.server.input.InputApplicationHandle; -import com.android.server.input.InputWindowHandle; +import android.view.InputApplicationHandle; +import android.view.InputWindowHandle; import java.util.ArrayList; diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index 585a4f55c9c20..f3b00d44b2ad4 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -23,8 +23,8 @@ import android.os.UserHandle; import android.view.InputChannel; import android.view.WindowManager; -import com.android.server.input.InputApplicationHandle; -import com.android.server.input.InputWindowHandle; +import android.view.InputApplicationHandle; +import android.view.InputWindowHandle; import java.io.PrintWriter; diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 0e4ab53e5c566..61bc4e405385e 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -42,9 +42,12 @@ import android.util.Log; import android.util.Slog; import android.view.InputChannel; import android.view.InputEventReceiver; +import android.view.KeyEvent; +import android.view.WindowManager; +import android.view.InputApplicationHandle; +import android.view.InputWindowHandle; -import com.android.server.input.InputApplicationHandle; -import com.android.server.input.InputWindowHandle; +import com.android.server.input.InputManagerService; import com.android.server.policy.WindowManagerPolicy; import java.io.PrintWriter; diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index 66ebc9b27358e..e5663097c1a6f 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -49,8 +49,9 @@ import android.view.MotionEvent; import android.view.WindowManager; import com.android.internal.annotations.VisibleForTesting; -import com.android.server.input.InputApplicationHandle; -import com.android.server.input.InputWindowHandle; +import android.view.InputApplicationHandle; +import android.view.InputWindowHandle; +import com.android.server.wm.WindowManagerService.H; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java index f2d3dca27cf9d..51567a0d6ad02 100644 --- a/services/core/java/com/android/server/wm/TaskPositioningController.java +++ b/services/core/java/com/android/server/wm/TaskPositioningController.java @@ -29,7 +29,7 @@ import android.view.IWindow; import com.android.internal.annotations.GuardedBy; import com.android.server.input.InputManagerService; -import com.android.server.input.InputWindowHandle; +import android.view.InputWindowHandle; /** * Controller for task positioning by drag. diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 2b5076a2cf1d1..5343864a43b31 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -191,7 +191,7 @@ import android.view.animation.Interpolator; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ToBooleanFunction; -import com.android.server.input.InputWindowHandle; +import android.view.InputWindowHandle; import com.android.server.policy.WindowManagerPolicy; import com.android.server.wm.LocalAnimationAdapter.AnimationSpec; import com.android.server.wm.utils.InsetUtils; diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 3943dba7092ea..b67e1da795faa 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -42,6 +42,8 @@ #include #include +#include + #include #include @@ -1640,7 +1642,7 @@ static const JNINativeMethod gInputManagerMethods[] = { { "nativeHasKeys", "(JII[I[Z)Z", (void*) nativeHasKeys }, { "nativeRegisterInputChannel", - "(JLandroid/view/InputChannel;Lcom/android/server/input/InputWindowHandle;I)V", + "(JLandroid/view/InputChannel;Landroid/view/InputWindowHandle;I)V", (void*) nativeRegisterInputChannel }, { "nativeUnregisterInputChannel", "(JLandroid/view/InputChannel;)V", (void*) nativeUnregisterInputChannel }, @@ -1650,9 +1652,9 @@ static const JNINativeMethod gInputManagerMethods[] = { (void*) nativeInjectInputEvent }, { "nativeToggleCapsLock", "(JI)V", (void*) nativeToggleCapsLock }, - { "nativeSetInputWindows", "(J[Lcom/android/server/input/InputWindowHandle;I)V", + { "nativeSetInputWindows", "(J[Landroid/view/InputWindowHandle;I)V", (void*) nativeSetInputWindows }, - { "nativeSetFocusedApplication", "(JILcom/android/server/input/InputApplicationHandle;)V", + { "nativeSetFocusedApplication", "(JILandroid/view/InputApplicationHandle;)V", (void*) nativeSetFocusedApplication }, { "nativeSetFocusedDisplay", "(JI)V", (void*) nativeSetFocusedDisplay }, @@ -1731,11 +1733,11 @@ int register_android_server_InputManager(JNIEnv* env) { "notifySwitch", "(JII)V"); GET_METHOD_ID(gServiceClassInfo.notifyInputChannelBroken, clazz, - "notifyInputChannelBroken", "(Lcom/android/server/input/InputWindowHandle;)V"); + "notifyInputChannelBroken", "(Landroid/view/InputWindowHandle;)V"); GET_METHOD_ID(gServiceClassInfo.notifyANR, clazz, "notifyANR", - "(Lcom/android/server/input/InputApplicationHandle;Lcom/android/server/input/InputWindowHandle;Ljava/lang/String;)J"); + "(Landroid/view/InputApplicationHandle;Landroid/view/InputWindowHandle;Ljava/lang/String;)J"); GET_METHOD_ID(gServiceClassInfo.filterInputEvent, clazz, "filterInputEvent", "(Landroid/view/InputEvent;I)Z"); @@ -1748,11 +1750,11 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gServiceClassInfo.interceptKeyBeforeDispatching, clazz, "interceptKeyBeforeDispatching", - "(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)J"); + "(Landroid/view/InputWindowHandle;Landroid/view/KeyEvent;I)J"); GET_METHOD_ID(gServiceClassInfo.dispatchUnhandledKey, clazz, "dispatchUnhandledKey", - "(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;"); + "(Landroid/view/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;"); GET_METHOD_ID(gServiceClassInfo.checkInjectEventsPermission, clazz, "checkInjectEventsPermission", "(II)Z"); From e0a353c6f8922c67e3a4910e49a240e9c6196da0 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Thu, 2 Aug 2018 16:38:04 -0700 Subject: [PATCH 2/2] WindowManager: Communicate with input system by WindowTokens. Once we switch to a model of passing InputWindowInfo through SurfaceFlinger, the handles will be parcelled and we will no longer receive the same literal object back from "interceptKeyBeforeQueueing" or other input callbacks. This means the approach of saddling a WindowState on to the object for later retreival will no longer work. Instead we pass the IBinder WindowState#mClient in when registering the input channel, and modify the input system to pass it back to us as a sort of UUID. Bug: 80101428 Bug: 113136004 Bug: 111440400 Test: Home button still works. Change-Id: I0f41e0d08b034aa037518c3a8fb21be1453565da --- core/java/android/view/InputChannel.java | 21 +++-- core/java/android/view/InputWindowHandle.java | 6 +- core/jni/android_view_InputChannel.cpp | 22 +++++ .../server/input/InputManagerService.java | 36 ++++---- .../java/com/android/server/wm/DragState.java | 2 +- .../android/server/wm/InputConsumerImpl.java | 2 +- .../server/wm/InputManagerCallback.java | 27 +++--- .../server/wm/RecentsAnimationController.java | 2 +- .../com/android/server/wm/TaskPositioner.java | 2 +- .../com/android/server/wm/WindowState.java | 5 +- ...droid_server_input_InputManagerService.cpp | 86 ++++++++----------- 11 files changed, 114 insertions(+), 97 deletions(-) diff --git a/core/java/android/view/InputChannel.java b/core/java/android/view/InputChannel.java index b2dd6ac9e9711..84c8e7a2221ed 100644 --- a/core/java/android/view/InputChannel.java +++ b/core/java/android/view/InputChannel.java @@ -18,6 +18,7 @@ package android.view; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; +import android.os.IBinder; import android.os.Parcelable; import android.util.Slog; @@ -50,15 +51,17 @@ public final class InputChannel implements Parcelable { @SuppressWarnings("unused") @UnsupportedAppUsage private long mPtr; // used by native code - + private static native InputChannel[] nativeOpenInputChannelPair(String name); - + private native void nativeDispose(boolean finalized); private native void nativeTransferTo(InputChannel other); private native void nativeReadFromParcel(Parcel parcel); private native void nativeWriteToParcel(Parcel parcel); private native void nativeDup(InputChannel target); - + private native IBinder nativeGetToken(); + private native void nativeSetToken(IBinder token); + private native String nativeGetName(); /** @@ -159,14 +162,22 @@ public final class InputChannel implements Parcelable { } nativeWriteToParcel(out); - + if ((flags & PARCELABLE_WRITE_RETURN_VALUE) != 0) { dispose(); } } - + @Override public String toString() { return getName(); } + + public IBinder getToken() { + return nativeGetToken(); + } + + public void setToken(IBinder token) { + nativeSetToken(token); + } } diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index 30a5a4584341d..621ee89fac45e 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -34,9 +34,6 @@ public final class InputWindowHandle { // The input application handle. public final InputApplicationHandle inputApplicationHandle; - // The window manager's window state. - public final Object windowState; - // The client window. public final IWindow clientWindow; @@ -97,9 +94,8 @@ public final class InputWindowHandle { private native void nativeDispose(); public InputWindowHandle(InputApplicationHandle inputApplicationHandle, - Object windowState, IWindow clientWindow, int displayId) { + IWindow clientWindow, int displayId) { this.inputApplicationHandle = inputApplicationHandle; - this.windowState = windowState; this.clientWindow = clientWindow; this.displayId = displayId; } diff --git a/core/jni/android_view_InputChannel.cpp b/core/jni/android_view_InputChannel.cpp index 2f179078aed87..fb6be6b4c91a5 100644 --- a/core/jni/android_view_InputChannel.cpp +++ b/core/jni/android_view_InputChannel.cpp @@ -249,6 +249,24 @@ static void android_view_InputChannel_nativeDup(JNIEnv* env, jobject obj, jobjec } } +static jobject android_view_InputChannel_nativeGetToken(JNIEnv* env, jobject obj) { + NativeInputChannel* nativeInputChannel = + android_view_InputChannel_getNativeInputChannel(env, obj); + if (nativeInputChannel) { + return javaObjectForIBinder(env, nativeInputChannel->getInputChannel()->getToken()); + } + return 0; +} + +static void android_view_InputChannel_nativeSetToken(JNIEnv* env, jobject obj, jobject tokenObj) { + NativeInputChannel* nativeInputChannel = + android_view_InputChannel_getNativeInputChannel(env, obj); + sp token = ibinderForJavaObject(env, tokenObj); + if (nativeInputChannel != nullptr) { + nativeInputChannel->getInputChannel()->setToken(token); + } +} + // ---------------------------------------------------------------------------- static const JNINativeMethod gInputChannelMethods[] = { @@ -267,6 +285,10 @@ static const JNINativeMethod gInputChannelMethods[] = { (void*)android_view_InputChannel_nativeGetName }, { "nativeDup", "(Landroid/view/InputChannel;)V", (void*)android_view_InputChannel_nativeDup }, + { "nativeGetToken", "()Landroid/os/IBinder;", + (void*)android_view_InputChannel_nativeGetToken }, + { "nativeSetToken", "(Landroid/os/IBinder;)V", + (void*)android_view_InputChannel_nativeSetToken } }; int register_android_view_InputChannel(JNIEnv* env) { diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 80b189385f88c..3a31c9c5e05fe 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -199,7 +199,7 @@ public class InputManagerService extends IInputManager.Stub private static native boolean nativeHasKeys(long ptr, int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists); private static native void nativeRegisterInputChannel(long ptr, InputChannel inputChannel, - InputWindowHandle inputWindowHandle, int displayId); + int displayId); private static native void nativeUnregisterInputChannel(long ptr, InputChannel inputChannel); private static native void nativeSetInputFilterEnabled(long ptr, boolean enable); private static native int nativeInjectInputEvent(long ptr, InputEvent event, @@ -488,8 +488,7 @@ public class InputManagerService extends IInputManager.Stub } InputChannel[] inputChannels = InputChannel.openInputChannelPair(inputChannelName); - // Register channel for monitor. - nativeRegisterInputChannel(mPtr, inputChannels[0], null, displayId); + nativeRegisterInputChannel(mPtr, inputChannels[0], displayId); inputChannels[0].dispose(); // don't need to retain the Java object reference return inputChannels[1]; } @@ -500,14 +499,17 @@ public class InputManagerService extends IInputManager.Stub * @param inputWindowHandle The handle of the input window associated with the * input channel, or null if none. */ - public void registerInputChannel(InputChannel inputChannel, - InputWindowHandle inputWindowHandle) { + public void registerInputChannel(InputChannel inputChannel, IBinder token) { if (inputChannel == null) { throw new IllegalArgumentException("inputChannel must not be null."); } - // Register channel for normal. - nativeRegisterInputChannel(mPtr, inputChannel, inputWindowHandle, Display.INVALID_DISPLAY); + if (token == null) { + token = new Binder(); + } + inputChannel.setToken(token); + + nativeRegisterInputChannel(mPtr, inputChannel, Display.INVALID_DISPLAY); } /** @@ -1793,15 +1795,15 @@ public class InputManagerService extends IInputManager.Stub } // Native callback. - private void notifyInputChannelBroken(InputWindowHandle inputWindowHandle) { - mWindowManagerCallbacks.notifyInputChannelBroken(inputWindowHandle); + private void notifyInputChannelBroken(IBinder token) { + mWindowManagerCallbacks.notifyInputChannelBroken(token); } // Native callback. private long notifyANR(InputApplicationHandle inputApplicationHandle, - InputWindowHandle inputWindowHandle, String reason) { + IBinder token, String reason) { return mWindowManagerCallbacks.notifyANR( - inputApplicationHandle, inputWindowHandle, reason); + inputApplicationHandle, token, reason); } // Native callback. @@ -1832,13 +1834,13 @@ public class InputManagerService extends IInputManager.Stub } // Native callback. - private long interceptKeyBeforeDispatching(InputWindowHandle focus, + private long interceptKeyBeforeDispatching(IBinder focus, KeyEvent event, int policyFlags) { return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags); } // Native callback. - private KeyEvent dispatchUnhandledKey(InputWindowHandle focus, + private KeyEvent dispatchUnhandledKey(IBinder focus, KeyEvent event, int policyFlags) { return mWindowManagerCallbacks.dispatchUnhandledKey(focus, event, policyFlags); } @@ -1989,19 +1991,19 @@ public class InputManagerService extends IInputManager.Stub public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered); - public void notifyInputChannelBroken(InputWindowHandle inputWindowHandle); + public void notifyInputChannelBroken(IBinder token); public long notifyANR(InputApplicationHandle inputApplicationHandle, - InputWindowHandle inputWindowHandle, String reason); + IBinder token, String reason); public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags); public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags); - public long interceptKeyBeforeDispatching(InputWindowHandle focus, + public long interceptKeyBeforeDispatching(IBinder token, KeyEvent event, int policyFlags); - public KeyEvent dispatchUnhandledKey(InputWindowHandle focus, + public KeyEvent dispatchUnhandledKey(IBinder token, KeyEvent event, int policyFlags); public int getPointerLayer(); diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index 1c1527a876d21..a379266fe5336 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -223,7 +223,7 @@ class DragState { mDragApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; - mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, null, + mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, display.getDisplayId()); mDragWindowHandle.name = "drag"; mDragWindowHandle.inputChannel = mServerChannel; diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index f3b00d44b2ad4..49bedc97a38a4 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -63,7 +63,7 @@ class InputConsumerImpl implements IBinder.DeathRecipient { mApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; - mWindowHandle = new InputWindowHandle(mApplicationHandle, null, null, displayId); + mWindowHandle = new InputWindowHandle(mApplicationHandle, null, displayId); mWindowHandle.name = name; mWindowHandle.inputChannel = mServerChannel; mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; diff --git a/services/core/java/com/android/server/wm/InputManagerCallback.java b/services/core/java/com/android/server/wm/InputManagerCallback.java index f823caadad791..92ea1a90735cc 100644 --- a/services/core/java/com/android/server/wm/InputManagerCallback.java +++ b/services/core/java/com/android/server/wm/InputManagerCallback.java @@ -8,16 +8,19 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import android.app.ActivityManager; import android.os.Debug; +import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import android.view.KeyEvent; import android.view.WindowManager; -import com.android.server.input.InputApplicationHandle; +import android.view.InputApplicationHandle; import com.android.server.input.InputManagerService; -import com.android.server.input.InputWindowHandle; +import android.view.InputWindowHandle; +import android.view.InputChannel; import java.io.PrintWriter; +import java.util.HashMap; final class InputManagerCallback implements InputManagerService.WindowManagerCallbacks { private final WindowManagerService mService; @@ -48,13 +51,13 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal * Called by the InputManager. */ @Override - public void notifyInputChannelBroken(InputWindowHandle inputWindowHandle) { - if (inputWindowHandle == null) { + public void notifyInputChannelBroken(IBinder token) { + if (token == null) { return; } synchronized (mService.mGlobalLock) { - WindowState windowState = (WindowState) inputWindowHandle.windowState; + WindowState windowState = mService.windowForClientLocked(null, token, false); if (windowState != null) { Slog.i(TAG_WM, "WINDOW DIED " + windowState); windowState.removeIfPossible(); @@ -70,13 +73,13 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal */ @Override public long notifyANR(InputApplicationHandle inputApplicationHandle, - InputWindowHandle inputWindowHandle, String reason) { + IBinder token, String reason) { AppWindowToken appWindowToken = null; WindowState windowState = null; boolean aboveSystem = false; synchronized (mService.mGlobalLock) { - if (inputWindowHandle != null) { - windowState = (WindowState) inputWindowHandle.windowState; + if (token != null) { + windowState = mService.windowForClientLocked(null, token, false); if (windowState != null) { appWindowToken = windowState.mAppToken; } @@ -188,8 +191,8 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal */ @Override public long interceptKeyBeforeDispatching( - InputWindowHandle focus, KeyEvent event, int policyFlags) { - WindowState windowState = focus != null ? (WindowState) focus.windowState : null; + IBinder focus, KeyEvent event, int policyFlags) { + WindowState windowState = mService.windowForClientLocked(null, focus, false); return mService.mPolicy.interceptKeyBeforeDispatching(windowState, event, policyFlags); } @@ -199,8 +202,8 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal */ @Override public KeyEvent dispatchUnhandledKey( - InputWindowHandle focus, KeyEvent event, int policyFlags) { - WindowState windowState = focus != null ? (WindowState) focus.windowState : null; + IBinder focus, KeyEvent event, int policyFlags) { + WindowState windowState = mService.windowForClientLocked(null, focus, false); return mService.mPolicy.dispatchUnhandledKey(windowState, event, policyFlags); } diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index c4fbee931df36..6627c2dc5cc3c 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -43,6 +43,7 @@ import android.util.Slog; import android.util.SparseBooleanArray; import android.util.SparseIntArray; import android.util.proto.ProtoOutputStream; +import android.view.InputWindowHandle; import android.view.IRecentsAnimationController; import android.view.IRecentsAnimationRunner; import android.view.RemoteAnimationTarget; @@ -50,7 +51,6 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import com.android.internal.annotations.VisibleForTesting; import com.android.server.LocalServices; -import com.android.server.input.InputWindowHandle; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback; import com.android.server.wm.utils.InsetUtils; diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java index e5663097c1a6f..7182ad6fccfe5 100644 --- a/services/core/java/com/android/server/wm/TaskPositioner.java +++ b/services/core/java/com/android/server/wm/TaskPositioner.java @@ -266,7 +266,7 @@ class TaskPositioner { mDragApplicationHandle.dispatchingTimeoutNanos = WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; - mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, null, + mDragWindowHandle = new InputWindowHandle(mDragApplicationHandle, null, display.getDisplayId()); mDragWindowHandle.name = TAG; mDragWindowHandle.inputChannel = mServerChannel; diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 5343864a43b31..a117cf33e596a 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -718,7 +718,7 @@ class WindowState extends WindowContainer implements WindowManagerP mLastRequestedHeight = 0; mLayer = 0; mInputWindowHandle = new InputWindowHandle( - mAppToken != null ? mAppToken.mInputApplicationHandle : null, this, c, + mAppToken != null ? mAppToken.mInputApplicationHandle : null, c, getDisplayId()); } @@ -2047,7 +2047,7 @@ class WindowState extends WindowContainer implements WindowManagerP // Create dummy event receiver that simply reports all events as handled. mDeadWindowEventReceiver = new DeadWindowEventReceiver(mClientChannel); } - mService.mInputManager.registerInputChannel(mInputChannel, mInputWindowHandle); + mService.mInputManager.registerInputChannel(mInputChannel, mClient.asBinder()); } void disposeInputChannel() { @@ -2059,6 +2059,7 @@ class WindowState extends WindowContainer implements WindowManagerP // unregister server channel first otherwise it complains about broken channel if (mInputChannel != null) { mService.mInputManager.unregisterInputChannel(mInputChannel); + mInputChannel.dispose(); mInputChannel = null; } diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index b67e1da795faa..e2db807442940 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -65,6 +65,7 @@ #include "android_hardware_input_InputApplicationHandle.h" #include "android_hardware_input_InputWindowHandle.h" #include "android_hardware_display_DisplayViewport.h" +#include "android_util_Binder.h" #include @@ -155,15 +156,6 @@ static jobject getInputApplicationHandleObjLocalRef(JNIEnv* env, getInputApplicationHandleObjLocalRef(env); } -static jobject getInputWindowHandleObjLocalRef(JNIEnv* env, - const sp& inputWindowHandle) { - if (inputWindowHandle == nullptr) { - return nullptr; - } - return static_cast(inputWindowHandle.get())-> - getInputWindowHandleObjLocalRef(env); -} - static void loadSystemIconAsSpriteWithPointerIcon(JNIEnv* env, jobject contextObj, int32_t style, PointerIcon* outPointerIcon, SpriteIcon* outSpriteIcon) { status_t status = android_view_PointerIcon_loadSystemIcon(env, @@ -218,8 +210,7 @@ public: void setDisplayViewports(JNIEnv* env, jobjectArray viewportObjArray); - status_t registerInputChannel(JNIEnv* env, const sp& inputChannel, - const sp& inputWindowHandle, int32_t displayId); + status_t registerInputChannel(JNIEnv* env, const sp& inputChannel, int32_t displayId); status_t unregisterInputChannel(JNIEnv* env, const sp& inputChannel); void setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray, int32_t displayId); @@ -255,17 +246,17 @@ public: uint32_t policyFlags); virtual void notifyConfigurationChanged(nsecs_t when); virtual nsecs_t notifyANR(const sp& inputApplicationHandle, - const sp& inputWindowHandle, + const sp& token, const std::string& reason); - virtual void notifyInputChannelBroken(const sp& inputWindowHandle); + virtual void notifyInputChannelBroken(const sp& token); virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags); virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig); virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags); virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags); virtual nsecs_t interceptKeyBeforeDispatching( - const sp& inputWindowHandle, + const sp& token, const KeyEvent* keyEvent, uint32_t policyFlags); - virtual bool dispatchUnhandledKey(const sp& inputWindowHandle, + virtual bool dispatchUnhandledKey(const sp& token, const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent); virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType); virtual bool checkInjectEventsPermissionNonReentrant( @@ -444,11 +435,10 @@ void NativeInputManager::setDisplayViewports(JNIEnv* env, jobjectArray viewportO } status_t NativeInputManager::registerInputChannel(JNIEnv* /* env */, - const sp& inputChannel, const sp& inputWindowHandle, - int32_t displayId) { + const sp& inputChannel, int32_t displayId) { ATRACE_CALL(); - return mInputManager->getDispatcher()->registerInputChannel(inputChannel, inputWindowHandle, - displayId); + return mInputManager->getDispatcher()->registerInputChannel( + inputChannel, displayId); } status_t NativeInputManager::unregisterInputChannel(JNIEnv* /* env */, @@ -659,7 +649,7 @@ void NativeInputManager::notifyConfigurationChanged(nsecs_t when) { } nsecs_t NativeInputManager::notifyANR(const sp& inputApplicationHandle, - const sp& inputWindowHandle, const std::string& reason) { + const sp& token, const std::string& reason) { #if DEBUG_INPUT_DISPATCHER_POLICY ALOGD("notifyANR"); #endif @@ -669,12 +659,11 @@ nsecs_t NativeInputManager::notifyANR(const sp& inputApp jobject inputApplicationHandleObj = getInputApplicationHandleObjLocalRef(env, inputApplicationHandle); - jobject inputWindowHandleObj = - getInputWindowHandleObjLocalRef(env, inputWindowHandle); + jobject tokenObj = javaObjectForIBinder(env, token); jstring reasonObj = env->NewStringUTF(reason.c_str()); jlong newTimeout = env->CallLongMethod(mServiceObj, - gServiceClassInfo.notifyANR, inputApplicationHandleObj, inputWindowHandleObj, + gServiceClassInfo.notifyANR, inputApplicationHandleObj, tokenObj, reasonObj); if (checkAndClearExceptionFromCallback(env, "notifyANR")) { newTimeout = 0; // abort dispatch @@ -683,12 +672,11 @@ nsecs_t NativeInputManager::notifyANR(const sp& inputApp } env->DeleteLocalRef(reasonObj); - env->DeleteLocalRef(inputWindowHandleObj); env->DeleteLocalRef(inputApplicationHandleObj); return newTimeout; } -void NativeInputManager::notifyInputChannelBroken(const sp& inputWindowHandle) { +void NativeInputManager::notifyInputChannelBroken(const sp& token) { #if DEBUG_INPUT_DISPATCHER_POLICY ALOGD("notifyInputChannelBroken"); #endif @@ -696,14 +684,11 @@ void NativeInputManager::notifyInputChannelBroken(const sp& i JNIEnv* env = jniEnv(); - jobject inputWindowHandleObj = - getInputWindowHandleObjLocalRef(env, inputWindowHandle); - if (inputWindowHandleObj) { + jobject tokenObj = javaObjectForIBinder(env, token); + if (tokenObj) { env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken, - inputWindowHandleObj); + tokenObj); checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken"); - - env->DeleteLocalRef(inputWindowHandleObj); } } @@ -1063,7 +1048,7 @@ void NativeInputManager::handleInterceptActions(jint wmActions, nsecs_t when, } nsecs_t NativeInputManager::interceptKeyBeforeDispatching( - const sp& inputWindowHandle, + const sp& token, const KeyEvent* keyEvent, uint32_t policyFlags) { ATRACE_CALL(); // Policy: @@ -1074,13 +1059,14 @@ nsecs_t NativeInputManager::interceptKeyBeforeDispatching( if (policyFlags & POLICY_FLAG_TRUSTED) { JNIEnv* env = jniEnv(); - // Note: inputWindowHandle may be null. - jobject inputWindowHandleObj = getInputWindowHandleObjLocalRef(env, inputWindowHandle); + // Token may be null + jobject tokenObj = javaObjectForIBinder(env, token); + jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { jlong delayMillis = env->CallLongMethod(mServiceObj, gServiceClassInfo.interceptKeyBeforeDispatching, - inputWindowHandleObj, keyEventObj, policyFlags); + tokenObj, keyEventObj, policyFlags); bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching"); android_view_KeyEvent_recycle(env, keyEventObj); env->DeleteLocalRef(keyEventObj); @@ -1094,12 +1080,11 @@ nsecs_t NativeInputManager::interceptKeyBeforeDispatching( } else { ALOGE("Failed to obtain key event object for interceptKeyBeforeDispatching."); } - env->DeleteLocalRef(inputWindowHandleObj); } return result; } -bool NativeInputManager::dispatchUnhandledKey(const sp& inputWindowHandle, +bool NativeInputManager::dispatchUnhandledKey(const sp& token, const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) { ATRACE_CALL(); // Policy: @@ -1108,13 +1093,13 @@ bool NativeInputManager::dispatchUnhandledKey(const sp& input if (policyFlags & POLICY_FLAG_TRUSTED) { JNIEnv* env = jniEnv(); - // Note: inputWindowHandle may be null. - jobject inputWindowHandleObj = getInputWindowHandleObjLocalRef(env, inputWindowHandle); + // Note: tokenObj may be null. + jobject tokenObj = javaObjectForIBinder(env, token); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj, gServiceClassInfo.dispatchUnhandledKey, - inputWindowHandleObj, keyEventObj, policyFlags); + tokenObj, keyEventObj, policyFlags); if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) { fallbackKeyEventObj = nullptr; } @@ -1133,7 +1118,6 @@ bool NativeInputManager::dispatchUnhandledKey(const sp& input } else { ALOGE("Failed to obtain key event object for dispatchUnhandledKey."); } - env->DeleteLocalRef(inputWindowHandleObj); } return result; } @@ -1318,7 +1302,7 @@ static void handleInputChannelDisposed(JNIEnv* env, } static void nativeRegisterInputChannel(JNIEnv* env, jclass /* clazz */, - jlong ptr, jobject inputChannelObj, jobject inputWindowHandleObj, jint displayId) { + jlong ptr, jobject inputChannelObj, jint displayId) { NativeInputManager* im = reinterpret_cast(ptr); sp inputChannel = android_view_InputChannel_getInputChannel(env, @@ -1327,12 +1311,10 @@ static void nativeRegisterInputChannel(JNIEnv* env, jclass /* clazz */, throwInputChannelNotInitialized(env); return; } + bool monitor = inputChannel->getToken() == nullptr && displayId != ADISPLAY_ID_NONE; - sp inputWindowHandle = - android_server_InputWindowHandle_getHandle(env, inputWindowHandleObj); + status_t status = im->registerInputChannel(env, inputChannel, displayId); - status_t status = im->registerInputChannel( - env, inputChannel, inputWindowHandle, displayId); if (status) { std::string message; message += StringPrintf("Failed to register input channel. status=%d", status); @@ -1341,7 +1323,7 @@ static void nativeRegisterInputChannel(JNIEnv* env, jclass /* clazz */, } // If inputWindowHandle is null and displayId >= 0, treat inputChannel as monitor. - if (inputWindowHandle != nullptr || displayId == ADISPLAY_ID_NONE) { + if (!monitor) { android_view_InputChannel_setDisposeCallback(env, inputChannelObj, handleInputChannelDisposed, im); } @@ -1642,7 +1624,7 @@ static const JNINativeMethod gInputManagerMethods[] = { { "nativeHasKeys", "(JII[I[Z)Z", (void*) nativeHasKeys }, { "nativeRegisterInputChannel", - "(JLandroid/view/InputChannel;Landroid/view/InputWindowHandle;I)V", + "(JLandroid/view/InputChannel;I)V", (void*) nativeRegisterInputChannel }, { "nativeUnregisterInputChannel", "(JLandroid/view/InputChannel;)V", (void*) nativeUnregisterInputChannel }, @@ -1733,11 +1715,11 @@ int register_android_server_InputManager(JNIEnv* env) { "notifySwitch", "(JII)V"); GET_METHOD_ID(gServiceClassInfo.notifyInputChannelBroken, clazz, - "notifyInputChannelBroken", "(Landroid/view/InputWindowHandle;)V"); + "notifyInputChannelBroken", "(Landroid/os/IBinder;)V"); GET_METHOD_ID(gServiceClassInfo.notifyANR, clazz, "notifyANR", - "(Landroid/view/InputApplicationHandle;Landroid/view/InputWindowHandle;Ljava/lang/String;)J"); + "(Landroid/view/InputApplicationHandle;Landroid/os/IBinder;Ljava/lang/String;)J"); GET_METHOD_ID(gServiceClassInfo.filterInputEvent, clazz, "filterInputEvent", "(Landroid/view/InputEvent;I)Z"); @@ -1750,11 +1732,11 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gServiceClassInfo.interceptKeyBeforeDispatching, clazz, "interceptKeyBeforeDispatching", - "(Landroid/view/InputWindowHandle;Landroid/view/KeyEvent;I)J"); + "(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J"); GET_METHOD_ID(gServiceClassInfo.dispatchUnhandledKey, clazz, "dispatchUnhandledKey", - "(Landroid/view/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;"); + "(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;"); GET_METHOD_ID(gServiceClassInfo.checkInjectEventsPermission, clazz, "checkInjectEventsPermission", "(II)Z");