am 940a2ad6: Merge "Don\'t send the same values to onUpdateSelection repeatedly" into klp-dev

* commit '940a2ad69eaf25ef16b6f470f759f9eef28fc0c5':
  Don't send the same values to onUpdateSelection repeatedly
This commit is contained in:
Jean Chalard
2013-09-12 21:38:01 -07:00
committed by Android Git Automerger
2 changed files with 12 additions and 2 deletions

View File

@@ -1650,6 +1650,11 @@ 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.

View File

@@ -1412,12 +1412,17 @@ public final class InputMethodManager {
try {
if (DEBUG) Log.v(TAG, "SELECTION CHANGE: " + mCurMethod);
mCurMethod.updateSelection(mCursorSelStart, mCursorSelEnd,
selStart, selEnd, candidatesStart, candidatesEnd);
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.
mCursorSelStart = selStart;
mCursorSelEnd = selEnd;
mCursorCandStart = candidatesStart;
mCursorCandEnd = candidatesEnd;
mCurMethod.updateSelection(oldSelStart, oldSelEnd,
selStart, selEnd, candidatesStart, candidatesEnd);
} catch (RemoteException e) {
Log.w(TAG, "IME died: " + mCurId, e);
}