Merge "Fix a bug where last candidate would not be reset"
diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index 888d73f..e663c90 100644
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -7,13 +7,13 @@
     <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
 
-    <application android:label="@string/english_ime_name"
+    <application android:label="@string/aosp_android_keyboard_ime_name"
             android:icon="@drawable/ic_ime_settings"
             android:backupAgent="BackupAgent"
             android:killAfterRestore="false">
 
         <service android:name="LatinIME"
-                android:label="@string/english_ime_name"
+                android:label="@string/aosp_android_keyboard_ime_name"
                 android:permission="android.permission.BIND_INPUT_METHOD">
             <intent-filter>
                 <action android:name="android.view.InputMethod" />
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 8f99921..d860a1b 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -20,6 +20,8 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Title for Latin keyboard  -->
     <string name="english_ime_name">Android keyboard</string>
+    <!-- Application name for opensource Android keyboard. AOSP(Android Open Source Project) should not be translated. -->
+    <string name="aosp_android_keyboard_ime_name">Android keyboard (AOSP)</string>
     <!-- Title for Latin keyboard settings activity / dialog -->
     <string name="english_ime_settings">Android keyboard settings</string>
     <!-- Title for Latin keyboard input options dialog [CHAR LIMIT=25] -->
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index b02aec8..59de798 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1208,7 +1208,8 @@
         // swap it, and override the space state with SPACESTATE_SWAP_PUNCTUATION.
         // To swap it, we fool handleSeparator to think the previous space state was a
         // magic space.
-        if (Keyboard.CODE_SPACE == toLeft && mSpaceState == SPACE_STATE_WEAK) {
+        if (Keyboard.CODE_SPACE == toLeft && mSpaceState == SPACE_STATE_WEAK
+                && mSettingsValues.isMagicSpaceSwapper(code)) {
             mSpaceState = SPACE_STATE_MAGIC;
             shouldRegisterSwapPunctuation = true;
         } else {
@@ -2186,7 +2187,7 @@
         // enter surrogate pairs this code will have been removed.
         if (Keyboard.CODE_SPACE != textBeforeCursor.charAt(1)) {
             // We should not have come here if the text before the cursor is not a space.
-            throw new RuntimeException("Tried to revert a swap of punctiation but we didn't "
+            throw new RuntimeException("Tried to revert a swap of punctuation but we didn't "
                     + "find a space just before the cursor.");
         }
         ic.beginBatchEdit();
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);