OSDN Git Service

Move activity to display on launch
authorAndrii Kulian <akulian@google.com>
Wed, 22 Mar 2017 02:37:09 +0000 (19:37 -0700)
committerAndrii Kulian <akulian@google.com>
Tue, 28 Mar 2017 19:33:57 +0000 (19:33 +0000)
When an activity is launched with displayId specified and there
is an existing matching task on some other display - that task
should be move to the target display.

Bug: 34396961
Test: android.server.cts.ActivityManagerDisplayTests
Test: #testMoveToDisplayOnLaunch
Change-Id: I18b1f0de320039f4f1ac4e248f048a367f886d29
(cherry picked from commit ede131cce47a1d2ebafd25156e5caf26eb880136)

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

index 4bd06b7..2a1e0b3 100644 (file)
@@ -1453,6 +1453,12 @@ class ActivityStarter {
         return intentActivity;
     }
 
+    /**
+     * Figure out which task and activity to bring to front when we have found an existing matching
+     * activity record in history. May also clear the task if needed.
+     * @param intentActivity Existing matching activity.
+     * @return {@link ActivityRecord} brought to front.
+     */
     private ActivityRecord setTargetStackAndMoveToFrontIfNeeded(ActivityRecord intentActivity) {
         mTargetStack = intentActivity.getStack();
         mTargetStack.mLastPausedActivity = null;
@@ -1514,6 +1520,14 @@ class ActivityStarter {
                                     "bringToFrontInsteadOfAdjacentLaunch");
                         }
                         mMovedToFront = true;
+                    } else if (launchStack.mDisplayId != mTargetStack.mDisplayId) {
+                        // Target and computed stacks are on different displays and we've
+                        // found a matching task - move the existing instance to that display and
+                        // move it to front.
+                        intentActivity.task.reparent(launchStack.mStackId, ON_TOP,
+                                REPARENT_MOVE_STACK_TO_FRONT, ANIMATE, DEFER_RESUME,
+                                "reparentToDisplay");
+                        mMovedToFront = true;
                     }
                     mOptions = null;