am a118d19f
: Merge "Don\'t distrust the cursor pos so much as to bug on IPC delay"
* commit 'a118d19f6c2ad1e6f6bfe34b0ce022e961da4f02': Don't distrust the cursor pos so much as to bug on IPC delay
This commit is contained in:
commit
c2c8368c2e
2 changed files with 6 additions and 17 deletions
|
@ -799,19 +799,22 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
suggest = mInputLogic.mSuggest;
|
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?
|
// TODO[IL]: Can the following be moved to InputLogic#startInput?
|
||||||
final boolean canReachInputConnection;
|
final boolean canReachInputConnection;
|
||||||
if (!mInputLogic.mConnection.resetCachesUponCursorMoveAndReturnSuccess(
|
if (!mInputLogic.mConnection.resetCachesUponCursorMoveAndReturnSuccess(
|
||||||
editorInfo.initialSelStart, editorInfo.initialSelEnd,
|
editorInfo.initialSelStart, editorInfo.initialSelEnd,
|
||||||
false /* shouldFinishComposition */)) {
|
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.
|
// We try resetting the caches up to 5 times before giving up.
|
||||||
mHandler.postResetCaches(isDifferentTextField, 5 /* remainingTries */);
|
mHandler.postResetCaches(isDifferentTextField, 5 /* remainingTries */);
|
||||||
// mLastSelection{Start,End} are reset later in this method, don't need to do it here
|
// mLastSelection{Start,End} are reset later in this method, don't need to do it here
|
||||||
canReachInputConnection = false;
|
canReachInputConnection = false;
|
||||||
} else {
|
} else {
|
||||||
|
// When rotating, initialSelStart and initialSelEnd sometimes are lying. Make a best
|
||||||
|
// effort to work around this bug.
|
||||||
|
mInputLogic.mConnection.tryFixLyingCursorPosition();
|
||||||
if (isDifferentTextField) {
|
if (isDifferentTextField) {
|
||||||
mHandler.postResumeSuggestions();
|
mHandler.postResumeSuggestions();
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,20 +172,6 @@ public final class RichInputConnection {
|
||||||
Log.d(TAG, "Will try to retrieve text later.");
|
Log.d(TAG, "Will try to retrieve text later.");
|
||||||
return false;
|
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) {
|
if (null != mIC && shouldFinishComposition) {
|
||||||
mIC.finishComposingText();
|
mIC.finishComposingText();
|
||||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||||
|
|
Loading…
Reference in a new issue