Merge "Small performance improvement / minor bugfix"
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 201fc70..f5e2441 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -422,11 +422,11 @@
 
     <!-- Title of an option for usability study mode -->
     <string name="prefs_usability_study_mode">Usability study mode</string>
-    <!-- Title of the settings for key long press delay [CHAR LIMIT=30] -->
+    <!-- Title of the settings for key long press delay [CHAR LIMIT=35] -->
     <string name="prefs_key_longpress_timeout_settings">Key long press delay</string>
-    <!-- Title of the settings for keypress vibration duration [CHAR LIMIT=30] -->
+    <!-- Title of the settings for keypress vibration duration [CHAR LIMIT=35] -->
     <string name="prefs_keypress_vibration_duration_settings">Keypress vibration duration</string>
-    <!-- Title of the settings for keypress sound volume [CHAR LIMIT=30] -->
+    <!-- Title of the settings for keypress sound volume [CHAR LIMIT=35] -->
     <string name="prefs_keypress_sound_volume_settings">Keypress sound volume</string>
     <!-- Title of the settings for reading an external dictionary file -->
     <string name="prefs_read_external_dictionary">Read external dictionary file</string>
diff --git a/java/src/com/android/inputmethod/latin/StringUtils.java b/java/src/com/android/inputmethod/latin/StringUtils.java
index 3ca209d..7f1e7c6 100644
--- a/java/src/com/android/inputmethod/latin/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/StringUtils.java
@@ -282,15 +282,4 @@
         }
         return builder.toString();
     }
-
-    public static boolean containsAny(final String string, final String separators) {
-        final int len = separators.length();
-        for (int i = 0; i < len; i = separators.offsetByCodePoints(i, 1)) {
-            final int separator = separators.codePointAt(i);
-            if (-1 != string.indexOf(separator)) {
-                return true;
-            }
-        }
-        return false;
-    }
 }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 5abadf3..671d714 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -47,6 +47,9 @@
     // TODO: rename this to CORRECTION_ON
     public static final int CORRECTION_FULL = 1;
 
+    // Close to -2**31
+    private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
+
     public interface SuggestInitializationListener {
         public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
     }
@@ -340,6 +343,15 @@
             suggestionsContainer.add(1, rejected);
         }
         SuggestedWordInfo.removeDups(suggestionsContainer);
+
+        // For some reason some suggestions with MIN_VALUE are making their way here.
+        // TODO: Find a more robust way to detect distractors.
+        for (int i = suggestionsContainer.size() - 1; i >= 0; --i) {
+            if (suggestionsContainer.get(i).mScore < SUPPRESS_SUGGEST_THRESHOLD) {
+                suggestionsContainer.remove(i);
+            }
+        }
+
         // In the batch input mode, the most relevant suggested word should act as a "typed word"
         // (typedWordValid=true), not as an "auto correct word" (willAutoCorrect=false).
         return new SuggestedWords(suggestionsContainer,
diff --git a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
index 136faff..98a50b7 100644
--- a/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/StringUtilsTests.java
@@ -215,22 +215,4 @@
         checkCapitalize("Lorem!Ipsum (dolor) Sit * Amet", "Lorem!Ipsum (Dolor) Sit * Amet",
                 " \n,.;!?*()&", Locale.ENGLISH);
     }
-
-    public void testContainsAny() {
-        assertFalse(StringUtils.containsAny("", " "));
-        assertFalse(StringUtils.containsAny("test and retest", ""));
-        assertTrue(StringUtils.containsAny("test and retest", "x3iq o"));
-        assertTrue(StringUtils.containsAny("test and retest", "x3iqo "));
-        assertTrue(StringUtils.containsAny("test and retest", " x3iqo"));
-        assertFalse(StringUtils.containsAny("test and retest", "x3iqo"));
-        assertTrue(StringUtils.containsAny("test and retest", "tse "));
-        assertTrue(StringUtils.containsAny("test and retest.", ".?()"));
-        assertFalse(StringUtils.containsAny("test and retest", ".?()"));
-        // Surrogate pair
-        assertTrue(StringUtils.containsAny("test and \uD861\uDED7 retest.", "\uD861\uDED7"));
-        // Ill-formed string
-        assertFalse(StringUtils.containsAny("test and \uD861 retest.", "\uD861\uDED7"));
-        // Ill-formed string
-        assertFalse(StringUtils.containsAny("test and \uDED7 retest.", "\uD861\uDED7"));
-    }
 }