summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2013-11-10 20:39:05 -0800
committerCraig Mautner <cmautner@google.com>2013-11-10 20:39:05 -0800
commit8862929e2a5ae4936083b6d7ac7e908df256a885 (patch)
tree04dadd7d8fcf9368f59e0b3912c5fb098087493d /services/java
parent105b9b05041ea6f1109d961d548f3dde2bd69501 (diff)
downloadframeworks_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.java13
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 {