diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowContainer.java | 12 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/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 bbc8462cae67..a67f92332d8e 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<E extends 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 a442de5a32c8..5743922d0428 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java @@ -1340,6 +1340,41 @@ public class WindowContainerTests extends WindowTestsBase { } @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() { /* ___ rootTask _______________________________________________ |