diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index eb457c90ed6b6..86d7dcd10cf08 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -3230,7 +3230,7 @@ public class InputManagerService extends IInputManager.Stub * Interface for the system to handle request from InputMonitors. */ private final class InputMonitorHost extends IInputMonitorHost.Stub { - private IBinder mToken; + private final IBinder mToken; InputMonitorHost(IBinder token) { mToken = token; @@ -3238,23 +3238,12 @@ public class InputManagerService extends IInputManager.Stub @Override public void pilferPointers() { - if (mToken == null) { - throw new IllegalStateException( - "Illegal call to pilferPointers after InputMonitorHost is disposed."); - } nativePilferPointers(mPtr, mToken); } @Override public void dispose() { - // We do not remove the input monitor here by calling nativeRemoveInputChannel because - // it causes a race in InputDispatcher between the removal of the InputChannel through - // that call and the InputChannel#dispose call (which causes an FD hangup) from the - // client (b/189135695). - // - // NOTE: This means the client is responsible for properly closing the InputMonitor by - // disposing the InputChannel and all its duplicates. - mToken = null; + nativeRemoveInputChannel(mPtr, mToken); } }