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

Commit e042bf2b authored by Craig Mautner's avatar Craig Mautner
Browse files

If task isn't found in recents, look in the stacks.

It may take an attach to move a task into the recents list. If the
timing is right a task may not be in recents by the time we are
removing it from the stacks due to a finish. In that case we should
look in the stacks for the task as well as looking in recents.

Fixes bug 18017409.

Change-Id: Idcfe2e263c9d0fe9a063fdf22515ac4e7fe89ecb
parent 324b1f8a
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -8160,6 +8160,16 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    }
    private TaskRecord taskForIdLocked(int id) {
        final TaskRecord task = recentTaskForIdLocked(id);
        if (task != null) {
            return task;
        }
        // Don't give up. Sometimes it just hasn't made it to recents yet.
        return mStackSupervisor.anyTaskForIdLocked(id);
    }
    private TaskRecord recentTaskForIdLocked(int id) {
        final int N = mRecentTasks.size();
            for (int i=0; i<N; i++) {
@@ -8380,7 +8390,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 = recentTaskForIdLocked(taskId);
        TaskRecord tr = taskForIdLocked(taskId);
        if (tr != null) {
            tr.removeTaskActivitiesLocked();
            cleanUpRemovedTaskLocked(tr, killProcess);
@@ -8455,7 +8465,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                "moveTaskToBack()");
        synchronized(this) {
            TaskRecord tr = recentTaskForIdLocked(taskId);
            TaskRecord tr = taskForIdLocked(taskId);
            if (tr != null) {
                if (tr == mStackSupervisor.mLockTaskModeTask) {
                    mStackSupervisor.showLockTaskToast();
@@ -8647,7 +8657,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        long ident = Binder.clearCallingIdentity();
        try {
            synchronized (this) {
                TaskRecord tr = recentTaskForIdLocked(taskId);
                TaskRecord tr = taskForIdLocked(taskId);
                return tr != null && tr.stack != null && tr.stack.isHomeStack();
            }
        } finally {
+1 −1
Original line number Diff line number Diff line
@@ -1642,8 +1642,8 @@ final class ActivityStack {
        boolean dontWaitForPause = (next.info.flags&ActivityInfo.FLAG_RESUME_WHILE_PAUSING) != 0;
        boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving, true, dontWaitForPause);
        if (mResumedActivity != null) {
            pausing |= startPausingLocked(userLeaving, false, true, dontWaitForPause);
            if (DEBUG_STATES) Slog.d(TAG, "resumeTopActivityLocked: Pausing " + mResumedActivity);
            pausing |= startPausingLocked(userLeaving, false, true, dontWaitForPause);
        }
        if (pausing) {
            if (DEBUG_SWITCH || DEBUG_STATES) Slog.v(TAG,