Merge "Fix divider bar shown on top of tasks above split pair"

This commit is contained in:
Jerry Chang
2021-10-28 06:55:39 +00:00
committed by Android (Google) Code Review
2 changed files with 54 additions and 26 deletions

View File

@@ -798,12 +798,9 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
int layer = 0;
// Place root home tasks to the bottom.
layer = adjustRootTaskLayer(t, mTmpHomeChildren, layer);
adjustRootTaskLayer(t, mTmpNormalChildren, layer);
// Always on top tasks layer should higher than split divider layer so set it as start.
t.setLayer(mSplitScreenDividerAnchor, SPLIT_DIVIDER_LAYER);
layer = SPLIT_DIVIDER_LAYER + 1;
layer = adjustRootTaskLayer(t, mTmpNormalChildren, layer);
adjustRootTaskLayer(t, mTmpAlwaysOnTopChildren, layer);
t.setLayer(mSplitScreenDividerAnchor, SPLIT_DIVIDER_LAYER);
}
/**
@@ -818,19 +815,33 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
ArrayList<WindowContainer> children, int startLayer) {
mTmpNeedsZBoostIndexes.clear();
final int childCount = children.size();
boolean hasAdjacentTask = false;
for (int i = 0; i < childCount; i++) {
final WindowContainer child = children.get(i);
final TaskDisplayArea childTda = child.asTaskDisplayArea();
boolean childNeedsZBoost = childTda != null
final boolean childNeedsZBoost = childTda != null
? childTda.childrenNeedZBoost()
: child.needsZBoost();
if (!childNeedsZBoost) {
child.assignLayer(t, startLayer++);
} else {
if (childNeedsZBoost) {
mTmpNeedsZBoostIndexes.add(i);
continue;
}
final Task childTask = child.asTask();
final boolean inAdjacentTask = childTask != null
&& child.inMultiWindowMode()
&& childTask.getRootTask().getAdjacentTaskFragment() != null;
if (inAdjacentTask || child.inSplitScreenWindowingMode()) {
hasAdjacentTask = true;
} else if (hasAdjacentTask && startLayer < SPLIT_DIVIDER_LAYER) {
// Task on top of adjacent tasks should be higher than split divider layer so
// set it as start.
startLayer = SPLIT_DIVIDER_LAYER + 1;
}
child.assignLayer(t, startLayer++);
}
final int zBoostSize = mTmpNeedsZBoostIndexes.size();

View File

@@ -23,7 +23,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
@@ -469,24 +468,42 @@ public class ZOrderingTests extends WindowTestsBase {
@Test
public void testDockedDividerPosition() {
final WindowState pinnedStackWindow = createWindow(null, WINDOWING_MODE_PINNED,
ACTIVITY_TYPE_STANDARD, TYPE_BASE_APPLICATION, mDisplayContent,
"pinnedStackWindow");
final WindowState splitScreenWindow = createWindow(null,
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, TYPE_BASE_APPLICATION,
mDisplayContent, "splitScreenWindow");
final WindowState splitScreenSecondaryWindow = createWindow(null,
WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD,
TYPE_BASE_APPLICATION, mDisplayContent, "splitScreenSecondaryWindow");
final WindowState assistantStackWindow = createWindow(null,
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_ASSISTANT, TYPE_BASE_APPLICATION,
mDisplayContent, "assistantStackWindow");
final Task pinnedTask =
createTask(mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
final WindowState pinnedWindow =
createAppWindow(pinnedTask, ACTIVITY_TYPE_STANDARD, "pinnedWindow");
final Task belowTask =
createTask(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
final WindowState belowTaskWindow =
createAppWindow(belowTask, ACTIVITY_TYPE_STANDARD, "belowTaskWindow");
final Task splitScreenTask1 =
createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
final WindowState splitWindow1 =
createAppWindow(splitScreenTask1, ACTIVITY_TYPE_STANDARD, "splitWindow1");
final Task splitScreenTask2 =
createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
final WindowState splitWindow2 =
createAppWindow(splitScreenTask2, ACTIVITY_TYPE_STANDARD, "splitWindow2");
splitScreenTask1.setAdjacentTaskFragment(splitScreenTask2);
splitScreenTask2.setAdjacentTaskFragment(splitScreenTask1);
final Task aboveTask =
createTask(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
final WindowState aboveTaskWindow =
createAppWindow(aboveTask, ACTIVITY_TYPE_STANDARD, "aboveTaskWindow");
mDisplayContent.assignChildLayers(mTransaction);
assertWindowHigher(mDockedDividerWindow, splitScreenWindow);
assertWindowHigher(mDockedDividerWindow, splitScreenSecondaryWindow);
assertWindowHigher(pinnedStackWindow, mDockedDividerWindow);
assertWindowHigher(splitWindow1, belowTaskWindow);
assertWindowHigher(splitWindow1, belowTaskWindow);
assertWindowHigher(splitWindow2, belowTaskWindow);
assertWindowHigher(splitWindow2, belowTaskWindow);
assertWindowHigher(mDockedDividerWindow, splitWindow1);
assertWindowHigher(mDockedDividerWindow, splitWindow2);
assertWindowHigher(aboveTaskWindow, mDockedDividerWindow);
assertWindowHigher(pinnedWindow, aboveTaskWindow);
}
@Test