Merge "Make session id mandatory for getSuggestions."
diff --git a/java/res/values/themes-lxx.xml b/java/res/values/themes-lxx.xml
index 03babd2..8016e76 100644
--- a/java/res/values/themes-lxx.xml
+++ b/java/res/values/themes-lxx.xml
@@ -51,7 +51,7 @@
         <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx</item>
         <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx</item>
         <item name="spacebarIconWidthRatio">0.9</item>
-        <item name="keyTypeface">bold</item>
+        <item name="keyTypeface">normal</item>
         <item name="keyTextColor">@color/key_text_color_holo</item>
         <item name="keyTextInactivatedColor">@color/key_text_inactive_color_lxx</item>
         <item name="functionalTextColor">@color/key_hint_letter_color_lxx</item>
@@ -116,7 +116,7 @@
         <item name="centerSuggestionPercentile">@fraction/config_center_suggestion_percentile</item>
         <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
         <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
-        <item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
+        <item name="android:background">@color/suggestions_strip_background_lxx</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_lxx</item>
         <item name="colorTypedWord">@color/typed_word_color_lxx</item>
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index db0a8a8..71355f4 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -94,8 +94,8 @@
             final boolean blockOffensiveWords, final boolean isCorrectionEnabled,
             final int[] additionalFeaturesOptions, final int sequenceNumber,
             final OnGetSuggestedWordsCallback callback) {
-        final int trailingSingleQuotesCount = wordComposer.trailingSingleQuotesCount();
         final String typedWord = wordComposer.getTypedWord();
+        final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(typedWord);
         final String consideredWord = trailingSingleQuotesCount > 0
                 ? typedWord.substring(0, typedWord.length() - trailingSingleQuotesCount)
                 : typedWord;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index ac69729..9cf71c7 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -149,7 +149,8 @@
     public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
             final int[] destination) {
         // lastIndex is exclusive
-        final int lastIndex = mTypedWordCache.length() - trailingSingleQuotesCount();
+        final int lastIndex = mTypedWordCache.length()
+                - StringUtils.getTrailingSingleQuotesCount(mTypedWordCache);
         if (lastIndex <= 0) {
             // The string is empty or contains only single quotes.
             return 0;
@@ -331,15 +332,6 @@
         return mIsFirstCharCapitalized;
     }
 
-    public int trailingSingleQuotesCount() {
-        final int lastIndex = mTypedWordCache.length() - 1;
-        int i = lastIndex;
-        while (i >= 0 && mTypedWordCache.charAt(i) == Constants.CODE_SINGLE_QUOTE) {
-            --i;
-        }
-        return lastIndex - i;
-    }
-
     /**
      * Whether or not all of the user typed chars are upper case
      * @return true if all user typed chars are upper case, false otherwise
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
index 0a03799..dc3e9bf 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
@@ -86,9 +86,10 @@
         coordinates = mKeyboard.getCoordinates(codePoints);
         composer.setComposingWord(codePoints, coordinates, prevWord);
 
-        final int trailingSingleQuotesCount = composer.trailingSingleQuotesCount();
-        final String consideredWord = trailingSingleQuotesCount > 0 ? testedWord.substring(0,
-                testedWord.length() - trailingSingleQuotesCount) : testedWord;
+        final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
+        final String consideredWord = trailingSingleQuotesCount > 0 ?
+                testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
+                testedWord;
         final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<Boolean>();
         final OnGetSuggestedWordsCallback callback = new OnGetSuggestedWordsCallback() {
             @Override
diff --git a/java/src/com/android/inputmethod/latin/utils/StringUtils.java b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
index 374badc..73ac9a5 100644
--- a/java/src/com/android/inputmethod/latin/utils/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
@@ -538,6 +538,15 @@
                 ? casedText.codePointAt(0) : CODE_UNSPECIFIED;
     }
 
+    public static int getTrailingSingleQuotesCount(final CharSequence charSequence) {
+        final int lastIndex = charSequence.length() - 1;
+        int i = lastIndex;
+        while (i >= 0 && charSequence.charAt(i) == Constants.CODE_SINGLE_QUOTE) {
+            --i;
+        }
+        return lastIndex - i;
+    }
+
     @UsedForTesting
     public static class Stringizer<E> {
         public String stringize(final E element) {
diff --git a/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
index 2a4ead3..bdc608a 100644
--- a/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/StringAndJsonUtilsTests.java
@@ -372,4 +372,14 @@
         assertTrue("copyCodePointsAndReturnCodePointCount throws when array is too small",
                 exceptionHappened);
     }
+
+    public void testGetTrailingSingleQuotesCount() {
+        assertEquals(0, StringUtils.getTrailingSingleQuotesCount(""));
+        assertEquals(1, StringUtils.getTrailingSingleQuotesCount("'"));
+        assertEquals(5, StringUtils.getTrailingSingleQuotesCount("'''''"));
+        assertEquals(0, StringUtils.getTrailingSingleQuotesCount("a"));
+        assertEquals(0, StringUtils.getTrailingSingleQuotesCount("'this"));
+        assertEquals(1, StringUtils.getTrailingSingleQuotesCount("'word'"));
+        assertEquals(0, StringUtils.getTrailingSingleQuotesCount("I'm"));
+    }
 }