summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yunfan Chen <yunfanc@google.com> 2022-10-13 17:09:36 +0900
committer Yunfan Chen <yunfanc@google.com> 2022-10-21 03:12:01 +0000
commit463bf0cd08d41bc2c1ded110d831f56daab887fe (patch)
tree1093459093bbe9c35654fab4a8701ac13f1be4a6
parent4d80e6f4096c843e2e8b2fdd2ea9d4368c42e553 (diff)
Clear cached override frame when window removed
When removing a window, the corresponding WindowContainer of a InsetsSourceProvider will be set to null, instead of directly removing the provider. We need to clear all recorded information, including the override frames to make sure the removal in effect to all windows. Test: See b/252455307 Bug: 252455307 Change-Id: I2e59485fdf25af743afe918525ed5e6872e6fff7
-rw-r--r--services/core/java/com/android/server/wm/InsetsSourceProvider.java3
1 files changed, 3 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index bf4b65da8b43..3a8fbbbaa77d 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -173,6 +173,7 @@ abstract class InsetsSourceProvider {
mWindowContainer = windowContainer;
// TODO: remove the frame provider for non-WindowState container.
mFrameProvider = frameProvider;
+ mOverrideFrames.clear();
mOverrideFrameProviders = overrideFrameProviders;
if (windowContainer == null) {
setServerVisible(false);
@@ -234,6 +235,8 @@ abstract class InsetsSourceProvider {
updateSourceFrameForServerVisibility();
if (mOverrideFrameProviders != null) {
+ // Not necessary to clear the mOverrideFrames here. It will be cleared every time the
+ // override frame provider updates.
for (int i = mOverrideFrameProviders.size() - 1; i >= 0; i--) {
final int windowType = mOverrideFrameProviders.keyAt(i);
final Rect overrideFrame;