Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ee3054e authored by Robin Lee's avatar Robin Lee Committed by Android (Google) Code Review
Browse files

Merge "Only launchTaskBehind dream if dream is on top" into main

parents 145b928b b09b7d2e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
+22 −8
Original line number Diff line number Diff line
@@ -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) {
@@ -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();
@@ -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.