Loading services/core/java/com/android/server/wm/ActivityStarter.java +3 −2 Original line number Diff line number Diff line Loading @@ -1710,8 +1710,9 @@ class ActivityStarter { mRootWindowContainer.startPowerModeLaunchIfNeeded( false /* forceSend */, mStartActivity); mTargetStack.startActivityLocked(mStartActivity, topStack.getTopNonFinishingActivity(), newTask, mKeepCurTransition, mOptions); mTargetStack.startActivityLocked(mStartActivity, topStack != null ? topStack.getTopNonFinishingActivity() : null, newTask, mKeepCurTransition, mOptions); if (mDoResume) { final ActivityRecord topTaskActivity = mStartActivity.getTask().topRunningActivityLocked(); Loading services/core/java/com/android/server/wm/RootWindowContainer.java +0 −4 Original line number Diff line number Diff line Loading @@ -2289,10 +2289,6 @@ 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 services/core/java/com/android/server/wm/Task.java +6 −2 Original line number Diff line number Diff line Loading @@ -6348,7 +6348,7 @@ class Task extends WindowContainer<WindowContainer> { return mRootWindowContainer.resumeHomeActivity(prev, reason, getDisplayArea()); } void startActivityLocked(ActivityRecord r, ActivityRecord focusedTopActivity, void startActivityLocked(ActivityRecord r, @Nullable ActivityRecord focusedTopActivity, boolean newTask, boolean keepCurTransition, ActivityOptions options) { Task rTask = r.getTask(); final boolean allowMoveToFront = options == null || !options.getAvoidMoveToFront(); Loading Loading @@ -7585,7 +7585,11 @@ class Task extends WindowContainer<WindowContainer> { // Do not sleep activities in this stack if we're marked as focused and the keyguard // is in the process of going away. if (isFocusedStackOnDisplay() && mStackSupervisor.getKeyguardController().isKeyguardGoingAway()) { && mStackSupervisor.getKeyguardController().isKeyguardGoingAway() // Avoid resuming activities on secondary displays since we don't want bubble // activities to be resumed while bubble is still collapsed. // TODO(b/113840485): Having keyguard going away state for secondary displays. && display.isDefaultDisplay) { return false; } Loading services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +11 −6 Original line number Diff line number Diff line Loading @@ -1202,19 +1202,22 @@ public class ActivityStackTests extends WindowTestsBase { @Test public void testShouldSleepActivities() { // When focused activity and keyguard is going away, we should not sleep regardless // of the display state // of the display state, but keyguard-going-away should only take effects on default // display since there is no keyguard on secondary displays (yet). verifyShouldSleepActivities(true /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, false /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, false /* expected */); verifyShouldSleepActivities(true /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, false /* isDefaultDisplay */, true /* expected */); // When not the focused stack, defer to display sleeping state. verifyShouldSleepActivities(false /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, true /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, true /* expected */); // If keyguard is going away, defer to the display sleeping state. verifyShouldSleepActivities(true /* focusedStack */, false /*keyguardGoingAway*/, true /* displaySleeping */, true /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, true /* expected */); verifyShouldSleepActivities(true /* focusedStack */, false /*keyguardGoingAway*/, false /* displaySleeping */, false /* expected*/); false /* displaySleeping */, true /* isDefaultDisplay */, false /* expected */); } @Test Loading Loading @@ -1423,9 +1426,11 @@ public class ActivityStackTests extends WindowTestsBase { } private void verifyShouldSleepActivities(boolean focusedStack, boolean keyguardGoingAway, boolean displaySleeping, boolean expected) { boolean keyguardGoingAway, boolean displaySleeping, boolean isDefaultDisplay, boolean expected) { final DisplayContent display = mock(DisplayContent.class); final KeyguardController keyguardController = mSupervisor.getKeyguardController(); display.isDefaultDisplay = isDefaultDisplay; doReturn(display).when(mStack).getDisplay(); doReturn(keyguardGoingAway).when(keyguardController).isKeyguardGoingAway(); Loading services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +0 −18 Original line number Diff line number Diff line Loading @@ -915,24 +915,6 @@ public class RootActivityContainerTests extends WindowTestsBase { assertEquals(taskDisplayArea.getTopStack(), taskDisplayArea.getRootHomeTask()); } @Test public void testResumeFocusedStackOnSleepingDisplay() { // Create an activity on secondary display. final TestDisplayContent secondDisplay = addNewDisplayContentAt( DisplayContent.POSITION_TOP); final Task stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final ActivityRecord activity = new ActivityBuilder(mAtm).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/ActivityStarter.java +3 −2 Original line number Diff line number Diff line Loading @@ -1710,8 +1710,9 @@ class ActivityStarter { mRootWindowContainer.startPowerModeLaunchIfNeeded( false /* forceSend */, mStartActivity); mTargetStack.startActivityLocked(mStartActivity, topStack.getTopNonFinishingActivity(), newTask, mKeepCurTransition, mOptions); mTargetStack.startActivityLocked(mStartActivity, topStack != null ? topStack.getTopNonFinishingActivity() : null, newTask, mKeepCurTransition, mOptions); if (mDoResume) { final ActivityRecord topTaskActivity = mStartActivity.getTask().topRunningActivityLocked(); Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +0 −4 Original line number Diff line number Diff line Loading @@ -2289,10 +2289,6 @@ 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
services/core/java/com/android/server/wm/Task.java +6 −2 Original line number Diff line number Diff line Loading @@ -6348,7 +6348,7 @@ class Task extends WindowContainer<WindowContainer> { return mRootWindowContainer.resumeHomeActivity(prev, reason, getDisplayArea()); } void startActivityLocked(ActivityRecord r, ActivityRecord focusedTopActivity, void startActivityLocked(ActivityRecord r, @Nullable ActivityRecord focusedTopActivity, boolean newTask, boolean keepCurTransition, ActivityOptions options) { Task rTask = r.getTask(); final boolean allowMoveToFront = options == null || !options.getAvoidMoveToFront(); Loading Loading @@ -7585,7 +7585,11 @@ class Task extends WindowContainer<WindowContainer> { // Do not sleep activities in this stack if we're marked as focused and the keyguard // is in the process of going away. if (isFocusedStackOnDisplay() && mStackSupervisor.getKeyguardController().isKeyguardGoingAway()) { && mStackSupervisor.getKeyguardController().isKeyguardGoingAway() // Avoid resuming activities on secondary displays since we don't want bubble // activities to be resumed while bubble is still collapsed. // TODO(b/113840485): Having keyguard going away state for secondary displays. && display.isDefaultDisplay) { return false; } Loading
services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +11 −6 Original line number Diff line number Diff line Loading @@ -1202,19 +1202,22 @@ public class ActivityStackTests extends WindowTestsBase { @Test public void testShouldSleepActivities() { // When focused activity and keyguard is going away, we should not sleep regardless // of the display state // of the display state, but keyguard-going-away should only take effects on default // display since there is no keyguard on secondary displays (yet). verifyShouldSleepActivities(true /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, false /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, false /* expected */); verifyShouldSleepActivities(true /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, false /* isDefaultDisplay */, true /* expected */); // When not the focused stack, defer to display sleeping state. verifyShouldSleepActivities(false /* focusedStack */, true /*keyguardGoingAway*/, true /* displaySleeping */, true /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, true /* expected */); // If keyguard is going away, defer to the display sleeping state. verifyShouldSleepActivities(true /* focusedStack */, false /*keyguardGoingAway*/, true /* displaySleeping */, true /* expected*/); true /* displaySleeping */, true /* isDefaultDisplay */, true /* expected */); verifyShouldSleepActivities(true /* focusedStack */, false /*keyguardGoingAway*/, false /* displaySleeping */, false /* expected*/); false /* displaySleeping */, true /* isDefaultDisplay */, false /* expected */); } @Test Loading Loading @@ -1423,9 +1426,11 @@ public class ActivityStackTests extends WindowTestsBase { } private void verifyShouldSleepActivities(boolean focusedStack, boolean keyguardGoingAway, boolean displaySleeping, boolean expected) { boolean keyguardGoingAway, boolean displaySleeping, boolean isDefaultDisplay, boolean expected) { final DisplayContent display = mock(DisplayContent.class); final KeyguardController keyguardController = mSupervisor.getKeyguardController(); display.isDefaultDisplay = isDefaultDisplay; doReturn(display).when(mStack).getDisplay(); doReturn(keyguardGoingAway).when(keyguardController).isKeyguardGoingAway(); Loading
services/tests/wmtests/src/com/android/server/wm/RootActivityContainerTests.java +0 −18 Original line number Diff line number Diff line Loading @@ -915,24 +915,6 @@ public class RootActivityContainerTests extends WindowTestsBase { assertEquals(taskDisplayArea.getTopStack(), taskDisplayArea.getRootHomeTask()); } @Test public void testResumeFocusedStackOnSleepingDisplay() { // Create an activity on secondary display. final TestDisplayContent secondDisplay = addNewDisplayContentAt( DisplayContent.POSITION_TOP); final Task stack = secondDisplay.getDefaultTaskDisplayArea() .createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */); final ActivityRecord activity = new ActivityBuilder(mAtm).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