Loading data/etc/services.core.protolog.json +6 −30 Original line number Diff line number Diff line Loading @@ -811,12 +811,6 @@ "group": "WM_DEBUG_RECENTS_ANIMATIONS", "at": "com\/android\/server\/wm\/RecentsAnimation.java" }, "-1144293044": { "message": "SURFACE SET FREEZE LAYER: %s", "level": "INFO", "group": "WM_SHOW_TRANSACTIONS", "at": "com\/android\/server\/wm\/WindowStateAnimator.java" }, "-1142279614": { "message": "Looking for focus: %s, flags=%d, canReceive=%b, reason=%s", "level": "VERBOSE", Loading Loading @@ -1261,12 +1255,6 @@ "group": "WM_DEBUG_STATES", "at": "com\/android\/server\/wm\/ActivityTaskSupervisor.java" }, "-639305784": { "message": "Could not report config changes to the window token client.", "level": "WARN", "group": "WM_ERROR", "at": "com\/android\/server\/wm\/WindowToken.java" }, "-639217716": { "message": "setFocusedApp %s displayId=%d Callers=%s", "level": "INFO", Loading Loading @@ -1417,12 +1405,6 @@ "group": "WM_DEBUG_KEEP_SCREEN_ON", "at": "com\/android\/server\/wm\/RootWindowContainer.java" }, "-477481651": { "message": "SURFACE DESTROY PENDING: %s. %s", "level": "INFO", "group": "WM_SHOW_SURFACE_ALLOC", "at": "com\/android\/server\/wm\/WindowStateAnimator.java" }, "-463348344": { "message": "Removing and adding activity %s to root task at top callers=%s", "level": "INFO", Loading Loading @@ -1903,12 +1885,6 @@ "group": "WM_DEBUG_FOCUS_LIGHT", "at": "com\/android\/server\/wm\/WindowManagerService.java" }, "123161180": { "message": "SEVER CHILDREN", "level": "INFO", "group": "WM_SHOW_TRANSACTIONS", "at": "com\/android\/server\/wm\/WindowSurfaceController.java" }, "140319294": { "message": "IME target changed within ActivityRecord", "level": "DEBUG", Loading Loading @@ -2569,12 +2545,6 @@ "group": "WM_DEBUG_REMOTE_ANIMATIONS", "at": "com\/android\/server\/wm\/RemoteAnimationController.java" }, "838570988": { "message": "Could not report token removal to the window token client.", "level": "WARN", "group": "WM_ERROR", "at": "com\/android\/server\/wm\/WindowToken.java" }, "872933199": { "message": "Changing focus from %s to %s displayId=%d Callers=%s", "level": "DEBUG", Loading Loading @@ -3235,6 +3205,12 @@ "group": "WM_DEBUG_SYNC_ENGINE", "at": "com\/android\/server\/wm\/BLASTSyncEngine.java" }, "1699269281": { "message": "Don't organize or trigger events for untrusted displayId=%d", "level": "WARN", "group": "WM_DEBUG_WINDOW_ORGANIZER", "at": "com\/android\/server\/wm\/DisplayAreaOrganizerController.java" }, "1720229827": { "message": "Creating animation bounds layer", "level": "INFO", Loading services/core/java/com/android/server/wm/DisplayArea.java +4 −0 Original line number Diff line number Diff line Loading @@ -429,6 +429,10 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { void setOrganizer(IDisplayAreaOrganizer organizer, boolean skipDisplayAreaAppeared) { if (mOrganizer == organizer) return; if (mDisplayContent == null || !mDisplayContent.isTrusted()) { throw new IllegalStateException( "Don't organize or trigger events for unavailable or untrusted display."); } IDisplayAreaOrganizer lastOrganizer = mOrganizer; // Update the new display area organizer before calling sendDisplayAreaVanished since it // could result in a new SurfaceControl getting created that would notify the old organizer Loading services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +16 −4 Original line number Diff line number Diff line Loading @@ -100,11 +100,19 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl } final List<DisplayAreaAppearedInfo> displayAreaInfos = new ArrayList<>(); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { mService.mRootWindowContainer.forAllDisplays(dc -> { if (!dc.isTrusted()) { ProtoLog.w(WM_DEBUG_WINDOW_ORGANIZER, "Don't organize or trigger events for untrusted displayId=%d", dc.getDisplayId()); return; } dc.forAllDisplayAreas((da) -> { if (da.mFeatureId != feature) return; displayAreaInfos.add(organizeDisplayArea(organizer, da, "DisplayAreaOrganizerController.registerOrganizer")); }); }); mOrganizersByFeatureIds.put(feature, organizer); return new ParceledListSlice<>(displayAreaInfos); Loading Loading @@ -148,6 +156,10 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl throw new IllegalArgumentException("createTaskDisplayArea unknown displayId=" + displayId); } if (!display.isTrusted()) { throw new IllegalArgumentException("createTaskDisplayArea untrusted displayId=" + displayId); } // The parentFeatureId can be either a RootDisplayArea or a TaskDisplayArea. // Check if there is a RootDisplayArea with the given parentFeatureId. Loading services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -117,6 +118,19 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { () -> registerMockOrganizer(FEATURE_VENDOR_FIRST)); } @Test public void testRegisterOrganizer_ignoreUntrustedDisplay() throws RemoteException { doReturn(false).when(mDisplayContent).isTrusted(); final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder()); List<DisplayAreaAppearedInfo> infos = mOrganizerController .registerOrganizer(organizer, FEATURE_VENDOR_FIRST).getList(); assertThat(infos).isEmpty(); verify(organizer, never()).onDisplayAreaAppeared(any(DisplayAreaInfo.class), any(SurfaceControl.class)); } @Test public void testCreateTaskDisplayArea_topBelowRoot() { final String newTdaName = "testTda"; Loading Loading @@ -186,13 +200,20 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { @Test public void testCreateTaskDisplayArea_invalidDisplayAndRoot() { final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder()); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, SystemServicesTestRule.sNextDisplayId + 1, FEATURE_ROOT, "testTda")); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, DEFAULT_DISPLAY, FEATURE_ROOT - 1, "testTda")); doReturn(false).when(mDisplayContent).isTrusted(); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, DEFAULT_DISPLAY, FEATURE_ROOT, "testTda")); } @Test Loading Loading
data/etc/services.core.protolog.json +6 −30 Original line number Diff line number Diff line Loading @@ -811,12 +811,6 @@ "group": "WM_DEBUG_RECENTS_ANIMATIONS", "at": "com\/android\/server\/wm\/RecentsAnimation.java" }, "-1144293044": { "message": "SURFACE SET FREEZE LAYER: %s", "level": "INFO", "group": "WM_SHOW_TRANSACTIONS", "at": "com\/android\/server\/wm\/WindowStateAnimator.java" }, "-1142279614": { "message": "Looking for focus: %s, flags=%d, canReceive=%b, reason=%s", "level": "VERBOSE", Loading Loading @@ -1261,12 +1255,6 @@ "group": "WM_DEBUG_STATES", "at": "com\/android\/server\/wm\/ActivityTaskSupervisor.java" }, "-639305784": { "message": "Could not report config changes to the window token client.", "level": "WARN", "group": "WM_ERROR", "at": "com\/android\/server\/wm\/WindowToken.java" }, "-639217716": { "message": "setFocusedApp %s displayId=%d Callers=%s", "level": "INFO", Loading Loading @@ -1417,12 +1405,6 @@ "group": "WM_DEBUG_KEEP_SCREEN_ON", "at": "com\/android\/server\/wm\/RootWindowContainer.java" }, "-477481651": { "message": "SURFACE DESTROY PENDING: %s. %s", "level": "INFO", "group": "WM_SHOW_SURFACE_ALLOC", "at": "com\/android\/server\/wm\/WindowStateAnimator.java" }, "-463348344": { "message": "Removing and adding activity %s to root task at top callers=%s", "level": "INFO", Loading Loading @@ -1903,12 +1885,6 @@ "group": "WM_DEBUG_FOCUS_LIGHT", "at": "com\/android\/server\/wm\/WindowManagerService.java" }, "123161180": { "message": "SEVER CHILDREN", "level": "INFO", "group": "WM_SHOW_TRANSACTIONS", "at": "com\/android\/server\/wm\/WindowSurfaceController.java" }, "140319294": { "message": "IME target changed within ActivityRecord", "level": "DEBUG", Loading Loading @@ -2569,12 +2545,6 @@ "group": "WM_DEBUG_REMOTE_ANIMATIONS", "at": "com\/android\/server\/wm\/RemoteAnimationController.java" }, "838570988": { "message": "Could not report token removal to the window token client.", "level": "WARN", "group": "WM_ERROR", "at": "com\/android\/server\/wm\/WindowToken.java" }, "872933199": { "message": "Changing focus from %s to %s displayId=%d Callers=%s", "level": "DEBUG", Loading Loading @@ -3235,6 +3205,12 @@ "group": "WM_DEBUG_SYNC_ENGINE", "at": "com\/android\/server\/wm\/BLASTSyncEngine.java" }, "1699269281": { "message": "Don't organize or trigger events for untrusted displayId=%d", "level": "WARN", "group": "WM_DEBUG_WINDOW_ORGANIZER", "at": "com\/android\/server\/wm\/DisplayAreaOrganizerController.java" }, "1720229827": { "message": "Creating animation bounds layer", "level": "INFO", Loading
services/core/java/com/android/server/wm/DisplayArea.java +4 −0 Original line number Diff line number Diff line Loading @@ -429,6 +429,10 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { void setOrganizer(IDisplayAreaOrganizer organizer, boolean skipDisplayAreaAppeared) { if (mOrganizer == organizer) return; if (mDisplayContent == null || !mDisplayContent.isTrusted()) { throw new IllegalStateException( "Don't organize or trigger events for unavailable or untrusted display."); } IDisplayAreaOrganizer lastOrganizer = mOrganizer; // Update the new display area organizer before calling sendDisplayAreaVanished since it // could result in a new SurfaceControl getting created that would notify the old organizer Loading
services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java +16 −4 Original line number Diff line number Diff line Loading @@ -100,11 +100,19 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl } final List<DisplayAreaAppearedInfo> displayAreaInfos = new ArrayList<>(); mService.mRootWindowContainer.forAllDisplayAreas((da) -> { mService.mRootWindowContainer.forAllDisplays(dc -> { if (!dc.isTrusted()) { ProtoLog.w(WM_DEBUG_WINDOW_ORGANIZER, "Don't organize or trigger events for untrusted displayId=%d", dc.getDisplayId()); return; } dc.forAllDisplayAreas((da) -> { if (da.mFeatureId != feature) return; displayAreaInfos.add(organizeDisplayArea(organizer, da, "DisplayAreaOrganizerController.registerOrganizer")); }); }); mOrganizersByFeatureIds.put(feature, organizer); return new ParceledListSlice<>(displayAreaInfos); Loading Loading @@ -148,6 +156,10 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl throw new IllegalArgumentException("createTaskDisplayArea unknown displayId=" + displayId); } if (!display.isTrusted()) { throw new IllegalArgumentException("createTaskDisplayArea untrusted displayId=" + displayId); } // The parentFeatureId can be either a RootDisplayArea or a TaskDisplayArea. // Check if there is a RootDisplayArea with the given parentFeatureId. Loading
services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; Loading Loading @@ -117,6 +118,19 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { () -> registerMockOrganizer(FEATURE_VENDOR_FIRST)); } @Test public void testRegisterOrganizer_ignoreUntrustedDisplay() throws RemoteException { doReturn(false).when(mDisplayContent).isTrusted(); final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder()); List<DisplayAreaAppearedInfo> infos = mOrganizerController .registerOrganizer(organizer, FEATURE_VENDOR_FIRST).getList(); assertThat(infos).isEmpty(); verify(organizer, never()).onDisplayAreaAppeared(any(DisplayAreaInfo.class), any(SurfaceControl.class)); } @Test public void testCreateTaskDisplayArea_topBelowRoot() { final String newTdaName = "testTda"; Loading Loading @@ -186,13 +200,20 @@ public class DisplayAreaOrganizerTest extends WindowTestsBase { @Test public void testCreateTaskDisplayArea_invalidDisplayAndRoot() { final IDisplayAreaOrganizer organizer = createMockOrganizer(new Binder()); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, SystemServicesTestRule.sNextDisplayId + 1, FEATURE_ROOT, "testTda")); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, DEFAULT_DISPLAY, FEATURE_ROOT - 1, "testTda")); doReturn(false).when(mDisplayContent).isTrusted(); assertThrows(IllegalArgumentException.class, () -> mOrganizerController.createTaskDisplayArea( organizer, DEFAULT_DISPLAY, FEATURE_ROOT, "testTda")); } @Test Loading