Merge "Fix divider bar shown on top of tasks above split pair"
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user