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() { /*