Merge "Only apply transient visibility for root task" into udc-dev
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user