summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/Task.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskTests.java33
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());
}
}