Merge "Import translations. DO NOT MERGE"
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index 01c17f2..726b3d1 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -20,9 +20,13 @@
 import android.util.Log;
 import android.view.inputmethod.EditorInfo;
 
+import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.InputTypeUtils;
 import com.android.inputmethod.latin.utils.StringUtils;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+
 /**
  * Class to hold attributes of the input field.
  */
@@ -62,49 +66,43 @@
             mInputTypeNoAutoCorrect = false;
             mApplicationSpecifiedCompletionOn = false;
             mShouldInsertSpacesAutomatically = false;
-        } else {
-            final int variation = inputType & InputType.TYPE_MASK_VARIATION;
-            final boolean flagNoSuggestions =
-                    0 != (inputType & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
-            final boolean flagMultiLine =
-                    0 != (inputType & InputType.TYPE_TEXT_FLAG_MULTI_LINE);
-            final boolean flagAutoCorrect =
-                    0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
-            final boolean flagAutoComplete =
-                    0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
-
-            mIsPasswordField = InputTypeUtils.isPasswordInputType(inputType)
-                    || InputTypeUtils.isVisiblePasswordInputType(inputType);
-            // TODO: Have a helper method in InputTypeUtils
-            // Make sure that passwords are not displayed in {@link SuggestionStripView}.
-            if (mIsPasswordField
-                    || InputTypeUtils.isEmailVariation(variation)
-                    || InputType.TYPE_TEXT_VARIATION_URI == variation
-                    || InputType.TYPE_TEXT_VARIATION_FILTER == variation
-                    || flagNoSuggestions
-                    || flagAutoComplete) {
-                mIsSettingsSuggestionStripOn = false;
-            } else {
-                mIsSettingsSuggestionStripOn = true;
-            }
-
-            mShouldInsertSpacesAutomatically = InputTypeUtils.isAutoSpaceFriendlyType(inputType);
-
-            // If it's a browser edit field and auto correct is not ON explicitly, then
-            // disable auto correction, but keep suggestions on.
-            // If NO_SUGGESTIONS is set, don't do prediction.
-            // If it's not multiline and the autoCorrect flag is not set, then don't correct
-            if ((variation == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT
-                    && !flagAutoCorrect)
-                    || flagNoSuggestions
-                    || (!flagAutoCorrect && !flagMultiLine)) {
-                mInputTypeNoAutoCorrect = true;
-            } else {
-                mInputTypeNoAutoCorrect = false;
-            }
-
-            mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode;
+            return;
         }
+        // inputClass == InputType.TYPE_CLASS_TEXT
+        final int variation = inputType & InputType.TYPE_MASK_VARIATION;
+        final boolean flagNoSuggestions =
+                0 != (inputType & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
+        final boolean flagMultiLine =
+                0 != (inputType & InputType.TYPE_TEXT_FLAG_MULTI_LINE);
+        final boolean flagAutoCorrect =
+                0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
+        final boolean flagAutoComplete =
+                0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
+
+        mIsPasswordField = InputTypeUtils.isPasswordInputType(inputType)
+                || InputTypeUtils.isVisiblePasswordInputType(inputType);
+        // TODO: Have a helper method in InputTypeUtils
+        // Make sure that passwords are not displayed in {@link SuggestionStripView}.
+        final boolean noSuggestionStrip = mIsPasswordField
+                || InputTypeUtils.isEmailVariation(variation)
+                || InputType.TYPE_TEXT_VARIATION_URI == variation
+                || InputType.TYPE_TEXT_VARIATION_FILTER == variation
+                || flagNoSuggestions
+                || flagAutoComplete;
+        mIsSettingsSuggestionStripOn = !noSuggestionStrip;
+
+        mShouldInsertSpacesAutomatically = InputTypeUtils.isAutoSpaceFriendlyType(inputType);
+
+        // If it's a browser edit field and auto correct is not ON explicitly, then
+        // disable auto correction, but keep suggestions on.
+        // If NO_SUGGESTIONS is set, don't do prediction.
+        // If it's not multiline and the autoCorrect flag is not set, then don't correct
+        mInputTypeNoAutoCorrect =
+                (variation == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT && !flagAutoCorrect)
+                || flagNoSuggestions
+                || (!flagAutoCorrect && !flagMultiLine);
+
+        mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode;
     }
 
     public boolean isTypeNull() {
@@ -117,96 +115,142 @@
 
     @SuppressWarnings("unused")
     private void dumpFlags(final int inputType) {
-        Log.i(TAG, "Input class:");
         final int inputClass = inputType & InputType.TYPE_MASK_CLASS;
-        if (inputClass == InputType.TYPE_CLASS_TEXT)
-            Log.i(TAG, "  TYPE_CLASS_TEXT");
-        if (inputClass == InputType.TYPE_CLASS_PHONE)
-            Log.i(TAG, "  TYPE_CLASS_PHONE");
-        if (inputClass == InputType.TYPE_CLASS_NUMBER)
-            Log.i(TAG, "  TYPE_CLASS_NUMBER");
-        if (inputClass == InputType.TYPE_CLASS_DATETIME)
-            Log.i(TAG, "  TYPE_CLASS_DATETIME");
-        Log.i(TAG, "Variation:");
-        switch (InputType.TYPE_MASK_VARIATION & inputType) {
-            case InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_EMAIL_ADDRESS");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_EMAIL_SUBJECT");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_FILTER:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_FILTER");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_LONG_MESSAGE");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_NORMAL:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_NORMAL");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_PASSWORD:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_PASSWORD");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_PERSON_NAME:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_PERSON_NAME");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_PHONETIC:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_PHONETIC");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_POSTAL_ADDRESS");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_SHORT_MESSAGE");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_URI:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_URI");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_VISIBLE_PASSWORD");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_WEB_EDIT_TEXT");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS");
-                break;
-            case InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD:
-                Log.i(TAG, "  TYPE_TEXT_VARIATION_WEB_PASSWORD");
-                break;
-            default:
-                Log.i(TAG, "  Unknown variation");
-                break;
+        final String inputClassString = toInputClassString(inputClass);
+        final String variationString = toVariationString(
+                inputClass, inputType & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+        final String flagsString = toFlagsString(inputType & InputType.TYPE_MASK_FLAGS);
+        Log.i(TAG, "Input class: " + inputClassString);
+        Log.i(TAG, "Variation: " + variationString);
+        Log.i(TAG, "Flags: " + flagsString);
+    }
+
+    private static String toInputClassString(final int inputClass) {
+        switch (inputClass) {
+        case InputType.TYPE_CLASS_TEXT:
+            return "TYPE_CLASS_TEXT";
+        case InputType.TYPE_CLASS_PHONE:
+            return "TYPE_CLASS_PHONE";
+        case InputType.TYPE_CLASS_NUMBER:
+            return "TYPE_CLASS_NUMBER";
+        case InputType.TYPE_CLASS_DATETIME:
+            return "TYPE_CLASS_DATETIME";
+        default:
+            return String.format("unknownInputClass<0x%08x>", inputClass);
         }
-        Log.i(TAG, "Flags:");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_NO_SUGGESTIONS");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_MULTI_LINE))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_MULTI_LINE");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_IME_MULTI_LINE");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_CAP_WORDS))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_CAP_WORDS");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_CAP_SENTENCES))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_CAP_SENTENCES");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_CAP_CHARACTERS");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_CORRECT))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_AUTO_CORRECT");
-        if (0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE))
-            Log.i(TAG, "  TYPE_TEXT_FLAG_AUTO_COMPLETE");
+    }
+
+    private static String toVariationString(final int inputClass, final int variation) {
+        switch (inputClass) {
+        case InputType.TYPE_CLASS_TEXT:
+            return toTextVariationString(variation);
+        case InputType.TYPE_CLASS_NUMBER:
+            return toNumberVariationString(variation);
+        case InputType.TYPE_CLASS_DATETIME:
+            return toDatetimeVariationString(variation);
+        default:
+            return "";
+        }
+    }
+
+    private static String toTextVariationString(final int variation) {
+        switch (variation) {
+        case InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+            return " TYPE_TEXT_VARIATION_EMAIL_ADDRESS";
+        case InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT:
+            return "TYPE_TEXT_VARIATION_EMAIL_SUBJECT";
+        case InputType.TYPE_TEXT_VARIATION_FILTER:
+            return "TYPE_TEXT_VARIATION_FILTER";
+        case InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE:
+            return "TYPE_TEXT_VARIATION_LONG_MESSAGE";
+        case InputType.TYPE_TEXT_VARIATION_NORMAL:
+            return "TYPE_TEXT_VARIATION_NORMAL";
+        case InputType.TYPE_TEXT_VARIATION_PASSWORD:
+            return "TYPE_TEXT_VARIATION_PASSWORD";
+        case InputType.TYPE_TEXT_VARIATION_PERSON_NAME:
+            return "TYPE_TEXT_VARIATION_PERSON_NAME";
+        case InputType.TYPE_TEXT_VARIATION_PHONETIC:
+            return "TYPE_TEXT_VARIATION_PHONETIC";
+        case InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS:
+            return "TYPE_TEXT_VARIATION_POSTAL_ADDRESS";
+        case InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE:
+            return "TYPE_TEXT_VARIATION_SHORT_MESSAGE";
+        case InputType.TYPE_TEXT_VARIATION_URI:
+            return "TYPE_TEXT_VARIATION_URI";
+        case InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD:
+            return "TYPE_TEXT_VARIATION_VISIBLE_PASSWORD";
+        case InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT:
+            return "TYPE_TEXT_VARIATION_WEB_EDIT_TEXT";
+        case InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS:
+            return "TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS";
+        case InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD:
+            return "TYPE_TEXT_VARIATION_WEB_PASSWORD";
+        default:
+            return String.format("unknownVariation<0x%08x>", variation);
+        }
+    }
+
+    private static String toNumberVariationString(final int variation) {
+        switch (variation) {
+        case InputType.TYPE_NUMBER_VARIATION_NORMAL:
+            return "TYPE_NUMBER_VARIATION_NORMAL";
+        case InputType.TYPE_NUMBER_VARIATION_PASSWORD:
+            return "TYPE_NUMBER_VARIATION_PASSWORD";
+        default:
+            return String.format("unknownVariation<0x%08x>", variation);
+        }
+    }
+
+    private static String toDatetimeVariationString(final int variation) {
+        switch (variation) {
+        case InputType.TYPE_DATETIME_VARIATION_NORMAL:
+            return "TYPE_DATETIME_VARIATION_NORMAL";
+        case InputType.TYPE_DATETIME_VARIATION_DATE:
+            return "TYPE_DATETIME_VARIATION_DATE";
+        case InputType.TYPE_DATETIME_VARIATION_TIME:
+            return "TYPE_DATETIME_VARIATION_TIME";
+        default:
+            return String.format("unknownVariation<0x%08x>", variation);
+        }
+    }
+
+    private static String toFlagsString(final int flags) {
+        final ArrayList<String> flagsArray = CollectionUtils.newArrayList();
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS))
+            flagsArray.add("TYPE_TEXT_FLAG_NO_SUGGESTIONS");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_MULTI_LINE))
+            flagsArray.add("TYPE_TEXT_FLAG_MULTI_LINE");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE))
+            flagsArray.add("TYPE_TEXT_FLAG_IME_MULTI_LINE");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_CAP_WORDS))
+            flagsArray.add("TYPE_TEXT_FLAG_CAP_WORDS");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_CAP_SENTENCES))
+            flagsArray.add("TYPE_TEXT_FLAG_CAP_SENTENCES");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS))
+            flagsArray.add("TYPE_TEXT_FLAG_CAP_CHARACTERS");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_AUTO_CORRECT))
+            flagsArray.add("TYPE_TEXT_FLAG_AUTO_CORRECT");
+        if (0 != (flags & InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE))
+            flagsArray.add("TYPE_TEXT_FLAG_AUTO_COMPLETE");
+        return flagsArray.isEmpty() ? "" : Arrays.toString(flagsArray.toArray());
     }
 
     // Pretty print
     @Override
     public String toString() {
-        return "\n mInputTypeNoAutoCorrect = " + mInputTypeNoAutoCorrect
-                + "\n mIsSettingsSuggestionStripOn = " + mIsSettingsSuggestionStripOn
-                + "\n mApplicationSpecifiedCompletionOn = " + mApplicationSpecifiedCompletionOn;
+        return String.format(
+                "%s: inputType=0x%08x%s%s%s%s%s targetApp=%s\n", getClass().getSimpleName(),
+                mInputType,
+                (mInputTypeNoAutoCorrect ? " noAutoCorrect" : ""),
+                (mIsPasswordField ? " password" : ""),
+                (mIsSettingsSuggestionStripOn ? " suggestionStrip" : ""),
+                (mApplicationSpecifiedCompletionOn ? " appSpecified" : ""),
+                (mShouldInsertSpacesAutomatically ? " insertSpaces" : ""),
+                mTargetApplicationPackageName);
     }
 
-    public static boolean inPrivateImeOptions(String packageName, String key,
-            EditorInfo editorInfo) {
+    public static boolean inPrivateImeOptions(final String packageName, final String key,
+            final EditorInfo editorInfo) {
         if (editorInfo == null) return false;
         final String findingKey = (packageName != null) ? packageName + "." + key : key;
         return StringUtils.containsInCommaSplittableText(findingKey, editorInfo.privateImeOptions);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 743118e..d922ef6 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -781,11 +781,6 @@
         if (null != suggest && null != currentLocale && !currentLocale.equals(suggest.mLocale)) {
             initSuggest();
         }
-        if (mSuggestionStripView != null) {
-            // This will set the punctuation suggestions if next word suggestion is off;
-            // otherwise it will clear the suggestion strip.
-            setNeutralSuggestionStrip();
-        }
 
         // Sometimes, while rotating, for some reason the framework tells the app we are not
         // connected to it and that means we can't refresh the cache. In this case, schedule a
@@ -834,8 +829,9 @@
             // Space state must be updated before calling updateShiftState
             switcher.updateShiftState();
         }
-        setSuggestionStripShownInternal(
-                isSuggestionsStripVisible(), /* needsInputViewShown */ false);
+        // This will set the punctuation suggestions if next word suggestion is off;
+        // otherwise it will clear the suggestion strip.
+        setNeutralSuggestionStripInternal(false /* needsInputViewShown */);
 
         mHandler.cancelUpdateSuggestionStrip();
         mHandler.cancelDoubleSpacePeriodTimer();
@@ -983,7 +979,9 @@
                 }
             }
         }
-        if (!mSettings.getCurrent().isApplicationSpecifiedCompletionsOn()) return;
+        if (!mSettings.getCurrent().isApplicationSpecifiedCompletionsOn()) {
+            return;
+        }
         if (applicationSpecifiedCompletions == null) {
             setNeutralSuggestionStrip();
             if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
@@ -997,27 +995,25 @@
         final ArrayList<SuggestedWords.SuggestedWordInfo> applicationSuggestedWords =
                 SuggestedWords.getFromApplicationSpecifiedCompletions(
                         applicationSpecifiedCompletions);
-        final SuggestedWords suggestedWords = new SuggestedWords(
-                applicationSuggestedWords, null /* rawSuggestions */,
-                false /* typedWordValid */,
-                false /* willAutoCorrect */,
-                false /* isObsoleteSuggestions */,
-                false /* isPrediction */);
-        // When in fullscreen mode, show completions generated by the application
-        setSuggestedWords(suggestedWords, true /* shouldShow */);
+        final SuggestedWords suggestedWords = new SuggestedWords(applicationSuggestedWords,
+                null /* rawSuggestions */, false /* typedWordValid */, false /* willAutoCorrect */,
+                false /* isObsoleteSuggestions */, false /* isPrediction */);
+        // When in fullscreen mode, show completions generated by the application forcibly
+        setSuggestedWords(suggestedWords, true /* isSuggestionStripVisible */,
+                true /* needsInputViewShown */);
         if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
             ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
         }
     }
 
-    private void setSuggestionStripShownInternal(final boolean shown,
+    private void setSuggestionStripShownInternal(final boolean isSuggestionStripVisible,
             final boolean needsInputViewShown) {
         // TODO: Modify this if we support suggestions with hard keyboard
         if (!onEvaluateInputViewShown() || null == mSuggestionStripView) {
             return;
         }
         final boolean inputViewShown = mKeyboardSwitcher.isShowingMainKeyboardOrEmojiPalettes();
-        final boolean shouldShowSuggestions = shown
+        final boolean shouldShowSuggestions = isSuggestionStripVisible
                 && (needsInputViewShown ? inputViewShown : true);
         if (shouldShowSuggestions) {
             mSuggestionStripView.setVisibility(View.VISIBLE);
@@ -1321,20 +1317,27 @@
     }
 
     // TODO[IL]: Define a clear interface for this
-    public boolean isSuggestionsStripVisible() {
+    public boolean isSuggestionStripVisible() {
         final SettingsValues currentSettings = mSettings.getCurrent();
-        if (mSuggestionStripView == null)
+        if (mSuggestionStripView == null) {
             return false;
-        if (mSuggestionStripView.isShowingAddToDictionaryHint())
+        }
+        if (mSuggestionStripView.isShowingAddToDictionaryHint()) {
             return true;
-        if (null == currentSettings)
+        }
+        if (null == currentSettings) {
             return false;
-        if (ImportantNoticeUtils.shouldShowImportantNotice(this, currentSettings.mInputAttributes))
+        }
+        if (ImportantNoticeUtils.shouldShowImportantNotice(this,
+                currentSettings.mInputAttributes)) {
             return true;
-        if (!currentSettings.isSuggestionStripVisible())
+        }
+        if (!currentSettings.isSuggestionStripVisible()) {
             return false;
-        if (currentSettings.isApplicationSpecifiedCompletionsOn())
+        }
+        if (currentSettings.isApplicationSpecifiedCompletionsOn()) {
             return true;
+        }
         return currentSettings.isSuggestionsRequested();
     }
 
@@ -1356,26 +1359,28 @@
     }
 
     // TODO[IL]: Define a clear interface for this
-    public void setSuggestedWords(final SuggestedWords suggestedWords, final boolean shouldShow) {
+    public void setSuggestedWords(final SuggestedWords suggestedWords,
+            final boolean isSuggestionStripVisible, final boolean needsInputViewShown) {
         mInputLogic.setSuggestedWords(suggestedWords);
-        if (mSuggestionStripView != null) {
-            final SettingsValues currentSettings = mSettings.getCurrent();
-            final boolean showSuggestions;
-            if (SuggestedWords.EMPTY == suggestedWords
-                    || suggestedWords.isPunctuationSuggestions()
-                    || !currentSettings.isSuggestionsRequested()) {
-                showSuggestions = !mSuggestionStripView.maybeShowImportantNoticeTitle(
-                        currentSettings.mInputAttributes);
-            } else {
-                showSuggestions = true;
-            }
-            if (showSuggestions) {
-                mSuggestionStripView.setSuggestions(suggestedWords,
-                        SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype()));
-            }
-            mKeyboardSwitcher.onAutoCorrectionStateChanged(suggestedWords.mWillAutoCorrect);
-            setSuggestionStripShownInternal(shouldShow, true /* needsInputViewShown */);
+        if (mSuggestionStripView == null) {
+            return;
         }
+        final SettingsValues currentSettings = mSettings.getCurrent();
+        final boolean showSuggestions;
+        if (SuggestedWords.EMPTY == suggestedWords
+                || suggestedWords.isPunctuationSuggestions()
+                || !currentSettings.isSuggestionsRequested()) {
+            showSuggestions = !mSuggestionStripView.maybeShowImportantNoticeTitle(
+                    currentSettings.mInputAttributes);
+        } else {
+            showSuggestions = true;
+        }
+        if (showSuggestions) {
+            mSuggestionStripView.setSuggestions(suggestedWords,
+                    SubtypeLocaleUtils.isRtlLanguage(mSubtypeSwitcher.getCurrentSubtype()));
+        }
+        mKeyboardSwitcher.onAutoCorrectionStateChanged(suggestedWords.mWillAutoCorrect);
+        setSuggestionStripShownInternal(isSuggestionStripVisible, needsInputViewShown);
     }
 
     // TODO[IL]: Move this out of LatinIME.
@@ -1463,7 +1468,8 @@
             setNeutralSuggestionStrip();
         } else {
             mInputLogic.mWordComposer.setAutoCorrection(autoCorrection);
-            setSuggestedWords(suggestedWords, isSuggestionsStripVisible());
+            setSuggestedWords(
+                    suggestedWords, isSuggestionStripVisible(), true /* needsInputViewShown */);
         }
         // Cache the auto-correction in accessibility code so we can speak it if the user
         // touches a key that will insert it.
@@ -1490,13 +1496,14 @@
     // punctuation suggestions (if it's disabled).
     @Override
     public void setNeutralSuggestionStrip() {
+        setNeutralSuggestionStripInternal(true /* needsInputViewShown */);
+    }
+
+    private void setNeutralSuggestionStripInternal(final boolean needsInputViewShown) {
         final SettingsValues currentSettings = mSettings.getCurrent();
-        if (currentSettings.mBigramPredictionEnabled) {
-            setSuggestedWords(SuggestedWords.EMPTY, isSuggestionsStripVisible());
-        } else {
-            setSuggestedWords(currentSettings.mSpacingAndPunctuations.mSuggestPuncList,
-                    isSuggestionsStripVisible());
-        }
+        final SuggestedWords neutralSuggestions = currentSettings.mBigramPredictionEnabled
+                ? SuggestedWords.EMPTY : currentSettings.mSpacingAndPunctuations.mSuggestPuncList;
+        setSuggestedWords(neutralSuggestions, isSuggestionStripVisible(), needsInputViewShown);
     }
 
     // TODO: Make this private
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index 90b9692..1f80c4c 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -233,7 +233,9 @@
             return false;
         }
         final int width = getWidth();
-        if (width <= 0) return false;
+        if (width <= 0) {
+            return false;
+        }
         mLayoutHelper.layoutImportantNotice(mImportantNoticeStrip, width);
         mStripVisibilityGroup.showImportantNoticeStrip();
         mImportantNoticeStrip.setOnClickListener(this);
@@ -429,9 +431,11 @@
     }
 
     @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+    protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) {
         // Called by the framework when the size is known. Show the important notice if applicable.
         // This may be overriden by showing suggestions later, if applicable.
-        maybeShowImportantNoticeTitle(Settings.getInstance().getCurrent().mInputAttributes);
+        if (oldw <= 0 && w > 0) {
+            maybeShowImportantNoticeTitle(Settings.getInstance().getCurrent().mInputAttributes);
+        }
     }
 }