Merge "Suggestion strip honors RTL layout"
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index fb95172..8a8a45f 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -44,6 +44,10 @@
 public class DictionaryFacilitatorForSuggest {
     public static final String TAG = DictionaryFacilitatorForSuggest.class.getSimpleName();
 
+    // HACK: This threshold is being used when adding a capitalized entry in the User History
+    // dictionary.
+    private static final int CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT = 140;
+
     private final Context mContext;
     public final Locale mLocale;
 
@@ -389,7 +393,26 @@
         if (maxFreq == 0) {
             return;
         }
-        final String secondWord = wasAutoCapitalized ? suggestion.toLowerCase(mLocale) : suggestion;
+        final String suggestionLowerCase = suggestion.toLowerCase(mLocale);
+        final String secondWord;
+        if (wasAutoCapitalized) {
+            secondWord = suggestionLowerCase;
+        } else {
+            // HACK: We'd like to avoid adding the capitalized form of common words to the User
+            // History dictionary in order to avoid suggesting them until the dictionary
+            // consolidation is done.
+            // TODO: Remove this hack when ready.
+            final int lowerCasefreqInMainDict = mMainDictionary != null ?
+                    mMainDictionary.getFrequency(suggestionLowerCase) :
+                            Dictionary.NOT_A_PROBABILITY;
+            if (maxFreq < lowerCasefreqInMainDict
+                    && lowerCasefreqInMainDict >= CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT) {
+                // Use lower cased word as the word can be a distracter of the popular word.
+                secondWord = suggestionLowerCase;
+            } else {
+                secondWord = suggestion;
+            }
+        }
         // We demote unrecognized words (frequency < 0, below) by specifying them as "invalid".
         // We don't add words with 0-frequency (assuming they would be profanity etc.).
         final boolean isValid = maxFreq > 0;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c2483eb..944fa73 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1011,8 +1011,7 @@
                 false /* isObsoleteSuggestions */,
                 false /* isPrediction */);
         // When in fullscreen mode, show completions generated by the application
-        setSuggestedWords(suggestedWords);
-        setSuggestionStripShown(true);
+        setSuggestedWords(suggestedWords, true /* shouldShow */);
         if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
             ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
         }
@@ -1035,10 +1034,6 @@
         }
     }
 
-    private void setSuggestionStripShown(final boolean shown) {
-        setSuggestionStripShownInternal(shown, /* needsInputViewShown */true);
-    }
-
     private int getAdjustedBackingViewHeight() {
         final int currentHeight = mKeyPreviewBackingView.getHeight();
         if (currentHeight > 0) {
@@ -1330,7 +1325,7 @@
     }
 
     // TODO[IL]: Define a clear interface for this
-    public void setSuggestedWords(final SuggestedWords words) {
+    public void setSuggestedWords(final SuggestedWords words, final boolean shouldShow) {
         if (mSuggestionStripView != null) {
             mSuggestionStripView.setSuggestions(
                     words, SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype()));
@@ -1350,6 +1345,7 @@
             // the practice.
             mInputLogic.mConnection.setComposingText(textWithUnderline, 1);
         }
+        setSuggestionStripShownInternal(shouldShow, true /* needsInputViewShown */);
     }
 
     // TODO[IL]: Move this out of LatinIME.
@@ -1438,8 +1434,7 @@
         if (SuggestedWords.EMPTY != suggestedWords) {
             mInputLogic.mWordComposer.setAutoCorrection(autoCorrection);
         }
-        setSuggestedWords(suggestedWords);
-        setSuggestionStripShown(isSuggestionsStripVisible());
+        setSuggestedWords(suggestedWords, isSuggestionsStripVisible());
         // Cache the auto-correction in accessibility code so we can speak it if the user
         // touches a key that will insert it.
         AccessibilityUtils.getInstance().setAutoCorrection(suggestedWords, typedWord);
@@ -1552,11 +1547,11 @@
     public void setNeutralSuggestionStrip() {
         final SettingsValues currentSettings = mSettings.getCurrent();
         if (currentSettings.mBigramPredictionEnabled) {
-            setSuggestedWords(SuggestedWords.EMPTY);
+            setSuggestedWords(SuggestedWords.EMPTY, isSuggestionsStripVisible());
         } else {
-            setSuggestedWords(currentSettings.mSpacingAndPunctuations.mSuggestPuncList);
+            setSuggestedWords(currentSettings.mSpacingAndPunctuations.mSuggestPuncList,
+                    isSuggestionsStripVisible());
         }
-        setSuggestionStripShown(isSuggestionsStripVisible());
     }
 
     public void unsetIsAutoCorrectionIndicatorOnAndCallShowSuggestionStrip(