diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index 01c17f2f29d5a9c6a1a4ff170e810a02e333e935..8aaacd2494debd0b5beedc6d6c1f43e19f293fa0 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.text.InputType;
 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 @@ public final class InputAttributes {
             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;
-            }
+            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);
 
-            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;
-            }
+        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;
 
-            mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode;
-        }
+        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,84 +115,124 @@ public final class InputAttributes {
 
     @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);
+        }
+    }
+
+    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 "";
         }
-        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 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