diff options
author | Craig Mautner <cmautner@google.com> | 2013-11-10 20:39:05 -0800 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2013-11-10 20:39:05 -0800 |
commit | 8862929e2a5ae4936083b6d7ac7e908df256a885 (patch) | |
tree | 04dadd7d8fcf9368f59e0b3912c5fb098087493d /services/java | |
parent | 105b9b05041ea6f1109d961d548f3dde2bd69501 (diff) | |
download | frameworks_base-8862929e2a5ae4936083b6d7ac7e908df256a885.zip frameworks_base-8862929e2a5ae4936083b6d7ac7e908df256a885.tar.gz frameworks_base-8862929e2a5ae4936083b6d7ac7e908df256a885.tar.bz2 |
Use old task info when creating new task.
When a new task is being created solely to protect the system from an
old task going away, save the info from the old task and use it when
creating a new task.
Fixes bug 11615548.
Change-Id: Ibc3fd15ec4b0d76bce30381fbd83b6899f6a9023
Diffstat (limited to 'services/java')
-rw-r--r-- | services/java/com/android/server/am/ActivityStackSupervisor.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 8251364..483b4a0 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -1386,17 +1386,22 @@ public final class ActivityStackSupervisor { launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; } + ActivityInfo newTaskInfo = null; + Intent newTaskIntent = null; final ActivityStack sourceStack; if (sourceRecord != null) { if (sourceRecord.finishing) { // If the source is finishing, we can't further count it as our source. This // is because the task it is associated with may now be empty and on its way out, // so we don't want to blindly throw it in to that task. Instead we will take - // the NEW_TASK flow and try to find a task for it. + // the NEW_TASK flow and try to find a task for it. But save the task information + // so it can be used when creating the new task. if ((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) { Slog.w(TAG, "startActivity called from finishing " + sourceRecord + "; forcing " + "Intent.FLAG_ACTIVITY_NEW_TASK for: " + intent); launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; + newTaskInfo = sourceRecord.info; + newTaskIntent = sourceRecord.task.intent; } sourceRecord = null; sourceStack = null; @@ -1668,8 +1673,10 @@ public final class ActivityStackSupervisor { targetStack = adjustStackFocus(r); moveHomeStack(targetStack.isHomeStack()); if (reuseTask == null) { - r.setTask(targetStack.createTaskRecord(getNextTaskId(), r.info, intent, true), - null, true); + r.setTask(targetStack.createTaskRecord(getNextTaskId(), + newTaskInfo != null ? newTaskInfo : r.info, + newTaskIntent != null ? newTaskIntent : intent, + true), null, true); if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " + r.task); } else { |