Loading core/java/android/inputmethodservice/AbstractInputMethodService.java +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import android.view.inputmethod.InputMethod; import android.view.inputmethod.InputMethodSession; import android.window.WindowProviderService; import com.android.internal.annotations.VisibleForTesting; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -72,8 +74,9 @@ public abstract class AbstractInputMethodService extends WindowProviderService * {@code null} if {@link #onCreateInputMethodInterface()} is not yet called. * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) @Nullable protected final InputMethod getInputMethodInternal() { public final InputMethod getInputMethodInternal() { return mInputMethod; } Loading core/java/android/inputmethodservice/InputMethodService.java +11 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,7 @@ import android.window.OnBackInvokedDispatcher; import android.window.WindowMetricsHelper; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.IInlineSuggestionsRequestCallback; import com.android.internal.inputmethod.IInputContentUriToken; import com.android.internal.inputmethod.IInputMethod; Loading Loading @@ -3996,6 +3997,16 @@ public class InputMethodService extends AbstractInputMethodService { return 0; } /** * Returns whether the IME navigation bar is currently shown, for testing purposes. * * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public final boolean isImeNavigationBarShownForTesting() { return mNavigationBarController.isShown(); } /** * Used to inject custom {@link InputMethodServiceInternal}. * Loading core/java/android/inputmethodservice/NavigationBarController.java +17 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,10 @@ final class NavigationBarController { default void onNavButtonFlagsChanged(@InputMethodNavButtonFlags int navButtonFlags) { } default boolean isShown() { return false; } default String toDebugString() { return "No-op implementation"; } Loading Loading @@ -117,6 +121,13 @@ final class NavigationBarController { mImpl.onNavButtonFlagsChanged(navButtonFlags); } /** * Returns whether the IME navigation bar is currently shown. */ boolean isShown() { return mImpl.isShown(); } String toDebugString() { return mImpl.toDebugString(); } Loading Loading @@ -560,6 +571,12 @@ final class NavigationBarController { : 0; } @Override public boolean isShown() { return mNavigationBarFrame != null && mNavigationBarFrame.getVisibility() == View.VISIBLE; } @Override public String toDebugString() { return "{mImeDrawsImeNavBar=" + mImeDrawsImeNavBar Loading core/java/android/view/InsetsSource.java +2 −1 Original line number Diff line number Diff line Loading @@ -49,8 +49,9 @@ public class InsetsSource implements Parcelable { /** The insets source ID of IME */ public static final int ID_IME = createId(null, 0, ime()); /** The insets source ID of the IME caption bar ("fake" IME navigation bar). */ static final int ID_IME_CAPTION_BAR = public static final int ID_IME_CAPTION_BAR = InsetsSource.createId(null /* owner */, 1 /* index */, captionBar()); /** Loading core/tests/coretests/src/android/view/InsetsSourceTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.view; import static android.view.InsetsSource.ID_IME_CAPTION_BAR; import static android.view.WindowInsets.Type.FIRST; import static android.view.WindowInsets.Type.LAST; import static android.view.WindowInsets.Type.SIZE; Loading Loading @@ -52,12 +53,15 @@ public class InsetsSourceTest { private final InsetsSource mSource = new InsetsSource(0 /* id */, navigationBars()); private final InsetsSource mImeSource = new InsetsSource(1 /* id */, ime()); private final InsetsSource mImeCaptionSource = new InsetsSource( ID_IME_CAPTION_BAR, captionBar()); private final InsetsSource mCaptionSource = new InsetsSource(2 /* id */, captionBar()); @Before public void setUp() { mSource.setVisible(true); mImeSource.setVisible(true); mImeCaptionSource.setVisible(true); mCaptionSource.setVisible(true); } Loading Loading @@ -109,6 +113,18 @@ public class InsetsSourceTest { assertEquals(Insets.of(0, 0, 0, 100), insets); } @Test public void testCalculateInsets_imeCaptionBar() { mImeCaptionSource.setFrame(new Rect(0, 400, 500, 500)); Insets insets = mImeCaptionSource.calculateInsets(new Rect(0, 0, 500, 500), false); assertEquals(Insets.of(0, 0, 0, 100), insets); // Place caption bar at top; IME caption bar must always return bottom insets mImeCaptionSource.setFrame(new Rect(0, 0, 500, 100)); insets = mImeCaptionSource.calculateInsets(new Rect(0, 0, 500, 500), false); assertEquals(Insets.of(0, 0, 0, 100), insets); } @Test public void testCalculateInsets_caption_resizing() { mCaptionSource.setFrame(new Rect(0, 0, 100, 100)); Loading Loading
core/java/android/inputmethodservice/AbstractInputMethodService.java +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import android.view.inputmethod.InputMethod; import android.view.inputmethod.InputMethodSession; import android.window.WindowProviderService; import com.android.internal.annotations.VisibleForTesting; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -72,8 +74,9 @@ public abstract class AbstractInputMethodService extends WindowProviderService * {@code null} if {@link #onCreateInputMethodInterface()} is not yet called. * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) @Nullable protected final InputMethod getInputMethodInternal() { public final InputMethod getInputMethodInternal() { return mInputMethod; } Loading
core/java/android/inputmethodservice/InputMethodService.java +11 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,7 @@ import android.window.OnBackInvokedDispatcher; import android.window.WindowMetricsHelper; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.IInlineSuggestionsRequestCallback; import com.android.internal.inputmethod.IInputContentUriToken; import com.android.internal.inputmethod.IInputMethod; Loading Loading @@ -3996,6 +3997,16 @@ public class InputMethodService extends AbstractInputMethodService { return 0; } /** * Returns whether the IME navigation bar is currently shown, for testing purposes. * * @hide */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public final boolean isImeNavigationBarShownForTesting() { return mNavigationBarController.isShown(); } /** * Used to inject custom {@link InputMethodServiceInternal}. * Loading
core/java/android/inputmethodservice/NavigationBarController.java +17 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,10 @@ final class NavigationBarController { default void onNavButtonFlagsChanged(@InputMethodNavButtonFlags int navButtonFlags) { } default boolean isShown() { return false; } default String toDebugString() { return "No-op implementation"; } Loading Loading @@ -117,6 +121,13 @@ final class NavigationBarController { mImpl.onNavButtonFlagsChanged(navButtonFlags); } /** * Returns whether the IME navigation bar is currently shown. */ boolean isShown() { return mImpl.isShown(); } String toDebugString() { return mImpl.toDebugString(); } Loading Loading @@ -560,6 +571,12 @@ final class NavigationBarController { : 0; } @Override public boolean isShown() { return mNavigationBarFrame != null && mNavigationBarFrame.getVisibility() == View.VISIBLE; } @Override public String toDebugString() { return "{mImeDrawsImeNavBar=" + mImeDrawsImeNavBar Loading
core/java/android/view/InsetsSource.java +2 −1 Original line number Diff line number Diff line Loading @@ -49,8 +49,9 @@ public class InsetsSource implements Parcelable { /** The insets source ID of IME */ public static final int ID_IME = createId(null, 0, ime()); /** The insets source ID of the IME caption bar ("fake" IME navigation bar). */ static final int ID_IME_CAPTION_BAR = public static final int ID_IME_CAPTION_BAR = InsetsSource.createId(null /* owner */, 1 /* index */, captionBar()); /** Loading
core/tests/coretests/src/android/view/InsetsSourceTest.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.view; import static android.view.InsetsSource.ID_IME_CAPTION_BAR; import static android.view.WindowInsets.Type.FIRST; import static android.view.WindowInsets.Type.LAST; import static android.view.WindowInsets.Type.SIZE; Loading Loading @@ -52,12 +53,15 @@ public class InsetsSourceTest { private final InsetsSource mSource = new InsetsSource(0 /* id */, navigationBars()); private final InsetsSource mImeSource = new InsetsSource(1 /* id */, ime()); private final InsetsSource mImeCaptionSource = new InsetsSource( ID_IME_CAPTION_BAR, captionBar()); private final InsetsSource mCaptionSource = new InsetsSource(2 /* id */, captionBar()); @Before public void setUp() { mSource.setVisible(true); mImeSource.setVisible(true); mImeCaptionSource.setVisible(true); mCaptionSource.setVisible(true); } Loading Loading @@ -109,6 +113,18 @@ public class InsetsSourceTest { assertEquals(Insets.of(0, 0, 0, 100), insets); } @Test public void testCalculateInsets_imeCaptionBar() { mImeCaptionSource.setFrame(new Rect(0, 400, 500, 500)); Insets insets = mImeCaptionSource.calculateInsets(new Rect(0, 0, 500, 500), false); assertEquals(Insets.of(0, 0, 0, 100), insets); // Place caption bar at top; IME caption bar must always return bottom insets mImeCaptionSource.setFrame(new Rect(0, 0, 500, 100)); insets = mImeCaptionSource.calculateInsets(new Rect(0, 0, 500, 500), false); assertEquals(Insets.of(0, 0, 0, 100), insets); } @Test public void testCalculateInsets_caption_resizing() { mCaptionSource.setFrame(new Rect(0, 0, 100, 100)); Loading