[HS3] Fix a bug on ICS
There is a bug in ICS where the input connection won't take any writing commands after rotation until the cursor moves. This fixes it by wiggling the cursor position once before trying to do anything. Bug: 16810766 Change-Id: Ib14c70bd0550420cecfa86dea501d13a1a91e296
This commit is contained in:
parent
50c12c83b3
commit
9273f3832b
2 changed files with 23 additions and 0 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue