Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c4e8cb6 authored by Jean Chalard's avatar Jean Chalard
Browse files

Call loadKeyboard later if it can't be called right away

Since loadKeyboard relies on the input connection being
available to give it the auto-caps state, but also can't
be called twice in a row because it needs to save and
restore its state and invalidates it after the restore,
we need to wait until we know we have a valid input
connection to call it.

Bug: 11107229
Change-Id: I1c7baf3215682df6f6ceb357bd37254f9e7418c7
parent 291ef1c9
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -178,8 +178,6 @@ public final class KeyboardState {
            if (!state.mIsAlphabetShiftLocked) {
                setShifted(state.mShiftMode);
            }
            // TODO: is this the right place to do this? Should we do this in setShift* instead?
            mSwitchActions.requestUpdatingShiftState();
        } else {
            mPrevMainKeyboardWasShiftLocked = state.mIsAlphabetShiftLocked;
        }
+15 −4
Original line number Diff line number Diff line
@@ -904,12 +904,17 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        // 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.
        final boolean canReachInputConnection;
        if (!mConnection.resetCachesUponCursorMoveAndReturnSuccess(editorInfo.initialSelStart,
                false /* shouldFinishComposition */)) {
            // We try resetting the caches up to 5 times before giving up.
            mHandler.postResetCaches(isDifferentTextField, 5 /* remainingTries */);
            canReachInputConnection = false;
        } else {
            if (isDifferentTextField) mHandler.postResumeSuggestions();
            if (isDifferentTextField) {
                mHandler.postResumeSuggestions();
            }
            canReachInputConnection = true;
        }

        if (isDifferentTextField) {
@@ -921,7 +926,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                suggest.setAutoCorrectionThreshold(currentSettingsValues.mAutoCorrectionThreshold);
            }

            if (canReachInputConnection) {
                // If we can't reach the input connection, we don't want to call loadKeyboard yet.
                // It will be done in #retryResetCaches.
                switcher.loadKeyboard(editorInfo, currentSettingsValues);
            }
        } else if (restarting) {
            // TODO: Come up with a more comprehensive way to reset the keyboard layout when
            // a keyboard layout set doesn't get reloaded in this method.
@@ -2955,11 +2964,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (!mConnection.resetCachesUponCursorMoveAndReturnSuccess(mLastSelectionStart, false)) {
            if (0 < remainingTries) {
                mHandler.postResetCaches(tryResumeSuggestions, remainingTries - 1);
            }
                return;
            }
            // If remainingTries is 0, we should stop waiting for new tries, but it's still
            // better to load the keyboard (less things will be broken).
        }
        tryFixLyingCursorPosition();
        mKeyboardSwitcher.updateShiftState();
        mKeyboardSwitcher.loadKeyboard(getCurrentInputEditorInfo(), mSettings.getCurrent());
        if (tryResumeSuggestions) mHandler.postResumeSuggestions();
    }