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

Commit 3a43aa9c authored by Craig Mautner's avatar Craig Mautner Committed by Android Git Automerger
Browse files

am 9cfb2e5f: Merge "Retain stacks even if they are empty." into klp-modular-dev

* commit '9cfb2e5f':
  Retain stacks even if they are empty.
parents a3fa8bf1 9cfb2e5f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -487,7 +487,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
@@ -2711,7 +2711,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) {
@@ -2726,7 +2726,7 @@ final class ActivityStack {
            if (mStackSupervisor.isFrontStack(this) && task == topTask() && task.mOnTopOfHome) {
                mStackSupervisor.moveHomeToTop();
            }
            mStackSupervisor.removeTask(task);
            removeTask(task);
        }
        r.takeFromHistory();
        removeTimeoutsForActivityLocked(r);
@@ -3633,14 +3633,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) {
@@ -2184,7 +2165,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
@@ -4836,23 +4836,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);