Merge "Don't distrust the cursor pos so much as to bug on IPC delay"
commit
a118d19f6c
|
@ -799,19 +799,22 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
suggest = mInputLogic.mSuggest;
|
||||
}
|
||||
|
||||
// Sometimes, while rotating, for some reason the framework tells the app we are not
|
||||
// connected to it and that means we can't refresh the cache. In this case, schedule a
|
||||
// refresh later.
|
||||
// TODO[IL]: Can the following be moved to InputLogic#startInput?
|
||||
final boolean canReachInputConnection;
|
||||
if (!mInputLogic.mConnection.resetCachesUponCursorMoveAndReturnSuccess(
|
||||
editorInfo.initialSelStart, editorInfo.initialSelEnd,
|
||||
false /* shouldFinishComposition */)) {
|
||||
// Sometimes, while rotating, for some reason the framework tells the app we are not
|
||||
// connected to it and that means we can't refresh the cache. In this case, schedule a
|
||||
// refresh later.
|
||||
// We try resetting the caches up to 5 times before giving up.
|
||||
mHandler.postResetCaches(isDifferentTextField, 5 /* remainingTries */);
|
||||
// mLastSelection{Start,End} are reset later in this method, don't need to do it here
|
||||
canReachInputConnection = false;
|
||||
} else {
|
||||
// When rotating, initialSelStart and initialSelEnd sometimes are lying. Make a best
|
||||
// effort to work around this bug.
|
||||
mInputLogic.mConnection.tryFixLyingCursorPosition();
|
||||
if (isDifferentTextField) {
|
||||
mHandler.postResumeSuggestions();
|
||||
}
|
||||
|
|
|
@ -172,20 +172,6 @@ public final class RichInputConnection {
|
|||
Log.d(TAG, "Will try to retrieve text later.");
|
||||
return false;
|
||||
}
|
||||
final int lengthOfTextBeforeCursor = mCommittedTextBeforeComposingText.length();
|
||||
if (lengthOfTextBeforeCursor > newSelStart
|
||||
|| (newSelStart != lengthOfTextBeforeCursor
|
||||
&& lengthOfTextBeforeCursor < Constants.EDITOR_CONTENTS_CACHE_SIZE
|
||||
&& newSelStart < Constants.EDITOR_CONTENTS_CACHE_SIZE)) {
|
||||
// newSelStart and newSelEnd may be lying -- when rotating the device (probably a
|
||||
// framework bug). If the values don't agree and we have less chars than we asked
|
||||
// for, then we know how many chars we have. If we got more than newSelStart says, then
|
||||
// we also know it was lying. In both cases the length is more reliable. Note that we
|
||||
// only have to check newSelStart (not newSelEnd) since if newSelEnd is wrong, then
|
||||
// newSelStart will be wrong as well.
|
||||
mExpectedSelStart = lengthOfTextBeforeCursor;
|
||||
mExpectedSelEnd = lengthOfTextBeforeCursor;
|
||||
}
|
||||
if (null != mIC && shouldFinishComposition) {
|
||||
mIC.finishComposingText();
|
||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||
|
|
Loading…
Reference in New Issue