Loading core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,17 @@ flag { bug: "320510464" } flag { name: "remove_activity_starter_dream_callback" namespace: "windowing_frontend" description: "Avoid a race with DreamManagerService callbacks for isDreaming by checking Activity state directly" bug: "366452352" metadata { purpose: PURPOSE_BUGFIX } is_fixed_read_only: true } flag { name: "supports_multi_instance_system_ui" is_exported: true Loading services/core/java/com/android/server/wm/ActivityStarter.java +22 −8 Original line number Diff line number Diff line Loading @@ -1749,7 +1749,7 @@ class ActivityStarter { mIntent.setFlags(mLaunchFlags); boolean dreamStopping = false; if (!com.android.window.flags.Flags.removeActivityStarterDreamCallback()) { for (ActivityRecord stoppingActivity : mSupervisor.mStoppingActivities) { if (stoppingActivity.getActivityType() == WindowConfiguration.ACTIVITY_TYPE_DREAM) { Loading @@ -1757,6 +1757,7 @@ class ActivityStarter { break; } } } // Get top task at beginning because the order may be changed when reusing existing task. final Task prevTopRootTask = mPreferredTaskDisplayArea.getFocusedRootTask(); Loading Loading @@ -1878,8 +1879,21 @@ class ActivityStarter { if (mDoResume) { if (!avoidMoveToFront()) { mTargetRootTask.getRootTask().moveToFront("reuseOrNewTask", targetTask); if (!mTargetRootTask.isTopRootTaskInDisplayArea() && mService.isDreaming() && !dreamStopping) { final boolean launchBehindDream; if (com.android.window.flags.Flags.removeActivityStarterDreamCallback()) { final TaskDisplayArea tda = mTargetRootTask.getTaskDisplayArea(); final Task top = (tda != null ? tda.getTopRootTask() : null); launchBehindDream = (top != null && top != mTargetRootTask) && top.getActivityType() == WindowConfiguration.ACTIVITY_TYPE_DREAM && top.getTopNonFinishingActivity() != null; } else { launchBehindDream = !mTargetRootTask.isTopRootTaskInDisplayArea() && mService.isDreaming() && !dreamStopping; } if (launchBehindDream) { // Launching underneath dream activity (fullscreen, always-on-top). Run the // launch--behind transition so the Activity gets created and starts // in visible state. Loading Loading
core/java/android/window/flags/windowing_frontend.aconfig +11 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,17 @@ flag { bug: "320510464" } flag { name: "remove_activity_starter_dream_callback" namespace: "windowing_frontend" description: "Avoid a race with DreamManagerService callbacks for isDreaming by checking Activity state directly" bug: "366452352" metadata { purpose: PURPOSE_BUGFIX } is_fixed_read_only: true } flag { name: "supports_multi_instance_system_ui" is_exported: true Loading
services/core/java/com/android/server/wm/ActivityStarter.java +22 −8 Original line number Diff line number Diff line Loading @@ -1749,7 +1749,7 @@ class ActivityStarter { mIntent.setFlags(mLaunchFlags); boolean dreamStopping = false; if (!com.android.window.flags.Flags.removeActivityStarterDreamCallback()) { for (ActivityRecord stoppingActivity : mSupervisor.mStoppingActivities) { if (stoppingActivity.getActivityType() == WindowConfiguration.ACTIVITY_TYPE_DREAM) { Loading @@ -1757,6 +1757,7 @@ class ActivityStarter { break; } } } // Get top task at beginning because the order may be changed when reusing existing task. final Task prevTopRootTask = mPreferredTaskDisplayArea.getFocusedRootTask(); Loading Loading @@ -1878,8 +1879,21 @@ class ActivityStarter { if (mDoResume) { if (!avoidMoveToFront()) { mTargetRootTask.getRootTask().moveToFront("reuseOrNewTask", targetTask); if (!mTargetRootTask.isTopRootTaskInDisplayArea() && mService.isDreaming() && !dreamStopping) { final boolean launchBehindDream; if (com.android.window.flags.Flags.removeActivityStarterDreamCallback()) { final TaskDisplayArea tda = mTargetRootTask.getTaskDisplayArea(); final Task top = (tda != null ? tda.getTopRootTask() : null); launchBehindDream = (top != null && top != mTargetRootTask) && top.getActivityType() == WindowConfiguration.ACTIVITY_TYPE_DREAM && top.getTopNonFinishingActivity() != null; } else { launchBehindDream = !mTargetRootTask.isTopRootTaskInDisplayArea() && mService.isDreaming() && !dreamStopping; } if (launchBehindDream) { // Launching underneath dream activity (fullscreen, always-on-top). Run the // launch--behind transition so the Activity gets created and starts // in visible state. Loading