From 906689084a2848e724308fd9c5d97d1cdcfa59c0 Mon Sep 17 00:00:00 2001 From: Chris Li Date: Wed, 9 Feb 2022 15:35:10 +0800 Subject: [DO NOT MERGE] ActivityEmbedding: hide embedded TaskFragment between adjacent TFs An old secondary TaskFragment can be in middle of the primary and new secondary TaskFragments. We don't want to show it even if it has a different bounds from the new secondary. Fix: 215467839 Test: atest SplitActivityLifecycleTest Change-Id: I85dccdc4a931eda7d53c91d288ad19b6ef865dc9 --- services/core/java/com/android/server/wm/TaskFragment.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 24b66ca3ac9c..ae7e96fab1fe 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -822,11 +822,17 @@ class TaskFragment extends WindowContainer { if (!adjacentTaskFragments.isEmpty() && !gotTranslucentAdjacent) { // The z-order of this TaskFragment is in middle of two adjacent TaskFragments // and it cannot be visible if the TaskFragment on top is not translucent and - // is fully occluding this one. + // is occluding this one. + mTmpRect.set(getBounds()); for (int j = adjacentTaskFragments.size() - 1; j >= 0; --j) { final TaskFragment taskFragment = adjacentTaskFragments.get(j); - if (!taskFragment.isTranslucent(starting) - && taskFragment.getBounds().contains(this.getBounds())) { + final TaskFragment adjacentTaskFragment = + taskFragment.mAdjacentTaskFragment; + if (adjacentTaskFragment == this) { + continue; + } + if (mTmpRect.intersect(taskFragment.getBounds()) + || mTmpRect.intersect(adjacentTaskFragment.getBounds())) { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } -- cgit v1.2.3-59-g8ed1b