diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java index a9a9df8458e26..a6066684d850e 100644 --- a/services/core/java/com/android/server/wm/InputConsumerImpl.java +++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java @@ -153,10 +153,11 @@ class InputConsumerImpl implements IBinder.DeathRecipient { t.reparent(mInputSurface, wc.getSurfaceControl()); } - void disposeChannelsLw() { + void disposeChannelsLw(SurfaceControl.Transaction t) { mService.mInputManager.unregisterInputChannel(mServerChannel); mClientChannel.dispose(); mServerChannel.dispose(); + t.remove(mInputSurface); unlinkFromDeathRecipient(); } diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index 18332b9484c0f..8b34b9b8dd8fb 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -112,8 +112,9 @@ final class InputMonitor { @Override public void dispose() { synchronized (mService.mGlobalLock) { - disposeChannelsLw(); + disposeChannelsLw(mInputMonitor.mInputTransaction); mInputEventReceiver.dispose(); + mInputMonitor.updateInputWindowsLw(true /* force */); } } } @@ -195,8 +196,7 @@ final class InputMonitor { private boolean disposeInputConsumer(InputConsumerImpl consumer) { if (consumer != null) { - consumer.disposeChannelsLw(); - consumer.hide(mInputTransaction); + consumer.disposeChannelsLw(mInputTransaction); return true; } return false;