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

Commit 92f78ddd authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add InsetsPolicyTest#testExcludeImeInsets" into main

parents a2b2f222 28cf5283
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ android_test {
        "CtsSurfaceValidatorLib",
        "service-sdksandbox.impl",
        "com.android.window.flags.window-aconfig-java",
        "android.view.inputmethod.flags-aconfig-java",
        "flag-junit",
    ],

+55 −0
Original line number Diff line number Diff line
@@ -41,11 +41,13 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.verify;

import android.app.StatusBarManager;
import android.graphics.Insets;
import android.graphics.Rect;
import android.os.Binder;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.view.InsetsFrameProvider;
import android.view.InsetsSource;
import android.view.InsetsSourceControl;
@@ -525,6 +527,59 @@ public class InsetsPolicyTest extends WindowTestsBase {
        assertTrue(win1.getWindowFrames().hasInsetsChanged());
    }

    /**
     * This test verifies that after setting {@link WindowContainer#mExcludeInsetsTypes}, the IME
     * insets have a height of zero (applied in {@link InsetsPolicy#adjustVisibilityForIme}).
     */
    @RequiresFlagsEnabled(android.view.inputmethod.Flags.FLAG_REFACTOR_INSETS_CONTROLLER)
    @SetupWindows(addWindows = W_INPUT_METHOD)
    @Test
    public void testExcludeImeInsets() {
        final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
        final InsetsSource imeSource = new InsetsSource(ID_IME, ime());
        imeSource.setVisible(true);
        mImeWindow.mHasSurface = true;

        final WindowState win = addWindow(TYPE_APPLICATION, "win1");
        win.setRequestedVisibleTypes(0, ime());

        win.mAboveInsetsState.addSource(imeSource);
        win.mHasSurface = true;

        DisplayContentTests.performLayout(mDisplayContent);
        // IME should cover half of the app's window
        final var winFrame = win.getFrame();
        imeSource.setFrame(winFrame.left, winFrame.bottom / 2, winFrame.right, winFrame.bottom);
        imeSource.setVisibleFrame(imeSource.getFrame());
        DisplayContentTests.performLayout(mDisplayContent);

        assertTrue(mImeWindow.isVisible());
        assertTrue(win.isVisible());

        displayPolicy.beginPostLayoutPolicyLw();
        displayPolicy.applyPostLayoutPolicyLw(win, win.mAttrs, null, null);
        displayPolicy.finishPostLayoutPolicyLw();

        final var imeInsetsShown = win.getInsetsState().calculateInsets(win.getFrame(), ime(),
                true);
        assertEquals(new Rect(0, 0, 0, winFrame.bottom / 2), imeInsetsShown.toRect());


        // Now we're setting the excludedInsetsTypes for the IME. The IME is still showing, but
        // in this case, InsetsPolicy#adjustVisibilityForIme will override and dispatch IME
        // insets with zero height.
        win.setExcludeInsetsTypes(ime());

        displayPolicy.beginPostLayoutPolicyLw();
        displayPolicy.applyPostLayoutPolicyLw(win, win.mAttrs, null, null);
        displayPolicy.finishPostLayoutPolicyLw();

        final var imeInsetsHidden = win.getInsetsState().calculateInsets(win.getFrame(), ime(),
                true);
        assertEquals(Insets.NONE, imeInsetsHidden);
    }


    private WindowState addNavigationBar() {
        final Binder owner = new Binder();
        final WindowState win = createWindow(null, TYPE_NAVIGATION_BAR, "navBar");