Loading java/src/com/android/inputmethod/latin/LatinIME.java +7 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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 { Loading Loading @@ -1909,7 +1910,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 }, Loading @@ -1920,7 +1922,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); Loading java/src/com/android/inputmethod/latin/LatinImeLogger.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<CharSequence> suggestions) { } public static void logOnAutoCorrection(String before, String after, int separatorCode) { Loading java/src/com/android/inputmethod/latin/SuggestedWords.java +29 −40 Original line number Diff line number Diff line Loading @@ -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<CharSequence> mWords; public 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; SuggestedWords(List<CharSequence> words, boolean typedWordValid, private SuggestedWords(List<CharSequence> words, boolean typedWordValid, boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions, boolean shouldBlockAutoCorrectionBySafetyNet, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { mWords = words; Loading @@ -48,8 +45,8 @@ public class SuggestedWords { mTypedWordValid = typedWordValid; mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate; mIsPunctuationSuggestions = isPunctuationSuggestions; mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet; mSuggestedWordInfoList = suggestedWordInfoList; mShouldBlockAutoCorrectionBySafetyNet = false; } public int size() { Loading @@ -65,23 +62,24 @@ public class SuggestedWords { } public boolean hasAutoCorrectionWord() { return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid; return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !mShouldBlockAutoCorrectionBySafetyNet; public boolean isPunctuationSuggestions() { return mIsPunctuationSuggestions; } @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 void setShouldBlockAutoCorrectionBySatefyNet() { mShouldBlockAutoCorrectionBySafetyNet = true; } public boolean shouldBlockAutoCorrectionBySafetyNet() { return mShouldBlockAutoCorrectionBySafetyNet; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !shouldBlockAutoCorrectionBySafetyNet(); } public static class Builder { Loading @@ -89,7 +87,6 @@ public class SuggestedWords { private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mIsPunctuationSuggestions; private boolean mShouldBlockAutoCorrectionBySafetyNet; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); Loading Loading @@ -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, Loading @@ -184,8 +176,7 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion, mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet, mSuggestedWordInfoList); mIsPunctuationSuggestions, mSuggestedWordInfoList); } public int size() { Loading @@ -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(); } } 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.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; 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.mShouldBlockAutoCorrectionBySafetyNet) { && suggestions.shouldBlockAutoCorrectionBySafetyNet()) { 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.mIsPunctuationSuggestions) { if (suggestions.isPunctuationSuggestions()) { layoutPunctuationSuggestions(suggestions, stripView); return; } Loading Loading
java/src/com/android/inputmethod/latin/LatinIME.java +7 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading @@ -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 { Loading Loading @@ -1909,7 +1910,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 }, Loading @@ -1920,7 +1922,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); Loading
java/src/com/android/inputmethod/latin/LatinImeLogger.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<CharSequence> suggestions) { } public static void logOnAutoCorrection(String before, String after, int separatorCode) { Loading
java/src/com/android/inputmethod/latin/SuggestedWords.java +29 −40 Original line number Diff line number Diff line Loading @@ -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<CharSequence> mWords; public 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; SuggestedWords(List<CharSequence> words, boolean typedWordValid, private SuggestedWords(List<CharSequence> words, boolean typedWordValid, boolean hasAutoCorrectionCandidate, boolean isPunctuationSuggestions, boolean shouldBlockAutoCorrectionBySafetyNet, List<SuggestedWordInfo> suggestedWordInfoList) { if (words != null) { mWords = words; Loading @@ -48,8 +45,8 @@ public class SuggestedWords { mTypedWordValid = typedWordValid; mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate; mIsPunctuationSuggestions = isPunctuationSuggestions; mShouldBlockAutoCorrectionBySafetyNet = shouldBlockAutoCorrectionBySafetyNet; mSuggestedWordInfoList = suggestedWordInfoList; mShouldBlockAutoCorrectionBySafetyNet = false; } public int size() { Loading @@ -65,23 +62,24 @@ public class SuggestedWords { } public boolean hasAutoCorrectionWord() { return mHasAutoCorrectionCandidate && size() > 1 && mTypedWordValid; return mHasAutoCorrectionCandidate && size() > 1 && !mTypedWordValid; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !mShouldBlockAutoCorrectionBySafetyNet; public boolean isPunctuationSuggestions() { return mIsPunctuationSuggestions; } @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 void setShouldBlockAutoCorrectionBySatefyNet() { mShouldBlockAutoCorrectionBySafetyNet = true; } public boolean shouldBlockAutoCorrectionBySafetyNet() { return mShouldBlockAutoCorrectionBySafetyNet; } public boolean willAutoCorrect() { return !mTypedWordValid && mHasAutoCorrectionCandidate && !shouldBlockAutoCorrectionBySafetyNet(); } public static class Builder { Loading @@ -89,7 +87,6 @@ public class SuggestedWords { private boolean mTypedWordValid; private boolean mHasMinimalSuggestion; private boolean mIsPunctuationSuggestions; private boolean mShouldBlockAutoCorrectionBySafetyNet; private List<SuggestedWordInfo> mSuggestedWordInfoList = new ArrayList<SuggestedWordInfo>(); Loading Loading @@ -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, Loading @@ -184,8 +176,7 @@ public class SuggestedWords { public SuggestedWords build() { return new SuggestedWords(mWords, mTypedWordValid, mHasMinimalSuggestion, mIsPunctuationSuggestions, mShouldBlockAutoCorrectionBySafetyNet, mSuggestedWordInfoList); mIsPunctuationSuggestions, mSuggestedWordInfoList); } public int size() { Loading @@ -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(); } } 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.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; 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.mShouldBlockAutoCorrectionBySafetyNet) { && suggestions.shouldBlockAutoCorrectionBySafetyNet()) { 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.mIsPunctuationSuggestions) { if (suggestions.isPunctuationSuggestions()) { layoutPunctuationSuggestions(suggestions, stripView); return; } Loading