summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2022-01-19 08:12:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-01-19 08:12:01 +0000
commitd6b531e627ab0fc2dd855220abf545d4df7ce9ae (patch)
tree211621ed505eff0e6ce5f5524cddf9d2d34efd8f
parent20ba147a1138be3ea40d7e20651ac5dd83afab1e (diff)
parentc96cfffa8447248b242d5177355f13502f57ef27 (diff)
Merge "Refactor TestSplitOrganizer and remove useless code"
-rw-r--r--services/core/java/com/android/server/wm/Task.java20
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java57
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java145
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java14
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java86
5 files changed, 75 insertions, 247 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 6d5957eab8a4..87ef29160d71 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -4629,25 +4629,7 @@ class Task extends TaskFragment {
}
void moveToFront(String reason, Task task) {
- if (inSplitScreenSecondaryWindowingMode()) {
- // If the root task is in split-screen secondary mode, we need to make sure we move the
- // primary split-screen root task forward in the case it is currently behind a
- // fullscreen root task so both halves of the split-screen appear on-top and the
- // fullscreen root task isn't cutting between them.
- // TODO(b/70677280): This is a workaround until we can fix as part of b/70677280.
- final TaskDisplayArea taskDisplayArea = getDisplayArea();
- final Task topFullScreenRootTask =
- taskDisplayArea.getTopRootTaskInWindowingMode(WINDOWING_MODE_FULLSCREEN);
- if (topFullScreenRootTask != null) {
- final Task primarySplitScreenRootTask =
- taskDisplayArea.getRootSplitScreenPrimaryTask();
- if (primarySplitScreenRootTask != null
- && topFullScreenRootTask.compareTo(primarySplitScreenRootTask) > 0) {
- primarySplitScreenRootTask.moveToFrontInner(reason + " splitScreenToTop",
- null /* task */);
- }
- }
- } else if (mMoveAdjacentTogether && getAdjacentTaskFragment() != null) {
+ if (mMoveAdjacentTogether && getAdjacentTaskFragment() != null) {
final Task adjacentTask = getAdjacentTaskFragment().asTask();
if (adjacentTask != null) {
adjacentTask.moveToFrontInner(reason + " adjacentTaskToTop", null /* task */);
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 e2f0658f3da3..fdc898207e27 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -31,7 +31,6 @@ import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
@@ -51,7 +50,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
-import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS;
import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
@@ -457,7 +455,7 @@ public class ActivityStarterTests extends WindowTestsBase {
final ActivityRecord splitSecondReusableActivity = activities.second;
final ActivityRecord splitSecondTopActivity = new ActivityBuilder(mAtm).setCreateTask(true)
.setParentTask(splitSecondReusableActivity.getRootTask()).build();
- assertTrue(splitSecondTopActivity.inSplitScreenSecondaryWindowingMode());
+ assertTrue(splitSecondTopActivity.inMultiWindowMode());
// Let primary stack has focus.
splitPrimaryFocusActivity.moveFocusableActivityToTop("testSplitScreenTaskToFront");
@@ -476,13 +474,16 @@ public class ActivityStarterTests extends WindowTestsBase {
final TestSplitOrganizer splitOrg = new TestSplitOrganizer(mAtm);
// The fullscreen windowing mode activity will be moved to split-secondary by
// TestSplitOrganizer when a split-primary task appears.
- final ActivityRecord splitSecondActivity =
- new ActivityBuilder(mAtm).setCreateTask(true).build();
final ActivityRecord splitPrimaryActivity = new TaskBuilder(mSupervisor)
.setParentTaskFragment(splitOrg.mPrimary)
.setCreateActivity(true)
.build()
.getTopMostActivity();
+ final ActivityRecord splitSecondActivity = new TaskBuilder(mSupervisor)
+ .setParentTaskFragment(splitOrg.mSecondary)
+ .setCreateActivity(true)
+ .build()
+ .getTopMostActivity();
splitPrimaryActivity.mVisibleRequested = splitSecondActivity.mVisibleRequested = true;
assertEquals(splitOrg.mPrimary, splitPrimaryActivity.getRootTask());
@@ -1090,7 +1091,7 @@ public class ActivityStarterTests extends WindowTestsBase {
starter.setActivityOptions(options.toBundle())
.setReason("testWindowingModeOptionsLaunchAdjacent")
.setOutActivity(outActivity).execute();
- assertThat(outActivity[0].inSplitScreenSecondaryWindowingMode()).isTrue();
+ assertThat(outActivity[0].inMultiWindowMode()).isTrue();
}
@Test
@@ -1108,50 +1109,6 @@ public class ActivityStarterTests extends WindowTestsBase {
}
@Test
- public void testStartActivityInner_allSplitScreenPrimaryActivitiesVisible() {
- // Given
- final ActivityStarter starter = prepareStarter(0, false);
-
- starter.setReason("testAllSplitScreenPrimaryActivitiesAreResumed");
-
- final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build();
- targetRecord.setFocusable(false);
- targetRecord.setVisibility(false);
- final ActivityRecord sourceRecord = new ActivityBuilder(mAtm).build();
-
- final Task stack = spy(
- mRootWindowContainer.getDefaultTaskDisplayArea()
- .createRootTask(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD,
- /* onTop */true));
-
- stack.addChild(targetRecord);
-
- doReturn(stack).when(mRootWindowContainer).getLaunchRootTask(any(), any(), any(), any(),
- anyBoolean(), any(), anyInt(), anyInt(), anyInt());
-
- starter.mStartActivity = new ActivityBuilder(mAtm).build();
-
- // When
- starter.startActivityInner(
- /* r */targetRecord,
- /* sourceRecord */ sourceRecord,
- /* voiceSession */null,
- /* voiceInteractor */ null,
- /* startFlags */ 0,
- /* doResume */true,
- /* options */null,
- /* inTask */null,
- /* inTaskFragment */ null,
- /* restrictedBgActivity */false,
- /* intentGrants */null);
-
- // Then
- verify(stack).ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
- verify(targetRecord).makeVisibleIfNeeded(null, true);
- assertTrue(targetRecord.mVisibleRequested);
- }
-
- @Test
public void testStartActivityInner_inTaskFragment() {
final ActivityStarter starter = prepareStarter(0, false);
final ActivityRecord targetRecord = new ActivityBuilder(mAtm).build();
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
index bb49cd25ac6b..3cb0bed32493 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
@@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
@@ -240,7 +241,7 @@ public class RootTaskTests extends WindowTestsBase {
final WindowConfiguration windowConfiguration =
task.getResolvedOverrideConfiguration().windowConfiguration;
spyOn(windowConfiguration);
- doReturn(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)
+ doReturn(WINDOWING_MODE_MULTI_WINDOW)
.when(windowConfiguration).getWindowingMode();
// Prevent adjust task dimensions
@@ -323,72 +324,12 @@ public class RootTaskTests extends WindowTestsBase {
}
@Test
- public void testPrimarySplitScreenMoveToBack() {
- TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm);
- // We're testing an edge case here where we have primary + fullscreen rather than secondary.
- organizer.setMoveToSecondaryOnEnter(false);
-
- // Create primary splitscreen root task.
- final Task primarySplitScreen = new TaskBuilder(mAtm.mTaskSupervisor)
- .setParentTaskFragment(organizer.mPrimary)
- .setOnTop(true)
- .build();
-
- // Assert windowing mode.
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, primarySplitScreen.getWindowingMode());
-
- // Move primary to back.
- primarySplitScreen.moveToBack("testPrimarySplitScreenToFullscreenWhenMovedToBack",
- null /* task */);
-
- // Assert that root task is at the bottom.
- assertEquals(0, getTaskIndexOf(mDefaultTaskDisplayArea, primarySplitScreen));
-
- // Ensure no longer in splitscreen.
- assertEquals(WINDOWING_MODE_FULLSCREEN, primarySplitScreen.getWindowingMode());
-
- // Ensure that the override mode is restored to undefined
- assertEquals(WINDOWING_MODE_UNDEFINED,
- primarySplitScreen.getRequestedOverrideWindowingMode());
- }
-
- @Test
- public void testMoveToPrimarySplitScreenThenMoveToBack() {
- TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm);
- // This time, start with a fullscreen activity root task.
- final Task primarySplitScreen = mDefaultTaskDisplayArea.createRootTask(
- WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
-
- primarySplitScreen.reparent(organizer.mPrimary, POSITION_TOP,
- false /*moveParents*/, "test");
-
- // Assert windowing mode.
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, primarySplitScreen.getWindowingMode());
-
- // Move primary to back.
- primarySplitScreen.moveToBack("testPrimarySplitScreenToFullscreenWhenMovedToBack",
- null /* task */);
-
- // Assert that root task is at the bottom.
- assertEquals(primarySplitScreen, organizer.mSecondary.getChildAt(0));
-
- // Ensure that the override mode is restored to what it was (fullscreen)
- assertEquals(WINDOWING_MODE_UNDEFINED,
- primarySplitScreen.getRequestedOverrideWindowingMode());
- }
-
- @Test
public void testSplitScreenMoveToBack() {
TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm);
- // Explicitly reparent task to primary split root to enter split mode, in which implies
- // primary on top and secondary containing the home task below another root task.
- final Task primaryTask = mDefaultTaskDisplayArea.createRootTask(
- WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- final Task secondaryTask = mDefaultTaskDisplayArea.createRootTask(
- WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, true /* onTop */);
+ final Task primaryTask = organizer.createTaskToPrimary(true /* onTop */);
+ final Task secondaryTask = organizer.createTaskToSecondary(true /* onTop */);
final Task homeRoot = mDefaultTaskDisplayArea.getRootTask(
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME);
- primaryTask.reparent(organizer.mPrimary, POSITION_TOP);
mDefaultTaskDisplayArea.positionChildAt(POSITION_TOP, organizer.mPrimary,
false /* includingParents */);
@@ -397,21 +338,26 @@ public class RootTaskTests extends WindowTestsBase {
// Assert that the primaryTask is now below home in its parent but primary is left alone.
assertEquals(0, organizer.mPrimary.getChildCount());
- assertEquals(primaryTask, organizer.mSecondary.getChildAt(0));
+ // Assert that root task is at the bottom.
+ assertEquals(0, getTaskIndexOf(mDefaultTaskDisplayArea, primaryTask));
assertEquals(1, organizer.mPrimary.compareTo(organizer.mSecondary));
assertEquals(1, homeRoot.compareTo(primaryTask));
assertEquals(homeRoot.getParent(), primaryTask.getParent());
// Make sure windowing modes are correct
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, organizer.mPrimary.getWindowingMode());
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, primaryTask.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, organizer.mPrimary.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, secondaryTask.getWindowingMode());
+ // Ensure no longer in splitscreen.
+ assertEquals(WINDOWING_MODE_FULLSCREEN, primaryTask.getWindowingMode());
+ // Ensure that the override mode is restored to undefined
+ assertEquals(WINDOWING_MODE_UNDEFINED, primaryTask.getRequestedOverrideWindowingMode());
// Move secondary to back via parent (should be equivalent)
organizer.mSecondary.moveToBack("test", secondaryTask);
- // Assert that it is now in back but still in secondary split
+ // Assert that it is now in back and left in secondary split
+ assertEquals(0, organizer.mSecondary.getChildCount());
assertEquals(1, homeRoot.compareTo(primaryTask));
- assertEquals(secondaryTask, organizer.mSecondary.getChildAt(0));
assertEquals(1, primaryTask.compareTo(secondaryTask));
assertEquals(homeRoot.getParent(), secondaryTask.getParent());
}
@@ -423,7 +369,7 @@ public class RootTaskTests extends WindowTestsBase {
.setTask(rootHomeTask)
.build();
final Task secondaryRootTask = mAtm.mTaskOrganizerController.createRootTask(
- rootHomeTask.getDisplayContent(), WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, null);
+ rootHomeTask.getDisplayContent(), WINDOWING_MODE_MULTI_WINDOW, null);
rootHomeTask.reparent(secondaryRootTask, POSITION_TOP);
assertEquals(secondaryRootTask, rootHomeTask.getParent());
@@ -581,6 +527,7 @@ public class RootTaskTests extends WindowTestsBase {
assertTrue(pinnedRootTask.shouldBeVisible(null /* starting */));
}
+ // TODO(b/199236198): check this is unnecessary or need to migrate after remove legacy split.
@Test
public void testShouldBeVisible_SplitScreen() {
// task not supporting split should be fullscreen for this test.
@@ -700,30 +647,23 @@ public class RootTaskTests extends WindowTestsBase {
@Test
public void testGetVisibility_MultiLevel() {
- final Task homeRootTask = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, true /* onTop */);
+ TestSplitOrganizer organizer = new TestSplitOrganizer(mAtm);
final Task splitPrimary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_UNDEFINED, true /* onTop */);
- // Creating as two-level tasks so home task can be reparented to split-secondary root task.
+ WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_UNDEFINED, true /* onTop */);
final Task splitSecondary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_UNDEFINED, true /* onTop */,
- true /* twoLevelTask */);
+ WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_UNDEFINED, true /* onTop */);
- doReturn(false).when(homeRootTask).isTranslucent(any());
doReturn(false).when(splitPrimary).isTranslucent(any());
doReturn(false).when(splitSecondary).isTranslucent(any());
- // Re-parent home to split secondary.
- homeRootTask.reparent(splitSecondary, POSITION_TOP);
- // Current tasks should be visible.
+ // Re-parent tasks to split.
+ organizer.putTaskToPrimary(splitPrimary, true /* onTop */);
+ organizer.putTaskToSecondary(splitSecondary, true /* onTop */);
+ // Reparented tasks should be visible.
assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE,
splitPrimary.getVisibility(null /* starting */));
assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE,
splitSecondary.getVisibility(null /* starting */));
- // Home task should still be visible even though it is a child of another visible task.
- assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE,
- homeRootTask.getVisibility(null /* starting */));
-
// Add fullscreen translucent task that partially occludes split tasks
final Task translucentRootTask = createStandardRootTaskForVisibilityTest(
@@ -736,19 +676,12 @@ public class RootTaskTests extends WindowTestsBase {
splitPrimary.getVisibility(null /* starting */));
assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT,
splitSecondary.getVisibility(null /* starting */));
- // Home task should be visible behind translucent since its parent is visible behind
- // translucent.
- assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT,
- homeRootTask.getVisibility(null /* starting */));
-
// Hide split-secondary
- splitSecondary.setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, true /* set */);
+ organizer.mSecondary.setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, true /* set */);
// Home split secondary and home task should be invisible.
assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
splitSecondary.getVisibility(null /* starting */));
- assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
- homeRootTask.getVisibility(null /* starting */));
}
@Test
@@ -1094,36 +1027,6 @@ public class RootTaskTests extends WindowTestsBase {
assertEquals(pinnedRootTask, getRootTaskAbove(alwaysOnTopRootTask2));
}
- @Test
- public void testSplitScreenMoveToFront() {
- final Task splitScreenPrimary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- final Task splitScreenSecondary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- final Task assistantRootTask = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_ASSISTANT, true /* onTop */);
-
- doReturn(false).when(splitScreenPrimary).isTranslucent(any());
- doReturn(false).when(splitScreenSecondary).isTranslucent(any());
- doReturn(false).when(assistantRootTask).isTranslucent(any());
-
- assertFalse(splitScreenPrimary.shouldBeVisible(null /* starting */));
- assertFalse(splitScreenSecondary.shouldBeVisible(null /* starting */));
- assertTrue(assistantRootTask.shouldBeVisible(null /* starting */));
-
- splitScreenSecondary.moveToFront("testSplitScreenMoveToFront");
-
- if (isAssistantOnTop()) {
- assertFalse(splitScreenPrimary.shouldBeVisible(null /* starting */));
- assertFalse(splitScreenSecondary.shouldBeVisible(null /* starting */));
- assertTrue(assistantRootTask.shouldBeVisible(null /* starting */));
- } else {
- assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */));
- assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */));
- assertFalse(assistantRootTask.shouldBeVisible(null /* starting */));
- }
- }
-
private Task createStandardRootTaskForVisibilityTest(int windowingMode,
boolean translucent) {
final Task rootTask = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 645d804b3cfc..c722b0a70c0a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -16,7 +16,7 @@
package com.android.server.wm;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
@@ -937,8 +937,8 @@ public class SizeCompatTests extends WindowTestsBase {
mTask.reparent(organizer.mPrimary, POSITION_TOP,
false /*moveParents*/, "test");
organizer.mPrimary.setBounds(0, 0, 1000, 1400);
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, mTask.getWindowingMode());
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, activity.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, activity.getWindowingMode());
// Resizable activity is sandboxed due to config being enabled.
assertActivityMaxBoundsSandboxed(activity);
@@ -1828,8 +1828,8 @@ public class SizeCompatTests extends WindowTestsBase {
mTask.reparent(organizer.mPrimary, POSITION_TOP,
false /*moveParents*/, "test");
organizer.mPrimary.setBounds(0, 0, 1000, 1400);
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, mTask.getWindowingMode());
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, mActivity.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, mActivity.getWindowingMode());
// Non-resizable activity in size compat mode
assertScaled();
@@ -1868,8 +1868,8 @@ public class SizeCompatTests extends WindowTestsBase {
mTask.reparent(organizer.mPrimary, POSITION_TOP,
false /*moveParents*/, "test");
organizer.mPrimary.setBounds(0, 0, 1000, 1400);
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, mTask.getWindowingMode());
- assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, mActivity.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+ assertEquals(WINDOWING_MODE_MULTI_WINDOW, mActivity.getWindowingMode());
// Non-resizable activity in size compat mode
assertScaled();
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index 59a2068e7b11..62c1067ec707 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -17,14 +17,10 @@
package com.android.server.wm;
import static android.app.AppOpsManager.OP_NONE;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
@@ -66,15 +62,14 @@ import static org.mockito.Mockito.mock;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.IApplicationThread;
-import android.app.WindowConfiguration;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.graphics.Rect;
import android.hardware.HardwareBuffer;
import android.hardware.display.DisplayManager;
import android.os.Build;
@@ -1515,64 +1510,55 @@ class WindowTestsBase extends SystemServiceTestsBase {
static class TestSplitOrganizer extends WindowOrganizerTests.StubOrganizer {
final ActivityTaskManagerService mService;
+ final TaskDisplayArea mDefaultTDA;
Task mPrimary;
Task mSecondary;
- boolean mInSplit = false;
- // moves everything to secondary. Most tests expect this since sysui usually does it.
- boolean mMoveToSecondaryOnEnter = true;
int mDisplayId;
- private static final int[] CONTROLLED_ACTIVITY_TYPES = {
- ACTIVITY_TYPE_STANDARD,
- ACTIVITY_TYPE_HOME,
- ACTIVITY_TYPE_RECENTS,
- ACTIVITY_TYPE_UNDEFINED
- };
- private static final int[] CONTROLLED_WINDOWING_MODES = {
- WINDOWING_MODE_FULLSCREEN,
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
- WINDOWING_MODE_UNDEFINED
- };
+
TestSplitOrganizer(ActivityTaskManagerService service, DisplayContent display) {
mService = service;
+ mDefaultTDA = display.getDefaultTaskDisplayArea();
mDisplayId = display.mDisplayId;
mService.mTaskOrganizerController.registerTaskOrganizer(this);
mPrimary = mService.mTaskOrganizerController.createRootTask(
- display, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, null);
+ display, WINDOWING_MODE_MULTI_WINDOW, null);
mSecondary = mService.mTaskOrganizerController.createRootTask(
- display, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, null);;
+ display, WINDOWING_MODE_MULTI_WINDOW, null);
+
+ mPrimary.setAdjacentTaskFragment(mSecondary, true);
+ display.getDefaultTaskDisplayArea().setLaunchAdjacentFlagRootTask(mSecondary);
+
+ final Rect primaryBounds = new Rect();
+ final Rect secondaryBounds = new Rect();
+ display.getBounds().splitVertically(primaryBounds, secondaryBounds);
+ mPrimary.setBounds(primaryBounds);
+ mSecondary.setBounds(secondaryBounds);
}
+
TestSplitOrganizer(ActivityTaskManagerService service) {
this(service, service.mTaskSupervisor.mRootWindowContainer.getDefaultDisplay());
}
- public void setMoveToSecondaryOnEnter(boolean move) {
- mMoveToSecondaryOnEnter = move;
+
+ public Task createTaskToPrimary(boolean onTop) {
+ final Task primaryTask = mDefaultTDA.createRootTask(
+ WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, onTop);
+ putTaskToPrimary(primaryTask, onTop);
+ return primaryTask;
}
- @Override
- public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
- if (mInSplit) {
- return;
- }
- if (info.topActivityType == ACTIVITY_TYPE_UNDEFINED) {
- // Not populated
- return;
- }
- if (info.configuration.windowConfiguration.getWindowingMode()
- != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- return;
- }
- mInSplit = true;
- if (!mMoveToSecondaryOnEnter) {
- return;
- }
- DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(mDisplayId);
- dc.getDefaultTaskDisplayArea().setLaunchRootTask(
- mSecondary, CONTROLLED_WINDOWING_MODES, CONTROLLED_ACTIVITY_TYPES);
- dc.forAllRootTasks(rootTask -> {
- if (!WindowConfiguration.isSplitScreenWindowingMode(rootTask.getWindowingMode())) {
- rootTask.reparent(mSecondary, POSITION_BOTTOM);
- }
- });
+ public Task createTaskToSecondary(boolean onTop) {
+ final Task secondaryTask = mDefaultTDA.createRootTask(
+ WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, onTop);
+ putTaskToSecondary(secondaryTask, onTop);
+ return secondaryTask;
+ }
+
+ public void putTaskToPrimary(Task task, boolean onTop) {
+ task.reparent(mPrimary, onTop ? POSITION_TOP : POSITION_BOTTOM);
+ }
+
+ public void putTaskToSecondary(Task task, boolean onTop) {
+ task.reparent(mSecondary, onTop ? POSITION_TOP : POSITION_BOTTOM);
}
}