Merge "Use HashSet to hold keys in Keyboard"
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 6570f7a..9f5931d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -931,8 +931,7 @@
                     false /* typedWordValid */,
                     false /* hasAutoCorrectionCandidate */,
                     false /* allowsToBeAutoCorrected */,
-                    false /* isPunctuationSuggestions */,
-                    false /* shouldBlockAutoCorrectionBySafetyNet */);
+                    false /* isPunctuationSuggestions */);
             // When in fullscreen mode, show completions generated by the application
             final boolean isAutoCorrection = false;
             setSuggestions(suggestedWords, isAutoCorrection);
@@ -1794,8 +1793,7 @@
                             false /* typedWordValid */,
                             false /* hasAutoCorrectionCandidate */,
                             false /* allowsToBeAutoCorrected */,
-                            false /* isPunctuationSuggestions */,
-                            false /* shouldBlockAutoCorrectionBySafetyNet */);
+                            false /* isPunctuationSuggestions */);
             showSuggestions(obsoleteSuggestedWords, typedWord);
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index d88047c..d12b9c4 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -187,8 +187,7 @@
                 false /* typedWordValid */,
                 false /* hasAutoCorrectionCandidate */,
                 false /* allowsToBeAutoCorrected */,
-                true /* isPunctuationSuggestions */,
-                false /* shouldBlockAutoCorrectionBySafetyNet */);
+                true /* isPunctuationSuggestions */);
     }
 
     private static SuggestedWords createSuggestPuncOutputTextList(final String[] puncs) {
@@ -209,8 +208,7 @@
                 false /* typedWordValid */,
                 false /* hasAutoCorrectionCandidate */,
                 false /* allowsToBeAutoCorrected */,
-                true /* isPunctuationSuggestions */,
-                false /* shouldBlockAutoCorrectionBySafetyNet */);
+                true /* isPunctuationSuggestions */);
     }
 
     private static String createWordSeparators(final String weakSpaceStrippers,
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 7ac00a3..3089625 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -273,8 +273,7 @@
                 false /* typedWordValid */,
                 false /* hasAutoCorrectionCandidate */,
                 false /* allowsToBeAutoCorrected */,
-                false /* isPunctuationSuggestions */,
-                false /* shouldBlockAutoCorrectionBySafetyNet */);
+                false /* isPunctuationSuggestions */);
     }
 
     // TODO: cleanup dictionaries looking up and suggestions building with SuggestedWords.Builder
@@ -344,21 +343,22 @@
             }
 
         } else if (wordComposer.size() > 1) {
+            final WordComposer wordComposerForLookup;
+            if (mTrailingSingleQuotesCount > 0) {
+                wordComposerForLookup = new WordComposer(wordComposer);
+                for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
+                    wordComposerForLookup.deleteLast();
+                }
+            } else {
+                wordComposerForLookup = wordComposer;
+            }
             // At second character typed, search the unigrams (scores being affected by bigrams)
             for (final String key : mUnigramDictionaries.keySet()) {
                 // Skip UserUnigramDictionary and WhitelistDictionary to lookup
                 if (key.equals(DICT_KEY_USER_UNIGRAM) || key.equals(DICT_KEY_WHITELIST))
                     continue;
                 final Dictionary dictionary = mUnigramDictionaries.get(key);
-                if (mTrailingSingleQuotesCount > 0) {
-                    final WordComposer tmpWordComposer = new WordComposer(wordComposer);
-                    for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
-                        tmpWordComposer.deleteLast();
-                    }
-                    dictionary.getWords(tmpWordComposer, this, proximityInfo);
-                } else {
-                    dictionary.getWords(wordComposer, this, proximityInfo);
-                }
+                dictionary.getWords(wordComposerForLookup, this, proximityInfo);
             }
         }
 
@@ -392,41 +392,36 @@
         mSuggestions.add(0, typedWord);
         StringUtils.removeDupes(mSuggestions);
 
-        final ArrayList<SuggestedWords.SuggestedWordInfo> scoreInfoList;
+        final ArrayList<SuggestedWords.SuggestedWordInfo> suggestionsList;
         if (DBG) {
             // TODO: this doesn't take into account the fact that removing dupes from mSuggestions
             // may have made mScores[] and mSuggestions out of sync.
             final CharSequence autoCorrectionSuggestion = mSuggestions.get(0);
-            final int autoCorrectionSuggestionScore = mScores[0];
             double normalizedScore = BinaryDictionary.calcNormalizedScore(
-                    typedWord, autoCorrectionSuggestion.toString(),
-                    autoCorrectionSuggestionScore);
-            scoreInfoList = new ArrayList<SuggestedWords.SuggestedWordInfo>();
-            scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(autoCorrectionSuggestion, "+",
+                    typedWord, autoCorrectionSuggestion.toString(), mScores[0]);
+            suggestionsList = new ArrayList<SuggestedWords.SuggestedWordInfo>();
+            suggestionsList.add(new SuggestedWords.SuggestedWordInfo(autoCorrectionSuggestion, "+",
                     false));
             final int suggestionsSize = mSuggestions.size();
             // Note: i here is the index in mScores[], but the index in mSuggestions is one more
             // than i because we added the typed word to mSuggestions without touching mScores.
             for (int i = 0; i < mScores.length && i < suggestionsSize - 1; ++i) {
+                final String scoreInfoString;
                 if (normalizedScore > 0) {
-                    final String scoreThreshold = String.format("%d (%4.2f)", mScores[i],
-                            normalizedScore);
-                    scoreInfoList.add(
-                            new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i + 1),
-                                    scoreThreshold, false));
+                    scoreInfoString = String.format("%d (%4.2f)", mScores[i], normalizedScore);
                     normalizedScore = 0.0;
                 } else {
-                    final String score = Integer.toString(mScores[i]);
-                    scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i + 1),
-                            score, false));
+                    scoreInfoString = Integer.toString(mScores[i]);
                 }
+                suggestionsList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i + 1),
+                        scoreInfoString, false));
             }
             for (int i = mScores.length; i < suggestionsSize; ++i) {
-                scoreInfoList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i),
+                suggestionsList.add(new SuggestedWords.SuggestedWordInfo(mSuggestions.get(i),
                         "--", false));
             }
         } else {
-            scoreInfoList = SuggestedWords.getFromCharSequenceList(mSuggestions);
+            suggestionsList = SuggestedWords.getFromCharSequenceList(mSuggestions);
         }
 
         boolean autoCorrectionAvailable = hasAutoCorrection;
@@ -437,19 +432,19 @@
         // Don't auto-correct words with multiple capital letter
         autoCorrectionAvailable &= !wordComposer.isMostlyCaps();
         final boolean shouldBlockAutoCorrectionBySatefyNet;
-        if (allowsToBeAutoCorrected && scoreInfoList.size() > 1 && mAutoCorrectionThreshold > 0
+        if (allowsToBeAutoCorrected && suggestionsList.size() > 1 && mAutoCorrectionThreshold > 0
                 && Suggest.shouldBlockAutoCorrectionBySafetyNet(typedWord,
-                        scoreInfoList.get(1).mWord)) {
+                        suggestionsList.get(1).mWord)) {
             shouldBlockAutoCorrectionBySatefyNet = true;
         } else {
             shouldBlockAutoCorrectionBySatefyNet = false;
         }
-        return new SuggestedWords(scoreInfoList,
+        return new SuggestedWords(suggestionsList,
                 !allowsToBeAutoCorrected /* typedWordValid */,
-                autoCorrectionAvailable /* hasAutoCorrectionCandidate */,
+                autoCorrectionAvailable & !shouldBlockAutoCorrectionBySatefyNet
+                        /* hasAutoCorrectionCandidate */,
                 allowsToBeAutoCorrected /* allowsToBeAutoCorrected */,
-                false /* isPunctuationSuggestions */,
-                shouldBlockAutoCorrectionBySatefyNet);
+                false /* isPunctuationSuggestions */);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 7ce1049..201e0f4 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -25,7 +25,7 @@
 
 public class SuggestedWords {
     public static final SuggestedWords EMPTY = new SuggestedWords(
-            Collections.<SuggestedWordInfo>emptyList(), false, false, false, false, false);
+            Collections.<SuggestedWordInfo>emptyList(), false, false, false, false);
 
     public final boolean mTypedWordValid;
     public final boolean mHasAutoCorrectionCandidate;
@@ -37,12 +37,10 @@
             final boolean typedWordValid,
             final boolean hasAutoCorrectionCandidate,
             final boolean allowsToBeAutoCorrected,
-            final boolean isPunctuationSuggestions,
-            final boolean shouldBlockAutoCorrectionBySafetyNet) {
+            final boolean isPunctuationSuggestions) {
         mSuggestedWordInfoList = suggestedWordInfoList;
         mTypedWordValid = typedWordValid;
-        mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate
-                && !shouldBlockAutoCorrectionBySafetyNet;
+        mHasAutoCorrectionCandidate = hasAutoCorrectionCandidate;
         mAllowsToBeAutoCorrected = allowsToBeAutoCorrected;
         mIsPunctuationSuggestions = isPunctuationSuggestions;
     }