summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityStartController.java6
-rw-r--r--services/core/java/com/android/server/wm/SafeActivityOptions.java17
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java12
3 files changed, 23 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java
index 8cbd9fc4cc8d..c49d6729effc 100644
--- a/services/core/java/com/android/server/wm/ActivityStartController.java
+++ b/services/core/java/com/android/server/wm/ActivityStartController.java
@@ -392,9 +392,9 @@ public class ActivityStartController {
SafeActivityOptions bottomOptions = null;
if (options != null) {
// To ensure the first N-1 activities (N == total # of activities) are also launched
- // into the correct display, use a copy of the passed-in options (keeping only
- // display-related info) for these activities.
- bottomOptions = options.selectiveCloneDisplayOptions();
+ // into the correct display and root task, use a copy of the passed-in options (keeping
+ // only display-related and launch-root-task information) for these activities.
+ bottomOptions = options.selectiveCloneLaunchOptions();
}
try {
intents = ArrayUtils.filterNotNull(intents, Intent[]::new);
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index 92f7efde5799..8a6ddf658c2a 100644
--- a/services/core/java/com/android/server/wm/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java
@@ -119,13 +119,13 @@ public class SafeActivityOptions {
/**
* To ensure that two activities, one using this object, and the other using the
- * SafeActivityOptions returned from this function, are launched into the same display through
- * ActivityStartController#startActivities, all display-related information, i.e.
- * displayAreaToken, launchDisplayId and callerDisplayId, are cloned.
+ * SafeActivityOptions returned from this function, are launched into the same display/root task
+ * through ActivityStartController#startActivities, all display-related information, i.e.
+ * displayAreaToken, launchDisplayId, callerDisplayId and the launch root task are cloned.
*/
- @Nullable SafeActivityOptions selectiveCloneDisplayOptions() {
- final ActivityOptions options = cloneLaunchingDisplayOptions(mOriginalOptions);
- final ActivityOptions callerOptions = cloneLaunchingDisplayOptions(mCallerOptions);
+ @Nullable SafeActivityOptions selectiveCloneLaunchOptions() {
+ final ActivityOptions options = cloneLaunchingOptions(mOriginalOptions);
+ final ActivityOptions callerOptions = cloneLaunchingOptions(mCallerOptions);
if (options == null && callerOptions == null) {
return null;
}
@@ -138,11 +138,12 @@ public class SafeActivityOptions {
return safeOptions;
}
- private ActivityOptions cloneLaunchingDisplayOptions(ActivityOptions options) {
+ private ActivityOptions cloneLaunchingOptions(ActivityOptions options) {
return options == null ? null : ActivityOptions.makeBasic()
.setLaunchTaskDisplayArea(options.getLaunchTaskDisplayArea())
.setLaunchDisplayId(options.getLaunchDisplayId())
- .setCallerDisplayId((options.getCallerDisplayId()));
+ .setCallerDisplayId(options.getCallerDisplayId())
+ .setLaunchRootTask(options.getLaunchRootTask());
}
/**
diff --git a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
index e57ad5d9ff8c..24e932f36f80 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
@@ -57,10 +57,20 @@ public class SafeActivityOptionsTest {
.setLaunchTaskDisplayArea(token)
.setLaunchDisplayId(launchDisplayId)
.setCallerDisplayId(callerDisplayId))
- .selectiveCloneDisplayOptions();
+ .selectiveCloneLaunchOptions();
assertSame(clone.getOriginalOptions().getLaunchTaskDisplayArea(), token);
assertEquals(clone.getOriginalOptions().getLaunchDisplayId(), launchDisplayId);
assertEquals(clone.getOriginalOptions().getCallerDisplayId(), callerDisplayId);
}
+
+ @Test
+ public void test_selectiveCloneLunchRootTask() {
+ final WindowContainerToken token = mock(WindowContainerToken.class);
+ final SafeActivityOptions clone = new SafeActivityOptions(ActivityOptions.makeBasic()
+ .setLaunchRootTask(token))
+ .selectiveCloneLaunchOptions();
+
+ assertSame(clone.getOriginalOptions().getLaunchRootTask(), token);
+ }
}