Loading services/core/java/com/android/server/wm/ActivityStack.java +6 −2 Original line number Diff line number Diff line Loading @@ -1990,7 +1990,7 @@ class ActivityStack extends Task { 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 @@ -3336,7 +3336,11 @@ class ActivityStack extends Task { // 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/core/java/com/android/server/wm/ActivityStarter.java +3 −2 Original line number Diff line number Diff line Loading @@ -1697,8 +1697,9 @@ class ActivityStarter { mRootWindowContainer.sendPowerHintForLaunchStartIfNeeded( 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 @@ -2305,10 +2305,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { final DisplayContent display = getChildAt(displayNdx); if (display.shouldSleep()) { continue; } boolean resumedOnDisplay = false; for (int tdaNdx = display.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) { final TaskDisplayArea taskDisplayArea = display.getTaskDisplayAreaAt(tdaNdx); Loading services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +11 −6 Original line number Diff line number Diff line Loading @@ -1206,19 +1206,22 @@ public class ActivityStackTests extends ActivityTestsBase { @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 @@ -1428,9 +1431,11 @@ public class ActivityStackTests extends ActivityTestsBase { } 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 @@ -896,24 +896,6 @@ 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/ActivityStack.java +6 −2 Original line number Diff line number Diff line Loading @@ -1990,7 +1990,7 @@ class ActivityStack extends Task { 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 @@ -3336,7 +3336,11 @@ class ActivityStack extends Task { // 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/core/java/com/android/server/wm/ActivityStarter.java +3 −2 Original line number Diff line number Diff line Loading @@ -1697,8 +1697,9 @@ class ActivityStarter { mRootWindowContainer.sendPowerHintForLaunchStartIfNeeded( 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 @@ -2305,10 +2305,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent> for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { final DisplayContent display = getChildAt(displayNdx); if (display.shouldSleep()) { continue; } boolean resumedOnDisplay = false; for (int tdaNdx = display.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) { final TaskDisplayArea taskDisplayArea = display.getTaskDisplayAreaAt(tdaNdx); Loading
services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +11 −6 Original line number Diff line number Diff line Loading @@ -1206,19 +1206,22 @@ public class ActivityStackTests extends ActivityTestsBase { @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 @@ -1428,9 +1431,11 @@ public class ActivityStackTests extends ActivityTestsBase { } 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 @@ -896,24 +896,6 @@ 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