diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 6c9a827d6..59fa66ded 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1827,8 +1827,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions); } } - if (Utils.shouldBlockAutoCorrectionBySafetyNet(builder, mSuggest)) { - builder.setShouldBlockAutoCorrectionBySafetyNet(); + final SuggestedWords suggestedWords = builder.build(); + if (Utils.shouldBlockAutoCorrectionBySafetyNet(suggestedWords, mSuggest)) { + suggestedWords.setShouldBlockAutoCorrectionBySatefyNet(); } showSuggestions(builder.build(), typedWord); } @@ -1836,7 +1837,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar public void showSuggestions(final SuggestedWords suggestedWords, final CharSequence typedWord) { final CharSequence autoCorrection; if (suggestedWords.size() > 0) { - if (!suggestedWords.mShouldBlockAutoCorrectionBySafetyNet + if (!suggestedWords.shouldBlockAutoCorrectionBySafetyNet() && suggestedWords.hasAutoCorrectionWord()) { autoCorrection = suggestedWords.getWord(1); } else { @@ -1910,7 +1911,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar if (suggestion.length() == 1 && isShowingPunctuationList()) { // Word separators are suggested before the user inputs something. // So, LatinImeLogger logs "" as a user's input. - LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestions); + LatinImeLogger.logOnManualSuggestion( + "", suggestion.toString(), index, suggestions.mWords); // Rely on onCodeInput to do the complicated swapping/stripping logic consistently. final int primaryCode = suggestion.charAt(0); onCodeInput(primaryCode, new int[] { primaryCode }, @@ -1921,7 +1923,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // We need to log before we commit, because the word composer will store away the user // typed word. LatinImeLogger.logOnManualSuggestion(mWordComposer.getTypedWord().toString(), - suggestion.toString(), index, suggestions); + suggestion.toString(), index, suggestions.mWords); mExpectingUpdateSelection = true; commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR); diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java index 9d4307fa5..e3dadf250 100644 --- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java +++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java @@ -22,6 +22,8 @@ import android.view.inputmethod.EditorInfo; import com.android.inputmethod.keyboard.Keyboard; +import java.util.List; + public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChangeListener { public static boolean sDBG = false; @@ -42,7 +44,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } public static void logOnManualSuggestion( - String before, String after, int position, SuggestedWords suggestions) { + String before, String after, int position, List suggestions) { } public static void logOnAutoCorrection(String before, String after, int separatorCode) { diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java index bc6c52787..ff8945f71 100644 --- a/java/src/com/android/inputmethod/latin/SuggestedWords.java +++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java @@ -20,25 +20,22 @@ 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(null, false, false, false, null); - private final List mWords; + public final List mWords; public final boolean mTypedWordValid; public final boolean mHasAutoCorrectionCandidate; public final boolean mIsPunctuationSuggestions; - public final boolean mShouldBlockAutoCorrectionBySafetyNet; private final List mSuggestedWordInfoList; + private boolean mShouldBlockAutoCorrectionBySafetyNet; - SuggestedWords(List words, boolean typedWordValid, + private SuggestedWords(List words, boolean typedWordValid, boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions, - boolean shouldBlockAutoCorrectionBySafetyNet, List suggestedWordInfoList) { if (words != null) { mWords = words; @@ -48,8 +45,8 @@ public class SuggestedWords { mTypedWordValid = typedWordValid; mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate; mIsPunctuationSuggestions = isPunctuationSuggestions; - mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet; mSuggestedWordInfoList = suggestedWordInfoList; + mShouldBlockAutoCorrectionBySafetyNet = false; } public int size() { @@ -65,23 +62,24 @@ public class SuggestedWords { } public boolean hasAutoCorrectionWord() { - return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid; + return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid; + } + + public boolean isPunctuationSuggestions() { + return mIsPunctuationSuggestions; + } + + public void setShouldBlockAutoCorrectionBySatefyNet() { + mShouldBlockAutoCorrectionBySafetyNet = true; + } + + public boolean shouldBlockAutoCorrectionBySafetyNet() { + return mShouldBlockAutoCorrectionBySafetyNet; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate - && !mShouldBlockAutoCorrectionBySafetyNet; - } - - @Override - public String toString() { - // Pretty-print method to help debug - return "SuggestedWords.Builder:" - + " mTypedWordValid = " + mTypedWordValid - + " mHasAutoCorrectionCandidate = " + mHasAutoCorrectionCandidate - + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions - + " mShouldBlockAutoCorrectionBySafetyNet" + mShouldBlockAutoCorrectionBySafetyNet - + " mWords=" + Arrays.toString(mWords.toArray()); + && !shouldBlockAutoCorrectionBySafetyNet(); } public static class Builder { @@ -89,7 +87,6 @@ public class SuggestedWords { private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mIsPunctuationSuggestions; - private boolean mShouldBlockAutoCorrectionBySafetyNet; private List mSuggestedWordInfoList = new ArrayList(); @@ -154,11 +151,6 @@ public class SuggestedWords { return this; } - public Builder setShouldBlockAutoCorrectionBySafetyNet() { - mShouldBlockAutoCorrectionBySafetyNet = true; - return this; - } - // Should get rid of the first one (what the user typed previously) from suggestions // and replace it with what the user currently typed. public Builder addTypedWordAndPreviousSuggestions(CharSequence typedWord, @@ -184,8 +176,7 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion, - mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet, - mSuggestedWordInfoList); + mIsPunctuationSuggestions, mSuggestedWordInfoList); } public int size() { @@ -196,20 +187,18 @@ public class SuggestedWords { return mWords.get(pos); } - public boolean isTypedWordValid() { - return mTypedWordValid; - } - @Override public String toString() { // Pretty-print method to help debug - return "SuggestedWords.Builder:" - + " mTypedWordValid = " + mTypedWordValid - + " mHasMinimalSuggestion = " + mHasMinimalSuggestion - + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions - + " mShouldBlockAutoCorrectionBySafetyNet" - + mShouldBlockAutoCorrectionBySafetyNet - + " mWords=" + Arrays.toString(mWords.toArray()); + final StringBuilder sb = new StringBuilder("StringBuilder: mTypedWordValid = " + + mTypedWordValid + " ; mHasMinimalSuggestion = " + mHasMinimalSuggestion + + " ; mIsPunctuationSuggestions = " + mIsPunctuationSuggestions + + " --- "); + for (CharSequence s : mWords) { + sb.append(s); + sb.append(" ; "); + } + return sb.toString(); } } diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java index 69b2902cc..f6bc85431 100644 --- a/java/src/com/android/inputmethod/latin/Utils.java +++ b/java/src/com/android/inputmethod/latin/Utils.java @@ -190,11 +190,11 @@ public class Utils { // TODO: Resolve the inconsistencies between the native auto correction algorithms and // this safety net - public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords.Builder suggestions, + public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords suggestions, Suggest suggest) { // Safety net for auto correction. // Actually if we hit this safety net, it's actually a bug. - if (suggestions.size() <= 1 || suggestions.isTypedWordValid()) return false; + if (suggestions.size() <= 1 || suggestions.mTypedWordValid) return false; // If user selected aggressive auto correction mode, there is no need to use the safety // net. if (suggest.isAggressiveAutoCorrectionMode()) return false; diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java index 20eb55ce8..e5638ef21 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java @@ -307,7 +307,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } if (LatinImeLogger.sDBG) { if (index == mCenterSuggestionIndex && suggestions.mHasAutoCorrectionCandidate - && suggestions.mShouldBlockAutoCorrectionBySafetyNet) { + && suggestions.shouldBlockAutoCorrectionBySafetyNet()) { return 0xFFFF0000; } } @@ -335,7 +335,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer, int stripWidth) { - if (suggestions.mIsPunctuationSuggestions) { + if (suggestions.isPunctuationSuggestions()) { layoutPunctuationSuggestions(suggestions, stripView); return; }