summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java5
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java13
2 files changed, 4 insertions, 14 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 9c146b58de49..655e3193e2d0 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -2987,11 +2987,6 @@ public class InputMethodService extends AbstractInputMethodService {
* the text. This is called whether or not the input method has requested
* extracted text updates, although if so it will not receive this call
* if the extracted text has changed as well.
- *
- * <p>Be careful about changing the text in reaction to this call with
- * methods such as setComposingText, commitText or
- * deleteSurroundingText. If the cursor moves as a result, this method
- * will be called again, which may result in an infinite loop.
*
* <p>The default implementation takes care of updating the cursor in
* the extract text, if it is being shown.
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 73d6241c21d1..dfcc6f6568b8 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -2675,19 +2675,14 @@ public final class InputMethodManager {
if (DEBUG) {
Log.v(TAG, "SELECTION CHANGE: " + mCurrentInputMethodSession);
}
- final int oldSelStart = mCursorSelStart;
- final int oldSelEnd = mCursorSelEnd;
- // Update internal values before sending updateSelection to the IME, because
- // if it changes the text within its onUpdateSelection handler in a way that
- // does not move the cursor we don't want to call it again with the same values.
+ mCurrentInputMethodSession.updateSelection(mCursorSelStart, mCursorSelEnd, selStart,
+ selEnd, candidatesStart, candidatesEnd);
+ forAccessibilitySessionsLocked(wrapper -> wrapper.updateSelection(mCursorSelStart,
+ mCursorSelEnd, selStart, selEnd, candidatesStart, candidatesEnd));
mCursorSelStart = selStart;
mCursorSelEnd = selEnd;
mCursorCandStart = candidatesStart;
mCursorCandEnd = candidatesEnd;
- mCurrentInputMethodSession.updateSelection(
- oldSelStart, oldSelEnd, selStart, selEnd, candidatesStart, candidatesEnd);
- forAccessibilitySessionsLocked(wrapper -> wrapper.updateSelection(oldSelStart,
- oldSelEnd, selStart, selEnd, candidatesStart, candidatesEnd));
}
}
}