diff options
| author | 2022-01-19 08:12:01 +0000 | |
|---|---|---|
| committer | 2022-01-19 08:12:01 +0000 | |
| commit | d6b531e627ab0fc2dd855220abf545d4df7ce9ae (patch) | |
| tree | 211621ed505eff0e6ce5f5524cddf9d2d34efd8f | |
| parent | 20ba147a1138be3ea40d7e20651ac5dd83afab1e (diff) | |
| parent | c96cfffa8447248b242d5177355f13502f57ef27 (diff) | |
Merge "Refactor TestSplitOrganizer and remove useless code"
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); } } |