From 01892320ece4e4fb4fcc4b702e5d8606196ba72f Mon Sep 17 00:00:00 2001 From: Gaurav Bhola Date: Thu, 17 Feb 2022 23:07:38 +0000 Subject: [PATCH] Fix a case where adding new local insets source provider was not triggering insets change. - Add test for the same Test: atest WindowContainerTests Bug: 199449177 Change-Id: Ifbe964972dc1d16c1a5ed8b7ef50620183ffd862 --- .../android/server/wm/WindowContainer.java | 12 ++----- .../server/wm/WindowContainerTests.java | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index bbc8462cae67c..a67f92332d8e2 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -437,15 +437,9 @@ class WindowContainer extends ConfigurationContainer< + " already exists. Overwriting"); } } - if (insetsSourceProvider == null - || !(insetsSourceProvider instanceof RectInsetsSourceProvider)) { - insetsSourceProvider = - new RectInsetsSourceProvider( - new InsetsSource(insetsTypes[i]), - mDisplayContent.getInsetsStateController(), - mDisplayContent); - mLocalInsetsSourceProviders.put(insetsTypes[i], insetsSourceProvider); - } + insetsSourceProvider = new RectInsetsSourceProvider(new InsetsSource(insetsTypes[i]), + mDisplayContent.getInsetsStateController(), mDisplayContent); + mLocalInsetsSourceProviders.put(insetsTypes[i], insetsSourceProvider); ((RectInsetsSourceProvider) insetsSourceProvider).setRect(providerFrame); } mDisplayContent.getInsetsStateController().updateAboveInsetsState(true); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java index a442de5a32c81..5743922d0428e 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java @@ -1339,6 +1339,41 @@ public class WindowContainerTests extends WindowTestsBase { }, true); } + @Test + public void testAddLocalInsetsSourceProvider_sameType_replacesInsets() { + /* + ___ rootTask ________________________________________ + | | | + activity0 navigationBarInsetsProvider1 navigationBarInsetsProvider2 + */ + final Task rootTask = createTask(mDisplayContent); + + final ActivityRecord activity0 = createActivityRecord(mDisplayContent, + createTaskInRootTask(rootTask, 0 /* userId */)); + final WindowManager.LayoutParams attrs = new WindowManager.LayoutParams( + TYPE_BASE_APPLICATION); + attrs.setTitle("AppWindow0"); + activity0.addWindow(createWindowState(attrs, activity0)); + + Rect navigationBarInsetsRect1 = new Rect(0, 200, 1080, 700); + Rect navigationBarInsetsRect2 = new Rect(0, 0, 1080, 200); + + rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect1, + new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1}); + activity0.forAllWindows(window -> { + assertEquals(navigationBarInsetsRect1, + window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame()); + }, true); + + rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect2, + new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1}); + + activity0.forAllWindows(window -> { + assertEquals(navigationBarInsetsRect2, + window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame()); + }, true); + } + @Test public void testRemoveLocalInsetsSourceProvider() { /*