diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStack.java | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 152f8d7fbd6f..399566af2afd 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1928,9 +1928,31 @@ final class ActivityStack { return true; } + private TaskRecord getNextTask(TaskRecord targetTask) { + final int index = mTaskHistory.indexOf(targetTask); + if (index >= 0) { + final int numTasks = mTaskHistory.size(); + for (int i = index + 1; i < numTasks; ++i) { + TaskRecord task = mTaskHistory.get(i); + if (task.userId == targetTask.userId) { + return task; + } + } + } + return null; + } + private void insertTaskAtTop(TaskRecord task) { + // If the moving task is over home stack, transfer its return type to next task + if (task.isOverHomeStack()) { + final TaskRecord nextTask = getNextTask(task); + if (nextTask != null) { + nextTask.setTaskToReturnTo(task.getTaskToReturnTo()); + } + } + // If this is being moved to the top by another activity or being launched from the home - // activity, set mOnTopOfHome accordingly. + // activity, set mTaskToReturnTo accordingly. if (isOnHomeDisplay()) { ActivityStack lastStack = mStackSupervisor.getLastStack(); final boolean fromHome = lastStack.isHomeStack(); @@ -3591,6 +3613,15 @@ final class ActivityStack { if (DEBUG_TRANSITION) Slog.v(TAG, "Prepare to back transition: task=" + taskId); + boolean prevIsHome = false; + if (tr.isOverHomeStack()) { + final TaskRecord nextTask = getNextTask(tr); + if (nextTask != null) { + nextTask.setTaskToReturnTo(tr.getTaskToReturnTo()); + } else { + prevIsHome = true; + } + } mTaskHistory.remove(tr); mTaskHistory.add(0, tr); updateTaskMovement(tr, false); @@ -3626,7 +3657,8 @@ final class ActivityStack { } final TaskRecord task = mResumedActivity != null ? mResumedActivity.task : null; - if (task == tr && tr.isOverHomeStack() || numTasks <= 1 && isOnHomeDisplay()) { + if (prevIsHome || task == tr && tr.isOverHomeStack() + || numTasks <= 1 && isOnHomeDisplay()) { if (!mService.mBooting && !mService.mBooted) { // Not ready yet! return false; |