Merge "Only apply transient visibility for root task" into udc-dev

This commit is contained in:
Riddle Hsu
2023-06-06 05:50:57 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 2 deletions

View File

@@ -1017,8 +1017,11 @@ class TaskFragment extends WindowContainer<WindowContainer> {
if (isTopActivityLaunchedBehind()) {
return TASK_FRAGMENT_VISIBILITY_VISIBLE;
}
final WindowContainer<?> parent = getParent();
final Task thisTask = asTask();
if (thisTask != null && mTransitionController.isTransientHide(thisTask)) {
if (thisTask != null && parent.asTask() == null
&& mTransitionController.isTransientHide(thisTask)) {
// Keep transient-hide root tasks visible. Non-root tasks still follow standard rule.
return TASK_FRAGMENT_VISIBILITY_VISIBLE;
}
@@ -1028,7 +1031,6 @@ class TaskFragment extends WindowContainer<WindowContainer> {
// This TaskFragment is only considered visible if all its parent TaskFragments are
// considered visible, so check the visibility of all ancestor TaskFragment first.
final WindowContainer parent = getParent();
if (parent.asTaskFragment() != null) {
final int parentVisibility = parent.asTaskFragment().getVisibility(starting);
if (parentVisibility == TASK_FRAGMENT_VISIBILITY_INVISIBLE) {

View File

@@ -641,6 +641,31 @@ public class RootTaskTests extends WindowTestsBase {
// Home split secondary and home task should be invisible.
assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
splitSecondary.getVisibility(null /* starting */));
// Put another task on top of primary split.
final Task topSplitPrimary = new TaskBuilder(mSupervisor).setParentTask(organizer.mPrimary)
.setCreateActivity(true).build();
doReturn(false).when(topSplitPrimary).isTranslucent(any());
// Convert the fullscreen translucent task to opaque.
doReturn(false).when(translucentRootTask).isTranslucent(any());
translucentRootTask.moveToFront("test");
// The tasks of primary split are occluded by the fullscreen opaque task.
assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
organizer.mPrimary.getVisibility(null /* starting */));
assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
topSplitPrimary.getVisibility(null /* starting */));
// Make primary split root transient-hide.
spyOn(splitPrimary.mTransitionController);
doReturn(true).when(splitPrimary.mTransitionController).isTransientHide(
organizer.mPrimary);
// The split root and its top become visible.
assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE,
organizer.mPrimary.getVisibility(null /* starting */));
assertEquals(TASK_FRAGMENT_VISIBILITY_VISIBLE,
topSplitPrimary.getVisibility(null /* starting */));
// The bottom of primary split becomes invisible because it is occluded by topSplitPrimary.
assertEquals(TASK_FRAGMENT_VISIBILITY_INVISIBLE,
splitPrimary.getVisibility(null /* starting */));
}
@Test