Loading java/src/com/android/inputmethod/latin/CandidateView.java +23 −5 Original line number Original line Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.inputmethod.latin; package com.android.inputmethod.latin; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.Typeface; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; Loading @@ -43,6 +46,7 @@ import android.widget.PopupWindow; import android.widget.TextView; import android.widget.TextView; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener { public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener { Loading @@ -50,6 +54,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); private static final int MAX_SUGGESTIONS = 16; private static final int MAX_SUGGESTIONS = 16; private static boolean DBG = LatinImeLogger.sDBG; private final ArrayList<View> mWords = new ArrayList<View>(); private final ArrayList<View> mWords = new ArrayList<View>(); private final boolean mConfigCandidateHighlightFontColorEnabled; private final boolean mConfigCandidateHighlightFontColorEnabled; private final CharacterStyle mInvertedForegroundColorSpan; private final CharacterStyle mInvertedForegroundColorSpan; Loading Loading @@ -175,11 +181,12 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo final SuggestedWords suggestions = mSuggestions; final SuggestedWords suggestions = mSuggestions; clear(); clear(); final int count = suggestions.size(); final int count = suggestions.size(); final Object[] debugInfo = suggestions.mDebugInfo; for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { CharSequence word = suggestions.getWord(i); CharSequence word = suggestions.getWord(i); if (word == null) continue; if (word == null) continue; final int wordLength = word.length(); final int wordLength = word.length(); final List<SuggestedWordInfo> suggestedWordInfoList = suggestions.mSuggestedWordInfoList; final View v = mWords.get(i); final View v = mWords.get(i); final TextView tv = (TextView)v.findViewById(R.id.candidate_word); final TextView tv = (TextView)v.findViewById(R.id.candidate_word); Loading Loading @@ -209,10 +216,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } } tv.setText(word); tv.setText(word); tv.setClickable(true); tv.setClickable(true); if (debugInfo != null && i < debugInfo.length && debugInfo[i] != null && !TextUtils.isEmpty(debugInfo[i].toString())) { if (suggestedWordInfoList != null && suggestedWordInfoList.get(i) != null) { dv.setText(debugInfo[i].toString()); final SuggestedWordInfo info = suggestedWordInfoList.get(i); if (info.isPreviousSuggestedWord()) { int color = tv.getCurrentTextColor(); tv.setTextColor(Color.argb((int)(Color.alpha(color) * 0.5f), Color.red(color), Color.green(color), Color.blue(color))); } final String debugString = info.getDebugString(); if (DBG) { if (!TextUtils.isEmpty(debugString)) { dv.setText(debugString); dv.setVisibility(VISIBLE); dv.setVisibility(VISIBLE); } } } else { } else { dv.setVisibility(GONE); dv.setVisibility(GONE); } } Loading java/src/com/android/inputmethod/latin/LatinIME.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1519,7 +1519,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies); mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies); boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted && mSuggest.hasMinimalCorrection(); && mSuggest.hasAutoCorrection(); final CharSequence typedWord = word.getTypedWord(); final CharSequence typedWord = word.getTypedWord(); // If we're in basic correct // If we're in basic correct final boolean typedWordValid = mSuggest.isValidWord(typedWord) || final boolean typedWordValid = mSuggest.isValidWord(typedWord) || Loading java/src/com/android/inputmethod/latin/Suggest.java +8 −8 Original line number Original line Diff line number Diff line Loading @@ -95,7 +95,7 @@ public class Suggest implements Dictionary.WordCallback { private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>(); ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>(); private boolean mHaveAutoCorrection; private boolean mHasAutoCorrection; private String mLowerOriginalWord; private String mLowerOriginalWord; // TODO: Remove these member variables by passing more context to addWord() callback method // TODO: Remove these member variables by passing more context to addWord() callback method Loading Loading @@ -200,7 +200,7 @@ public class Suggest implements Dictionary.WordCallback { public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer, public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer, CharSequence prevWordForBigram) { CharSequence prevWordForBigram) { LatinImeLogger.onStartSuggestion(prevWordForBigram); LatinImeLogger.onStartSuggestion(prevWordForBigram); mHaveAutoCorrection = false; mHasAutoCorrection = false; mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); mIsAllUpperCase = wordComposer.isAllUpperCase(); mIsAllUpperCase = wordComposer.isAllUpperCase(); collectGarbage(mSuggestions, mPrefMaxSuggestions); collectGarbage(mSuggestions, mPrefMaxSuggestions); Loading Loading @@ -278,7 +278,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by CORRECTION_FULL."); Log.d(TAG, "Auto corrected by CORRECTION_FULL."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; } } } } if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies); if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies); Loading @@ -297,7 +297,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by S-threthhold."); Log.d(TAG, "Auto corrected by S-threthhold."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; } } } } } } Loading Loading @@ -342,7 +342,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by AUTOTEXT."); Log.d(TAG, "Auto corrected by AUTOTEXT."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; mSuggestions.add(i + 1, autoText); mSuggestions.add(i + 1, autoText); i++; i++; } } Loading @@ -350,7 +350,7 @@ public class Suggest implements Dictionary.WordCallback { } } } } removeDupes(); removeDupes(); return new SuggestedWords.Builder().addWords(mSuggestions); return new SuggestedWords.Builder().addWords(mSuggestions, null); } } public int[] getNextLettersFrequencies() { public int[] getNextLettersFrequencies() { Loading Loading @@ -384,8 +384,8 @@ public class Suggest implements Dictionary.WordCallback { } } } } public boolean hasMinimalCorrection() { public boolean hasAutoCorrection() { return mHaveAutoCorrection; return mHasAutoCorrection; } } private boolean compareCaseInsensitive(final String mLowerOriginalWord, private boolean compareCaseInsensitive(final String mLowerOriginalWord, Loading java/src/com/android/inputmethod/latin/SuggestedWords.java +61 −24 Original line number Original line Diff line number Diff line Loading @@ -29,10 +29,11 @@ public class SuggestedWords { public final boolean mIsApplicationSpecifiedCompletions; public final boolean mIsApplicationSpecifiedCompletions; public final boolean mTypedWordValid; public final boolean mTypedWordValid; public final boolean mHasMinimalSuggestion; public final boolean mHasMinimalSuggestion; public final Object[] mDebugInfo; public final List<SuggestedWordInfo> mSuggestedWordInfoList; private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions, private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions, boolean typedWordValid, boolean hasMinamlSuggestion, Object[] debugInfo) { boolean typedWordValid, boolean hasMinamlSuggestion, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { if (words != null) { mWords = words; mWords = words; } else { } else { Loading @@ -41,7 +42,7 @@ public class SuggestedWords { mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions; mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions; mTypedWordValid = typedWordValid; mTypedWordValid = typedWordValid; mHasMinimalSuggestion = hasMinamlSuggestion; mHasMinimalSuggestion = hasMinamlSuggestion; mDebugInfo = debugInfo; mSuggestedWordInfoList = suggestedWordInfoList; } } public int size() { public int size() { Loading @@ -61,38 +62,46 @@ public class SuggestedWords { } } public static class Builder { public static class Builder { private List<CharSequence> mWords; private List<CharSequence> mWords = new ArrayList<CharSequence>(); private boolean mIsCompletions; private boolean mIsCompletions; private boolean mTypedWordValid; private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mHasMinimalSuggestion; private Object[] mDebugInfo; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); public Builder() { public Builder() { // Nothing to do here. // Nothing to do here. } } public Builder addWords(List<CharSequence> words) { public Builder addWords(List<CharSequence> words, for (final CharSequence word : words) List<SuggestedWordInfo> suggestedWordInfoList) { addWord(word); final int N = words.size(); for (int i = 0; i < N; ++i) { SuggestedWordInfo suggestedWordInfo = null; if (suggestedWordInfoList != null) { suggestedWordInfo = suggestedWordInfoList.get(i); } if (suggestedWordInfo == null) { suggestedWordInfo = new SuggestedWordInfo(); } addWord(words.get(i), suggestedWordInfo); } return this; return this; } } public Builder setDebugInfo(Object[] debuginfo) { public Builder addWord(CharSequence word) { mDebugInfo = debuginfo; return addWord(word, null, false); return this; } } public Builder addWord(int pos, CharSequence word) { public Builder addWord(CharSequence word, CharSequence debugString, if (mWords == null) boolean isPreviousSuggestedWord) { mWords = new ArrayList<CharSequence>(); SuggestedWordInfo info = new SuggestedWordInfo(debugString, isPreviousSuggestedWord); mWords.add(pos, word); return addWord(word, info); return this; } } public Builder addWord(CharSequence word) { private Builder addWord(CharSequence word, SuggestedWordInfo suggestedWordInfo) { if (mWords == null) mWords = new ArrayList<CharSequence>(); mWords.add(word); mWords.add(word); mSuggestedWordInfoList.add(suggestedWordInfo); return this; return this; } } Loading @@ -117,11 +126,12 @@ public class SuggestedWords { // and replace it with what the user currently typed. // and replace it with what the user currently typed. public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, SuggestedWords previousSuggestions) { SuggestedWords previousSuggestions) { if (mWords != null) mWords.clear(); mWords.clear(); addWord(typedWord); mSuggestedWordInfoList.clear(); addWord(typedWord, null, false); final int previousSize = previousSuggestions.size(); final int previousSize = previousSuggestions.size(); for (int pos = 1; pos < previousSize; pos++) for (int pos = 1; pos < previousSize; pos++) addWord(previousSuggestions.getWord(pos)); addWord(previousSuggestions.getWord(pos), null, true); mIsCompletions = false; mIsCompletions = false; mTypedWordValid = false; mTypedWordValid = false; mHasMinimalSuggestion = false; mHasMinimalSuggestion = false; Loading @@ -130,15 +140,42 @@ public class SuggestedWords { public SuggestedWords build() { public SuggestedWords build() { return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid, return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid, mHasMinimalSuggestion, mDebugInfo); mHasMinimalSuggestion, mSuggestedWordInfoList); } } public int size() { public int size() { return mWords == null ? 0 : mWords.size(); return mWords.size(); } } public CharSequence getWord(int pos) { public CharSequence getWord(int pos) { return mWords.get(pos); return mWords.get(pos); } } } } public static class SuggestedWordInfo { private final CharSequence mDebugString; private final boolean mPreviousSuggestedWord; public SuggestedWordInfo() { mDebugString = ""; mPreviousSuggestedWord = false; } public SuggestedWordInfo(CharSequence debugString, boolean previousSuggestedWord) { mDebugString = debugString; mPreviousSuggestedWord = previousSuggestedWord; } public String getDebugString() { if (mDebugString == null) { return ""; } else { return mDebugString.toString(); } } public boolean isPreviousSuggestedWord () { return mPreviousSuggestedWord; } } } } java/src/com/android/inputmethod/voice/VoiceIMEConnector.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -437,7 +437,7 @@ public class VoiceIMEConnector implements VoiceInput.UiListener { builder.addWord(word); builder.addWord(word); } } } else { } else { builder.addWords(suggestions); builder.addWords(suggestions, null); } } builder.setTypedWordValid(true).setHasMinimalSuggestion(true); builder.setTypedWordValid(true).setHasMinimalSuggestion(true); mService.setSuggestions(builder.build()); mService.setSuggestions(builder.build()); Loading Loading
java/src/com/android/inputmethod/latin/CandidateView.java +23 −5 Original line number Original line Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.inputmethod.latin; package com.android.inputmethod.latin; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import android.content.Context; import android.content.Context; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.Typeface; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; Loading @@ -43,6 +46,7 @@ import android.widget.PopupWindow; import android.widget.TextView; import android.widget.TextView; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener { public class CandidateView extends LinearLayout implements OnClickListener, OnLongClickListener { Loading @@ -50,6 +54,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); private static final int MAX_SUGGESTIONS = 16; private static final int MAX_SUGGESTIONS = 16; private static boolean DBG = LatinImeLogger.sDBG; private final ArrayList<View> mWords = new ArrayList<View>(); private final ArrayList<View> mWords = new ArrayList<View>(); private final boolean mConfigCandidateHighlightFontColorEnabled; private final boolean mConfigCandidateHighlightFontColorEnabled; private final CharacterStyle mInvertedForegroundColorSpan; private final CharacterStyle mInvertedForegroundColorSpan; Loading Loading @@ -175,11 +181,12 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo final SuggestedWords suggestions = mSuggestions; final SuggestedWords suggestions = mSuggestions; clear(); clear(); final int count = suggestions.size(); final int count = suggestions.size(); final Object[] debugInfo = suggestions.mDebugInfo; for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { CharSequence word = suggestions.getWord(i); CharSequence word = suggestions.getWord(i); if (word == null) continue; if (word == null) continue; final int wordLength = word.length(); final int wordLength = word.length(); final List<SuggestedWordInfo> suggestedWordInfoList = suggestions.mSuggestedWordInfoList; final View v = mWords.get(i); final View v = mWords.get(i); final TextView tv = (TextView)v.findViewById(R.id.candidate_word); final TextView tv = (TextView)v.findViewById(R.id.candidate_word); Loading Loading @@ -209,10 +216,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } } tv.setText(word); tv.setText(word); tv.setClickable(true); tv.setClickable(true); if (debugInfo != null && i < debugInfo.length && debugInfo[i] != null && !TextUtils.isEmpty(debugInfo[i].toString())) { if (suggestedWordInfoList != null && suggestedWordInfoList.get(i) != null) { dv.setText(debugInfo[i].toString()); final SuggestedWordInfo info = suggestedWordInfoList.get(i); if (info.isPreviousSuggestedWord()) { int color = tv.getCurrentTextColor(); tv.setTextColor(Color.argb((int)(Color.alpha(color) * 0.5f), Color.red(color), Color.green(color), Color.blue(color))); } final String debugString = info.getDebugString(); if (DBG) { if (!TextUtils.isEmpty(debugString)) { dv.setText(debugString); dv.setVisibility(VISIBLE); dv.setVisibility(VISIBLE); } } } else { } else { dv.setVisibility(GONE); dv.setVisibility(GONE); } } Loading
java/src/com/android/inputmethod/latin/LatinIME.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1519,7 +1519,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies); mKeyboardSwitcher.setPreferredLetters(nextLettersFrequencies); boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted boolean correctionAvailable = !mInputTypeNoAutoCorrect && !mJustReverted && mSuggest.hasMinimalCorrection(); && mSuggest.hasAutoCorrection(); final CharSequence typedWord = word.getTypedWord(); final CharSequence typedWord = word.getTypedWord(); // If we're in basic correct // If we're in basic correct final boolean typedWordValid = mSuggest.isValidWord(typedWord) || final boolean typedWordValid = mSuggest.isValidWord(typedWord) || Loading
java/src/com/android/inputmethod/latin/Suggest.java +8 −8 Original line number Original line Diff line number Diff line Loading @@ -95,7 +95,7 @@ public class Suggest implements Dictionary.WordCallback { private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>(); ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>(); private boolean mHaveAutoCorrection; private boolean mHasAutoCorrection; private String mLowerOriginalWord; private String mLowerOriginalWord; // TODO: Remove these member variables by passing more context to addWord() callback method // TODO: Remove these member variables by passing more context to addWord() callback method Loading Loading @@ -200,7 +200,7 @@ public class Suggest implements Dictionary.WordCallback { public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer, public SuggestedWords.Builder getSuggestedWordBuilder(View view, WordComposer wordComposer, CharSequence prevWordForBigram) { CharSequence prevWordForBigram) { LatinImeLogger.onStartSuggestion(prevWordForBigram); LatinImeLogger.onStartSuggestion(prevWordForBigram); mHaveAutoCorrection = false; mHasAutoCorrection = false; mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); mIsAllUpperCase = wordComposer.isAllUpperCase(); mIsAllUpperCase = wordComposer.isAllUpperCase(); collectGarbage(mSuggestions, mPrefMaxSuggestions); collectGarbage(mSuggestions, mPrefMaxSuggestions); Loading Loading @@ -278,7 +278,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by CORRECTION_FULL."); Log.d(TAG, "Auto corrected by CORRECTION_FULL."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; } } } } if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies); if (mMainDict != null) mMainDict.getWords(wordComposer, this, mNextLettersFrequencies); Loading @@ -297,7 +297,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by S-threthhold."); Log.d(TAG, "Auto corrected by S-threthhold."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; } } } } } } Loading Loading @@ -342,7 +342,7 @@ public class Suggest implements Dictionary.WordCallback { if (DBG) { if (DBG) { Log.d(TAG, "Auto corrected by AUTOTEXT."); Log.d(TAG, "Auto corrected by AUTOTEXT."); } } mHaveAutoCorrection = true; mHasAutoCorrection = true; mSuggestions.add(i + 1, autoText); mSuggestions.add(i + 1, autoText); i++; i++; } } Loading @@ -350,7 +350,7 @@ public class Suggest implements Dictionary.WordCallback { } } } } removeDupes(); removeDupes(); return new SuggestedWords.Builder().addWords(mSuggestions); return new SuggestedWords.Builder().addWords(mSuggestions, null); } } public int[] getNextLettersFrequencies() { public int[] getNextLettersFrequencies() { Loading Loading @@ -384,8 +384,8 @@ public class Suggest implements Dictionary.WordCallback { } } } } public boolean hasMinimalCorrection() { public boolean hasAutoCorrection() { return mHaveAutoCorrection; return mHasAutoCorrection; } } private boolean compareCaseInsensitive(final String mLowerOriginalWord, private boolean compareCaseInsensitive(final String mLowerOriginalWord, Loading
java/src/com/android/inputmethod/latin/SuggestedWords.java +61 −24 Original line number Original line Diff line number Diff line Loading @@ -29,10 +29,11 @@ public class SuggestedWords { public final boolean mIsApplicationSpecifiedCompletions; public final boolean mIsApplicationSpecifiedCompletions; public final boolean mTypedWordValid; public final boolean mTypedWordValid; public final boolean mHasMinimalSuggestion; public final boolean mHasMinimalSuggestion; public final Object[] mDebugInfo; public final List<SuggestedWordInfo> mSuggestedWordInfoList; private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions, private SuggestedWords(List<CharSequence> words, boolean isApplicationSpecifiedCompletions, boolean typedWordValid, boolean hasMinamlSuggestion, Object[] debugInfo) { boolean typedWordValid, boolean hasMinamlSuggestion, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { if (words != null) { mWords = words; mWords = words; } else { } else { Loading @@ -41,7 +42,7 @@ public class SuggestedWords { mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions; mIsApplicationSpecifiedCompletions = isApplicationSpecifiedCompletions; mTypedWordValid = typedWordValid; mTypedWordValid = typedWordValid; mHasMinimalSuggestion = hasMinamlSuggestion; mHasMinimalSuggestion = hasMinamlSuggestion; mDebugInfo = debugInfo; mSuggestedWordInfoList = suggestedWordInfoList; } } public int size() { public int size() { Loading @@ -61,38 +62,46 @@ public class SuggestedWords { } } public static class Builder { public static class Builder { private List<CharSequence> mWords; private List<CharSequence> mWords = new ArrayList<CharSequence>(); private boolean mIsCompletions; private boolean mIsCompletions; private boolean mTypedWordValid; private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mHasMinimalSuggestion; private Object[] mDebugInfo; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); public Builder() { public Builder() { // Nothing to do here. // Nothing to do here. } } public Builder addWords(List<CharSequence> words) { public Builder addWords(List<CharSequence> words, for (final CharSequence word : words) List<SuggestedWordInfo> suggestedWordInfoList) { addWord(word); final int N = words.size(); for (int i = 0; i < N; ++i) { SuggestedWordInfo suggestedWordInfo = null; if (suggestedWordInfoList != null) { suggestedWordInfo = suggestedWordInfoList.get(i); } if (suggestedWordInfo == null) { suggestedWordInfo = new SuggestedWordInfo(); } addWord(words.get(i), suggestedWordInfo); } return this; return this; } } public Builder setDebugInfo(Object[] debuginfo) { public Builder addWord(CharSequence word) { mDebugInfo = debuginfo; return addWord(word, null, false); return this; } } public Builder addWord(int pos, CharSequence word) { public Builder addWord(CharSequence word, CharSequence debugString, if (mWords == null) boolean isPreviousSuggestedWord) { mWords = new ArrayList<CharSequence>(); SuggestedWordInfo info = new SuggestedWordInfo(debugString, isPreviousSuggestedWord); mWords.add(pos, word); return addWord(word, info); return this; } } public Builder addWord(CharSequence word) { private Builder addWord(CharSequence word, SuggestedWordInfo suggestedWordInfo) { if (mWords == null) mWords = new ArrayList<CharSequence>(); mWords.add(word); mWords.add(word); mSuggestedWordInfoList.add(suggestedWordInfo); return this; return this; } } Loading @@ -117,11 +126,12 @@ public class SuggestedWords { // and replace it with what the user currently typed. // and replace it with what the user currently typed. public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, SuggestedWords previousSuggestions) { SuggestedWords previousSuggestions) { if (mWords != null) mWords.clear(); mWords.clear(); addWord(typedWord); mSuggestedWordInfoList.clear(); addWord(typedWord, null, false); final int previousSize = previousSuggestions.size(); final int previousSize = previousSuggestions.size(); for (int pos = 1; pos < previousSize; pos++) for (int pos = 1; pos < previousSize; pos++) addWord(previousSuggestions.getWord(pos)); addWord(previousSuggestions.getWord(pos), null, true); mIsCompletions = false; mIsCompletions = false; mTypedWordValid = false; mTypedWordValid = false; mHasMinimalSuggestion = false; mHasMinimalSuggestion = false; Loading @@ -130,15 +140,42 @@ public class SuggestedWords { public SuggestedWords build() { public SuggestedWords build() { return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid, return new SuggestedWords(mWords, mIsCompletions, mTypedWordValid, mHasMinimalSuggestion, mDebugInfo); mHasMinimalSuggestion, mSuggestedWordInfoList); } } public int size() { public int size() { return mWords == null ? 0 : mWords.size(); return mWords.size(); } } public CharSequence getWord(int pos) { public CharSequence getWord(int pos) { return mWords.get(pos); return mWords.get(pos); } } } } public static class SuggestedWordInfo { private final CharSequence mDebugString; private final boolean mPreviousSuggestedWord; public SuggestedWordInfo() { mDebugString = ""; mPreviousSuggestedWord = false; } public SuggestedWordInfo(CharSequence debugString, boolean previousSuggestedWord) { mDebugString = debugString; mPreviousSuggestedWord = previousSuggestedWord; } public String getDebugString() { if (mDebugString == null) { return ""; } else { return mDebugString.toString(); } } public boolean isPreviousSuggestedWord () { return mPreviousSuggestedWord; } } } }
java/src/com/android/inputmethod/voice/VoiceIMEConnector.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -437,7 +437,7 @@ public class VoiceIMEConnector implements VoiceInput.UiListener { builder.addWord(word); builder.addWord(word); } } } else { } else { builder.addWords(suggestions); builder.addWords(suggestions, null); } } builder.setTypedWordValid(true).setHasMinimalSuggestion(true); builder.setTypedWordValid(true).setHasMinimalSuggestion(true); mService.setSuggestions(builder.build()); mService.setSuggestions(builder.build()); Loading