OSDN Git Service

Fix issue #258640: Automatic propagation of FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
authorDianne Hackborn <hackbod@google.com>
Thu, 15 Apr 2010 01:01:43 +0000 (18:01 -0700)
committerDianne Hackborn <hackbod@google.com>
Thu, 15 Apr 2010 01:01:43 +0000 (18:01 -0700)
Make sure, if an activity is started with clear task when reset, if that
activity is finished in the middle of a stack that the behavior is retained
by propagating it to the next activity.

Change-Id: Ie31b8f968558b0e64e0ef7efa55950a722c6afa5

services/java/com/android/server/am/ActivityManagerService.java

index 1486a1d..13690bc 100644 (file)
@@ -4078,10 +4078,19 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
                 System.identityHashCode(r),
                 r.task.taskId, r.shortComponentName, reason);
         r.task.numActivities--;
-        if (r.frontOfTask && index < (mHistory.size()-1)) {
+        if (index < (mHistory.size()-1)) {
             HistoryRecord next = (HistoryRecord)mHistory.get(index+1);
             if (next.task == r.task) {
-                next.frontOfTask = true;
+                if (r.frontOfTask) {
+                    // The next activity is now the front of the task.
+                    next.frontOfTask = true;
+                }
+                if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) {
+                    // If the caller asked that this activity (and all above it)
+                    // be cleared when the task is reset, don't lose that information,
+                    // but propagate it up to the next activity.
+                    next.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+                }
             }
         }