summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chavi Weingarten <chaviw@google.com> 2020-04-17 15:56:51 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-04-17 15:56:51 +0000
commit2bac15965943c6815799c85f4367717e421fd8f7 (patch)
tree2e356458a04af9b39cfe7aa36a9e4d61999e3f3a
parent5ac047d3656dddfa7e842b609a6d7e27d352eae0 (diff)
parent6630d85d7cfd32b76389d546438a8342501ab99a (diff)
Merge "Allow WindowOrganizerController to handle DisplayAreas" into rvc-dev
-rw-r--r--services/core/java/com/android/server/wm/Task.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java70
-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);