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

Commit deaad423 authored by Jerry Chang's avatar Jerry Chang
Browse files

Support to launch the matching task into a closer adjacent target task

When launching trampoline activities into split screen while having the
final activity in another side, it'll move the matching task, the task
containing the final activity, to another side of the split and result
to split dismissed due to one side of the split is empty.

To prevent split screen got dismissed during trampoline launch, adjust
to apply a closer adjacent launch target to the matching task.

Bug: 224901460
Test: atest ActivityStarterTests
Test: put a trampoline launched activity into split,
      drag and drop the same app icon into another side of the split,
      verified it won't dismiss split screen.
Change-Id: I17d401a6648214fbc21c5fb1799267b34abdb355
parent e7b17199
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -2753,18 +2753,16 @@ class ActivityStarter {
                mTargetRootTask = getOrCreateRootTask(mStartActivity, mLaunchFlags, intentTask,
                        mOptions);
            }
        } else {
            // If a launch target indicated, and the matching task is already in the adjacent task
            // of the launch target. Adjust to use the adjacent task as its launch target. So the
            // existing task will be launched into the closer one and won't be reparent redundantly.
            // TODO(b/231541706): Migrate the logic to wm-shell after having proper APIs to help
            //  resolve target task without actually starting the activity.
        }

        // If the matching task is already in the adjacent task of the launch target. Adjust to use
        // the adjacent task as its launch target. So the existing task will be launched into the
        // closer one and won't be reparent redundantly.
        final Task adjacentTargetTask = mTargetRootTask.getAdjacentTaskFragment() != null
                ? mTargetRootTask.getAdjacentTaskFragment().asTask() : null;
        if (adjacentTargetTask != null && intentActivity.isDescendantOf(adjacentTargetTask)) {
            mTargetRootTask = adjacentTargetTask;
        }
        }

        // If the target task is not in the front, then we need to bring it to the front...
        // except...  well, with SINGLE_TASK_LAUNCH it's not entirely clear. We'd like to have