Loading java/src/com/android/inputmethod/latin/LatinIME.java +5 −7 Original line number Diff line number Diff line Loading @@ -1827,9 +1827,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions); } } final SuggestedWords suggestedWords = builder.build(); if (Utils.shouldBlockAutoCorrectionBySafetyNet(suggestedWords, mSuggest)) { suggestedWords.setShouldBlockAutoCorrectionBySatefyNet(); if (Utils.shouldBlockAutoCorrectionBySafetyNet(builder, mSuggest)) { builder.setShouldBlockAutoCorrectionBySafetyNet(); } showSuggestions(builder.build(), typedWord); } Loading @@ -1837,7 +1836,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.shouldBlockAutoCorrectionBySafetyNet() if (!suggestedWords.mShouldBlockAutoCorrectionBySafetyNet && suggestedWords.hasAutoCorrectionWord()) { autoCorrection = suggestedWords.getWord(1); } else { Loading Loading @@ -1911,8 +1910,7 @@ 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.mWords); LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestions); // Rely on onCodeInput to do the complicated swapping/stripping logic consistently. final int primaryCode = suggestion.charAt(0); onCodeInput(primaryCode, new int[] { primaryCode }, Loading @@ -1923,7 +1921,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.mWords); suggestion.toString(), index, suggestions); mExpectingUpdateSelection = true; commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR); Loading java/src/com/android/inputmethod/latin/LatinImeLogger.java +1 −3 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ 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; Loading @@ -44,7 +42,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } public static void logOnManualSuggestion( String before, String after, int position, List<CharSequence> suggestions) { String before, String after, int position, SuggestedWords suggestions) { } public static void logOnAutoCorrection(String before, String after, int separatorCode) { Loading java/src/com/android/inputmethod/latin/SuggestedWords.java +40 −29 Original line number Diff line number Diff line Loading @@ -20,22 +20,25 @@ 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, null); public static final SuggestedWords EMPTY = new SuggestedWords(null, false, false, false, false, null); public final List<CharSequence> mWords; private final List<CharSequence> mWords; public final boolean mTypedWordValid; public final boolean mHasAutoCorrectionCandidate; public final boolean mIsPunctuationSuggestions; public final boolean mShouldBlockAutoCorrectionBySafetyNet; private final List<SuggestedWordInfo> mSuggestedWordInfoList; private boolean mShouldBlockAutoCorrectionBySafetyNet; private SuggestedWords(List<CharSequence> words, boolean typedWordValid, SuggestedWords(List<CharSequence> words, boolean typedWordValid, boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions, boolean shouldBlockAutoCorrectionBySafetyNet, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { mWords = words; Loading @@ -45,8 +48,8 @@ public class SuggestedWords { mTypedWordValid = typedWordValid; mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate; mIsPunctuationSuggestions = isPunctuationSuggestions; mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet; mSuggestedWordInfoList = suggestedWordInfoList; mShouldBlockAutoCorrectionBySafetyNet = false; } public int size() { Loading @@ -62,24 +65,23 @@ public class SuggestedWords { } public boolean hasAutoCorrectionWord() { return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid; } public boolean isPunctuationSuggestions() { return mIsPunctuationSuggestions; } public void setShouldBlockAutoCorrectionBySatefyNet() { mShouldBlockAutoCorrectionBySafetyNet = true; } public boolean shouldBlockAutoCorrectionBySafetyNet() { return mShouldBlockAutoCorrectionBySafetyNet; return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !shouldBlockAutoCorrectionBySafetyNet(); && !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()); } public static class Builder { Loading @@ -87,6 +89,7 @@ public class SuggestedWords { private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mIsPunctuationSuggestions; private boolean mShouldBlockAutoCorrectionBySafetyNet; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); Loading Loading @@ -151,6 +154,11 @@ 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, Loading @@ -176,7 +184,8 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion, mIsPunctuationSuggestions, mSuggestedWordInfoList); mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet, mSuggestedWordInfoList); } public int size() { Loading @@ -187,18 +196,20 @@ public class SuggestedWords { return mWords.get(pos); } public boolean isTypedWordValid() { return mTypedWordValid; } @Override public String toString() { // Pretty-print method to help debug final StringBuilder sb = new StringBuilder("StringBuilder: mTypedWordValid = " + mTypedWordValid + " ; mHasMinimalSuggestion = " + mHasMinimalSuggestion + " ; mIsPunctuationSuggestions = " + mIsPunctuationSuggestions + " --- "); for (CharSequence s : mWords) { sb.append(s); sb.append(" ; "); } return sb.toString(); return "SuggestedWords.Builder:" + " mTypedWordValid = " + mTypedWordValid + " mHasMinimalSuggestion = " + mHasMinimalSuggestion + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions + " mShouldBlockAutoCorrectionBySafetyNet" + mShouldBlockAutoCorrectionBySafetyNet + " mWords=" + Arrays.toString(mWords.toArray()); } } Loading java/src/com/android/inputmethod/latin/Utils.java +2 −2 Original line number Diff line number Diff line Loading @@ -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 suggestions, public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords.Builder 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.mTypedWordValid) return false; if (suggestions.size() <= 1 || suggestions.isTypedWordValid()) return false; // If user selected aggressive auto correction mode, there is no need to use the safety // net. if (suggest.isAggressiveAutoCorrectionMode()) return false; Loading java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java +2 −2 Original line number Diff line number Diff line Loading @@ -307,7 +307,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } if (LatinImeLogger.sDBG) { if (index == mCenterSuggestionIndex && suggestions.mHasAutoCorrectionCandidate && suggestions.shouldBlockAutoCorrectionBySafetyNet()) { && suggestions.mShouldBlockAutoCorrectionBySafetyNet) { return 0xFFFF0000; } } Loading Loading @@ -335,7 +335,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer, int stripWidth) { if (suggestions.isPunctuationSuggestions()) { if (suggestions.mIsPunctuationSuggestions) { layoutPunctuationSuggestions(suggestions, stripView); return; } Loading Loading
java/src/com/android/inputmethod/latin/LatinIME.java +5 −7 Original line number Diff line number Diff line Loading @@ -1827,9 +1827,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar builder.addTypedWordAndPreviousSuggestions(typedWord, previousSuggestions); } } final SuggestedWords suggestedWords = builder.build(); if (Utils.shouldBlockAutoCorrectionBySafetyNet(suggestedWords, mSuggest)) { suggestedWords.setShouldBlockAutoCorrectionBySatefyNet(); if (Utils.shouldBlockAutoCorrectionBySafetyNet(builder, mSuggest)) { builder.setShouldBlockAutoCorrectionBySafetyNet(); } showSuggestions(builder.build(), typedWord); } Loading @@ -1837,7 +1836,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.shouldBlockAutoCorrectionBySafetyNet() if (!suggestedWords.mShouldBlockAutoCorrectionBySafetyNet && suggestedWords.hasAutoCorrectionWord()) { autoCorrection = suggestedWords.getWord(1); } else { Loading Loading @@ -1911,8 +1910,7 @@ 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.mWords); LatinImeLogger.logOnManualSuggestion("", suggestion.toString(), index, suggestions); // Rely on onCodeInput to do the complicated swapping/stripping logic consistently. final int primaryCode = suggestion.charAt(0); onCodeInput(primaryCode, new int[] { primaryCode }, Loading @@ -1923,7 +1921,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.mWords); suggestion.toString(), index, suggestions); mExpectingUpdateSelection = true; commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR); Loading
java/src/com/android/inputmethod/latin/LatinImeLogger.java +1 −3 Original line number Diff line number Diff line Loading @@ -22,8 +22,6 @@ 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; Loading @@ -44,7 +42,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } public static void logOnManualSuggestion( String before, String after, int position, List<CharSequence> suggestions) { String before, String after, int position, SuggestedWords suggestions) { } public static void logOnAutoCorrection(String before, String after, int separatorCode) { Loading
java/src/com/android/inputmethod/latin/SuggestedWords.java +40 −29 Original line number Diff line number Diff line Loading @@ -20,22 +20,25 @@ 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, null); public static final SuggestedWords EMPTY = new SuggestedWords(null, false, false, false, false, null); public final List<CharSequence> mWords; private final List<CharSequence> mWords; public final boolean mTypedWordValid; public final boolean mHasAutoCorrectionCandidate; public final boolean mIsPunctuationSuggestions; public final boolean mShouldBlockAutoCorrectionBySafetyNet; private final List<SuggestedWordInfo> mSuggestedWordInfoList; private boolean mShouldBlockAutoCorrectionBySafetyNet; private SuggestedWords(List<CharSequence> words, boolean typedWordValid, SuggestedWords(List<CharSequence> words, boolean typedWordValid, boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions, boolean shouldBlockAutoCorrectionBySafetyNet, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { mWords = words; Loading @@ -45,8 +48,8 @@ public class SuggestedWords { mTypedWordValid = typedWordValid; mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate; mIsPunctuationSuggestions = isPunctuationSuggestions; mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet; mSuggestedWordInfoList = suggestedWordInfoList; mShouldBlockAutoCorrectionBySafetyNet = false; } public int size() { Loading @@ -62,24 +65,23 @@ public class SuggestedWords { } public boolean hasAutoCorrectionWord() { return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid; } public boolean isPunctuationSuggestions() { return mIsPunctuationSuggestions; } public void setShouldBlockAutoCorrectionBySatefyNet() { mShouldBlockAutoCorrectionBySafetyNet = true; } public boolean shouldBlockAutoCorrectionBySafetyNet() { return mShouldBlockAutoCorrectionBySafetyNet; return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !shouldBlockAutoCorrectionBySafetyNet(); && !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()); } public static class Builder { Loading @@ -87,6 +89,7 @@ public class SuggestedWords { private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mIsPunctuationSuggestions; private boolean mShouldBlockAutoCorrectionBySafetyNet; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); Loading Loading @@ -151,6 +154,11 @@ 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, Loading @@ -176,7 +184,8 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion, mIsPunctuationSuggestions, mSuggestedWordInfoList); mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet, mSuggestedWordInfoList); } public int size() { Loading @@ -187,18 +196,20 @@ public class SuggestedWords { return mWords.get(pos); } public boolean isTypedWordValid() { return mTypedWordValid; } @Override public String toString() { // Pretty-print method to help debug final StringBuilder sb = new StringBuilder("StringBuilder: mTypedWordValid = " + mTypedWordValid + " ; mHasMinimalSuggestion = " + mHasMinimalSuggestion + " ; mIsPunctuationSuggestions = " + mIsPunctuationSuggestions + " --- "); for (CharSequence s : mWords) { sb.append(s); sb.append(" ; "); } return sb.toString(); return "SuggestedWords.Builder:" + " mTypedWordValid = " + mTypedWordValid + " mHasMinimalSuggestion = " + mHasMinimalSuggestion + " mIsPunctuationSuggestions = " + mIsPunctuationSuggestions + " mShouldBlockAutoCorrectionBySafetyNet" + mShouldBlockAutoCorrectionBySafetyNet + " mWords=" + Arrays.toString(mWords.toArray()); } } Loading
java/src/com/android/inputmethod/latin/Utils.java +2 −2 Original line number Diff line number Diff line Loading @@ -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 suggestions, public static boolean shouldBlockAutoCorrectionBySafetyNet(SuggestedWords.Builder 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.mTypedWordValid) return false; if (suggestions.size() <= 1 || suggestions.isTypedWordValid()) return false; // If user selected aggressive auto correction mode, there is no need to use the safety // net. if (suggest.isAggressiveAutoCorrectionMode()) return false; Loading
java/src/com/android/inputmethod/latin/suggestions/SuggestionsView.java +2 −2 Original line number Diff line number Diff line Loading @@ -307,7 +307,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } if (LatinImeLogger.sDBG) { if (index == mCenterSuggestionIndex && suggestions.mHasAutoCorrectionCandidate && suggestions.shouldBlockAutoCorrectionBySafetyNet()) { && suggestions.mShouldBlockAutoCorrectionBySafetyNet) { return 0xFFFF0000; } } Loading Loading @@ -335,7 +335,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer, int stripWidth) { if (suggestions.isPunctuationSuggestions()) { if (suggestions.mIsPunctuationSuggestions) { layoutPunctuationSuggestions(suggestions, stripView); return; } Loading