summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java17
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java5
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java82
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java12
4 files changed, 82 insertions, 34 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
index d5d4935f0529..b5409b7d78af 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
@@ -16,6 +16,7 @@
package com.android.wm.shell;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
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;
@@ -695,15 +696,19 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
/**
* Create a {@link WindowContainerTransaction} to clear task bounds.
*
+ * Only affects tasks that have {@link RunningTaskInfo#getActivityType()} set to
+ * {@link WindowConfiguration#ACTIVITY_TYPE_STANDARD}.
+ *
* @param displayId display id for tasks that will have bounds cleared
* @return {@link WindowContainerTransaction} with pending operations to clear bounds
*/
- public WindowContainerTransaction prepareClearBoundsForTasks(int displayId) {
+ public WindowContainerTransaction prepareClearBoundsForStandardTasks(int displayId) {
ProtoLog.d(WM_SHELL_DESKTOP_MODE, "prepareClearBoundsForTasks: displayId=%d", displayId);
WindowContainerTransaction wct = new WindowContainerTransaction();
for (int i = 0; i < mTasks.size(); i++) {
RunningTaskInfo taskInfo = mTasks.valueAt(i).getTaskInfo();
- if (taskInfo.displayId == displayId) {
+ if ((taskInfo.displayId == displayId) && (taskInfo.getActivityType()
+ == WindowConfiguration.ACTIVITY_TYPE_STANDARD)) {
ProtoLog.d(WM_SHELL_DESKTOP_MODE, "clearing bounds for token=%s taskInfo=%s",
taskInfo.token, taskInfo);
wct.setBounds(taskInfo.token, null);
@@ -715,17 +720,21 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
/**
* Create a {@link WindowContainerTransaction} to clear task level freeform setting.
*
+ * Only affects tasks that have {@link RunningTaskInfo#getActivityType()} set to
+ * {@link WindowConfiguration#ACTIVITY_TYPE_STANDARD}.
+ *
* @param displayId display id for tasks that will have windowing mode reset to {@link
* WindowConfiguration#WINDOWING_MODE_UNDEFINED}
* @return {@link WindowContainerTransaction} with pending operations to clear windowing mode
*/
- public WindowContainerTransaction prepareClearFreeformForTasks(int displayId) {
+ public WindowContainerTransaction prepareClearFreeformForStandardTasks(int displayId) {
ProtoLog.d(WM_SHELL_DESKTOP_MODE, "prepareClearFreeformForTasks: displayId=%d", displayId);
WindowContainerTransaction wct = new WindowContainerTransaction();
for (int i = 0; i < mTasks.size(); i++) {
RunningTaskInfo taskInfo = mTasks.valueAt(i).getTaskInfo();
if (taskInfo.displayId == displayId
- && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {
+ && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM
+ && taskInfo.getActivityType() == ACTIVITY_TYPE_STANDARD) {
ProtoLog.d(WM_SHELL_DESKTOP_MODE,
"clearing windowing mode for token=%s taskInfo=%s", taskInfo.token,
taskInfo);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
index 5849e163f0e2..595455e7d575 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeController.java
@@ -73,14 +73,15 @@ public class DesktopModeController {
WindowContainerTransaction wct = new WindowContainerTransaction();
// Reset freeform windowing mode that is set per task level (tasks should inherit
// container value)
- wct.merge(mShellTaskOrganizer.prepareClearFreeformForTasks(displayId), true /* transfer */);
+ wct.merge(mShellTaskOrganizer.prepareClearFreeformForStandardTasks(displayId),
+ true /* transfer */);
int targetWindowingMode;
if (enabled) {
targetWindowingMode = WINDOWING_MODE_FREEFORM;
} else {
targetWindowingMode = WINDOWING_MODE_FULLSCREEN;
// Clear any resized bounds
- wct.merge(mShellTaskOrganizer.prepareClearBoundsForTasks(displayId),
+ wct.merge(mShellTaskOrganizer.prepareClearBoundsForStandardTasks(displayId),
true /* transfer */);
}
wct.merge(mRootDisplayAreaOrganizer.prepareWindowingModeChange(displayId,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
index b29c436d0d51..7cbace5af48f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
@@ -16,6 +16,8 @@
package com.android.wm.shell;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
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;
@@ -637,26 +639,22 @@ public class ShellTaskOrganizerTests extends ShellTestCase {
}
@Test
- public void testPrepareClearBoundsForTasks() {
- RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_UNDEFINED);
- task1.displayId = 1;
+ public void testPrepareClearBoundsForStandardTasks() {
MockToken token1 = new MockToken();
- task1.token = token1.token();
+ RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_UNDEFINED, token1);
mOrganizer.onTaskAppeared(task1, null);
- RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_UNDEFINED);
- task2.displayId = 1;
MockToken token2 = new MockToken();
- task2.token = token2.token();
+ RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_UNDEFINED, token2);
mOrganizer.onTaskAppeared(task2, null);
- RunningTaskInfo otherDisplayTask = createTaskInfo(3, WINDOWING_MODE_UNDEFINED);
- otherDisplayTask.displayId = 2;
MockToken otherDisplayToken = new MockToken();
- otherDisplayTask.token = otherDisplayToken.token();
+ RunningTaskInfo otherDisplayTask = createTaskInfo(3, WINDOWING_MODE_UNDEFINED,
+ otherDisplayToken);
+ otherDisplayTask.displayId = 2;
mOrganizer.onTaskAppeared(otherDisplayTask, null);
- WindowContainerTransaction wct = mOrganizer.prepareClearBoundsForTasks(1);
+ WindowContainerTransaction wct = mOrganizer.prepareClearBoundsForStandardTasks(1);
assertEquals(wct.getChanges().size(), 2);
Change boundsChange1 = wct.getChanges().get(token1.binder());
@@ -673,26 +671,40 @@ public class ShellTaskOrganizerTests extends ShellTestCase {
}
@Test
- public void testPrepareClearFreeformForTasks() {
- RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_FREEFORM);
- task1.displayId = 1;
+ public void testPrepareClearBoundsForStandardTasks_onlyClearActivityTypeStandard() {
MockToken token1 = new MockToken();
- task1.token = token1.token();
+ RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_UNDEFINED, token1);
mOrganizer.onTaskAppeared(task1, null);
- RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW);
- task2.displayId = 1;
MockToken token2 = new MockToken();
- task2.token = token2.token();
+ RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_UNDEFINED, token2);
+ task2.configuration.windowConfiguration.setActivityType(ACTIVITY_TYPE_HOME);
+ mOrganizer.onTaskAppeared(task2, null);
+
+ WindowContainerTransaction wct = mOrganizer.prepareClearBoundsForStandardTasks(1);
+
+ // Only clear bounds for task1
+ assertEquals(1, wct.getChanges().size());
+ assertNotNull(wct.getChanges().get(token1.binder()));
+ }
+
+ @Test
+ public void testPrepareClearFreeformForStandardTasks() {
+ MockToken token1 = new MockToken();
+ RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_FREEFORM, token1);
+ mOrganizer.onTaskAppeared(task1, null);
+
+ MockToken token2 = new MockToken();
+ RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_MULTI_WINDOW, token2);
mOrganizer.onTaskAppeared(task2, null);
- RunningTaskInfo otherDisplayTask = createTaskInfo(3, WINDOWING_MODE_FREEFORM);
- otherDisplayTask.displayId = 2;
MockToken otherDisplayToken = new MockToken();
- otherDisplayTask.token = otherDisplayToken.token();
+ RunningTaskInfo otherDisplayTask = createTaskInfo(3, WINDOWING_MODE_FREEFORM,
+ otherDisplayToken);
+ otherDisplayTask.displayId = 2;
mOrganizer.onTaskAppeared(otherDisplayTask, null);
- WindowContainerTransaction wct = mOrganizer.prepareClearFreeformForTasks(1);
+ WindowContainerTransaction wct = mOrganizer.prepareClearFreeformForStandardTasks(1);
// Only task with freeform windowing mode and the right display should be updated
assertEquals(wct.getChanges().size(), 1);
@@ -701,6 +713,24 @@ public class ShellTaskOrganizerTests extends ShellTestCase {
assertEquals(wmModeChange1.getWindowingMode(), WINDOWING_MODE_UNDEFINED);
}
+ @Test
+ public void testPrepareClearFreeformForStandardTasks_onlyClearActivityTypeStandard() {
+ MockToken token1 = new MockToken();
+ RunningTaskInfo task1 = createTaskInfo(1, WINDOWING_MODE_FREEFORM, token1);
+ mOrganizer.onTaskAppeared(task1, null);
+
+ MockToken token2 = new MockToken();
+ RunningTaskInfo task2 = createTaskInfo(2, WINDOWING_MODE_FREEFORM, token2);
+ task2.configuration.windowConfiguration.setActivityType(ACTIVITY_TYPE_HOME);
+ mOrganizer.onTaskAppeared(task2, null);
+
+ WindowContainerTransaction wct = mOrganizer.prepareClearFreeformForStandardTasks(1);
+
+ // Only clear freeform for task1
+ assertEquals(1, wct.getChanges().size());
+ assertNotNull(wct.getChanges().get(token1.binder()));
+ }
+
private static RunningTaskInfo createTaskInfo(int taskId, int windowingMode) {
RunningTaskInfo taskInfo = new RunningTaskInfo();
taskInfo.taskId = taskId;
@@ -708,6 +738,14 @@ public class ShellTaskOrganizerTests extends ShellTestCase {
return taskInfo;
}
+ private static RunningTaskInfo createTaskInfo(int taskId, int windowingMode, MockToken token) {
+ RunningTaskInfo taskInfo = createTaskInfo(taskId, windowingMode);
+ taskInfo.displayId = 1;
+ taskInfo.token = token.token();
+ taskInfo.configuration.windowConfiguration.setActivityType(ACTIVITY_TYPE_STANDARD);
+ return taskInfo;
+ }
+
private static class MockToken {
private final WindowContainerToken mToken;
private final IBinder mBinder;
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java
index 58f20da34943..2ef0e7000dd6 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeControllerTest.java
@@ -88,8 +88,8 @@ public class DesktopModeControllerTest extends ShellTestCase {
WindowContainerTransaction taskWct = new WindowContainerTransaction();
MockToken taskMockToken = new MockToken();
taskWct.setWindowingMode(taskMockToken.token(), WINDOWING_MODE_UNDEFINED);
- when(mShellTaskOrganizer.prepareClearFreeformForTasks(mContext.getDisplayId())).thenReturn(
- taskWct);
+ when(mShellTaskOrganizer.prepareClearFreeformForStandardTasks(
+ mContext.getDisplayId())).thenReturn(taskWct);
// Create a fake WCT to simulate setting display windowing mode to freeform
WindowContainerTransaction displayWct = new WindowContainerTransaction();
@@ -126,15 +126,15 @@ public class DesktopModeControllerTest extends ShellTestCase {
WindowContainerTransaction taskWmWct = new WindowContainerTransaction();
MockToken taskWmMockToken = new MockToken();
taskWmWct.setWindowingMode(taskWmMockToken.token(), WINDOWING_MODE_UNDEFINED);
- when(mShellTaskOrganizer.prepareClearFreeformForTasks(mContext.getDisplayId())).thenReturn(
- taskWmWct);
+ when(mShellTaskOrganizer.prepareClearFreeformForStandardTasks(
+ mContext.getDisplayId())).thenReturn(taskWmWct);
// Create a fake WCT to simulate clearing task bounds
WindowContainerTransaction taskBoundsWct = new WindowContainerTransaction();
MockToken taskBoundsMockToken = new MockToken();
taskBoundsWct.setBounds(taskBoundsMockToken.token(), null);
- when(mShellTaskOrganizer.prepareClearBoundsForTasks(mContext.getDisplayId())).thenReturn(
- taskBoundsWct);
+ when(mShellTaskOrganizer.prepareClearBoundsForStandardTasks(
+ mContext.getDisplayId())).thenReturn(taskBoundsWct);
// Create a fake WCT to simulate setting display windowing mode to fullscreen
WindowContainerTransaction displayWct = new WindowContainerTransaction();