Fix safety net not to be enabled at aggressive autocompletion mode

Bug: 3374359

Change-Id: I7b1dbeb64a87dda05397c236bb58da292f819471
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c439efe..8166e0b 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1580,7 +1580,7 @@
     private void showSuggestions(SuggestedWords suggestedWords, CharSequence typedWord) {
         setSuggestions(suggestedWords);
         if (suggestedWords.size() > 0) {
-            if (Utils.shouldBlockedBySafetyNetForAutoCorrection(suggestedWords)) {
+            if (Utils.shouldBlockedBySafetyNetForAutoCorrection(suggestedWords, mSuggest)) {
                 mBestWord = typedWord;
             } else if (suggestedWords.hasAutoCorrectionWord()) {
                 mBestWord = suggestedWords.getWord(1);
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 1772b26..04c63be 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -163,6 +163,10 @@
         mAutoCorrectionThreshold = threshold;
     }
 
+    public boolean isAggressiveAutoCorrectionMode() {
+        return (mAutoCorrectionThreshold == 0);
+    }
+
     /**
      * Number of suggestions to generate from the input key sequence. This has
      * to be a number between 1 and 100 (inclusive).
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 5059860..bb7239d 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -38,6 +38,7 @@
 
 public class Utils {
     private static final String TAG = Utils.class.getSimpleName();
+    private static final int MINIMUM_SAFETY_NET_CHAR_LENGTH = 4;
     private static boolean DBG = LatinImeLogger.sDBG;
 
     /**
@@ -106,11 +107,18 @@
         throw new RuntimeException("Can not find input method id for " + packageName);
     }
 
-    public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions) {
+    public static boolean shouldBlockedBySafetyNetForAutoCorrection(SuggestedWords suggestions,
+            Suggest suggest) {
         // Safety net for auto correction.
         // Actually if we hit this safety net, it's actually a bug.
         if (suggestions.size() <= 1 || suggestions.mTypedWordValid) return false;
+        // If user selected aggressive auto correction mode, there is no need to use the safety
+        // net.
+        if (suggest.isAggressiveAutoCorrectionMode()) return false;
         CharSequence typedWord = suggestions.getWord(0);
+        // If the length of typed word is less than MINIMUM_SAFETY_NET_CHAR_LENGTH,
+        // we should not use net because relatively edit distance can be big.
+        if (typedWord.length() < MINIMUM_SAFETY_NET_CHAR_LENGTH) return false;
         CharSequence candidateWord = suggestions.getWord(1);
         final int typedWordLength = typedWord.length();
         final int maxEditDistanceOfNativeDictionary = typedWordLength < 5 ? 2 : typedWordLength / 2;