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

Commit 87ca32eb authored by Louis Chang's avatar Louis Chang
Browse files

Do not reuse non-leaf tasks for the starting activity

TV Settings activities were started in home stack because home stack
was originally created from TV Settings FallbackHome activity. So, it
was being reused for the Settings activities.

Only looks for the reused task from leaf tasks and also not setting
task affinity on non-leaf tasks.

Bug: 154517501
Test: start Settings activities and not landing on home stack
Change-Id: I07cb0e40248fd2a37f8e9cfe71d13651aed25207
parent a24033d8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -327,7 +327,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
            documentData = isDocument ? intent.getData() : null;

            if (DEBUG_TASKS) Slog.d(TAG_TASKS, "Looking for task of " + target + " in " + parent);
            parent.forAllTasks(this);
            parent.forAllLeafTasks(this);
        }

        void clear() {
+19 −1
Original line number Diff line number Diff line
@@ -942,7 +942,7 @@ class Task extends WindowContainer<WindowContainer> {
            return;
        }

        affinity = info.taskAffinity;
        affinity = isLeafTask() ? info.taskAffinity : null;
        if (intent == null) {
            // If this task already has an intent associated with it, don't set the root
            // affinity -- we don't want it changing after initially set, but the initially
@@ -3399,6 +3399,24 @@ class Task extends WindowContainer<WindowContainer> {
        return callback.apply(this);
    }

    @Override
    boolean forAllLeafTasks(Function<Task, Boolean> callback) {
        boolean isLeafTask = true;
        for (int i = mChildren.size() - 1; i >= 0; --i) {
            final Task child = mChildren.get(i).asTask();
            if (child != null) {
                isLeafTask = false;
                if (child.forAllLeafTasks(callback)) {
                    return true;
                }
            }
        }
        if (isLeafTask) {
            return callback.apply(this);
        }
        return false;
    }

    @Override
    Task getTask(Predicate<Task> callback, boolean traverseTopToBottom) {
        final Task t = super.getTask(callback, traverseTopToBottom);
+9 −0
Original line number Diff line number Diff line
@@ -1552,6 +1552,15 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        return false;
    }

    boolean forAllLeafTasks(Function<Task, Boolean> callback) {
        for (int i = mChildren.size() - 1; i >= 0; --i) {
            if (mChildren.get(i).forAllLeafTasks(callback)) {
                return true;
            }
        }
        return false;
    }

    /**
     * For all tasks at or below this container call the callback.
     *