diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index b93ea81c97942..2a3418a11b33b 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8182,17 +8182,7 @@ 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) { + TaskRecord recentTaskForIdLocked(int id) { final int N = mRecentTasks.size(); for (int i=0; i tasks) { - int stackId = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); - final ActivityStack stack = getStack(stackId); - for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { - final TaskRecord task = tasks.get(taskNdx); - stack.addTask(task, false, false); - final int taskId = task.taskId; - final ArrayList activities = task.mActivities; - for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { - final ActivityRecord r = activities.get(activityNdx); - mWindowManager.addAppToken(0, r.appToken, taskId, stackId, - r.info.screenOrientation, r.fullscreen, - (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0, - r.userId, r.info.configChanges, task.voiceSession != null, - r.mLaunchTaskBehind); + private boolean restoreRecentTaskLocked(TaskRecord task) { + ActivityStack stack = null; + // Determine stack to restore task to. + if (mLeanbackOnlyDevice) { + // There is only one stack for lean back devices. + stack = mHomeStack; + } else { + // Look for the top stack on the home display that isn't the home stack. + final ArrayList homeDisplayStacks = mHomeStack.mStacks; + for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) { + final ActivityStack tmpStack = homeDisplayStacks.get(stackNdx); + if (!tmpStack.isHomeStack()) { + stack = tmpStack; + break; + } } } + + if (stack == null) { + // We couldn't find a stack to restore the task to. Possible if are restoring recents + // before an application stack is created...Go ahead and create one on the default + // display. + stack = getStack(createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY)); + if (DEBUG_RECENTS) + Slog.v(TAG, "Created stack=" + stack + " for recents restoration."); + } + + if (stack == null) { + // What does this mean??? Not sure how we would get here... + if (DEBUG_RECENTS) + Slog.v(TAG, "Unable to find/create stack to restore recent task=" + task); + return false; + } + + stack.addTask(task, false, false); + if (DEBUG_RECENTS) + Slog.v(TAG, "Added restored task=" + task + " to stack=" + stack); + final ArrayList activities = task.mActivities; + for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = activities.get(activityNdx); + mWindowManager.addAppToken(0, r.appToken, task.taskId, stack.mStackId, + r.info.screenOrientation, r.fullscreen, + (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0, + r.userId, r.info.configChanges, task.voiceSession != null, + r.mLaunchTaskBehind); + } + return true; } void moveTaskToStack(int taskId, int stackId, boolean toTop) {