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

Commit 41ec3ec2 authored by Jean Chalard's avatar Jean Chalard
Browse files

Enable choosing a bigram prediction several times in a row.

This change fixes a bug that prevented to choose a prediction
several times in a row because the predictions would be replaced
right away by punctuations.
Please note several things about this change:
- Recorrection is pretty much in the middle of being refactored.
  This change has no effect on recorrection itself, but may make
  existing strange behavior more obvious when moving the cursor
  for example.
- The part of this change in Recorrection.java is not used in
  master at the moment because ongoing changes on recorrection
  result in the control never landing there, but would have been
  needed in the past and may be needed in the future.
- This change may have adverse effects on performance which need
  to be evaluated. A comment in the code has also been written
  to this effect.
- This does not fix bug 4466199, only addresses a pinpoint case
  of it to help evaluating the bigram predictions feature.

Bug: 4466199
Change-Id: I7219e5aeb74dff9251d12b2a72f94448dbb3e63f
parent 9e5be6ca
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -218,10 +218,10 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
        mService.showSuggestions(builder.build(), entries.getOriginalWord());
    }

    public void setRecorrectionSuggestions(VoiceProxy voiceProxy, CandidateView candidateView,
            Suggest suggest, KeyboardSwitcher keyboardSwitcher, WordComposer word,
            boolean hasUncommittedTypedChars, int lastSelectionStart, int lastSelectionEnd,
            String wordSeparators) {
    public void fetchAndDisplayRecorrectionSuggestions(VoiceProxy voiceProxy,
            CandidateView candidateView, Suggest suggest, KeyboardSwitcher keyboardSwitcher,
            WordComposer word, boolean hasUncommittedTypedChars, int lastSelectionStart,
            int lastSelectionEnd, String wordSeparators) {
        if (!InputConnectionCompatUtils.RECORRECTION_SUPPORTED) return;
        if (SuggestionSpanUtils.SUGGESTION_SPAN_IS_SUPPORTED || !mRecorrectionEnabled) return;
        voiceProxy.setShowingVoiceSuggestions(false);
@@ -249,7 +249,7 @@ public class Recorrection implements SharedPreferences.OnSharedPreferenceChangeL
                ic.endBatchEdit();
            } else {
                abortRecorrection(true);
                mService.setPunctuationSuggestions();  // Show the punctuation suggestions list
                mService.updateBigramPredictions();
            }
        } else {
            abortRecorrection(true);
+8 −6
Original line number Diff line number Diff line
@@ -222,9 +222,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
                updateSuggestions();
                break;
            case MSG_UPDATE_OLD_SUGGESTIONS:
                mRecorrection.setRecorrectionSuggestions(mVoiceProxy, mCandidateView, mSuggest,
                        mKeyboardSwitcher, mWord, mHasUncommittedTypedChars, mLastSelectionStart,
                        mLastSelectionEnd, mSettingsValues.mWordSeparators);
                mRecorrection.fetchAndDisplayRecorrectionSuggestions(mVoiceProxy, mCandidateView,
                        mSuggest, mKeyboardSwitcher, mWord, mHasUncommittedTypedChars,
                        mLastSelectionStart, mLastSelectionEnd, mSettingsValues.mWordSeparators);
                break;
            case MSG_UPDATE_SHIFT_STATE:
                switcher.updateShiftState();
@@ -1621,8 +1621,10 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
        if (!showingAddToDictionaryHint) {
            // If we're not showing the "Touch again to save", then show corrections again.
            // In case the cursor position doesn't change, make sure we show the suggestions again.
            clearSuggestions();
            mHandler.postUpdateOldSuggestions();
            updateBigramPredictions();
            // Updating the predictions right away may be slow and feel unresponsive on slower
            // terminals. On the other hand if we just postUpdateBigramPredictions() it will
            // take a noticeable delay to update them which may feel uneasy.
        }
        if (showingAddToDictionaryHint) {
            mCandidateView.showAddToDictionaryHint(suggestion);
@@ -1655,7 +1657,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
    }

    private static final WordComposer sEmptyWordComposer = new WordComposer();
    private void updateBigramPredictions() {
    public void updateBigramPredictions() {
        if (mSuggest == null || !isSuggestionsRequested())
            return;