aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/inputlogic
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/latin/inputlogic')
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java75
1 files changed, 42 insertions, 33 deletions
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index b417a3e37..59b722134 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -140,11 +140,11 @@ public final class InputLogic {
* @param rawText the text to input.
*/
public void onTextInput(final SettingsValues settingsValues, final String rawText,
- // TODO: remove this argument
- final LatinIME.UIHandler handler) {
+ // TODO: remove these arguments
+ final LatinIME.UIHandler handler, final LatinIME.InputUpdater inputUpdater) {
mConnection.beginBatchEdit();
if (mWordComposer.isComposingWord()) {
- commitCurrentAutoCorrection(settingsValues, rawText, handler);
+ commitCurrentAutoCorrection(settingsValues, rawText, handler, inputUpdater);
} else {
resetComposingState(true /* alsoResetLastComposedWord */);
}
@@ -180,9 +180,9 @@ public final class InputLogic {
* @param y the y-coordinate where the user pressed the key, or NOT_A_COORDINATE.
*/
public void onCodeInput(final int code, final int x, final int y,
- // TODO: remove these three arguments
- final LatinIME.UIHandler handler, final KeyboardSwitcher keyboardSwitcher,
- final SubtypeSwitcher subtypeSwitcher) {
+ // TODO: remove these four arguments
+ final LatinIME.UIHandler handler, final LatinIME.InputUpdater inputUpdater,
+ final KeyboardSwitcher keyboardSwitcher, final SubtypeSwitcher subtypeSwitcher) {
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
ResearchLogger.latinIME_onCodeInput(code, x, y);
}
@@ -273,17 +273,17 @@ public final class InputLogic {
} else {
// No action label, and the action from imeOptions is NONE: this is a regular
// enter key that should input a carriage return.
- didAutoCorrect = handleNonSpecialCharacter(settingsValues,
- Constants.CODE_ENTER, x, y, spaceState, keyboardSwitcher, handler);
+ didAutoCorrect = handleNonSpecialCharacter(settingsValues, Constants.CODE_ENTER,
+ x, y, spaceState, keyboardSwitcher, handler, inputUpdater);
}
break;
case Constants.CODE_SHIFT_ENTER:
- didAutoCorrect = handleNonSpecialCharacter(settingsValues,
- Constants.CODE_ENTER, x, y, spaceState, keyboardSwitcher, handler);
+ didAutoCorrect = handleNonSpecialCharacter(settingsValues, Constants.CODE_ENTER,
+ x, y, spaceState, keyboardSwitcher, handler, inputUpdater);
break;
default:
didAutoCorrect = handleNonSpecialCharacter(settingsValues,
- code, x, y, spaceState, keyboardSwitcher, handler);
+ code, x, y, spaceState, keyboardSwitcher, handler, inputUpdater);
break;
}
keyboardSwitcher.onCodeInput(code);
@@ -329,7 +329,7 @@ public final class InputLogic {
// so we do not attempt to correct, on the assumption that if that was a dictionary
// word, the user would probably have gestured instead.
commitCurrentAutoCorrection(settingsValues, LastComposedWord.NOT_A_SEPARATOR,
- handler);
+ handler, inputUpdater);
} else {
commitTyped(settingsValues, LastComposedWord.NOT_A_SEPARATOR);
}
@@ -431,13 +431,14 @@ public final class InputLogic {
private boolean handleNonSpecialCharacter(final SettingsValues settingsValues,
final int codePoint, final int x, final int y, final int spaceState,
// TODO: remove these arguments
- final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler) {
+ final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler,
+ final LatinIME.InputUpdater inputUpdater) {
mSpaceState = SpaceState.NONE;
final boolean didAutoCorrect;
if (settingsValues.isWordSeparator(codePoint)
|| Character.getType(codePoint) == Character.OTHER_SYMBOL) {
didAutoCorrect = handleSeparator(settingsValues, codePoint, x, y, spaceState,
- keyboardSwitcher, handler);
+ keyboardSwitcher, handler, inputUpdater);
} else {
didAutoCorrect = false;
if (SpaceState.PHANTOM == spaceState) {
@@ -577,7 +578,8 @@ public final class InputLogic {
private boolean handleSeparator(final SettingsValues settingsValues,
final int codePoint, final int x, final int y, final int spaceState,
// TODO: remove these arguments
- final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler) {
+ final KeyboardSwitcher keyboardSwitcher, final LatinIME.UIHandler handler,
+ final LatinIME.InputUpdater inputUpdater) {
boolean didAutoCorrect = false;
// We avoid sending spaces in languages without spaces if we were composing.
final boolean shouldAvoidSendingCode = Constants.CODE_SPACE == codePoint
@@ -593,7 +595,7 @@ public final class InputLogic {
if (settingsValues.mCorrectionEnabled) {
final String separator = shouldAvoidSendingCode ? LastComposedWord.NOT_A_SEPARATOR
: StringUtils.newSingleCodePointString(codePoint);
- commitCurrentAutoCorrection(settingsValues, separator, handler);
+ commitCurrentAutoCorrection(settingsValues, separator, handler, inputUpdater);
didAutoCorrect = true;
} else {
commitTyped(settingsValues, StringUtils.newSingleCodePointString(codePoint));
@@ -974,24 +976,23 @@ public final class InputLogic {
mConnection.setSelection(mLastSelectionStart, mLastSelectionEnd);
}
- private String performAdditionToUserHistoryDictionary(final SettingsValues settingsValues,
- final String suggestion) {
+ private void performAdditionToUserHistoryDictionary(final SettingsValues settingsValues,
+ final String suggestion, final String prevWord) {
// If correction is not enabled, we don't add words to the user history dictionary.
// That's to avoid unintended additions in some sensitive fields, or fields that
// expect to receive non-words.
- if (!settingsValues.mCorrectionEnabled) return null;
+ if (!settingsValues.mCorrectionEnabled) return;
- if (TextUtils.isEmpty(suggestion)) return null;
+ if (TextUtils.isEmpty(suggestion)) return;
final Suggest suggest = mSuggest;
- if (suggest == null) return null;
+ if (suggest == null) return;
- final String prevWord = mConnection.getNthPreviousWord(settingsValues, 2);
- return suggest.mDictionaryFacilitator.addToUserHistory(mWordComposer, prevWord, suggestion);
+ suggest.mDictionaryFacilitator.addToUserHistory(mWordComposer, prevWord, suggestion);
}
public void performUpdateSuggestionStripSync(final SettingsValues settingsValues,
// TODO: Remove this variable
- final LatinIME.UIHandler handler) {
+ final LatinIME.UIHandler handler, final LatinIME.InputUpdater inputUpdater) {
handler.cancelUpdateSuggestionStrip();
// Check if we have a suggestion engine attached.
@@ -1009,11 +1010,14 @@ public final class InputLogic {
}
final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<SuggestedWords>();
- mLatinIME.getSuggestedWordsOrOlderSuggestionsAsync(Suggest.SESSION_TYPING,
+ inputUpdater.getSuggestedWords(Suggest.SESSION_TYPING,
SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
@Override
public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
- holder.set(suggestedWords);
+ final SuggestedWords suggestedWordsWithMaybeOlderSuggestions =
+ mLatinIME.maybeRetrieveOlderSuggestions(
+ mWordComposer.getTypedWord(), suggestedWords);
+ holder.set(suggestedWordsWithMaybeOlderSuggestions);
}
}
);
@@ -1386,7 +1390,7 @@ public final class InputLogic {
if (settingsValues.mBigramPredictionEnabled) {
mLatinIME.clearSuggestionStrip();
} else {
- mLatinIME.setSuggestedWords(settingsValues.mSuggestPuncList, false);
+ mLatinIME.setSuggestedWords(settingsValues.mSuggestPuncList);
}
mConnection.resetCachesUponCursorMoveAndReturnSuccess(newSelStart, newSelEnd,
shouldFinishComposition);
@@ -1551,11 +1555,11 @@ public final class InputLogic {
// TODO: Make this private
public void commitCurrentAutoCorrection(final SettingsValues settingsValues,
final String separator,
- // TODO: Remove this argument.
- final LatinIME.UIHandler handler) {
+ // TODO: Remove these arguments.
+ final LatinIME.UIHandler handler, final LatinIME.InputUpdater inputUpdater) {
// Complete any pending suggestions query first
if (handler.hasPendingUpdateSuggestions()) {
- performUpdateSuggestionStripSync(settingsValues, handler);
+ performUpdateSuggestionStripSync(settingsValues, handler, inputUpdater);
}
final String typedAutoCorrection = mWordComposer.getAutoCorrectionOrNull();
final String typedWord = mWordComposer.getTypedWord();
@@ -1605,8 +1609,10 @@ public final class InputLogic {
final SuggestedWords suggestedWords = mSuggestedWords;
mConnection.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(mLatinIME, chosenWord,
suggestedWords), 1);
+ // TODO: we pass 2 here, but would it be better to move this above and pass 1 instead?
+ final String prevWord = mConnection.getNthPreviousWord(settingsValues, 2);
// Add the word to the user history dictionary
- final String prevWord = performAdditionToUserHistoryDictionary(settingsValues, chosenWord);
+ performAdditionToUserHistoryDictionary(settingsValues, chosenWord, prevWord);
// TODO: figure out here if this is an auto-correct or if the best word is actually
// what user typed. Note: currently this is done much later in
// LastComposedWord#didCommitTypedWord by string equality of the remembered
@@ -1615,8 +1621,11 @@ public final class InputLogic {
chosenWord, separatorString, prevWord);
final boolean shouldDiscardPreviousWordForSuggestion;
if (0 == StringUtils.codePointCount(separatorString)) {
- // Separator is 0-length. Discard the word only if the current language has spaces.
- shouldDiscardPreviousWordForSuggestion = settingsValues.mCurrentLanguageHasSpaces;
+ // Separator is 0-length, we can keep the previous word for suggestion. Either this
+ // was a manual pick or the language has no spaces in which case we want to keep the
+ // previous word, or it was the keyboard closing or the cursor moving in which case it
+ // will be reset anyway.
+ shouldDiscardPreviousWordForSuggestion = false;
} else {
// Otherwise, we discard if the separator contains any non-whitespace.
shouldDiscardPreviousWordForSuggestion =