Loading services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java +3 −5 Original line number Diff line number Diff line Loading @@ -686,14 +686,12 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { private void adjustBoundsToAvoidConflictInDisplayArea(@NonNull TaskDisplayArea displayArea, @NonNull Rect inOutBounds) { final List<Rect> taskBoundsToCheck = new ArrayList<>(); displayArea.forAllRootTasks(task -> { if (!task.inFreeformWindowingMode()) { displayArea.forAllLeafTasks(task -> { if (!task.inFreeformWindowingMode() || !task.isVisibleRequested()) { return; } taskBoundsToCheck.add(task.getBounds()); for (int j = 0; j < task.getChildCount(); ++j) { taskBoundsToCheck.add(task.getChildAt(j).getBounds()); } }, false /* traverseTopToBottom */); adjustBoundsToAvoidConflict(displayArea.getBounds(), taskBoundsToCheck, inOutBounds); } Loading services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +38 −10 Original line number Diff line number Diff line Loading @@ -1068,7 +1068,7 @@ public class TaskLaunchParamsModifierTests extends final ActivityRecord source = createSourceActivity(fullscreenDisplay); source.getTask().setWindowingMode(WINDOWING_MODE_FREEFORM); // Set some bounds to avoid conflict with the other activity. source.setBounds(100, 100, 200, 200); source.getTask().setBounds(100, 100, 200, 200); final ActivityOptions options = ActivityOptions.makeBasic(); final Rect expected = new Rect(0, 0, 150, 150); Loading Loading @@ -1723,12 +1723,32 @@ public class TaskLaunchParamsModifierTests extends assertEquals(new Rect(200, 0, 400, 400), mResult.mBounds); } @Test public void testNoShiftIfConflictingTaskIsNotVisible() { final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150), /* isVisible */ false); final Rect launchingTaskBounds = new Rect(50, 50, 500, 300); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); options.setLaunchBounds(launchingTaskBounds); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setOptions(options).calculate()); assertEquals(launchingTaskBounds, mResult.mBounds); } @Test public void testShiftsToRightForCloseToLeftBoundsWhenConflict() { final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150)); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1745,7 +1765,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(1720, 50, 1830, 150)); addFreeformTaskTo(freeformDisplay, new Rect(1720, 50, 1830, 150), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1762,7 +1783,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 100, 300)); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 100, 300), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1779,7 +1801,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 300)); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 300), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1796,7 +1819,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 100)); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 100), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1813,7 +1837,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 67, 240, 100)); addFreeformTaskTo(freeformDisplay, new Rect(120, 67, 240, 100), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading Loading @@ -1860,7 +1885,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 200, 100)); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 200, 100), /* isVisible */ true); mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea(); mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM; Loading Loading @@ -1917,11 +1943,13 @@ public class TaskLaunchParamsModifierTests extends return new ActivityBuilder(mAtm).setTask(rootTask).build(); } private void addFreeformTaskTo(TestDisplayContent display, Rect bounds) { private void addFreeformTaskTo(TestDisplayContent display, Rect bounds, Boolean isVisible) { final Task rootTask = display.getDefaultTaskDisplayArea() .createRootTask(display.getWindowingMode(), ACTIVITY_TYPE_STANDARD, true); rootTask.setWindowingMode(WINDOWING_MODE_FREEFORM); final Task task = new TaskBuilder(mSupervisor).setParentTask(rootTask).build(); final Task task = new TaskBuilder(mSupervisor).setParentTask(rootTask) .setCreateActivity(true).build(); task.getRootActivity().setVisibility(isVisible); // Just work around the unnecessary adjustments for bounds. task.getWindowConfiguration().setBounds(bounds); } Loading Loading
services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java +3 −5 Original line number Diff line number Diff line Loading @@ -686,14 +686,12 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { private void adjustBoundsToAvoidConflictInDisplayArea(@NonNull TaskDisplayArea displayArea, @NonNull Rect inOutBounds) { final List<Rect> taskBoundsToCheck = new ArrayList<>(); displayArea.forAllRootTasks(task -> { if (!task.inFreeformWindowingMode()) { displayArea.forAllLeafTasks(task -> { if (!task.inFreeformWindowingMode() || !task.isVisibleRequested()) { return; } taskBoundsToCheck.add(task.getBounds()); for (int j = 0; j < task.getChildCount(); ++j) { taskBoundsToCheck.add(task.getChildAt(j).getBounds()); } }, false /* traverseTopToBottom */); adjustBoundsToAvoidConflict(displayArea.getBounds(), taskBoundsToCheck, inOutBounds); } Loading
services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +38 −10 Original line number Diff line number Diff line Loading @@ -1068,7 +1068,7 @@ public class TaskLaunchParamsModifierTests extends final ActivityRecord source = createSourceActivity(fullscreenDisplay); source.getTask().setWindowingMode(WINDOWING_MODE_FREEFORM); // Set some bounds to avoid conflict with the other activity. source.setBounds(100, 100, 200, 200); source.getTask().setBounds(100, 100, 200, 200); final ActivityOptions options = ActivityOptions.makeBasic(); final Rect expected = new Rect(0, 0, 150, 150); Loading Loading @@ -1723,12 +1723,32 @@ public class TaskLaunchParamsModifierTests extends assertEquals(new Rect(200, 0, 400, 400), mResult.mBounds); } @Test public void testNoShiftIfConflictingTaskIsNotVisible() { final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150), /* isVisible */ false); final Rect launchingTaskBounds = new Rect(50, 50, 500, 300); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); options.setLaunchBounds(launchingTaskBounds); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setOptions(options).calculate()); assertEquals(launchingTaskBounds, mResult.mBounds); } @Test public void testShiftsToRightForCloseToLeftBoundsWhenConflict() { final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150)); addFreeformTaskTo(freeformDisplay, new Rect(50, 50, 100, 150), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1745,7 +1765,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(1720, 50, 1830, 150)); addFreeformTaskTo(freeformDisplay, new Rect(1720, 50, 1830, 150), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1762,7 +1783,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 100, 300)); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 100, 300), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1779,7 +1801,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 300)); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 300), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1796,7 +1819,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 100)); addFreeformTaskTo(freeformDisplay, new Rect(120, 0, 240, 100), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading @@ -1813,7 +1837,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(120, 67, 240, 100)); addFreeformTaskTo(freeformDisplay, new Rect(120, 67, 240, 100), /* isVisible */ true); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(freeformDisplay.mDisplayId); Loading Loading @@ -1860,7 +1885,8 @@ public class TaskLaunchParamsModifierTests extends final TestDisplayContent freeformDisplay = createNewDisplayContent( WINDOWING_MODE_FREEFORM); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 200, 100)); addFreeformTaskTo(freeformDisplay, new Rect(0, 0, 200, 100), /* isVisible */ true); mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea(); mCurrent.mWindowingMode = WINDOWING_MODE_FREEFORM; Loading Loading @@ -1917,11 +1943,13 @@ public class TaskLaunchParamsModifierTests extends return new ActivityBuilder(mAtm).setTask(rootTask).build(); } private void addFreeformTaskTo(TestDisplayContent display, Rect bounds) { private void addFreeformTaskTo(TestDisplayContent display, Rect bounds, Boolean isVisible) { final Task rootTask = display.getDefaultTaskDisplayArea() .createRootTask(display.getWindowingMode(), ACTIVITY_TYPE_STANDARD, true); rootTask.setWindowingMode(WINDOWING_MODE_FREEFORM); final Task task = new TaskBuilder(mSupervisor).setParentTask(rootTask).build(); final Task task = new TaskBuilder(mSupervisor).setParentTask(rootTask) .setCreateActivity(true).build(); task.getRootActivity().setVisibility(isVisible); // Just work around the unnecessary adjustments for bounds. task.getWindowConfiguration().setBounds(bounds); } Loading