summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Craig Mautner <cmautner@google.com> 2015-02-03 18:09:38 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-02-03 18:09:38 +0000
commitb95a8abcafbd9b5c8c6c08abe0a94c2224d251ad (patch)
tree1f8b10499a060391b1dd028a3fb5947196994742
parent5656036dd779fd81d89b755b871e85fa6d959c4f (diff)
parentc0e9c1d0a405c66e7ec75eb6268f84fe1d466344 (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.java36
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;