Merge "Improve the russian dictionary." into lmp-dev
diff --git a/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_dark.png
index 47e673a..e1c713a 100644
--- a/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_light.png
index ad933ca..b1fe2c0 100644
--- a/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_people_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_dark.png
index a894c60..6369ac9 100644
--- a/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_light.png
index 2d8bdf8..dbb111f 100644
--- a/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_people_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_dark.png
index c9b81e1..c4d2115 100644
--- a/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_light.png
index 1c031c0..b2b0687 100644
--- a/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_places_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_dark.png
index 36fbf91..53f13d9 100644
--- a/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_light.png
index 3bd317c..90cc77d 100644
--- a/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_places_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_dark.png
index 43d3f30..5f23ec2 100644
--- a/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_light.png
index 3a6b3ac..6566ba8 100644
--- a/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_recents_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_dark.png b/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_dark.png
index a07f606..6da194c 100644
--- a/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_dark.png
+++ b/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_light.png b/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_light.png
index d86c1b9..b50eba7 100644
--- a/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_light.png
+++ b/java/res/drawable-hdpi/ic_emoji_recents_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_background_lxx_dark.9.png
new file mode 100644
index 0000000..e34c566
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_background_lxx_light.9.png
new file mode 100644
index 0000000..bf5450c
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_dark.9.png
new file mode 100644
index 0000000..3f6a943
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_light.9.png
new file mode 100644
index 0000000..107cfc7
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_suggest_strip_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_space_lxx_dark.png
new file mode 100644
index 0000000..9ff6402
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_space_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_space_lxx_light.png
new file mode 100644
index 0000000..d43e4dd
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_space_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_dark.png
index 952b570..bb37a63 100644
--- a/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_light.png
index d0d72db..e639416 100644
--- a/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_people_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_dark.png
index 1f46b9b..a7f8160 100644
--- a/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_light.png
index 8b7c1a3..d4b114c 100644
--- a/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_people_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_dark.png
index fadb751..630836b 100644
--- a/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_light.png
index 5c0e40d..2ba4301 100644
--- a/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_places_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_dark.png
index 5eed3d9..8bc3503 100644
--- a/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_light.png
index fff7998..b033c83 100644
--- a/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_places_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_dark.png
index e6c8dc0..b0b683b 100644
--- a/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_light.png
index 25ac3f5..39c22c4 100644
--- a/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_recents_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_dark.png b/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_dark.png
index e660891..b0138f5 100644
--- a/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_dark.png
+++ b/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_light.png b/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_light.png
index 614d081..99e7884 100644
--- a/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_light.png
+++ b/java/res/drawable-mdpi/ic_emoji_recents_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_background_lxx_dark.9.png
new file mode 100644
index 0000000..012d914
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_background_lxx_light.9.png
new file mode 100644
index 0000000..91adfac
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_dark.9.png
new file mode 100644
index 0000000..d85ca71
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_light.9.png
new file mode 100644
index 0000000..983a695
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_space_lxx_dark.png
new file mode 100644
index 0000000..9119a9d
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_space_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_space_lxx_light.png
new file mode 100644
index 0000000..6c495be
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_space_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_dark.png
index cf2aeb5..538796e 100644
--- a/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_light.png
index 3ecf9d0..0d8c33b 100644
--- a/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_people_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_dark.png
index b0a448a..dbde6b0 100644
--- a/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_light.png
index d71bc1c..aeecdee 100644
--- a/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_people_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_dark.png
index 33f4e0a..607ad84 100644
--- a/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_light.png
index 194f493..fe3f0ee 100644
--- a/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_places_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_dark.png
index 82d4ce6..bbec72f 100644
--- a/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_light.png
index e1b90a9..e3f201d 100644
--- a/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_places_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_dark.png
index 3305737..66d9c8e 100644
--- a/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_light.png
index 8c74847..2a97d59 100644
--- a/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_recents_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_dark.png b/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_dark.png
index b9c1a659..f60bba4 100644
--- a/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_dark.png
+++ b/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_light.png b/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_light.png
index 64e1c4d..a13db74 100644
--- a/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_light.png
+++ b/java/res/drawable-xhdpi/ic_emoji_recents_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_background_lxx_dark.9.png
new file mode 100644
index 0000000..1c3a38e
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_background_lxx_light.9.png
new file mode 100644
index 0000000..a7f18b5
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_dark.9.png
new file mode 100644
index 0000000..ac20faf
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_light.9.png
new file mode 100644
index 0000000..7ccd1ea
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_suggest_strip_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_space_lxx_dark.png
new file mode 100644
index 0000000..2cab2d2
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_space_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_space_lxx_light.png
new file mode 100644
index 0000000..621eec6
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_space_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_dark.png
index 9ca031a..47f6554 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_light.png
index 6faad5c..ef5bf5a 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_people_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_dark.png
index ed71326..8ebecb2 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_light.png
index a5516fa..d6369d9 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_people_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_dark.png
index 5131982..6ba4c3a 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_light.png
index 8a4614d..b753132 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_places_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_dark.png
index 0dfbadd..d645814 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_light.png
index 2f22dfb..95b111d 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_places_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_dark.png
index 28402b8..1501a07 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_light.png
index 92da7f2..dcf876a 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_recents_activated_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_dark.png b/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_dark.png
index 24561f9..5aeb79a 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_light.png b/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_light.png
index 96ff801..7b8b003 100644
--- a/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_light.png
+++ b/java/res/drawable-xxhdpi/ic_emoji_recents_normal_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_background_lxx_dark.9.png
new file mode 100644
index 0000000..8b89170
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_background_lxx_light.9.png
new file mode 100644
index 0000000..847df8a
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_dark.9.png
new file mode 100644
index 0000000..2de0c9c
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_light.9.png
new file mode 100644
index 0000000..8b495f3
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_suggest_strip_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_dark.png
new file mode 100644
index 0000000..f05d7d2
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_light.png
new file mode 100644
index 0000000..94be906
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_space_lxx_light.png
Binary files differ
diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml
index dfea017..a5bb6c5 100644
--- a/java/res/layout/suggestion_divider.xml
+++ b/java/res/layout/suggestion_divider.xml
@@ -31,4 +31,5 @@
     android:longClickable="false"
     android:hapticFeedbackEnabled="false"
     android:soundEffectsEnabled="false"
+    android:background="@null"
     style="?attr/suggestionStripViewStyle" />
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 783105d..d42b4e9 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -53,10 +53,8 @@
     <color name="suggested_word_color_lxx_light">#B337474F</color>
     <color name="gesture_trail_color_lxx_light">#4DB6AC</color>
     <color name="sliding_key_input_preview_color_lxx_light">#B34DB6AC</color>
-    <color name="keyboard_background_lxx_light">#ECEFF1</color>
     <color name="key_background_lxx_light">#ECEFF1</color>
     <color name="key_background_pressed_lxx_light">#2637474F</color>
-    <color name="suggestions_strip_background_lxx_light">#E4E7E9</color>
     <color name="suggested_word_background_selected_lxx_light">#2637474F</color>
     <color name="gesture_floating_preview_color_lxx_light">#E6ECEFF1</color>
     <color name="emoji_tab_page_indicator_background_lxx_light">#E4E7E9</color>
@@ -73,10 +71,8 @@
     <color name="suggested_word_color_lxx_dark">#B3FFFFFF</color>
     <color name="gesture_trail_color_lxx_dark">#80CBC4</color>
     <color name="sliding_key_input_preview_color_lxx_dark">#B380CBC4</color>
-    <color name="keyboard_background_lxx_dark">#263238</color>
     <color name="key_background_lxx_dark">#263238</color>
     <color name="key_background_pressed_lxx_dark">#19FFFFFF</color>
-    <color name="suggestions_strip_background_lxx_dark">#21272B</color>
     <color name="suggested_word_background_selected_lxx_dark">#19FFFFFF</color>
     <color name="gesture_floating_preview_color_lxx_dark">#E621272B</color>
     <color name="emoji_tab_page_indicator_background_lxx_dark">#21272B</color>
diff --git a/java/res/values/keyboard-icons-lxx-dark.xml b/java/res/values/keyboard-icons-lxx-dark.xml
index 15d267c..dfa585c 100644
--- a/java/res/values/keyboard-icons-lxx-dark.xml
+++ b/java/res/values/keyboard-icons-lxx-dark.xml
@@ -34,8 +34,7 @@
         <item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_dark</item>
         <item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_dark</item>
         <item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_dark</item>
-        <!-- TODO: Update this icon for LXX_Dark theme. -->
-        <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
+        <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_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="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
diff --git a/java/res/values/keyboard-icons-lxx-light.xml b/java/res/values/keyboard-icons-lxx-light.xml
index 60853ca..e8a3c56 100644
--- a/java/res/values/keyboard-icons-lxx-light.xml
+++ b/java/res/values/keyboard-icons-lxx-light.xml
@@ -34,8 +34,7 @@
         <item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
         <item name="iconTabKey">@drawable/sym_keyboard_tab_lxx_light</item>
         <item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
-        <!-- TODO: Update this icon for LXX_Light theme. -->
-        <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
+        <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_lxx_light</item>
         <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_light</item>
         <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index f563010..0a13158 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -45,7 +45,7 @@
         name="KeyboardView.LXX_Dark"
         parent="KeyboardView"
     >
-        <item name="android:background">@color/keyboard_background_lxx_dark</item>
+        <item name="android:background">@drawable/keyboard_background_lxx_dark</item>
         <item name="keyBackground">@drawable/btn_keyboard_key_lxx_dark</item>
         <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx_dark</item>
         <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx_dark</item>
@@ -119,7 +119,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">@color/suggestions_strip_background_lxx_dark</item>
+        <item name="android:background">@drawable/keyboard_suggest_strip_lxx_dark</item>
         <item name="android:src">@drawable/suggestions_strip_divider_lxx_dark</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_lxx_dark</item>
diff --git a/java/res/values/themes-lxx-light.xml b/java/res/values/themes-lxx-light.xml
index 48bd313..eccecdd 100644
--- a/java/res/values/themes-lxx-light.xml
+++ b/java/res/values/themes-lxx-light.xml
@@ -45,7 +45,7 @@
         name="KeyboardView.LXX_Light"
         parent="KeyboardView"
     >
-        <item name="android:background">@color/keyboard_background_lxx_light</item>
+        <item name="android:background">@drawable/keyboard_background_lxx_light</item>
         <item name="keyBackground">@drawable/btn_keyboard_key_lxx_light</item>
         <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx_light</item>
         <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx_light</item>
@@ -120,7 +120,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">@color/suggestions_strip_background_lxx_light</item>
+        <item name="android:background">@drawable/keyboard_suggest_strip_lxx_light</item>
         <item name="android:src">@drawable/suggestions_strip_divider_lxx_light</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_lxx_light</item>
diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
index ad14c06..162a209 100644
--- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
@@ -231,7 +231,7 @@
                 // Don't add single letter words, possibly confuses
                 // capitalization of i.
                 final int wordLen = StringUtils.codePointCount(word);
-                if (wordLen < MAX_WORD_LENGTH && wordLen > 1) {
+                if (wordLen <= MAX_WORD_LENGTH && wordLen > 1) {
                     if (DEBUG) {
                         Log.d(TAG, "addName " + name + ", " + word + ", "  + prevWordsInfo);
                     }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c7c1d056..719aeac 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -20,7 +20,6 @@
 import static com.android.inputmethod.latin.Constants.ImeOption.NO_MICROPHONE;
 import static com.android.inputmethod.latin.Constants.ImeOption.NO_MICROPHONE_COMPAT;
 
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -1621,24 +1620,22 @@
         if (mainKeyboardView != null) {
             mainKeyboardView.closing();
         }
-        launchSubActivity(SettingsActivity.class);
-    }
-
-    private void launchSubActivity(final Class<? extends Activity> activityClass) {
-        Intent intent = new Intent();
-        intent.setClass(LatinIME.this, activityClass);
+        final Intent intent = new Intent();
+        intent.setClass(LatinIME.this, SettingsActivity.class);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                 | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                 | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        intent.putExtra(SettingsActivity.EXTRA_SHOW_HOME_AS_UP, false);
         startActivity(intent);
     }
 
     private void showSubtypeSelectorAndSettings() {
         final CharSequence title = getString(R.string.english_ime_input_options);
+        // TODO: Should use new string "Select active input modes".
+        final CharSequence languageSelectionTitle = getString(R.string.language_selection_title);
         final CharSequence[] items = new CharSequence[] {
-                // TODO: Should use new string "Select active input modes".
-                getString(R.string.language_selection_title),
-                getString(ApplicationUtils.getActivityTitleResId(this, SettingsActivity.class)),
+                languageSelectionTitle,
+                getString(ApplicationUtils.getActivityTitleResId(this, SettingsActivity.class))
         };
         final OnClickListener listener = new OnClickListener() {
             @Override
@@ -1651,6 +1648,7 @@
                             Intent.FLAG_ACTIVITY_NEW_TASK
                                     | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                                     | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                    intent.putExtra(Intent.EXTRA_TITLE, languageSelectionTitle);
                     startActivity(intent);
                     break;
                 case 1:
diff --git a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
index debaad1..21014b3 100644
--- a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
@@ -253,12 +253,12 @@
                 final int frequency = cursor.getInt(indexFrequency);
                 final int adjustedFrequency = scaleFrequencyFromDefaultToLatinIme(frequency);
                 // Safeguard against adding really long words.
-                if (word.length() < MAX_WORD_LENGTH) {
+                if (word.length() <= MAX_WORD_LENGTH) {
                     runGCIfRequiredLocked(true /* mindsBlockByGC */);
                     addUnigramLocked(word, adjustedFrequency, null /* shortcutTarget */,
                             0 /* shortcutFreq */, false /* isNotAWord */,
                             false /* isBlacklisted */, BinaryDictionary.NOT_A_VALID_TIMESTAMP);
-                    if (null != shortcut && shortcut.length() < MAX_WORD_LENGTH) {
+                    if (null != shortcut && shortcut.length() <= MAX_WORD_LENGTH) {
                         runGCIfRequiredLocked(true /* mindsBlockByGC */);
                         addUnigramLocked(shortcut, adjustedFrequency, word,
                                 USER_DICT_SHORTCUT_FREQUENCY, true /* isNotAWord */,
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index 8e027e4..34d4d4e 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -62,8 +62,8 @@
             final PrevWordsInfo prevWordsInfo, final String word, final boolean isValid,
             final int timestamp, final DistracterFilter distracterFilter) {
         final CharSequence prevWord = prevWordsInfo.mPrevWordsInfo[0].mWord;
-        if (word.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH ||
-                (prevWord != null && prevWord.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH)) {
+        if (word.length() > Constants.DICTIONARY_MAX_WORD_LENGTH ||
+                (prevWord != null && prevWord.length() > Constants.DICTIONARY_MAX_WORD_LENGTH)) {
             return;
         }
         final int frequency = isValid ?
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java b/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
index c7b9dcd..b0c4940 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
@@ -18,11 +18,36 @@
 
 import com.android.inputmethod.latin.utils.FragmentUtils;
 
+import android.app.ActionBar;
 import android.content.Intent;
+import android.os.Bundle;
 import android.preference.PreferenceActivity;
+import android.view.MenuItem;
 
 public final class SettingsActivity extends PreferenceActivity {
+    public static final String EXTRA_SHOW_HOME_AS_UP = "show_home_as_up";
     private static final String DEFAULT_FRAGMENT = SettingsFragment.class.getName();
+    private boolean mShowHomeAsUp;
+
+    @Override
+    protected void onCreate(final Bundle savedState) {
+        super.onCreate(savedState);
+        final ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            mShowHomeAsUp = getIntent().getBooleanExtra(EXTRA_SHOW_HOME_AS_UP, true);
+            actionBar.setDisplayHomeAsUpEnabled(mShowHomeAsUp);
+            actionBar.setHomeButtonEnabled(mShowHomeAsUp);
+        }
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(final MenuItem item) {
+        if (mShowHomeAsUp && item.getItemId() == android.R.id.home) {
+            finish();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
 
     @Override
     public Intent getIntent() {
@@ -36,7 +61,7 @@
     }
 
     @Override
-    public boolean isValidFragment(String fragmentName) {
+    public boolean isValidFragment(final String fragmentName) {
         return FragmentUtils.isValidFragment(fragmentName);
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
index d76ea10..1979080 100644
--- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -386,8 +386,7 @@
             final SpacingAndPunctuations spacingAndPunctuations) {
         if (TextUtils.isEmpty(text)) return false;
         final int length = text.length();
-        // TODO: Make this test "length > Constants.DICTIONARY_MAX_WORD_LENGTH".
-        if (length >= Constants.DICTIONARY_MAX_WORD_LENGTH) {
+        if (length > Constants.DICTIONARY_MAX_WORD_LENGTH) {
             return false;
         }
         int i = 0;
diff --git a/native/jni/src/suggest/core/policy/dictionary_bigrams_structure_policy.h b/native/jni/src/suggest/core/policy/dictionary_bigrams_structure_policy.h
index 661ef1b..aa0d068 100644
--- a/native/jni/src/suggest/core/policy/dictionary_bigrams_structure_policy.h
+++ b/native/jni/src/suggest/core/policy/dictionary_bigrams_structure_policy.h
@@ -30,7 +30,7 @@
 
     virtual void getNextBigram(int *const outBigramPos, int *const outProbability,
             bool *const outHasNext, int *const pos) const = 0;
-    virtual void skipAllBigrams(int *const pos) const = 0;
+    virtual bool skipAllBigrams(int *const pos) const = 0;
 
  protected:
     DictionaryBigramsStructurePolicy() {}
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/bigram/ver4_bigram_list_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/bigram/ver4_bigram_list_policy.h
index 6162346..50a4c97 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/bigram/ver4_bigram_list_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/backward/v402/bigram/ver4_bigram_list_policy.h
@@ -58,8 +58,9 @@
     void getNextBigram(int *const outBigramPos, int *const outProbability,
             bool *const outHasNext, int *const bigramEntryPos) const;
 
-    void skipAllBigrams(int *const pos) const {
+    bool skipAllBigrams(int *const pos) const {
         // Do nothing because we don't need to skip bigram lists in ver4 dictionaries.
+        return true;
     }
 
     bool addNewEntry(const int terminalId, const int newTargetTerminalId,
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.cpp
index 08b4e0b..f7fd5c0 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.cpp
@@ -38,9 +38,14 @@
 const BigramListReadWriteUtils::BigramFlags
         BigramListReadWriteUtils::MASK_ATTRIBUTE_PROBABILITY = 0x0F;
 
-/* static */ void BigramListReadWriteUtils::getBigramEntryPropertiesAndAdvancePosition(
-        const uint8_t *const bigramsBuf, BigramFlags *const outBigramFlags,
+/* static */ bool BigramListReadWriteUtils::getBigramEntryPropertiesAndAdvancePosition(
+        const uint8_t *const bigramsBuf, const int bufSize, BigramFlags *const outBigramFlags,
         int *const outTargetPtNodePos, int *const bigramEntryPos) {
+    if (bufSize <= *bigramEntryPos) {
+        AKLOGE("Read invalid pos in getBigramEntryPropertiesAndAdvancePosition(). bufSize: %d, "
+                "bigramEntryPos: %d.", bufSize, *bigramEntryPos);
+        return false;
+    }
     const BigramFlags bigramFlags = ByteArrayUtils::readUint8AndAdvancePosition(bigramsBuf,
             bigramEntryPos);
     if (outBigramFlags) {
@@ -51,15 +56,19 @@
     if (outTargetPtNodePos) {
         *outTargetPtNodePos = targetPos;
     }
+    return true;
 }
 
-/* static */ void BigramListReadWriteUtils::skipExistingBigrams(const uint8_t *const bigramsBuf,
-        int *const bigramListPos) {
+/* static */ bool BigramListReadWriteUtils::skipExistingBigrams(const uint8_t *const bigramsBuf,
+        const int bufSize, int *const bigramListPos) {
     BigramFlags flags;
     do {
-        getBigramEntryPropertiesAndAdvancePosition(bigramsBuf, &flags, 0 /* outTargetPtNodePos */,
-                bigramListPos);
+        if (!getBigramEntryPropertiesAndAdvancePosition(bigramsBuf, bufSize, &flags,
+                0 /* outTargetPtNodePos */, bigramListPos)) {
+            return false;
+        }
     } while(hasNext(flags));
+    return true;
 }
 
 /* static */ int BigramListReadWriteUtils::getBigramAddressAndAdvancePosition(
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.h b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.h
index 15f924a..10f93fb 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.h
@@ -30,8 +30,8 @@
 public:
    typedef uint8_t BigramFlags;
 
-   static void getBigramEntryPropertiesAndAdvancePosition(const uint8_t *const bigramsBuf,
-           BigramFlags *const outBigramFlags, int *const outTargetPtNodePos,
+   static bool getBigramEntryPropertiesAndAdvancePosition(const uint8_t *const bigramsBuf,
+           const int bufSize, BigramFlags *const outBigramFlags, int *const outTargetPtNodePos,
            int *const bigramEntryPos);
 
    static AK_FORCE_INLINE int getProbabilityFromFlags(const BigramFlags flags) {
@@ -43,7 +43,8 @@
    }
 
    // Bigrams reading methods
-   static void skipExistingBigrams(const uint8_t *const bigramsBuf, int *const bigramListPos);
+   static bool skipExistingBigrams(const uint8_t *const bigramsBuf, const int bufSize,
+           int *const bigramListPos);
 
 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(BigramListReadWriteUtils);
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/bigram/bigram_list_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/bigram/bigram_list_policy.h
index 00bb502..73e291e 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/bigram/bigram_list_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/bigram/bigram_list_policy.h
@@ -27,27 +27,34 @@
 
 class BigramListPolicy : public DictionaryBigramsStructurePolicy {
  public:
-    explicit BigramListPolicy(const uint8_t *const bigramsBuf) : mBigramsBuf(bigramsBuf) {}
+    BigramListPolicy(const uint8_t *const bigramsBuf, const int bufSize)
+            : mBigramsBuf(bigramsBuf), mBufSize(bufSize) {}
 
     ~BigramListPolicy() {}
 
     void getNextBigram(int *const outBigramPos, int *const outProbability, bool *const outHasNext,
             int *const pos) const {
         BigramListReadWriteUtils::BigramFlags flags;
-        BigramListReadWriteUtils::getBigramEntryPropertiesAndAdvancePosition(mBigramsBuf, &flags,
-                outBigramPos, pos);
+        if (!BigramListReadWriteUtils::getBigramEntryPropertiesAndAdvancePosition(mBigramsBuf,
+                mBufSize, &flags, outBigramPos, pos)) {
+            AKLOGE("Cannot read bigram entry. mBufSize: %d, pos: %d. ", mBufSize, *pos);
+            *outProbability = NOT_A_PROBABILITY;
+            *outHasNext = false;
+            return;
+        }
         *outProbability = BigramListReadWriteUtils::getProbabilityFromFlags(flags);
         *outHasNext = BigramListReadWriteUtils::hasNext(flags);
     }
 
-    void skipAllBigrams(int *const pos) const {
-        BigramListReadWriteUtils::skipExistingBigrams(mBigramsBuf, pos);
+    bool skipAllBigrams(int *const pos) const {
+        return BigramListReadWriteUtils::skipExistingBigrams(mBigramsBuf, mBufSize, pos);
     }
 
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(BigramListPolicy);
 
     const uint8_t *const mBigramsBuf;
+    const int mBufSize;
 };
 } // namespace latinime
 #endif // LATINIME_BIGRAM_LIST_POLICY_H
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
index 91d7604..531cbb7 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
@@ -223,7 +223,14 @@
                         mShortcutListPolicy.skipAllShortcuts(&pos);
                     }
                     if (PatriciaTrieReadingUtils::hasBigrams(flags)) {
-                        mBigramListPolicy.skipAllBigrams(&pos);
+                        if (!mBigramListPolicy.skipAllBigrams(&pos)) {
+                            AKLOGE("Cannot skip bigrams. BufSize: %d, pos: %d.", mDictBufferSize,
+                                    pos);
+                            mIsCorrupted = true;
+                            ASSERT(false);
+                            *outUnigramProbability = NOT_A_PROBABILITY;
+                            return 0;
+                        }
                     }
                 }
             } else {
@@ -240,7 +247,13 @@
                     mShortcutListPolicy.skipAllShortcuts(&pos);
                 }
                 if (PatriciaTrieReadingUtils::hasBigrams(flags)) {
-                    mBigramListPolicy.skipAllBigrams(&pos);
+                    if (!mBigramListPolicy.skipAllBigrams(&pos)) {
+                        AKLOGE("Cannot skip bigrams. BufSize: %d, pos: %d.", mDictBufferSize, pos);
+                        mIsCorrupted = true;
+                        ASSERT(false);
+                        *outUnigramProbability = NOT_A_PROBABILITY;
+                        return 0;
+                    }
                 }
             }
 
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
index 7c0b9d3..d40b9af 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
@@ -42,7 +42,7 @@
               mHeaderPolicy(mMmappedBuffer->getBuffer(), FormatUtils::VERSION_2),
               mDictRoot(mMmappedBuffer->getBuffer() + mHeaderPolicy.getSize()),
               mDictBufferSize(mMmappedBuffer->getBufferSize() - mHeaderPolicy.getSize()),
-              mBigramListPolicy(mDictRoot), mShortcutListPolicy(mDictRoot),
+              mBigramListPolicy(mDictRoot, mDictBufferSize), mShortcutListPolicy(mDictRoot),
               mPtNodeReader(mDictRoot, mDictBufferSize, &mBigramListPolicy, &mShortcutListPolicy),
               mPtNodeArrayReader(mDictRoot, mDictBufferSize),
               mTerminalPtNodePositionsForIteratingWords(), mIsCorrupted(false) {}
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.h
index 55ba613..4b3bb37 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.h
@@ -40,8 +40,9 @@
     void getNextBigram(int *const outBigramPos, int *const outProbability,
             bool *const outHasNext, int *const bigramEntryPos) const;
 
-    void skipAllBigrams(int *const pos) const {
+    bool skipAllBigrams(int *const pos) const {
         // Do nothing because we don't need to skip bigram lists in ver4 dictionaries.
+        return true;
     }
 
     bool addNewEntry(const int terminalId, const int newTargetTerminalId,