aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java39
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java33
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java47
3 files changed, 62 insertions, 57 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 4c2454c32..0b0769423 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -124,9 +124,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private View mKeyPreviewBackingView;
private SuggestionStripView mSuggestionStripView;
- // TODO[IL]: remove this member completely.
- public CompletionInfo[] mApplicationSpecifiedCompletions;
-
private RichInputMethodManager mRichImm;
@UsedForTesting final KeyboardSwitcher mKeyboardSwitcher;
private final SubtypeSwitcher mSubtypeSwitcher;
@@ -812,7 +809,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// The EditorInfo might have a flag that affects fullscreen mode.
// Note: This call should be done by InputMethodService?
updateFullscreenMode();
- mApplicationSpecifiedCompletions = null;
// The app calling setText() has the effect of clearing the composing
// span, so we should reset our state unconditionally, even if restarting is true.
@@ -879,7 +875,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
// This will set the punctuation suggestions if next word suggestion is off;
// otherwise it will clear the suggestion strip.
- setNeutralSuggestionStripInternal();
+ setNeutralSuggestionStrip();
mHandler.cancelUpdateSuggestionStrip();
mHandler.cancelDoubleSpacePeriodTimer();
@@ -1034,8 +1030,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
return;
}
- mApplicationSpecifiedCompletions =
- CompletionInfoUtils.removeNulls(applicationSpecifiedCompletions);
final ArrayList<SuggestedWords.SuggestedWordInfo> applicationSuggestedWords =
SuggestedWords.getFromApplicationSpecifiedCompletions(
@@ -1449,32 +1443,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
sequenceNumber, callback);
}
- // TODO[IL]: Move this to InputLogic
- public SuggestedWords maybeRetrieveOlderSuggestions(final String typedWord,
- final SuggestedWords suggestedWords, final SuggestedWords previousSuggestedWords) {
- // TODO: consolidate this into getSuggestedWords
- // We update the suggestion strip only when we have some suggestions to show, i.e. when
- // the suggestion count is > 1; else, we leave the old suggestions, with the typed word
- // replaced with the new one. However, when the length of the typed word is 1 or 0 (after
- // a deletion typically), we do want to remove the old suggestions. Also, if we are showing
- // the "add to dictionary" hint, we need to revert to suggestions - although it is unclear
- // how we can come here if it's displayed.
- if (suggestedWords.size() > 1 || typedWord.length() <= 1
- || !hasSuggestionStripView() || isShowingAddToDictionaryHint()) {
- return suggestedWords;
- } else {
- final SuggestedWords punctuationList =
- mSettings.getCurrent().mSpacingAndPunctuations.mSuggestPuncList;
- final SuggestedWords oldSuggestedWords = previousSuggestedWords == punctuationList
- ? SuggestedWords.EMPTY : previousSuggestedWords;
- final ArrayList<SuggestedWords.SuggestedWordInfo> typedWordAndPreviousSuggestions =
- SuggestedWords.getTypedWordAndPreviousSuggestions(typedWord, oldSuggestedWords);
- return new SuggestedWords(typedWordAndPreviousSuggestions, null /* rawSuggestions */,
- false /* typedWordValid */, false /* hasAutoCorrectionCandidate */,
- true /* isObsoleteSuggestions */, false /* isPrediction */);
- }
- }
-
@Override
public void showSuggestionStrip(final SuggestedWords sourceSuggestedWords) {
final SuggestedWords suggestedWords =
@@ -1515,15 +1483,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mSuggestionStripView.showAddToDictionaryHint(word);
}
- // TODO[IL]: Define a clean interface for this
// This will show either an empty suggestion strip (if prediction is enabled) or
// punctuation suggestions (if it's disabled).
@Override
public void setNeutralSuggestionStrip() {
- setNeutralSuggestionStripInternal();
- }
-
- private void setNeutralSuggestionStripInternal() {
final SettingsValues currentSettings = mSettings.getCurrent();
final SuggestedWords neutralSuggestions = currentSettings.mBigramPredictionEnabled
? SuggestedWords.EMPTY : currentSettings.mSpacingAndPunctuations.mSuggestPuncList;
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 06bc90c97..dc2c9fd0e 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -167,15 +167,10 @@ public class SuggestedWords {
final CompletionInfo[] infos) {
final ArrayList<SuggestedWordInfo> result = CollectionUtils.newArrayList();
for (final CompletionInfo info : infos) {
- if (info == null) continue;
- final CharSequence text = info.getText();
- if (null == text) continue;
- final SuggestedWordInfo suggestedWordInfo = new SuggestedWordInfo(text.toString(),
- SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_APP_DEFINED,
- Dictionary.DICTIONARY_APPLICATION_DEFINED,
- SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
- SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */);
- result.add(suggestedWordInfo);
+ if (null == info || null == info.getText()) {
+ continue;
+ }
+ result.add(new SuggestedWordInfo(info));
}
return result;
}
@@ -234,6 +229,9 @@ public class SuggestedWords {
public static final int KIND_FLAG_EXACT_MATCH = 0x40000000;
public final String mWord;
+ // The completion info from the application. Null for suggestions that don't come from
+ // the application (including keyboard-computed ones, so this is almost always null)
+ public final CompletionInfo mApplicationSpecifiedCompletionInfo;
public final int mScore;
public final int mKind; // one of the KIND_* constants above
public final int mCodePointCount;
@@ -260,6 +258,7 @@ public class SuggestedWords {
final Dictionary sourceDict, final int indexOfTouchPointOfSecondWord,
final int autoCommitFirstWordConfidence) {
mWord = word;
+ mApplicationSpecifiedCompletionInfo = null;
mScore = score;
mKind = kind;
mSourceDict = sourceDict;
@@ -268,6 +267,22 @@ public class SuggestedWords {
mAutoCommitFirstWordConfidence = autoCommitFirstWordConfidence;
}
+ /**
+ * Create a new suggested word info from an application-specified completion.
+ * If the passed argument or its contained text is null, this throws a NPE.
+ * @param applicationSpecifiedCompletion The application-specified completion info.
+ */
+ public SuggestedWordInfo(final CompletionInfo applicationSpecifiedCompletion) {
+ mWord = applicationSpecifiedCompletion.getText().toString();
+ mApplicationSpecifiedCompletionInfo = applicationSpecifiedCompletion;
+ mScore = SuggestedWordInfo.MAX_SCORE;
+ mKind = SuggestedWordInfo.KIND_APP_DEFINED;
+ mSourceDict = Dictionary.DICTIONARY_APPLICATION_DEFINED;
+ mCodePointCount = StringUtils.codePointCount(mWord);
+ mIndexOfTouchPointOfSecondWord = SuggestedWordInfo.NOT_AN_INDEX;
+ mAutoCommitFirstWordConfidence = SuggestedWordInfo.NOT_A_CONFIDENCE;
+ }
+
public boolean isEligibleForAutoCommit() {
return (KIND_CORRECTION == mKind && NOT_AN_INDEX != mIndexOfTouchPointOfSecondWord);
}
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index f2f9f1e68..7be60fd31 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -227,17 +227,16 @@ public final class InputLogic {
}
}
- // TODO: stop relying on mApplicationSpecifiedCompletions. The SuggestionInfo object
- // should contain a reference to the CompletionInfo instead.
- if (settingsValues.isApplicationSpecifiedCompletionsOn()
- && mLatinIME.mApplicationSpecifiedCompletions != null
- && index >= 0 && index < mLatinIME.mApplicationSpecifiedCompletions.length) {
+ // TODO: We should not need the following branch. We should be able to take the same
+ // code path as for other kinds, use commitChosenWord, and do everything normally. We will
+ // however need to reset the suggestion strip right away, because we know we can't take
+ // the risk of calling commitCompletion twice because we don't know how the app will react.
+ if (SuggestedWordInfo.KIND_APP_DEFINED == suggestionInfo.mKind) {
mSuggestedWords = SuggestedWords.EMPTY;
mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
keyboardSwitcher.updateShiftState();
resetComposingState(true /* alsoResetLastComposedWord */);
- final CompletionInfo completionInfo = mLatinIME.mApplicationSpecifiedCompletions[index];
- mConnection.commitCompletion(completionInfo);
+ mConnection.commitCompletion(suggestionInfo.mApplicationSpecifiedCompletionInfo);
mConnection.endBatchEdit();
return;
}
@@ -1230,9 +1229,8 @@ public final class InputLogic {
@Override
public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
final SuggestedWords suggestedWordsWithMaybeOlderSuggestions =
- mLatinIME.maybeRetrieveOlderSuggestions(
- mWordComposer.getTypedWord(), suggestedWords,
- mSuggestedWords);
+ maybeRetrieveOlderSuggestions(mWordComposer.getTypedWord(),
+ suggestedWords, mSuggestedWords);
holder.set(suggestedWordsWithMaybeOlderSuggestions);
}
}
@@ -1658,6 +1656,35 @@ public final class InputLogic {
}
/**
+ * Given a typed word and computed suggested words, return an object that may or may not
+ * contain older suggestions according to the contents of the current suggestions.
+ * @param typedWord The typed word as a string.
+ * @param suggestedWords The computed suggested words for this typed word.
+ * @param previousSuggestedWords The previous suggested words.
+ * @return suggestions possibly enriched with older suggestions.
+ */
+ private SuggestedWords maybeRetrieveOlderSuggestions(final String typedWord,
+ final SuggestedWords suggestedWords, final SuggestedWords previousSuggestedWords) {
+ // TODO: consolidate this into performUpdateSuggestionStripSync?
+ // We update the suggestion strip only when we have some suggestions to show, i.e. when
+ // the suggestion count is > 1; else, we leave the old suggestions, with the typed word
+ // replaced with the new one. However, when the length of the typed word is 1 or 0 (after
+ // a deletion typically), we do want to remove the old suggestions.
+ if (suggestedWords.size() > 1 || typedWord.length() <= 1) {
+ return suggestedWords;
+ } else {
+ final SuggestedWords oldSuggestedWords =
+ previousSuggestedWords.isPunctuationSuggestions() ? SuggestedWords.EMPTY
+ : previousSuggestedWords;
+ final ArrayList<SuggestedWords.SuggestedWordInfo> typedWordAndPreviousSuggestions =
+ SuggestedWords.getTypedWordAndPreviousSuggestions(typedWord, oldSuggestedWords);
+ return new SuggestedWords(typedWordAndPreviousSuggestions, null /* rawSuggestions */,
+ false /* typedWordValid */, false /* hasAutoCorrectionCandidate */,
+ true /* isObsoleteSuggestions */, false /* isPrediction */);
+ }
+ }
+
+ /**
* Gets a chunk of text with or the auto-correction indicator underline span as appropriate.
*
* This method looks at the old state of the auto-correction indicator to put or not put