Handle non word separators correctly even for the initial letter of a word

bug: 5101114
Change-Id: I0d804c9a500ff000dc06cadad46a2c6c6b8088b2
diff --git a/java/res/values-fr/donottranslate.xml b/java/res/values-fr/donottranslate.xml
index 09c37e3..695750f 100644
--- a/java/res/values-fr/donottranslate.xml
+++ b/java/res/values-fr/donottranslate.xml
@@ -25,5 +25,5 @@
     <!-- Symbols that should promote magic spaces into real space -->
     <string name="magic_space_promoting_symbols">;:!?([*&amp;@{&lt;&gt;+=|</string>
     <!-- Symbols that do NOT separate words -->
-    <string name="non_word_separator_symbols">\u0027</string>
+    <string name="symbols_excluded_from_word_separators">\u0027</string>
 </resources>
diff --git a/java/res/values-it/donottranslate.xml b/java/res/values-it/donottranslate.xml
index adb2a9a..58e9436 100644
--- a/java/res/values-it/donottranslate.xml
+++ b/java/res/values-it/donottranslate.xml
@@ -19,5 +19,5 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- Symbols that do NOT separate words -->
-    <string name="non_word_separator_symbols"></string>
+    <string name="symbols_excluded_from_word_separators"></string>
 </resources>
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 0d18d90..9727746 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -27,10 +27,10 @@
     <!-- Symbols that should convert magic spaces into real space -->
     <string name="magic_space_promoting_symbols">([*&amp;@{&lt;&gt;+=|</string>
     <!-- Symbols that do NOT separate words -->
-    <string name="non_word_separator_symbols">\u0027-</string>
+    <string name="symbols_excluded_from_word_separators">\u0027-</string>
     <!-- Word separator list is the union of all symbols except those that are not separators:
     magic_space_swapping_symbols | magic_space_stripping_symbols |
-            magic_space_neutral_symbols \ non_word_separator_symbols -->
+            magic_space_neutral_symbols \ symbols_excluded_from_word_separators -->
 
     <!-- Label for "switch to more symbol" modifier key.  Must be short to fit on key! -->
     <string name="label_to_more_symbol_key">= \\ &lt;</string>
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index cbfc900..5c0b38c 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1374,7 +1374,8 @@
         }
 
         int code = primaryCode;
-        if (isAlphabet(code) && isSuggestionsRequested() && !isCursorTouchingWord()) {
+        if ((isAlphabet(code) || mSettingsValues.isSymbolExcludedFromWordSeparators(code))
+                && isSuggestionsRequested() && !isCursorTouchingWord()) {
             if (!mHasUncommittedTypedChars) {
                 mHasUncommittedTypedChars = true;
                 mComposingStringBuilder.setLength(0);
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 8475126..4c2627b 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -103,6 +103,7 @@
         public final String mMagicSpaceSwappers;
         public final String mSuggestPuncs;
         public final SuggestedWords mSuggestPuncList;
+        private final String mSymbolsExcludedFromWordSeparators;
 
         // From preferences:
         public final boolean mSoundOn; // Sound setting private to Latin IME (see mSilentModeOn)
@@ -152,10 +153,13 @@
             mMagicSpaceSwappers = res.getString(R.string.magic_space_swapping_symbols);
             String wordSeparators = mMagicSpaceStrippers + mMagicSpaceSwappers
                     + res.getString(R.string.magic_space_promoting_symbols);
-            final String notWordSeparators = res.getString(R.string.non_word_separator_symbols);
-            for (int i = notWordSeparators.length() - 1; i >= 0; --i) {
-                wordSeparators = wordSeparators.replace(notWordSeparators.substring(i, i + 1), "");
+            final String symbolsExcludedFromWordSeparators =
+                    res.getString(R.string.symbols_excluded_from_word_separators);
+            for (int i = symbolsExcludedFromWordSeparators.length() - 1; i >= 0; --i) {
+                wordSeparators = wordSeparators.replace(
+                        symbolsExcludedFromWordSeparators.substring(i, i + 1), "");
             }
+            mSymbolsExcludedFromWordSeparators = symbolsExcludedFromWordSeparators;
             mWordSeparators = wordSeparators;
             mSuggestPuncs = res.getString(R.string.suggested_punctuations);
             // TODO: it would be nice not to recreate this each time we change the configuration
@@ -197,6 +201,10 @@
             return mWordSeparators.contains(String.valueOf((char)code));
         }
 
+        public boolean isSymbolExcludedFromWordSeparators(int code) {
+            return mSymbolsExcludedFromWordSeparators.contains(String.valueOf((char)code));
+        }
+
         public boolean isMagicSpaceStripper(int code) {
             return mMagicSpaceStrippers.contains(String.valueOf((char)code));
         }