diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 5f659a6afba91..ab7e5a92284f0 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1381,8 +1381,7 @@ public final class InputMethodManager { public boolean isAcceptingText() { checkFocus(); synchronized (mH) { - return mServedInputConnection != null - && mServedInputConnection.getInputConnection() != null; + return mServedInputConnection != null && !mServedInputConnection.isFinished(); } } diff --git a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java index 6f79fa117c6a1..2d44054e03723 100644 --- a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +++ b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java @@ -86,13 +86,17 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { * @return {@link InputConnection} to which incoming IPCs will be dispatched. */ @Nullable - public InputConnection getInputConnection() { + private InputConnection getInputConnection() { synchronized (mLock) { return mInputConnection; } } - private boolean isFinished() { + /** + * @return {@code true} until the target {@link InputConnection} receives + * {@link InputConnection#closeConnection()} as a result of {@link #deactivate()}. + */ + public boolean isFinished() { synchronized (mLock) { return mFinished; }