diff --git a/services/core/java/com/android/server/wm/WindowContextListenerController.java b/services/core/java/com/android/server/wm/WindowContextListenerController.java index 912fdb2e32af9..43dc9c8ff5d60 100644 --- a/services/core/java/com/android/server/wm/WindowContextListenerController.java +++ b/services/core/java/com/android/server/wm/WindowContextListenerController.java @@ -116,6 +116,9 @@ class WindowContextListenerController { return; } listener.unregister(); + if (listener.mDeathRecipient != null) { + listener.mDeathRecipient.unlinkToDeath(); + } } void dispatchPendingConfigurationIfNeeded(int displayId) { diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java index 646647fcc4ca9..1685673327951 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java @@ -24,6 +24,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; import static android.window.WindowProvider.KEY_IS_WINDOW_PROVIDER_SERVICE; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.google.common.truth.Truth.assertThat; @@ -86,7 +87,7 @@ public class WindowContextListenerControllerTests extends WindowTestsBase { assertEquals(1, mController.mListeners.size()); - final IBinder clientToken = new Binder(); + final IBinder clientToken = mock(IBinder.class); mController.registerWindowContainerListener(clientToken, mContainer, -1, TYPE_APPLICATION_OVERLAY, null /* options */); @@ -103,6 +104,10 @@ public class WindowContextListenerControllerTests extends WindowTestsBase { WindowContextListenerController.WindowContextListenerImpl listener = mController.mListeners.get(mClientToken); assertEquals(container, listener.getWindowContainer()); + + mController.unregisterWindowContainerListener(clientToken); + assertFalse(mController.mListeners.containsKey(clientToken)); + verify(clientToken).unlinkToDeath(any(), anyInt()); } @UseTestDisplay