From 28d21fa9c182fd45138118fe2c9112396e71c38b Mon Sep 17 00:00:00 2001 From: Chris Li Date: Wed, 9 Feb 2022 15:35:10 +0800 Subject: [PATCH] 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 --- .../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 a59d7b6e72198..165a4d96c632a 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -823,11 +823,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; } }