Move activity to display on launch

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 ede131cce4)
This commit is contained in:
Andrii Kulian
2017-03-21 19:37:09 -07:00
parent cf1f1d9128
commit fab9cd89ee

View 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;