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

Commit 14cc6f36 authored by Cosmin Băieș's avatar Cosmin Băieș Committed by Android (Google) Code Review
Browse files

Merge "Reset imeShowing when not serverVisible" into main

parents 999cf7b8 68a4f679
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -133,10 +133,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
                ImeTracker.forLogging().onCancelled(mStatsToken,
                        ImeTracker.PHASE_WM_POST_LAYOUT_NOTIFY_CONTROLS_CHANGED);
                mStatsToken = null;
            } else if (wasServerVisible && !isServerVisible()) {
            } else if (isImeShowing() && !isServerVisible()) {
                ProtoLog.d(WM_DEBUG_IME,
                        "onPostLayout: setImeShowing(false) was: %s, controlTarget=%s",
                        isImeShowing(), mControlTarget);
                        "onPostLayout: setImeShowing(false) was: true, controlTarget=%s",
                        mControlTarget);
                setImeShowing(false);
            }
        }
+32 −0
Original line number Diff line number Diff line
@@ -317,6 +317,38 @@ public class ImeInsetsSourceProviderTest extends WindowTestsBase {
        assertTrue(mImeProvider.isSurfaceVisible());
    }

    /**
     * Verifies that {@code onPostLayout} can reset {@code isImeShowing} when the server visibility
     * was already set to false before the call.
     */
    @Test
    @RequiresFlagsEnabled(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)
    public void testOnPostLayout_resetImeShowingWhenAlreadyNotServerVisible() {
        final WindowState ime = newWindowBuilder("ime", TYPE_INPUT_METHOD).build();
        final WindowState target = newWindowBuilder("app", TYPE_APPLICATION).build();
        makeWindowVisibleAndDrawn(ime);

        mImeProvider.setWindowContainer(ime, null, null);
        mImeProvider.setServerVisible(true);
        mImeProvider.updateControlForTarget(target, true /* force */, ImeTracker.Token.empty());

        mImeProvider.onPostLayout();
        assertTrue("Server visibility is still true after onPostLayout",
                mImeProvider.isServerVisible());
        assertTrue("IME showing is true after onPostLayout", mImeProvider.isImeShowing());

        // Removing the window container will set server visibility to false.
        mImeProvider.setWindowContainer(null, null, null);
        assertFalse("Server visibility is false after removing window container",
                mImeProvider.isServerVisible());
        assertTrue("IME showing is still true before onPostLayout", mImeProvider.isImeShowing());

        mImeProvider.onPostLayout();
        assertFalse("Server visibility is still false after onPostLayout",
                mImeProvider.isServerVisible());
        assertFalse("IME showing is false after onPostLayout", mImeProvider.isImeShowing());
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)
    public void testUpdateControlForTarget_differentControlTarget() throws RemoteException {