Ensure docked divider is below always-on-top stacks.
We need interleave it with the AppWindowToken hierarchy even
though it only has a WindowToken.
Fixes: 70318142
Fixes: 70675228
Fixes: 70178829
Test: Manual. ZOrderingTests.
Change-Id: I7b898f2157de85433416579efae5e01a9dcbf46c
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 2decbcb..7cdae0d 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -49,6 +49,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
+import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
@@ -3567,6 +3568,18 @@
&& imeContainer.getSurfaceControl() != null;
for (int j = 0; j < mChildren.size(); ++j) {
final WindowToken wt = mChildren.get(j);
+
+ // The divider is unique in that it does not have an AppWindowToken but needs to be
+ // interleaved with them. In particular it must be above any split-screen stacks
+ // but below any always-on-top stacks.
+ if (wt.windowType == TYPE_DOCK_DIVIDER) {
+ final TaskStack dockedStack = getSplitScreenPrimaryStack();
+ if (dockedStack != null) {
+ wt.assignRelativeLayer(t, dockedStack.getSurfaceControl(),
+ Integer.MAX_VALUE);
+ continue;
+ }
+ }
wt.assignLayer(t, j);
wt.assignChildLayers(t);