Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1668d981 authored by Gaurav Bhola's avatar Gaurav Bhola
Browse files

Preserve the local insets even when the display changes.

- Removing local insets for every display change adds more burden on
  the client to ensure that the insets are added back correctly.

Fix: 344653585
Test: atest WindowContainerTests
Change-Id: I46df3cb4df47dee40d149fc7f339334d74d36b9d
parent cf508107
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1077,9 +1077,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        if (dc != null && dc != this) {
            dc.getPendingTransaction().merge(mPendingTransaction);
        }
        if (dc != this && mLocalInsetsSources != null) {
            mLocalInsetsSources.clear();
        }
        for (int i = mChildren.size() - 1; i >= 0; --i) {
            final WindowContainer child = mChildren.get(i);
            child.onDisplayChanged(dc);
+13 −0
Original line number Diff line number Diff line
@@ -960,10 +960,20 @@ public class WindowContainerTests extends WindowTestsBase {
        assertTrue(child.handlesOrientationChangeFromDescendant(orientation));
    }

    private static void addLocalInsets(WindowContainer wc) {
        final Binder owner = new Binder();
        Rect genericOverlayInsetsRect1 = new Rect(0, 200, 1080, 700);
        final InsetsFrameProvider provider1 =
                new InsetsFrameProvider(owner, 1, WindowInsets.Type.systemOverlays())
                        .setArbitraryRectangle(genericOverlayInsetsRect1);
        wc.addLocalInsetsFrameProvider(provider1, owner);
    }

    @Test
    public void testOnDisplayChanged() {
        final Task rootTask = createTask(mDisplayContent);
        final Task task = createTaskInRootTask(rootTask, 0 /* userId */);
        addLocalInsets(task);
        final ActivityRecord activity = createActivityRecord(mDisplayContent, task);

        final DisplayContent newDc = createNewDisplay();
@@ -972,6 +982,7 @@ public class WindowContainerTests extends WindowTestsBase {

        verify(rootTask).onDisplayChanged(newDc);
        verify(task).onDisplayChanged(newDc);
        assertTrue(task.mLocalInsetsSources.size() == 1);
        verify(activity).onDisplayChanged(newDc);
        assertEquals(newDc, rootTask.mDisplayContent);
        assertEquals(newDc, task.mDisplayContent);
@@ -981,6 +992,7 @@ public class WindowContainerTests extends WindowTestsBase {
    @Test
    public void testOnDisplayChanged_cleanupChanging() {
        final Task task = createTask(mDisplayContent);
        addLocalInsets(task);
        spyOn(task.mSurfaceFreezer);
        mDisplayContent.mChangingContainers.add(task);

@@ -988,6 +1000,7 @@ public class WindowContainerTests extends WindowTestsBase {
        // This happens on display info changed.
        task.onDisplayChanged(mDisplayContent);

        assertTrue(task.mLocalInsetsSources.size() == 1);
        assertTrue(mDisplayContent.mChangingContainers.contains(task));
        verify(task.mSurfaceFreezer, never()).unfreeze(any());