Loading services/core/java/com/android/server/wm/TaskFragment.java +45 −17 Original line number Diff line number Diff line Loading @@ -1339,17 +1339,27 @@ class TaskFragment extends WindowContainer<WindowContainer> { mTmpRect.set(getBounds()); for (int j = adjacentTaskFragments.size() - 1; j >= 0; --j) { final TaskFragment taskFragment = adjacentTaskFragments.get(j); final TaskFragment adjacentTaskFragment = taskFragment.mAdjacentTaskFragment; if (adjacentTaskFragment == this) { if (taskFragment.isAdjacentTo(this)) { continue; } if (Flags.allowMultipleAdjacentTaskFragments()) { final boolean isOccluding = mTmpRect.intersect(taskFragment.getBounds()) || taskFragment.forOtherAdjacentTaskFragments(adjacentTf -> { return mTmpRect.intersect(adjacentTf.getBounds()); }); if (isOccluding) { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else { final TaskFragment adjacentTaskFragment = taskFragment.mAdjacentTaskFragment; if (mTmpRect.intersect(taskFragment.getBounds()) || mTmpRect.intersect(adjacentTaskFragment.getBounds())) { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } } } // Should be visible if there is no other fragment occluding it, unless it doesn't // have any running activities, not starting one and not home stack. shouldBeVisible = hasRunningActivities Loading @@ -1374,7 +1384,25 @@ class TaskFragment extends WindowContainer<WindowContainer> { } final TaskFragment otherTaskFrag = other.asTaskFragment(); if (otherTaskFrag != null && otherTaskFrag.mAdjacentTaskFragment != null) { if (otherTaskFrag != null && otherTaskFrag.hasAdjacentTaskFragment()) { if (Flags.allowMultipleAdjacentTaskFragments()) { final boolean hasTraversedAdj = otherTaskFrag.forOtherAdjacentTaskFragments( adjacentTaskFragments::contains); if (hasTraversedAdj) { final boolean isTranslucent = otherTaskFrag.isTranslucent(starting) || otherTaskFrag.forOtherAdjacentTaskFragments(adjacentTf -> { return adjacentTf.isTranslucent(starting); }); if (isTranslucent) { // Can be visible behind a translucent adjacent TaskFragments. gotTranslucentFullscreen = true; gotTranslucentAdjacent = true; continue; } // Can not be visible behind adjacent TaskFragments. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else { if (adjacentTaskFragments.contains(otherTaskFrag.mAdjacentTaskFragment)) { if (otherTaskFrag.isTranslucent(starting) || otherTaskFrag.mAdjacentTaskFragment.isTranslucent(starting)) { Loading @@ -1385,10 +1413,10 @@ class TaskFragment extends WindowContainer<WindowContainer> { } // Can not be visible behind adjacent TaskFragments. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } else { adjacentTaskFragments.add(otherTaskFrag); } } adjacentTaskFragments.add(otherTaskFrag); } } Loading Loading
services/core/java/com/android/server/wm/TaskFragment.java +45 −17 Original line number Diff line number Diff line Loading @@ -1339,17 +1339,27 @@ class TaskFragment extends WindowContainer<WindowContainer> { mTmpRect.set(getBounds()); for (int j = adjacentTaskFragments.size() - 1; j >= 0; --j) { final TaskFragment taskFragment = adjacentTaskFragments.get(j); final TaskFragment adjacentTaskFragment = taskFragment.mAdjacentTaskFragment; if (adjacentTaskFragment == this) { if (taskFragment.isAdjacentTo(this)) { continue; } if (Flags.allowMultipleAdjacentTaskFragments()) { final boolean isOccluding = mTmpRect.intersect(taskFragment.getBounds()) || taskFragment.forOtherAdjacentTaskFragments(adjacentTf -> { return mTmpRect.intersect(adjacentTf.getBounds()); }); if (isOccluding) { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else { final TaskFragment adjacentTaskFragment = taskFragment.mAdjacentTaskFragment; if (mTmpRect.intersect(taskFragment.getBounds()) || mTmpRect.intersect(adjacentTaskFragment.getBounds())) { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } } } // Should be visible if there is no other fragment occluding it, unless it doesn't // have any running activities, not starting one and not home stack. shouldBeVisible = hasRunningActivities Loading @@ -1374,7 +1384,25 @@ class TaskFragment extends WindowContainer<WindowContainer> { } final TaskFragment otherTaskFrag = other.asTaskFragment(); if (otherTaskFrag != null && otherTaskFrag.mAdjacentTaskFragment != null) { if (otherTaskFrag != null && otherTaskFrag.hasAdjacentTaskFragment()) { if (Flags.allowMultipleAdjacentTaskFragments()) { final boolean hasTraversedAdj = otherTaskFrag.forOtherAdjacentTaskFragments( adjacentTaskFragments::contains); if (hasTraversedAdj) { final boolean isTranslucent = otherTaskFrag.isTranslucent(starting) || otherTaskFrag.forOtherAdjacentTaskFragments(adjacentTf -> { return adjacentTf.isTranslucent(starting); }); if (isTranslucent) { // Can be visible behind a translucent adjacent TaskFragments. gotTranslucentFullscreen = true; gotTranslucentAdjacent = true; continue; } // Can not be visible behind adjacent TaskFragments. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else { if (adjacentTaskFragments.contains(otherTaskFrag.mAdjacentTaskFragment)) { if (otherTaskFrag.isTranslucent(starting) || otherTaskFrag.mAdjacentTaskFragment.isTranslucent(starting)) { Loading @@ -1385,10 +1413,10 @@ class TaskFragment extends WindowContainer<WindowContainer> { } // Can not be visible behind adjacent TaskFragments. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } else { adjacentTaskFragments.add(otherTaskFrag); } } adjacentTaskFragments.add(otherTaskFrag); } } Loading