mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-18 23:20:54 +00:00
simplify the way of setting suggestions
remove the excursion to latinIME have Suggest return suggestions instead of calling a callback now the relevant code can be mostly found in inputLogic (except for handling batch input)
This commit is contained in:
parent
0787a79de4
commit
867438fdc0
4 changed files with 63 additions and 133 deletions
|
@ -44,6 +44,7 @@ import helium314.keyboard.latin.common.StringUtils;
|
|||
import helium314.keyboard.latin.common.StringUtilsKt;
|
||||
import helium314.keyboard.latin.common.SuggestionSpanUtilsKt;
|
||||
import helium314.keyboard.latin.define.DebugFlags;
|
||||
import helium314.keyboard.latin.settings.Settings;
|
||||
import helium314.keyboard.latin.settings.SettingsValues;
|
||||
import helium314.keyboard.latin.settings.SpacingAndPunctuations;
|
||||
import helium314.keyboard.latin.suggestions.SuggestionStripViewAccessor;
|
||||
|
@ -71,7 +72,7 @@ public final class InputLogic {
|
|||
final LatinIME mLatinIME;
|
||||
private final SuggestionStripViewAccessor mSuggestionStripViewAccessor;
|
||||
|
||||
@NonNull private InputLogicHandler mInputLogicHandler;
|
||||
@NonNull private final InputLogicHandler mInputLogicHandler;
|
||||
|
||||
// TODO : make all these fields private as soon as possible.
|
||||
// Current space state of the input method. This can be any of the above constants.
|
||||
|
@ -119,7 +120,7 @@ public final class InputLogic {
|
|||
mSuggestionStripViewAccessor = suggestionStripViewAccessor;
|
||||
mWordComposer = new WordComposer();
|
||||
mConnection = new RichInputConnection(latinIME);
|
||||
mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
|
||||
mInputLogicHandler = new InputLogicHandler(mLatinIME.mHandler, this);
|
||||
mSuggest = new Suggest(dictionaryFacilitator);
|
||||
mDictionaryFacilitator = dictionaryFacilitator;
|
||||
}
|
||||
|
@ -153,11 +154,7 @@ public final class InputLogic {
|
|||
// editorInfo.initialSelStart is not the actual cursor position, so we try using some heuristics to find the correct position.
|
||||
mConnection.tryFixIncorrectCursorPosition();
|
||||
cancelDoubleSpacePeriodCountdown();
|
||||
if (InputLogicHandler.NULL_HANDLER == mInputLogicHandler) {
|
||||
mInputLogicHandler = new InputLogicHandler(mLatinIME, this);
|
||||
} else {
|
||||
mInputLogicHandler.reset();
|
||||
}
|
||||
mInputLogicHandler.reset();
|
||||
mConnection.requestCursorUpdates(true, true);
|
||||
}
|
||||
|
||||
|
@ -200,17 +197,6 @@ public final class InputLogic {
|
|||
mInputLogicHandler.reset();
|
||||
}
|
||||
|
||||
// Normally this class just gets out of scope after the process ends, but in unit tests, we
|
||||
// create several instances of LatinIME in the same process, which results in several
|
||||
// instances of InputLogic. This cleans up the associated handler so that tests don't leak
|
||||
// handlers.
|
||||
public void recycle() {
|
||||
final InputLogicHandler inputLogicHandler = mInputLogicHandler;
|
||||
mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
|
||||
inputLogicHandler.destroy();
|
||||
mDictionaryFacilitator.closeDictionaries();
|
||||
}
|
||||
|
||||
/**
|
||||
* React to a string input.
|
||||
* <p>
|
||||
|
@ -1680,26 +1666,24 @@ public final class InputLogic {
|
|||
}
|
||||
|
||||
final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>("Suggest");
|
||||
mInputLogicHandler.getSuggestedWords(inputStyle, SuggestedWords.NOT_A_SEQUENCE_NUMBER,
|
||||
suggestedWords -> {
|
||||
final String typedWordString = mWordComposer.getTypedWord();
|
||||
final SuggestedWordInfo typedWordInfo = new SuggestedWordInfo(
|
||||
typedWordString, "" /* prevWordsContext */,
|
||||
SuggestedWordInfo.MAX_SCORE,
|
||||
SuggestedWordInfo.KIND_TYPED, Dictionary.DICTIONARY_USER_TYPED,
|
||||
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
|
||||
SuggestedWordInfo.NOT_A_CONFIDENCE);
|
||||
// Show new suggestions if we have at least one. Otherwise keep the old
|
||||
// suggestions with the new typed word. Exception: if the length of the
|
||||
// typed word is <= 1 (after a deletion typically) we clear old suggestions.
|
||||
if (suggestedWords.size() > 1 || typedWordString.length() <= 1) {
|
||||
holder.set(suggestedWords);
|
||||
} else {
|
||||
holder.set(retrieveOlderSuggestions(typedWordInfo, mSuggestedWords));
|
||||
}
|
||||
mInputLogicHandler.getSuggestedWords(() -> getSuggestedWords(
|
||||
inputStyle, SuggestedWords.NOT_A_SEQUENCE_NUMBER,
|
||||
suggestedWords -> {
|
||||
final String typedWordString = mWordComposer.getTypedWord();
|
||||
final SuggestedWordInfo typedWordInfo = new SuggestedWordInfo(
|
||||
typedWordString, "", SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_TYPED,
|
||||
Dictionary.DICTIONARY_USER_TYPED, SuggestedWordInfo.NOT_AN_INDEX, SuggestedWordInfo.NOT_A_CONFIDENCE
|
||||
);
|
||||
// Show new suggestions if we have at least one. Otherwise keep the old
|
||||
// suggestions with the new typed word. Exception: if the length of the
|
||||
// typed word is <= 1 (after a deletion typically) we clear old suggestions.
|
||||
if (suggestedWords.size() > 1 || typedWordString.length() <= 1) {
|
||||
holder.set(suggestedWords);
|
||||
} else {
|
||||
holder.set(retrieveOlderSuggestions(typedWordInfo, mSuggestedWords));
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
));
|
||||
// This line may cause the current thread to wait.
|
||||
final SuggestedWords suggestedWords = holder.get(null,
|
||||
Constants.GET_SUGGESTED_WORDS_TIMEOUT);
|
||||
|
@ -1809,8 +1793,8 @@ public final class InputLogic {
|
|||
// If there weren't any suggestion spans on this word, suggestions#size() will be 1
|
||||
// if shouldIncludeResumedWordInSuggestions is true, 0 otherwise. In this case, we
|
||||
// have no useful suggestions, so we will try to compute some for it instead.
|
||||
mInputLogicHandler.getSuggestedWords(Suggest.SESSION_ID_TYPING,
|
||||
SuggestedWords.NOT_A_SEQUENCE_NUMBER, this::doShowSuggestionsAndClearAutoCorrectionIndicator);
|
||||
mInputLogicHandler.getSuggestedWords(() -> getSuggestedWords(Suggest.SESSION_ID_TYPING,
|
||||
SuggestedWords.NOT_A_SEQUENCE_NUMBER, this::doShowSuggestionsAndClearAutoCorrectionIndicator));
|
||||
} else {
|
||||
// We found suggestion spans in the word. We'll create the SuggestedWords out of
|
||||
// them, and make willAutoCorrect false. We make typedWordValid false, because the
|
||||
|
@ -2434,12 +2418,17 @@ public final class InputLogic {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void getSuggestedWords(final SettingsValues settingsValues,
|
||||
final Keyboard keyboard, final int keyboardShiftMode, final int inputStyle,
|
||||
final int sequenceNumber, final OnGetSuggestedWordsCallback callback) {
|
||||
// we used to provide keyboard, settingsValues and keyboardShiftMode, but every time read it from current instance anyway
|
||||
public void getSuggestedWords(final int inputStyle, final int sequenceNumber, final OnGetSuggestedWordsCallback callback) {
|
||||
final Keyboard keyboard = KeyboardSwitcher.getInstance().getKeyboard();
|
||||
if (keyboard == null) {
|
||||
callback.onGetSuggestedWords(SuggestedWords.getEmptyInstance());
|
||||
return;
|
||||
}
|
||||
final SettingsValues settingsValues = Settings.getValues();
|
||||
mWordComposer.adviseCapitalizedModeBeforeFetchingSuggestions(
|
||||
getActualCapsMode(settingsValues, keyboardShiftMode));
|
||||
mSuggest.getSuggestedWords(mWordComposer,
|
||||
getActualCapsMode(settingsValues, KeyboardSwitcher.getInstance().getKeyboardShiftMode()));
|
||||
final SuggestedWords suggestedWords = mSuggest.getSuggestedWords(mWordComposer,
|
||||
getNgramContextFromNthPreviousWordForSuggestion(
|
||||
settingsValues.mSpacingAndPunctuations,
|
||||
// Get the word on which we should search the bigrams. If we are composing
|
||||
|
@ -2449,7 +2438,8 @@ public final class InputLogic {
|
|||
keyboard,
|
||||
settingsValues.mSettingsValuesForSuggestion,
|
||||
settingsValues.mAutoCorrectEnabled,
|
||||
inputStyle, sequenceNumber, callback);
|
||||
inputStyle, sequenceNumber);
|
||||
callback.onGetSuggestedWords(suggestedWords);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue