diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index daa97b56ed66f..d2f4ea6ba348c 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1662,6 +1662,12 @@ class ActivityStarter { mTargetStack.setAlwaysOnTop(true); } } + if (!mTargetStack.isTopStackInDisplayArea() && mService.mInternal.isDreaming()) { + // Launching underneath dream activity (fullscreen, always-on-top). Run the launch- + // -behind transition so the Activity gets created and starts in visible state. + mLaunchTaskBehind = true; + r.mLaunchTaskBehind = true; + } } mService.mUgmInternal.grantUriPermissionUncheckedFromIntent(intentGrants, @@ -1911,6 +1917,12 @@ class ActivityStarter { return START_SUCCESS; } + // At this point we are certain we want the task moved to the front. If we need to dismiss + // any other always-on-top stacks, now is the time to do it. + if (targetTaskTop.canTurnScreenOn() && mService.mInternal.isDreaming()) { + targetTaskTop.mStackSupervisor.wakeUp("recycleTask#turnScreenOnFlag"); + } + if (mMovedToFront) { // We moved the task to front, use starting window to hide initial drawn delay. targetTaskTop.showStartingWindow(null /* prev */, false /* newTask */, diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index bb9b8b699f051..1f34f0a3733e7 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2685,7 +2685,9 @@ class WindowState extends WindowContainer implements WindowManagerP Settings.Global.THEATER_MODE_ON, 0) == 0; boolean canTurnScreenOn = mActivityRecord == null || mActivityRecord.currentLaunchCanTurnScreenOn(); - if (allowTheaterMode && canTurnScreenOn && !mPowerManagerWrapper.isInteractive()) { + if (allowTheaterMode && canTurnScreenOn + && (mWmService.mAtmInternal.isDreaming() + || !mPowerManagerWrapper.isInteractive())) { if (DEBUG_VISIBILITY || DEBUG_POWER) { Slog.v(TAG, "Relayout window turning screen on: " + this); }