diff options
| author | 2022-11-15 10:47:38 +0000 | |
|---|---|---|
| committer | 2022-11-15 10:47:38 +0000 | |
| commit | 4c430266c06ff88eb01e5faa59025bda0b114197 (patch) | |
| tree | 2ecbd98b3afe2e785e7e2584aac1751efe203213 | |
| parent | b725e706443a35f5598a53f646113887155e1a98 (diff) | |
| parent | 37ff5d90c18a6ce5f65d421c1e1b7f340aa4feff (diff) | |
Merge "Wake up dream after resuming the moving to front task" into tm-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 12 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java | 20 |
2 files changed, 26 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index dc69ca6bc0cf..2387e25c270c 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2247,12 +2247,6 @@ class ActivityStarter { ? targetTask.getTopNonFinishingActivity() : targetTaskTop; - // At this point we are certain we want the task moved to the front. If we need to dismiss - // any other always-on-top root tasks, now is the time to do it. - if (targetTaskTop.canTurnScreenOn() && mService.isDreaming()) { - targetTaskTop.mTaskSupervisor.wakeUp("recycleTask#turnScreenOnFlag"); - } - if (mMovedToFront) { // We moved the task to front, use starting window to hide initial drawn delay. targetTaskTop.showStartingWindow(true /* taskSwitch */); @@ -2264,6 +2258,12 @@ class ActivityStarter { // And for paranoia, make sure we have correctly resumed the top activity. resumeTargetRootTaskIfNeeded(); + // This is moving an existing task to front. But since dream activity has a higher z-order + // to cover normal activities, it needs the awakening event to be dismissed. + if (mService.isDreaming() && targetTaskTop.canTurnScreenOn()) { + targetTaskTop.mTaskSupervisor.wakeUp("recycleTask#turnScreenOnFlag"); + } + mLastStartActivityRecord = targetTaskTop; return mMovedToFront ? START_TASK_TO_FRONT : START_DELIVERED_TO_TOP; } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java index 496f6817bb08..6fe2d2cbe9d4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java @@ -1131,6 +1131,26 @@ public class ActivityStarterTests extends WindowTestsBase { } @Test + public void testRecycleTaskWakeUpWhenDreaming() { + doNothing().when(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString()); + doReturn(true).when(mWm.mAtmService).isDreaming(); + final ActivityStarter starter = prepareStarter(0 /* flags */); + final ActivityRecord target = new ActivityBuilder(mAtm).setCreateTask(true).build(); + starter.mStartActivity = target; + target.mVisibleRequested = false; + target.setTurnScreenOn(true); + // Assume the flag was consumed by relayout. + target.setCurrentLaunchCanTurnScreenOn(false); + startActivityInner(starter, target, null /* source */, null /* options */, + null /* inTask */, null /* inTaskFragment */); + // The flag should be set again when resuming (from recycleTask) the target as top. + assertTrue(target.currentLaunchCanTurnScreenOn()); + // In real case, dream activity has a higher priority (TaskDisplayArea#getPriority) that + // will be put at a higher z-order. So it relies on wakeUp() to be dismissed. + verify(mWm.mAtmService.mTaskSupervisor).wakeUp(anyString()); + } + + @Test public void testTargetTaskInSplitScreen() { final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetRootTask */); |