diff options
| author | 2015-02-03 18:09:38 +0000 | |
|---|---|---|
| committer | 2015-02-03 18:09:38 +0000 | |
| commit | b95a8abcafbd9b5c8c6c08abe0a94c2224d251ad (patch) | |
| tree | 1f8b10499a060391b1dd028a3fb5947196994742 | |
| parent | 5656036dd779fd81d89b755b871e85fa6d959c4f (diff) | |
| parent | c0e9c1d0a405c66e7ec75eb6268f84fe1d466344 (diff) | |
am c0e9c1d0: am 240e8743: Merge "[ActivityManager] Set appropriate relation of task to home" automerge: 7d1aded
* commit 'c0e9c1d0a405c66e7ec75eb6268f84fe1d466344':
[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 73c8439fd4d8..19f6e5a303ed 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1919,9 +1919,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(); @@ -3580,6 +3602,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); @@ -3606,7 +3637,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; |