Don't auto-correct when there are digits.

Bug: 6667462
Change-Id: I796655f57c71c9f50ae6e38dd08b71df3998dbcf
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 3e3cf76..5e2a041 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -233,7 +233,7 @@
         // the current settings. It may also be useful to know, when the setting is off, whether
         // the word *would* have been auto-corrected.
         if (!isCorrectionEnabled || !allowsToBeAutoCorrected || !wordComposer.isComposingWord()
-                || suggestionsSet.isEmpty()
+                || suggestionsSet.isEmpty() || wordComposer.hasDigits()
                 || wordComposer.isMostlyCaps() || wordComposer.isResumed()
                 || !hasMainDictionary()) {
             // If we don't have a main dictionary, we never want to auto-correct. The reason for
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 6d346d1..5606a58 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -41,6 +41,7 @@
 
     // Cache these values for performance
     private int mCapsCount;
+    private int mDigitsCount;
     private boolean mAutoCapitalized;
     private int mTrailingSingleQuotesCount;
     private int mCodePointSize;
@@ -65,6 +66,7 @@
         mTypedWord = new StringBuilder(source.mTypedWord);
         mInputPointers.copy(source.mInputPointers);
         mCapsCount = source.mCapsCount;
+        mDigitsCount = source.mDigitsCount;
         mIsFirstCharCapitalized = source.mIsFirstCharCapitalized;
         mAutoCapitalized = source.mAutoCapitalized;
         mTrailingSingleQuotesCount = source.mTrailingSingleQuotesCount;
@@ -80,6 +82,7 @@
         mTypedWord.setLength(0);
         mAutoCorrection = null;
         mCapsCount = 0;
+        mDigitsCount = 0;
         mIsFirstCharCapitalized = false;
         mTrailingSingleQuotesCount = 0;
         mIsResumed = false;
@@ -141,6 +144,7 @@
         mIsFirstCharCapitalized = isFirstCharCapitalized(
                 newIndex, primaryCode, mIsFirstCharCapitalized);
         if (Character.isUpperCase(primaryCode)) mCapsCount++;
+        if (Character.isDigit(primaryCode)) mDigitsCount++;
         if (Keyboard.CODE_SINGLE_QUOTE == primaryCode) {
             ++mTrailingSingleQuotesCount;
         } else {
@@ -213,6 +217,7 @@
                 mTypedWord.deleteCharAt(stringBuilderLength - 1);
             }
             if (Character.isUpperCase(lastChar)) mCapsCount--;
+            if (Character.isDigit(lastChar)) mDigitsCount--;
             refreshSize();
         }
         // We may have deleted the last one.
@@ -268,6 +273,13 @@
     }
 
     /**
+     * Returns true if we have digits in the composing word.
+     */
+    public boolean hasDigits() {
+        return mDigitsCount > 0;
+    }
+
+    /**
      * Saves the reason why the word is capitalized - whether it was automatic or
      * due to the user hitting shift in the middle of a sentence.
      * @param auto whether it was an automatic capitalization due to start of sentence
@@ -322,6 +334,7 @@
             lastComposedWord.deactivate();
         }
         mCapsCount = 0;
+        mDigitsCount = 0;
         mIsBatchMode = false;
         mTypedWord.setLength(0);
         mTrailingSingleQuotesCount = 0;