diff options
| author | 2020-04-17 15:56:51 +0000 | |
|---|---|---|
| committer | 2020-04-17 15:56:51 +0000 | |
| commit | 2bac15965943c6815799c85f4367717e421fd8f7 (patch) | |
| tree | 2e356458a04af9b39cfe7aa36a9e4d61999e3f3a | |
| parent | 5ac047d3656dddfa7e842b609a6d7e27d352eae0 (diff) | |
| parent | 6630d85d7cfd32b76389d546438a8342501ab99a (diff) | |
Merge "Allow WindowOrganizerController to handle DisplayAreas" into rvc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowOrganizerController.java | 70 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java (renamed from services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java) | 68 |
3 files changed, 83 insertions, 58 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 2a57fcc9df78..299b3bf172d7 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -433,7 +433,6 @@ class Task extends WindowContainer<WindowContainer> { static final int FLAG_FORCE_HIDDEN_FOR_TASK_ORG = 1 << 1; private int mForceHiddenFlags = 0; - SurfaceControl.Transaction mMainWindowSizeChangeTransaction; private final FindRootHelper mFindRootHelper = new FindRootHelper(); @@ -4263,7 +4262,7 @@ class Task extends WindowContainer<WindowContainer> { void setActivityWindowingMode(int windowingMode) { PooledConsumer c = PooledLambda.obtainConsumer(ActivityRecord::setWindowingMode, - PooledLambda.__(ActivityRecord.class), windowingMode); + PooledLambda.__(ActivityRecord.class), windowingMode); forAllActivities(c); c.recycle(); } diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 8b27667475a9..160978dadcba 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -186,12 +186,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub return syncId; } - private int sanitizeAndApplyChange(WindowContainer container, - WindowContainerTransaction.Change change) { - if (!(container instanceof Task)) { - throw new RuntimeException("Invalid token in task transaction"); - } - final Task task = (Task) container; + private int applyChanges(WindowContainer container, WindowContainerTransaction.Change change) { // The "client"-facing API should prevent bad changes; however, just in case, sanitize // masks here. final int configMask = change.getConfigSetMask() & CONTROLLABLE_CONFIGS; @@ -211,11 +206,38 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub effects |= TRANSACT_EFFECTS_LIFECYCLE; } } - if ((change.getChangeMask() & WindowContainerTransaction.Change.CHANGE_HIDDEN) != 0) { - if (task.setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, change.getHidden())) { - effects |= TRANSACT_EFFECTS_LIFECYCLE; + + final int windowingMode = change.getWindowingMode(); + if (windowingMode > -1) { + container.setWindowingMode(windowingMode); + } + return effects; + } + + private int applyTaskChanges(Task tr, WindowContainerTransaction.Change c) { + int effects = 0; + final SurfaceControl.Transaction t = c.getBoundsChangeTransaction(); + + if ((c.getChangeMask() & WindowContainerTransaction.Change.CHANGE_HIDDEN) != 0) { + if (tr.setForceHidden(FLAG_FORCE_HIDDEN_FOR_TASK_ORG, c.getHidden())) { + effects = TRANSACT_EFFECTS_LIFECYCLE; } } + + final int childWindowingMode = c.getActivityWindowingMode(); + if (childWindowingMode > -1) { + tr.setActivityWindowingMode(childWindowingMode); + } + + if (t != null) { + tr.setMainWindowSizeChangeTransaction(t); + } + + Rect enterPipBounds = c.getEnterPipBounds(); + if (enterPipBounds != null) { + mService.mStackSupervisor.updatePictureInPictureMode(tr, enterPipBounds, true); + } + return effects; } @@ -283,30 +305,20 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub return TRANSACT_EFFECTS_LIFECYCLE; } + private void sanitizeWindowContainer(WindowContainer wc) { + if (!(wc instanceof Task) && !(wc instanceof DisplayArea)) { + throw new RuntimeException("Invalid token in task or displayArea transaction"); + } + } + private int applyWindowContainerChange(WindowContainer wc, WindowContainerTransaction.Change c) { - int effects = sanitizeAndApplyChange(wc, c); + sanitizeWindowContainer(wc); - final Task tr = wc.asTask(); + int effects = applyChanges(wc, c); - final SurfaceControl.Transaction t = c.getBoundsChangeTransaction(); - if (t != null) { - tr.setMainWindowSizeChangeTransaction(t); - } - - Rect enterPipBounds = c.getEnterPipBounds(); - if (enterPipBounds != null) { - mService.mStackSupervisor.updatePictureInPictureMode(tr, - enterPipBounds, true); - } - - final int windowingMode = c.getWindowingMode(); - if (windowingMode > -1) { - tr.setWindowingMode(windowingMode); - } - final int childWindowingMode = c.getActivityWindowingMode(); - if (childWindowingMode > -1) { - tr.setActivityWindowingMode(childWindowingMode); + if (wc instanceof Task) { + effects |= applyTaskChanges(wc.asTask(), c); } return effects; diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index e41d4dcdb186..53cc09bf08e8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -39,6 +39,7 @@ 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.dx.mockito.inline.extended.ExtendedMockito.when; +import static com.android.server.wm.DisplayArea.Type.ABOVE_TASKS; import static com.android.server.wm.WindowContainer.POSITION_TOP; import static org.junit.Assert.assertEquals; @@ -70,7 +71,6 @@ import android.window.WindowContainerTransaction; import androidx.test.filters.SmallTest; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -87,7 +87,7 @@ import java.util.List; @SmallTest @Presubmit @RunWith(WindowTestRunner.class) -public class TaskOrganizerTests extends WindowTestsBase { +public class WindowOrganizerTests extends WindowTestsBase { private ITaskOrganizer registerMockOrganizer(int windowingMode) { final ITaskOrganizer organizer = mock(ITaskOrganizer.class); when(organizer.asBinder()).thenReturn(new Binder()); @@ -307,11 +307,7 @@ public class TaskOrganizerTests extends WindowTestsBase { final ActivityStack stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); final Task task = stack.getTopMostTask(); - WindowContainerTransaction t = new WindowContainerTransaction(); - Rect newBounds = new Rect(10, 10, 100, 100); - t.setBounds(task.mRemoteToken.toWindowContainerToken(), new Rect(10, 10, 100, 100)); - mWm.mAtmService.mWindowOrganizerController.applyTransaction(t); - assertEquals(newBounds, task.getBounds()); + testTransaction(task); } @Test @@ -321,24 +317,41 @@ public class TaskOrganizerTests extends WindowTestsBase { .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); StackInfo info = mWm.mAtmService.getStackInfo(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD); - WindowContainerTransaction t = new WindowContainerTransaction(); assertEquals(stack.mRemoteToken.toWindowContainerToken(), info.stackToken); + testTransaction(stack); + } + + @Test + public void testDisplayAreaTransaction() { + removeGlobalMinSizeRestriction(); + final DisplayArea displayArea = new DisplayArea<>(mWm, ABOVE_TASKS, "DisplayArea"); + testTransaction(displayArea); + } + + private void testTransaction(WindowContainer wc) { + WindowContainerTransaction t = new WindowContainerTransaction(); Rect newBounds = new Rect(10, 10, 100, 100); - t.setBounds(info.stackToken, new Rect(10, 10, 100, 100)); + t.setBounds(wc.mRemoteToken.toWindowContainerToken(), new Rect(10, 10, 100, 100)); mWm.mAtmService.mWindowOrganizerController.applyTransaction(t); - assertEquals(newBounds, stack.getBounds()); + assertEquals(newBounds, wc.getBounds()); } @Test public void testSetWindowingMode() { final ActivityStack stack = new ActivityTestsBase.StackBuilder(mWm.mRoot) - .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); - final WindowContainerTransaction t = new WindowContainerTransaction(); + .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); + testSetWindowingMode(stack); - t.setWindowingMode(stack.mRemoteToken.toWindowContainerToken(), WINDOWING_MODE_FULLSCREEN); - mWm.mAtmService.mWindowOrganizerController.applyTransaction(t); + final DisplayArea displayArea = new DisplayArea<>(mWm, ABOVE_TASKS, "DisplayArea"); + displayArea.setWindowingMode(WINDOWING_MODE_FREEFORM); + testSetWindowingMode(displayArea); + } - assertEquals(WINDOWING_MODE_FULLSCREEN, stack.getWindowingMode()); + private void testSetWindowingMode(WindowContainer wc) { + final WindowContainerTransaction t = new WindowContainerTransaction(); + t.setWindowingMode(wc.mRemoteToken.toWindowContainerToken(), WINDOWING_MODE_FULLSCREEN); + mWm.mAtmService.mWindowOrganizerController.applyTransaction(t); + assertEquals(WINDOWING_MODE_FULLSCREEN, wc.getWindowingMode()); } @Test @@ -400,7 +413,8 @@ public class TaskOrganizerTests extends WindowTestsBase { final int origScreenHDp = task.getConfiguration().screenHeightDp; t = new WindowContainerTransaction(); // verify that setting config overrides on parent restricts children. - t.setScreenSizeDp(stack.mRemoteToken.toWindowContainerToken(), origScreenWDp, origScreenHDp); + t.setScreenSizeDp(stack.mRemoteToken + .toWindowContainerToken(), origScreenWDp, origScreenHDp); t.setBounds(task.mRemoteToken.toWindowContainerToken(), new Rect(10, 10, 150, 200)); mWm.mAtmService.mWindowOrganizerController.applyTransaction(t); assertEquals(origScreenHDp, task.getConfiguration().screenHeightDp); @@ -665,7 +679,7 @@ public class TaskOrganizerTests extends WindowTestsBase { BLASTSyncEngine bse = new BLASTSyncEngine(); BLASTSyncEngine.TransactionReadyListener transactionListener = - mock(BLASTSyncEngine.TransactionReadyListener.class); + mock(BLASTSyncEngine.TransactionReadyListener.class); int id = bse.startSyncSet(transactionListener); bse.addToSyncSet(id, task); @@ -689,7 +703,7 @@ public class TaskOrganizerTests extends WindowTestsBase { BLASTSyncEngine bse = new BLASTSyncEngine(); BLASTSyncEngine.TransactionReadyListener transactionListener = - mock(BLASTSyncEngine.TransactionReadyListener.class); + mock(BLASTSyncEngine.TransactionReadyListener.class); int id = bse.startSyncSet(transactionListener); assertEquals(true, bse.addToSyncSet(id, task)); @@ -715,7 +729,7 @@ public class TaskOrganizerTests extends WindowTestsBase { BLASTSyncEngine bse = new BLASTSyncEngine(); BLASTSyncEngine.TransactionReadyListener transactionListener = - mock(BLASTSyncEngine.TransactionReadyListener.class); + mock(BLASTSyncEngine.TransactionReadyListener.class); int id = bse.startSyncSet(transactionListener); bse.addToSyncSet(id, task); @@ -738,7 +752,7 @@ public class TaskOrganizerTests extends WindowTestsBase { BLASTSyncEngine bse = new BLASTSyncEngine(); BLASTSyncEngine.TransactionReadyListener transactionListener = - mock(BLASTSyncEngine.TransactionReadyListener.class); + mock(BLASTSyncEngine.TransactionReadyListener.class); int id = bse.startSyncSet(transactionListener); bse.addToSyncSet(id, task); @@ -764,7 +778,7 @@ public class TaskOrganizerTests extends WindowTestsBase { BLASTSyncEngine bse = new BLASTSyncEngine(); BLASTSyncEngine.TransactionReadyListener transactionListener = - mock(BLASTSyncEngine.TransactionReadyListener.class); + mock(BLASTSyncEngine.TransactionReadyListener.class); int id = bse.startSyncSet(transactionListener); assertEquals(true, bse.addToSyncSet(id, task)); @@ -817,8 +831,8 @@ public class TaskOrganizerTests extends WindowTestsBase { mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(o, WINDOWING_MODE_PINNED); final ActivityRecord record = makePipableActivity(); - final PictureInPictureParams p = - new PictureInPictureParams.Builder().setAspectRatio(new Rational(1, 2)).build(); + final PictureInPictureParams p = new PictureInPictureParams.Builder() + .setAspectRatio(new Rational(1, 2)).build(); assertTrue(mWm.mAtmService.enterPictureInPictureMode(record.token, p)); waitUntilHandlersIdle(); assertNotNull(o.mInfo); @@ -838,15 +852,15 @@ public class TaskOrganizerTests extends WindowTestsBase { mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(o, WINDOWING_MODE_PINNED); final ActivityRecord record = makePipableActivity(); - final PictureInPictureParams p = - new PictureInPictureParams.Builder().setAspectRatio(new Rational(1, 2)).build(); + final PictureInPictureParams p = new PictureInPictureParams.Builder() + .setAspectRatio(new Rational(1, 2)).build(); assertTrue(mWm.mAtmService.enterPictureInPictureMode(record.token, p)); waitUntilHandlersIdle(); assertNotNull(o.mInfo); assertNotNull(o.mInfo.pictureInPictureParams); - final PictureInPictureParams p2 = - new PictureInPictureParams.Builder().setAspectRatio(new Rational(3, 4)).build(); + final PictureInPictureParams p2 = new PictureInPictureParams.Builder() + .setAspectRatio(new Rational(3, 4)).build(); mWm.mAtmService.setPictureInPictureParams(record.token, p2); waitUntilHandlersIdle(); assertNotNull(o.mChangedInfo); |