Merge "Stop auto-correcting non-whitelisted one-char strings" into jb-mr1-dev
diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index 01ba300..f425e36 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -73,11 +73,11 @@
return maxFreq;
}
- // Returns true if this isn't in any dictionary.
- public static boolean isNotAWord(
+ // Returns true if this is in any of the dictionaries.
+ public static boolean isInTheDictionary(
final ConcurrentHashMap<String, Dictionary> dictionaries,
final CharSequence word, final boolean ignoreCase) {
- return !isValidWord(dictionaries, word, ignoreCase);
+ return isValidWord(dictionaries, word, ignoreCase);
}
public static boolean suggestionExceedsAutoCorrectionThreshold(SuggestedWordInfo suggestion,
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 51ed096..f922bc9 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -214,10 +214,12 @@
whitelistedWord = suggestionsSet.first().mWord;
}
+ // The word can be auto-corrected if it has a whitelist entry that is not itself,
+ // or if it's a 2+ characters non-word (i.e. it's not in the dictionary).
final boolean allowsToBeAutoCorrected = (null != whitelistedWord
&& !whitelistedWord.equals(consideredWord))
- || AutoCorrection.isNotAWord(mDictionaries, consideredWord,
- wordComposer.isFirstCharCapitalized());
+ || (consideredWord.length() > 1 && !AutoCorrection.isInTheDictionary(mDictionaries,
+ consideredWord, wordComposer.isFirstCharCapitalized()));
final boolean hasAutoCorrection;
// TODO: using isCorrectionEnabled here is not very good. It's probably useless, because