Merge "Support multiple previous words in DicNode."
diff --git a/java/res/color/emoji_tab_label_color_lxx.xml b/java/res/color/emoji_tab_label_color_lxx_dark.xml
similarity index 78%
rename from java/res/color/emoji_tab_label_color_lxx.xml
rename to java/res/color/emoji_tab_label_color_lxx_dark.xml
index c2710d3..090f83e 100644
--- a/java/res/color/emoji_tab_label_color_lxx.xml
+++ b/java/res/color/emoji_tab_label_color_lxx_dark.xml
@@ -21,13 +21,13 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:color="@color/key_text_color_holo" />
+        android:color="@color/key_text_color_lxx_dark" />
     <item
         android:state_pressed="true"
-        android:color="@color/key_text_color_holo" />
+        android:color="@color/key_text_color_lxx_dark" />
     <item
         android:state_selected="true"
-        android:color="@color/key_text_color_holo" />
+        android:color="@color/key_text_color_lxx_dark" />
     <item
-        android:color="@color/key_text_inactive_color_lxx" />
+        android:color="@color/key_text_inactive_color_lxx_dark" />
 </selector>
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_active_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_active_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_active_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_active_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index fa2cb85..0000000
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png
deleted file mode 100644
index 4309989..0000000
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png
deleted file mode 100644
index 2d1acf2..0000000
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png
deleted file mode 100644
index 3e25a98..0000000
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_holo_dark.9.png
similarity index 100%
copy from java/res/drawable-hdpi/btn_keyboard_key_dark_active_klp.9.png
copy to java/res/drawable-hdpi/btn_keyboard_key_normal_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_holo_light.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_holo_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_off_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_lxx.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_lxx.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_lxx.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_lxx.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_ics_light.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_light_pressed_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_ics_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_klp_light.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_light_pressed_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_klp_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_ics.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_ics.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_klp.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_klp.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png
rename to java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/tab_selected.9.png b/java/res/drawable-hdpi/emoji_category_tab_selected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/tab_selected.9.png
rename to java/res/drawable-hdpi/emoji_category_tab_selected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/tab_unselected.9.png b/java/res/drawable-hdpi/emoji_category_tab_unselected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/tab_unselected.9.png
rename to java/res/drawable-hdpi/emoji_category_tab_unselected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_nature_light_activated.png b/java/res/drawable-hdpi/ic_emoji_nature_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_nature_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_nature_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_nature_light_normal.png b/java/res/drawable-hdpi/ic_emoji_nature_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_nature_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_nature_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_objects_light_activated.png b/java/res/drawable-hdpi/ic_emoji_objects_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_objects_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_objects_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_objects_light_normal.png b/java/res/drawable-hdpi/ic_emoji_objects_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_objects_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_objects_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_people_light_activated.png b/java/res/drawable-hdpi/ic_emoji_people_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_people_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_people_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_people_light_normal.png b/java/res/drawable-hdpi/ic_emoji_people_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_people_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_people_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_light_activated.png b/java/res/drawable-hdpi/ic_emoji_places_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_places_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_places_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_places_light_normal.png b/java/res/drawable-hdpi/ic_emoji_places_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_places_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_places_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recent_light_activated.png b/java/res/drawable-hdpi/ic_emoji_recent_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_recent_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_recent_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_recent_light_normal.png b/java/res/drawable-hdpi/ic_emoji_recent_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_recent_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_recent_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_symbols_light_activated.png b/java/res/drawable-hdpi/ic_emoji_symbols_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_symbols_light_activated.png
rename to java/res/drawable-hdpi/ic_emoji_symbols_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_emoji_symbols_light_normal.png b/java/res/drawable-hdpi/ic_emoji_symbols_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-hdpi/ic_emoji_symbols_light_normal.png
rename to java/res/drawable-hdpi/ic_emoji_symbols_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx.9.png
deleted file mode 100644
index be39415..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png
new file mode 100644
index 0000000..6a76ce6
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx.9.png
deleted file mode 100644
index 9fa6d00..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
new file mode 100644
index 0000000..752c758
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx.9.png
deleted file mode 100644
index c73269b..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..a24519f
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx.9.png
deleted file mode 100644
index fffd402..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..f3c2f6b
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx.9.png
deleted file mode 100644
index 61c23c1..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
new file mode 100644
index 0000000..0a9e467
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx.9.png
deleted file mode 100644
index 827d743..0000000
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..6a58ed3
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-hdpi/keyboard_popup_panel_background_lxx.9.png
rename to java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.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
new file mode 100644
index 0000000..f6c3c0d
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_led_holo.9.png b/java/res/drawable-hdpi/sym_keyboard_space_led_holo.9.png
deleted file mode 100644
index 34a1ebd..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_space_led_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
new file mode 100644
index 0000000..e70f0c1
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_active_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_active_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_active_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_active_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index 8e9a349..0000000
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
deleted file mode 100644
index 46e9db0..0000000
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
deleted file mode 100644
index ee60e48..0000000
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
deleted file mode 100644
index 1f8f318..0000000
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_holo_dark.9.png
similarity index 100%
copy from java/res/drawable-mdpi/btn_keyboard_key_dark_active_klp.9.png
copy to java/res/drawable-mdpi/btn_keyboard_key_normal_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_holo_light.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_holo_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_off_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_lxx.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_lxx.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_lxx.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_lxx.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_ics_light.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_light_pressed_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_ics_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_klp_light.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_light_pressed_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_klp_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_ics.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_ics.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_klp.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_klp.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png
rename to java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/tab_selected.9.png b/java/res/drawable-mdpi/emoji_category_tab_selected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/tab_selected.9.png
rename to java/res/drawable-mdpi/emoji_category_tab_selected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/tab_unselected.9.png b/java/res/drawable-mdpi/emoji_category_tab_unselected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/tab_unselected.9.png
rename to java/res/drawable-mdpi/emoji_category_tab_unselected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_nature_light_activated.png b/java/res/drawable-mdpi/ic_emoji_nature_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_nature_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_nature_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_nature_light_normal.png b/java/res/drawable-mdpi/ic_emoji_nature_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_nature_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_nature_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_objects_light_activated.png b/java/res/drawable-mdpi/ic_emoji_objects_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_objects_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_objects_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_objects_light_normal.png b/java/res/drawable-mdpi/ic_emoji_objects_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_objects_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_objects_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_light_activated.png b/java/res/drawable-mdpi/ic_emoji_people_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_people_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_people_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_people_light_normal.png b/java/res/drawable-mdpi/ic_emoji_people_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_people_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_people_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_light_activated.png b/java/res/drawable-mdpi/ic_emoji_places_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_places_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_places_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_places_light_normal.png b/java/res/drawable-mdpi/ic_emoji_places_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_places_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_places_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recent_light_activated.png b/java/res/drawable-mdpi/ic_emoji_recent_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_recent_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_recent_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_recent_light_normal.png b/java/res/drawable-mdpi/ic_emoji_recent_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_recent_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_recent_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_symbols_light_activated.png b/java/res/drawable-mdpi/ic_emoji_symbols_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_symbols_light_activated.png
rename to java/res/drawable-mdpi/ic_emoji_symbols_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_emoji_symbols_light_normal.png b/java/res/drawable-mdpi/ic_emoji_symbols_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-mdpi/ic_emoji_symbols_light_normal.png
rename to java/res/drawable-mdpi/ic_emoji_symbols_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx.9.png
deleted file mode 100644
index 625490b..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png
new file mode 100644
index 0000000..0173d09
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx.9.png
deleted file mode 100644
index 427c870..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
new file mode 100644
index 0000000..6d89549
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx.9.png
deleted file mode 100644
index ea75729..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..a459d42
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx.9.png
deleted file mode 100644
index 1911c42..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..5c00e7e
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx.9.png
deleted file mode 100644
index cdef116..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
new file mode 100644
index 0000000..f85dd03
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx.9.png
deleted file mode 100644
index dea5d07..0000000
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..83d72a2
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-mdpi/keyboard_popup_panel_background_lxx.9.png
rename to java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.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
new file mode 100644
index 0000000..8903e02
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_led_holo.9.png b/java/res/drawable-mdpi/sym_keyboard_space_led_holo.9.png
deleted file mode 100644
index abd8b74..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_space_led_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
new file mode 100644
index 0000000..86e816d
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_active_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_active_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_active_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_active_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index a2f6ac0..0000000
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png
deleted file mode 100644
index 2baf7d9..0000000
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png
deleted file mode 100644
index 6812f9e..0000000
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png
deleted file mode 100644
index 16416f0..0000000
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_holo_dark.9.png
similarity index 100%
copy from java/res/drawable-xhdpi/btn_keyboard_key_dark_active_klp.9.png
copy to java/res/drawable-xhdpi/btn_keyboard_key_normal_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_holo_light.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_holo_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_off_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_lxx.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_lxx.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_lxx.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_lxx.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_ics_light.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_ics_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_klp_light.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_klp_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_ics.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_ics.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_klp.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_klp.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png
rename to java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/tab_selected.9.png b/java/res/drawable-xhdpi/emoji_category_tab_selected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/tab_selected.9.png
rename to java/res/drawable-xhdpi/emoji_category_tab_selected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/tab_unselected.9.png b/java/res/drawable-xhdpi/emoji_category_tab_unselected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/tab_unselected.9.png
rename to java/res/drawable-xhdpi/emoji_category_tab_unselected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_nature_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_nature_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_nature_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_nature_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_nature_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_nature_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_nature_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_nature_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_objects_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_objects_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_objects_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_objects_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_objects_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_objects_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_objects_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_objects_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_people_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_people_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_people_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_people_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_people_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_people_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_people_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_places_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_places_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_places_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_places_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_places_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_places_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_places_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recent_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_recent_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_recent_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_recent_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_recent_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_recent_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_recent_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_recent_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_symbols_light_activated.png b/java/res/drawable-xhdpi/ic_emoji_symbols_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_symbols_light_activated.png
rename to java/res/drawable-xhdpi/ic_emoji_symbols_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_emoji_symbols_light_normal.png b/java/res/drawable-xhdpi/ic_emoji_symbols_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xhdpi/ic_emoji_symbols_light_normal.png
rename to java/res/drawable-xhdpi/ic_emoji_symbols_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx.9.png
deleted file mode 100644
index c211d89..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png
new file mode 100644
index 0000000..fed1da7
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx.9.png
deleted file mode 100644
index 543bc76..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
new file mode 100644
index 0000000..ca90d52
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx.9.png
deleted file mode 100644
index ec42aad..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..ad277d6
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx.9.png
deleted file mode 100644
index 319e9d7..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..3c5f89f
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx.9.png
deleted file mode 100644
index 052032b..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
new file mode 100644
index 0000000..6c49824
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx.9.png
deleted file mode 100644
index c7e9d1c..0000000
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..2cd7b02
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx.9.png
rename to java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.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
new file mode 100644
index 0000000..351f73b
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_led_holo.9.png b/java/res/drawable-xhdpi/sym_keyboard_space_led_holo.9.png
deleted file mode 100644
index ba4e9ec..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_space_led_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
new file mode 100644
index 0000000..cb66054
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_active_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_active_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index 17f0a7a..0000000
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_holo_dark.9.png
similarity index 100%
copy from java/res/drawable-xxhdpi/btn_keyboard_key_dark_active_klp.9.png
copy to java/res/drawable-xxhdpi/btn_keyboard_key_normal_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_holo_light.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_light_normal_holo.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_holo_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_off_lxx.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_off_lxx.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_lxx.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_normal_on_lxx.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_ics_light.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_ics_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_klp_light.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_light_pressed_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_klp_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_off_lxx.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_ics.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_ics.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_ics_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_klp.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_klp.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_klp_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/btn_keyboard_key_dark_pressed_on_lxx.9.png
rename to java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/tab_selected.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_selected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/tab_selected.9.png
rename to java/res/drawable-xxhdpi/emoji_category_tab_selected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/tab_unselected.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_unselected_holo_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/tab_unselected.9.png
rename to java/res/drawable-xxhdpi/emoji_category_tab_unselected_holo_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_nature_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_nature_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_nature_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_nature_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_nature_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_nature_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_nature_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_nature_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_objects_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_objects_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_objects_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_objects_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_objects_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_objects_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_objects_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_objects_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_people_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_people_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_people_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_people_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_people_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_people_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_people_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_places_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_places_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_places_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_places_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_places_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_places_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_places_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recent_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_recent_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_recent_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_recent_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_recent_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_recent_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_recent_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_recent_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_symbols_light_activated.png b/java/res/drawable-xxhdpi/ic_emoji_symbols_activated_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_symbols_light_activated.png
rename to java/res/drawable-xxhdpi/ic_emoji_symbols_activated_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/ic_emoji_symbols_light_normal.png b/java/res/drawable-xxhdpi/ic_emoji_symbols_normal_holo_dark.png
similarity index 100%
rename from java/res/drawable-xxhdpi/ic_emoji_symbols_light_normal.png
rename to java/res/drawable-xxhdpi/ic_emoji_symbols_normal_holo_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx.9.png
deleted file mode 100644
index fd2f9e5..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png
new file mode 100644
index 0000000..1f10e92
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx.9.png
deleted file mode 100644
index 3ab7900..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
new file mode 100644
index 0000000..25e362c
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx.9.png
deleted file mode 100644
index 99543a1..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..c6d9f3c
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_left_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx.9.png
deleted file mode 100644
index 121411a..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..a197c29
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx.9.png
deleted file mode 100644
index e9e3792..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
new file mode 100644
index 0000000..686f757
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx.9.png
deleted file mode 100644
index 6c1143a..0000000
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
new file mode 100644
index 0000000..41fad2d
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_right_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx.9.png b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
similarity index 100%
rename from java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx.9.png
rename to java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.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
new file mode 100644
index 0000000..08334f0
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
new file mode 100644
index 0000000..1f25e27
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable/btn_keyboard_key_functional_ics.xml b/java/res/drawable/btn_keyboard_key_functional_ics.xml
index 847ca72..846bccc 100644
--- a/java/res/drawable/btn_keyboard_key_functional_ics.xml
+++ b/java/res/drawable/btn_keyboard_key_functional_ics.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Functional keys. -->
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_ics" />
-    <item android:drawable="@drawable/btn_keyboard_key_dark_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_ics_dark" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_functional_klp.xml b/java/res/drawable/btn_keyboard_key_functional_klp.xml
index 0e17ed2..7b444f7 100644
--- a/java/res/drawable/btn_keyboard_key_functional_klp.xml
+++ b/java/res/drawable/btn_keyboard_key_functional_klp.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Functional keys. -->
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_klp" />
-    <item android:drawable="@drawable/btn_keyboard_key_dark_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_klp_dark" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_functional_lxx.xml b/java/res/drawable/btn_keyboard_key_functional_lxx_dark.xml
similarity index 85%
rename from java/res/drawable/btn_keyboard_key_functional_lxx.xml
rename to java/res/drawable/btn_keyboard_key_functional_lxx_dark.xml
index fc6f98d..fd1dbb9 100644
--- a/java/res/drawable/btn_keyboard_key_functional_lxx.xml
+++ b/java/res/drawable/btn_keyboard_key_functional_lxx_dark.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Functional keys. -->
     <item android:state_pressed="true"
-          android:drawable="@color/key_background_pressed_lxx" />
-    <item android:drawable="@color/key_background_lxx" />
+          android:drawable="@color/key_background_pressed_lxx_dark" />
+    <item android:drawable="@color/key_background_lxx_dark" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_ics.xml b/java/res/drawable/btn_keyboard_key_ics.xml
index af14cd5..0bb098d 100644
--- a/java/res/drawable/btn_keyboard_key_ics.xml
+++ b/java/res/drawable/btn_keyboard_key_ics.xml
@@ -17,19 +17,19 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Action keys. -->
     <item android:state_active="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_ics" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_ics_dark" />
     <item android:state_active="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_active_ics" />
+          android:drawable="@drawable/btn_keyboard_key_active_ics_dark" />
 
     <!-- Toggle keys. Use checkable/checked state. -->
     <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_on_ics" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_on_ics_dark" />
     <item android:state_checkable="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_off_ics" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_off_ics_dark" />
     <item android:state_checkable="true" android:state_checked="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_on_ics" />
+          android:drawable="@drawable/btn_keyboard_key_normal_on_ics_dark" />
     <item android:state_checkable="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_off_holo" />
+          android:drawable="@drawable/btn_keyboard_key_normal_off_holo_dark" />
 
     <!-- Empty background keys. -->
     <item android:state_empty="true"
@@ -37,6 +37,6 @@
 
     <!-- Normal keys. -->
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_light_pressed_ics" />
-    <item android:drawable="@drawable/btn_keyboard_key_light_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_ics_light" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_light" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_klp.xml b/java/res/drawable/btn_keyboard_key_klp.xml
index 56c295f..2a202a1 100644
--- a/java/res/drawable/btn_keyboard_key_klp.xml
+++ b/java/res/drawable/btn_keyboard_key_klp.xml
@@ -17,19 +17,19 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Action keys. -->
     <item android:state_active="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_klp" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_klp_dark" />
     <item android:state_active="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_active_klp" />
+          android:drawable="@drawable/btn_keyboard_key_active_klp_dark" />
 
     <!-- Toggle keys. Use checkable/checked state. -->
     <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_on_klp" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_on_klp_dark" />
     <item android:state_checkable="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_off_klp" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_off_klp_dark" />
     <item android:state_checkable="true" android:state_checked="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_on_klp" />
+          android:drawable="@drawable/btn_keyboard_key_normal_on_klp_dark" />
     <item android:state_checkable="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_off_holo" />
+          android:drawable="@drawable/btn_keyboard_key_normal_off_holo_dark" />
 
     <!-- Empty background keys. -->
     <item android:state_empty="true"
@@ -37,6 +37,6 @@
 
     <!-- Normal keys. -->
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_light_pressed_klp" />
-    <item android:drawable="@drawable/btn_keyboard_key_light_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_klp_light" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_light" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_lxx.xml b/java/res/drawable/btn_keyboard_key_lxx_dark.xml
similarity index 67%
rename from java/res/drawable/btn_keyboard_key_lxx.xml
rename to java/res/drawable/btn_keyboard_key_lxx_dark.xml
index fc19a0b..c56d4b3 100644
--- a/java/res/drawable/btn_keyboard_key_lxx.xml
+++ b/java/res/drawable/btn_keyboard_key_lxx_dark.xml
@@ -17,26 +17,26 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!-- Action keys. -->
     <item android:state_active="true" android:state_pressed="true"
-          android:drawable="@color/key_background_pressed_lxx" />
+          android:drawable="@color/key_background_pressed_lxx_dark" />
     <item android:state_active="true"
-          android:drawable="@color/key_background_lxx" />
+          android:drawable="@color/key_background_lxx_dark" />
 
     <!-- Toggle keys. Use checkable/checked state. -->
     <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_on_lxx" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_on_lxx_dark" />
     <item android:state_checkable="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_pressed_off_lxx" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_off_lxx_dark" />
     <item android:state_checkable="true" android:state_checked="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_on_lxx" />
+          android:drawable="@drawable/btn_keyboard_key_normal_on_lxx_dark" />
     <item android:state_checkable="true"
-          android:drawable="@drawable/btn_keyboard_key_dark_normal_off_lxx" />
+          android:drawable="@drawable/btn_keyboard_key_normal_off_lxx_dark" />
 
     <!-- Empty background keys. -->
     <item android:state_empty="true"
-          android:drawable="@color/key_background_lxx" />
+          android:drawable="@color/key_background_lxx_dark" />
 
     <!-- Normal keys. -->
     <item android:state_pressed="true"
-          android:drawable="@color/key_background_pressed_lxx" />
-    <item android:drawable="@color/key_background_lxx" />
+          android:drawable="@color/key_background_pressed_lxx_dark" />
+    <item android:drawable="@color/key_background_lxx_dark" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_key_popup_lxx.xml b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
similarity index 97%
rename from java/res/drawable/btn_keyboard_key_popup_lxx.xml
rename to java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
index 7daebc8..dee6457 100644
--- a/java/res/drawable/btn_keyboard_key_popup_lxx.xml
+++ b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
@@ -16,6 +16,6 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_popup_selected_lxx" />
+          android:drawable="@drawable/btn_keyboard_key_popup_selected_lxx_dark" />
     <item android:drawable="@android:color/transparent" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_spacebar_ics.xml b/java/res/drawable/btn_keyboard_spacebar_ics.xml
index 4530ea0..229f7a9 100644
--- a/java/res/drawable/btn_keyboard_spacebar_ics.xml
+++ b/java/res/drawable/btn_keyboard_spacebar_ics.xml
@@ -16,6 +16,6 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_light_pressed_ics" />
-    <item android:drawable="@drawable/btn_keyboard_key_light_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_ics_light" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_light" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_spacebar_klp.xml b/java/res/drawable/btn_keyboard_spacebar_klp.xml
index 6b07a39..9882f9a 100644
--- a/java/res/drawable/btn_keyboard_spacebar_klp.xml
+++ b/java/res/drawable/btn_keyboard_spacebar_klp.xml
@@ -16,6 +16,6 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_light_pressed_klp" />
-    <item android:drawable="@drawable/btn_keyboard_key_light_normal_holo" />
+          android:drawable="@drawable/btn_keyboard_key_pressed_klp_light" />
+    <item android:drawable="@drawable/btn_keyboard_key_normal_holo_light" />
 </selector>
diff --git a/java/res/drawable/btn_keyboard_spacebar_lxx.xml b/java/res/drawable/btn_keyboard_spacebar_lxx_dark.xml
similarity index 85%
rename from java/res/drawable/btn_keyboard_spacebar_lxx.xml
rename to java/res/drawable/btn_keyboard_spacebar_lxx_dark.xml
index 10d04a8..5c595d9 100644
--- a/java/res/drawable/btn_keyboard_spacebar_lxx.xml
+++ b/java/res/drawable/btn_keyboard_spacebar_lxx_dark.xml
@@ -16,6 +16,6 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
-          android:drawable="@color/key_background_pressed_lxx" />
-    <item android:drawable="@color/key_background_lxx" />
+          android:drawable="@color/key_background_pressed_lxx_dark" />
+    <item android:drawable="@color/key_background_lxx_dark" />
 </selector>
diff --git a/java/res/drawable/btn_suggestion_lxx.xml b/java/res/drawable/btn_suggestion_lxx_dark.xml
similarity index 97%
rename from java/res/drawable/btn_suggestion_lxx.xml
rename to java/res/drawable/btn_suggestion_lxx_dark.xml
index c73e1f7..84a9120 100644
--- a/java/res/drawable/btn_suggestion_lxx.xml
+++ b/java/res/drawable/btn_suggestion_lxx_dark.xml
@@ -23,5 +23,5 @@
 >
     <item
         android:state_pressed="true"
-        android:drawable="@color/suggested_word_background_selected_lxx" />
+        android:drawable="@color/suggested_word_background_selected_lxx_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_nature_light.xml b/java/res/drawable/ic_emoji_nature_holo_dark.xml
similarity index 74%
rename from java/res/drawable/ic_emoji_nature_light.xml
rename to java/res/drawable/ic_emoji_nature_holo_dark.xml
index 543409e..b946295 100644
--- a/java/res/drawable/ic_emoji_nature_light.xml
+++ b/java/res/drawable/ic_emoji_nature_holo_dark.xml
@@ -21,13 +21,13 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_nature_light_activated" />
+        android:drawable="@drawable/ic_emoji_nature_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_nature_light_activated" />
+        android:drawable="@drawable/ic_emoji_nature_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_nature_light_activated" />
+        android:drawable="@drawable/ic_emoji_nature_activated_holo_dark" />
     <item
-        android:drawable="@drawable/ic_emoji_nature_light_normal" />
+        android:drawable="@drawable/ic_emoji_nature_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_objects_light.xml b/java/res/drawable/ic_emoji_objects_holo_dark.xml
similarity index 74%
copy from java/res/drawable/ic_emoji_objects_light.xml
copy to java/res/drawable/ic_emoji_objects_holo_dark.xml
index 4096e69..266e81e 100644
--- a/java/res/drawable/ic_emoji_objects_light.xml
+++ b/java/res/drawable/ic_emoji_objects_holo_dark.xml
@@ -21,12 +21,12 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_objects_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_objects_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_objects_light_normal" />
+        android:drawable="@drawable/ic_emoji_objects_activated_holo_dark" />
+    <item android:drawable="@drawable/ic_emoji_objects_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_objects_light.xml b/java/res/drawable/ic_emoji_people_holo_dark.xml
similarity index 74%
copy from java/res/drawable/ic_emoji_objects_light.xml
copy to java/res/drawable/ic_emoji_people_holo_dark.xml
index 4096e69..15955d2 100644
--- a/java/res/drawable/ic_emoji_objects_light.xml
+++ b/java/res/drawable/ic_emoji_people_holo_dark.xml
@@ -21,12 +21,12 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_people_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_people_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_objects_light_normal" />
+        android:drawable="@drawable/ic_emoji_people_activated_holo_dark" />
+    <item android:drawable="@drawable/ic_emoji_people_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_people_light.xml b/java/res/drawable/ic_emoji_people_light.xml
deleted file mode 100644
index ea9e406..0000000
--- a/java/res/drawable/ic_emoji_people_light.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_people_light_activated" />
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_people_light_activated" />
-    <item
-        android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_people_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_people_light_normal" />
-</selector>
diff --git a/java/res/drawable/ic_emoji_objects_light.xml b/java/res/drawable/ic_emoji_places_holo_dark.xml
similarity index 74%
copy from java/res/drawable/ic_emoji_objects_light.xml
copy to java/res/drawable/ic_emoji_places_holo_dark.xml
index 4096e69..260bbd8 100644
--- a/java/res/drawable/ic_emoji_objects_light.xml
+++ b/java/res/drawable/ic_emoji_places_holo_dark.xml
@@ -21,12 +21,12 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_places_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_places_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_objects_light_normal" />
+        android:drawable="@drawable/ic_emoji_places_activated_holo_dark" />
+    <item android:drawable="@drawable/ic_emoji_places_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_places_light.xml b/java/res/drawable/ic_emoji_places_light.xml
deleted file mode 100644
index 312cad9..0000000
--- a/java/res/drawable/ic_emoji_places_light.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_places_light_activated" />
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_places_light_activated" />
-    <item
-        android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_places_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_places_light_normal" />
-</selector>
diff --git a/java/res/drawable/ic_emoji_objects_light.xml b/java/res/drawable/ic_emoji_recent_holo_dark.xml
similarity index 74%
copy from java/res/drawable/ic_emoji_objects_light.xml
copy to java/res/drawable/ic_emoji_recent_holo_dark.xml
index 4096e69..225caeb 100644
--- a/java/res/drawable/ic_emoji_objects_light.xml
+++ b/java/res/drawable/ic_emoji_recent_holo_dark.xml
@@ -21,12 +21,12 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_recent_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_recent_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_objects_light_normal" />
+        android:drawable="@drawable/ic_emoji_recent_activated_holo_dark" />
+    <item android:drawable="@drawable/ic_emoji_recent_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_recent_light.xml b/java/res/drawable/ic_emoji_recent_light.xml
deleted file mode 100644
index 8c2123f..0000000
--- a/java/res/drawable/ic_emoji_recent_light.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_recent_light_activated" />
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_recent_light_activated" />
-    <item
-        android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_recent_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_recent_light_normal" />
-</selector>
diff --git a/java/res/drawable/ic_emoji_objects_light.xml b/java/res/drawable/ic_emoji_symbols_holo_dark.xml
similarity index 74%
rename from java/res/drawable/ic_emoji_objects_light.xml
rename to java/res/drawable/ic_emoji_symbols_holo_dark.xml
index 4096e69..831d659 100644
--- a/java/res/drawable/ic_emoji_objects_light.xml
+++ b/java/res/drawable/ic_emoji_symbols_holo_dark.xml
@@ -21,12 +21,12 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item
         android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_symbols_activated_holo_dark" />
     <item
         android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
+        android:drawable="@drawable/ic_emoji_symbols_activated_holo_dark" />
     <item
         android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_objects_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_objects_light_normal" />
+        android:drawable="@drawable/ic_emoji_symbols_activated_holo_dark" />
+    <item android:drawable="@drawable/ic_emoji_symbols_normal_holo_dark" />
 </selector>
diff --git a/java/res/drawable/ic_emoji_symbols_light.xml b/java/res/drawable/ic_emoji_symbols_light.xml
deleted file mode 100644
index 79aaf0f..0000000
--- a/java/res/drawable/ic_emoji_symbols_light.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_focused="true"
-        android:drawable="@drawable/ic_emoji_symbols_light_activated" />
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/ic_emoji_symbols_light_activated" />
-    <item
-        android:state_selected="true"
-        android:drawable="@drawable/ic_emoji_symbols_light_activated" />
-    <item android:drawable="@drawable/ic_emoji_symbols_light_normal" />
-</selector>
diff --git a/java/res/drawable/keyboard_key_feedback_lxx.xml b/java/res/drawable/keyboard_key_feedback_lxx_dark.xml
similarity index 90%
rename from java/res/drawable/keyboard_key_feedback_lxx.xml
rename to java/res/drawable/keyboard_key_feedback_lxx_dark.xml
index 2abbc90..e624a8b 100644
--- a/java/res/drawable/keyboard_key_feedback_lxx.xml
+++ b/java/res/drawable/keyboard_key_feedback_lxx_dark.xml
@@ -20,17 +20,17 @@
 >
     <!-- Left edge -->
     <item latin:state_left_edge="true" latin:state_has_morekeys="true"
-          android:drawable="@drawable/keyboard_key_feedback_left_more_background_lxx" />
+          android:drawable="@drawable/keyboard_key_feedback_left_more_background_lxx_dark" />
     <item latin:state_left_edge="true"
-          android:drawable="@drawable/keyboard_key_feedback_left_background_lxx" />
+          android:drawable="@drawable/keyboard_key_feedback_left_background_lxx_dark" />
 
     <!-- Right edge -->
     <item latin:state_right_edge="true" latin:state_has_morekeys="true"
-          android:drawable="@drawable/keyboard_key_feedback_right_more_background_lxx" />
+          android:drawable="@drawable/keyboard_key_feedback_right_more_background_lxx_dark" />
     <item latin:state_right_edge="true"
-          android:drawable="@drawable/keyboard_key_feedback_right_background_lxx" />
+          android:drawable="@drawable/keyboard_key_feedback_right_background_lxx_dark" />
 
     <item latin:state_has_morekeys="true"
-          android:drawable="@drawable/keyboard_key_feedback_more_background_lxx" />
-    <item android:drawable="@drawable/keyboard_key_feedback_background_lxx" />
+          android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_dark" />
+    <item android:drawable="@drawable/keyboard_key_feedback_background_lxx_dark" />
 </selector>
diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml
index 7618871..c0c346e 100644
--- a/java/res/layout/emoji_palettes_view.xml
+++ b/java/res/layout/emoji_palettes_view.xml
@@ -41,11 +41,11 @@
                 android:id="@android:id/tabs"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:background="@drawable/tab_selected"
+                android:background="@drawable/emoji_category_tab_selected_holo_dark"
                 android:divider="@null"
                 android:tabStripEnabled="true"
-                android:tabStripLeft="@drawable/tab_unselected"
-                android:tabStripRight="@drawable/tab_unselected" />
+                android:tabStripLeft="@drawable/emoji_category_tab_unselected_holo_dark"
+                android:tabStripRight="@drawable/emoji_category_tab_unselected_holo_dark" />
             <FrameLayout
                 android:id="@android:id/tabcontent"
                 android:layout_width="0dip"
@@ -70,7 +70,6 @@
             android:layout_width="0dip"
             android:layout_weight="12.5"
             android:layout_height="match_parent"
-            android:background="@color/emoji_key_background_color"
             android:src="@drawable/sym_keyboard_delete_holo_dark"
             android:contentDescription="@string/spoken_description_delete" />
     </LinearLayout>
@@ -82,7 +81,7 @@
         android:id="@+id/emoji_category_page_id_view"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@color/emoji_category_page_id_view_background" />
+        android:background="@color/emoji_category_page_id_background_holo" />
     <LinearLayout
         android:id="@+id/emoji_action_bar"
         android:orientation="horizontal"
diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml
index a3a94ad..439b391 100644
--- a/java/res/values-af/strings-talkback-descriptions.xml
+++ b/java/res/values-af/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> voer outokorrigering uit"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Sleutelkode %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift aan (tik om te deaktiveer)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Kasslot aan (tik om te deaktiveer)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Meer simbole"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simbole"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Vee uit"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbole"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letters"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift geaktiveer"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Bokas-slot geaktiveer"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Simboolmodus"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Simbole-skuifsleutelmodus"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Meersimbole-modus"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Lettermodus"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Foonmodus"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Foonsimbool-modus"</string>
diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml
index 029efac..79c4d08 100644
--- a/java/res/values-am/strings-talkback-descriptions.xml
+++ b/java/res/values-am/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> የራስ ሰር እርማት ያከናውናል"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"የቁልፍ ኮድ %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"ቀይር"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"መቀያየሪያ ቁልፍ በርቷል (ለማሰናከል መታ ያድርጉ)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"አብይ ፊደል ማድረጊያ ቁልፍ በርቷል (ለማሰናክል ነካ ያድርጉ)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"ተጨማሪ ምልክቶች"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"ምልክቶች"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"ሰርዝ"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"ምልክቶች"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"ደብዳቤዎች"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"መቀያየሪያ ቁልፍ ነቅቷል"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"አብይ ፊደል ማድረጊያ ቁልፍ ነቅቷል"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"የምልክቶች ሁኔታ"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"የምልክቶች ቀይር ሁነታ"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"የተጨማሪ ምልክቶች ሁነታ"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"የደብዳቤዎች ሁኔታ"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"የስልክ ሁኔታ"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"የስልክ ምልክቶች ሁኔታ"</string>
diff --git a/java/res/values-ar/strings-talkback-descriptions.xml b/java/res/values-ar/strings-talkback-descriptions.xml
index 4a97582..a9110a7 100644
--- a/java/res/values-ar/strings-talkback-descriptions.xml
+++ b/java/res/values-ar/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> لإجراء التصحيح التلقائي"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"‏رمز المفتاح %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"‏Shift يعمل (انقر للتعطيل)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"‏Caps lock يعمل (انقر للتعطيل)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"المزيد من الرموز"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"رموز"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"حذف"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"رموز"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"أحرف"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"‏تم تمكين Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"‏تم تمكين Caps lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"وضع الرموز"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"وضع تبديل الرموز"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"المزيد من وضع الرموز"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"وضع الأحرف"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"وضع الهاتف"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"وضع رموز الهاتف"</string>
diff --git a/java/res/values-az-rAZ/strings-talkback-descriptions.xml b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
index 3215897..0ff31f3 100644
--- a/java/res/values-az-rAZ/strings-talkback-descriptions.xml
+++ b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> avto-korreksiyanı həyata keçirir"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"%d açar kodu"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Sürüşdürmə"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Sürüşdürmə aktivdir (deaktiv etmək üçün klikləyin)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Böyük hərf kilidi aktivdir (deaktiv etmək üçün klikləyin)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Daha çox simvol"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Sürüşdürmə"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simvollar"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Sürüşdürmə"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Sil"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simvollar"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Hərflər"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Sürüşdürmə aktivdir"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Böyük hərf kilidi aktivdir"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Simvol rejimi"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Simvol dəyişmə rejimi"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Daha çox simvol rejimi"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Hərf rejimi"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefon rejimi"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefon simvol rejimi"</string>
diff --git a/java/res/values-bg/strings-talkback-descriptions.xml b/java/res/values-bg/strings-talkback-descriptions.xml
index 483f778..4b8168c 100644
--- a/java/res/values-bg/strings-talkback-descriptions.xml
+++ b/java/res/values-bg/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"„<xliff:g id="KEY_NAME">%1$s</xliff:g>“ изпълнява автоматично коригиране"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Код на клавишa %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"„Shift“ е включен (докоснете за деактивиране)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"„Caps lock“ е включен (докоснете за деактивиране)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Delete"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Символи"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Букви"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"„Shift“ е активиран"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"„Caps Lock“ е активиран"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Режим за символи"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Режим за промяна на символите"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Режим за букви"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Режим за телефонни номера"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Режим за символи на телефона"</string>
diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml
index 77894e7..bd6077a 100644
--- a/java/res/values-ca/strings-talkback-descriptions.xml
+++ b/java/res/values-ca/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa la correcció automàtica."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Clau de codi %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Maj"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Maj activat (toca per desactivar)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Bloq Maj activat (toca per desactivar)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Més símbols"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Maj"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbols"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Maj"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Suprimeix"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbols"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Lletres"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Maj activat"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Bloq Maj activat"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode de símbols"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mode de canvi de símbols"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode de més símbols"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode de lletres"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode de telèfon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode de símbols de telèfon"</string>
diff --git a/java/res/values-cs/strings-talkback-descriptions.xml b/java/res/values-cs/strings-talkback-descriptions.xml
index 8f97f12..0e35c82 100644
--- a/java/res/values-cs/strings-talkback-descriptions.xml
+++ b/java/res/values-cs/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Klávesou <xliff:g id="KEY_NAME">%1$s</xliff:g> provedete automatickou opravu"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kód klávesy %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Klávesa Shift je zapnutá (vypnete ji klepnutím)."</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Klávesa Caps Lock je zapnutá (vypnete ji klepnutím)."</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Další symboly"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboly"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Smazat"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboly"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Písmena"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Klávesa Shift je aktivní"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Klávesa Caps Lock je aktivní"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Režim symbolů"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Režim změny symbolů"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Režim dalších symbolů"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Režim písmen"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Režim telefonu"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Režim telefonních symbolů"</string>
diff --git a/java/res/values-da/strings-talkback-descriptions.xml b/java/res/values-da/strings-talkback-descriptions.xml
index f4e3e16..669c183 100644
--- a/java/res/values-da/strings-talkback-descriptions.xml
+++ b/java/res/values-da/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> udfører automatisk stavekontrol"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Tastekode %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift er aktiveret (tryk for at deaktivere)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock er slået til (tryk for at deaktivere)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Flere symboler"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift-tast"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboler"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift-tast"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Slet"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboler"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Bogstaver"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift er aktiveret"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock er aktiveret"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symboltilstand"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symboltilstand"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Tilstaden Flere symboler"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Bogstavtilstand"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefontilstand"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefonsymboltilstand"</string>
diff --git a/java/res/values-de/strings-talkback-descriptions.xml b/java/res/values-de/strings-talkback-descriptions.xml
index 953249b..d5c54e0 100644
--- a/java/res/values-de/strings-talkback-descriptions.xml
+++ b/java/res/values-de/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Mit <xliff:g id="KEY_NAME">%1$s</xliff:g> erfolgt eine Autokorrektur."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Tastencode %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Umschalttaste"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Umschalttaste aktiviert (zum Deaktivieren berühren)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Feststelltaste aktiviert (zum Deaktivieren berühren)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Weitere Symbole"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift-Taste"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symbole"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift-Taste"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Löschen"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbole"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Buchstaben"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Umschalttaste aktiviert"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Feststelltaste aktiviert"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbolmodus"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symbolumschaltmodus"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modus \"Weitere Symbole\""</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Buchstabenmodus"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefonmodus"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefon-Symbolmodus"</string>
diff --git a/java/res/values-el/strings-talkback-descriptions.xml b/java/res/values-el/strings-talkback-descriptions.xml
index 28d31a1..aef593c 100644
--- a/java/res/values-el/strings-talkback-descriptions.xml
+++ b/java/res/values-el/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> εκτελεί αυτόματη διόρθωση"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Κωδικός πλήκτρου %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Το Shift είναι ενεργοποιημένο (πατήστε για απενεργοποίηση)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Το Caps lock είναι ενεργοποιημένο (πατήστε για απενεργοποίηση)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Περισσότερα σύμβολα"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Σύμβολα"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Διαγραφή"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Σύμβολα"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Γράμματα"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Το Shift είναι ενεργοποιημένο"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Το Caps lock είναι ενεργοποιημένο"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Λειτουργία συμβόλων"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Λειτουργία μετατόπισης συμβόλων"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Λειτουργία περισσότερων συμβόλων"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Λειτουργία γραμμάτων"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Λειτουργία τηλεφώνου"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Λειτουργία συμβόλων τηλεφώνου"</string>
diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml
index ccf5188..c6c8f6d 100644
--- a/java/res/values-en-rGB/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Key code %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift on (tap to disable)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock on (tap to disable)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symbols"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Delete"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbols"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letters"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift enabled"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock enabled"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbols mode"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symbols shift mode"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"More symbols mode"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Letters mode"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Phone mode"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Phone symbols mode"</string>
diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml
index ccf5188..c6c8f6d 100644
--- a/java/res/values-en-rIN/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Key code %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift on (tap to disable)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock on (tap to disable)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symbols"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Delete"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbols"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letters"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift enabled"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock enabled"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbols mode"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symbols shift mode"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"More symbols mode"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Letters mode"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Phone mode"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Phone symbols mode"</string>
diff --git a/java/res/values-es-rUS/strings-talkback-descriptions.xml b/java/res/values-es-rUS/strings-talkback-descriptions.xml
index b64ccae..7ccc35f 100644
--- a/java/res/values-es-rUS/strings-talkback-descriptions.xml
+++ b/java/res/values-es-rUS/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige automáticamente."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Clave de código %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Mayúsculas"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Mayúsculas activado (presiona para desactivarlo)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Bloqueo de mayúsculas activado (presiona para desactivarlo)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Más símbolos"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Mayúscula"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbolos"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Mayúscula"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Eliminar"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Mayúsculas activado"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Bloqueo de mayúsculas activado"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo Símbolos"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Modo de cambio de símbolos"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modo de más símbolos"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo Letras"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo Teléfono"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo Símbolos del teléfono"</string>
diff --git a/java/res/values-es/strings-talkback-descriptions.xml b/java/res/values-es/strings-talkback-descriptions.xml
index c539e70..2e21b6c 100644
--- a/java/res/values-es/strings-talkback-descriptions.xml
+++ b/java/res/values-es/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corregirá la palabra automáticamente"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Código del teclado: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Mayús"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Mayúsculas activadas (tocar para inhabilitar)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Bloqueo de mayúsculas activado (tocar para inhabilitar)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Más símbolos"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Mayús"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbolos"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Mayús"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Eliminar"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Mayúsculas habilitadas"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Bloq Mayús habilitado"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo de símbolos"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Modo de cambio de símbolos"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modo de más símbolos"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo de letras"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo de teléfono"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo de símbolos de teléfono"</string>
diff --git a/java/res/values-et-rEE/strings-talkback-descriptions.xml b/java/res/values-et-rEE/strings-talkback-descriptions.xml
index dcad8dd..0001071 100644
--- a/java/res/values-et-rEE/strings-talkback-descriptions.xml
+++ b/java/res/values-et-rEE/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> teeb automaatse paranduse"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Klahvi kood: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Tõstuklahv"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Tõstuklahv sees (puudutage keelamiseks)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Suurtähelukk on sees (puudutage keelamiseks)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Rohkem sümboleid"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Tõstuklahv"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Sümbolid"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Tõstuklahv"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Kustutamine"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Sümbolid"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Tähed"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Tõstuklahv on lubatud"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Suurtähelukk on lubatud"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Sümbolite režiim"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Sümbolite tõsturežiim"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Režiim Rohkem sümboleid"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Tähtede režiim"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefonirežiim"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefoni sümbolite režiim"</string>
diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml
index bd3fa20..a8f4e1f 100644
--- a/java/res/values-fa/strings-talkback-descriptions.xml
+++ b/java/res/values-fa/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> تصحیح خودکار را انجام می‌دهد"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"‏کد کلید %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"‏Shift روشن است (برای غیرفعال کردن ضربه بزنید)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"‏Caps Lock روشن است (برای غیرفعال کردن ضربه بزنید)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"نمادهای بیشتر"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"تغییر وضعیت"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"نمادها"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"تغییر وضعیت"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"حذف"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"نمادها"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"حروف"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"‏Shift فعال شد"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"‏Caps lock فعال شد"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"حالت نمادها"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"حالت تغییر نمادها"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"حالت نمادهای بیشتر"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"حالت حروف"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"حالت تلفن"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"حالت نمادهای تلفن"</string>
diff --git a/java/res/values-fi/strings-talkback-descriptions.xml b/java/res/values-fi/strings-talkback-descriptions.xml
index 2ba3cdc..80cf8f9 100644
--- a/java/res/values-fi/strings-talkback-descriptions.xml
+++ b/java/res/values-fi/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> suorittaa automaattisen korjauksen"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Näppäimen koodi %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Vaihto"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Vaihto päällä (poista käytöstä napauttamalla)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock päällä (poista käytöstä napauttamalla)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Delete"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbolit"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Kirjaimet"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Vaihto päällä"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock päällä"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbolit-tila"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symbolien vaihtotila"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Näppäimistötila"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Puhelintila"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Puhelinsymbolit-tila"</string>
diff --git a/java/res/values-fr-rCA/strings-talkback-descriptions.xml b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
index f6f1fbb..7f9eaaa 100644
--- a/java/res/values-fr-rCA/strings-talkback-descriptions.xml
+++ b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet d\'effectuer une correction automatique"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Code touche %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Majuscule"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Touche Majuscule activée (toucher pour désactiver)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Verrouillage des majuscules activé (toucher pour désactiver)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Autres symboles"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Majuscule"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboles"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Majuscule"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Supprimer"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboles"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Lettres"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Touche Maj activée"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Verrouillage des majuscules activé"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode Symboles"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mode majuscule pour les symboles"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode Autres symboles"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode Lettres"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode Téléphone"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode Symboles du téléphone"</string>
diff --git a/java/res/values-fr/strings-talkback-descriptions.xml b/java/res/values-fr/strings-talkback-descriptions.xml
index 49e68dd..97f5c6c 100644
--- a/java/res/values-fr/strings-talkback-descriptions.xml
+++ b/java/res/values-fr/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet d\'effectuer une correction automatique."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Code touche %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Maj"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Touche Maj activée (appuyer pour désactiver)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Verrouillage des majuscules activé (appuyer pour désactiver)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Autres symboles"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Maj"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboles"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Maj"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Supprimer"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboles"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Lettres"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"La touche Maj a bien été activée."</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Le verrouillage des majuscules a bien été activé."</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode Symboles"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mode majuscule pour les symboles"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode Autres symboles"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode Lettres"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode Téléphone"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode Symboles du téléphone"</string>
diff --git a/java/res/values-hi/strings-talkback-descriptions.xml b/java/res/values-hi/strings-talkback-descriptions.xml
index 55d4578..39e53ad 100644
--- a/java/res/values-hi/strings-talkback-descriptions.xml
+++ b/java/res/values-hi/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> स्वत: सुधार करता है"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"कुंजी कोड %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"शिफ़्ट"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"शिफ़्ट चालू (अक्षम करने के लिए टैप करें)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"कैप्स लॉक चालू (अक्षम करने के लिए टैप करें)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"और प्रतीक"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"शिफ़्ट"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"प्रतीक"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"शिफ़्ट"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"डिलीट"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"प्रतीक"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"अक्षर"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"शिफ़्ट सक्षम किया गया"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"कैप्स लॉक सक्षम किया गया"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"प्रतीक मोड"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"प्रतीक शिफ़्ट मोड"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"और प्रतीक मोड"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"अक्षर मोड"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"फ़ोन मोड"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"फ़ोन प्रतीक मोड"</string>
diff --git a/java/res/values-hr/strings-talkback-descriptions.xml b/java/res/values-hr/strings-talkback-descriptions.xml
index b9e3477..e131016 100644
--- a/java/res/values-hr/strings-talkback-descriptions.xml
+++ b/java/res/values-hr/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> vrši samoispravljanje"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kôd tipke %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Uključena je tipka Shift (dodirnite za onemogućivanje)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Uključeno je pisanje velikim slovima (Caps Lock) (dodirnite za onemogućivanje)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Brisanje"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simboli"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Slova"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Omogućena je tipka Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Omogućen je Caps Lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Način unosa simbola"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Način shift simbola"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Način unosa slova"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefonski način rada"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Način unosa telefonskih simbola"</string>
diff --git a/java/res/values-hu/strings-talkback-descriptions.xml b/java/res/values-hu/strings-talkback-descriptions.xml
index ef786bc..2bf2a8a 100644
--- a/java/res/values-hu/strings-talkback-descriptions.xml
+++ b/java/res/values-hu/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> billentyű automatikus javítást végez"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Billentyűkód: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"A Shift be van kapcsolva (érintse meg a kikapcsoláshoz)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"A Caps lock be van kapcsolva (érintse meg a kikapcsoláshoz)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"További szimbólumok"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Szimbólumok"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Törlés"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Szimbólumok"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Betűk"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift bekapcsolva"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock bekapcsolva"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"„Szimbólumok” mód"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Szimbólumok mód"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"További szimbólumok mód"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"„Betű” mód"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"„Telefon” mód"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"„Telefonos szimbólumok” mód"</string>
diff --git a/java/res/values-hy-rAM/strings-talkback-descriptions.xml b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
index 8e5ff67..bbf20cf 100644
--- a/java/res/values-hy-rAM/strings-talkback-descriptions.xml
+++ b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ստեղնը ինքնաշտկում է կատարում"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Բանալու կոդը՝ %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift-ը միացված է (հպել անջատելու համար)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock-ը միացված է (հպել՝ անջատելու համար)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Ջնջել"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Նշաններ"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Տառեր"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift-ը միացված է"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock-ը միացված է"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Նշանների ռեժիմ"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Մեծատառերի ռեժիմ"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Տառերի ռեժիմ"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Հեռախոսային ռեժիմ"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Հեռախոսի նշանների ռեժիմ"</string>
diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml
index af03337..8f51fb7 100644
--- a/java/res/values-in/strings-talkback-descriptions.xml
+++ b/java/res/values-in/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan koreksi otomatis"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kode tombol %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift aktif (ketuk untuk menonaktifkan)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock aktif (ketuk untuk menonaktifkan)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Hapus"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbol"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Huruf"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift diaktifkan"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock diaktifkan"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode simbol"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mode mengubah simbol"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode huruf"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode telepon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode simbol telepon"</string>
diff --git a/java/res/values-it/strings-talkback-descriptions.xml b/java/res/values-it/strings-talkback-descriptions.xml
index d6b55ae..f1d0dae 100644
--- a/java/res/values-it/strings-talkback-descriptions.xml
+++ b/java/res/values-it/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> esegue la correzione automatica"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Codice tasto %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Maiusc"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Maiusc attivo (tocca per disattivare)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Blocco maiuscole attivo (tocca per disattivare)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Altri simboli"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Maiusc"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simboli"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Maiusc"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Elimina"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simboli"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Lettere"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Maiusc attivo"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Bloc Maiusc attivo"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modalità simboli"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Modalità tastiera simboli"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modalità altri simboli"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modalità lettere"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modalità telefono"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modalità simboli telefono"</string>
diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml
index 8955134..eee16eb 100644
--- a/java/res/values-iw/strings-talkback-descriptions.xml
+++ b/java/res/values-iw/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> מבצע תיקון אוטומטי"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"‏קוד מקש %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"‏Shift פועל (הקש כדי להשבית)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"‏Caps Lock פועל (הקש כדי להשבית)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"סמלים נוספים"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"סמלים"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"מחק"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"סמלים"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"אותיות"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"‏Shift פועל"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"‏Caps Lock פועל"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"מצב סמלים"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"מצב החלפת סמלים"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"מצב \'סמלים נוספים\'"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"מצב אותיות"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"מצב טלפון"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"מצב סמלי טלפון"</string>
diff --git a/java/res/values-ja/strings-talkback-descriptions.xml b/java/res/values-ja/strings-talkback-descriptions.xml
index 6e917bc..2479603 100644
--- a/java/res/values-ja/strings-talkback-descriptions.xml
+++ b/java/res/values-ja/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g>で自動修正が実行されます"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"キーコード: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift有効(タップして解除)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"CapsLock有効(タップして解除)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"記号拡張"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"記号"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"削除"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"記号"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"英字"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift有効"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"CapsLock有効"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"記号モード"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"シンボルshiftモード"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"記号拡張モード"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"英数モード"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"電話モード"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"電話記号モード"</string>
diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
index bd131e1..5771a80 100644
--- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml
+++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ასრულებს ავტოკორექციას"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"კლავიატურის კოდი %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift ჩართულია (შეეხეთ გამოსართავად)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"ჩართულია Caps (შეეხეთ გამოსართავად)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"წაშლა"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"სიმბოლოები"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"ასოები"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ჩართულია"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"ჩართულია Caps"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"სიმბოლოების რეჟიმი"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"სიმბოლოების shift რეჟიმი"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"ასოების რეჟიმი"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"ტელეფონის რეჟიმი"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"ტელეფონის სიმბოლოების რეჟიმი"</string>
diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml
index ef415a9..7a2c710 100644
--- a/java/res/values-km-rKH/strings-talkback-descriptions.xml
+++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> អនុវត្ត​ការ​កែ​ស្វ័យ​ប្រវត្តិ"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"កូដ​គ្រាប់​ចុច %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"បើក Shift (​ប៉ះ​ដើម្បី​បិទ)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"បើក Caps lock (ប៉ះ​​ដើម្បី​បិទ)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"និមិត្ត​សញ្ញា​​ច្រើន​ទៀត"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"និមិត្តសញ្ញា"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"លុប"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"និមិត្តសញ្ញា"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"អក្សរ"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"បាន​បើក Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"បាន​បើក Caps lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"របៀប​និមិត្ត​សញ្ញា"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"របៀប Symbols shift"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"របៀប​និមិត្ត​សញ្ញា​​ច្រើន​ទៀត"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"របៀប​អក្សរ"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"របៀប​ទូរស័ព្ទ"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"​របៀប​និមិត្ត​សញ្ញា​ទូរស័ព្ទ"</string>
diff --git a/java/res/values-ko/strings-talkback-descriptions.xml b/java/res/values-ko/strings-talkback-descriptions.xml
index 71c49d7..7ead943 100644
--- a/java/res/values-ko/strings-talkback-descriptions.xml
+++ b/java/res/values-ko/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g>을(를) 누르면 자동 수정됩니다."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"키 코드 %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 키"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift 사용(사용하지 않으려면 탭하세요.)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock 사용(사용하지 않으려면 탭하세요.)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"삭제"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"기호"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"문자"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift 사용"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock 사용"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"기호 모드"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"기호 전환 모드"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"문자 모드"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"다이얼 모드"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"전화 기호 모드"</string>
diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
index b67ec96..4b9294c 100644
--- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ດຳ​ເນີນ​ການ​ແກ້​ໄຂ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"ລະຫັດ​ກະແຈ %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift ເປີດ​ນຳໃຊ້ຢູ່ (ກົດ​ເພື່ອ​ປິດນຳໃຊ້)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock ເປີດຢູ່ (ກົດ​ເພື່ອ​ປິດນຳໃຊ້)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"​ສັນ​ຍາ​ລັກ​ເພີ່ມ​ເຕີມ"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"​ສັນ​ຍາ​ລັກ"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"ລຶບ"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"ສັນຍາລັກ"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"ໂຕອັກ​ສອນ"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ເປີດ​ນຳໃຊ້ຢູ່"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock ເປີດນຳໃຊ້ຢູ່"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"ໂຫມດ​ສັນຍາລັກ"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"ຊີມໂບຊິບໂໝດ"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"ໂໝດ​ສັນ​ຍາ​ລັກ​ເພີ່ມ​ເຕີມ"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"ໂຫມດ​ໂຕອັກ​ສອນ"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"ໂຫມດ​ໂທລະສັບ"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"ໂຫມດ​ສັນຍາລັກ​ໂທລະສັບ"</string>
diff --git a/java/res/values-lt/strings-talkback-descriptions.xml b/java/res/values-lt/strings-talkback-descriptions.xml
index e584180..63b52a1 100644
--- a/java/res/values-lt/strings-talkback-descriptions.xml
+++ b/java/res/values-lt/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> atlieka automatinį taisymą"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Klavišo kodas %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Klavišas „Shift“"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Klavišas „Shift“ įjungtas (palieskite, kad išjungtumėte)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Įjungtos didžiosios raidės (palieskite, kad išjungtumėte)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Daugiau simbolių"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Klavišas „Shift“"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simboliai"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Klavišas „Shift“"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Ištrinti"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbolių klavišas"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Raidžių klavišas"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Klavišas „Shift“ įgalintas"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Didžiųjų raidžių klavišas įgalintas"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Simbolių režimas"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Simbolių perjungimo režimas"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Daugiau simbolių režimas"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Raidžių režimas"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefonų numerių režimas"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefonų numerių simbolių režimas"</string>
diff --git a/java/res/values-lv/strings-talkback-descriptions.xml b/java/res/values-lv/strings-talkback-descriptions.xml
index 8278e63..81a65c4 100644
--- a/java/res/values-lv/strings-talkback-descriptions.xml
+++ b/java/res/values-lv/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Taustiņam <xliff:g id="KEY_NAME">%1$s</xliff:g> ir automātiskas labošanas funkcija."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Taustiņu kods %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Pārslēgšanas taustiņš"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Pārslēgšanas režīms ir iespējots (pieskarieties, lai atspējotu)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Burtslēgs ir iespējots (pieskarieties, lai atspējotu)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Citi simboli"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Pārslēgšanas taustiņš"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simboli"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Pārslēgšanas taustiņš"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Dzēšanas taustiņš"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simboli"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Burti"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Pārslēgšanas režīms ir iespējots"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Burtslēgs ir iespējots"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Simbolu režīms"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Simbolu pārslēgšanas režīms"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Citu simbolu režīms"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Burtu režīms"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Tālruņa režīms"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Tālruņa simbolu režīms"</string>
diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
index f4c608e..fb0d382 100644
--- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml
+++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> авто-залруулалт хийдэг"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Товчийн код %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Шифт"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Сэлгэхийг идэвхжүүлсэн (товшиж идэвхгүйжүүлнэ үү)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Томоор бичихийг асаасан (товшиж идэвхгүйжүүлнэ үү)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Өөр тэмдэгтүүд"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Шифт"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Симбол"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Шифт"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Устгах"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Симбол"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Үсэгнүүд"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Сэлгэхийг идэвхжүүлсэн"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Томоор бичихийг идэвхжүүлсэн"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Симбол төлөв"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Симбол сэлгэх горим"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Өөр тэмдэгтийн горим"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Үсэгнүүд төлөв"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Утасны төлөв"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Утасны символ төлөв"</string>
diff --git a/java/res/values-ms-rMY/strings-talkback-descriptions.xml b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
index cbdd02f..9acae9a 100644
--- a/java/res/values-ms-rMY/strings-talkback-descriptions.xml
+++ b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan auto pembetulan"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kod kunci %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Kunci anjak dihidupkan (ketik untuk melumpuhkan)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Kunci huruf besar dihidupkan (ketik untuk melumpuhkan)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Padam"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbol"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Huruf"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Kunci anjak didayakan"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Kunci huruf besar didayakan"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mod simbol"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mod shift simbol"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mod huruf"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mod telefon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mod simbol telefon"</string>
diff --git a/java/res/values-nb/strings-talkback-descriptions.xml b/java/res/values-nb/strings-talkback-descriptions.xml
index 23a6c85..cdf8057 100644
--- a/java/res/values-nb/strings-talkback-descriptions.xml
+++ b/java/res/values-nb/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> utfører automatisk retting"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Tastaturkode %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift er på (trykk for å deaktivere)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock er på (trykk for å deaktivere)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Flere symboler"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboler"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Slett"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboler"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Bokstaver"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift er aktivert"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock er aktivert"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbolmodus"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Shift-modus for symboler"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modus for flere symboler"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Bokstavmodus"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Ringemodus"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Ringemodus med symboler"</string>
diff --git a/java/res/values-ne-rNP/strings-talkback-descriptions.xml b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
index a1602bb..3395d1b 100644
--- a/java/res/values-ne-rNP/strings-talkback-descriptions.xml
+++ b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ले स्वतः सच्याउने गर्छ"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"कुञ्जी कोड %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"सिफ्ट"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"सिफ्ट सक्रिय छ (असक्षम पार्न ट्याप गर्नुहोस्)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"क्याप्स लक सकृय छ (असक्षम पार्न ट्याप गर्नुहोस्)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"मेटाउनुहोस्"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"प्रतिकहरू"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"अक्षरहरू"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"सिफ्ट सक्षम पारिएको छ"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"क्याप्स लक सक्षम पारिएको छ"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"प्रतिक ढाँचा"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"प्रतीक सिफ्ट ढाँचा"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"अक्षर ढाँचा"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"फोन ढाँचा"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"फोन प्रतिक मोड"</string>
diff --git a/java/res/values-nl/strings-talkback-descriptions.xml b/java/res/values-nl/strings-talkback-descriptions.xml
index df87659..7d61d56 100644
--- a/java/res/values-nl/strings-talkback-descriptions.xml
+++ b/java/res/values-nl/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Met <xliff:g id="KEY_NAME">%1$s</xliff:g> voert u automatische correctie uit"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Toetscode %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift aan (tik om uit te schakelen)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock aan (tik om uit te schakelen)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Meer symbolen"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symbolen"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Verwijderen"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbolen"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letters"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ingeschakeld"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock ingeschakeld"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbolen"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Shift-modus voor symbolen"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modus voor meer symbolen"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Alfanumeriek toetsenbord"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Toetsenbord telefoon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefoonsymbolen"</string>
diff --git a/java/res/values-pl/strings-talkback-descriptions.xml b/java/res/values-pl/strings-talkback-descriptions.xml
index d40a107..da5f46b 100644
--- a/java/res/values-pl/strings-talkback-descriptions.xml
+++ b/java/res/values-pl/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> wykonuje autokorektę"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kod klawisza: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift włączony (kliknij, by wyłączyć)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock włączony (kliknij, by wyłączyć)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Więcej symboli"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symbole"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Usuń"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symbole"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Litery"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift włączony"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock włączony"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Tryb symboli"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Tryb zmiany symboli"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Tryb dodatkowych symboli"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Tryb liter"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Tryb telefonu"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Tryb symboli telefonu"</string>
diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
index 5495a63..b49b58b 100644
--- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml
+++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa a correção automática"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Código da tecla %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift ativado (tocar para desativar)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock ativado (tocar para desativar)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbolos"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Eliminar"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ativado"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock ativado"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo de símbolos"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Modo para alternar símbolos"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modo Mais símbolos"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo de letras"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo de telemóvel"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo de símbolos de telemóvel"</string>
diff --git a/java/res/values-pt/strings-talkback-descriptions.xml b/java/res/values-pt/strings-talkback-descriptions.xml
index 47ab196..b9a70f3 100644
--- a/java/res/values-pt/strings-talkback-descriptions.xml
+++ b/java/res/values-pt/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> realiza correção automática"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Código de tecla %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift ativado (toque para desativar)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock ativado (toque para desativar)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Excluir"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ativado"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock ativado"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo de símbolos"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Modo de alternância de símbolos"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo de letras"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo de telefone"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo de símbolos do telefone"</string>
diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml
index de19bf1..0398123 100644
--- a/java/res/values-ro/strings-talkback-descriptions.xml
+++ b/java/res/values-ro/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> efectuează corectare automată"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Tasta cu codul %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Tasta Shift este activată (apăsați pentru a o dezactiva)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Tasta Caps Lock este activată (apăsați pentru a o dezactiva)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Ștergeți"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simboluri"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Litere"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Tasta Shift a fost activată"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Tasta Caps Lock este activată"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modul Simboluri"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Mod shift simboluri"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modul Alfanumeric"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modul Telefon"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modul Telefon cu simboluri"</string>
diff --git a/java/res/values-ru/strings-talkback-descriptions.xml b/java/res/values-ru/strings-talkback-descriptions.xml
index a38da0f..e3ad265 100644
--- a/java/res/values-ru/strings-talkback-descriptions.xml
+++ b/java/res/values-ru/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Клавиша <xliff:g id="KEY_NAME">%1$s</xliff:g> выполняет автоисправление."</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Код клавиши %d."</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Клавиша верхнего регистра."</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Верхний регистр включен. Нажмите, чтобы отключить."</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock включен. Нажмите, чтобы отключить."</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Удалить."</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Символы."</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Буквы."</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Верхний регистр включен."</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock включен."</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Режим добавления символов."</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Режим ввода символов в верхнем регистре."</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Режим ввода текста."</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Режим набора номера."</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Режим телефонных символов."</string>
diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml
index 256eb39..9c0a857 100644
--- a/java/res/values-sk/strings-talkback-descriptions.xml
+++ b/java/res/values-sk/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Klávesom <xliff:g id="KEY_NAME">%1$s</xliff:g> spustíte automatické opravy"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Kód klávesa %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Kláves Shift je zapnutý (zakážete ho klepnutím)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Kláves Caps Lock je zapnutý (zakážete ho klepnutím)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Ďalšie symboly"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboly"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Odstrániť"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboly"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Písmená"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Kláves Shift je povolený"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Kláves Caps Lock je povolený"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Režim symbolov"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Režim klávesnice symbolov"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Režim ďalších symbolov"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Režim písmen"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Režim telefónu"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Režim telefónnych symbolov"</string>
diff --git a/java/res/values-sl/strings-talkback-descriptions.xml b/java/res/values-sl/strings-talkback-descriptions.xml
index 8a35f0f..9cb296c 100644
--- a/java/res/values-sl/strings-talkback-descriptions.xml
+++ b/java/res/values-sl/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Tipka <xliff:g id="KEY_NAME">%1$s</xliff:g> izvede samopopravek"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Koda tipke %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Tipka Shift je vklopljena (dotaknite se, da jo onemogočite)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Tipka Caps lock je vklopljena (dotaknite se, da jo onemogočite)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Več simbolov"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simboli"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Izbriši"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simboli"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Črke"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Način »Shift« je omogočen"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Funkcija »Caps Lock« je omogočena"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Način simbolov"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Način preklopa simbolov"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Način za več simbolov"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Način črk"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Način telefona"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Način simbolov telefona"</string>
diff --git a/java/res/values-sr/strings-talkback-descriptions.xml b/java/res/values-sr/strings-talkback-descriptions.xml
index 626bccc..1eea084 100644
--- a/java/res/values-sr/strings-talkback-descriptions.xml
+++ b/java/res/values-sr/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> обавља аутоматско исправљање"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Кôд тастера %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift је укључен (додирните да бисте га онемогућили)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock је укључен (додирните да бисте га онемогућили)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Избриши"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Симболи"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Слова"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift је омогућен"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock је омогућен"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Режим симбола"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Shift режим симбола"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Режим слова"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Режим телефона"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Режим симбола телефона"</string>
diff --git a/java/res/values-sv/strings-talkback-descriptions.xml b/java/res/values-sv/strings-talkback-descriptions.xml
index 50078fd..062d337 100644
--- a/java/res/values-sv/strings-talkback-descriptions.xml
+++ b/java/res/values-sv/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Om du trycker på <xliff:g id="KEY_NAME">%1$s</xliff:g> utförs autokorrigering"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Nyckelkod %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Skift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Skift är aktiverat (tryck för att inaktivera)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock på (tryck för att inaktivera)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Fler symboler"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Skift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Symboler"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Skift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Ta bort"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Symboler"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Bokstäver"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Skift aktiverat"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock är aktiverat"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbolläge"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Symbolskiftningsläge"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Läge med fler symboler"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Bokstavsläge"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefonläge"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefonsymbolläge"</string>
diff --git a/java/res/values-sw/strings-talkback-descriptions.xml b/java/res/values-sw/strings-talkback-descriptions.xml
index 11ac28e..e7ab49f 100644
--- a/java/res/values-sw/strings-talkback-descriptions.xml
+++ b/java/res/values-sw/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> hufanya marekebisho otomatiki"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Msimbo wa kitufe %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift imewashwa (gonga ili kuizima)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock imewashwa (gonga ili kuizima)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Alama zaidi"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Badilisha"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Alama"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Badilisha"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Futa"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Alama"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Herufi"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift imewashwa"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock imewashwa"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Hali ya alama"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Hali ya kubadilisha Alama"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Hali ya alama zaidi"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Hali ya herufi"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Hali ya simu"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Hali ya alama za simu"</string>
diff --git a/java/res/values-th/strings-talkback-descriptions.xml b/java/res/values-th/strings-talkback-descriptions.xml
index 0135095..62fb444 100644
--- a/java/res/values-th/strings-talkback-descriptions.xml
+++ b/java/res/values-th/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ทำการแก้ไขอัตโนมัติ"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"รหัสคีย์ %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift เปิดอยู่ (แตะเพื่อปิดใช้งาน)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock เปิดอยู่ (แตะเพื่อปิดใช้งาน)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"ลบ"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"สัญลักษณ์"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"ตัวอักษร"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"เปิดใช้งาน Shift แล้ว"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"เปิดใช้งาน Caps Lock แล้ว"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"โหมดสัญลักษณ์"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"โหมดการเลื่อนสัญลักษณ์"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"โหมดตัวอักษร"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"โหมดโทรศัพท์"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"โหมดสัญลักษณ์โทรศัพท์"</string>
diff --git a/java/res/values-tl/strings-talkback-descriptions.xml b/java/res/values-tl/strings-talkback-descriptions.xml
index e4eff7d..4c34ad4 100644
--- a/java/res/values-tl/strings-talkback-descriptions.xml
+++ b/java/res/values-tl/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Nagsasagawa ang <xliff:g id="KEY_NAME">%1$s</xliff:g> ng auto-correction"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Key code %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Naka-on ang shift (i-tap upang i-disable)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Naka-on ang caps lock (i-tap upang i-disable)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Tanggalin"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Mga Simbolo"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Mga Titik"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Naka-enable ang shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Naka-enable ang caps lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbols mode"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Shift mode ng mga simbolo"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Letters mode"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Phone mode"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Phone symbols mode"</string>
diff --git a/java/res/values-tr/strings-talkback-descriptions.xml b/java/res/values-tr/strings-talkback-descriptions.xml
index 40bbd36..829fe61 100644
--- a/java/res/values-tr/strings-talkback-descriptions.xml
+++ b/java/res/values-tr/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> otomatik düzeltme yapar"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Tuş kodu: %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Üst karakter"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Üst karakter açık (devre dışı bırakmak için hafifçe vurun)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Büyük harf kilidi açık (devre dışı bırakmak için hafifçe vurun)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Diğer simgeler"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Üst karakter"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simgeler"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Üst karakter"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Sil"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simgeler"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Harfler"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Üst karakter etkin"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Büyük harf etkin"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Sembol modu"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Semboller üst karakter modu"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Diğer simgeler modu"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Harf modu"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Telefon modu"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Telefon sembolleri modu"</string>
diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml
index 79675d8..ddb8214 100644
--- a/java/res/values-uk/strings-talkback-descriptions.xml
+++ b/java/res/values-uk/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> автоматично виправляє"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Код клавіші – %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift увімкнено (торкніться, щоб вимкнути)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps Lock увімкнено (торкніться, щоб вимкнути)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Більше символів"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Клавіша Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Символи"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Клавіша Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Видалити"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Символи"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Літери"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift увімкнено"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock увімкнено"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Режим символів"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Режим перемикання символів"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Режим \"Більше символів\""</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Режим літер"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Режим номерів телефону"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Режим телефонних символів"</string>
diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml
index 9a618f9..959628a 100644
--- a/java/res/values-vi/strings-talkback-descriptions.xml
+++ b/java/res/values-vi/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> tự động sửa"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Mã phím %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift đang bật (nhấn để tắt)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Caps lock đang bật (nhấn để tắt)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"Xóa"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Biểu tượng"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Chữ cái"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Đã bật Shift"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Đã bật Caps lock"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Chế độ biểu tượng"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Chế độ chuyển ký hiệu"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Chế độ chữ cái"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Chế độ điện thoại"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Chế độ biểu tượng điện thoại"</string>
diff --git a/java/res/values-zh-rCN/strings-talkback-descriptions.xml b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
index 24445ab..7797364 100644
--- a/java/res/values-zh-rCN/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按<xliff:g id="KEY_NAME">%1$s</xliff:g>键可进行自动更正"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"键码为%d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"已开启Shift模式(点按即可关闭)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"已锁定大写模式(点按即可关闭)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"删除"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"符号"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"字母"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"已开启Shift模式"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"已锁定大写模式"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"符号模式"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"符号移位模式"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"字母模式"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"电话模式"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"电话符号模式"</string>
diff --git a/java/res/values-zh-rHK/strings-talkback-descriptions.xml b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
index e2f63b0..baa56e4 100644
--- a/java/res/values-zh-rHK/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可自動修正"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"按鍵代碼 %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 鍵"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift 鍵已開啟 (輕按即可停用)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"大寫鎖定已開啟 (輕按即可停用)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"更多符號"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift 鍵"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"符號"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift 鍵"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"刪除"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"符號"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"字母"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift 鍵已啟用"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"大寫鎖定已啟用"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"符號模式"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"符號轉變模式"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"更多符號模式"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"字母模式"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"撥號模式"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"符號撥號模式"</string>
diff --git a/java/res/values-zh-rTW/strings-talkback-descriptions.xml b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
index 63ea4d1..3f79420 100644
--- a/java/res/values-zh-rTW/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
@@ -27,8 +27,14 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按下「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可執行自動修正"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"按鍵代碼 %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 鍵"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"Shift 鍵已開啟 (輕按即可停用)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"大寫鎖定已開啟 (輕按即可停用)"</string>
+    <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
+    <skip />
+    <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
+    <skip />
+    <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
+    <skip />
+    <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
+    <skip />
     <string name="spoken_description_delete" msgid="3878902286264983302">"刪除"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"符號"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"字母"</string>
@@ -47,7 +53,8 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift 鍵已啟用"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"大寫鎖定已啟用"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"符號模式"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"符號移位模式"</string>
+    <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
+    <skip />
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"字母模式"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"撥號模式"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"撥號符號模式"</string>
diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml
index 14a1ea8..3f7ae7e 100644
--- a/java/res/values-zu/strings-talkback-descriptions.xml
+++ b/java/res/values-zu/strings-talkback-descriptions.xml
@@ -27,8 +27,10 @@
     <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"I-<xliff:g id="KEY_NAME">%1$s</xliff:g> yenza ukulungisa okuzenzakalelayo"</string>
     <string name="spoken_description_unknown" msgid="2382510329910793539">"Ikhodi yokhiye %d"</string>
     <string name="spoken_description_shift" msgid="7209798151676638728">"U-Shift"</string>
-    <string name="spoken_description_shift_shifted" msgid="1609924271343916689">"U-Shift uvuliwe (thepha ukuwuvimbela)"</string>
-    <string name="spoken_description_caps_lock" msgid="5020582161133170892">"Ofeleba bavuliwe (thepha ukubavimbela)"</string>
+    <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Amasimbuli amaningi"</string>
+    <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"U-Shift"</string>
+    <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Amasimbuli"</string>
+    <string name="spoken_description_caps_lock" msgid="1224851412185975036">"U-Shift"</string>
     <string name="spoken_description_delete" msgid="3878902286264983302">"Susa"</string>
     <string name="spoken_description_to_symbol" msgid="8244903740201126590">"Amasimbuli"</string>
     <string name="spoken_description_to_alpha" msgid="4081215210530031950">"Izinhlamvu"</string>
@@ -47,7 +49,7 @@
     <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"U-Shift uvunyelwe"</string>
     <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Ofeleba bavunyelwe"</string>
     <string name="spoken_description_mode_symbol" msgid="111186851131446691">"Imodi yezimpawu"</string>
-    <string name="spoken_description_mode_symbol_shift" msgid="3940566070908816492">"Imodi yamasimbuli we-shift"</string>
+    <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Imodi yamasimbuli amaningi"</string>
     <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Imodi yezinhlamvu"</string>
     <string name="spoken_description_mode_phone" msgid="2061220553756692903">"Imodi yefoni"</string>
     <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Imodi yezimpawu zefoni"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 701d195..b90e82b 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -51,6 +51,7 @@
         <!-- Background image for the spacebar.  This image needs to be a
              {@link StateListDrawable}, with the following possible states: normal, pressed. -->
         <attr name="spacebarBackground" format="reference" />
+        <attr name="spacebarIconWidthRatio" format="float" />
         <!-- Horizontal padding of left/right aligned key label to the edge of the key. -->
         <attr name="keyLabelHorizontalPadding" format="dimension" />
         <!-- Right padding of hint letter to the edge of the key.-->
@@ -72,8 +73,6 @@
     </declare-styleable>
 
     <declare-styleable name="MainKeyboardView">
-        <attr name="autoCorrectionSpacebarLedEnabled" format="boolean" />
-        <attr name="autoCorrectionSpacebarLedIcon" format="reference" />
         <!-- Size of the text for spacebar language label, in the proportion of key height. -->
         <attr name="languageOnSpacebarTextRatio" format="fraction" />
         <attr name="languageOnSpacebarTextColor" format="color" />
@@ -286,6 +285,7 @@
             <!-- This should be aligned with Key.LABEL_FLAGS__* -->
             <flag name="alignLeft" value="0x01" />
             <flag name="alignRight" value="0x02" />
+            <flag name="alignButtom" value="0x04" />
             <flag name="alignLeftOfCenter" value="0x08" />
             <flag name="fontNormal" value="0x10" />
             <flag name="fontMonoSpace" value="0x20" />
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 60b5cdf..12cb71f 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -40,27 +40,25 @@
     <color name="suggested_word_color_klp">#B2F0F0F0</color>
     <color name="highlight_translucent_color_klp">#99E0E0E0</color>
     <!-- Color resources for LXX theme. Base color = F0F0F0 -->
-    <color name="key_text_inactive_color_lxx">#808184</color>
-    <color name="key_hint_letter_color_lxx">#808184</color>
-    <color name="highlight_color_lxx">#7FCAC3</color>
-    <color name="typed_word_color_lxx">#D87FCAC3</color>
-    <color name="suggested_word_color_lxx">#B27FCAC3</color>
-    <color name="highlight_translucent_color_lxx">#997FCAC3</color>
-    <color name="keyboard_background_lxx">#384248</color>
-    <color name="key_background_lxx">#384248</color>
-    <color name="key_background_pressed_lxx">#546872</color>
-    <color name="suggestions_strip_background_lxx">#263238</color>
-    <color name="suggested_word_background_selected_lxx">#384248</color>
+    <color name="key_text_color_lxx_dark">#FFFFFF</color>
+    <color name="key_text_inactive_color_lxx_dark">#808184</color>
+    <color name="key_hint_letter_color_lxx_dark">#808184</color>
+    <color name="highlight_color_lxx_dark">#7FCAC3</color>
+    <color name="typed_word_color_lxx_dark">#D87FCAC3</color>
+    <color name="suggested_word_color_lxx_dark">#B27FCAC3</color>
+    <color name="highlight_translucent_color_lxx_dark">#997FCAC3</color>
+    <color name="keyboard_background_lxx_dark">#384248</color>
+    <color name="key_background_lxx_dark">#384248</color>
+    <color name="key_background_pressed_lxx_dark">#546872</color>
+    <color name="suggestions_strip_background_lxx_dark">#263238</color>
+    <color name="suggested_word_background_selected_lxx_dark">#384248</color>
+    <color name="gesture_floating_preview_color_lxx_dark">#C0000000</color>
     <!-- Color resources for setup wizard and tutorial -->
     <color name="setup_background">#FFEBEBEB</color>
     <color name="setup_text_dark">#FF707070</color>
     <color name="setup_text_action">@android:color/holo_blue_light</color>
     <color name="setup_step_background">@android:color/background_light</color>
     <color name="setup_welcome_video_margin_color">#FFCCCCCC</color>
-    <color name="emoji_category_page_id_view_background">#FF000000</color>
-    <color name="emoji_category_page_id_view_foreground">#80FFFFFF</color>
-
-    <!-- TODO: Color which should be included in the theme -->
-    <color name="emoji_key_background_color">#00000000</color>
-    <color name="emoji_key_pressed_background_color">#30FFFFFF</color>
+    <color name="emoji_category_page_id_background_holo">#FF000000</color>
+    <color name="emoji_category_page_id_foreground_holo">#80FFFFFF</color>
 </resources>
diff --git a/java/res/values/keyboard-icons-lxx.xml b/java/res/values/keyboard-icons-lxx-dark.xml
similarity index 94%
rename from java/res/values/keyboard-icons-lxx.xml
rename to java/res/values/keyboard-icons-lxx-dark.xml
index 8a38863..07af85e 100644
--- a/java/res/values/keyboard-icons-lxx.xml
+++ b/java/res/values/keyboard-icons-lxx-dark.xml
@@ -19,14 +19,14 @@
 -->
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="KeyboardIcons.LXX">
+    <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="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
         <item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
-        <item name="iconSpaceKey">@drawable/sym_keyboard_space_holo_dark</item>
-        <item name="iconEnterKey">@drawable/sym_keyboard_return_holo_dark</item>
+        <item name="iconSpaceKey">@drawable/sym_keyboard_spacebar_lxx_dark</item>
+        <item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_dark</item>
         <item name="iconGoKey">@drawable/sym_keyboard_go_lxx_dark</item>
         <item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_dark</item>
         <item name="iconSendKey">@drawable/sym_keyboard_send_lxx_dark</item>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 79f9036..22fb2c8 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -71,8 +71,6 @@
         <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item>
         <item name="gestureTrailColor">@color/highlight_color_ics</item>
         <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_ics</item>
-        <item name="autoCorrectionSpacebarLedEnabled">false</item>
-        <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led_holo</item>
         <item name="languageOnSpacebarTextColor">@color/spacebar_text_color_holo</item>
         <item name="languageOnSpacebarTextShadowRadius">1.0</item>
         <item name="languageOnSpacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item>
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index dfeca1c..212f5db 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -71,8 +71,6 @@
         <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item>
         <item name="gestureTrailColor">@color/highlight_color_klp</item>
         <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_klp</item>
-        <item name="autoCorrectionSpacebarLedEnabled">false</item>
-        <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led_holo</item>
         <item name="languageOnSpacebarTextColor">@color/spacebar_text_color_holo</item>
         <item name="languageOnSpacebarTextShadowRadius">1.0</item>
         <item name="languageOnSpacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item>
diff --git a/java/res/values/themes-lxx.xml b/java/res/values/themes-lxx-dark.xml
similarity index 72%
rename from java/res/values/themes-lxx.xml
rename to java/res/values/themes-lxx-dark.xml
index 899d26a..ace5fe9 100644
--- a/java/res/values/themes-lxx.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -19,19 +19,19 @@
 -->
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="KeyboardTheme.LXX" parent="KeyboardIcons.LXX">
-        <item name="keyboardStyle">@style/Keyboard.LXX</item>
-        <item name="keyboardViewStyle">@style/KeyboardView.LXX</item>
-        <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX</item>
-        <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.LXX</item>
-        <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX</item>
-        <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX</item>
-        <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX</item>
-        <item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX</item>
-        <item name="suggestionWordStyle">@style/SuggestionWord.LXX</item>
+    <style name="KeyboardTheme.LXX_Dark" parent="KeyboardIcons.LXX_Dark">
+        <item name="keyboardStyle">@style/Keyboard.LXX_Dark</item>
+        <item name="keyboardViewStyle">@style/KeyboardView.LXX_Dark</item>
+        <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Dark</item>
+        <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.LXX_Dark</item>
+        <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Dark</item>
+        <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Dark</item>
+        <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Dark</item>
+        <item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX_Dark</item>
+        <item name="suggestionWordStyle">@style/SuggestionWord.LXX_Dark</item>
     </style>
     <style
-        name="Keyboard.LXX"
+        name="Keyboard.LXX_Dark"
         parent="Keyboard"
     >
         <!-- This should be aligned with KeyboardSwitcher.KEYBOARD_THEMES[] -->
@@ -43,57 +43,56 @@
         <item name="touchPositionCorrectionData">@array/touch_position_correction_data_holo</item>
     </style>
     <style
-        name="KeyboardView.LXX"
+        name="KeyboardView.LXX_Dark"
         parent="KeyboardView"
     >
-        <item name="android:background">@color/keyboard_background_lxx</item>
-        <item name="keyBackground">@drawable/btn_keyboard_key_lxx</item>
-        <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx</item>
-        <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx</item>
-        <item name="keyTypeface">bold</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>
-        <item name="keyHintLetterColor">@color/key_hint_letter_color_lxx</item>
-        <item name="keyHintLabelColor">@color/key_text_inactive_color_lxx</item>
-        <item name="keyShiftedLetterHintInactivatedColor">@color/key_text_inactive_color_lxx</item>
-        <item name="keyShiftedLetterHintActivatedColor">@color/key_text_color_holo</item>
-        <item name="keyPreviewTextColor">@color/key_text_color_holo</item>
+        <item name="android:background">@color/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>
+        <item name="spacebarIconWidthRatio">0.9</item>
+        <item name="keyTypeface">normal</item>
+        <item name="keyTextColor">@color/key_text_color_lxx_dark</item>
+        <item name="keyTextInactivatedColor">@color/key_text_inactive_color_lxx_dark</item>
+        <item name="functionalTextColor">@color/key_hint_letter_color_lxx_dark</item>
+        <item name="keyHintLetterColor">@color/key_hint_letter_color_lxx_dark</item>
+        <item name="keyHintLabelColor">@color/key_text_inactive_color_lxx_dark</item>
+        <item name="keyShiftedLetterHintInactivatedColor">@color/key_text_inactive_color_lxx_dark</item>
+        <item name="keyShiftedLetterHintActivatedColor">@color/key_text_color_lxx_dark</item>
+        <item name="keyPreviewTextColor">@color/key_text_color_lxx_dark</item>
         <!-- A negative value to disable key text shadow layer. -->
         <item name="keyTextShadowRadius">-1.0</item>
     </style>
     <style
-        name="MainKeyboardView.LXX"
-        parent="KeyboardView.LXX"
+        name="MainKeyboardView.LXX_Dark"
+        parent="KeyboardView.LXX_Dark"
     >
         <item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
-        <item name="gestureFloatingPreviewTextColor">@color/highlight_color_lxx</item>
-        <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item>
-        <item name="gestureTrailColor">@color/highlight_color_lxx</item>
-        <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_lxx</item>
-        <item name="autoCorrectionSpacebarLedEnabled">false</item>
-        <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led_holo</item>
-        <item name="languageOnSpacebarTextColor">@color/key_text_inactive_color_lxx</item>
+        <item name="gestureFloatingPreviewTextColor">@color/highlight_color_lxx_dark</item>
+        <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_lxx_dark</item>
+        <item name="gestureTrailColor">@color/highlight_color_lxx_dark</item>
+        <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_lxx_dark</item>
+        <item name="languageOnSpacebarTextColor">@color/key_text_inactive_color_lxx_dark</item>
         <!-- A negative value to disable text shadow layer. -->
         <item name="languageOnSpacebarTextShadowRadius">-1.0</item>
     </style>
     <style
-        name="KeyPreviewTextView.LXX"
+        name="KeyPreviewTextView.LXX_Dark"
         parent="KeyPreviewTextView"
     >
-        <item name="android:background">@drawable/keyboard_key_feedback_lxx</item>
+        <item name="android:background">@drawable/keyboard_key_feedback_lxx_dark</item>
     </style>
     <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
          for instance delete button, need themed {@link KeyboardView} attributes. -->
     <style
-        name="EmojiPalettesView.LXX"
-        parent="MainKeyboardView.LXX"
+        name="EmojiPalettesView.LXX_Dark"
+        parent="MainKeyboardView.LXX_Dark"
     >
-        <item name="emojiTabLabelColor">@color/emoji_tab_label_color_lxx</item>
+        <item name="emojiTabLabelColor">@color/emoji_tab_label_color_lxx_dark</item>
     </style>
     <style
-        name="MoreKeysKeyboard.LXX"
-        parent="Keyboard.LXX"
+        name="MoreKeysKeyboard.LXX_Dark"
+        parent="Keyboard.LXX_Dark"
     >
         <item name="keyboardTopPadding">0%p</item>
         <item name="keyboardBottomPadding">0%p</item>
@@ -101,35 +100,35 @@
         <item name="touchPositionCorrectionData">@null</item>
     </style>
     <style
-        name="MoreKeysKeyboardView.LXX"
-        parent="KeyboardView.LXX"
+        name="MoreKeysKeyboardView.LXX_Dark"
+        parent="KeyboardView.LXX_Dark"
     >
-        <item name="android:background">@drawable/keyboard_popup_panel_background_lxx</item>
-        <item name="keyBackground">@drawable/btn_keyboard_key_popup_lxx</item>
+        <item name="android:background">@drawable/keyboard_popup_panel_background_lxx_dark</item>
+        <item name="keyBackground">@drawable/btn_keyboard_key_popup_lxx_dark</item>
         <item name="keyTypeface">normal</item>
         <item name="verticalCorrection">@dimen/config_more_keys_keyboard_vertical_correction_holo</item>
     </style>
     <style
-        name="SuggestionStripView.LXX"
-        parent="KeyboardView.LXX"
+        name="SuggestionStripView.LXX_Dark"
+        parent="KeyboardView.LXX_Dark"
     >
         <item name="suggestionsCountInStrip">@integer/config_suggestions_count_in_strip</item>
         <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_dark</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>
-        <item name="colorAutoCorrect">@color/highlight_color_lxx</item>
-        <item name="colorSuggested">@color/suggested_word_color_lxx</item>
+        <item name="colorValidTypedWord">@color/typed_word_color_lxx_dark</item>
+        <item name="colorTypedWord">@color/typed_word_color_lxx_dark</item>
+        <item name="colorAutoCorrect">@color/highlight_color_lxx_dark</item>
+        <item name="colorSuggested">@color/suggested_word_color_lxx_dark</item>
         <item name="alphaObsoleted">70%</item>
     </style>
     <style
-        name="SuggestionWord.LXX"
+        name="SuggestionWord.LXX_Dark"
         parent="SuggestionWord"
     >
-        <item name="android:background">@drawable/btn_suggestion_lxx</item>
-        <item name="android:textColor">@color/highlight_color_lxx</item>
+        <item name="android:background">@drawable/btn_suggestion_lxx_dark</item>
+        <item name="android:textColor">@color/highlight_color_lxx_dark</item>
     </style>
 </resources>
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index 35b3576..d302ab2 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -79,6 +79,7 @@
     <key-style
         latin:styleName="spaceKeyStyle"
         latin:keySpec="!icon/space_key|!code/key_space"
+        latin:keyLabelFlags="alignButtom"
         latin:keyActionFlags="noKeyPreview|enableLongPress" />
     <!-- U+200C: ZERO WIDTH NON-JOINER
          U+200D: ZERO WIDTH JOINER -->
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index f8b4a2a..0a274e0 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -88,6 +88,7 @@
     <key-style
         latin:styleName="spaceKeyStyle"
         latin:keySpec="!icon/space_key|!code/key_space"
+        latin:keyLabelFlags="alignButtom"
         latin:keyActionFlags="noKeyPreview|enableLongPress" />
     <!-- U+200C: ZERO WIDTH NON-JOINER
          U+200D: ZERO WIDTH JOINER -->
diff --git a/java/res/xml/key_styles_number.xml b/java/res/xml/key_styles_number.xml
index df4448c..8a76fe3 100644
--- a/java/res/xml/key_styles_number.xml
+++ b/java/res/xml/key_styles_number.xml
@@ -120,6 +120,7 @@
     <key-style
         latin:styleName="numSpaceKeyStyle"
         latin:keySpec="!icon/space_key_for_number_layout|!code/key_space"
+        latin:keyLabelFlags="alignButtom"
         latin:keyActionFlags="enableLongPress"
         latin:parentStyle="numKeyBaseStyle" />
     <!-- Override defaultEnterKeyStyle in key_styles_enter.xml -->
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index a1269c8..cf68c56 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -60,6 +60,7 @@
     private final int mLabelFlags;
     private static final int LABEL_FLAGS_ALIGN_LEFT = 0x01;
     private static final int LABEL_FLAGS_ALIGN_RIGHT = 0x02;
+    private static final int LABEL_FLAGS_ALIGN_BUTTOM = 0x04;
     private static final int LABEL_FLAGS_ALIGN_LEFT_OF_CENTER = 0x08;
     private static final int LABEL_FLAGS_FONT_NORMAL = 0x10;
     private static final int LABEL_FLAGS_FONT_MONO_SPACE = 0x20;
@@ -646,6 +647,10 @@
         return (mLabelFlags & LABEL_FLAGS_ALIGN_RIGHT) != 0;
     }
 
+    public final boolean isAlignButtom() {
+        return (mLabelFlags & LABEL_FLAGS_ALIGN_BUTTOM) != 0;
+    }
+
     public final boolean isAlignLeftOfCenter() {
         return (mLabelFlags & LABEL_FLAGS_ALIGN_LEFT_OF_CENTER) != 0;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index b7a7694..61d51d1 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -61,10 +61,6 @@
     private final KeyboardTextsSet mKeyboardTextsSet = new KeyboardTextsSet();
     private SettingsValues mCurrentSettingsValues;
 
-    /** mIsAutoCorrectionActive indicates that auto corrected word will be input instead of
-     * what user actually typed. */
-    private boolean mIsAutoCorrectionActive;
-
     private KeyboardTheme mKeyboardTheme;
     private Context mThemeContext;
 
@@ -142,12 +138,7 @@
         }
     }
 
-    public void onFinishInputView() {
-        mIsAutoCorrectionActive = false;
-    }
-
     public void onHideWindow() {
-        mIsAutoCorrectionActive = false;
         if (mKeyboardView != null) {
             mKeyboardView.onHideWindow();
         }
@@ -168,7 +159,6 @@
                 mCurrentSettingsValues.mKeyPreviewShowUpDuration,
                 mCurrentSettingsValues.mKeyPreviewDismissEndScale,
                 mCurrentSettingsValues.mKeyPreviewDismissDuration);
-        keyboardView.updateAutoCorrectionState(mIsAutoCorrectionActive);
         keyboardView.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
         final boolean subtypeChanged = (oldKeyboard == null)
                 || !keyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale);
@@ -367,15 +357,6 @@
         }
     }
 
-    public void onAutoCorrectionStateChanged(final boolean isAutoCorrection) {
-        if (mIsAutoCorrectionActive != isAutoCorrection) {
-            mIsAutoCorrectionActive = isAutoCorrection;
-            if (mKeyboardView != null) {
-                mKeyboardView.updateAutoCorrectionState(isAutoCorrection);
-            }
-        }
-    }
-
     public int getKeyboardShiftMode() {
         final Keyboard keyboard = getKeyboard();
         if (keyboard == null) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
index e0b74fa..1f14aa2 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
@@ -29,20 +29,20 @@
 public final class KeyboardTheme {
     private static final String TAG = KeyboardTheme.class.getSimpleName();
 
-    static final String KITKAT_KEYBOARD_THEME_KEY = "pref_keyboard_layout_20110916";
-    static final String KEYBOARD_THEME_KEY = "pref_keyboard_theme_20140509";
+    static final String KLP_KEYBOARD_THEME_KEY = "pref_keyboard_layout_20110916";
+    static final String LXX_KEYBOARD_THEME_KEY = "pref_keyboard_theme_20140509";
 
     static final int THEME_ID_ICS = 0;
     static final int THEME_ID_KLP = 2;
-    static final int THEME_ID_LXX = 3;
+    static final int THEME_ID_LXX_DARK = 3;
     static final int DEFAULT_THEME_ID = THEME_ID_KLP;
 
     private static final KeyboardTheme[] KEYBOARD_THEMES = {
         new KeyboardTheme(THEME_ID_ICS, R.style.KeyboardTheme_ICS,
-                VERSION_CODES.ICE_CREAM_SANDWICH),
+                VERSION_CODES.BASE),
         new KeyboardTheme(THEME_ID_KLP, R.style.KeyboardTheme_KLP,
-                VERSION_CODES.KITKAT),
-        new KeyboardTheme(THEME_ID_LXX, R.style.KeyboardTheme_LXX,
+                VERSION_CODES.ICE_CREAM_SANDWICH),
+        new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
                 // TODO: Update this constant once the *next* version becomes available.
                 VERSION_CODES.CUR_DEVELOPMENT),
     };
@@ -88,7 +88,7 @@
             return 5;
         case THEME_ID_KLP:
             return 9;
-        case THEME_ID_LXX:
+        case THEME_ID_LXX_DARK:
             return 10;
         default: // Invalid theme
             return -1;
@@ -116,22 +116,23 @@
 
     static KeyboardTheme getDefaultKeyboardTheme(final SharedPreferences prefs,
             final int sdkVersion) {
-        final String obsoleteIdString = prefs.getString(KITKAT_KEYBOARD_THEME_KEY, null);
-        if (obsoleteIdString != null) {
-            // Remove old preference.
-            prefs.edit().remove(KITKAT_KEYBOARD_THEME_KEY).apply();
+        final String klpThemeIdString = prefs.getString(KLP_KEYBOARD_THEME_KEY, null);
+        if (klpThemeIdString != null) {
             if (sdkVersion <= VERSION_CODES.KITKAT) {
                 try {
-                    final int themeId = Integer.parseInt(obsoleteIdString);
+                    final int themeId = Integer.parseInt(klpThemeIdString);
                     final KeyboardTheme theme = searchKeyboardThemeById(themeId);
                     if (theme != null) {
                         return theme;
                     }
-                    Log.w(TAG, "Unknown keyboard theme in preference: " + obsoleteIdString);
+                    Log.w(TAG, "Unknown keyboard theme in KLP preference: " + klpThemeIdString);
                 } catch (final NumberFormatException e) {
-                    Log.w(TAG, "Illegal keyboard theme in preference: " + obsoleteIdString);
+                    Log.w(TAG, "Illegal keyboard theme in KLP preference: " + klpThemeIdString, e);
                 }
             }
+            // Remove old preference.
+            Log.i(TAG, "Remove KLP keyboard theme preference: " + klpThemeIdString);
+            prefs.edit().remove(KLP_KEYBOARD_THEME_KEY).apply();
         }
         // TODO: This search algorithm isn't optimal if there are many themes.
         for (final KeyboardTheme theme : KEYBOARD_THEMES) {
@@ -144,27 +145,43 @@
 
     public static void saveKeyboardThemeId(final String themeIdString,
             final SharedPreferences prefs) {
-        prefs.edit().putString(KEYBOARD_THEME_KEY, themeIdString).apply();
+        saveKeyboardThemeId(themeIdString, prefs, getSdkVersion());
+    }
+
+    static String getPreferenceKey(final int sdkVersion) {
+        if (sdkVersion <= VERSION_CODES.KITKAT) {
+            return KLP_KEYBOARD_THEME_KEY;
+        }
+        return LXX_KEYBOARD_THEME_KEY;
+    }
+
+    static void saveKeyboardThemeId(final String themeIdString, final SharedPreferences prefs,
+            final int sdkVersion) {
+        final String prefKey = getPreferenceKey(sdkVersion);
+        prefs.edit().putString(prefKey, themeIdString).apply();
     }
 
     public static KeyboardTheme getKeyboardTheme(final SharedPreferences prefs) {
-        final int sdkVersion = getSdkVersion();
-        final String themeIdString = prefs.getString(KEYBOARD_THEME_KEY, null);
-        if (themeIdString == null) {
+        return getKeyboardTheme(prefs, getSdkVersion());
+    }
+
+    static KeyboardTheme getKeyboardTheme(final SharedPreferences prefs, final int sdkVersion) {
+        final String lxxThemeIdString = prefs.getString(LXX_KEYBOARD_THEME_KEY, null);
+        if (lxxThemeIdString == null) {
             return getDefaultKeyboardTheme(prefs, sdkVersion);
         }
         try {
-            final int themeId = Integer.parseInt(themeIdString);
+            final int themeId = Integer.parseInt(lxxThemeIdString);
             final KeyboardTheme theme = searchKeyboardThemeById(themeId);
             if (theme != null) {
                 return theme;
             }
-            Log.w(TAG, "Unknown keyboard theme in preference: " + themeIdString);
+            Log.w(TAG, "Unknown keyboard theme in LXX preference: " + lxxThemeIdString);
         } catch (final NumberFormatException e) {
-            Log.w(TAG, "Illegal keyboard theme in preference: " + themeIdString);
+            Log.w(TAG, "Illegal keyboard theme in LXX preference: " + lxxThemeIdString, e);
         }
-        // Remove preference.
-        prefs.edit().remove(KEYBOARD_THEME_KEY).apply();
+        // Remove preference that contains unknown or illegal theme id.
+        prefs.edit().remove(LXX_KEYBOARD_THEME_KEY).apply();
         return getDefaultKeyboardTheme(prefs, sdkVersion);
     }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index a6eac4c..edfc5fd 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -28,6 +28,7 @@
 import android.graphics.Region;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.NinePatchDrawable;
 import android.util.AttributeSet;
 import android.view.View;
 
@@ -49,6 +50,7 @@
  * @attr ref R.styleable#KeyboardView_keyBackground
  * @attr ref R.styleable#KeyboardView_functionalKeyBackground
  * @attr ref R.styleable#KeyboardView_spacebarBackground
+ * @attr ref R.styleable#KeyboardView_spacebarIconWidthRatio
  * @attr ref R.styleable#KeyboardView_keyLabelHorizontalPadding
  * @attr ref R.styleable#KeyboardView_keyHintLetterPadding
  * @attr ref R.styleable#KeyboardView_keyPopupHintLetterPadding
@@ -85,6 +87,7 @@
     private final Drawable mKeyBackground;
     private final Drawable mFunctionalKeyBackground;
     private final Drawable mSpacebarBackground;
+    private final float mSpacebarIconWidthRatio;
     private final Rect mKeyBackgroundPadding = new Rect();
     private static final float KET_TEXT_SHADOW_RADIUS_DISABLED = -1.0f;
 
@@ -135,8 +138,9 @@
                 : mKeyBackground;
         final Drawable spacebarBackground = keyboardViewAttr.getDrawable(
                 R.styleable.KeyboardView_spacebarBackground);
-        mSpacebarBackground = (spacebarBackground != null) ? spacebarBackground
-                : mKeyBackground;
+        mSpacebarBackground = (spacebarBackground != null) ? spacebarBackground : mKeyBackground;
+        mSpacebarIconWidthRatio = keyboardViewAttr.getFloat(
+                R.styleable.KeyboardView_spacebarIconWidthRatio, 1.0f);
         mKeyLabelHorizontalPadding = keyboardViewAttr.getDimensionPixelOffset(
                 R.styleable.KeyboardView_keyLabelHorizontalPadding, 0);
         mKeyHintLetterPadding = keyboardViewAttr.getDimension(
@@ -513,10 +517,16 @@
 
         // Draw key icon.
         if (label == null && icon != null) {
-            final int iconWidth = Math.min(icon.getIntrinsicWidth(), keyWidth);
+            final int iconWidth;
+            if (key.getCode() == Constants.CODE_SPACE && icon instanceof NinePatchDrawable) {
+                iconWidth = (int)(keyWidth * mSpacebarIconWidthRatio);
+            } else {
+                iconWidth = Math.min(icon.getIntrinsicWidth(), keyWidth);
+            }
             final int iconHeight = icon.getIntrinsicHeight();
             final int iconX, alignX;
-            final int iconY = (keyHeight - iconHeight) / 2;
+            final int iconY = key.isAlignButtom() ? keyHeight - iconHeight
+                    : (keyHeight - iconHeight) / 2;
             if (key.isAlignLeft()) {
                 iconX = mKeyLabelHorizontalPadding;
                 alignX = iconX;
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 4a09768..26b6dd0 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -27,7 +27,6 @@
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
 import android.preference.PreferenceManager;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -70,8 +69,6 @@
 /**
  * A view that is responsible for detecting key presses and touch movements.
  *
- * @attr ref R.styleable#MainKeyboardView_autoCorrectionSpacebarLedEnabled
- * @attr ref R.styleable#MainKeyboardView_autoCorrectionSpacebarLedIcon
  * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextRatio
  * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextColor
  * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextShadowRadius
@@ -118,7 +115,6 @@
 
     /* Space key and its icon and background. */
     private Key mSpaceKey;
-    private Drawable mSpacebarIcon;
     // Stuff to draw language name on spacebar.
     private final int mLanguageOnSpacebarFinalAlpha;
     private ObjectAnimator mLanguageOnSpacebarFadeoutAnimator;
@@ -133,11 +129,6 @@
     private static final float LANGUAGE_ON_SPACEBAR_TEXT_SHADOW_RADIUS_DISABLED = -1.0f;
     // The minimum x-scale to fit the language name on spacebar.
     private static final float MINIMUM_XSCALE_OF_LANGUAGE_NAME = 0.8f;
-    // Stuff to draw auto correction LED on spacebar.
-    private boolean mAutoCorrectionSpacebarLedOn;
-    private final boolean mAutoCorrectionSpacebarLedEnabled;
-    private final Drawable mAutoCorrectionSpacebarLedIcon;
-    private static final int SPACE_LED_LENGTH_PERCENT = 80;
 
     // Stuff to draw altCodeWhileTyping keys.
     private final ObjectAnimator mAltCodeKeyWhileTypingFadeoutAnimator;
@@ -221,10 +212,6 @@
                 R.styleable.MainKeyboardView_backgroundDimAlpha, 0);
         mBackgroundDimAlphaPaint.setColor(Color.BLACK);
         mBackgroundDimAlphaPaint.setAlpha(backgroundDimAlpha);
-        mAutoCorrectionSpacebarLedEnabled = mainKeyboardViewAttr.getBoolean(
-                R.styleable.MainKeyboardView_autoCorrectionSpacebarLedEnabled, false);
-        mAutoCorrectionSpacebarLedIcon = mainKeyboardViewAttr.getDrawable(
-                R.styleable.MainKeyboardView_autoCorrectionSpacebarLedIcon);
         mLanguageOnSpacebarTextRatio = mainKeyboardViewAttr.getFraction(
                 R.styleable.MainKeyboardView_languageOnSpacebarTextRatio, 1, 1, 1.0f);
         mLanguageOnSpacebarTextColor = mainKeyboardViewAttr.getColor(
@@ -400,8 +387,6 @@
         mMoreKeysKeyboardCache.clear();
 
         mSpaceKey = keyboard.getKey(Constants.CODE_SPACE);
-        mSpacebarIcon = (mSpaceKey != null)
-                ? mSpaceKey.getIcon(keyboard.mIconsSet, Constants.Color.ALPHA_OPAQUE) : null;
         final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
         mLanguageOnSpacebarTextSize = keyHeight * mLanguageOnSpacebarTextRatio;
         if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
@@ -834,14 +819,6 @@
         invalidateKey(mSpaceKey);
     }
 
-    public void updateAutoCorrectionState(final boolean isAutoCorrection) {
-        if (!mAutoCorrectionSpacebarLedEnabled) {
-            return;
-        }
-        mAutoCorrectionSpacebarLedOn = isAutoCorrection;
-        invalidateKey(mSpaceKey);
-    }
-
     private void dimEntireKeyboard(final boolean dimmed) {
         final boolean needsRedrawing = mNeedsToDimEntireKeyboard != dimmed;
         mNeedsToDimEntireKeyboard = dimmed;
@@ -866,18 +843,19 @@
         if (key.altCodeWhileTyping() && key.isEnabled()) {
             params.mAnimAlpha = mAltCodeKeyWhileTypingAnimAlpha;
         }
+        super.onDrawKeyTopVisuals(key, canvas, paint, params);
         final int code = key.getCode();
         if (code == Constants.CODE_SPACE) {
-            drawSpacebar(key, canvas, paint);
+            // If input language are explicitly selected.
+            if (mLanguageOnSpacebarFormatType != LanguageOnSpacebarHelper.FORMAT_TYPE_NONE) {
+                drawLanguageOnSpacebar(key, canvas, paint);
+            }
             // Whether space key needs to show the "..." popup hint for special purposes
             if (key.isLongPressEnabled() && mHasMultipleEnabledIMEsOrSubtypes) {
                 drawKeyPopupHint(key, canvas, paint, params);
             }
         } else if (code == Constants.CODE_LANGUAGE_SWITCH) {
-            super.onDrawKeyTopVisuals(key, canvas, paint, params);
             drawKeyPopupHint(key, canvas, paint, params);
-        } else {
-            super.onDrawKeyTopVisuals(key, canvas, paint, params);
         }
     }
 
@@ -917,48 +895,29 @@
         return "";
     }
 
-    private void drawSpacebar(final Key key, final Canvas canvas, final Paint paint) {
+    private void drawLanguageOnSpacebar(final Key key, final Canvas canvas, final Paint paint) {
         final int width = key.getWidth();
         final int height = key.getHeight();
-
-        // If input language are explicitly selected.
-        if (mLanguageOnSpacebarFormatType != LanguageOnSpacebarHelper.FORMAT_TYPE_NONE) {
-            paint.setTextAlign(Align.CENTER);
-            paint.setTypeface(Typeface.DEFAULT);
-            paint.setTextSize(mLanguageOnSpacebarTextSize);
-            final InputMethodSubtype subtype = getKeyboard().mId.mSubtype;
-            final String language = layoutLanguageOnSpacebar(paint, subtype, width);
-            // Draw language text with shadow
-            final float descent = paint.descent();
-            final float textHeight = -paint.ascent() + descent;
-            final float baseline = height / 2 + textHeight / 2;
-            if (mLanguageOnSpacebarTextShadowRadius > 0.0f) {
-                paint.setShadowLayer(mLanguageOnSpacebarTextShadowRadius, 0, 0,
-                        mLanguageOnSpacebarTextShadowColor);
-            } else {
-                paint.clearShadowLayer();
-            }
-            paint.setColor(mLanguageOnSpacebarTextColor);
-            paint.setAlpha(mLanguageOnSpacebarAnimAlpha);
-            canvas.drawText(language, width / 2, baseline - descent, paint);
+        paint.setTextAlign(Align.CENTER);
+        paint.setTypeface(Typeface.DEFAULT);
+        paint.setTextSize(mLanguageOnSpacebarTextSize);
+        final InputMethodSubtype subtype = getKeyboard().mId.mSubtype;
+        final String language = layoutLanguageOnSpacebar(paint, subtype, width);
+        // Draw language text with shadow
+        final float descent = paint.descent();
+        final float textHeight = -paint.ascent() + descent;
+        final float baseline = height / 2 + textHeight / 2;
+        if (mLanguageOnSpacebarTextShadowRadius > 0.0f) {
+            paint.setShadowLayer(mLanguageOnSpacebarTextShadowRadius, 0, 0,
+                    mLanguageOnSpacebarTextShadowColor);
+        } else {
             paint.clearShadowLayer();
-            paint.setTextScaleX(1.0f);
         }
-
-        // Draw the spacebar icon at the bottom
-        if (mAutoCorrectionSpacebarLedOn) {
-            final int iconWidth = width * SPACE_LED_LENGTH_PERCENT / 100;
-            final int iconHeight = mAutoCorrectionSpacebarLedIcon.getIntrinsicHeight();
-            int x = (width - iconWidth) / 2;
-            int y = height - iconHeight;
-            drawIcon(canvas, mAutoCorrectionSpacebarLedIcon, x, y, iconWidth, iconHeight);
-        } else if (mSpacebarIcon != null) {
-            final int iconWidth = mSpacebarIcon.getIntrinsicWidth();
-            final int iconHeight = mSpacebarIcon.getIntrinsicHeight();
-            int x = (width - iconWidth) / 2;
-            int y = height - iconHeight;
-            drawIcon(canvas, mSpacebarIcon, x, y, iconWidth, iconHeight);
-        }
+        paint.setColor(mLanguageOnSpacebarTextColor);
+        paint.setAlpha(mLanguageOnSpacebarAnimAlpha);
+        canvas.drawText(language, width / 2, baseline - descent, paint);
+        paint.clearShadowLayer();
+        paint.setTextScaleX(1.0f);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
index dd0e3e8..495fa55 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
@@ -70,12 +70,12 @@
             "emoticons" };
 
     private static final int[] sCategoryIcon = {
-            R.drawable.ic_emoji_recent_light,
-            R.drawable.ic_emoji_people_light,
-            R.drawable.ic_emoji_objects_light,
-            R.drawable.ic_emoji_nature_light,
-            R.drawable.ic_emoji_places_light,
-            R.drawable.ic_emoji_symbols_light,
+            R.drawable.ic_emoji_recent_holo_dark,
+            R.drawable.ic_emoji_people_holo_dark,
+            R.drawable.ic_emoji_objects_holo_dark,
+            R.drawable.ic_emoji_nature_holo_dark,
+            R.drawable.ic_emoji_places_holo_dark,
+            R.drawable.ic_emoji_symbols_holo_dark,
             0 };
 
     private static final String[] sCategoryLabel =
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
index 74cfd9b..f5aa107 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
@@ -38,7 +38,7 @@
     public EmojiCategoryPageIndicatorView(final Context context, final AttributeSet attrs) {
         super(context, attrs);
         mPaint.setColor(context.getResources().getColor(
-                R.color.emoji_category_page_id_view_foreground));
+                R.color.emoji_category_page_id_foreground_holo));
     }
 
     public void setCategoryPageId(final int size, final int id, final float offset) {
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
index 3813c57..8e45957 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
@@ -416,14 +416,11 @@
 
     private static class DeleteKeyOnTouchListener implements OnTouchListener {
         static final long MAX_REPEAT_COUNT_TIME = TimeUnit.SECONDS.toMillis(30);
-        final int mDeleteKeyPressedBackgroundColor;
         final long mKeyRepeatStartTimeout;
         final long mKeyRepeatInterval;
 
         public DeleteKeyOnTouchListener(Context context) {
             final Resources res = context.getResources();
-            mDeleteKeyPressedBackgroundColor =
-                    res.getColor(R.color.emoji_key_pressed_background_color);
             mKeyRepeatStartTimeout = res.getInteger(R.integer.config_key_repeat_start_timeout);
             mKeyRepeatInterval = res.getInteger(R.integer.config_key_repeat_interval);
             mTimer = new CountDownTimer(MAX_REPEAT_COUNT_TIME, mKeyRepeatInterval) {
@@ -500,7 +497,7 @@
             mTimer.cancel();
             mRepeatCount = 0;
             handleKeyDown();
-            v.setBackgroundColor(mDeleteKeyPressedBackgroundColor);
+            v.setPressed(true /* pressed */);
             mState = KEY_REPEAT_STATE_KEY_DOWN;
             mTimer.start();
         }
@@ -510,7 +507,7 @@
             if (mState == KEY_REPEAT_STATE_KEY_DOWN) {
                 handleKeyUp();
             }
-            v.setBackgroundColor(Color.TRANSPARENT);
+            v.setPressed(false /* pressed */);
             mState = KEY_REPEAT_STATE_INITIALIZED;
         }
 
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 1e31c96..b8cf3f8 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -113,11 +113,8 @@
         synchronized(mDicTraverseSessions) {
             DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
             if (traverseSession == null) {
-                traverseSession = mDicTraverseSessions.get(traverseSessionId);
-                if (traverseSession == null) {
-                    traverseSession = new DicTraverseSession(mLocale, mNativeDict, mDictSize);
-                    mDicTraverseSessions.put(traverseSessionId, traverseSession);
-                }
+                traverseSession = new DicTraverseSession(mLocale, mNativeDict, mDictSize);
+                mDicTraverseSessions.put(traverseSessionId, traverseSession);
             }
             return traverseSession;
         }
@@ -266,19 +263,9 @@
                 new FormatSpec.FormatOptions(outFormatVersion[0], hasHistoricalInfo));
     }
 
-
     @Override
     public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
-            final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
-        return getSuggestionsWithSessionId(composer, prevWord, proximityInfo, blockOffensiveWords,
-                additionalFeaturesOptions, 0 /* sessionId */, inOutLanguageWeight);
-    }
-
-    @Override
-    public ArrayList<SuggestedWordInfo> getSuggestionsWithSessionId(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
             final int sessionId, final float[] inOutLanguageWeight) {
         if (!isValidDictionary()) {
@@ -287,8 +274,8 @@
 
         Arrays.fill(mInputCodePoints, Constants.NOT_A_CODE);
         // TODO: toLowerCase in the native code
-        final int[] prevWordCodePointArray = (null == prevWord)
-                ? null : StringUtils.toCodePointArray(prevWord);
+        final int[] prevWordCodePointArray = (null == prevWordsInfo.mPrevWord)
+                ? null : StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
         final InputPointers inputPointers = composer.getInputPointers();
         final boolean isGesture = composer.isBatchMode();
         final int inputSize;
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index cd380db..aab1665 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -69,31 +69,20 @@
      * Searches for suggestions for a given context. For the moment the context is only the
      * previous word.
      * @param composer the key sequence to match with coordinate info, as a WordComposer
-     * @param prevWord the previous word, or null if none
+     * @param prevWordsInfo the information of previous words.
      * @param proximityInfo the object for key proximity. May be ignored by some implementations.
      * @param blockOffensiveWords whether to block potentially offensive words
      * @param additionalFeaturesOptions options about additional features used for the suggestion.
+     * @param sessionId the session id.
      * @param inOutLanguageWeight the language weight used for generating suggestions.
      * inOutLanguageWeight is a float array that has only one element. This can be updated when the
      * different language weight is used.
      * @return the list of suggestions (possibly null if none)
      */
-    // TODO: pass more context than just the previous word, to enable better suggestions (n-gram
-    // and more)
     abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight);
-
-    // The default implementation of this method ignores sessionId.
-    // Subclasses that want to use sessionId need to override this method.
-    public ArrayList<SuggestedWordInfo> getSuggestionsWithSessionId(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
-            final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final int sessionId, final float[] inOutLanguageWeight) {
-        return getSuggestions(composer, prevWord, proximityInfo, blockOffensiveWords,
-                additionalFeaturesOptions, inOutLanguageWeight);
-    }
+            final int sessionId, final float[] inOutLanguageWeight);
 
     /**
      * Checks if the given word occurs in the dictionary
@@ -165,9 +154,9 @@
 
         @Override
         public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-                final String prevWord, final ProximityInfo proximityInfo,
+                final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
                 final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-                final float[] inOutLanguageWeight) {
+                final int sessionId, final float[] inOutLanguageWeight) {
             return null;
         }
 
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index 16173ff..e6e4e09 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -57,22 +57,22 @@
 
     @Override
     public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
+            final int sessionId, final float[] inOutLanguageWeight) {
         final CopyOnWriteArrayList<Dictionary> dictionaries = mDictionaries;
         if (dictionaries.isEmpty()) return null;
         // To avoid creating unnecessary objects, we get the list out of the first
         // dictionary and add the rest to it if not null, hence the get(0)
         ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer,
-                prevWord, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
-                inOutLanguageWeight);
+                prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
+                sessionId, inOutLanguageWeight);
         if (null == suggestions) suggestions = CollectionUtils.newArrayList();
         final int length = dictionaries.size();
         for (int i = 1; i < length; ++ i) {
             final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer,
-                    prevWord, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
-                    inOutLanguageWeight);
+                    prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
+                    sessionId, inOutLanguageWeight);
             if (null != sugg) suggestions.addAll(sugg);
         }
         return suggestions;
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
index e0220e1..14c8bb6 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
@@ -444,7 +444,7 @@
 
     // TODO: Revise the way to fusion suggestion results.
     public SuggestionResults getSuggestionResults(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
             final int sessionId, final ArrayList<SuggestedWordInfo> rawSuggestions) {
         final Dictionaries dictionaries = mDictionaries;
@@ -455,7 +455,7 @@
             final Dictionary dictionary = dictionaries.getDict(dictType);
             if (null == dictionary) continue;
             final ArrayList<SuggestedWordInfo> dictionarySuggestions =
-                    dictionary.getSuggestionsWithSessionId(composer, prevWord, proximityInfo,
+                    dictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
                             blockOffensiveWords, additionalFeaturesOptions, sessionId,
                             languageWeight);
             if (null == dictionarySuggestions) continue;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index e323f0a..629f3fd 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -366,8 +366,8 @@
     }
 
     @Override
-    public ArrayList<SuggestedWordInfo> getSuggestionsWithSessionId(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+    public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
             final int sessionId, final float[] inOutLanguageWeight) {
         reloadDictionaryIfRequired();
@@ -380,9 +380,9 @@
                     return null;
                 }
                 final ArrayList<SuggestedWordInfo> suggestions =
-                        mBinaryDictionary.getSuggestionsWithSessionId(composer, prevWord,
-                                proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
-                                sessionId, inOutLanguageWeight);
+                        mBinaryDictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
+                                blockOffensiveWords, additionalFeaturesOptions, sessionId,
+                                inOutLanguageWeight);
                 if (mBinaryDictionary.isCorrupted()) {
                     Log.i(TAG, "Dictionary (" + mDictName +") is corrupted. "
                             + "Remove and regenerate it.");
@@ -401,15 +401,6 @@
     }
 
     @Override
-    public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
-            final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
-        return getSuggestionsWithSessionId(composer, prevWord, proximityInfo, blockOffensiveWords,
-                additionalFeaturesOptions, 0 /* sessionId */, inOutLanguageWeight);
-    }
-
-    @Override
     public boolean isValidWord(final String word) {
         reloadDictionaryIfRequired();
         boolean lockAcquired = false;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 1ccf585..5e45275 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -140,10 +140,10 @@
     private final SubtypeState mSubtypeState = new SubtypeState();
 
     // Object for reacting to adding/removing a dictionary pack.
-    private BroadcastReceiver mDictionaryPackInstallReceiver =
+    private final BroadcastReceiver mDictionaryPackInstallReceiver =
             new DictionaryPackInstallBroadcastReceiver(this);
 
-    private BroadcastReceiver mDictionaryDumpBroadcastReceiver =
+    private final BroadcastReceiver mDictionaryDumpBroadcastReceiver =
             new DictionaryDumpBroadcastReceiver(this);
 
     private AlertDialog mOptionsDialog;
@@ -905,7 +905,6 @@
 
     private void onFinishInputViewInternal(final boolean finishingInput) {
         super.onFinishInputView(finishingInput);
-        mKeyboardSwitcher.onFinishInputView();
         mKeyboardSwitcher.deallocateMemory();
         // Remove pending messages related to update suggestions
         mHandler.cancelUpdateSuggestionStrip();
@@ -1388,7 +1387,6 @@
         if (!hasSuggestionStripView()) {
             return;
         }
-        mKeyboardSwitcher.onAutoCorrectionStateChanged(suggestedWords.mWillAutoCorrect);
         if (!onEvaluateInputViewShown()) {
             return;
         }
@@ -1430,8 +1428,8 @@
         if (DEBUG) {
             if (mInputLogic.mWordComposer.isComposingWord()
                     || mInputLogic.mWordComposer.isBatchMode()) {
-                final String previousWord
-                        = mInputLogic.mWordComposer.getPreviousWordForSuggestion();
+                final PrevWordsInfo prevWordsInfo
+                        = mInputLogic.mWordComposer.getPrevWordsInfoForSuggestion();
                 // TODO: this is for checking consistency with older versions. Remove this when
                 // we are confident this is stable.
                 // We're checking the previous word in the text field against the memorized previous
@@ -1440,14 +1438,14 @@
                 final CharSequence rereadPrevWord = mInputLogic.getNthPreviousWordForSuggestion(
                         currentSettings.mSpacingAndPunctuations,
                         mInputLogic.mWordComposer.isComposingWord() ? 2 : 1);
-                if (!TextUtils.equals(previousWord, rereadPrevWord)) {
+                if (!TextUtils.equals(prevWordsInfo.mPrevWord, rereadPrevWord)) {
                     throw new RuntimeException("Unexpected previous word: "
-                            + previousWord + " <> " + rereadPrevWord);
+                            + prevWordsInfo.mPrevWord + " <> " + rereadPrevWord);
                 }
             }
         }
         mInputLogic.mSuggest.getSuggestedWords(mInputLogic.mWordComposer,
-                mInputLogic.mWordComposer.getPreviousWordForSuggestion(),
+                mInputLogic.mWordComposer.getPrevWordsInfoForSuggestion(),
                 keyboard.getProximityInfo(), currentSettings.mBlockPotentiallyOffensive,
                 currentSettings.mCorrectionEnabled, additionalFeaturesOptions, sessionId,
                 sequenceNumber, callback);
@@ -1631,7 +1629,8 @@
     // boolean onKeyMultiple(final int keyCode, final int count, final KeyEvent event);
 
     // receive ringer mode change and network state change.
-    private BroadcastReceiver mConnectivityAndRingerModeChangeReceiver = new BroadcastReceiver() {
+    private final BroadcastReceiver mConnectivityAndRingerModeChangeReceiver =
+            new BroadcastReceiver() {
         @Override
         public void onReceive(final Context context, final Intent intent) {
             final String action = intent.getAction();
@@ -1748,8 +1747,7 @@
 
     @UsedForTesting
     /* package for test */ DistracterFilter createDistracterFilter() {
-        return DistracterFilterUtils.createDistracterFilter(
-                mInputLogic.mSuggest, mKeyboardSwitcher);
+        return DistracterFilterUtils.createDistracterFilter(this /* Context */, mKeyboardSwitcher);
     }
 
     public void dumpDictionaryForDebug(final String dictName) {
diff --git a/java/src/com/android/inputmethod/latin/PrevWordsInfo.java b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
new file mode 100644
index 0000000..9d85431
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin;
+
+public class PrevWordsInfo {
+    // The previous word. May be null after resetting and before starting a new composing word, or
+    // when there is no context like at the start of text for example. It can also be set to null
+    // externally when the user enters a separator that does not let bigrams across, like a period
+    // or a comma.
+    public final String mPrevWord;
+
+    public PrevWordsInfo(final String prevWord) {
+        mPrevWord = prevWord;
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
index 9f61d6c..8f744be 100644
--- a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java
@@ -50,22 +50,14 @@
 
     @Override
     public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
-            final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
-        return getSuggestionsWithSessionId(composer, prevWord, proximityInfo, blockOffensiveWords,
-                additionalFeaturesOptions, 0 /* sessionId */, inOutLanguageWeight);
-    }
-
-    @Override
-    public ArrayList<SuggestedWordInfo> getSuggestionsWithSessionId(final WordComposer composer,
-            final String prevWord, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
             final int sessionId, final float[] inOutLanguageWeight) {
         if (mLock.readLock().tryLock()) {
             try {
-                return mBinaryDictionary.getSuggestions(composer, prevWord, proximityInfo,
-                        blockOffensiveWords, additionalFeaturesOptions, inOutLanguageWeight);
+                return mBinaryDictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
+                        blockOffensiveWords, additionalFeaturesOptions, sessionId,
+                        inOutLanguageWeight);
             } finally {
                 mLock.readLock().unlock();
             }
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index db0a8a8..e3759a5 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -71,17 +71,17 @@
     }
 
     public void getSuggestedWords(final WordComposer wordComposer,
-            final String prevWordForBigram, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final boolean isCorrectionEnabled,
             final int[] additionalFeaturesOptions, final int sessionId, final int sequenceNumber,
             final OnGetSuggestedWordsCallback callback) {
-        LatinImeLogger.onStartSuggestion(prevWordForBigram);
+        LatinImeLogger.onStartSuggestion(prevWordsInfo.mPrevWord);
         if (wordComposer.isBatchMode()) {
-            getSuggestedWordsForBatchInput(wordComposer, prevWordForBigram, proximityInfo,
+            getSuggestedWordsForBatchInput(wordComposer, prevWordsInfo, proximityInfo,
                     blockOffensiveWords, additionalFeaturesOptions, sessionId, sequenceNumber,
                     callback);
         } else {
-            getSuggestedWordsForTypingInput(wordComposer, prevWordForBigram, proximityInfo,
+            getSuggestedWordsForTypingInput(wordComposer, prevWordsInfo, proximityInfo,
                     blockOffensiveWords, isCorrectionEnabled, additionalFeaturesOptions,
                     sequenceNumber, callback);
         }
@@ -90,12 +90,12 @@
     // Retrieves suggestions for the typing input
     // and calls the callback function with the suggestions.
     private void getSuggestedWordsForTypingInput(final WordComposer wordComposer,
-            final String prevWordForBigram, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             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;
@@ -108,7 +108,7 @@
             rawSuggestions = null;
         }
         final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
-                wordComposer, prevWordForBigram, proximityInfo, blockOffensiveWords,
+                wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
                 additionalFeaturesOptions, SESSION_TYPING, rawSuggestions);
 
         final boolean isFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
@@ -215,7 +215,7 @@
     // Retrieves suggestions for the batch input
     // and calls the callback function with the suggestions.
     private void getSuggestedWordsForBatchInput(final WordComposer wordComposer,
-            final String prevWordForBigram, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
             final int sessionId, final int sequenceNumber,
             final OnGetSuggestedWordsCallback callback) {
@@ -226,7 +226,7 @@
             rawSuggestions = null;
         }
         final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
-                wordComposer, prevWordForBigram, proximityInfo, blockOffensiveWords,
+                wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
                 additionalFeaturesOptions, sessionId, rawSuggestions);
         for (SuggestedWordInfo wordInfo : suggestionResults) {
             LatinImeLogger.onAddSuggestedWord(wordInfo.mWord, wordInfo.mSourceDict.mDictType);
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index ac69729..227b42b 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -46,11 +46,9 @@
     // The list of events that served to compose this string.
     private final ArrayList<Event> mEvents;
     private final InputPointers mInputPointers = new InputPointers(MAX_WORD_LENGTH);
-    // The previous word (before the composing word). Used as context for suggestions. May be null
-    // after resetting and before starting a new composing word, or when there is no context like
-    // at the start of text for example. It can also be set to null externally when the user
-    // enters a separator that does not let bigrams across, like a period or a comma.
-    private String mPreviousWordForSuggestion;
+    // The information of previous words (before the composing word). Must not be null. Used as
+    // context for suggestions.
+    private PrevWordsInfo mPrevWordsInfo;
     private String mAutoCorrection;
     private boolean mIsResumed;
     private boolean mIsBatchMode;
@@ -87,7 +85,7 @@
         mIsBatchMode = false;
         mCursorPositionWithinWord = 0;
         mRejectedBatchModeSuggestion = null;
-        mPreviousWordForSuggestion = null;
+        mPrevWordsInfo = new PrevWordsInfo(null);
         refreshTypedWordCache();
     }
 
@@ -119,7 +117,7 @@
         mIsBatchMode = false;
         mCursorPositionWithinWord = 0;
         mRejectedBatchModeSuggestion = null;
-        mPreviousWordForSuggestion = null;
+        mPrevWordsInfo = new PrevWordsInfo(null);
         refreshTypedWordCache();
     }
 
@@ -149,7 +147,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;
@@ -308,7 +307,7 @@
                     CoordinateUtils.yFromArray(coordinates, i)));
         }
         mIsResumed = true;
-        mPreviousWordForSuggestion = null == previousWord ? null : previousWord.toString();
+        mPrevWordsInfo = new PrevWordsInfo(null == previousWord ? null : previousWord.toString());
     }
 
     /**
@@ -319,8 +318,8 @@
         return mTypedWordCache.toString();
     }
 
-    public String getPreviousWordForSuggestion() {
-        return mPreviousWordForSuggestion;
+    public PrevWordsInfo getPrevWordsInfoForSuggestion() {
+        return mPrevWordsInfo;
     }
 
     /**
@@ -331,15 +330,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
@@ -387,7 +377,7 @@
     public void setCapitalizedModeAndPreviousWordAtStartComposingTime(final int mode,
             final CharSequence previousWord) {
         mCapitalizedMode = mode;
-        mPreviousWordForSuggestion = null == previousWord ? null : previousWord.toString();
+        mPrevWordsInfo = new PrevWordsInfo(null == previousWord ? null : previousWord.toString());
     }
 
     /**
@@ -438,7 +428,7 @@
         mCapsCount = 0;
         mDigitsCount = 0;
         mIsBatchMode = false;
-        mPreviousWordForSuggestion = committedWord.toString();
+        mPrevWordsInfo = new PrevWordsInfo(committedWord.toString());
         mCombinerChain.reset();
         mEvents.clear();
         mCodePointSize = 0;
@@ -456,11 +446,11 @@
     // when the user inputs a separator that's not whitespace (including the case of the
     // double-space-to-period feature).
     public void discardPreviousWordForSuggestion() {
-        mPreviousWordForSuggestion = null;
+        mPrevWordsInfo = new PrevWordsInfo(null);
     }
 
     public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord,
-            final String previousWord) {
+            final PrevWordsInfo prevWordsInfo) {
         mEvents.clear();
         Collections.copy(mEvents, lastComposedWord.mEvents);
         mInputPointers.set(lastComposedWord.mInputPointers);
@@ -471,7 +461,7 @@
         mCursorPositionWithinWord = mCodePointSize;
         mRejectedBatchModeSuggestion = null;
         mIsResumed = true;
-        mPreviousWordForSuggestion = previousWord;
+        mPrevWordsInfo = prevWordsInfo;
     }
 
     public boolean isBatchMode() {
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index afacd08..6ef505e 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -138,11 +138,13 @@
                 }
             }
             dictionaryMap.clear();
-            if (!FileUtils.deleteFilteredFiles(
-                    context.getFilesDir(), new DictFilter(dictNamePrefix))) {
+            final File filesDir = context.getFilesDir();
+            if (filesDir == null) {
+                Log.e(TAG, "context.getFilesDir() returned null.");
+            }
+            if (!FileUtils.deleteFilteredFiles(filesDir, new DictFilter(dictNamePrefix))) {
                 Log.e(TAG, "Cannot remove all existing dictionary files. filesDir: "
-                        + context.getFilesDir().getAbsolutePath() + ", dictNamePrefix: "
-                        + dictNamePrefix);
+                        + filesDir.getAbsolutePath() + ", dictNamePrefix: " + dictNamePrefix);
             }
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
index ddda52d..e951f5a 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
@@ -23,6 +23,7 @@
 import android.view.textservice.SuggestionsInfo;
 import android.view.textservice.TextInfo;
 
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.utils.CollectionUtils;
 
 import java.util.ArrayList;
@@ -57,7 +58,7 @@
             final int offset = ssi.getOffsetAt(i);
             final int length = ssi.getLengthAt(i);
             final String subText = typedText.substring(offset, offset + length);
-            final String prevWord = currentWord;
+            final PrevWordsInfo prevWordsInfo = new PrevWordsInfo(currentWord);
             currentWord = subText;
             if (!subText.contains(AndroidSpellCheckerService.SINGLE_QUOTE)) {
                 continue;
@@ -73,7 +74,7 @@
                 if (TextUtils.isEmpty(splitText)) {
                     continue;
                 }
-                if (mSuggestionsCache.getSuggestionsFromCache(splitText, prevWord) == null) {
+                if (mSuggestionsCache.getSuggestionsFromCache(splitText, prevWordsInfo) == null) {
                     continue;
                 }
                 final int newLength = splitText.length();
@@ -148,7 +149,8 @@
                 } else {
                     prevWord = null;
                 }
-                retval[i] = onGetSuggestionsInternal(textInfos[i], prevWord, suggestionsLimit);
+                final PrevWordsInfo prevWordsInfo = new PrevWordsInfo(prevWord);
+                retval[i] = onGetSuggestionsInternal(textInfos[i], prevWordsInfo, suggestionsLimit);
                 retval[i].setCookieAndSequence(textInfos[i].getCookie(),
                         textInfos[i].getSequence());
             }
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index 69d0927..cf26000 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -31,6 +31,7 @@
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.Constants;
 import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.WordComposer;
 import com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService.SuggestionsGatherer;
@@ -71,26 +72,26 @@
                 new LruCache<String, SuggestionsParams>(MAX_CACHE_SIZE);
 
         // TODO: Support n-gram input
-        private static String generateKey(String query, String prevWord) {
-            if (TextUtils.isEmpty(query) || TextUtils.isEmpty(prevWord)) {
+        private static String generateKey(final String query, final PrevWordsInfo prevWordsInfo) {
+            if (TextUtils.isEmpty(query) || TextUtils.isEmpty(prevWordsInfo.mPrevWord)) {
                 return query;
             }
-            return query + CHAR_DELIMITER + prevWord;
+            return query + CHAR_DELIMITER + prevWordsInfo.mPrevWord;
         }
 
-        // TODO: Support n-gram input
-        public SuggestionsParams getSuggestionsFromCache(String query, String prevWord) {
-            return mUnigramSuggestionsInfoCache.get(generateKey(query, prevWord));
+        public SuggestionsParams getSuggestionsFromCache(String query,
+                final PrevWordsInfo prevWordsInfo) {
+            return mUnigramSuggestionsInfoCache.get(generateKey(query, prevWordsInfo));
         }
 
-        // TODO: Support n-gram input
         public void putSuggestionsToCache(
-                String query, String prevWord, String[] suggestions, int flags) {
+                final String query, final PrevWordsInfo prevWordsInfo,
+                final String[] suggestions, final int flags) {
             if (suggestions == null || TextUtils.isEmpty(query)) {
                 return;
             }
             mUnigramSuggestionsInfoCache.put(
-                    generateKey(query, prevWord), new SuggestionsParams(suggestions, flags));
+                    generateKey(query, prevWordsInfo), new SuggestionsParams(suggestions, flags));
         }
 
         public void clearCache() {
@@ -259,11 +260,12 @@
     }
 
     protected SuggestionsInfo onGetSuggestionsInternal(
-            final TextInfo textInfo, final String prevWord, final int suggestionsLimit) {
+            final TextInfo textInfo, final PrevWordsInfo prevWordsInfo,
+            final int suggestionsLimit) {
         try {
             final String inText = textInfo.getText();
             final SuggestionsParams cachedSuggestionsParams =
-                    mSuggestionsCache.getSuggestionsFromCache(inText, prevWord);
+                    mSuggestionsCache.getSuggestionsFromCache(inText, prevWordsInfo);
             if (cachedSuggestionsParams != null) {
                 if (DBG) {
                     Log.d(TAG, "Cache hit: " + inText + ", " + cachedSuggestionsParams.mFlags);
@@ -325,9 +327,9 @@
                 composer.setComposingWord(codePoints, coordinates, null /* previousWord */);
                 // TODO: make a spell checker option to block offensive words or not
                 final ArrayList<SuggestedWordInfo> suggestions =
-                        dictInfo.mDictionary.getSuggestions(composer, prevWord,
+                        dictInfo.mDictionary.getSuggestions(composer, prevWordsInfo,
                                 dictInfo.getProximityInfo(), true /* blockOffensiveWords */,
-                                null /* additionalFeaturesOptions */,
+                                null /* additionalFeaturesOptions */, 0 /* sessionId */,
                                 null /* inOutLanguageWeight */);
                 if (suggestions != null) {
                     for (final SuggestedWordInfo suggestion : suggestions) {
@@ -369,7 +371,8 @@
                                     .getValueOf_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS()
                             : 0);
             final SuggestionsInfo retval = new SuggestionsInfo(flags, result.mSuggestions);
-            mSuggestionsCache.putSuggestionsToCache(text, prevWord, result.mSuggestions, flags);
+            mSuggestionsCache.putSuggestionsToCache(text, prevWordsInfo, result.mSuggestions,
+                    flags);
             return retval;
         } catch (RuntimeException e) {
             // Don't kill the keyboard if there is a bug in the spell checker
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index c992643..ba2e0c3 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -20,6 +20,7 @@
 
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.WordComposer;
 import com.android.inputmethod.latin.utils.CollectionUtils;
@@ -52,9 +53,9 @@
                 // TODO: this dummy dictionary should be a singleton in the Dictionary class.
                 @Override
                 public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
-                        final String prevWord, final ProximityInfo proximityInfo,
+                        final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
                         final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-                        final float[] inOutLanguageWeight) {
+                        final int sessionId, final float[] inOutLanguageWeight) {
                     return noSuggestions;
                 }
                 @Override
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
index a694bf4..7507566 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
@@ -20,6 +20,7 @@
 
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.ContactsBinaryDictionary;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.WordComposer;
 
@@ -36,12 +37,12 @@
 
     @Override
     public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes,
-            final String prevWordForBigrams, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
+            final int sessionId, final float[] inOutLanguageWeight) {
         synchronized (mLock) {
-            return super.getSuggestions(codes, prevWordForBigrams, proximityInfo,
-                    blockOffensiveWords, additionalFeaturesOptions, inOutLanguageWeight);
+            return super.getSuggestions(codes, prevWordsInfo, proximityInfo,
+                    blockOffensiveWords, additionalFeaturesOptions, sessionId, inOutLanguageWeight);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
index 1a6dd58..f2d981a 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 
 import com.android.inputmethod.keyboard.ProximityInfo;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.UserBinaryDictionary;
 import com.android.inputmethod.latin.WordComposer;
@@ -41,12 +42,12 @@
 
     @Override
     public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes,
-            final String prevWordForBigrams, final ProximityInfo proximityInfo,
+            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
             final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
-            final float[] inOutLanguageWeight) {
+            final int sessionId, final float[] inOutLanguageWeight) {
         synchronized (mLock) {
-            return super.getSuggestions(codes, prevWordForBigrams, proximityInfo,
-                    blockOffensiveWords, additionalFeaturesOptions, inOutLanguageWeight);
+            return super.getSuggestions(codes, prevWordsInfo, proximityInfo,
+                    blockOffensiveWords, additionalFeaturesOptions, sessionId, inOutLanguageWeight);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
index 0a03799..a219532 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
@@ -16,8 +16,15 @@
 
 package com.android.inputmethod.latin.utils;
 
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+import android.content.Context;
+import android.util.Log;
+
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.latin.Constants;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.Suggest;
 import com.android.inputmethod.latin.Suggest.OnGetSuggestedWordsCallback;
 import com.android.inputmethod.latin.SuggestedWords;
@@ -29,6 +36,11 @@
  * or user history dictionaries
  */
 public class DistracterFilter {
+    private static final String TAG = DistracterFilter.class.getSimpleName();
+
+    private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
+
+    private final Context mContext;
     private final Suggest mSuggest;
     private final Keyboard mKeyboard;
 
@@ -42,13 +54,13 @@
     /**
      * Create a DistracterFilter instance.
      *
-     * @param suggest an instance of Suggest which will be used to obtain a list of suggestions
-     *                for a potential distracter
+     * @param context the context.
      * @param keyboard the keyboard that is currently being used. This information is needed
      *                 when calling mSuggest.getSuggestedWords(...) to obtain a list of suggestions.
      */
-    public DistracterFilter(final Suggest suggest, final Keyboard keyboard) {
-        mSuggest = suggest;
+    public DistracterFilter(final Context context, final Keyboard keyboard) {
+        mContext = context;
+        mSuggest = new Suggest();
         mKeyboard = keyboard;
     }
 
@@ -66,29 +78,48 @@
         return false;
     }
 
+    private void loadDictionariesForLocale(final Locale newlocale) throws InterruptedException {
+        mSuggest.mDictionaryFacilitator.resetDictionaries(mContext, newlocale,
+                false /* useContactsDict */, false /* usePersonalizedDicts */,
+                false /* forceReloadMainDictionary */, null /* listener */);
+        mSuggest.mDictionaryFacilitator.waitForLoadingMainDictionary(
+                TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS, TimeUnit.SECONDS);
+    }
+
     /**
      * Determine whether a word is a distracter to words in dictionaries.
      *
-     * @param prevWord the previous word, or null if none.
+     * @param prevWordsInfo the information of previous words.
      * @param testedWord the word that will be tested to see whether it is a distracter to words
      *                   in dictionaries.
+     * @param locale the locale of words.
      * @return true if testedWord is a distracter, otherwise false.
      */
-    public boolean isDistracterToWordsInDictionaries(final String prevWord,
-            final String testedWord) {
-        if (mSuggest == null || mKeyboard == null) {
+    public boolean isDistracterToWordsInDictionaries(final PrevWordsInfo prevWordsInfo,
+            final String testedWord, final Locale locale) {
+        if (mKeyboard == null || locale == null) {
             return false;
         }
+        if (!locale.equals(mSuggest.mDictionaryFacilitator.getLocale())) {
+            // Reset dictionaries for the locale.
+            try {
+                loadDictionariesForLocale(locale);
+            } catch (final InterruptedException e) {
+                Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter", e);
+                return false;
+            }
+        }
 
         final WordComposer composer = new WordComposer();
         final int[] codePoints = StringUtils.toCodePointArray(testedWord);
         final int[] coordinates;
         coordinates = mKeyboard.getCoordinates(codePoints);
-        composer.setComposingWord(codePoints, coordinates, prevWord);
+        composer.setComposingWord(codePoints, coordinates, prevWordsInfo.mPrevWord);
 
-        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
@@ -103,7 +134,7 @@
                 }
             }
         };
-        mSuggest.getSuggestedWords(composer, prevWord, mKeyboard.getProximityInfo(),
+        mSuggest.getSuggestedWords(composer, prevWordsInfo, mKeyboard.getProximityInfo(),
                 true /* blockOffensiveWords */, true /* isCorrectionEnbaled */,
                 null /* additionalFeaturesOptions */, 0 /* sessionId */,
                 SuggestedWords.NOT_A_SEQUENCE_NUMBER, callback);
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUtils.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUtils.java
index df07f97..8a711a2 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUtils.java
@@ -16,17 +16,18 @@
 
 package com.android.inputmethod.latin.utils;
 
+import android.content.Context;
+
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
 import com.android.inputmethod.keyboard.MainKeyboardView;
-import com.android.inputmethod.latin.Suggest;
 
 public class DistracterFilterUtils {
     private DistracterFilterUtils() {
         // This utility class is not publicly instantiable.
     }
 
-    public static final DistracterFilter createDistracterFilter(final Suggest suggest,
+    public static final DistracterFilter createDistracterFilter(final Context context,
             final KeyboardSwitcher keyboardSwitcher) {
         final MainKeyboardView mainKeyboardView = keyboardSwitcher.getMainKeyboardView();
         // TODO: Create Keyboard when mainKeyboardView is null.
@@ -34,7 +35,7 @@
         // spellchecker's logic.
         final Keyboard keyboard = (mainKeyboardView != null) ?
                 mainKeyboardView.getKeyboard() : null;
-        final DistracterFilter distracterFilter = new DistracterFilter(suggest, keyboard);
+        final DistracterFilter distracterFilter = new DistracterFilter(context, keyboard);
         return distracterFilter;
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
index 74e7db9..aaf4a40 100644
--- a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
+++ b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
@@ -20,6 +20,7 @@
 
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
+import com.android.inputmethod.latin.PrevWordsInfo;
 import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
 
 import java.util.ArrayList;
@@ -85,7 +86,7 @@
         final ArrayList<LanguageModelParam> languageModelParams =
                 CollectionUtils.newArrayList();
         final int N = tokens.size();
-        String prevWord = null;
+        PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
         for (int i = 0; i < N; ++i) {
             final String tempWord = tokens.get(i);
             if (StringUtils.isEmptyStringOrWhiteSpaces(tempWord)) {
@@ -102,7 +103,7 @@
                             + tempWord + "\"");
                 }
                 // Sentence terminator found. Split.
-                prevWord = null;
+                prevWordsInfo = new PrevWordsInfo(null);
                 continue;
             }
             if (DEBUG_TOKEN) {
@@ -110,19 +111,19 @@
             }
             final LanguageModelParam languageModelParam =
                     detectWhetherVaildWordOrNotAndGetLanguageModelParam(
-                            prevWord, tempWord, timestamp, dictionaryFacilitator,
+                            prevWordsInfo, tempWord, timestamp, dictionaryFacilitator,
                             distracterFilter);
             if (languageModelParam == null) {
                 continue;
             }
             languageModelParams.add(languageModelParam);
-            prevWord = languageModelParam.mTargetWord;
+            prevWordsInfo = new PrevWordsInfo(languageModelParam.mTargetWord);
         }
         return languageModelParams;
     }
 
     private static LanguageModelParam detectWhetherVaildWordOrNotAndGetLanguageModelParam(
-            final String prevWord, final String targetWord, final int timestamp,
+            final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
             final DictionaryFacilitatorForSuggest dictionaryFacilitator,
             final DistracterFilter distracterFilter) {
         final Locale locale = dictionaryFacilitator.getLocale();
@@ -133,14 +134,14 @@
         // distracterFilter in the following code. If targetWord is a distracter,
         // it should be filtered out.
         if (dictionaryFacilitator.isValidWord(targetWord, false /* ignoreCase */)) {
-            return createAndGetLanguageModelParamOfWord(prevWord, targetWord, timestamp,
+            return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
                     true /* isValidWord */, locale);
         }
 
         final String lowerCaseTargetWord = targetWord.toLowerCase(locale);
         if (dictionaryFacilitator.isValidWord(lowerCaseTargetWord, false /* ignoreCase */)) {
             // Add the lower-cased word.
-            return createAndGetLanguageModelParamOfWord(prevWord, lowerCaseTargetWord,
+            return createAndGetLanguageModelParamOfWord(prevWordsInfo, lowerCaseTargetWord,
                     timestamp, true /* isValidWord */, locale);
         }
 
@@ -150,26 +151,26 @@
         // Adding such a word to dictonaries would interfere with entering in-dictionary words. For
         // example, adding "mot" to dictionaries might interfere with entering "not".
         // This kind of OOV should be filtered out.
-        if (distracterFilter.isDistracterToWordsInDictionaries(prevWord, targetWord)) {
+        if (distracterFilter.isDistracterToWordsInDictionaries(prevWordsInfo, targetWord, locale)) {
             return null;
         }
-        return createAndGetLanguageModelParamOfWord(prevWord, targetWord, timestamp,
+        return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
                 false /* isValidWord */, locale);
     }
 
     private static LanguageModelParam createAndGetLanguageModelParamOfWord(
-            final String prevWord, final String targetWord, final int timestamp,
+            final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
             final boolean isValidWord, final Locale locale) {
         final String word;
         if (StringUtils.getCapitalizationType(targetWord) == StringUtils.CAPITALIZE_FIRST
-                && prevWord == null && !isValidWord) {
+                && prevWordsInfo.mPrevWord == null && !isValidWord) {
             word = targetWord.toLowerCase(locale);
         } else {
             word = targetWord;
         }
         final int unigramProbability = isValidWord ?
                 UNIGRAM_PROBABILITY_FOR_VALID_WORD : UNIGRAM_PROBABILITY_FOR_OOV_WORD;
-        if (prevWord == null) {
+        if (prevWordsInfo.mPrevWord == null) {
             if (DEBUG) {
                 Log.d(TAG, "--- add unigram: current("
                         + (isValidWord ? "Valid" : "OOV") + ") = " + word);
@@ -177,12 +178,12 @@
             return new LanguageModelParam(word, unigramProbability, timestamp);
         }
         if (DEBUG) {
-            Log.d(TAG, "--- add bigram: prev = " + prevWord + ", current("
+            Log.d(TAG, "--- add bigram: prev = " + prevWordsInfo.mPrevWord + ", current("
                     + (isValidWord ? "Valid" : "OOV") + ") = " + word);
         }
         final int bigramProbability = isValidWord ?
                 BIGRAM_PROBABILITY_FOR_VALID_WORD : BIGRAM_PROBABILITY_FOR_OOV_WORD;
-        return new LanguageModelParam(prevWord, word, unigramProbability,
+        return new LanguageModelParam(prevWordsInfo.mPrevWord, word, unigramProbability,
                 bigramProbability, timestamp);
     }
 }
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/keyboard/KeyboardThemeTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
index 555b1a4..4f4f01c 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
@@ -26,10 +26,16 @@
 public class KeyboardThemeTests extends AndroidTestCase {
     private SharedPreferences mPrefs;
 
+    // TODO: Remove this constant once the *next* version becomes available.
+    private static final int VERSION_CODES_LXX = VERSION_CODES.CUR_DEVELOPMENT;
+
     private static final int THEME_ID_NULL = -1;
+    private static final int THEME_ID_UNKNOWN = -2;
+    private static final int THEME_ID_ILLEGAL = -3;
+    private static final String ILLEGAL_THEME_ID_STRING = "ThisCausesNumberFormatExecption";
     private static final int THEME_ID_ICS = KeyboardTheme.THEME_ID_ICS;
     private static final int THEME_ID_KLP = KeyboardTheme.THEME_ID_KLP;
-    private static final int THEME_ID_LXX = KeyboardTheme.THEME_ID_LXX;
+    private static final int THEME_ID_LXX_DARK = KeyboardTheme.THEME_ID_LXX_DARK;
 
     @Override
     protected void setUp() throws Exception {
@@ -37,57 +43,291 @@
         mPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
     }
 
+    /*
+     * Helper functions.
+     */
+
+    private static boolean isValidKeyboardThemeId(final int themeId) {
+        switch (themeId) {
+        case THEME_ID_ICS:
+        case THEME_ID_KLP:
+        case THEME_ID_LXX_DARK:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    private void setKeyboardThemePreference(final String prefKey, final int themeId) {
+        final String themeIdString = Integer.toString(themeId);
+        if (isValidKeyboardThemeId(themeId) || themeId == THEME_ID_UNKNOWN) {
+            // Set valid theme id to preference.
+            mPrefs.edit().putString(prefKey, themeIdString).apply();
+            return;
+        }
+        if (themeId == THEME_ID_NULL) {
+            // Simulate undefined preference.
+            mPrefs.edit().remove(prefKey).apply();
+            return;
+        }
+        // themeId == THEME_ID_ILLEGAL
+        // Simulate illegal format theme id in preference.
+        mPrefs.edit().putString(prefKey, ILLEGAL_THEME_ID_STRING).apply();
+    }
+
+    private void assertKeyboardTheme(final int sdkVersion, final int expectedThemeId) {
+        assertEquals(expectedThemeId, KeyboardTheme.getKeyboardTheme(mPrefs, sdkVersion).mThemeId);
+    }
+
+    /*
+     * Test keyboard theme preference on the same platform version and the same keyboard version.
+     */
+
+    private void assertKeyboardThemePreference(final int sdkVersion, final int oldThemeId,
+            final int expectedThemeId) {
+        final String prefKey = KeyboardTheme.getPreferenceKey(sdkVersion);
+        setKeyboardThemePreference(prefKey, oldThemeId);
+        assertKeyboardTheme(sdkVersion, expectedThemeId);
+    }
+
+    private void assertKeyboardThemePreferenceOnKlp(final int sdkVersion) {
+        final int defaultThemeId = THEME_ID_KLP;
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_NULL, defaultThemeId);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_ICS, THEME_ID_ICS);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_LXX_DARK, THEME_ID_LXX_DARK);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_UNKNOWN, defaultThemeId);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_ILLEGAL, defaultThemeId);
+    }
+
+    public void testKeyboardThemePreferenceOnKlp() {
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.JELLY_BEAN);
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.JELLY_BEAN_MR1);
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.JELLY_BEAN_MR2);
+        assertKeyboardThemePreferenceOnKlp(VERSION_CODES.KITKAT);
+    }
+
+    private void assertKeyboardThemePreferenceOnLxx(final int sdkVersion) {
+        final int defaultThemeId = THEME_ID_LXX_DARK;
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_NULL, defaultThemeId);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_ICS, THEME_ID_ICS);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_LXX_DARK, THEME_ID_LXX_DARK);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_UNKNOWN, defaultThemeId);
+        assertKeyboardThemePreference(sdkVersion, THEME_ID_ILLEGAL, defaultThemeId);
+    }
+
+    public void testKeyboardThemePreferenceOnLxx() {
+        assertKeyboardThemePreferenceOnLxx(VERSION_CODES_LXX);
+    }
+
+    /*
+     * Test default keyboard theme based on the platform version.
+     */
+
     private void assertDefaultKeyboardTheme(final int sdkVersion, final int oldThemeId,
             final int expectedThemeId) {
-        if (oldThemeId == THEME_ID_NULL) {
-            mPrefs.edit().remove(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY).apply();
-        } else {
-            final String themeIdString = Integer.toString(oldThemeId);
-            mPrefs.edit().putString(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY, themeIdString).apply();
-        }
+        final String oldPrefKey = KeyboardTheme.KLP_KEYBOARD_THEME_KEY;
+        setKeyboardThemePreference(oldPrefKey, oldThemeId);
+
         final KeyboardTheme defaultTheme =
                 KeyboardTheme.getDefaultKeyboardTheme(mPrefs, sdkVersion);
+
         assertNotNull(defaultTheme);
         assertEquals(expectedThemeId, defaultTheme.mThemeId);
-        assertFalse(mPrefs.contains(KeyboardTheme.KITKAT_KEYBOARD_THEME_KEY));
+        if (sdkVersion <= VERSION_CODES.KITKAT) {
+            // Old preference must be retained if it is valid. Otherwise it must be pruned.
+            assertEquals(isValidKeyboardThemeId(oldThemeId), mPrefs.contains(oldPrefKey));
+            return;
+        }
+        // Old preference must be removed.
+        assertFalse(mPrefs.contains(oldPrefKey));
     }
 
-    private void assertDefaultKeyboardThemeICS(final int sdkVersion) {
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_ICS);
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_ICS);
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_KLP);
-    }
-
-    private void assertDefaultKeyboardThemeKLP(final int sdkVersion) {
+    private void assertDefaultKeyboardThemeOnKlp(final int sdkVersion) {
         assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_KLP);
         assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_ICS);
         assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_KLP);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_KLP);
     }
 
-    private void assertDefaultKeyboardThemeLXX(final int sdkVersion) {
+    public void testDefaultKeyboardThemeOnKlp() {
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.JELLY_BEAN);
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.JELLY_BEAN_MR1);
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.JELLY_BEAN_MR2);
+        assertDefaultKeyboardThemeOnKlp(VERSION_CODES.KITKAT);
+    }
+
+    private void assertDefaultKeyboardThemeOnLxx(final int sdkVersion) {
         // Forced to switch to LXX theme.
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_LXX);
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_LXX);
-        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_LXX);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_LXX_DARK);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_LXX_DARK);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_DARK);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
     }
 
-    public void testDefaultKeyboardThemeICS() {
-        assertDefaultKeyboardThemeICS(VERSION_CODES.ICE_CREAM_SANDWICH);
-        assertDefaultKeyboardThemeICS(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+    public void testDefaultKeyboardThemeOnLxx() {
+        assertDefaultKeyboardThemeOnLxx(VERSION_CODES_LXX);
     }
 
-    public void testDefaultKeyboardThemeJB() {
-        assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN);
-        assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN_MR1);
-        assertDefaultKeyboardThemeICS(VERSION_CODES.JELLY_BEAN_MR2);
+    /*
+     * Test keyboard theme preference while upgrading the keyboard that doesn't support LXX theme
+     * to the keyboard that supports LXX theme.
+     */
+
+    private void assertUpgradeKeyboardToLxxOn(final int sdkVersion, final int oldThemeId,
+            final int expectedThemeId) {
+        setKeyboardThemePreference(KeyboardTheme.KLP_KEYBOARD_THEME_KEY, oldThemeId);
+        // Clean up new keyboard theme preference to simulate "upgrade to LXX keyboard".
+        setKeyboardThemePreference(KeyboardTheme.LXX_KEYBOARD_THEME_KEY, THEME_ID_NULL);
+
+        final KeyboardTheme theme = KeyboardTheme.getKeyboardTheme(mPrefs, sdkVersion);
+
+        assertNotNull(theme);
+        assertEquals(expectedThemeId, theme.mThemeId);
+        if (sdkVersion <= VERSION_CODES.KITKAT) {
+            // New preference must not exist.
+            assertFalse(mPrefs.contains(KeyboardTheme.LXX_KEYBOARD_THEME_KEY));
+            // Old preference must be retained if it is valid. Otherwise it must be pruned.
+            assertEquals(isValidKeyboardThemeId(oldThemeId),
+                    mPrefs.contains(KeyboardTheme.KLP_KEYBOARD_THEME_KEY));
+            if (isValidKeyboardThemeId(oldThemeId)) {
+                // Old preference must have an expected value.
+                assertEquals(mPrefs.getString(KeyboardTheme.KLP_KEYBOARD_THEME_KEY, null),
+                        Integer.toString(expectedThemeId));
+            }
+            return;
+        }
+        // Old preference must be removed.
+        assertFalse(mPrefs.contains(KeyboardTheme.KLP_KEYBOARD_THEME_KEY));
+        // New preference must not exist.
+        assertFalse(mPrefs.contains(KeyboardTheme.LXX_KEYBOARD_THEME_KEY));
     }
 
-    public void testDefaultKeyboardThemeKLP() {
-        assertDefaultKeyboardThemeKLP(VERSION_CODES.KITKAT);
+    private void assertUpgradeKeyboardToLxxOnKlp(final int sdkVersion) {
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_NULL, THEME_ID_KLP);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ICS, THEME_ID_ICS);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_KLP);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_KLP);
     }
 
-    public void testDefaultKeyboardThemeLXX() {
-        // TODO: Update this constant once the *next* version becomes available.
-        assertDefaultKeyboardThemeLXX(VERSION_CODES.CUR_DEVELOPMENT);
+    // Upgrading keyboard on I,J and K.
+    public void testUpgradeKeyboardToLxxOnKlp() {
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.JELLY_BEAN);
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.JELLY_BEAN_MR1);
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.JELLY_BEAN_MR2);
+        assertUpgradeKeyboardToLxxOnKlp(VERSION_CODES.KITKAT);
+    }
+
+    private void assertUpgradeKeyboardToLxxOnLxx(final int sdkVersion) {
+        // Forced to switch to LXX theme.
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ICS, THEME_ID_LXX_DARK);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_KLP, THEME_ID_LXX_DARK);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_DARK);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
+    }
+
+    // Upgrading keyboard on L.
+    public void testUpgradeKeyboardToLxxOnLxx() {
+        assertUpgradeKeyboardToLxxOnLxx(VERSION_CODES_LXX);
+    }
+
+    /*
+     * Test keyboard theme preference while upgrading platform version.
+     */
+
+    private void assertUpgradePlatformFromTo(final int oldSdkVersion, final int newSdkVersion,
+            final int oldThemeId, final int expectedThemeId) {
+        if (newSdkVersion < oldSdkVersion) {
+            // No need to test.
+            return;
+        }
+        // Clean up preferences.
+        setKeyboardThemePreference(KeyboardTheme.KLP_KEYBOARD_THEME_KEY, THEME_ID_NULL);
+        setKeyboardThemePreference(KeyboardTheme.LXX_KEYBOARD_THEME_KEY, THEME_ID_NULL);
+
+        final String oldPrefKey = KeyboardTheme.getPreferenceKey(oldSdkVersion);
+        setKeyboardThemePreference(oldPrefKey, oldThemeId);
+
+        assertKeyboardTheme(newSdkVersion, expectedThemeId);
+    }
+
+    private void assertUpgradePlatformFromKlpToKlp(final int oldSdkVersion,
+            final int newSdkVersion) {
+        assertUpgradePlatformFromTo(oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_KLP);
+        assertUpgradePlatformFromTo(oldSdkVersion, newSdkVersion, THEME_ID_ICS, THEME_ID_ICS);
+        assertUpgradePlatformFromTo(oldSdkVersion, newSdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertUpgradePlatformFromTo(oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_KLP);
+        assertUpgradePlatformFromTo(oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_KLP);
+    }
+
+    private void assertUpgradePlatformToKlpFrom(final int oldSdkVersion) {
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.JELLY_BEAN);
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.JELLY_BEAN_MR1);
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.JELLY_BEAN_MR2);
+        assertUpgradePlatformFromKlpToKlp(oldSdkVersion, VERSION_CODES.KITKAT);
+    }
+
+    // Update platform from I,J, and K to I,J, and K
+    public void testUpgradePlatformToKlpFromKlp() {
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.JELLY_BEAN);
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.JELLY_BEAN_MR1);
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.JELLY_BEAN_MR2);
+        assertUpgradePlatformToKlpFrom(VERSION_CODES.KITKAT);
+    }
+
+    private void assertUpgradePlatformToLxxFrom(final int oldSdkVersion) {
+        // Forced to switch to LXX theme.
+        final int newSdkVersion = VERSION_CODES_LXX;
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_ICS, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_KLP, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
+    }
+
+    // Update platform from I,J, and K to L
+    public void testUpgradePlatformToLxx() {
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.ICE_CREAM_SANDWICH);
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.ICE_CREAM_SANDWICH_MR1);
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.JELLY_BEAN);
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.JELLY_BEAN_MR1);
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.JELLY_BEAN_MR2);
+        assertUpgradePlatformToLxxFrom(VERSION_CODES.KITKAT);
+    }
+
+    // Update platform from L to L.
+    public void testUpgradePlatformToLxxFromLxx() {
+        final int oldSdkVersion = VERSION_CODES_LXX;
+        final int newSdkVersion = VERSION_CODES_LXX;
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_ICS, THEME_ID_ICS);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_KLP, THEME_ID_KLP);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
     }
 }
diff --git a/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java b/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
index 186542a..e98f9ea 100644
--- a/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
+++ b/tests/src/com/android/inputmethod/latin/DistracterFilterTest.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.latin;
 
+import java.util.Locale;
+
 import android.test.suitebuilder.annotation.LargeTest;
 
 import com.android.inputmethod.latin.utils.DistracterFilter;
@@ -34,40 +36,50 @@
     }
 
     public void testIsDistractorToWordsInDictionaries() {
-        final String EMPTY_PREV_WORD = null;
+        final PrevWordsInfo EMPTY_PREV_WORDS_INFO = new PrevWordsInfo(null);
+
+        final Locale localeEnUs = new Locale("en", "US");
         String typedWord = "alot";
         // For this test case, we consider "alot" is a distracter to "a lot".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "mot";
         // For this test case, we consider "mot" is a distracter to "not".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "wierd";
         // For this test case, we consider "wierd" is a distracter to "weird".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "hoe";
         // For this test case, we consider "hoe" is a distracter to "how".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "nit";
         // For this test case, we consider "nit" is a distracter to "not".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "ill";
         // For this test case, we consider "ill" is a distracter to "I'll".
-        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+        assertTrue(mDistracterFilter.isDistracterToWordsInDictionaries(
+                EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "asdfd";
         // For this test case, we consider "asdfd" is not a distracter to any word in dictionaries.
         assertFalse(
-                mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+                mDistracterFilter.isDistracterToWordsInDictionaries(
+                        EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
 
         typedWord = "thank";
         // For this test case, we consider "thank" is not a distracter to any other word
         // in dictionaries.
         assertFalse(
-                mDistracterFilter.isDistracterToWordsInDictionaries(EMPTY_PREV_WORD, typedWord));
+                mDistracterFilter.isDistracterToWordsInDictionaries(
+                        EMPTY_PREV_WORDS_INFO, typedWord, localeEnUs));
     }
 }
diff --git a/tests/src/com/android/inputmethod/latin/WordComposerTests.java b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
index d68bb5c..16e8b36 100644
--- a/tests/src/com/android/inputmethod/latin/WordComposerTests.java
+++ b/tests/src/com/android/inputmethod/latin/WordComposerTests.java
@@ -57,14 +57,14 @@
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(1));
         assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
         // Check the previous word is still there
-        assertEquals(PREVWORD, wc.getPreviousWordForSuggestion());
+        assertEquals(PREVWORD, wc.getPrevWordsInfoForSuggestion().mPrevWord);
         // Move the cursor past the end of the word
         assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(1));
         assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(15));
         // Do what LatinIME does when the cursor is moved outside of the word,
         // and check the behavior is correct.
         wc.reset();
-        assertNull(wc.getPreviousWordForSuggestion());
+        assertNull(wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         // \uD861\uDED7 is 𨛗, a character outside the BMP
         final String STR_WITH_SUPPLEMENTARY_CHAR = "abcde\uD861\uDED7fgh";
@@ -83,37 +83,37 @@
         assertTrue(wc.isCursorFrontOrMiddleOfComposingWord());
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(1));
         assertFalse(wc.isCursorFrontOrMiddleOfComposingWord());
-        assertNull(wc.getPreviousWordForSuggestion());
+        assertNull(wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 STR_WITHIN_BMP);
         wc.setCursorPositionWithinWord(3);
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(7));
-        assertEquals(STR_WITHIN_BMP, wc.getPreviousWordForSuggestion());
+        assertEquals(STR_WITHIN_BMP, wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 STR_WITH_SUPPLEMENTARY_CHAR);
         wc.setCursorPositionWithinWord(3);
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(7));
-        assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPreviousWordForSuggestion());
+        assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 STR_WITHIN_BMP);
         wc.setCursorPositionWithinWord(3);
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(-3));
         assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(-1));
-        assertEquals(STR_WITHIN_BMP, wc.getPreviousWordForSuggestion());
+        assertEquals(STR_WITHIN_BMP, wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 null /* previousWord */);
         wc.setCursorPositionWithinWord(3);
         assertFalse(wc.moveCursorByAndReturnIfInsideComposingWord(-9));
-        assertNull(wc.getPreviousWordForSuggestion());
+        assertNull(wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 STR_WITH_SUPPLEMENTARY_CHAR);
         assertTrue(wc.moveCursorByAndReturnIfInsideComposingWord(-10));
-        assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPreviousWordForSuggestion());
+        assertEquals(STR_WITH_SUPPLEMENTARY_CHAR, wc.getPrevWordsInfoForSuggestion().mPrevWord);
 
         wc.setComposingWord(CODEPOINTS_WITH_SUPPLEMENTARY_CHAR, COORDINATES_WITH_SUPPLEMENTARY_CHAR,
                 null /* previousWord */);
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"));
+    }
 }
diff --git a/tools/dicttool/Android.mk b/tools/dicttool/Android.mk
index e12d7e0..10104cf 100644
--- a/tools/dicttool/Android.mk
+++ b/tools/dicttool/Android.mk
@@ -44,6 +44,7 @@
         latin/InputPointers.java \
         latin/LastComposedWord.java \
         latin/LatinImeLogger.java \
+        latin/PrevWordsInfo.java \
         latin/SuggestedWords.java \
         latin/WordComposer.java \
         latin/settings/NativeSuggestOptions.java \