summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/Task.java7
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java30
2 files changed, 17 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index e5e1a7a245d6..3fd08ea1e127 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -4340,7 +4340,12 @@ class Task extends WindowContainer<WindowContainer> {
case WINDOWING_MODE_FULLSCREEN:
if (gotTranslucentSplitScreenPrimary || gotTranslucentSplitScreenSecondary) {
// At least one of the split-screen stacks that covers this one is translucent.
- return TASK_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT;
+ // When in split mode, home task will be reparented to the secondary split while
+ // leaving tasks not supporting split below. Due to
+ // TaskDisplayArea#assignRootTaskOrdering always adjusts home surface layer to
+ // the bottom, this makes sure tasks not in split roots won't occlude home task
+ // unexpectedly.
+ return TASK_VISIBILITY_INVISIBLE;
}
break;
case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY:
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
index 748622b810d5..2d3c5a87f59f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
@@ -585,38 +585,30 @@ public class RootTaskTests extends WindowTestsBase {
@Test
public void testShouldBeVisible_SplitScreen() {
- final Task homeRootTask = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
- WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, true /* onTop */);
- // Home root task should always be fullscreen for this test.
- doReturn(false).when(homeRootTask).supportsSplitScreenWindowingMode();
+ // task not supporting split should be fullscreen for this test.
+ final Task notSupportingSplitTask = createTaskForShouldBeVisibleTest(
+ mDefaultTaskDisplayArea, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD,
+ true /* onTop */);
+ doReturn(false).when(notSupportingSplitTask).supportsSplitScreenWindowingMode();
final Task splitScreenPrimary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
final Task splitScreenSecondary = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);
- // Home root task shouldn't be visible if both halves of split-screen are opaque.
+ // root task not supporting split shouldn't be visible if both halves of split-screen are
+ // opaque.
doReturn(false).when(splitScreenPrimary).isTranslucent(any());
doReturn(false).when(splitScreenSecondary).isTranslucent(any());
- assertFalse(homeRootTask.shouldBeVisible(null /* starting */));
+ assertFalse(notSupportingSplitTask.shouldBeVisible(null /* starting */));
assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */));
assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */));
- assertEquals(TASK_VISIBILITY_INVISIBLE, homeRootTask.getVisibility(null /* starting */));
- assertEquals(TASK_VISIBILITY_VISIBLE,
- splitScreenPrimary.getVisibility(null /* starting */));
- assertEquals(TASK_VISIBILITY_VISIBLE,
- splitScreenSecondary.getVisibility(null /* starting */));
- // Home root task should be visible if one of the halves of split-screen is translucent.
+ // root task not supporting split shouldn't be visible if one of the halves of split-screen
+ // is translucent.
doReturn(true).when(splitScreenPrimary).isTranslucent(any());
- assertTrue(homeRootTask.shouldBeVisible(null /* starting */));
+ assertFalse(notSupportingSplitTask.shouldBeVisible(null /* starting */));
assertTrue(splitScreenPrimary.shouldBeVisible(null /* starting */));
assertTrue(splitScreenSecondary.shouldBeVisible(null /* starting */));
- assertEquals(TASK_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT,
- homeRootTask.getVisibility(null /* starting */));
- assertEquals(TASK_VISIBILITY_VISIBLE,
- splitScreenPrimary.getVisibility(null /* starting */));
- assertEquals(TASK_VISIBILITY_VISIBLE,
- splitScreenSecondary.getVisibility(null /* starting */));
final Task splitScreenSecondary2 = createTaskForShouldBeVisibleTest(mDefaultTaskDisplayArea,
WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD, true /* onTop */);