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

Commit 02595e0a authored by Jerry Chang's avatar Jerry Chang Committed by Android (Google) Code Review
Browse files

Merge "Update launch root rule to consider created-by-organizer parent first." into tm-dev

parents d4b02630 9eb625a5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2951,7 +2951,8 @@ class ActivityStarter {

        final boolean onTop =
                (aOptions == null || !aOptions.getAvoidMoveToFront()) && !mLaunchTaskBehind;
        return mRootWindowContainer.getOrCreateRootTask(r, aOptions, task, mSourceRootTask, onTop,
        final Task sourceTask = mSourceRecord != null ? mSourceRecord.getTask() : null;
        return mRootWindowContainer.getOrCreateRootTask(r, aOptions, task, sourceTask, onTop,
                mLaunchParams, launchFlags);
    }

+14 −0
Original line number Diff line number Diff line
@@ -2360,6 +2360,20 @@ class Task extends TaskFragment {
        return parentTask == null ? null : parentTask.getOrganizedTask();
    }

    /** @return the first create-by-organizer task. */
    @Nullable
    Task getCreatedByOrganizerTask() {
        if (mCreatedByOrganizer) {
            return this;
        }
        final WindowContainer parent = getParent();
        if (parent == null) {
            return null;
        }
        final Task parentTask = parent.asTask();
        return parentTask == null ? null : parentTask.getCreatedByOrganizerTask();
    }

    // TODO(task-merge): Figure out what's the right thing to do for places that used it.
    boolean isRootTask() {
        return getRootTask() == this;
+12 −8
Original line number Diff line number Diff line
@@ -1125,9 +1125,9 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
        if ((launchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0
                && mLaunchAdjacentFlagRootTask != null) {
            // If the adjacent launch is coming from the same root, launch to adjacent root instead.
            if (sourceTask != null
                    && sourceTask.getRootTask().mTaskId == mLaunchAdjacentFlagRootTask.mTaskId
                    && mLaunchAdjacentFlagRootTask.getAdjacentTaskFragment() != null) {
            if (sourceTask != null && mLaunchAdjacentFlagRootTask.getAdjacentTaskFragment() != null
                    && (sourceTask == mLaunchAdjacentFlagRootTask
                    || sourceTask.isDescendantOf(mLaunchAdjacentFlagRootTask))) {
                return mLaunchAdjacentFlagRootTask.getAdjacentTaskFragment().asTask();
            } else {
                return mLaunchAdjacentFlagRootTask;
@@ -1141,18 +1141,22 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
                        ? launchRootTask.getAdjacentTaskFragment() : null;
                final Task adjacentRootTask =
                        adjacentTaskFragment != null ? adjacentTaskFragment.asTask() : null;
                if (sourceTask != null && sourceTask.getRootTask() == adjacentRootTask) {
                if (sourceTask != null && adjacentRootTask != null
                        && (sourceTask == adjacentRootTask
                        || sourceTask.isDescendantOf(adjacentRootTask))) {
                    return adjacentRootTask;
                } else {
                    return launchRootTask;
                }
            }
        }
        // For better split UX, If task launch by the source task which root task is created by
        // organizer, it should also launch in that root too.
        if (sourceTask != null && sourceTask.getRootTask().mCreatedByOrganizer) {
            return sourceTask.getRootTask();

        // For a better split UX, If a task is launching from a created-by-organizer task, it should
        // be launched into the same created-by-organizer task as well.
        if (sourceTask != null) {
            return sourceTask.getCreatedByOrganizerTask();
        }

        return null;
    }