summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java21
2 files changed, 25 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
index aa5e20d9ec7f..7844bffb6247 100644
--- a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
+++ b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java
@@ -108,8 +108,11 @@ class EnsureActivitiesVisibleHelper {
&& childTaskFragment.getTopNonFinishingActivity() != null) {
childTaskFragment.updateActivityVisibilities(starting, configChanges,
preserveWindows, notifyClients);
+ // The TaskFragment should fully occlude the activities below if the bounds
+ // equals to its parent task, unless it is translucent.
mBehindFullyOccludedContainer |=
- childTaskFragment.getBounds().equals(mTaskFragment.getBounds());
+ (childTaskFragment.getBounds().equals(mTaskFragment.getBounds())
+ && !childTaskFragment.isTranslucent(starting));
if (mAboveTop && mTop.getTaskFragment() == childTaskFragment) {
mAboveTop = false;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
index 730275cde40b..189a1dacb891 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -149,4 +149,25 @@ public class TaskFragmentTest extends WindowTestsBase {
assertEquals(false, info.isEmpty());
assertEquals(activity.token, info.getActivities().get(0));
}
+
+ @Test
+ public void testActivityVisibilityBehindTranslucentTaskFragment() {
+ // Having an activity covered by a translucent TaskFragment:
+ // Task
+ // - TaskFragment
+ // - Activity (Translucent)
+ // - Activity
+ ActivityRecord translucentActivity = new ActivityBuilder(mAtm)
+ .setUid(DEFAULT_TASK_FRAGMENT_ORGANIZER_UID).build();
+ mTaskFragment.addChild(translucentActivity);
+ doReturn(true).when(mTaskFragment).isTranslucent(any());
+
+ ActivityRecord activityBelow = new ActivityBuilder(mAtm).build();
+ mTaskFragment.getTask().addChild(activityBelow, 0);
+
+ // Ensure the activity below is visible
+ mTaskFragment.getTask().ensureActivitiesVisible(null /* starting */, 0 /* configChanges */,
+ false /* preserveWindows */);
+ assertEquals(true, activityBelow.isVisibleRequested());
+ }
}