diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java | 5 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java | 21 |
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()); + } } |