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

Commit 9cfb2e5f authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Retain stacks even if they are empty." into klp-modular-dev

parents 91da5b68 04a0ea60
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -486,7 +486,7 @@ final class ActivityRecord {
    void setTask(TaskRecord newTask, ThumbnailHolder newThumbHolder, boolean isRoot) {
        if (task != null && task.removeActivity(this)) {
            if (task != newTask) {
                mStackSupervisor.removeTask(task);
                task.stack.removeTask(task);
            } else {
                Slog.d(TAG, "!!! REMOVE THIS LOG !!! setTask: nearly removed stack=" +
                        (newTask == null ? null : newTask.stack));
+18 −4
Original line number Diff line number Diff line
@@ -2674,7 +2674,7 @@ final class ActivityStack {
        r.finishLaunchTickingLocked();
    }

    final void removeActivityFromHistoryLocked(ActivityRecord r) {
    private void removeActivityFromHistoryLocked(ActivityRecord r) {
        finishActivityResultsLocked(r, Activity.RESULT_CANCELED, null);
        r.makeFinishing();
        if (DEBUG_ADD_REMOVE) {
@@ -2689,7 +2689,7 @@ final class ActivityStack {
            if (mStackSupervisor.isFrontStack(this) && task == topTask() && task.mOnTopOfHome) {
                mStackSupervisor.moveHomeToTop();
            }
            mStackSupervisor.removeTask(task);
            removeTask(task);
        }
        r.takeFromHistory();
        removeTimeoutsForActivityLocked(r);
@@ -3596,14 +3596,28 @@ final class ActivityStack {
        return starting;
    }

    boolean removeTask(TaskRecord task) {
    void removeTask(TaskRecord task) {
        mWindowManager.removeTask(task.taskId);
        final ActivityRecord r = mResumedActivity;
        if (r != null && r.task == task) {
            mResumedActivity = null;
        }

        final int taskNdx = mTaskHistory.indexOf(task);
        final int topTaskNdx = mTaskHistory.size() - 1;
        if (task.mOnTopOfHome && taskNdx < topTaskNdx) {
            mTaskHistory.get(taskNdx + 1).mOnTopOfHome = true;
        }
        mTaskHistory.remove(task);
        return mTaskHistory.isEmpty();

        if (mTaskHistory.isEmpty()) {
            if (DEBUG_STACK) Slog.i(TAG, "removeTask: moving to back stack=" + this);
            if (isOnHomeDisplay()) {
                mStackSupervisor.moveHomeStack(!isHomeStack());
            }
            mStacks.remove(this);
            mStacks.add(0, this);
        }
    }

    TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent, boolean toTop) {
+1 −20
Original line number Diff line number Diff line
@@ -364,25 +364,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
        return mCurTaskId;
    }

    void removeTask(TaskRecord task) {
        mWindowManager.removeTask(task.taskId);
        final ActivityStack stack = task.stack;
        final ActivityRecord r = stack.mResumedActivity;
        if (r != null && r.task == task) {
            stack.mResumedActivity = null;
        }
        if (stack.removeTask(task) && !stack.isHomeStack()) {
            if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing stack " + stack);
            stack.mActivityContainer.detachLocked();
            final int stackId = stack.mStackId;
            final int nextStackId = mWindowManager.removeStack(stackId);
            // TODO: Perhaps we need to let the ActivityManager determine the next focus...
            if (stack.isOnHomeDisplay()) {
                mFocusedStack = getStack(nextStackId);
            }
        }
    }

    ActivityRecord resumedAppLocked() {
        ActivityStack stack = getFocusedStack();
        if (stack == null) {
@@ -2183,7 +2164,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
            Slog.w(TAG, "moveTaskToStack: no stack for id=" + stackId);
            return;
        }
        removeTask(task);
        task.stack.removeTask(task);
        stack.addTask(task, toTop);
        mWindowManager.addTask(taskId, stackId, toTop);
        resumeTopActivitiesLocked();
+6 −2
Original line number Diff line number Diff line
@@ -191,14 +191,18 @@ public class TaskStack {
    }

    /**
     * Delete a Task from this stack. If it is the last Task in the stack, remove this stack from
     * its parent StackBox and merge the parent.
     * Delete a Task from this stack. If it is the last Task in the stack, move this stack to the
     * back.
     * @param task The Task to delete.
     */
    void removeTask(Task task) {
        if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "removeTask: task=" + task);
        mTasks.remove(task);
        mDisplayContent.removeTask(task);
        if (mTasks.isEmpty()) {
            mDisplayContent.moveStack(this, false);
        }
        mDisplayContent.layoutNeeded = true;
    }

    int remove() {
+0 −17
Original line number Diff line number Diff line
@@ -4838,23 +4838,6 @@ public class WindowManagerService extends IWindowManager.Stub
        }
    }

    public int removeStack(int stackId) {
        synchronized (mWindowMap) {
            final TaskStack stack = mStackIdToStack.get(stackId);
            if (stack != null) {
                mStackIdToStack.delete(stackId);
                int nextStackId = stack.remove();
                stack.getDisplayContent().layoutNeeded = true;
                requestTraversalLocked();
                if (nextStackId > HOME_STACK_ID) {
                    return nextStackId;
                }
            }
            if (DEBUG_STACK) Slog.i(TAG, "removeStack: could not find stackId=" + stackId);
        }
        return HOME_STACK_ID;
    }

    public void removeTask(int taskId) {
        synchronized (mWindowMap) {
            Task task = mTaskIdToTask.get(taskId);