summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2021-10-14 17:59:01 +0800
committer Tony Huang <tonyychuang@google.com> 2021-10-18 11:45:33 +0800
commit30c2c24f4d7ec5bbb6ba84cdd9c5cff3b7d93454 (patch)
tree7f05e30732b5164ff7b24e4f65e2b5f9b6b7ceba
parentbe0c2bdc92b269ee7ba358acb83ca77652531a46 (diff)
Make new task follow source task root
For current split UX, we want new task launched by old task can stay in split. To achieve this, add a rule if source task's root task is created by organizer then use it as root task of new task. Bug: 202740040 Test: manual Test: pass existing tests Change-Id: Ibcbf3c4f78607a9ca44eee29c4c078daf1c46402
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java8
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java5
2 files changed, 10 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 47467abf459b..01e3e1919c39 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -2737,9 +2737,11 @@ class ActivityStarter {
// If it exist, we need to reparent target root task from TDA to launch root task.
final TaskDisplayArea tda = mTargetRootTask.getDisplayArea();
final Task launchRootTask = tda.getLaunchRootTask(mTargetRootTask.getWindowingMode(),
- mTargetRootTask.getActivityType(), null /** options */, null /** sourceTask */,
- 0 /** launchFlags */);
- if (launchRootTask != null && launchRootTask != mTargetRootTask) {
+ mTargetRootTask.getActivityType(), null /** options */,
+ mSourceRootTask, 0 /** launchFlags */);
+ // If target root task is created by organizer, let organizer handle reparent itself.
+ if (!mTargetRootTask.mCreatedByOrganizer && launchRootTask != null
+ && launchRootTask != mTargetRootTask) {
mTargetRootTask.reparent(launchRootTask, POSITION_TOP);
mTargetRootTask = launchRootTask;
}
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index 71844ce02b20..275ed0ee28a9 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -1275,6 +1275,11 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
}
}
}
+ // For better split UX, If task launch by the source task which root task is created by
+ // organizer, it should also launch in that root too.
+ if (sourceTask != null && sourceTask.getRootTask().mCreatedByOrganizer) {
+ return sourceTask.getRootTask();
+ }
return null;
}