diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index d57061dc5e8c5..867b8260ec5e1 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -897,7 +897,7 @@ public final class InputMethodManager { return mServedInputConnection != null && mServedInputConnection.isActive() - && mServedInputConnection.getServedView() == view; + && mServedInputConnection.isAssociatedWith(view); } } diff --git a/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java b/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java index da036754268e0..fa18eeceafd0a 100644 --- a/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java +++ b/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java @@ -218,10 +218,26 @@ final class RemoteInputConnectionImpl extends IRemoteInputConnection.Stub { return mParentInputMethodManager.isActive() && !isFinished(); } - public View getServedView() { + private View getServedView() { return mServedView.get(); } + /** + * Queries if the given {@link View} is associated with this {@link RemoteInputConnectionImpl} + * or not. + * + * @param view {@link View}. + * @return {@code true} if the given {@link View} is not null and is associated with this + * {@link RemoteInputConnectionImpl}. + */ + @AnyThread + public boolean isAssociatedWith(@Nullable View view) { + if (view == null) { + return false; + } + return mServedView.refersTo(view); + } + /** * Gets and resets {@link #mHasPendingImmediateCursorAnchorInfoUpdate}. *