summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java18
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskSupervisor.java18
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java16
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java30
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java4
5 files changed, 44 insertions, 42 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index fd2afd47bec4..ac121a13f308 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1816,7 +1816,8 @@ class ActivityStarter {
}
if (mTargetRootTask == null) {
- mTargetRootTask = getLaunchRootTask(mStartActivity, mLaunchFlags, targetTask, mOptions);
+ mTargetRootTask = getOrCreateRootTask(mStartActivity, mLaunchFlags, targetTask,
+ mOptions);
}
if (newTask) {
final Task taskToAffiliate = (mLaunchTaskBehind && mSourceRecord != null)
@@ -1925,7 +1926,7 @@ class ActivityStarter {
} else if (mInTask != null) {
return mInTask;
} else {
- final Task rootTask = getLaunchRootTask(mStartActivity, mLaunchFlags, null /* task */,
+ final Task rootTask = getOrCreateRootTask(mStartActivity, mLaunchFlags, null /* task */,
mOptions);
final ActivityRecord top = rootTask.getTopNonFinishingActivity();
if (top != null) {
@@ -2233,7 +2234,7 @@ class ActivityStarter {
if (targetTask.getRootTask() == null) {
// Target root task got cleared when we all activities were removed above.
// Go ahead and reset it.
- mTargetRootTask = getLaunchRootTask(mStartActivity, mLaunchFlags,
+ mTargetRootTask = getOrCreateRootTask(mStartActivity, mLaunchFlags,
null /* task */, mOptions);
mTargetRootTask.addChild(targetTask, !mLaunchTaskBehind /* toTop */,
(mStartActivity.info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0);
@@ -2695,10 +2696,11 @@ class ActivityStarter {
// launched into the same root task.
mTargetRootTask = Task.fromWindowContainerToken(mSourceRecord.mLaunchRootTask);
} else {
- final Task launchRootTask =
- getLaunchRootTask(mStartActivity, mLaunchFlags, intentTask, mOptions);
+ final Task rootTask =
+ getOrCreateRootTask(mStartActivity, mLaunchFlags, intentTask, mOptions);
+ // TODO(b/184806710): #getOrCreateRootTask should never return null?
mTargetRootTask =
- launchRootTask != null ? launchRootTask : intentActivity.getRootTask();
+ rootTask != null ? rootTask : intentActivity.getRootTask();
}
}
@@ -2929,7 +2931,7 @@ class ActivityStarter {
return launchFlags;
}
- private Task getLaunchRootTask(ActivityRecord r, int launchFlags, Task task,
+ private Task getOrCreateRootTask(ActivityRecord r, int launchFlags, Task task,
ActivityOptions aOptions) {
// We are reusing a task, keep the root task!
if (mReuseTask != null) {
@@ -2938,7 +2940,7 @@ class ActivityStarter {
final boolean onTop =
(aOptions == null || !aOptions.getAvoidMoveToFront()) && !mLaunchTaskBehind;
- return mRootWindowContainer.getLaunchRootTask(r, aOptions, task, mSourceRootTask, onTop,
+ return mRootWindowContainer.getOrCreateRootTask(r, aOptions, task, mSourceRootTask, onTop,
mLaunchParams, launchFlags);
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index d3d7d5e3780e..64f426187fd2 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -1439,20 +1439,20 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
final Rect bounds = options.getLaunchBounds();
task.setBounds(bounds);
- Task launchRootTask =
- mRootWindowContainer.getLaunchRootTask(null, options, task, ON_TOP);
+ Task targetRootTask =
+ mRootWindowContainer.getOrCreateRootTask(null, options, task, ON_TOP);
- if (launchRootTask != currentRootTask) {
- moveHomeRootTaskToFrontIfNeeded(flags, launchRootTask.getDisplayArea(), reason);
- task.reparent(launchRootTask, ON_TOP, REPARENT_KEEP_ROOT_TASK_AT_FRONT,
+ if (targetRootTask != currentRootTask) {
+ moveHomeRootTaskToFrontIfNeeded(flags, targetRootTask.getDisplayArea(), reason);
+ task.reparent(targetRootTask, ON_TOP, REPARENT_KEEP_ROOT_TASK_AT_FRONT,
!ANIMATE, DEFER_RESUME, reason);
- currentRootTask = launchRootTask;
+ currentRootTask = targetRootTask;
reparented = true;
// task.reparent() should already placed the task on top,
// still need moveTaskToFrontLocked() below for any transition settings.
}
- if (launchRootTask.shouldResizeRootTaskWithLaunchBounds()) {
- launchRootTask.resize(bounds, !PRESERVE_WINDOWS, !DEFER_RESUME);
+ if (targetRootTask.shouldResizeRootTaskWithLaunchBounds()) {
+ targetRootTask.resize(bounds, !PRESERVE_WINDOWS, !DEFER_RESUME);
} else {
// WM resizeTask must be done after the task is moved to the correct stack,
// because Task's setBounds() also updates dim layer's bounds, but that has
@@ -1696,7 +1696,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
*/
boolean restoreRecentTaskLocked(Task task, ActivityOptions aOptions, boolean onTop) {
final Task rootTask =
- mRootWindowContainer.getLaunchRootTask(null, aOptions, task, onTop);
+ mRootWindowContainer.getOrCreateRootTask(null, aOptions, task, onTop);
final WindowContainer parent = task.getParent();
if (parent == rootTask || task == rootTask) {
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 4b824483bffd..235533341433 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -2728,9 +2728,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return false;
}
- Task getLaunchRootTask(@Nullable ActivityRecord r, @Nullable ActivityOptions options,
+ Task getOrCreateRootTask(@Nullable ActivityRecord r, @Nullable ActivityOptions options,
@Nullable Task candidateTask, boolean onTop) {
- return getLaunchRootTask(r, options, candidateTask, null /* sourceTask */, onTop,
+ return getOrCreateRootTask(r, options, candidateTask, null /* sourceTask */, onTop,
null /* launchParams */, 0 /* launchFlags */);
}
@@ -2745,9 +2745,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
* @param launchFlags The launch flags for this launch.
* @param realCallingPid The pid from {@link ActivityStarter#setRealCallingPid}
* @param realCallingUid The uid from {@link ActivityStarter#setRealCallingUid}
- * @return The root task to use for the launch or INVALID_TASK_ID.
+ * @return The root task to use for the launch.
*/
- Task getLaunchRootTask(@Nullable ActivityRecord r,
+ Task getOrCreateRootTask(@Nullable ActivityRecord r,
@Nullable ActivityOptions options, @Nullable Task candidateTask,
@Nullable Task sourceTask, boolean onTop,
@Nullable LaunchParamsController.LaunchParams launchParams, int launchFlags) {
@@ -3236,12 +3236,12 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
if (aOptions != null) {
// Resolve the root task the task should be placed in now based on options
// and reparent if needed.
- final Task launchRootTask =
- getLaunchRootTask(null, aOptions, task, onTop);
- if (launchRootTask != null && task.getRootTask() != launchRootTask) {
+ final Task targetRootTask =
+ getOrCreateRootTask(null, aOptions, task, onTop);
+ if (targetRootTask != null && task.getRootTask() != targetRootTask) {
final int reparentMode = onTop
? REPARENT_MOVE_ROOT_TASK_TO_FRONT : REPARENT_LEAVE_ROOT_TASK_IN_PLACE;
- task.reparent(launchRootTask, onTop, reparentMode, ANIMATE, DEFER_RESUME,
+ task.reparent(targetRootTask, onTop, reparentMode, ANIMATE, DEFER_RESUME,
"anyTaskForId");
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index 6fe2d337e4a0..f9aa4b17bc2c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -308,12 +308,12 @@ public class ActivityStarterTests extends WindowTestsBase {
}
private ActivityStarter prepareStarter(@Intent.Flags int launchFlags) {
- return prepareStarter(launchFlags, true /* mockGetLaunchStack */, LAUNCH_MULTIPLE);
+ return prepareStarter(launchFlags, true /* mockGetRootTask */, LAUNCH_MULTIPLE);
}
private ActivityStarter prepareStarter(@Intent.Flags int launchFlags,
- boolean mockGetLaunchStack) {
- return prepareStarter(launchFlags, mockGetLaunchStack, LAUNCH_MULTIPLE);
+ boolean mockGetRootTask) {
+ return prepareStarter(launchFlags, mockGetRootTask, LAUNCH_MULTIPLE);
}
private void setupImeWindow() {
@@ -326,20 +326,20 @@ public class ActivityStarterTests extends WindowTestsBase {
* Creates a {@link ActivityStarter} with default parameters and necessary mocks.
*
* @param launchFlags The intent flags to launch activity.
- * @param mockGetLaunchStack Whether to mock {@link RootWindowContainer#getLaunchRootTask} for
+ * @param mockGetRootTask Whether to mock {@link RootWindowContainer#getOrCreateRootTask} for
* always launching to the testing stack. Set to false when allowing
* the activity can be launched to any stack that is decided by real
* implementation.
* @return A {@link ActivityStarter} with default setup.
*/
private ActivityStarter prepareStarter(@Intent.Flags int launchFlags,
- boolean mockGetLaunchStack, int launchMode) {
+ boolean mockGetRootTask, int launchMode) {
// always allow test to start activity.
doReturn(true).when(mSupervisor).checkStartAnyActivityPermission(
any(), any(), any(), anyInt(), anyInt(), anyInt(), any(), any(),
anyBoolean(), anyBoolean(), any(), any(), any());
- if (mockGetLaunchStack) {
+ if (mockGetRootTask) {
// Instrument the stack and task used.
final Task stack = mRootWindowContainer.getDefaultTaskDisplayArea()
.createRootTask(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD,
@@ -347,9 +347,9 @@ public class ActivityStarterTests extends WindowTestsBase {
// Direct starter to use spy stack.
doReturn(stack).when(mRootWindowContainer)
- .getLaunchRootTask(any(), any(), any(), anyBoolean());
- doReturn(stack).when(mRootWindowContainer).getLaunchRootTask(any(), any(), any(), any(),
- anyBoolean(), any(), anyInt());
+ .getOrCreateRootTask(any(), any(), any(), anyBoolean());
+ doReturn(stack).when(mRootWindowContainer).getOrCreateRootTask(any(), any(), any(),
+ any(), anyBoolean(), any(), anyInt());
}
// Set up mock package manager internal and make sure no unmocked methods are called
@@ -434,7 +434,7 @@ public class ActivityStarterTests extends WindowTestsBase {
public void testSplitScreenDeliverToTop() {
final ActivityStarter starter = prepareStarter(
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | FLAG_ACTIVITY_SINGLE_TOP,
- false /* mockGetLaunchStack */);
+ false /* mockGetRootTask */);
final Pair<ActivityRecord, ActivityRecord> activities = createActivitiesInSplit();
final ActivityRecord splitPrimaryFocusActivity = activities.first;
final ActivityRecord splitSecondReusableActivity = activities.second;
@@ -790,7 +790,7 @@ public class ActivityStarterTests extends WindowTestsBase {
finishingTopActivity.finishing = true;
// Launch the bottom task of the target root task.
- prepareStarter(FLAG_ACTIVITY_NEW_TASK, false /* mockGetLaunchStack */)
+ prepareStarter(FLAG_ACTIVITY_NEW_TASK, false /* mockGetRootTask */)
.setReason("testBringTaskToFrontWhenFocusedTaskIsFinishing")
.setIntent(activity.intent.addFlags(
FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))
@@ -809,7 +809,7 @@ public class ActivityStarterTests extends WindowTestsBase {
@Test
public void testDeliverIntentToTopActivityOfNonTopDisplay() {
final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_NEW_TASK,
- false /* mockGetLaunchStack */);
+ false /* mockGetRootTask */);
// Create a secondary display at bottom.
final TestDisplayContent secondaryDisplay =
@@ -849,7 +849,7 @@ public class ActivityStarterTests extends WindowTestsBase {
@Test
public void testBringTaskToFrontOnSecondaryDisplay() {
final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_NEW_TASK,
- false /* mockGetLaunchStack */);
+ false /* mockGetRootTask */);
// Create a secondary display with an activity.
final TestDisplayContent secondaryDisplay =
@@ -943,7 +943,7 @@ public class ActivityStarterTests extends WindowTestsBase {
@Test
public void testReparentTopFocusedActivityToSecondaryDisplay() {
final ActivityStarter starter = prepareStarter(FLAG_ACTIVITY_NEW_TASK,
- false /* mockGetLaunchStack */);
+ false /* mockGetRootTask */);
// Create a secondary display at bottom.
final TestDisplayContent secondaryDisplay = addNewDisplayContentAt(POSITION_BOTTOM);
@@ -1076,7 +1076,7 @@ public class ActivityStarterTests extends WindowTestsBase {
@Test
public void testTargetStackInSplitScreen() {
final ActivityStarter starter =
- prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetLaunchStack */);
+ prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetRootTask */);
final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true).build();
final ActivityOptions options = ActivityOptions.makeBasic();
final ActivityRecord[] outActivity = new ActivityRecord[1];
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
index acceadf8c499..99ba3b806d61 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
@@ -949,7 +949,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
LaunchParamsController.LaunchParams launchParams =
new LaunchParamsController.LaunchParams();
launchParams.mPreferredTaskDisplayArea = taskDisplayArea;
- Task root = mRootWindowContainer.getLaunchRootTask(null /* r */, null /* options */,
+ Task root = mRootWindowContainer.getOrCreateRootTask(null /* r */, null /* options */,
null /* candidateTask */, null /* sourceTask */, true /* onTop */, launchParams,
0 /* launchParams */);
assertEquals(taskDisplayArea, root.getTaskDisplayArea());
@@ -957,7 +957,7 @@ public class RootWindowContainerTests extends WindowTestsBase {
// Making sure still getting the root task from the preferred TDA when passing in a
// launching activity.
ActivityRecord r = new ActivityBuilder(mAtm).build();
- root = mRootWindowContainer.getLaunchRootTask(r, null /* options */,
+ root = mRootWindowContainer.getOrCreateRootTask(r, null /* options */,
null /* candidateTask */, null /* sourceTask */, true /* onTop */, launchParams,
0 /* launchParams */);
assertEquals(taskDisplayArea, root.getTaskDisplayArea());