Don't only change windowing mode of root task when requesting task for windowing mode
If a task doesn't have a root task and a windowing mode is requested, it should still be honored.
Call on the non-roottask version of setWindowingMode.
Bug: 416588577
Test: Manual. Intent launches with launchWindowingMode is now respected
Flag: EXEMPT bugfix
Change-Id: Id915c02ff3345d267a075897c67afbf56ff2a6e3
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index f377ea7..9bd1b3d 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -822,10 +822,18 @@
}
}
// Update windowing mode if necessary, e.g. launch into a different windowing mode.
- if (windowingMode != WINDOWING_MODE_UNDEFINED && candidateTask.isRootTask()
+ if (windowingMode != WINDOWING_MODE_UNDEFINED
&& candidateTask.getWindowingMode() != windowingMode) {
candidateTask.mTransitionController.collect(candidateTask);
- candidateTask.setRootTaskWindowingMode(windowingMode);
+ // We only explicitly change the windowing mode if it's a root task.
+ // If it's not a root task, we don't do anything. But, if the desired windowing
+ // mode is the same as its parent's, then we will set it undefined so it inherits.
+ if (candidateTask.isRootTask()) {
+ candidateTask.setRootTaskWindowingMode(windowingMode);
+ } else if (candidateTask.getParent() != null
+ && windowingMode == candidateTask.getParent().getWindowingMode()) {
+ candidateTask.setWindowingMode(WINDOWING_MODE_UNDEFINED);
+ }
}
return candidateTask.getRootTask();
}