diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 5 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskTests.java | 33 |
2 files changed, 25 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index c5c95123641d..ab38caf5e1b8 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5775,8 +5775,9 @@ class Task extends WindowContainer<WindowContainer> { boolean preserveWindows, boolean notifyClients) { mStackSupervisor.beginActivityVisibilityUpdate(); try { - mEnsureActivitiesVisibleHelper.process(starting, configChanges, preserveWindows, - notifyClients); + forAllLeafTasks(task -> task.mEnsureActivitiesVisibleHelper.process( + starting, configChanges, preserveWindows, notifyClients), + true /* traverseTopToBottom */); if (mTranslucentActivityWaiting != null && mUndrawnActivitiesBelowTopTranslucent.isEmpty()) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java index ace0400bc293..3203ccb400d6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java @@ -23,6 +23,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.times; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -181,17 +182,27 @@ public class TaskTests extends WindowTestsBase { } @Test - public void testSwitchUser() { + public void testEnsureActivitiesVisible() { final Task rootTask = createTaskStackOnDisplay(mDisplayContent); - final Task childTask = createTaskInStack(rootTask, 0 /* userId */); - final Task leafTask1 = createTaskInStack(childTask, 10 /* userId */); - final Task leafTask2 = createTaskInStack(childTask, 0 /* userId */); - assertEquals(1, rootTask.getChildCount()); - assertEquals(leafTask2, childTask.getTopChild()); - - doReturn(true).when(leafTask1).showToCurrentUser(); - rootTask.switchUser(10); - assertEquals(1, rootTask.getChildCount()); - assertEquals(leafTask1, childTask.getTopChild()); + final Task leafTask1 = createTaskInStack(rootTask, 0 /* userId */); + final Task leafTask2 = createTaskInStack(rootTask, 0 /* userId */); + final ActivityRecord activity1 = createActivityRecordInTask(mDisplayContent, leafTask1); + final ActivityRecord activity2 = createActivityRecordInTask(mDisplayContent, leafTask2); + + // Check visibility of occluded tasks + doReturn(false).when(leafTask1).shouldBeVisible(any()); + doReturn(true).when(leafTask2).shouldBeVisible(any()); + rootTask.ensureActivitiesVisible( + null /* starting */ , 0 /* configChanges */, false /* preserveWindows */); + assertFalse(activity1.isVisible()); + assertTrue(activity2.isVisible()); + + // Check visibility of not occluded tasks + doReturn(true).when(leafTask1).shouldBeVisible(any()); + doReturn(true).when(leafTask2).shouldBeVisible(any()); + rootTask.ensureActivitiesVisible( + null /* starting */ , 0 /* configChanges */, false /* preserveWindows */); + assertTrue(activity1.isVisible()); + assertTrue(activity2.isVisible()); } } |