diff options
| -rw-r--r-- | core/java/android/view/inputmethod/InputMethodManager.java | 4 | ||||
| -rw-r--r-- | core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java | 20 |
2 files changed, 20 insertions, 4 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index dfcc6f6568b8..72981b1296f2 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1131,9 +1131,7 @@ public final class InputMethodManager { || mServedInputConnection == null) { return; } - final boolean isMonitoring = (mRequestUpdateCursorAnchorInfoMonitorMode - & InputConnection.CURSOR_UPDATE_MONITOR) != 0; - if (!isMonitoring) { + if (!mServedInputConnection.isCursorAnchorInfoMonitoring()) { return; } // Since the host VirtualDisplay is moved, we need to issue diff --git a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java index cb18ccc9788a..09394c1ebf41 100644 --- a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +++ b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java @@ -176,6 +176,8 @@ public final class RemoteInputConnectionImpl extends IRemoteInputConnection.Stub private final AtomicInteger mCurrentSessionId = new AtomicInteger(0); private final AtomicBoolean mHasPendingInvalidation = new AtomicBoolean(); + private final AtomicBoolean mIsCursorAnchorInfoMonitoring = new AtomicBoolean(false); + public RemoteInputConnectionImpl(@NonNull Looper looper, @NonNull InputConnection inputConnection, @NonNull InputMethodManager inputMethodManager, @Nullable View servedView) { @@ -223,6 +225,16 @@ public final class RemoteInputConnectionImpl extends IRemoteInputConnection.Stub } /** + * @return {@code true} if there is any active request for + * {@link android.view.inputmethod.CursorAnchorInfo} with + * {@link InputConnection#CURSOR_UPDATE_MONITOR} flag. + */ + @AnyThread + public boolean isCursorAnchorInfoMonitoring() { + return mIsCursorAnchorInfoMonitoring.get(); + } + + /** * Schedule a task to execute * {@link InputMethodManager#doInvalidateInput(RemoteInputConnectionImpl, TextSnapshot, int)} * on the associated Handler if not yet scheduled. @@ -998,11 +1010,17 @@ public final class RemoteInputConnectionImpl extends IRemoteInputConnection.Stub // requestCursorUpdates() is not currently supported across displays. return false; } + final boolean hasMonitoring = + (cursorUpdateMode & InputConnection.CURSOR_UPDATE_MONITOR) != 0; + boolean result = false; try { - return ic.requestCursorUpdates(cursorUpdateMode, cursorUpdateFilter); + result = ic.requestCursorUpdates(cursorUpdateMode, cursorUpdateFilter); + return result; } catch (AbstractMethodError ignored) { // TODO(b/199934664): See if we can remove this by providing a default impl. return false; + } finally { + mIsCursorAnchorInfoMonitoring.set(result && hasMonitoring); } } |