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

Commit 82223785 authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Remove activity and window stacks when last task is removed."

parents df570c6e 0f95e3f0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -7782,7 +7782,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        synchronized (this) {
            enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER,
                    "getTaskThumbnail()");
            TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(id);
            TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(id, false);
            if (tr != null) {
                return tr.getTaskThumbnailLocked();
            }
@@ -7895,7 +7895,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    @Override
    public void setTaskResizeable(int taskId, boolean resizeable) {
        synchronized (this) {
            TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
            TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId, false);
            if (task == null) {
                Slog.w(TAG, "setTaskResizeable: taskId=" + taskId + " not found");
                return;
@@ -8043,7 +8043,7 @@ public final class ActivityManagerService extends ActivityManagerNative
     * @return Returns true if the given task was found and removed.
     */
    private boolean removeTaskByIdLocked(int taskId, boolean killProcess) {
        TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(taskId);
        TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(taskId, false);
        if (tr != null) {
            tr.removeTaskActivitiesLocked();
            cleanUpRemovedTaskLocked(tr, killProcess);
@@ -8296,7 +8296,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        long ident = Binder.clearCallingIdentity();
        try {
            synchronized (this) {
                TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(taskId);
                TaskRecord tr = mStackSupervisor.anyTaskForIdLocked(taskId, false);
                return tr != null && tr.stack != null && tr.stack.isHomeStack();
            }
        } finally {
+2 −0
Original line number Diff line number Diff line
@@ -4171,6 +4171,8 @@ final class ActivityStack {
            }
            mActivityContainer.onTaskListEmptyLocked();
        }

        task.stack = null;
    }

    TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent,
+20 −9
Original line number Diff line number Diff line
@@ -462,6 +462,16 @@ public final class ActivityStackSupervisor implements DisplayListener {
    }

    TaskRecord anyTaskForIdLocked(int id) {
        return anyTaskForIdLocked(id, true);
    }

    /**
     * Returns a {@link TaskRecord} for the input id if available. Null otherwise.
     * @param id Id of the task we would like returned.
     * @param restoreFromRecents If the id was not in the active list, but was found in recents,
     *                           restore the task from recents to the active list.
     */
    TaskRecord anyTaskForIdLocked(int id, boolean restoreFromRecents) {
        int numDisplays = mActivityDisplays.size();
        for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
            ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
@@ -482,6 +492,10 @@ public final class ActivityStackSupervisor implements DisplayListener {
            return null;
        }

        if (!restoreFromRecents) {
            return task;
        }

        if (!restoreRecentTaskLocked(task)) {
            if (DEBUG_RECENTS) Slog.w(TAG, "Couldn't restore task id=" + id + " found in recents");
            return null;
@@ -516,7 +530,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
            if (mCurTaskId <= 0) {
                mCurTaskId = 1;
            }
        } while (anyTaskForIdLocked(mCurTaskId) != null);
        } while (anyTaskForIdLocked(mCurTaskId, false) != null);
        return mCurTaskId;
    }

@@ -2661,7 +2675,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
            final ArrayList<ActivityStack> homeDisplayStacks = mHomeStack.mStacks;
            for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) {
                final ActivityStack tmpStack = homeDisplayStacks.get(stackNdx);
                if (!tmpStack.isHomeStack()) {
                if (!tmpStack.isHomeStack() && tmpStack.mFullscreen) {
                    stack = tmpStack;
                    break;
                }
@@ -3928,6 +3942,10 @@ public final class ActivityStackSupervisor implements DisplayListener {
        }

        void onTaskListEmptyLocked() {
            mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this);
            detachLocked();
            deleteActivityContainer(this);
            mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget();
        }

        @Override
@@ -4016,13 +4034,6 @@ public final class ActivityStackSupervisor implements DisplayListener {
            return false;
        }

        void onTaskListEmptyLocked() {
            mHandler.removeMessages(CONTAINER_TASK_LIST_EMPTY_TIMEOUT, this);
            detachLocked();
            deleteActivityContainer(this);
            mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget();
        }

        private void setSurfaceIfReadyLocked() {
            if (DEBUG_STACK) Slog.v(TAG, "setSurfaceIfReadyLocked: mDrawn=" + mDrawn +
                    " mContainerState=" + mContainerState + " mSurface=" + mSurface);