am d393cf06: am 98e27483: am 9273f383: [HS3] Fix a bug on ICS

* commit 'd393cf065ab042cc78f7a51010161425080afd1d':
  [HS3] Fix a bug on ICS
Jean Chalard 2014-08-06 17:47:41 +00:00 committed by Android Git Automerger
commit 784484da0b
2 changed files with 23 additions and 0 deletions

View File

@ -17,6 +17,7 @@
package com.android.inputmethod.latin; package com.android.inputmethod.latin;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.os.Build;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
@ -811,4 +812,25 @@ public final class RichInputConnection {
public boolean isCursorPositionKnown() { public boolean isCursorPositionKnown() {
return INVALID_CURSOR_POSITION != mExpectedSelStart; return INVALID_CURSOR_POSITION != mExpectedSelStart;
} }
/**
* Work around a bug that was present before Jelly Bean upon rotation.
*
* Before Jelly Bean, there is a bug where setComposingRegion and other committing
* functions on the input connection get ignored until the cursor moves. This method works
* around the bug by wiggling the cursor first, which reactivates the connection and has
* the subsequent methods work, then restoring it to its original position.
*
* On platforms on which this method is not present, this is a no-op.
*/
public void maybeMoveTheCursorAroundAndRestoreToWorkaroundABug() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
if (mExpectedSelStart > 0) {
mIC.setSelection(mExpectedSelStart - 1, mExpectedSelStart - 1);
} else {
mIC.setSelection(mExpectedSelStart + 1, mExpectedSelStart + 1);
}
mIC.setSelection(mExpectedSelStart, mExpectedSelEnd);
}
}
} }

View File

@ -1437,6 +1437,7 @@ public final class InputLogic {
mLatinIME.getCoordinatesForCurrentKeyboard(codePoints)); mLatinIME.getCoordinatesForCurrentKeyboard(codePoints));
mWordComposer.setCursorPositionWithinWord( mWordComposer.setCursorPositionWithinWord(
typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor)); typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor));
mConnection.maybeMoveTheCursorAroundAndRestoreToWorkaroundABug();
mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor, mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor,
expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor()); expectedCursorPosition + range.getNumberOfCharsInWordAfterCursor());
if (suggestions.size() <= (shouldIncludeResumedWordInSuggestions ? 1 : 0)) { if (suggestions.size() <= (shouldIncludeResumedWordInSuggestions ? 1 : 0)) {