Merge "Stop directly checking SuggestedWordInfo.mKind"
diff --git a/java/res/drawable-hdpi/sym_keyboard_next_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_next_lxx_dark.png
index 99ac309..8a88a90 100644
--- a/java/res/drawable-hdpi/sym_keyboard_next_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_next_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_previous_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_dark.png
index 9019ebd..ee804ab 100644
--- a/java/res/drawable-hdpi/sym_keyboard_previous_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_return_lxx_dark.png
index f6c3c0d..4b28505 100644
--- a/java/res/drawable-hdpi/sym_keyboard_return_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_dark.png
index 108eb74..3d5dab0 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
index 141f5ad..15693ad 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_next_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_next_lxx_dark.png
index 61c1014..414cb0d 100644
--- a/java/res/drawable-mdpi/sym_keyboard_next_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_next_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_previous_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_dark.png
index f176956..40655ca 100644
--- a/java/res/drawable-mdpi/sym_keyboard_previous_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_return_lxx_dark.png
index 8903e02..58eb1a9 100644
--- a/java/res/drawable-mdpi/sym_keyboard_return_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_dark.png
index 9c89031..3b98d13 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
index 926c363..6a3755c 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_next_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_dark.png
index 9e05e84..8b5b0b4 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_next_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_dark.png
index 8995d87..9bc4fc8 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_dark.png
index 351f73b..9804d0b 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_return_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_dark.png
index 6ee55e8..97269b7 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
index a5c5093..2967cc1 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_dark.png
index a04a41c..1e2819b 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_dark.png
index c87d8f0..bae6cb1 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_dark.png
index 08334f0..2d9ccb4 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_dark.png
index 2595ec9..f346718 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
index a58b525..d5b45a5 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/values/keyboard-icons-lxx-dark.xml b/java/res/values/keyboard-icons-lxx-dark.xml
index 07af85e..6e9c4d1 100644
--- a/java/res/values/keyboard-icons-lxx-dark.xml
+++ b/java/res/values/keyboard-icons-lxx-dark.xml
@@ -22,7 +22,7 @@
     <style name="KeyboardIcons.LXX_Dark">
         <!-- Keyboard icons -->
         <!-- TODO: Update those icons for LXX theme. -->
-        <item name="iconShiftKey">@drawable/sym_keyboard_shift_holo_dark</item>
+        <item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
         <item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
         <item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
         <item name="iconSpaceKey">@drawable/sym_keyboard_spacebar_lxx_dark</item>
@@ -36,7 +36,7 @@
         <item name="iconTabKey">@drawable/sym_keyboard_tab_holo_dark</item>
         <item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_dark</item>
         <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
-        <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_holo_dark</item>
+        <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
         <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_dark</item>
         <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml
index 3439625..740bf35 100644
--- a/java/res/xml-sw600dp/key_styles_enter.xml
+++ b/java/res/xml-sw600dp/key_styles_enter.xml
@@ -102,7 +102,7 @@
         latin:keySpec="!icon/enter_key|!code/key_enter"
         latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor"
         latin:keyActionFlags="noKeyPreview"
-        latin:backgroundType="functional"
+        latin:backgroundType="action"
         latin:parentStyle="navigateMoreKeysStyle" />
     <switch>
         <!-- Shift + Enter in textMultiLine field. -->
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 0a274e0..f4a4838 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -82,7 +82,7 @@
         latin:styleName="emojiKeyStyle"
         latin:keySpec="!icon/emoji_key|!code/key_emoji"
         latin:keyActionFlags="noKeyPreview"
-        latin:backgroundType="functional" />
+        latin:backgroundType="action" />
     <include
         latin:keyboardLayout="@xml/key_styles_enter" />
     <key-style
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index 8add316..50530e1 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -257,7 +257,7 @@
         latin:styleName="defaultEnterKeyStyle"
         latin:keyLabelFlags="preserveCase|autoXScale|followKeyLabelRatio|followFunctionalTextColor"
         latin:keyActionFlags="noKeyPreview"
-        latin:backgroundType="functional"
+        latin:backgroundType="action"
         latin:parentStyle="navigateMoreKeysStyle" />
     <key-style
         latin:styleName="shiftEnterKeyStyle"
diff --git a/native/jni/src/suggest/core/session/prev_words_info.h b/native/jni/src/suggest/core/session/prev_words_info.h
index a58000a..56c53c1 100644
--- a/native/jni/src/suggest/core/session/prev_words_info.h
+++ b/native/jni/src/suggest/core/session/prev_words_info.h
@@ -92,7 +92,7 @@
             const DictionaryStructureWithBufferPolicy *const dictStructurePolicy,
             const int *const wordCodePoints, const int wordCodePointCount,
             const bool isBeginningOfSentence, const bool tryLowerCaseSearch) {
-        if (!dictStructurePolicy || !wordCodePoints) {
+        if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) {
             return NOT_A_DICT_POS;
         }
         int codePoints[MAX_WORD_LENGTH];
@@ -122,6 +122,9 @@
             const DictionaryStructureWithBufferPolicy *const dictStructurePolicy,
             const int *const wordCodePoints, const int wordCodePointCount,
             const bool isBeginningOfSentence) {
+        if (!dictStructurePolicy || !wordCodePoints || wordCodePointCount > MAX_WORD_LENGTH) {
+            return NOT_A_DICT_POS;
+        }
         int codePoints[MAX_WORD_LENGTH];
         int codePointCount = wordCodePointCount;
         memmove(codePoints, wordCodePoints, sizeof(int) * codePointCount);
diff --git a/tests/src/com/android/inputmethod/latin/ShiftModeTests.java b/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
index f3756c2..95851f3 100644
--- a/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
+++ b/tests/src/com/android/inputmethod/latin/ShiftModeTests.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.latin;
 
+import android.os.Build;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.text.TextUtils;
 import android.view.inputmethod.EditorInfo;
@@ -111,15 +112,23 @@
     }
 
     public void testOtherSentenceSeparators() {
-        changeLanguage("hy-AM");
-        assertTrue("(Armenian) Auto caps at start", isCapsModeAutoShifted());
-        type("Hey. ");
-        assertFalse("(Armenian) No auto-caps after latin period", isCapsModeAutoShifted());
-        type("Hey\u0589");
-        assertFalse("(Armenian) No auto-caps directly after armenian period",
-                isCapsModeAutoShifted());
-        type(" ");
-        assertTrue("(Armenian) Auto-caps after armenian period-whitespace",
-                isCapsModeAutoShifted());
+        // We only run this test on Kitkat+ because previous versions of Android don't
+        // have an Armenian locale. For some reason I don't know, when the requested
+        // locale is not present as a device locale, then the application under test can't
+        // access the resources in that locale -- though it works when the app is actually
+        // running on the device and not under test. If we ever figure out what's going
+        // on, remove this test.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            changeLanguage("hy-AM");
+            assertTrue("(Armenian) Auto caps at start", isCapsModeAutoShifted());
+            type("Hey. ");
+            assertFalse("(Armenian) No auto-caps after latin period", isCapsModeAutoShifted());
+            type("Hey\u0589");
+            assertFalse("(Armenian) No auto-caps directly after armenian period",
+                    isCapsModeAutoShifted());
+            type(" ");
+            assertTrue("(Armenian) Auto-caps after armenian period-whitespace",
+                    isCapsModeAutoShifted());
+        }
     }
 }