diff options
| author | 2015-02-03 17:54:25 +0000 | |
|---|---|---|
| committer | 2015-02-03 17:54:27 +0000 | |
| commit | 240e8743977d1a1e7a43ff42e0d52148db10cda8 (patch) | |
| tree | dd8390498575bfd2b7fe8b59a74b47bebeabe079 | |
| parent | 84533edfc081f8dfa632ee1e49947b3d42f8a27d (diff) | |
| parent | c215a4fb2f6ef739e3f1a8d627bca3a3a063b879 (diff) | |
Merge "[ActivityManager] Set appropriate relation of task to home"
| -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; |