diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 29be5c6e46815..ff09fc5131664 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2568,6 +2568,7 @@ package android.view.inputmethod { public final class InputMethodManager { method public int getDisplayId(); + method public boolean hasActiveInputConnection(@Nullable android.view.View); method public boolean isInputMethodPickerShown(); } diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 7b2bb73ff562d..a8fff8bb6a434 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -749,7 +749,7 @@ public final class InputMethodManager { @Override public boolean hasActiveConnection(View view) { synchronized (mH) { - if (!hasServedByInputMethodLocked(view)) { + if (!hasServedByInputMethodLocked(view) || mCurMethod == null) { return false; } @@ -765,6 +765,17 @@ public final class InputMethodManager { return mDelegate; } + /** + * Checks whether the active input connection (if any) is for the given view. + * + * @hide + * @see ImeFocusController#getImmDelegate()#hasActiveInputConnection(View) + */ + @TestApi + public boolean hasActiveInputConnection(@Nullable View view) { + return mDelegate.hasActiveConnection(view); + } + private View getServedViewLocked() { return mCurRootView != null ? mCurRootView.getImeFocusController().getServedView() : null; } diff --git a/core/java/android/widget/ImeAwareEditText.java b/core/java/android/widget/ImeAwareEditText.java index 9cd458558de34..0d9808507fd7e 100644 --- a/core/java/android/widget/ImeAwareEditText.java +++ b/core/java/android/widget/ImeAwareEditText.java @@ -80,7 +80,7 @@ public class ImeAwareEditText extends EditText { public void scheduleShowSoftInput() { final InputMethodManager imm = getContext().getSystemService(InputMethodManager.class); - if (imm.isActive(this)) { + if (imm.hasActiveInputConnection(this)) { // This means that ImeAwareEditText is already connected to the IME. // InputMethodManager#showSoftInput() is guaranteed to pass client-side focus check. mHasPendingShowSoftInputRequest = false;