From 4270924801c312399bd72ac35eb95f16ed7167e6 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Tue, 11 Aug 2015 13:54:42 -0700 Subject: [PATCH] Fixed issue with moveTaskToBack on single stack devices Icdad980eec64e081d15679600da07cf4431e40d6 allowed us to properly return to the home acitvity when a task is moved to back. However, this improperly moved the home task to the front if it is the task we are moving to the back on a single stack device. We now prevent the movement of the home task to the front from happening. Bug: 23088310 Change-Id: Ic21779cdb2d2007671d212d41fab5e68be2ae632 --- .../core/java/com/android/server/am/ActivityStack.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index a75cc4872dfa4..6e348766bfdb1 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -3740,7 +3740,12 @@ final class ActivityStack { if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to back transition: task=" + taskId); boolean prevIsHome = false; - if (tr.isOverHomeStack()) { + + // If true, we should resume the home activity next if the task we are moving to the + // back is over the home stack. We force to false if the task we are moving to back + // is the home task and we don't want it resumed after moving to the back. + final boolean canGoHome = !tr.isHomeTask() && tr.isOverHomeStack(); + if (canGoHome) { final TaskRecord nextTask = getNextTask(tr); if (nextTask != null) { nextTask.setTaskToReturnTo(tr.getTaskToReturnTo()); @@ -3774,8 +3779,7 @@ final class ActivityStack { } final TaskRecord task = mResumedActivity != null ? mResumedActivity.task : null; - if (prevIsHome || task == tr && tr.isOverHomeStack() - || numTasks <= 1 && isOnHomeDisplay()) { + if (prevIsHome || (task == tr && canGoHome) || (numTasks <= 1 && isOnHomeDisplay())) { if (!mService.mBooting && !mService.mBooted) { // Not ready yet! return false;