Fix a bug where predictions would not pop upon manual pick

Bug: 12295276
Change-Id: Id359c92acde44758b12929e7bac719d5c9c7577b
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 7da97e5..f078c73 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -472,7 +472,7 @@
         mCapsCount = 0;
         mDigitsCount = 0;
         mIsBatchMode = false;
-        mPreviousWordForSuggestion = mTypedWord.toString();
+        mPreviousWordForSuggestion = committedWord;
         mTypedWord.setLength(0);
         mCodePointSize = 0;
         mTrailingSingleQuotesCount = 0;
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 488ce6e..59b7221 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -1621,8 +1621,11 @@
                 chosenWord, separatorString, prevWord);
         final boolean shouldDiscardPreviousWordForSuggestion;
         if (0 == StringUtils.codePointCount(separatorString)) {
-            // Separator is 0-length. Discard the word only if the current language has spaces.
-            shouldDiscardPreviousWordForSuggestion = settingsValues.mCurrentLanguageHasSpaces;
+            // Separator is 0-length, we can keep the previous word for suggestion. Either this
+            // was a manual pick or the language has no spaces in which case we want to keep the
+            // previous word, or it was the keyboard closing or the cursor moving in which case it
+            // will be reset anyway.
+            shouldDiscardPreviousWordForSuggestion = false;
         } else {
             // Otherwise, we discard if the separator contains any non-whitespace.
             shouldDiscardPreviousWordForSuggestion =
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
index 8ad8689..da8627a 100644
--- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -348,4 +348,39 @@
         helperTestComposing("a'", true);
     }
     // TODO: Add some tests for non-BMP characters
+
+    public void testPredictionsAfterSpace() {
+        final String WORD_TO_TYPE = "Barack ";
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        runMessages();
+        // Test the first prediction is displayed
+        final SuggestedWords suggestedWords = mLatinIME.getSuggestedWords();
+        assertEquals("predictions after space", "Obama",
+                suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
+    }
+
+    public void testPredictionsAfterManualPick() {
+        final String WORD_TO_TYPE = "Barack";
+        type(WORD_TO_TYPE);
+        // Choose the auto-correction, which is always in position 0. For "Barack", the
+        // auto-correction should be "Barack".
+        pickSuggestionManually(0, WORD_TO_TYPE);
+        runMessages();
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        // Test the first prediction is displayed
+        final SuggestedWords suggestedWords = mLatinIME.getSuggestedWords();
+        assertEquals("predictions after manual pick", "Obama",
+                suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null);
+    }
+
+    public void testNoPredictionsAfterPeriod() {
+        final String WORD_TO_TYPE = "Barack. ";
+        type(WORD_TO_TYPE);
+        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
+        runMessages();
+        // Test the first prediction is displayed
+        final SuggestedWords suggestedWords = mLatinIME.getSuggestedWords();
+        assertEquals("no prediction after period", 0, suggestedWords.size());
+    }
 }