Consolidate words into SuggestedWordInfo
We can't get rid of SuggestedWordInfo because it conveys the information about whether a suggestion is outdated or not. It is always created anyway. So it makes sense not to have separate lists and to just keep everything in the SuggestedWordInfo object. Change-Id: Idd79dc267d97633901d3d2869da457736963e178
This commit is contained in:
parent
a3f2ce1f31
commit
c3c4ed91cf
2 changed files with 37 additions and 34 deletions
|
@ -413,6 +413,8 @@ public class Suggest implements Dictionary.WordCallback {
|
|||
|
||||
final SuggestedWords.Builder builder;
|
||||
if (DBG) {
|
||||
// TODO: this doesn't take into account the fact that removing dupes from mSuggestions
|
||||
// may have made mScores[] and mSuggestions out of sync.
|
||||
final CharSequence autoCorrectionSuggestion = mSuggestions.get(0);
|
||||
final int autoCorrectionSuggestionScore = mScores[0];
|
||||
double normalizedScore = BinaryDictionary.calcNormalizedScore(
|
||||
|
@ -420,21 +422,28 @@ public class Suggest implements Dictionary.WordCallback {
|
|||
autoCorrectionSuggestionScore);
|
||||
ArrayList<SuggestedWords.SuggestedWordInfo> scoreInfoList =
|
||||
new ArrayList<SuggestedWords.SuggestedWordInfo>();
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo("+", false));
|
||||
for (int i = 0; i < mScores.length; ++i) {
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(autoCorrectionSuggestion, "+",
|
||||
false));
|
||||
final int suggestionsSize = mSuggestions.size();
|
||||
// Note: i here is the index in mScores[], but the index in mSuggestions is one more
|
||||
// than i because we added the typed word to mSuggestions without touching mScores.
|
||||
for (int i = 0; i < mScores.length && i < suggestionsSize - 1; ++i) {
|
||||
if (normalizedScore > 0) {
|
||||
final String scoreThreshold = String.format("%d (%4.2f)", mScores[i],
|
||||
normalizedScore);
|
||||
scoreInfoList.add(
|
||||
new SuggestedWords.SuggestedWordInfo(scoreThreshold, false));
|
||||
new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i + 1),
|
||||
scoreThreshold, false));
|
||||
normalizedScore = 0.0;
|
||||
} else {
|
||||
final String score = Integer.toString(mScores[i]);
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(score, false));
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i + 1),
|
||||
score, false));
|
||||
}
|
||||
}
|
||||
for (int i = mScores.length; i < mSuggestions.size(); ++i) {
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo("--", false));
|
||||
for (int i = mScores.length; i < suggestionsSize; ++i) {
|
||||
scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i),
|
||||
"--", false));
|
||||
}
|
||||
builder = new SuggestedWords.Builder().addWords(mSuggestions, scoreInfoList)
|
||||
.setAllowsToBeAutoCorrected(allowsToBeAutoCorrected)
|
||||
|
|
|
@ -20,30 +20,23 @@ import android.text.TextUtils;
|
|||
import android.view.inputmethod.CompletionInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class SuggestedWords {
|
||||
public static final SuggestedWords EMPTY = new SuggestedWords(null, false, false, false, false,
|
||||
null);
|
||||
public static final SuggestedWords EMPTY = new SuggestedWords(false, false, false, false,
|
||||
Collections.<SuggestedWordInfo>emptyList());
|
||||
|
||||
private final List<CharSequence> mWords;
|
||||
public final boolean mTypedWordValid;
|
||||
public final boolean mHasAutoCorrectionCandidate;
|
||||
public final boolean mIsPunctuationSuggestions;
|
||||
private final List<SuggestedWordInfo> mSuggestedWordInfoList;
|
||||
|
||||
SuggestedWords(List<CharSequence> words, boolean typedWordValid,
|
||||
SuggestedWords(boolean typedWordValid,
|
||||
boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions,
|
||||
boolean shouldBlockAutoCorrectionBySafetyNet,
|
||||
List<SuggestedWordInfo> suggestedWordInfoList) {
|
||||
if (words != null) {
|
||||
mWords = words;
|
||||
} else {
|
||||
mWords = Collections.emptyList();
|
||||
}
|
||||
mTypedWordValid = typedWordValid;
|
||||
mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate
|
||||
&& !shouldBlockAutoCorrectionBySafetyNet;
|
||||
|
@ -52,11 +45,11 @@ public class SuggestedWords {
|
|||
}
|
||||
|
||||
public int size() {
|
||||
return mWords.size();
|
||||
return mSuggestedWordInfoList.size();
|
||||
}
|
||||
|
||||
public CharSequence getWord(int pos) {
|
||||
return mWords.get(pos);
|
||||
return mSuggestedWordInfoList.get(pos).mWord;
|
||||
}
|
||||
|
||||
public SuggestedWordInfo getInfo(int pos) {
|
||||
|
@ -77,12 +70,10 @@ public class SuggestedWords {
|
|||
return "SuggestedWords:"
|
||||
+ " mTypedWordValid=" + mTypedWordValid
|
||||
+ " mHasAutoCorrectionCandidate=" + mHasAutoCorrectionCandidate
|
||||
+ " mIsPunctuationSuggestions=" + mIsPunctuationSuggestions
|
||||
+ " mWords=" + Arrays.toString(mWords.toArray());
|
||||
+ " mIsPunctuationSuggestions=" + mIsPunctuationSuggestions;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private List<CharSequence> mWords = new ArrayList<CharSequence>();
|
||||
private boolean mTypedWordValid;
|
||||
private boolean mHasMinimalSuggestion;
|
||||
private boolean mIsPunctuationSuggestions;
|
||||
|
@ -100,14 +91,15 @@ public class SuggestedWords {
|
|||
List<SuggestedWordInfo> suggestedWordInfoList) {
|
||||
final int N = words.size();
|
||||
for (int i = 0; i < N; ++i) {
|
||||
final CharSequence word = words.get(i);
|
||||
SuggestedWordInfo suggestedWordInfo = null;
|
||||
if (suggestedWordInfoList != null) {
|
||||
suggestedWordInfo = suggestedWordInfoList.get(i);
|
||||
}
|
||||
if (suggestedWordInfo == null) {
|
||||
suggestedWordInfo = new SuggestedWordInfo();
|
||||
suggestedWordInfo = new SuggestedWordInfo(word);
|
||||
}
|
||||
addWord(words.get(i), suggestedWordInfo);
|
||||
addWord(word, suggestedWordInfo);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
@ -118,14 +110,14 @@ public class SuggestedWords {
|
|||
|
||||
public Builder addWord(CharSequence word, CharSequence debugString,
|
||||
boolean isPreviousSuggestedWord) {
|
||||
SuggestedWordInfo info = new SuggestedWordInfo(debugString, isPreviousSuggestedWord);
|
||||
SuggestedWordInfo info = new SuggestedWordInfo(word, debugString,
|
||||
isPreviousSuggestedWord);
|
||||
return addWord(word, info);
|
||||
}
|
||||
|
||||
/* package for tests */
|
||||
Builder addWord(CharSequence word, SuggestedWordInfo suggestedWordInfo) {
|
||||
if (!TextUtils.isEmpty(word)) {
|
||||
mWords.add(word);
|
||||
if (!TextUtils.isEmpty(suggestedWordInfo.mWord)) {
|
||||
// It's okay if suggestedWordInfo is null since it's checked where it's used.
|
||||
mSuggestedWordInfoList.add(suggestedWordInfo);
|
||||
}
|
||||
|
@ -175,7 +167,6 @@ public class SuggestedWords {
|
|||
// and replace it with what the user currently typed.
|
||||
public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord,
|
||||
SuggestedWords previousSuggestions) {
|
||||
mWords.clear();
|
||||
mSuggestedWordInfoList.clear();
|
||||
final HashSet<String> alreadySeen = new HashSet<String>();
|
||||
addWord(typedWord, null, false);
|
||||
|
@ -195,17 +186,17 @@ public class SuggestedWords {
|
|||
}
|
||||
|
||||
public SuggestedWords build() {
|
||||
return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion,
|
||||
return new SuggestedWords(mTypedWordValid, mHasMinimalSuggestion,
|
||||
mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet,
|
||||
mSuggestedWordInfoList);
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return mWords.size();
|
||||
return mSuggestedWordInfoList.size();
|
||||
}
|
||||
|
||||
public CharSequence getWord(int pos) {
|
||||
return mWords.get(pos);
|
||||
return mSuggestedWordInfoList.get(pos).mWord;
|
||||
}
|
||||
|
||||
public boolean allowsToBeAutoCorrected() {
|
||||
|
@ -224,21 +215,24 @@ public class SuggestedWords {
|
|||
+ " mHasMinimalSuggestion=" + mHasMinimalSuggestion
|
||||
+ " mIsPunctuationSuggestions=" + mIsPunctuationSuggestions
|
||||
+ " mShouldBlockAutoCorrectionBySafetyNet="
|
||||
+ mShouldBlockAutoCorrectionBySafetyNet
|
||||
+ " mWords=" + Arrays.toString(mWords.toArray());
|
||||
+ mShouldBlockAutoCorrectionBySafetyNet;
|
||||
}
|
||||
}
|
||||
|
||||
public static class SuggestedWordInfo {
|
||||
private final CharSequence mWord;
|
||||
private final CharSequence mDebugString;
|
||||
private final boolean mPreviousSuggestedWord;
|
||||
|
||||
public SuggestedWordInfo() {
|
||||
public SuggestedWordInfo(final CharSequence word) {
|
||||
mWord = word;
|
||||
mDebugString = "";
|
||||
mPreviousSuggestedWord = false;
|
||||
}
|
||||
|
||||
public SuggestedWordInfo(CharSequence debugString, boolean previousSuggestedWord) {
|
||||
public SuggestedWordInfo(final CharSequence word, final CharSequence debugString,
|
||||
final boolean previousSuggestedWord) {
|
||||
mWord = word;
|
||||
mDebugString = debugString;
|
||||
mPreviousSuggestedWord = previousSuggestedWord;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue