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

Commit e885b077 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Update launch root rule to consider created-by-organizer parent...

Merge "Merge "Update launch root rule to consider created-by-organizer parent first." into tm-dev am: 02595e0a"
parents 1a295182 92a7914a
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;
    }