Loading services/core/java/com/android/server/wm/RootWindowContainer.java +5 −1 Original line number Diff line number Diff line Loading @@ -2269,6 +2269,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { final DisplayContent display = getChildAt(displayNdx); if (display.shouldSleep()) { continue; } final boolean curResult = result; boolean resumedOnDisplay = display.reduceOnAllTaskDisplayAreas( (taskDisplayArea, resumed) -> { Loading Loading @@ -2360,7 +2364,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> // process the keyguard going away, which can happen before the sleep // token is released. As a result, it is important we resume the // activity here. resumeFocusedStacksTopActivities(); stack.resumeTopActivityUncheckedLocked(null, null); } // The visibility update must not be called before resuming the top, so the // display orientation can be updated first if needed. Otherwise there may Loading services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +18 −0 Original line number Diff line number Diff line Loading @@ -891,6 +891,24 @@ public class RootActivityContainerTests extends ActivityTestsBase { assertEquals(taskDisplayArea.getTopStack(), taskDisplayArea.getRootHomeTask()); } @Test public void testResumeFocusedStackOnSleepingDisplay() { // Create an activity on secondary display. final TestDisplayContent secondDisplay = addNewDisplayContentAt( DisplayContent.POSITION_TOP); final ActivityStack stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final ActivityRecord activity = new ActivityBuilder(mService).setStack(stack).build(); spyOn(activity); spyOn(stack); // Cannot resumed activities on secondary display if the display should sleep. doReturn(true).when(secondDisplay).shouldSleep(); mRootWindowContainer.resumeFocusedStacksTopActivities(); verify(stack, never()).resumeTopActivityUncheckedLocked(any(), any()); verify(activity, never()).makeActiveIfNeeded(any()); } /** * Mock {@link RootWindowContainer#resolveHomeActivity} for returning consistent activity * info for test cases. Loading Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +5 −1 Original line number Diff line number Diff line Loading @@ -2269,6 +2269,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent> for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { final DisplayContent display = getChildAt(displayNdx); if (display.shouldSleep()) { continue; } final boolean curResult = result; boolean resumedOnDisplay = display.reduceOnAllTaskDisplayAreas( (taskDisplayArea, resumed) -> { Loading Loading @@ -2360,7 +2364,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> // process the keyguard going away, which can happen before the sleep // token is released. As a result, it is important we resume the // activity here. resumeFocusedStacksTopActivities(); stack.resumeTopActivityUncheckedLocked(null, null); } // The visibility update must not be called before resuming the top, so the // display orientation can be updated first if needed. Otherwise there may Loading
services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +18 −0 Original line number Diff line number Diff line Loading @@ -891,6 +891,24 @@ public class RootActivityContainerTests extends ActivityTestsBase { assertEquals(taskDisplayArea.getTopStack(), taskDisplayArea.getRootHomeTask()); } @Test public void testResumeFocusedStackOnSleepingDisplay() { // Create an activity on secondary display. final TestDisplayContent secondDisplay = addNewDisplayContentAt( DisplayContent.POSITION_TOP); final ActivityStack stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final ActivityRecord activity = new ActivityBuilder(mService).setStack(stack).build(); spyOn(activity); spyOn(stack); // Cannot resumed activities on secondary display if the display should sleep. doReturn(true).when(secondDisplay).shouldSleep(); mRootWindowContainer.resumeFocusedStacksTopActivities(); verify(stack, never()).resumeTopActivityUncheckedLocked(any(), any()); verify(activity, never()).makeActiveIfNeeded(any()); } /** * Mock {@link RootWindowContainer#resolveHomeActivity} for returning consistent activity * info for test cases. Loading