Merge "Move auto correction thresthold to the native code"
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d5d1fe8..59de798 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -850,6 +850,11 @@
                 || newSelEnd != candidatesEnd) && mLastSelectionStart != newSelStart;
         final boolean candidatesCleared = candidatesStart == -1 && candidatesEnd == -1;
         if (!mExpectingUpdateSelection) {
+            // TAKE CARE: there is a race condition when we enter this test even when the user
+            // did not explicitly move the cursor. This happens when typing fast, where two keys
+            // turn this flag on in succession and both onUpdateSelection() calls arrive after
+            // the second one - the first call successfully avoids this test, but the second one
+            // enters. For the moment we rely on candidatesCleared to further reduce the impact.
             if (SPACE_STATE_WEAK == mSpaceState) {
                 // Test for no WEAK_SPACE action because there is a race condition that may end up
                 // in coming here on a normal key press. We set this to NONE because after
@@ -869,6 +874,7 @@
                 mComposingStateManager.onFinishComposingText();
                 mVoiceProxy.setVoiceInputHighlighted(false);
             } else if (!mWordComposer.isComposingWord()) {
+                mWordComposer.reset();
                 updateSuggestions();
             }
         }
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 651d90c..83b27f7 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -91,6 +91,14 @@
         mDelayUpdateOldSuggestions = res.getInteger(R.integer.config_delay_update_old_suggestions);
         mMagicSpaceStrippers = res.getString(R.string.magic_space_stripping_symbols);
         mMagicSpaceSwappers = res.getString(R.string.magic_space_swapping_symbols);
+        if (LatinImeLogger.sDBG) {
+            for (int i = 0; i < mMagicSpaceStrippers.length(); ++i) {
+                if (isMagicSpaceSwapper(mMagicSpaceStrippers.codePointAt(i))) {
+                    throw new RuntimeException("Char code " + mMagicSpaceStrippers.codePointAt(i)
+                            + " is both a magic space swapper and stripper.");
+                }
+            }
+        }
         mSuggestPuncs = res.getString(R.string.suggested_punctuations);
         // TODO: it would be nice not to recreate this each time we change the configuration
         mSuggestPuncList = createSuggestPuncList(mSuggestPuncs);