Loading services/core/java/com/android/server/wm/DisplayContent.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +6 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading