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

Commit 29986939 authored by Tiger Huang's avatar Tiger Huang Committed by Automerger Merge Worker
Browse files

Merge "Update mInsetsHint regardless of the nullity of mControl" into...

Merge "Update mInsetsHint regardless of the nullity of mControl" into udc-qpr-dev am: e1663611 am: 3859694d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24100429



Change-Id: Ib2912d43324f06cab93e4f93a485ad7695f225c2
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 668ef1d5 3859694d
Loading
Loading
Loading
Loading
+29 −9
Original line number Original line Diff line number Diff line
@@ -81,6 +81,7 @@ class InsetsSourceProvider {
    private boolean mIsLeashReadyForDispatching;
    private boolean mIsLeashReadyForDispatching;
    private final Rect mSourceFrame = new Rect();
    private final Rect mSourceFrame = new Rect();
    private final Rect mLastSourceFrame = new Rect();
    private final Rect mLastSourceFrame = new Rect();
    private final Rect mLastContainerBounds = new Rect();
    private @NonNull Insets mInsetsHint = Insets.NONE;
    private @NonNull Insets mInsetsHint = Insets.NONE;
    private @Flags int mFlagsFromFrameProvider;
    private @Flags int mFlagsFromFrameProvider;
    private @Flags int mFlagsFromServer;
    private @Flags int mFlagsFromServer;
@@ -278,11 +279,31 @@ class InsetsSourceProvider {
        // visible. (i.e. No surface, pending insets that were given during layout, etc..)
        // visible. (i.e. No surface, pending insets that were given during layout, etc..)
        if (mServerVisible) {
        if (mServerVisible) {
            mSource.setFrame(mSourceFrame);
            mSource.setFrame(mSourceFrame);
            updateInsetsHint();
        } else {
        } else {
            mSource.setFrame(0, 0, 0, 0);
            mSource.setFrame(0, 0, 0, 0);
        }
        }
    }
    }


    // To be called when mSourceFrame or the window container bounds is changed.
    private void updateInsetsHint() {
        if (!mControllable || !mServerVisible) {
            return;
        }
        final Rect bounds = mWindowContainer.getBounds();
        if (mSourceFrame.equals(mLastSourceFrame) && bounds.equals(mLastContainerBounds)) {
            return;
        }
        mLastSourceFrame.set(mSourceFrame);
        mLastContainerBounds.set(bounds);
        mInsetsHint = mSource.calculateInsets(bounds, true /* ignoreVisibility */);
    }

    @VisibleForTesting
    Insets getInsetsHint() {
        return mInsetsHint;
    }

    /** @return A new source computed by the specified window frame in the given display frames. */
    /** @return A new source computed by the specified window frame in the given display frames. */
    InsetsSource createSimulatedSource(DisplayFrames displayFrames, Rect frame) {
    InsetsSource createSimulatedSource(DisplayFrames displayFrames, Rect frame) {
        final InsetsSource source = new InsetsSource(mSource);
        final InsetsSource source = new InsetsSource(mSource);
@@ -338,15 +359,9 @@ class InsetsSourceProvider {
                    mSetLeashPositionConsumer.accept(t);
                    mSetLeashPositionConsumer.accept(t);
                }
                }
            }
            }
            if (mServerVisible && !mLastSourceFrame.equals(mSource.getFrame())) {
            if (!mControl.getInsetsHint().equals(mInsetsHint)) {
                final Insets insetsHint = mSource.calculateInsets(
                mControl.setInsetsHint(mInsetsHint);
                        mWindowContainer.getBounds(), true /* ignoreVisibility */);
                if (!insetsHint.equals(mControl.getInsetsHint())) {
                changed = true;
                changed = true;
                    mControl.setInsetsHint(insetsHint);
                    mInsetsHint = insetsHint;
                }
                mLastSourceFrame.set(mSource.getFrame());
            }
            }
            if (changed) {
            if (changed) {
                mStateController.notifyControlChanged(mControlTarget);
                mStateController.notifyControlChanged(mControlTarget);
@@ -587,6 +602,11 @@ class InsetsSourceProvider {
            pw.print(prefix + "mControl=");
            pw.print(prefix + "mControl=");
            mControl.dump("", pw);
            mControl.dump("", pw);
        }
        }
        if (mControllable) {
            pw.print(prefix + "mInsetsHint=");
            pw.print(mInsetsHint);
            pw.println();
        }
        pw.print(prefix);
        pw.print(prefix);
        pw.print("mIsLeashReadyForDispatching="); pw.print(mIsLeashReadyForDispatching);
        pw.print("mIsLeashReadyForDispatching="); pw.print(mIsLeashReadyForDispatching);
        pw.println();
        pw.println();
+42 −9
Original line number Original line Diff line number Diff line
@@ -62,28 +62,31 @@ public class InsetsSourceProviderTest extends WindowTestsBase {
    @Test
    @Test
    public void testPostLayout() {
    public void testPostLayout() {
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        statusBar.setBounds(0, 0, 500, 1000);
        statusBar.getFrame().set(0, 0, 500, 100);
        statusBar.getFrame().set(0, 0, 500, 100);
        statusBar.mHasSurface = true;
        statusBar.mHasSurface = true;
        mProvider.setWindowContainer(statusBar, null, null);
        mProvider.setWindowContainer(statusBar, null, null);
        mProvider.updateSourceFrame(statusBar.getFrame());
        mProvider.updateSourceFrame(statusBar.getFrame());
        mProvider.onPostLayout();
        mProvider.onPostLayout();
        assertEquals(new Rect(0, 0, 500, 100), mProvider.getSource().getFrame());
        assertEquals(new Rect(0, 0, 500, 100), mProvider.getSource().getFrame());
        assertEquals(Insets.of(0, 100, 0, 0),
        assertEquals(Insets.of(0, 100, 0, 0), mProvider.getInsetsHint());
                mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),

                        false /* ignoreVisibility */));
        // Change the bounds and call onPostLayout. Make sure the insets hint gets updated.
        assertEquals(Insets.of(0, 100, 0, 0),
        statusBar.setBounds(0, 10, 500, 1000);
                mProvider.getSource().calculateVisibleInsets(new Rect(0, 0, 500, 500)));
        mProvider.onPostLayout();
        assertEquals(Insets.of(0, 90, 0, 0), mProvider.getInsetsHint());
    }
    }


    @Test
    @Test
    public void testPostLayout_invisible() {
    public void testPostLayout_invisible() {
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        statusBar.setBounds(0, 0, 500, 1000);
        statusBar.getFrame().set(0, 0, 500, 100);
        statusBar.getFrame().set(0, 0, 500, 100);
        mProvider.setWindowContainer(statusBar, null, null);
        mProvider.setWindowContainer(statusBar, null, null);
        mProvider.updateSourceFrame(statusBar.getFrame());
        mProvider.updateSourceFrame(statusBar.getFrame());
        mProvider.onPostLayout();
        mProvider.onPostLayout();
        assertEquals(Insets.NONE, mProvider.getSource().calculateInsets(new Rect(0, 0, 500, 500),
        assertTrue(mProvider.getSource().getFrame().isEmpty());
                false /* ignoreVisibility */));
        assertEquals(Insets.NONE, mProvider.getInsetsHint());
    }
    }


    @Test
    @Test
@@ -159,6 +162,36 @@ public class InsetsSourceProviderTest extends WindowTestsBase {
        assertNull(mProvider.getControl(target));
        assertNull(mProvider.getControl(target));
    }
    }


    @Test
    public void testUpdateSourceFrame() {
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        mProvider.setWindowContainer(statusBar, null, null);
        statusBar.setBounds(0, 0, 500, 1000);

        mProvider.setServerVisible(true);
        statusBar.getFrame().set(0, 0, 500, 100);
        mProvider.updateSourceFrame(statusBar.getFrame());
        assertEquals(statusBar.getFrame(), mProvider.getSource().getFrame());
        assertEquals(Insets.of(0, 100, 0, 0), mProvider.getInsetsHint());

        // Only change the source frame but not the visibility.
        statusBar.getFrame().set(0, 0, 500, 90);
        mProvider.updateSourceFrame(statusBar.getFrame());
        assertEquals(statusBar.getFrame(), mProvider.getSource().getFrame());
        assertEquals(Insets.of(0, 90, 0, 0), mProvider.getInsetsHint());

        mProvider.setServerVisible(false);
        statusBar.getFrame().set(0, 0, 500, 80);
        mProvider.updateSourceFrame(statusBar.getFrame());
        assertTrue(mProvider.getSource().getFrame().isEmpty());
        assertEquals(Insets.of(0, 90, 0, 0), mProvider.getInsetsHint());

        // Only change the visibility but not the frame.
        mProvider.setServerVisible(true);
        assertEquals(statusBar.getFrame(), mProvider.getSource().getFrame());
        assertEquals(Insets.of(0, 80, 0, 0), mProvider.getInsetsHint());
    }

    @Test
    @Test
    public void testUpdateSourceFrameForIme() {
    public void testUpdateSourceFrameForIme() {
        final WindowState inputMethod = createWindow(null, TYPE_INPUT_METHOD, "inputMethod");
        final WindowState inputMethod = createWindow(null, TYPE_INPUT_METHOD, "inputMethod");
@@ -184,7 +217,7 @@ public class InsetsSourceProviderTest extends WindowTestsBase {
    }
    }


    @Test
    @Test
    public void testInsetsModified() {
    public void testSetRequestedVisibleTypes() {
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
        final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
        statusBar.getFrame().set(0, 0, 500, 100);
        statusBar.getFrame().set(0, 0, 500, 100);
@@ -196,7 +229,7 @@ public class InsetsSourceProviderTest extends WindowTestsBase {
    }
    }


    @Test
    @Test
    public void testInsetsModified_noControl() {
    public void testSetRequestedVisibleTypes_noControl() {
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
        final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
        final WindowState target = createWindow(null, TYPE_APPLICATION, "target");
        statusBar.getFrame().set(0, 0, 500, 100);
        statusBar.getFrame().set(0, 0, 500, 100);