Merge "Fixing activity visibility when occluded by translucent TaskFragment" into tm-dev

This commit is contained in:
Louis Chang
2022-03-21 02:58:50 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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());
}
}