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

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

Merge "Reset IME requestedVisibility of RICT if imeInputTarget becomes null" into main

parents 07f0a406 47f92890
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -4484,6 +4484,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                mWmService.dispatchImeInputTargetVisibilityChanged(targetWin.mClient.asBinder(),
                        targetWin.isVisible() /* visible */, false /* removed */, mDisplayId);
            }
        } else if (mImeControlTarget != null && mImeControlTarget == mRemoteInsetsControlTarget) {
            // TODO(b/421886264) Verify the case when the current display policy doesn't allow
            //  showing the IME and use default display remoteInsetsControlTarget instead.
            // The IME is not visible by definition of WindowInsets.Type.defaultVisible()
            mImeControlTarget.setImeInputTargetRequestedVisibility(false /* visible */,
                    null /* statsToken */);
        }
        if (refreshImeSecureFlag(getPendingTransaction())) {
            mWmService.requestTraversal();
+31 −0
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.annotation.NonNull;
@@ -126,6 +127,7 @@ import android.os.UserManager;
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.Display;
import android.view.DisplayCutout;
import android.view.DisplayInfo;
@@ -139,6 +141,7 @@ import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
import android.view.View;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams.WindowType;
import android.window.DisplayAreaInfo;
@@ -406,6 +409,34 @@ public class DisplayContentTests extends WindowTestsBase {
        assertNull("computeImeParent() should be null", mDisplayContent.computeImeParent());
    }

    @Test
    @UseTestDisplay(addWindows = W_INPUT_METHOD)
    @RequiresFlagsEnabled(android.view.inputmethod.Flags.FLAG_REPORT_ANIMATING_INSETS_TYPES)
    public void testSetImeInputTargetNullResetsRemoteInsetsControlTargetImeVisibility()
            throws RemoteException {
        final var displayWindowInsetsController = spy(createDisplayWindowInsetsController());
        mDisplayContent.setRemoteInsetsController(displayWindowInsetsController);

        final var appWin = newWindowBuilder("appWin", TYPE_APPLICATION)
                .setWindowingMode(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW).build();
        final var remoteControlTarget = mDisplayContent.mRemoteInsetsControlTarget;

        // Set appWin as the IME input target.
        appWin.setRequestedVisibleTypes(WindowInsets.Type.ime());
        clearInvocations(displayWindowInsetsController);
        mDisplayContent.setImeInputTarget(appWin);
        mDisplayContent.setImeLayeringTarget(appWin);
        assertEquals("RemoteInsetsControlTarget should be the IME control target",
                remoteControlTarget, mDisplayContent.getImeControlTarget());
        assertTrue("appWin should have the IME requested visible",
                appWin.isRequestedVisible(WindowInsets.Type.ime()));

        // Set null input target
        mDisplayContent.setImeInputTarget(null /* target */);
        verify(displayWindowInsetsController).setImeInputTargetRequestedVisibility(
                eq(false) /* visible */, any());
    }

    @Test
    public void testUpdateImeParent_skipForOrganizedImeContainer() {
        final DisplayArea.Tokens imeContainer = mDisplayContent.getImeContainer();