summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java35
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 _______________________________________________