OSDN Git Service

Update task-on-home flag to task for every activity launch
authorLouis Chang <louischang@google.com>
Thu, 17 Jan 2019 02:36:56 +0000 (10:36 +0800)
committerLouis Chang <louischang@google.com>
Thu, 21 Feb 2019 09:32:59 +0000 (17:32 +0800)
Task intent was the original intent that started the task,
which was not being updated for later activity launches.
Therefore, home was not bring to top along with the reused
task while starting the activity again with the task-on-home
flag.

Bug: 122564343
Test: atest ActivityManagerActivityVisibilityTests#testLaunchTaskOnHome

Change-Id: I22a7a9c57c18b8687e41852af27268c37a87fc43

services/core/java/com/android/server/wm/ActivityStarter.java

index 538813e..b0146db 100644 (file)
@@ -46,6 +46,7 @@ import static android.content.Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
 import static android.content.Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;
 import static android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS;
 import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
+import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
 import static android.content.pm.ActivityInfo.DOCUMENT_LAUNCH_ALWAYS;
 import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE;
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
@@ -1457,6 +1458,14 @@ class ActivityStarter {
                 // This task was started because of movement of the activity based on affinity...
                 // Now that we are actually launching it, we can assign the base intent.
                 reusedActivity.getTaskRecord().setIntent(mStartActivity);
+            } else {
+                final boolean taskOnHome =
+                        (mStartActivity.intent.getFlags() & FLAG_ACTIVITY_TASK_ON_HOME) != 0;
+                if (taskOnHome) {
+                    reusedActivity.getTaskRecord().intent.addFlags(FLAG_ACTIVITY_TASK_ON_HOME);
+                } else {
+                    reusedActivity.getTaskRecord().intent.removeFlags(FLAG_ACTIVITY_TASK_ON_HOME);
+                }
             }
 
             // This code path leads to delivering a new intent, we want to make sure we schedule it