Loading services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +11 −9 Original line number Diff line number Diff line Loading @@ -52,10 +52,7 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl public void binderDied() { synchronized (mGlobalLock) { mOrganizersByFeatureIds.remove(mFeature); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != mOrganizer) return; da.setOrganizer(null); }); removeOrganizer(mOrganizer); } } } Loading Loading @@ -112,11 +109,7 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl organizer.asBinder(), uid); mOrganizersByFeatureIds.entrySet().removeIf( entry -> entry.getValue().asBinder() == organizer.asBinder()); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != organizer) return; da.setOrganizer(null); }); removeOrganizer(organizer); } } finally { Binder.restoreCallingIdentity(origId); Loading Loading @@ -151,4 +144,13 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl // Oh well... } } private void removeOrganizer(IDisplayAreaOrganizer organizer) { IBinder organizerBinder = organizer.asBinder(); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != null && da.mOrganizer.asBinder().equals(organizerBinder)) { da.setOrganizer(null); } }); } } services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +28 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.wm; import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; Loading @@ -39,6 +41,10 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * Build/Install/Run: * atest WmTests:DisplayAreaOrganizerTest */ @SmallTest @Presubmit @RunWith(WindowTestRunner.class) Loading @@ -61,14 +67,22 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { } private IDisplayAreaOrganizer registerMockOrganizer(int feature) { final IDisplayAreaOrganizer organizer = mock(IDisplayAreaOrganizer.class); when(organizer.asBinder()).thenReturn(new Binder()); return registerMockOrganizer(feature, new Binder()); } private IDisplayAreaOrganizer registerMockOrganizer(int feature, Binder binder) { final IDisplayAreaOrganizer organizer = createMockOrganizer(binder); mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController .registerOrganizer(organizer, feature); return organizer; } private IDisplayAreaOrganizer createMockOrganizer(Binder binder) { final IDisplayAreaOrganizer organizer = mock(IDisplayAreaOrganizer.class); when(organizer.asBinder()).thenReturn(binder); return organizer; } private void unregisterMockOrganizer(IDisplayAreaOrganizer organizer) { mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController .unregisterOrganizer(organizer); Loading Loading @@ -99,4 +113,16 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { // Ensure it was still only called once if the bounds didn't change verify(organizer).onDisplayAreaInfoChanged(any()); } @Test public void testUnregisterOrganizer() { final Binder binder = new Binder(); registerMockOrganizer(FEATURE_VENDOR_FIRST, binder); assertThat(mTestDisplayArea.mOrganizer).isNotNull(); unregisterMockOrganizer(createMockOrganizer(binder)); assertThat(mTestDisplayArea.mOrganizer).isNull(); } } Loading
services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +11 −9 Original line number Diff line number Diff line Loading @@ -52,10 +52,7 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl public void binderDied() { synchronized (mGlobalLock) { mOrganizersByFeatureIds.remove(mFeature); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != mOrganizer) return; da.setOrganizer(null); }); removeOrganizer(mOrganizer); } } } Loading Loading @@ -112,11 +109,7 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl organizer.asBinder(), uid); mOrganizersByFeatureIds.entrySet().removeIf( entry -> entry.getValue().asBinder() == organizer.asBinder()); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != organizer) return; da.setOrganizer(null); }); removeOrganizer(organizer); } } finally { Binder.restoreCallingIdentity(origId); Loading Loading @@ -151,4 +144,13 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl // Oh well... } } private void removeOrganizer(IDisplayAreaOrganizer organizer) { IBinder organizerBinder = organizer.asBinder(); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { if (da.mOrganizer != null && da.mOrganizer.asBinder().equals(organizerBinder)) { da.setOrganizer(null); } }); } }
services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +28 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.wm; import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; Loading @@ -39,6 +41,10 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; /** * Build/Install/Run: * atest WmTests:DisplayAreaOrganizerTest */ @SmallTest @Presubmit @RunWith(WindowTestRunner.class) Loading @@ -61,14 +67,22 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { } private IDisplayAreaOrganizer registerMockOrganizer(int feature) { final IDisplayAreaOrganizer organizer = mock(IDisplayAreaOrganizer.class); when(organizer.asBinder()).thenReturn(new Binder()); return registerMockOrganizer(feature, new Binder()); } private IDisplayAreaOrganizer registerMockOrganizer(int feature, Binder binder) { final IDisplayAreaOrganizer organizer = createMockOrganizer(binder); mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController .registerOrganizer(organizer, feature); return organizer; } private IDisplayAreaOrganizer createMockOrganizer(Binder binder) { final IDisplayAreaOrganizer organizer = mock(IDisplayAreaOrganizer.class); when(organizer.asBinder()).thenReturn(binder); return organizer; } private void unregisterMockOrganizer(IDisplayAreaOrganizer organizer) { mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController .unregisterOrganizer(organizer); Loading Loading @@ -99,4 +113,16 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { // Ensure it was still only called once if the bounds didn't change verify(organizer).onDisplayAreaInfoChanged(any()); } @Test public void testUnregisterOrganizer() { final Binder binder = new Binder(); registerMockOrganizer(FEATURE_VENDOR_FIRST, binder); assertThat(mTestDisplayArea.mOrganizer).isNotNull(); unregisterMockOrganizer(createMockOrganizer(binder)); assertThat(mTestDisplayArea.mOrganizer).isNull(); } }