Merge "Remove SuggestionsGatherer."
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
index 82e850c..bbdc411 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 0000000..854c849
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index e2b9e3d..33f7d80 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 0000000..7a7e982
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 2e6489c..b8bb10f 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/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_normal_off_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 0000000..0802b11
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index 0b14822..b1f5435 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/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_normal_on_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 0000000..f0a89c5
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 0000000..0ef8cc7
--- /dev/null
+++ b/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_popup_selected_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 0000000..45d5865
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 4bf38fc..bfc981e 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/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_pressed_off_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 0000000..1b52bcc
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index ea12c77..fbb4f8c 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 0000000..1bc2a23
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
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
index 9d6514b..e49efe5 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 0000000..615a40a
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png
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
index 8ad54f6..a0511a1 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 0000000..c5871f6
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
index f9dd3b8..c7b147f 100644
--- a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 0000000..41b0a1b
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider.png b/java/res/drawable-hdpi/suggestions_strip_divider_holo.png
similarity index 100%
rename from java/res/drawable-hdpi/suggestions_strip_divider.png
rename to java/res/drawable-hdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 0000000..68a2270
--- /dev/null
+++ b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 0000000..12485ef
--- /dev/null
+++ b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
index 5f5eb3f..2e68b20 100644
--- a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 0000000..e17d297
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 0000000..04eab59
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
deleted file mode 100644
index d85663b..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 0000000..189d609
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
index edf9a20..4fc82d6 100644
--- a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 0000000..1c7af20
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 0000000..70679b0
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 0000000..952dd4f
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 0000000..9ab1a3f
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 0000000..ec70627
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 0000000..bbc5094
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
index f261302..23eac16 100644
--- a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 0000000..144b15b
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 0000000..657f65a
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
index cb03e55..427f014 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 0000000..a46d653
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
index 3999d1e..2cfe1d4 100644
--- a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 0000000..2cfe1d4
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png
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
index f344dee..c57cb73 100644
--- a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 0000000..c27a36e
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
index 6b68c8a..80d1248 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 0000000..d6b070e
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
index e67697b..e2bd604 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 0000000..d33ab4e
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
index 281b5d3..787ce45 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 0000000..e7a585b
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index eb15643..7e34c6c 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 0000000..5a65133
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 9f244f2..bb9fc59 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/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_normal_off_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 0000000..afcb4f9
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index c5b3fbb..5b23e22 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/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_normal_on_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 0000000..3323d2c
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 0000000..cf12a8c
--- /dev/null
+++ b/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_popup_selected_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 0000000..e388cfb
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 66824cf..1b0ed0c 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/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_pressed_off_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 0000000..d8e4355
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 527dfd0..f990a9e 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 0000000..b9a42fa
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
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
index d320092..8bd1343 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 0000000..f97cfb9
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png
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
index 60a3633..37e45fb 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 0000000..1fe06f9
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 8965055..f12ba5f 100644
--- a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 0000000..1edf94f
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider.png b/java/res/drawable-mdpi/suggestions_strip_divider_holo.png
similarity index 100%
rename from java/res/drawable-mdpi/suggestions_strip_divider.png
rename to java/res/drawable-mdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 0000000..c8afc66
--- /dev/null
+++ b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 0000000..051e66c
--- /dev/null
+++ b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
index 2d3ac97..ba74e5e 100644
--- a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 0000000..007b5ea
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 0000000..930f971
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
deleted file mode 100644
index fee1580..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 0000000..f9975c3
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
index a90bf75..44dc1b6 100644
--- a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 0000000..e1c1265
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 0000000..e18b1cf
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 0000000..2044db6
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 0000000..bfc7d71
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 0000000..05fbe83
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 0000000..2de9b56
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
index dea7add..a04f4f5 100644
--- a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 0000000..f70030b
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 0000000..298cb95
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
index c10066e..d5bd44c 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 0000000..056fc51
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
index 8276d99..2258851 100644
--- a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 0000000..ff49d58
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png
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
index ed32cf6..30892b8 100644
--- a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 0000000..ab64cd6
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
index 5661f6b..d40b106 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 0000000..0ddcb79
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
index 5182f1e..7bde452e 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 0000000..8831bc0
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
index 0f6a3e1..4726406 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 0000000..dca7a32
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index 44c84f1..8063fcd 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 0000000..fa32a2c
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 98c085b..daa3c8a 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/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_normal_off_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 0000000..e58df5c
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index f0c1328..ea002f5 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/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_normal_on_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 0000000..5a95073
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 0000000..4c024e2
--- /dev/null
+++ b/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_popup_selected_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 0000000..0b340e2
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index a2b17ba..10a6ab5 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/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_pressed_off_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 0000000..58b7054
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 99ff0af..e6227c3 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 0000000..3da5f47
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
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
index d40afeb..8407877 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 0000000..bd6ec94
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png
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
index d1a2f75..630340f 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 0000000..eef27a3
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 36df715..19957fa 100644
--- a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 0000000..8a51d71
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider.png b/java/res/drawable-xhdpi/suggestions_strip_divider_holo.png
similarity index 100%
rename from java/res/drawable-xhdpi/suggestions_strip_divider.png
rename to java/res/drawable-xhdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 0000000..0334602
--- /dev/null
+++ b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 0000000..0047e5c
--- /dev/null
+++ b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
index 7c9f34f..ffb9598 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 0000000..df4e358
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 0000000..070fe8d
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png
deleted file mode 100644
index b0ee35d..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 0000000..33bbe3c
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
index f964346..bdc1267 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 0000000..023e647
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 0000000..2c1fe6d
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 0000000..49b2651
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 0000000..85473bc
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 0000000..a95d554
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 0000000..21b0ac0
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
index 8c83d9f..ec72c38 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 0000000..d46c26b
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 0000000..64fdb17
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
index 19acffa..bf55605 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 0000000..3a56ed9
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
index 78923fa..a1d4b22 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 0000000..df3eba7
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png
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
index 71234e5..9eaa005 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 0000000..0cf38f2
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
index 4e9631e..5c2b406 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 0000000..c9b2504
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
index 66c0e3c..a32f741 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 0000000..1398a3e
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
index dc67c6f..f492397 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 0000000..1f5f922
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index 2e12dd1..65e455c 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 0000000..0310143
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 4ec5864..535a00a 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/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_normal_off_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 0000000..fb1dc62
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index 6b5c0c0..2166f62 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/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_normal_on_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 0000000..7034621
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 0000000..f74ac5c
--- /dev/null
+++ b/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_popup_selected_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 0000000..e58d664
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 6fd8eed..2fd8b67 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/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_pressed_off_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 0000000..8e01cfa2
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 9132288..d0252e1 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 0000000..1619411
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
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
index f781491..284302f 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 0000000..dcc0ab0
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png
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
index a79499f..1ae2625 100644
--- 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
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 0000000..5fd1751
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 91d5d7f..92c479d 100644
--- a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 0000000..1336d80
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_holo.png
similarity index 100%
rename from java/res/drawable-xxhdpi/suggestions_strip_divider.png
rename to java/res/drawable-xxhdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 0000000..5f0b3de
--- /dev/null
+++ b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 0000000..9b37dd0
--- /dev/null
+++ b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
index dd95be6..0196033 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 0000000..c3937c4
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 0000000..0347327
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 0000000..0c66a6b
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
index fc85e51..151fafe 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 0000000..82b4d51
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 0000000..4e14070
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 0000000..78865cb
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 0000000..a429d66
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 0000000..1b9952a
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 0000000..a886505
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
index d513ad9..143ec00 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 0000000..e5be028
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 0000000..2da7b65
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
index ddfc1a9..774174c 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 0000000..ee51c56
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
index a4df3bb..ea89a87 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 0000000..08d4f8a
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.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
index 01075eb..abd263f 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 0000000..90c9637
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
index a36724c..9bc9eff 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 0000000..42331e9
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
index 2706dca..413c4ff 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 0000000..5a3ed0d
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml b/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml
new file mode 100644
index 0000000..e518ca1
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- Functional keys. -->
+    <item android:state_pressed="true"
+          android:drawable="@color/key_background_pressed_lxx_light" />
+    <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_keyboard_key_lxx_light.xml b/java/res/drawable/btn_keyboard_key_lxx_light.xml
new file mode 100644
index 0000000..60fe02d
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_lxx_light.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<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_active_pressed_lxx_light" />
+    <item android:state_active="true"
+          android:drawable="@drawable/btn_keyboard_key_active_lxx_light" />
+
+    <!-- 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_pressed_on_lxx_light" />
+    <item android:state_checkable="true" android:state_pressed="true"
+          android:drawable="@drawable/btn_keyboard_key_pressed_off_lxx_light" />
+    <item android:state_checkable="true" android:state_checked="true"
+          android:drawable="@drawable/btn_keyboard_key_normal_on_lxx_light" />
+    <item android:state_checkable="true"
+          android:drawable="@drawable/btn_keyboard_key_normal_off_lxx_light" />
+
+    <!-- Empty background keys. -->
+    <item android:state_empty="true"
+          android:drawable="@color/key_background_lxx_light" />
+
+    <!-- Normal keys. -->
+    <item android:state_pressed="true"
+          android:drawable="@color/key_background_pressed_lxx_light" />
+    <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
new file mode 100644
index 0000000..dee6457
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+          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_lxx_light.xml b/java/res/drawable/btn_keyboard_spacebar_lxx_light.xml
new file mode 100644
index 0000000..acd19fd
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_spacebar_lxx_light.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+          android:drawable="@color/key_background_pressed_lxx_light" />
+    <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_suggestion_lxx_light.xml b/java/res/drawable/btn_suggestion_lxx_light.xml
new file mode 100644
index 0000000..84a9120
--- /dev/null
+++ b/java/res/drawable/btn_suggestion_lxx_light.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<selector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+>
+    <item
+        android:state_pressed="true"
+        android:drawable="@color/suggested_word_background_selected_lxx_dark" />
+</selector>
diff --git a/java/res/drawable/keyboard_key_feedback_lxx_light.xml b/java/res/drawable/keyboard_key_feedback_lxx_light.xml
new file mode 100644
index 0000000..f4341c9
--- /dev/null
+++ b/java/res/drawable/keyboard_key_feedback_lxx_light.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<selector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <!-- Left edge -->
+    <item latin:state_left_edge="true" latin:state_has_morekeys="true"
+          android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+    <item latin:state_left_edge="true"
+          android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+
+    <!-- Right edge -->
+    <item latin:state_right_edge="true" latin:state_has_morekeys="true"
+          android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+    <item latin:state_right_edge="true"
+          android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+
+    <item latin:state_has_morekeys="true"
+          android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+    <item android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+</selector>
diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml
index 9ff090a..a6ea38b 100644
--- a/java/res/layout/emoji_palettes_view.xml
+++ b/java/res/layout/emoji_palettes_view.xml
@@ -30,6 +30,7 @@
         android:orientation="horizontal"
         android:layout_width="match_parent"
         android:layout_height="@dimen/config_suggestions_strip_height"
+        style="?attr/suggestionStripViewStyle"
     >
         <TabHost
             android:id="@+id/emoji_category_tabhost"
@@ -57,10 +58,7 @@
                     android:visibility="gone" />
             </FrameLayout>
         </TabHost>
-        <View
-            android:layout_width="2dip"
-            android:layout_height="match_parent"
-            android:background="@drawable/suggestions_strip_divider" />
+        <include layout="@layout/suggestion_divider" />
         <!-- TODO: Implement KeyView and replace this. -->
         <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
              We just need to ignore the system's audio and haptic feedback settings. -->
diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml
index 563599d..dfea017 100644
--- a/java/res/layout/suggestion_divider.xml
+++ b/java/res/layout/suggestion_divider.xml
@@ -26,9 +26,9 @@
     android:layout_height="match_parent"
     android:padding="0dp"
     android:gravity="center"
-    android:src="@drawable/suggestions_strip_divider"
     android:contentDescription="@null"
     android:clickable="false"
     android:longClickable="false"
     android:hapticFeedbackEnabled="false"
-    android:soundEffectsEnabled="false" />
+    android:soundEffectsEnabled="false"
+    style="?attr/suggestionStripViewStyle" />
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 396c166..6487955 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -238,7 +238,6 @@
         <attr name="iconSpaceKeyForNumberLayout" format="reference" />
         <attr name="iconShiftKeyShifted" format="reference" />
         <attr name="iconShortcutKeyDisabled" format="reference" />
-        <attr name="iconTabKeyPreview" format="reference" />
         <attr name="iconLanguageSwitchKey" format="reference" />
         <attr name="iconZwnjKey" format="reference" />
         <attr name="iconZwjKey" format="reference" />
@@ -331,8 +330,6 @@
         </attr>
         <!-- The icon for disabled key -->
         <attr name="keyIconDisabled" format="string" />
-        <!-- The icon to show in the popup preview. -->
-        <attr name="keyIconPreview" format="string" />
         <!-- The key style to specify a set of key attributes defined by <key_style/> -->
         <attr name="keyStyle" format="string" />
         <!-- Visual insets, in the proportion of keyboard width. -->
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 0eee08d..ad7a04e 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -40,21 +40,36 @@
     <color name="typed_word_color_klp">#D8F0F0F0</color>
     <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_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 resources for LXX_Light theme. -->
+    <color name="key_text_color_lxx_light">#546E7A</color>
+    <color name="key_text_inactive_color_lxx_light">#99546E7A</color>
+    <color name="key_hint_letter_color_lxx_light">#99546E7A</color>
+    <color name="highlight_color_lxx_light">#4DB6AC</color>
+    <color name="typed_word_color_lxx_light">#D84DB6AC</color>
+    <color name="suggested_word_color_lxx_light">#B24DB6AC</color>
+    <color name="highlight_translucent_color_lxx_light">#994DB6AC</color>
+    <color name="keyboard_background_lxx_light">#ECEFF1</color>
+    <color name="key_background_lxx_light">#ECEFF1</color>
+    <color name="key_background_pressed_lxx_light">#26546E7A</color>
+    <color name="suggestions_strip_background_lxx_light">#E4E7E9</color>
+    <color name="suggested_word_background_selected_lxx_light">#26546E7A</color>
+    <color name="gesture_floating_preview_color_lxx_light">#C0000000</color>
+    <color name="emoji_tab_page_indicator_background_lxx_light">#E4E7E9</color>
+    <!-- Color resources for LXX_Dark theme. -->
+    <color name="key_text_color_lxx_dark">#B3FFFFFF</color>
+    <color name="key_text_inactive_color_lxx_dark">#66FFFFFF</color>
+    <color name="key_hint_letter_color_lxx_dark">#66FFFFFF</color>
+    <color name="highlight_color_lxx_dark">#80CBC4</color>
+    <color name="typed_word_color_lxx_dark">#D880CBC4</color>
+    <color name="suggested_word_color_lxx_dark">#B280CBC4</color>
+    <color name="highlight_translucent_color_lxx_dark">#9980CBC4</color>
+    <color name="keyboard_background_lxx_dark">#263238</color>
+    <color name="key_background_lxx_dark">#263238</color>
+    <color name="key_background_pressed_lxx_dark">#26CFD8DC</color>
+    <color name="suggestions_strip_background_lxx_dark">#21272B</color>
+    <color name="suggested_word_background_selected_lxx_dark">#26CFD8DC</color>
     <color name="gesture_floating_preview_color_lxx_dark">#C0000000</color>
-    <color name="emoji_tab_page_indicator_background_lxx_dark">#263238</color>
+    <color name="emoji_tab_page_indicator_background_lxx_dark">#21272B</color>
     <!-- Color resources for setup wizard and tutorial -->
     <color name="setup_background">#FFEBEBEB</color>
     <color name="setup_text_dark">#FF707070</color>
diff --git a/java/res/values/keyboard-icons-holo.xml b/java/res/values/keyboard-icons-holo.xml
index 669d2c0..d95ff82 100644
--- a/java/res/values/keyboard-icons-holo.xml
+++ b/java/res/values/keyboard-icons-holo.xml
@@ -32,7 +32,6 @@
         <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
         <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_holo_dark</item>
         <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_holo_dark</item>
-        <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_dark</item>
         <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo_dark</item>
         <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo_dark</item>
diff --git a/java/res/values/keyboard-icons-lxx-dark.xml b/java/res/values/keyboard-icons-lxx-dark.xml
index 6e9c4d1..b1549f2 100644
--- a/java/res/values/keyboard-icons-lxx-dark.xml
+++ b/java/res/values/keyboard-icons-lxx-dark.xml
@@ -21,7 +21,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="KeyboardIcons.LXX_Dark">
         <!-- Keyboard icons -->
-        <!-- TODO: Update those icons for LXX theme. -->
+        <!-- TODO: Update those icons for LXX_Dark theme. -->
         <item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
         <item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
         <item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
@@ -38,7 +38,6 @@
         <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
         <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
         <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_dark</item>
-        <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_dark</item>
         <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo_dark</item>
         <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo_dark</item>
diff --git a/java/res/values/keyboard-icons-lxx-light.xml b/java/res/values/keyboard-icons-lxx-light.xml
new file mode 100644
index 0000000..651e75c
--- /dev/null
+++ b/java/res/values/keyboard-icons-lxx-light.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <style name="KeyboardIcons.LXX_Light">
+        <!-- Keyboard icons -->
+        <!-- TODO: Update those icons for LXX_Light theme. -->
+        <item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_light</item>
+        <item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_light</item>
+        <item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_light</item>
+        <item name="iconSpaceKey">@drawable/sym_keyboard_spacebar_lxx_light</item>
+        <item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_light</item>
+        <item name="iconGoKey">@drawable/sym_keyboard_go_lxx_light</item>
+        <item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_light</item>
+        <item name="iconSendKey">@drawable/sym_keyboard_send_lxx_light</item>
+        <item name="iconNextKey">@drawable/sym_keyboard_next_lxx_light</item>
+        <item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_light</item>
+        <item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
+        <item name="iconTabKey">@drawable/sym_keyboard_tab_holo_dark</item>
+        <item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
+        <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
+        <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
+        <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
+        <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
+        <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo_dark</item>
+        <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo_dark</item>
+        <item name="iconEmojiKey">@drawable/sym_keyboard_smiley_lxx_light</item>
+    </style>
+</resources>
diff --git a/java/res/values/keyboard-themes.xml b/java/res/values/keyboard-themes.xml
index 28a34c3..9d772c4 100644
--- a/java/res/values/keyboard-themes.xml
+++ b/java/res/values/keyboard-themes.xml
@@ -20,15 +20,15 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- For keyboard color scheme option dialog. -->
     <string-array name="keyboard_theme_names" translatable="false">
-        <!-- TODO: Implement Material Light theme. -->
+        <item>@string/keyboard_theme_material_light</item>
         <item>@string/keyboard_theme_material_dark</item>
         <item>@string/keyboard_theme_holo_white</item>
         <item>@string/keyboard_theme_holo_blue</item>
     </string-array>
     <!-- An element must be a keyboard theme id of {@link KeyboardTheme#THEME_ID_*}. -->
     <string-array name="keyboard_theme_ids" translatable="false">
-        <!-- TODO: Implement Material Light theme. -->
         <item>3</item>
+        <item>4</item>
         <item>2</item>
         <item>0</item>
     </string-array>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 073ae90..6118ce1 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -121,6 +121,7 @@
         <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:src">@drawable/suggestions_strip_divider_holo</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_ics</item>
         <item name="colorTypedWord">@color/typed_word_color_ics</item>
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index f895de5..1933860 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -121,6 +121,7 @@
         <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:src">@drawable/suggestions_strip_divider_holo</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_klp</item>
         <item name="colorTypedWord">@color/typed_word_color_klp</item>
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index 1db8f42..c04e04d 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -34,7 +34,7 @@
         parent="Keyboard"
     >
         <!-- This should be aligned with KeyboardSwitcher.KEYBOARD_THEMES[] -->
-        <item name="themeId">3</item>
+        <item name="themeId">4</item>
         <item name="keyboardTopPadding">@fraction/config_keyboard_top_padding_holo</item>
         <item name="keyboardBottomPadding">@fraction/config_keyboard_bottom_padding_holo</item>
         <item name="horizontalGap">@fraction/config_key_horizontal_gap_holo</item>
@@ -108,8 +108,7 @@
         parent="KeyboardView.LXX_Dark"
     >
         <item name="android:background">@drawable/keyboard_popup_panel_background_lxx_dark</item>
-        <!-- Reuse KLP key background -->
-        <item name="keyBackground">@drawable/btn_keyboard_key_popup_klp</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>
@@ -122,6 +121,7 @@
         <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
         <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
         <item name="android:background">@color/suggestions_strip_background_lxx_dark</item>
+        <item name="android:src">@drawable/suggestions_strip_divider_lxx_dark</item>
         <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
         <item name="colorValidTypedWord">@color/typed_word_color_lxx_dark</item>
         <item name="colorTypedWord">@color/typed_word_color_lxx_dark</item>
diff --git a/java/res/values/themes-lxx-light.xml b/java/res/values/themes-lxx-light.xml
new file mode 100644
index 0000000..3695f80
--- /dev/null
+++ b/java/res/values/themes-lxx-light.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+    <style name="KeyboardTheme.LXX_Light" parent="KeyboardIcons.LXX_Light">
+        <item name="keyboardStyle">@style/Keyboard.LXX_Light</item>
+        <item name="keyboardViewStyle">@style/KeyboardView.LXX_Light</item>
+        <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Light</item>
+        <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Light</item>
+        <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Light</item>
+        <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Light</item>
+        <item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX_Light</item>
+        <item name="suggestionWordStyle">@style/SuggestionWord.LXX_Light</item>
+    </style>
+    <style
+        name="Keyboard.LXX_Light"
+        parent="Keyboard"
+    >
+        <!-- This should be aligned with KeyboardSwitcher.KEYBOARD_THEMES[] -->
+        <item name="themeId">3</item>
+        <item name="keyboardTopPadding">@fraction/config_keyboard_top_padding_holo</item>
+        <item name="keyboardBottomPadding">@fraction/config_keyboard_bottom_padding_holo</item>
+        <item name="horizontalGap">@fraction/config_key_horizontal_gap_holo</item>
+        <item name="verticalGap">@fraction/config_key_vertical_gap_holo</item>
+        <item name="touchPositionCorrectionData">@array/touch_position_correction_data_holo</item>
+    </style>
+    <style
+        name="KeyboardView.LXX_Light"
+        parent="KeyboardView"
+    >
+        <item name="android:background">@color/keyboard_background_lxx_light</item>
+        <item name="keyBackground">@drawable/btn_keyboard_key_lxx_light</item>
+        <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx_light</item>
+        <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx_light</item>
+        <item name="spacebarIconWidthRatio">0.9</item>
+        <item name="keyTypeface">normal</item>
+        <item name="keyTextColor">@color/key_text_color_lxx_light</item>
+        <item name="keyTextInactivatedColor">@color/key_text_inactive_color_lxx_light</item>
+        <item name="functionalTextColor">@color/key_hint_letter_color_lxx_light</item>
+        <item name="keyHintLetterColor">@color/key_hint_letter_color_lxx_light</item>
+        <item name="keyHintLabelColor">@color/key_text_inactive_color_lxx_light</item>
+        <item name="keyShiftedLetterHintInactivatedColor">@color/key_text_inactive_color_lxx_light</item>
+        <item name="keyShiftedLetterHintActivatedColor">@color/key_text_color_lxx_light</item>
+        <item name="keyPreviewTextColor">@color/key_text_color_lxx_light</item>
+        <!-- A negative value to disable key text shadow layer. -->
+        <item name="keyTextShadowRadius">-1.0</item>
+    </style>
+    <style
+        name="MainKeyboardView.LXX_Light"
+        parent="KeyboardView.LXX_Light"
+    >
+        <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_lxx_light</item>
+        <item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
+        <item name="gestureFloatingPreviewTextColor">@color/highlight_color_lxx_light</item>
+        <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_lxx_light</item>
+        <item name="gestureTrailColor">@color/highlight_color_lxx_light</item>
+        <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_lxx_light</item>
+        <item name="languageOnSpacebarTextColor">@color/key_text_inactive_color_lxx_light</item>
+        <!-- A negative value to disable text shadow layer. -->
+        <item name="languageOnSpacebarTextShadowRadius">-1.0</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_Light"
+        parent="MainKeyboardView.LXX_Light"
+    >
+        <item name="categoryIndicatorEnabled">false</item>
+        <item name="categoryPageIndicatorColor">@color/highlight_color_lxx_light</item>
+        <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_lxx_light</item>
+        <!-- TODO: Update those icons to LXX_Light theme. -->
+        <item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
+        <item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
+        <item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
+        <item name="iconEmojiCategory3Tab">@drawable/ic_emoji_nature_holo_dark</item>
+        <item name="iconEmojiCategory4Tab">@drawable/ic_emoji_places_holo_dark</item>
+        <item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
+        <item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
+    </style>
+    <style
+        name="MoreKeysKeyboard.LXX_Light"
+        parent="Keyboard.LXX_Light"
+    >
+        <item name="keyboardTopPadding">0%p</item>
+        <item name="keyboardBottomPadding">0%p</item>
+        <item name="horizontalGap">0%p</item>
+        <item name="touchPositionCorrectionData">@null</item>
+    </style>
+    <style
+        name="MoreKeysKeyboardView.LXX_Light"
+        parent="KeyboardView.LXX_Light"
+    >
+        <item name="android:background">@drawable/keyboard_popup_panel_background_lxx_light</item>
+        <!-- Reuse KLP key background -->
+        <item name="keyBackground">@drawable/btn_keyboard_key_popup_klp</item>
+        <item name="keyTypeface">normal</item>
+        <item name="verticalCorrection">@dimen/config_more_keys_keyboard_vertical_correction_holo</item>
+    </style>
+    <style
+        name="SuggestionStripView.LXX_Light"
+        parent="KeyboardView.LXX_Light"
+    >
+        <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">@color/suggestions_strip_background_lxx_light</item>
+        <item name="android:src">@drawable/suggestions_strip_divider_lxx_light</item>
+        <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
+        <item name="colorValidTypedWord">@color/typed_word_color_lxx_light</item>
+        <item name="colorTypedWord">@color/typed_word_color_lxx_light</item>
+        <item name="colorAutoCorrect">@color/highlight_color_lxx_light</item>
+        <item name="colorSuggested">@color/suggested_word_color_lxx_light</item>
+        <item name="alphaObsoleted">70%</item>
+    </style>
+    <style
+        name="SuggestionWord.LXX_Light"
+        parent="SuggestionWord"
+    >
+        <item name="android:background">@drawable/btn_suggestion_lxx_light</item>
+        <item name="android:textColor">@color/highlight_color_lxx_light</item>
+    </style>
+</resources>
diff --git a/java/res/xml-sw600dp/key_space_5kw.xml b/java/res/xml-sw600dp/key_space_5kw.xml
index 71ae5fd..8302184 100644
--- a/java/res/xml-sw600dp/key_space_5kw.xml
+++ b/java/res/xml-sw600dp/key_space_5kw.xml
@@ -22,8 +22,12 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
     <switch>
+        <!-- fa: Perisan
+             kn: Kannada
+             ne: Nepali
+             te: Telugu -->
         <case
-            latin:languageCode="fa|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="true"
         >
             <Key
@@ -35,7 +39,7 @@
                 latin:keyStyle="zwnjKeyStyle" />
         </case>
         <case
-            latin:languageCode="fa|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="false"
         >
             <Key
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index 7de2769..877c796 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -121,7 +121,6 @@
             <key-style
                 latin:styleName="tabKeyStyle"
                 latin:keySpec="!icon/tab_key|!code/key_action_previous"
-                latin:keyIconPreview="!icon/tab_key_preview"
                 latin:backgroundType="functional" />
         </case>
         <case
@@ -131,14 +130,12 @@
             <key-style
                 latin:styleName="tabKeyStyle"
                 latin:keySpec="!icon/tab_key|!code/key_action_next"
-                latin:keyIconPreview="!icon/tab_key_preview"
                 latin:backgroundType="functional" />
         </case>
         <default>
             <key-style
                 latin:styleName="tabKeyStyle"
                 latin:keySpec="!icon/tab_key|!code/key_tab"
-                latin:keyIconPreview="!icon/tab_key_preview"
                 latin:backgroundType="functional" />
         </default>
     </switch>
diff --git a/java/res/xml-sw600dp/rows_kannada.xml b/java/res/xml-sw600dp/rows_kannada.xml
new file mode 100644
index 0000000..55eedc5
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_kannada.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml-sw600dp/rows_malayalam.xml b/java/res/xml-sw600dp/rows_malayalam.xml
new file mode 100644
index 0000000..1df7e6e
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_malayalam.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml-sw600dp/rows_tamil.xml b/java/res/xml-sw600dp/rows_tamil.xml
new file mode 100644
index 0000000..785e751
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_tamil.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml-sw600dp/rows_telugu.xml b/java/res/xml-sw600dp/rows_telugu.xml
new file mode 100644
index 0000000..c9aeb7e
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_telugu.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml/kbd_kannada.xml b/java/res/xml/kbd_kannada.xml
new file mode 100644
index 0000000..0c59228
--- /dev/null
+++ b/java/res/xml/kbd_kannada.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_kannada" />
+</Keyboard>
diff --git a/java/res/xml/kbd_malayalam.xml b/java/res/xml/kbd_malayalam.xml
new file mode 100644
index 0000000..000b23f
--- /dev/null
+++ b/java/res/xml/kbd_malayalam.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_malayalam" />
+</Keyboard>
diff --git a/java/res/xml/kbd_tamil.xml b/java/res/xml/kbd_tamil.xml
new file mode 100644
index 0000000..617e4de
--- /dev/null
+++ b/java/res/xml/kbd_tamil.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_tamil" />
+</Keyboard>
diff --git a/java/res/xml/kbd_telugu.xml b/java/res/xml/kbd_telugu.xml
new file mode 100644
index 0000000..b4fc337
--- /dev/null
+++ b/java/res/xml/kbd_telugu.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_telugu" />
+</Keyboard>
diff --git a/java/res/xml/key_space_5kw.xml b/java/res/xml/key_space_5kw.xml
index b6d38fb..b1fe0bb 100644
--- a/java/res/xml/key_space_5kw.xml
+++ b/java/res/xml/key_space_5kw.xml
@@ -22,8 +22,12 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
     <switch>
+        <!-- fa: Perisan
+             kn: Kannada
+             ne: Nepali
+             te: Telugu -->
         <case
-            latin:languageCode="fa|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="true"
         >
             <Key
@@ -35,7 +39,7 @@
                 latin:keyStyle="zwnjKeyStyle" />
         </case>
         <case
-            latin:languageCode="fa|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="false"
         >
             <Key
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 8b3bb2e..bc739f7 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -119,14 +119,12 @@
     <key-style
         latin:styleName="tabKeyStyle"
         latin:keySpec="!icon/tab_key|!code/key_tab"
-        latin:keyIconPreview="!icon/tab_key_preview"
         latin:backgroundType="functional" />
     <!-- Note: This key style is not for functional tab key. This is used for the tab key which is
          laid out as normal letter key. -->
     <key-style
         latin:styleName="nonSpecialBackgroundTabKeyStyle"
-        latin:keySpec="!icon/tab_key|!code/key_tab"
-        latin:keyIconPreview="!icon/tab_key_preview" />
+        latin:keySpec="!icon/tab_key|!code/key_tab" />
     <key-style
         latin:styleName="baseForLayoutSwitchKeyStyle"
         latin:keyLabelFlags="preserveCase|followFunctionalTextColor"
diff --git a/java/res/xml/key_styles_currency.xml b/java/res/xml/key_styles_currency.xml
index f576d04..900c9bb 100644
--- a/java/res/xml/key_styles_currency.xml
+++ b/java/res/xml/key_styles_currency.xml
@@ -18,15 +18,10 @@
 */
 -->
 
-<merge
-    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
->
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
     <switch>
-        <case
-            latin:passwordInput="true"
-        >
-            <include
-                latin:keyboardLayout="@xml/key_styles_currency_dollar" />
+        <case latin:passwordInput="true">
+            <include latin:keyboardLayout="@xml/key_styles_currency_dollar" />
         </case>
         <!-- Countries using Euro currency, 23 countries as of November 2012.
               1. Andorra (ca_AD, ca_ES)
@@ -52,11 +47,8 @@
              21. Slovenia (sl_SI)
              22. Spain (es_ES, ca_ES, eu_ES, gl_ES)
              23. Vatican City (it_VA) -->
-        <case
-            latin:countryCode="AD|AT|BE|CY|EE|FI|FR|DE|GR|IE|IT|XK|LU|MT|MO|ME|NL|PT|SM|SK|SI|ES|VA"
-        >
-            <include
-                latin:keyboardLayout="@xml/key_styles_currency_euro" />
+        <case latin:countryCode="AD|AT|BE|CY|EE|FI|FR|DE|GR|IE|IT|XK|LU|MT|MO|ME|NL|PT|SM|SK|SI|ES|VA">
+            <include latin:keyboardLayout="@xml/key_styles_currency_euro" />
         </case>
         <!-- Note: Some subtype locale may not have country code, and it it supposed to indicate the
              country where the language originally/mainly spoken. -->
@@ -76,26 +68,54 @@
              sl: Slovenia (sl_SL)
              sv: Sweden (sv_SV)
              tr: Trukey (tr_TR) -->
-        <case
-            latin:localeCode="da|de|es|el|fi|fr|it|nl|sk|sl|sv|tr"
-        >
-            <include
-                latin:keyboardLayout="@xml/key_styles_currency_euro" />
+        <case latin:localeCode="da|de|es|el|fi|fr|it|nl|sk|sl|sv|tr">
+            <include latin:keyboardLayout="@xml/key_styles_currency_euro" />
         </case>
         <!-- ca: Catalan (Andorra, Spain)
              et: Estonian (Estonia)
              lb: Luxembougish (Luxembourg)
              mt: Maltese (Malta) -->
-        <case
-            latin:languageCode="ca|et|lb|mt"
-        >
-            <include
-                latin:keyboardLayout="@xml/key_styles_currency_euro" />
+        <case latin:languageCode="ca|et|lb|mt">
+            <include latin:keyboardLayout="@xml/key_styles_currency_euro" />
+        </case>
+        <!-- fa: Persian (Rial and Afgahni)
+             hi: Hindi (Indian Rupee)
+             iw: Hebrew (New Sheqel)
+             lo: Lao (Kip)
+             mn: Mongolian (Tugrik)
+             ne: Nepali (Nepalese Rupee)
+             ta_IN: Tamil (Tamil Rupee)
+             th: Thai (Baht)
+             uk: Ukrainian (Hryvnia)
+             vi: Vietnamese (Dong)  -->
+        <!-- TODO: The currency sign of Turkish Lira was created in 2012 and assigned U+20BA for
+             its unicode, although there is no font glyph for it as of November 2012. -->
+        <!-- TODO: The currency sign of Armenian Dram was created in 2012 and assigned U+058F for
+             its unicode, although there is no font glyph for it as of September 2013. -->
+        <case latin:languageCode="fa|hi|iw|lo|mn|ne|ta|th|uk|vi">
+            <!-- U+00A3: "£" POUND SIGN
+                 U+20AC: "€" EURO SIGN
+                 U+00A2: "¢" CENT SIGN -->
+            <key-style
+                latin:styleName="currencyKeyStyle"
+                latin:keySpec="!text/keyspec_currency"
+                latin:moreKeys="!text/morekeys_currency" />
+            <key-style
+                latin:styleName="moreCurrency1KeyStyle"
+                latin:keySpec="&#x00A3;" />
+            <key-style
+                latin:styleName="moreCurrency2KeyStyle"
+                latin:keySpec="&#x20AC;" />
+            <key-style
+                latin:styleName="moreCurrency3KeyStyle"
+                latin:keySpec="$"
+                latin:moreKeys="&#x00A2;" />
+            <key-style
+                latin:styleName="moreCurrency4KeyStyle"
+                latin:keySpec="&#x00A2;" />
         </case>
         <!-- IN: India (Rupee) -->
-        <case
-            latin:countryCode="IN"
-        >
+        <case latin:countryCode="IN">
             <!-- U+20B9: "₹" INDIAN RUPEE SIGN
                  U+00A3: "£" POUND SIGN
                  U+20AC: "€" EURO SIGN
@@ -118,48 +138,8 @@
                 latin:styleName="moreCurrency4KeyStyle"
                 latin:keySpec="&#x00A2;" />
         </case>
-        <!-- bn: Bengali (Bangladesh Taka)
-             fa: Persian (Rial and Afgahni)
-             hi: Hindi (Indian Rupee)
-             iw: Hebrew (New Sheqel)
-             lo: Lao (Kip)
-             mn: Mongolian (Tugrik)
-             ne: Nepali (Nepalese Rupee)
-             th: Thai (Baht)
-             uk: Ukrainian (Hryvnia)
-             vi: Vietnamese (Dong)  -->
-        <!-- TODO: The currency sign of Turkish Lira was created in 2012 and assigned U+20BA for
-             its unicode, although there is no font glyph for it as of November 2012. -->
-        <!-- TODO: The currency sign of Armenian Dram was created in 2012 and assigned U+058F for
-             its unicode, although there is no font glyph for it as of September 2013. -->
-        <case
-            latin:languageCode="bn|fa|hi|iw|lo|mn|ne|th|uk|vi"
-        >
-            <!-- U+00A3: "£" POUND SIGN
-                 U+20AC: "€" EURO SIGN
-                 U+00A2: "¢" CENT SIGN -->
-            <key-style
-                latin:styleName="currencyKeyStyle"
-                latin:keySpec="!text/keyspec_currency"
-                latin:moreKeys="!text/morekeys_currency" />
-            <key-style
-                latin:styleName="moreCurrency1KeyStyle"
-                latin:keySpec="&#x00A3;" />
-            <key-style
-                latin:styleName="moreCurrency2KeyStyle"
-                latin:keySpec="&#x20AC;" />
-            <key-style
-                latin:styleName="moreCurrency3KeyStyle"
-                latin:keySpec="$"
-                latin:moreKeys="&#x00A2;" />
-            <key-style
-                latin:styleName="moreCurrency4KeyStyle"
-                latin:keySpec="&#x00A2;" />
-        </case>
         <!-- GB: United Kingdom (Pound) -->
-        <case
-            latin:countryCode="GB"
-        >
+        <case latin:countryCode="GB">
             <!-- U+00A3: "£" POUND SIGN
                  U+20AC: "€" EURO SIGN
                  U+00A5: "¥" YEN SIGN
@@ -185,8 +165,7 @@
         </case>
         <!-- ar: Arabic (Dollar and Rial) -->
         <default>
-            <include
-                latin:keyboardLayout="@xml/key_styles_currency_dollar" />
+            <include latin:keyboardLayout="@xml/key_styles_currency_dollar" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml/keyboard_layout_set_kannada.xml b/java/res/xml/keyboard_layout_set_kannada.xml
new file mode 100644
index 0000000..8dcf996
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_kannada.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_kannada"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/keyboard_layout_set_malayalam.xml b/java/res/xml/keyboard_layout_set_malayalam.xml
new file mode 100644
index 0000000..14c76ba
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_malayalam.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_malayalam"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/keyboard_layout_set_tamil.xml b/java/res/xml/keyboard_layout_set_tamil.xml
new file mode 100644
index 0000000..5c04915
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_tamil.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_tamil"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/keyboard_layout_set_telugu.xml b/java/res/xml/keyboard_layout_set_telugu.xml
new file mode 100644
index 0000000..aca47b9
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_telugu.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_telugu"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 67be242..5021f33 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -63,11 +63,13 @@
     ka_GE: Georgian (Georgia)/georgian
     kk: Kazakh/east_slavic
     km_KH: Khmer (Cambodia)/khmer
+    (kn_IN: Kannada (India)/kannada) # This is a preliminary keyboard layout.
     ky: Kyrgyz/east_slavic
     lo_LA: Lao (Laos)/lao
     lt: Lithuanian/qwerty
     lv: Latvian/qwerty
     mk: Macedonian/south_slavic
+    (ml_IN: Malayalam (India)/malayalam) # This is a preliminary keyboard layout.
     mn_MN: Mongolian (Mongolia)/mongolian
     (mr_IN: Marathi (India)/marathi) # This is a preliminary keyboard layout.
     ms_MY: Malay (Malaysia)/qwerty
@@ -89,6 +91,8 @@
     (sr-Latn: Serbian/qwerty) # not yet implemented.
     sv: Swedish/nordic
     sw: Swahili/qwerty
+    (ta_IN: Tamil (India)/tamil) # This is a preliminary keyboard layout.
+    (te_IN: Telugu (India)/telugu) # This is a preliminary keyboard layout.
     th: Thai/thai
     tl: Tagalog/spanish
     tr: Turkish/qwerty
@@ -442,6 +446,16 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=khmer,EmojiCapable"
             android:isAsciiCapable="false"
     />
+    <!-- TODO: This kannada keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0x8c78064f"
+            android:imeSubtypeLocale="kn_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=kannada,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0x2e391c04"
@@ -482,6 +496,16 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=south_slavic,EmojiCapable"
             android:isAsciiCapable="false"
     />
+    <!-- TODO: This malayalam keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0xc182ebd4"
+            android:imeSubtypeLocale="ml_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=malayalam,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0xcdcfc3ab"
@@ -666,6 +690,26 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable"
             android:isAsciiCapable="true"
     />
+    <!-- TODO: This tamil keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0x67acea2a"
+            android:imeSubtypeLocale="ta_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
+    <!-- TODO: This telugu keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0x1e177389"
+            android:imeSubtypeLocale="te_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=telugu,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0x1f94d5d4"
diff --git a/java/res/xml/rowkeys_bengali1.xml b/java/res/xml/rowkeys_bengali1.xml
index c1fd8b4..971fff6 100644
--- a/java/res/xml/rowkeys_bengali1.xml
+++ b/java/res/xml/rowkeys_bengali1.xml
@@ -20,35 +20,40 @@
 
 <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
     <!-- U+0994: "ঔ" BENGALI LETTER AU
+         U+09CC: "ৌ" BENGALI VOWEL SIGN AU
          U+09E7: "১" BENGALI DIGIT ONE -->
     <Key
         latin:keySpec="&#x0994;"
         latin:keyHintLabel="&#x09E7;"
-        latin:additionalMoreKeys="&#x09E7;,1" />
+        latin:additionalMoreKeys="&#x09CC;,&#x09E7;,1" />
     <!-- U+0990: "ঐ" BENGALI LETTER AI
+         U+09C8: "ৈ" BENGALI VOWEL SIGN AI
          U+09E8: "২" BENGALI DIGIT TWO -->
     <Key
         latin:keySpec="&#x0990;"
         latin:keyHintLabel="&#x09E8;"
-        latin:additionalMoreKeys="&#x09E8;,2" />
+        latin:additionalMoreKeys="&#x09C8;,&#x09E8;,2" />
     <!-- U+0986: "আ" BENGALI LETTER AA
+         U+09BE: "া" BENGALI VOWEL SIGN AA
          U+09E9: "৩" BENGALI DIGIT THREE -->
     <Key
         latin:keySpec="&#x0986;"
         latin:keyHintLabel="&#x09E9;"
-        latin:additionalMoreKeys="&#x09E9;,3" />
+        latin:additionalMoreKeys="&#x09BE;,&#x09E9;,3" />
     <!-- U+0988: "ঈ" BENGALI LETTER II
+         U+09C0: "ী" BENGALI VOWEL SIGN II
          U+09EA: "৪" BENGALI DIGIT FOUR -->
     <Key
         latin:keySpec="&#x0988;"
         latin:keyHintLabel="&#x09EA;"
-        latin:additionalMoreKeys="&#x09EA;,4" />
+        latin:additionalMoreKeys="&#x09C0;,&#x09EA;,4" />
     <!-- U+098A: "ঊ" BENGALI LETTER UU
+         U+09C2: "ূ" BENGALI VOWEL SIGN UU
          U+09EB: "৫" BENGALI DIGIT FIVE -->
     <Key
         latin:keySpec="&#x098A;"
         latin:keyHintLabel="&#x09EB;"
-        latin:additionalMoreKeys="&#x09EB;,5" />
+        latin:additionalMoreKeys="&#x09C2;,&#x09EB;,5" />
     <!-- U+09AC: "ব" BENGALI LETTER BA
          U+09AD: "ভ" BENGALI LETTER BHA
          U+09EC: "৬" BENGALI DIGIT SIX -->
diff --git a/java/res/xml/rowkeys_kannada1.xml b/java/res/xml/rowkeys_kannada1.xml
new file mode 100644
index 0000000..e7aecd8
--- /dev/null
+++ b/java/res/xml/rowkeys_kannada1.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0CCC: "ೌ" KANNADA VOWEL SIGN AU
+         U+0C94: "ಔ" KANNADA LETTER AU
+         U+0CE7: "೧" KANNADA DIGIT ONE -->
+    <Key
+        latin:keySpec="&#x0CCC;"
+        latin:moreKeys="&#x0C94;,&#x0CE7;,%"
+        latin:keyHintLabel="1"
+        latin:additionalMoreKeys="1" />
+    <!-- U+0CC8: "ೈ" KANNADA VOWEL SIGN AI
+         U+0C90: "ಐ" KANNADA LETTER AI
+         U+0CE8: "೨" KANNADA DIGIT TWO -->
+    <Key
+        latin:keySpec="&#x0CC8;"
+        latin:moreKeys="&#x0C90;,&#x0CE8;,%"
+        latin:keyHintLabel="2"
+        latin:additionalMoreKeys="2" />
+    <!-- U+0CBE: "ಾ" KANNADA VOWEL SIGN AA
+         U+0C86: "ಆ" KANNADA LETTER AA
+         U+0CE9: "೩" KANNADA DIGIT THREE -->
+    <Key
+        latin:keySpec="&#x0CBE;"
+        latin:moreKeys="&#x0C86;,&#x0CE9;,%"
+        latin:keyHintLabel="3"
+        latin:additionalMoreKeys="3" />
+    <!-- U+0CC0: "ೀ" KANNADA VOWEL SIGN II
+         U+0C88: "ಈ" KANNADA LETTER II
+         U+0CEA: "೪" KANNADA DIGIT FOUR -->
+    <Key
+        latin:keySpec="&#x0CC0;"
+        latin:moreKeys="&#x0C88;,&#x0CEA;,%"
+        latin:keyHintLabel="4"
+        latin:additionalMoreKeys="4" />
+    <!-- U+0CC2: "ೂ" KANNADA VOWEL SIGN UU
+         U+0C8A: "ಊ" KANNADA LETTER UU
+         U+0CEB: "೫" KANNADA DIGIT FIVE -->
+    <Key
+        latin:keySpec="&#x0CC2;"
+        latin:moreKeys="&#x0C8A;,&#x0CEB;,%"
+        latin:keyHintLabel="5"
+        latin:additionalMoreKeys="5" />
+    <!-- U+0CAC: "ಬ" KANNADA LETTER BA
+         U+0CAD: "ಭ" KANNADA LETTER BHA
+         U+0CEC: "೬" KANNADA DIGIT SIX -->
+    <Key
+        latin:keySpec="&#x0CAC;"
+        latin:moreKeys="&#x0CAD;,&#x0CEC;,%"
+        latin:keyHintLabel="6"
+        latin:additionalMoreKeys="6" />
+    <!-- U+0CB9: "ಹ" KANNADA LETTER HA
+         U+0C99: "ಙ" KANNADA LETTER NGA
+         U+0CED: "೭" KANNADA DIGIT SEVEN -->
+    <Key
+        latin:keySpec="&#x0CB9;"
+        latin:moreKeys="&#x0C99;,&#x0CED;,%"
+        latin:keyHintLabel="7"
+        latin:additionalMoreKeys="7" />
+    <!-- U+0C97: "ಗ" KANNADA LETTER GA
+         U+0C98: "ಘ" KANNADA LETTER GHA
+         U+0CEE: "೮" KANNADA DIGIT EIGHT -->
+    <Key
+        latin:keySpec="&#x0C97;"
+        latin:moreKeys="&#x0C98;,&#x0CEE;,%"
+        latin:keyHintLabel="8"
+        latin:additionalMoreKeys="8" />
+    <!-- U+0CA6: "ದ" KANNADA LETTER DA
+         U+0CA7: "ಧ" KANNADA LETTER DHA
+         U+0CEF: "೯" KANNADA DIGIT NINE -->
+    <Key
+        latin:keySpec="&#x0CA6;"
+        latin:moreKeys="&#x0CA7;,&#x0CEF;,%"
+        latin:keyHintLabel="9"
+        latin:additionalMoreKeys="9" />
+    <!-- U+0C9C: "ಜ" KANNADA LETTER JA
+         U+0C9D: "ಝ" KANNADA LETTER JHA
+         U+0CE6: "೦" KANNADA DIGIT ZERO -->
+    <Key
+        latin:keySpec="&#x0C9C;"
+        latin:moreKeys="&#x0C9D;,&#x0CE6;,%"
+        latin:keyHintLabel="0"
+        latin:additionalMoreKeys="0" />
+    <!-- U+0CA1: "ಡ" KANNADA LETTER DDA
+         U+0CA2: "ಢ" KANNADA LETTER DDHA -->
+    <Key
+        latin:keySpec="&#x0CA1;"
+        latin:moreKeys="&#x0CA2;" />
+</merge>
diff --git a/java/res/xml/rowkeys_kannada2.xml b/java/res/xml/rowkeys_kannada2.xml
new file mode 100644
index 0000000..f3e6c18
--- /dev/null
+++ b/java/res/xml/rowkeys_kannada2.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0CCB: "ೋ" KANNADA VOWEL SIGN OO
+         U+0C93: "ಓ" KANNADA LETTER OO -->
+    <Key
+        latin:keySpec="&#x0CCB;"
+        latin:moreKeys="&#x0C93;" />
+    <!-- U+0CC7: "ೇ" KANNADA VOWEL SIGN EE
+         U+0C8F: "ಏ" KANNADA LETTER EE -->
+    <Key
+        latin:keySpec="&#x0CC7;"
+        latin:moreKeys="&#x0C8F;" />
+    <!-- U+0CCD: "್" KANNADA SIGN VIRAMA
+         U+0C85: "ಅ" KANNADA LETTER A -->
+    <Key
+        latin:keySpec="&#x0CCD;"
+        latin:moreKeys="&#x0C85;" />
+    <!-- U+0CBF: "ಿ" KANNADA VOWEL SIGN I
+         U+0C87: "ಇ" KANNADA LETTER I -->
+    <Key
+        latin:keySpec="&#x0CBF;"
+        latin:moreKeys="&#x0C87;" />
+    <!-- U+0CC1: "ು" KANNADA VOWEL SIGN U
+         U+0C89: "ಉ" KANNADA LETTER U -->
+    <Key
+        latin:keySpec="&#x0CC1;"
+        latin:moreKeys="&#x0C89;" />
+    <!-- U+0CAA: "ಪ" KANNADA LETTER PA
+         U+0CAB: "ಫ" KANNADA LETTER PHA -->
+    <Key
+        latin:keySpec="&#x0CAA;"
+        latin:moreKeys="&#x0CAB;" />
+    <!-- U+0CB0: "ರ" KANNADA LETTER RA
+         U+0CB1: "ಱ" KANNADA LETTER RRA
+         U+0CC3: "ೃ" KANNADA VOWEL SIGN VOCALIC R -->
+    <Key
+        latin:keySpec="&#x0CB0;"
+        latin:moreKeys="&#x0CB1;,&#x0CC3;" />
+    <!-- U+0C95: "ಕ" KANNADA LETTER KA
+         U+0C96: "ಖ" KANNADA LETTER KHA -->
+    <Key
+        latin:keySpec="&#x0C95;"
+        latin:moreKeys="&#x0C96;" />
+    <!-- U+0CA4: "ತ" KANNADA LETTER TA
+         U+0CA5: "ಥ" KANNADA LETTER THA -->
+    <Key
+        latin:keySpec="&#x0CA4;"
+        latin:moreKeys="&#x0CA5;" />
+    <!-- U+0C9A: "ಚ" KANNADA LETTER CA
+         U+0C9B: "ಛ" KANNADA LETTER CHA -->
+    <Key
+        latin:keySpec="&#x0C9A;"
+        latin:moreKeys="&#x0C9B;" />
+    <!-- U+0C9F: "ಟ" KANNADA LETTER TTA
+         U+0CA0: "ಠ" KANNADA LETTER TTHA -->
+    <Key
+        latin:keySpec="&#x0C9F;"
+        latin:moreKeys="&#x0CA0;" />
+</merge>
diff --git a/java/res/xml/rowkeys_kannada3.xml b/java/res/xml/rowkeys_kannada3.xml
new file mode 100644
index 0000000..0f1aecb
--- /dev/null
+++ b/java/res/xml/rowkeys_kannada3.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0CC6: "ೆ" KANNADA VOWEL SIGN E
+         U+0C92: "ಒ" KANNADA LETTER O -->
+    <Key
+        latin:keySpec="&#x0CC6;"
+        latin:moreKeys="&#x0C92;" />
+    <!-- U+0C82: "ಂ" KANNADA SIGN ANUSVARA
+         U+0C8E: "ಎ" KANNADA LETTER E -->
+    <Key
+        latin:keySpec="&#x0C82;"
+        latin:moreKeys="&#x0C8E;" />
+    <!-- U+0CAE: "ಮ" KANNADA LETTER MA
+         U+0CA3: "ಣ" KANNADA LETTER NNA -->
+    <Key
+        latin:keySpec="&#x0CAE;"
+        latin:moreKeys="&#x0CA3;" />
+    <!-- U+0CA8: "ನ" KANNADA LETTER NA -->
+    <Key latin:keySpec="&#x0CA8;" />
+    <!-- U+0CB5: "ವ" KANNADA LETTER VA -->
+    <Key latin:keySpec="&#x0CB5;" />
+    <!-- U+0CB2: "ಲ" KANNADA LETTER LA
+         U+0CB3: "ಳ" KANNADA LETTER LLA -->
+    <Key
+        latin:keySpec="&#x0CB2;"
+        latin:moreKeys="&#x0CB3;" />
+    <!-- U+0CB8: "ಸ" KANNADA LETTER SA
+         U+0CB6: "ಶ" KANNADA LETTER SHA -->
+    <Key
+        latin:keySpec="&#x0CB8;"
+        latin:moreKeys="&#x0CB6;" />
+    <!-- U+0C8B: "ಋ" KANNADA LETTER VOCALIC R
+         U+0CCD/U+0CB0: "್ರ" KANNADA SIGN VIRAMA/KANNADA LETTER RA -->
+    <Key
+        latin:keySpec="&#x0C8B;"
+        latin:moreKeys="&#x0CCD;&#x0CB0;" />
+    <!-- U+0CB7: "ಷ" KANNADA LETTER SSA
+         U+0C95/U+0CCD/U+0CB7: "ಕ್ಷ" KANNADA LETTER RA/KANNADA SIGN VIRAMA/KANNADA LETTER SSA -->
+    <Key
+        latin:keySpec="&#x0CB7;"
+        latin:moreKeys="&#x0C95;&#x0CCD;&#x0CB7;" />
+    <!-- U+0CAF: "ಯ" KANNADA LETTER YA
+         U+0C9C/U+0CCD/U+0C9E: "ಜ್ಞ" KANNADA LETTER JA/KANNADA SIGN VIRAMA/KANNADA LETTER NYA -->
+    <Key
+        latin:keySpec="&#x0CAF;"
+        latin:moreKeys="&#x0C9C;&#x0CCD;&#x0C9E;" />
+</merge>
diff --git a/java/res/xml/rowkeys_malayalam1.xml b/java/res/xml/rowkeys_malayalam1.xml
new file mode 100644
index 0000000..79d96cb
--- /dev/null
+++ b/java/res/xml/rowkeys_malayalam1.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" >
+    <!-- U+0D4D: "്" MALAYALAM SIGN VIRAMA
+         U+0D05: "അ" MALAYALAM LETTER A -->
+    <Key
+        latin:keySpec="&#x0D4D;"
+        latin:moreKeys="&#x0D05;,%"
+        latin:keyHintLabel="1"
+        latin:additionalMoreKeys="1" />
+    <!-- U+0D3E: "ാ" MALAYALAM VOWEL SIGN AA
+         U+0D06: "ആ" MALAYALAM LETTER AA -->
+    <Key
+        latin:keySpec="&#x0D3E;"
+        latin:moreKeys="&#x0D06;,%"
+        latin:keyHintLabel="2"
+        latin:additionalMoreKeys="2" />
+    <!-- U+0D3F: "ി" MALAYALAM VOWEL SIGN I
+         U+0D07: "ഇ" MALAYALAM LETTER I -->
+    <Key
+        latin:keySpec="&#x0D3F;"
+        latin:moreKeys="&#x0D07;,%"
+        latin:keyHintLabel="3"
+        latin:additionalMoreKeys="3" />
+    <!-- U+0D40: "ീ" MALAYALAM VOWEL SIGN II
+         U+0D08: "ഈ" MALAYALAM LETTER II -->
+    <Key
+        latin:keySpec="&#x0D40;"
+        latin:moreKeys="&#x0D08;,%"
+        latin:keyHintLabel="4"
+        latin:additionalMoreKeys="4" />
+    <!-- U+0D41: "ു" MALAYALAM VOWEL SIGN U
+         U+0D09: "ഉ" MALAYALAM LETTER U -->
+    <Key
+        latin:keySpec="&#x0D41;"
+        latin:moreKeys="&#x0D09;,%"
+        latin:keyHintLabel="5"
+        latin:additionalMoreKeys="5" />
+    <!-- U+0D42: "ൂ" MALAYALAM VOWEL SIGN UU
+         U+0D0A: "ഊ" MALAYALAM LETTER UU -->
+    <Key
+        latin:keySpec="&#x0D42;"
+        latin:moreKeys="&#x0D0A;,%"
+        latin:keyHintLabel="6"
+        latin:additionalMoreKeys="6" />
+    <!-- U+0D43: "ൃ" MALAYALAM VOWEL SIGN VOCALIC R
+         U+0D0B: "ഋ" MALAYALAM LETTER VOCALIC R -->
+    <Key
+        latin:keySpec="&#x0D43;"
+        latin:moreKeys="&#x0D0B;,%"
+        latin:keyHintLabel="7"
+        latin:additionalMoreKeys="7" />
+    <!-- U+0D46: "െ" MALAYALAM VOWEL SIGN E
+         U+0D0E: "എ" MALAYALAM LETTER E
+         U+0D10: "ഐ" MALAYALAM LETTER AI
+         U+0D48: "ൈ" MALAYALAM VOWEL SIGN AI -->
+    <Key
+        latin:keySpec="&#x0D46;"
+        latin:moreKeys="&#x0D0E;,&#x0D10;,&#x0D48;,%"
+        latin:keyHintLabel="8"
+        latin:additionalMoreKeys="8" />
+    <!-- U+0D47: "േ" MALAYALAM VOWEL SIGN EE
+         U+0D0F: "ഏ" MALAYALAM LETTER EE -->
+    <Key
+        latin:keySpec="&#x0D47;"
+        latin:moreKeys="&#x0D0F;,%"
+        latin:keyHintLabel="9"
+        latin:additionalMoreKeys="9" />
+    <!-- U+0D4A: "ൊ" MALAYALAM VOWEL SIGN O
+         U+0D12: "ഒ" MALAYALAM LETTER O -->
+    <Key
+        latin:keySpec="&#x0D4A;"
+        latin:moreKeys="&#x0D12;,%"
+        latin:keyHintLabel="0"
+        latin:additionalMoreKeys="0" />
+    <!-- U+0D4B: "ോ" MALAYALAM VOWEL SIGN OO
+         U+0D13: "ഓ" MALAYALAM LETTER OO
+         U+0D14: "ഔ" MALAYALAM LETTER AU
+         U+0D57: "ൗ" MALAYALAM AU LENGTH MARK -->
+    <Key latin:keySpec="&#x0D4B;"
+         latin:moreKeys="&#x0D13;,&#x0D14;,&#x0D57;" />
+</merge>
diff --git a/java/res/xml/rowkeys_malayalam2.xml b/java/res/xml/rowkeys_malayalam2.xml
new file mode 100644
index 0000000..f0f9df0
--- /dev/null
+++ b/java/res/xml/rowkeys_malayalam2.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0D15: "ക" MALAYALAM LETTER KA
+         U+0D16: "ഖ" MALAYALAM LETTER KHA -->
+    <Key
+        latin:keySpec="&#x0D15;"
+        latin:moreKeys="&#x0D16;" />
+    <!-- U+0D17: "ഗ" MALAYALAM LETTER GA
+         U+0D18: "ഘ" MALAYALAM LETTER GHA -->
+    <Key
+        latin:keySpec="&#x0D17;"
+        latin:moreKeys="&#x0D18;" />
+    <!-- U+0D19: "ങ" MALAYALAM LETTER NGA
+         U+0D1E: "ഞ" MALAYALAM LETTER NYA -->
+    <Key
+        latin:keySpec="&#x0D19;"
+        latin:moreKeys="&#x0D1E;" />
+    <!-- U+0D1A: "ച" MALAYALAM LETTER CA
+         U+0D1B: "ഛ" MALAYALAM LETTER CHA -->
+    <Key
+        latin:keySpec="&#x0D1A;"
+        latin:moreKeys="&#x0D1B;" />
+    <!-- U+0D1C: "ജ" MALAYALAM LETTER JA
+         U+0D1D: "ഝ" MALAYALAM LETTER JHA -->
+    <Key
+        latin:keySpec="&#x0D1C;"
+        latin:moreKeys="&#x0D1D;" />
+    <!-- U+0D1F: "ട" MALAYALAM LETTER TTA
+         U+0D20: "ഠ" MALAYALAM LETTER TTHA -->
+    <Key
+        latin:keySpec="&#x0D1F;"
+        latin:moreKeys="&#x0D20;" />
+    <!-- U+0D21: "ഡ" MALAYALAM LETTER DDA
+         U+0D22: "ഢ" MALAYALAM LETTER DDHA -->
+    <Key
+        latin:keySpec="&#x0D21;"
+        latin:moreKeys="&#x0D22;" />
+    <!-- U+0D23: "ണ" MALAYALAM LETTER NNA
+         U+0D7A: "ൺ" MALAYALAM LETTER CHILLU NN -->
+    <Key
+        latin:keySpec="&#x0D23;"
+        latin:moreKeys="&#x0D7A;" />
+    <!-- U+0D24: "ത" MALAYALAM LETTER TA
+         U+0D25: "ഥ" MALAYALAM LETTER THA -->
+    <Key
+        latin:keySpec="&#x0D24;"
+        latin:moreKeys="&#x0D25;" />
+    <!-- U+0D26: "ദ" MALAYALAM LETTER DA
+         U+0D27: "ധ" MALAYALAM LETTER DHA -->
+    <Key
+        latin:keySpec="&#x0D26;"
+        latin:moreKeys="&#x0D27;" />
+    <!-- U+0D28: "ഗന" MALAYALAM LETTER NA
+         U+0D7B: "ൻ" MALAYALAM LETTER CHILLU N -->
+    <Key
+        latin:keySpec="&#x0D28;"
+        latin:moreKeys="&#x0D7B;" />
+</merge>
diff --git a/java/res/xml/rowkeys_malayalam3.xml b/java/res/xml/rowkeys_malayalam3.xml
new file mode 100644
index 0000000..6959ccd
--- /dev/null
+++ b/java/res/xml/rowkeys_malayalam3.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0D2A: "പ" MALAYALAM LETTER PA
+         U+0D2B: "ഫ" MALAYALAM LETTER PHA -->
+    <Key
+        latin:keySpec="&#x0D2A;"
+        latin:moreKeys="&#x0D2B;" />
+    <!-- U+0D2C: "ബ" MALAYALAM LETTER BA
+         U+0D2D: "ഭ" MALAYALAM LETTER BHA -->
+    <Key
+        latin:keySpec="&#x0D2C;"
+        latin:moreKeys="&#x0D2D;" />
+    <!-- U+0D2E: "മ" MALAYALAM LETTER MA
+         U+0D02: "ം" MALAYALAM SIGN ANUSVARA -->
+    <Key
+        latin:keySpec="&#x0D2E;"
+        latin:moreKeys="&#x0D02;" />
+    <!-- U+0D2F: "യ" MALAYALAM LETTER YA
+         U+0D4D/U+0D2F: "്യ" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER YA -->
+    <Key
+        latin:keySpec="&#x0D2F;"
+        latin:moreKeys="&#x0D4D;&#x0D2F;" />
+    <!-- U+0D30: "ര" MALAYALAM LETTER RA
+         U+0D4D/U+0D30: "്ര" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER RA
+         U+0D7C: "ർ" MALAYALAM LETTER CHILLU RR
+         U+0D31: "റ" MALAYALAM LETTER RRA -->
+    <Key
+        latin:keySpec="&#x0D30;"
+        latin:moreKeys="&#x0D4D;&#x0D30;,&#x0D7C;,&#x0D31;" />
+    <!-- U+0D32: "ല" MALAYALAM LETTER LA
+         U+0D7D: "ൽ" MALAYALAM LETTER CHILLU L -->
+    <Key
+        latin:keySpec="&#x0D32;"
+        latin:moreKeys="&#x0D7D;" />
+    <!-- U+0D35: "വ" MALAYALAM LETTER VA
+         U+0D4D/U+0D35: "്വ" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER VA -->
+    <Key
+        latin:keySpec="&#x0D35;"
+        latin:moreKeys="&#x0D4D;&#x0D35;" />
+    <!-- U+0D36: "ശ" MALAYALAM LETTER SHA
+         U+0D37: "ഷ" MALAYALAM LETTER SSA
+         U+0D38: "സ" MALAYALAM LETTER SA -->
+    <Key
+        latin:keySpec="&#x0D36;"
+        latin:moreKeys="&#x0D37;,&#x0D38;" />
+    <!-- U+0D39: "ഹ" MALAYALAM LETTER HA
+         U+0D03: "ഃ" MALAYALAM SIGN VISARGA -->
+    <Key
+        latin:keySpec="&#x0D39;"
+        latin:moreKeys="&#x0D03;" />
+    <!-- U+0D33: "ള" MALAYALAM LETTER LLA
+         U+0D7E: "ൾ" MALAYALAM LETTER CHILLU LL
+         U+0D34: "ഴ" MALAYALAM LETTER LLLA -->
+    <Key
+        latin:keySpec="&#x0D33;"
+        latin:moreKeys="&#x0D7E;,&#x0D34;" />
+</merge>
diff --git a/java/res/xml/rowkeys_myanmar2.xml b/java/res/xml/rowkeys_myanmar2.xml
index d7aca00..ae71ecb 100644
--- a/java/res/xml/rowkeys_myanmar2.xml
+++ b/java/res/xml/rowkeys_myanmar2.xml
@@ -21,12 +21,21 @@
 <merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
     <switch>
         <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+1017: "ဗ" MYANMAR LETTER BA -->
-            <Key latin:keySpec="&#x1017;" />
-            <!-- U+1012: "ဒ" MYANMAR LETTER DA -->
-            <Key latin:keySpec="&#x1012;" />
-            <!-- U+1013: "ဓ" MYANMAR LETTER DHA -->
-            <Key latin:keySpec="&#x1013;" />
+            <!-- U+1017: "ဗ" MYANMAR LETTER BA
+                 U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA -->
+            <Key
+                latin:keySpec="&#x1017;"
+                latin:moreKeys="&#x1039;&#x1017;" />
+            <!-- U+1012: "ဒ" MYANMAR LETTER DA
+                 U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA -->
+            <Key
+                latin:keySpec="&#x1012;"
+                latin:moreKeys="&#x1039;&#x1012;" />
+            <!-- U+1013: "ဓ" MYANMAR LETTER DHA
+                 U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA -->
+            <Key
+                latin:keySpec="&#x1013;"
+                latin:moreKeys="&#x1039;&#x1013;" />
             <!-- U+1003: "ဃ" MYANMAR LETTER GHA -->
             <Key latin:keySpec="&#x1003;" />
             <!-- U+100E: "ဎ" MYANMAR LETTER DDHA -->
@@ -35,34 +44,61 @@
             <Key latin:keySpec="&#x103F;" />
             <!-- U+100F: "ဏ" MYANMAR LETTER NNA -->
             <Key latin:keySpec="&#x100F;" />
-            <!-- U+1008: "ဈ" MYANMAR LETTER JHA -->
-            <Key latin:keySpec="&#x1008;" />
-            <!-- U+1007: "ဇ" MYANMAR LETTER JA -->
-            <Key latin:keySpec="&#x1007;" />
-            <!-- U+1002: "ဂ" MYANMAR LETTER GA -->
-            <Key latin:keySpec="&#x1002;" />
+            <!-- U+1008: "ဈ" MYANMAR LETTER JHA
+                 U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA -->
+            <Key
+                latin:keySpec="&#x1008;"
+                latin:moreKeys="&#x1039;&#x1008;" />
+            <!-- U+1007: "ဇ" MYANMAR LETTER JA
+                 U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA -->
+            <Key
+                latin:keySpec="&#x1007;"
+                latin:moreKeys="&#x1039;&#x1007;" />
+            <!-- U+1002: "ဂ" MYANMAR LETTER GA
+                 U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA -->
+            <Key
+                latin:keySpec="&#x1002;"
+                latin:moreKeys="&#x1039;&#x1002;" />
         </case>
         <default>
-            <!-- U+1006: "ဆ" MYANMAR LETTER CHA -->
-            <Key latin:keySpec="&#x1006;" />
-            <!-- U+1010: "တ" MYANMAR LETTER TA -->
-            <Key latin:keySpec="&#x1010;" />
-            <!-- U+1014: "န" MYANMAR LETTER NA -->
-            <Key latin:keySpec="&#x1014;" />
-            <!-- U+1019: "မ" MYANMAR LETTER MA -->
-            <Key latin:keySpec="&#x1019;" />
+            <!-- U+1006: "ဆ" MYANMAR LETTER CHA
+                 U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA -->
+            <Key
+                latin:keySpec="&#x1006;"
+                latin:moreKeys="&#x1039;&#x1006;" />
+            <!-- U+1010: "တ" MYANMAR LETTER TA
+                 U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA -->
+            <Key
+                latin:keySpec="&#x1010;"
+                latin:moreKeys="&#x1039;&#x1010;" />
+            <!-- U+1014: "န" MYANMAR LETTER NA
+                 U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA -->
+            <Key
+                latin:keySpec="&#x1014;"
+                latin:moreKeys="&#x1039;&#x1014;" />
+            <!-- U+1019: "မ" MYANMAR LETTER MA
+                 U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA -->
+            <Key
+                latin:keySpec="&#x1019;"
+                latin:moreKeys="&#x1039;&#x1019;" />
             <!-- U+1021: "အ" MYANMAR LETTER A -->
             <Key latin:keySpec="&#x1021;" />
             <!-- U+1015: "ပ" MYANMAR LETTER PA -->
             <Key latin:keySpec="&#x1015;" />
-            <!-- U+1000: "က" MYANMAR LETTER KA -->
-            <Key latin:keySpec="&#x1000;" />
+            <!-- U+1000: "က" MYANMAR LETTER KA
+                 U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA -->
+            <Key
+                latin:keySpec="&#x1000;"
+                latin:moreKeys="&#x1039;&#x1000;" />
             <!-- U+1004: "င" MYANMAR LETTER NGA -->
             <Key latin:keySpec="&#x1004;" />
             <!-- U+101E: "သ" MYANMAR LETTER SA -->
             <Key latin:keySpec="&#x101E;" />
-            <!-- U+1005: "စ" MYANMAR LETTER CA -->
-            <Key latin:keySpec="&#x1005;" />
+            <!-- U+1005: "စ" MYANMAR LETTER CA
+                 U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA -->
+            <Key
+                latin:keySpec="&#x1005;"
+                latin:moreKeys="&#x1039;&#x1005;" />
         </default>
     </switch>
 </merge>
diff --git a/java/res/xml/rowkeys_myanmar3.xml b/java/res/xml/rowkeys_myanmar3.xml
index c585068..4dafe09 100644
--- a/java/res/xml/rowkeys_myanmar3.xml
+++ b/java/res/xml/rowkeys_myanmar3.xml
@@ -67,8 +67,11 @@
             <Key
                 latin:keySpec="&#x102F;"
                 latin:moreKeys="&#x1030;" />
-            <!-- U+102C: "ာ" MYANMAR VOWEL SIGN AA -->
-            <Key latin:keySpec="&#x102C;" />
+            <!-- U+102C: "ာ" MYANMAR VOWEL SIGN AA
+                 U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA -->
+            <Key
+                latin:keySpec="&#x102C;"
+                latin:moreKeys="&#x102B;" />
             <!-- U+103A: "်" MYANMAR SIGN ASAT
                  U+1032: "ဲ" MYANMAR VOWEL SIGN AI -->
             <Key
diff --git a/java/res/xml/rowkeys_myanmar4.xml b/java/res/xml/rowkeys_myanmar4.xml
index 210ebaa..a1befcf 100644
--- a/java/res/xml/rowkeys_myanmar4.xml
+++ b/java/res/xml/rowkeys_myanmar4.xml
@@ -47,14 +47,26 @@
         <default>
             <!-- U+1016: "ဖ" MYANMAR LETTER PHA -->
             <Key latin:keySpec="&#x1016;" />
-            <!-- U+1011: "ထ" MYANMAR LETTER THA -->
-            <Key latin:keySpec="&#x1011;" />
-            <!-- U+1001: "ခ" MYANMAR LETTER KHA -->
-            <Key latin:keySpec="&#x1001;" />
-            <!-- U+101C: "လ" MYANMAR LETTER LA -->
-            <Key latin:keySpec="&#x101C;" />
-            <!-- U+1018: "ဘ" MYANMAR LETTER BHA -->
-            <Key latin:keySpec="&#x1018;" />
+            <!-- U+1011: "ထ" MYANMAR LETTER THA
+                 U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA -->
+            <Key
+                latin:keySpec="&#x1011;"
+                latin:moreKeys="&#x1039;&#x1011;" />
+            <!-- U+1001: "ခ" MYANMAR LETTER KHA
+                 U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA -->
+            <Key
+                latin:keySpec="&#x1001;"
+                latin:moreKeys="&#x1039;&#x1001;" />
+            <!-- U+101C: "လ" MYANMAR LETTER LA
+                 U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA -->
+            <Key
+                latin:keySpec="&#x101C;"
+                latin:moreKeys="&#x1039;&#x101C;" />
+            <!-- U+1018: "ဘ" MYANMAR LETTER BHA
+                 U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA -->
+            <Key
+                latin:keySpec="&#x1018;"
+                latin:moreKeys="&#x1039;&#x1018;" />
             <!-- U+100A: "ည" MYANMAR LETTER NNYA
                  U+1009: "ဉ" MYANMAR LETTER NYA -->
             <Key
diff --git a/java/res/xml/rowkeys_sinhala1.xml b/java/res/xml/rowkeys_sinhala1.xml
index fcad5ea..2ecb47e 100644
--- a/java/res/xml/rowkeys_sinhala1.xml
+++ b/java/res/xml/rowkeys_sinhala1.xml
@@ -45,8 +45,7 @@
                  U+0DF4: "෴" SINHALA PUNCTUATION KUNDDALIYA  -->
             <Key
                 latin:keySpec="&#x0DA5;"
-                latin:moreKeys="&#x0DF4;"
-                latin:keyLabelFlags="autoXScale" />
+                latin:moreKeys="&#x0DF4;" />
         </case>
         <default>
             <!-- U+0DD4: "ු" SINHALA VOWEL SIGN KETTI PAA-PILLA -->
diff --git a/java/res/xml/rowkeys_tamil1.xml b/java/res/xml/rowkeys_tamil1.xml
new file mode 100644
index 0000000..4debd9e
--- /dev/null
+++ b/java/res/xml/rowkeys_tamil1.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0B94: "ஔ" TAMIL LETTER AU -->
+    <Key
+        latin:keySpec="&#x0B94;"
+        latin:keyHintLabel="1"
+        latin:additionalMoreKeys="1" />
+    <!-- U+0B90: "ஐ" TAMIL LETTER AI -->
+    <Key
+        latin:keySpec="&#x0B90;"
+        latin:keyHintLabel="2"
+        latin:additionalMoreKeys="2" />
+    <!-- U+0B86: "ஆ" TAMIL LETTER AA -->
+    <Key
+        latin:keySpec="&#x0B86;"
+        latin:keyHintLabel="3"
+        latin:additionalMoreKeys="3" />
+    <!-- U+0B88: "ஈ" TAMIL LETTER II -->
+    <Key
+        latin:keySpec="&#x0B88;"
+        latin:keyHintLabel="4"
+        latin:additionalMoreKeys="4" />
+    <!-- U+0B8A: "ஊ" TAMIL LETTER UU -->
+    <Key
+        latin:keySpec="&#x0B8A;"
+        latin:keyHintLabel="5"
+        latin:additionalMoreKeys="5" />
+    <!-- U+0BAE: "ம" TAMIL LETTER MA -->
+    <Key
+        latin:keySpec="&#x0BAE;"
+        latin:keyHintLabel="6"
+        latin:additionalMoreKeys="6" />
+    <!-- U+0BA9: "ன" TAMIL LETTER NNNA -->
+    <Key
+        latin:keySpec="&#x0BA9;"
+        latin:keyHintLabel="7"
+        latin:additionalMoreKeys="7" />
+    <!-- U+0BA8: "ந" TAMIL LETTER NA -->
+    <Key
+        latin:keySpec="&#x0BA8;"
+        latin:keyHintLabel="8"
+        latin:additionalMoreKeys="8" />
+    <!-- U+0B99: "ங" TAMIL LETTER NGA -->
+    <Key
+        latin:keySpec="&#x0B99;"
+        latin:keyHintLabel="9"
+        latin:additionalMoreKeys="9" />
+    <!-- U+0BA3: "ண" TAMIL LETTER NNA -->
+    <Key
+        latin:keySpec="&#x0BA3;"
+        latin:keyHintLabel="0"
+        latin:additionalMoreKeys="0" />
+    <!-- U+0B9E: "ஞ" TAMIL LETTER NYA -->
+    <Key latin:keySpec="&#x0B9E;" />
+</merge>
diff --git a/java/res/xml/rowkeys_tamil2.xml b/java/res/xml/rowkeys_tamil2.xml
new file mode 100644
index 0000000..894825c
--- /dev/null
+++ b/java/res/xml/rowkeys_tamil2.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0B93: "ஓ" TAMIL LETTER OO
+         U+0BD0: "ௐ" TAMIL OM -->
+    <Key
+        latin:keySpec="&#x0B93;"
+        latin:moreKeys="&#x0BD0;" />
+    <!-- U+0B8F: "ஏ" TAMIL LETTER EE -->
+    <Key latin:keySpec="&#x0B8F;" />
+    <!-- U+0B85: "அ" TAMIL LETTER A
+         U+0B83: "ஃ" TAMIL SIGN VISARGA -->
+    <Key
+        latin:keySpec="&#x0B85;"
+        latin:moreKeys="&#x0B83;" />
+    <!-- U+0B87: "இ" TAMIL LETTER I -->
+    <Key latin:keySpec="&#x0B87;" />
+    <!-- U+0B89: "உ" TAMIL LETTER U -->
+    <Key latin:keySpec="&#x0B89;" />
+    <!-- U+0BB1: "ற" TAMIL LETTER RRA -->
+    <Key latin:keySpec="&#x0BB1;" />
+    <!-- U+0BAA: "ப" TAMIL LETTER PA -->
+    <Key latin:keySpec="&#x0BAA;" />
+    <!-- U+0B95: "க" TAMIL LETTER KA
+         U+0BB9: "ஹ" TAMIL LETTER HA
+         U+0B95/U+0BCD/U+0BB7: "க்ஷ" TAMIL LETTER KA/TAMIL SIGN VIRAMA/TAMIL LETTER SSA -->
+    <Key
+        latin:keySpec="&#x0B95;"
+        latin:moreKeys="&#x0BB9;,&#x0B95;&#x0BCD;&#x0BB7;" />
+    <!-- U+0BA4: "த" TAMIL LETTER TA -->
+    <Key latin:keySpec="&#x0BA4;" />
+    <!-- U+0B9A: "ச" TAMIL LETTER CA
+         U+0BB8: "ஸ" TAMIL LETTER SA
+         U+0BB6/U+0BCD/U+0BB0/U+0BC0: "ஶ்ரீ" TAMIL LETTER SHA/TAMIL SIGN VIRAMA/TAMIL LETTER RA/TAMIL VOWEL SIGN II -->
+    <Key
+        latin:keySpec="&#x0B9A;"
+        latin:moreKeys="&#x0BB8;,&#x0BB6;&#x0BCD;&#x0BB0;&#x0BC0;" />
+    <!-- U+0B9F: "ட" TAMIL LETTER TTA -->
+    <Key latin:keySpec="&#x0B9F;" />
+</merge>
diff --git a/java/res/xml/rowkeys_tamil3.xml b/java/res/xml/rowkeys_tamil3.xml
new file mode 100644
index 0000000..5386e61
--- /dev/null
+++ b/java/res/xml/rowkeys_tamil3.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0B92: "ஒ" TAMIL LETTER O -->
+    <Key latin:keySpec="&#x0B92;" />
+    <!-- U+0B8E: "எ" TAMIL LETTER E -->
+    <Key latin:keySpec="&#x0B8E;" />
+    <!-- U+0BCD: "்" TAMIL SIGN VIRAMA -->
+    <Key latin:keySpec="&#x0BCD;" />
+    <!-- U+0BB0: "ர" TAMIL LETTER RA -->
+    <Key latin:keySpec="&#x0BB0;" />
+    <!-- U+0BB5: "வ" TAMIL LETTER VA -->
+    <Key latin:keySpec="&#x0BB5;" />
+    <!-- U+0BB4: "ழ TAMIL LETTER LLLA -->
+    <Key latin:keySpec="&#x0BB4;" />
+    <!-- U+0BB2: "ல" TAMIL LETTER LA -->
+    <Key latin:keySpec="&#x0BB2;" />
+    <!-- U+0BB3: "ள" TAMIL LETTER LLA -->
+    <Key latin:keySpec="&#x0BB3;" />
+    <!-- U+0BAF: "ய" TAMIL LETTER YA -->
+    <Key latin:keySpec="&#x0BAF;" />
+    <!-- U+0BB7: "ஷ" TAMIL LETTER SSA
+         U+0B9C: "ஜ" TAMIL LETTER JA -->
+    <Key
+        latin:keySpec="&#x0BB7;"
+        latin:moreKeys="&#x0B9C;" />
+</merge>
diff --git a/java/res/xml/rowkeys_telugu1.xml b/java/res/xml/rowkeys_telugu1.xml
new file mode 100644
index 0000000..8a5c850
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu1.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C4C: "ౌ" TELUGU VOWEL SIGN AU
+         U+0C14: "ఔ" TELUGU LETTER AU -->
+    <Key
+        latin:keySpec="&#x0C4C;"
+        latin:moreKeys="&#x0C14;,%"
+        latin:keyHintLabel="1"
+        latin:additionalMoreKeys="1" />
+    <!-- U+0C48: "ై" TELUGU VOWEL SIGN AI
+         U+0C10: "ఐ" TELUGU LETTER AI -->
+    <Key
+        latin:keySpec="&#x0C48;"
+        latin:moreKeys="&#x0C10;,%"
+        latin:keyHintLabel="2"
+        latin:additionalMoreKeys="2" />
+    <!-- U+0C3E: "ా" TELUGU VOWEL SIGN AA
+         U+0C06: "ఆ" TELUGU LETTER AA -->
+    <Key
+        latin:keySpec="&#x0C3E;"
+        latin:moreKeys="&#x0C06;,%"
+        latin:keyHintLabel="3"
+        latin:additionalMoreKeys="3" />
+    <!-- U+0C40: "ీ" TELUGU VOWEL SIGN II
+         U+0C08: "ఈ" TELUGU LETTER II -->
+    <Key
+        latin:keySpec="&#x0C40;"
+        latin:moreKeys="&#x0C08;,%"
+        latin:keyHintLabel="4"
+        latin:additionalMoreKeys="4" />
+    <!-- U+0C42: "ూ" TELUGU VOWEL SIGN UU
+         U+0C0A: "ఊ" TELUGU LETTER UU -->
+    <Key
+        latin:keySpec="&#x0C42;"
+        latin:moreKeys="&#x0C0A;,%"
+        latin:keyHintLabel="5"
+        latin:additionalMoreKeys="5" />
+    <!-- U+0C2C: "బ" TELUGU LETTER BA
+         U+0C2D: "భ" TELUGU LETTER BHA -->
+    <Key
+        latin:keySpec="&#x0C2C;"
+        latin:moreKeys="&#x0C2D;,%"
+        latin:keyHintLabel="6"
+        latin:additionalMoreKeys="6" />
+    <!-- U+0C39: "హ" TELUGU LETTER HA
+         U+0C03: "ః" TELUGU SIGN VISARGA -->
+    <Key
+        latin:keySpec="&#x0C39;"
+        latin:moreKeys="&#x0C03;,%"
+        latin:keyHintLabel="7"
+        latin:additionalMoreKeys="7" />
+    <!-- U+0C17: "గ" TELUGU LETTER GA
+         U+0C18: "ఘ" TELUGU LETTER GHA -->
+    <Key
+        latin:keySpec="&#x0C17;"
+        latin:moreKeys="&#x0C18;,%"
+        latin:keyHintLabel="8"
+        latin:additionalMoreKeys="8" />
+    <!-- U+0C26: "ద" TELUGU LETTER DA
+         U+0C27: "ధ" TELUGU LETTER DHA -->
+    <Key
+        latin:keySpec="&#x0C26;"
+        latin:moreKeys="&#x0C27;,%"
+        latin:keyHintLabel="9"
+        latin:additionalMoreKeys="9" />
+    <!-- U+0C1C: "జ" TELUGU LETTER JA
+         U+0C1D: "ఝ" TELUGU LETTER JHA -->
+    <Key
+        latin:keySpec="&#x0C1C;"
+        latin:moreKeys="&#x0C1D;,%"
+        latin:keyHintLabel="0"
+        latin:additionalMoreKeys="0" />
+    <!-- U+0C21: "డ" TELUGU LETTER DDA
+         U+0C22: "ఢ" TELUGU LETTER DDHA -->
+    <Key
+        latin:keySpec="&#x0C21;"
+        latin:moreKeys="&#x0C22;" />
+</merge>
diff --git a/java/res/xml/rowkeys_telugu2.xml b/java/res/xml/rowkeys_telugu2.xml
new file mode 100644
index 0000000..a472fd3
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu2.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C4B: "ో" TELUGU VOWEL SIGN OO
+         U+0C13: "ఓ" TELUGU LETTER OO -->
+    <Key
+        latin:keySpec="&#x0C4B;"
+        latin:moreKeys="&#x0C13;" />
+    <!-- U+0C47: "ే" TELUGU VOWEL SIGN EE
+         U+0C0F: "ఏ" TELUGU LETTER EE -->
+    <Key
+        latin:keySpec="&#x0C47;"
+        latin:moreKeys="&#x0C0F;" />
+    <!-- U+0C4D: "్" TELUGU SIGN VIRAMA
+         U+0C05: "అ" TELUGU LETTER A -->
+    <Key
+        latin:keySpec="&#x0C4D;"
+        latin:moreKeys="&#x0C05;" />
+    <!-- U+0C3F: "ి" TELUGU VOWEL SIGN I
+         U+0C07: "ఇ" TELUGU LETTER I -->
+    <Key
+        latin:keySpec="&#x0C3F;"
+        latin:moreKeys="&#x0C07;" />
+    <!-- U+0C41: "ు" TELUGU VOWEL SIGN U
+         U+0C09: "ఉ" TELUGU LETTER U -->
+    <Key
+        latin:keySpec="&#x0C41;"
+        latin:moreKeys="&#x0C09;" />
+    <!-- U+0C2A: "ప" TELUGU LETTER PA
+         U+0C2B: "ఫ" TELUGU LETTER PHA -->
+    <Key
+        latin:keySpec="&#x0C2A;"
+        latin:moreKeys="&#x0C2B;" />
+    <!-- U+0C30: "ర" TELUGU LETTER RA
+         U+0C31: "ఱ" TELUGU LETTER RRA
+         U+0C43: "ృ" TELUGU VOWEL SIGN VOCALIC R -->
+    <Key
+        latin:keySpec="&#x0C30;"
+        latin:moreKeys="&#x0C31;,&#x0C43;" />
+    <!-- U+0C15: "క" TELUGU LETTER KA
+         U+0C16: "ఖ" TELUGU LETTER KHA -->
+    <Key
+        latin:keySpec="&#x0C15;"
+        latin:moreKeys="&#x0C16;" />
+    <!-- U+0C24: "త" TELUGU LETTER TA
+         U+0C25: "థ" TELUGU LETTER THA -->
+    <Key
+        latin:keySpec="&#x0C24;"
+        latin:moreKeys="&#x0C25;" />
+    <!-- U+0C1A: "చ" TELUGU LETTER CA
+         U+0C1B: "ఛ" TELUGU LETTER CHA -->
+    <Key
+        latin:keySpec="&#x0C1A;"
+        latin:moreKeys="&#x0C1B;" />
+    <!-- U+0C1F: "ట" TELUGU LETTER TTA
+         U+0C20: "ఠ" TELUGU LETTER TTHA -->
+    <Key
+        latin:keySpec="&#x0C1F;"
+        latin:moreKeys="&#x0C20;" />
+</merge>
diff --git a/java/res/xml/rowkeys_telugu3.xml b/java/res/xml/rowkeys_telugu3.xml
new file mode 100644
index 0000000..05755ec
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu3.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C46: "ె" TELUGU VOWEL SIGN E
+         U+0C12: "ఒ" TELUGU LETTER O -->
+    <Key
+        latin:keySpec="&#x0C46;"
+        latin:moreKeys="&#x0C12;" />
+    <!-- U+0C02: "ం" TELUGU SIGN ANUSVARA
+         U+0C0E: "ఎ" TELUGU LETTER E -->
+    <Key
+        latin:keySpec="&#x0C02;"
+        latin:moreKeys="&#x0C0E;" />
+    <!-- U+0C2E: "మ" TELUGU LETTER MA -->
+    <Key latin:keySpec="&#x0C2E;" />
+    <!-- U+0C28: "న" TELUGU LETTER NA
+         U+0C23: "ణ" TELUGU LETTER NNA
+         U+0C19: "ఙ" TELUGU LETTER NGA -->
+    <Key
+        latin:keySpec="&#x0C28;"
+        latin:moreKeys="&#x0C23;,&#x0C19;" />
+    <!-- U+0C35: "వ" TELUGU LETTER VA -->
+    <Key latin:keySpec="&#x0C35;" />
+    <!-- U+0C32: "ల" TELUGU LETTER LA
+         U+0C33: "ళ" TELUGU LETTER LLA -->
+    <Key
+        latin:keySpec="&#x0C32;"
+        latin:moreKeys="&#x0C33;" />
+    <!-- U+0C38: "స" TELUGU LETTER SA
+         U+0C36: "శ" TELUGU LETTER SHA -->
+    <Key
+        latin:keySpec="&#x0C38;"
+        latin:moreKeys="&#x0C36;" />
+    <!-- U+0C0B: "ఋ" TELUGU LETTER VOCALIC R
+         U+0C4D/U+0C30: "్ర" TELUGU SIGN VIRAMA/TELUGU LETTER RA -->
+    <Key
+        latin:keySpec="&#x0C0B;"
+        latin:moreKeys="&#x0C4D;&#x0C30;" />
+    <!-- U+0C37: "ష" TELUGU LETTER SSA
+         U+0C15/U+0C4D/U+0C37: "క్ష" TELUGU LETTER KA/TELUGU SIGN VIRAMA/TELUGU LETTER SSA -->
+    <Key
+        latin:keySpec="&#x0C37;"
+        latin:moreKeys="&#x0C15;&#x0C4D;&#x0C37;" />
+    <!-- U+0C2F: "య" TELUGU LETTER YA
+         U+0C1C/U+0C4D/U+0C1E: "జ్ఞ" TELUGU LETTER JA/TELUGU SIGN VIRAMA/TELUGU LETTER NYA -->
+    <Key
+        latin:keySpec="&#x0C2F;"
+        latin:moreKeys="&#x0C1C;&#x0C4D;&#x0C1E;" />
+</merge>
diff --git a/java/res/xml/rows_kannada.xml b/java/res/xml/rows_kannada.xml
new file mode 100644
index 0000000..5dc6271
--- /dev/null
+++ b/java/res/xml/rows_kannada.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada1" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_kannada3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
\ No newline at end of file
diff --git a/java/res/xml/rows_malayalam.xml b/java/res/xml/rows_malayalam.xml
new file mode 100644
index 0000000..5e7a491
--- /dev/null
+++ b/java/res/xml/rows_malayalam.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam1" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_malayalam3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
\ No newline at end of file
diff --git a/java/res/xml/rows_tamil.xml b/java/res/xml/rows_tamil.xml
new file mode 100644
index 0000000..3aa2c8d
--- /dev/null
+++ b/java/res/xml/rows_tamil.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil1" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_tamil3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
\ No newline at end of file
diff --git a/java/res/xml/rows_telugu.xml b/java/res/xml/rows_telugu.xml
new file mode 100644
index 0000000..4a31d5d
--- /dev/null
+++ b/java/res/xml/rows_telugu.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu1" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
\ No newline at end of file
diff --git a/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java
new file mode 100644
index 0000000..09f39a7
--- /dev/null
+++ b/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java
@@ -0,0 +1,67 @@
+/*
+ * 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.compat;
+
+import android.view.textservice.TextInfo;
+
+import com.android.inputmethod.annotations.UsedForTesting;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+@UsedForTesting
+public final class TextInfoCompatUtils {
+    // Note that TextInfo.getCharSequence() is supposed to be available in API level 21 and later.
+    private static final Method TEXT_INFO_GET_CHAR_SEQUENCE =
+            CompatUtils.getMethod(TextInfo.class, "getCharSequence");
+    private static final Constructor<?> TEXT_INFO_CONSTRUCTOR_FOR_CHAR_SEQUENCE =
+            CompatUtils.getConstructor(TextInfo.class, CharSequence.class, int.class, int.class,
+                    int.class, int.class);
+
+    @UsedForTesting
+    public static boolean isCharSequenceSupported() {
+        return TEXT_INFO_GET_CHAR_SEQUENCE != null &&
+                TEXT_INFO_CONSTRUCTOR_FOR_CHAR_SEQUENCE != null;
+    }
+
+    @UsedForTesting
+    public static TextInfo newInstance(CharSequence charSequence, int start, int end, int cookie,
+            int sequenceNumber) {
+        if (TEXT_INFO_CONSTRUCTOR_FOR_CHAR_SEQUENCE != null) {
+            return (TextInfo) CompatUtils.newInstance(TEXT_INFO_CONSTRUCTOR_FOR_CHAR_SEQUENCE,
+                    charSequence, start, end, cookie, sequenceNumber);
+        }
+        return new TextInfo(charSequence.subSequence(start, end).toString(), cookie,
+                sequenceNumber);
+    }
+
+    /**
+     * Returns the result of {@link TextInfo#getCharSequence()} when available. Otherwise returns
+     * the result of {@link TextInfo#getText()} as fall back.
+     * @param textInfo the instance for which {@link TextInfo#getCharSequence()} or
+     * {@link TextInfo#getText()} is called.
+     * @return the result of {@link TextInfo#getCharSequence()} when available. Otherwise returns
+     * the result of {@link TextInfo#getText()} as fall back. If {@code textInfo} is {@code null},
+     * returns {@code null}.
+     */
+    @UsedForTesting
+    public static CharSequence getCharSequenceOrString(final TextInfo textInfo) {
+        final CharSequence defaultValue = (textInfo == null ? null : textInfo.getText());
+        return (CharSequence) CompatUtils.invoke(textInfo, defaultValue,
+                TEXT_INFO_GET_CHAR_SEQUENCE);
+    }
+}
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index ed3b2b3..665d9f7 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -148,33 +148,28 @@
         public final int mAltCode;
         /** Icon for disabled state */
         public final int mDisabledIconId;
-        /** Preview version of the icon, for the preview popup */
-        public final int mPreviewIconId;
         /** The visual insets */
         public final int mVisualInsetsLeft;
         public final int mVisualInsetsRight;
 
         private OptionalAttributes(final String outputText, final int altCode,
-                final int disabledIconId, final int previewIconId,
-                final int visualInsetsLeft, final int visualInsetsRight) {
+                final int disabledIconId, final int visualInsetsLeft, final int visualInsetsRight) {
             mOutputText = outputText;
             mAltCode = altCode;
             mDisabledIconId = disabledIconId;
-            mPreviewIconId = previewIconId;
             mVisualInsetsLeft = visualInsetsLeft;
             mVisualInsetsRight = visualInsetsRight;
         }
 
         public static OptionalAttributes newInstance(final String outputText, final int altCode,
-                final int disabledIconId, final int previewIconId,
-                final int visualInsetsLeft, final int visualInsetsRight) {
+                final int disabledIconId, final int visualInsetsLeft, final int visualInsetsRight) {
             if (outputText == null && altCode == CODE_UNSPECIFIED
-                    && disabledIconId == ICON_UNDEFINED && previewIconId == ICON_UNDEFINED
-                    && visualInsetsLeft == 0 && visualInsetsRight == 0) {
+                    && disabledIconId == ICON_UNDEFINED && visualInsetsLeft == 0
+                    && visualInsetsRight == 0) {
                 return null;
             }
-            return new OptionalAttributes(outputText, altCode, disabledIconId, previewIconId,
-                    visualInsetsLeft, visualInsetsRight);
+            return new OptionalAttributes(outputText, altCode, disabledIconId, visualInsetsLeft,
+                    visualInsetsRight);
         }
     }
 
@@ -204,8 +199,7 @@
         mMoreKeysColumnAndFlags = 0;
         mLabel = label;
         mOptionalAttributes = OptionalAttributes.newInstance(outputText, CODE_UNSPECIFIED,
-                ICON_UNDEFINED, ICON_UNDEFINED,
-                0 /* visualInsetsLeft */, 0 /* visualInsetsRight */);
+                ICON_UNDEFINED, 0 /* visualInsetsLeft */, 0 /* visualInsetsRight */);
         mCode = code;
         mEnabled = (code != CODE_UNSPECIFIED);
         mIconId = iconId;
@@ -306,8 +300,6 @@
         mIconId = KeySpecParser.getIconId(keySpec);
         final int disabledIconId = KeySpecParser.getIconId(style.getString(keyAttr,
                 R.styleable.Keyboard_Key_keyIconDisabled));
-        final int previewIconId = KeySpecParser.getIconId(style.getString(keyAttr,
-                R.styleable.Keyboard_Key_keyIconPreview));
 
         final int code = KeySpecParser.getCode(keySpec);
         if ((mLabelFlags & LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL) != 0) {
@@ -361,7 +353,7 @@
         final int altCode = StringUtils.toUpperCaseOfCodeForLocale(
                 altCodeInAttr, needsToUpperCase, locale);
         mOptionalAttributes = OptionalAttributes.newInstance(outputText, altCode,
-                disabledIconId, previewIconId, visualInsetsLeft, visualInsetsRight);
+                disabledIconId, visualInsetsLeft, visualInsetsRight);
         mKeyVisualAttributes = KeyVisualAttributes.newInstance(keyAttr);
         mHashCode = computeHashCode(this);
     }
@@ -756,10 +748,7 @@
     }
 
     public Drawable getPreviewIcon(final KeyboardIconsSet iconSet) {
-        final OptionalAttributes attrs = mOptionalAttributes;
-        final int previewIconId = (attrs != null) ? attrs.mPreviewIconId : ICON_UNDEFINED;
-        return previewIconId != ICON_UNDEFINED
-                ? iconSet.getIconDrawable(previewIconId) : iconSet.getIconDrawable(getIconId());
+        return iconSet.getIconDrawable(getIconId());
     }
 
     public int getWidth() {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
index 7b41dfe..4c2e0dd 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
@@ -34,7 +34,8 @@
 
     public static final int THEME_ID_ICS = 0;
     public static final int THEME_ID_KLP = 2;
-    public static final int THEME_ID_LXX_DARK = 3;
+    public static final int THEME_ID_LXX_LIGHT = 3;
+    public static final int THEME_ID_LXX_DARK = 4;
     public static final int DEFAULT_THEME_ID = THEME_ID_KLP;
 
     private static final KeyboardTheme[] KEYBOARD_THEMES = {
@@ -44,10 +45,12 @@
         new KeyboardTheme(THEME_ID_KLP, R.style.KeyboardTheme_KLP,
                 // Default theme for ICS, JB, and KLP.
                 VERSION_CODES.ICE_CREAM_SANDWICH),
-        new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
+        new KeyboardTheme(THEME_ID_LXX_LIGHT, R.style.KeyboardTheme_LXX_Light,
                 // Default theme for LXX.
                 // TODO: Update this constant once the *next* version becomes available.
                 VERSION_CODES.CUR_DEVELOPMENT),
+        new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
+                VERSION_CODES.BASE),
     };
 
     static {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
index 0b0e761..5cbb341 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
@@ -141,7 +141,6 @@
             readStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys);
             readFlags(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags);
             readString(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled);
-            readString(keyAttr, R.styleable.Keyboard_Key_keyIconPreview);
             readInt(keyAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn);
             readInt(keyAttr, R.styleable.Keyboard_Key_backgroundType);
             readFlags(keyAttr, R.styleable.Keyboard_Key_keyActionFlags);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index 7146deb..09550c4 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -48,7 +48,6 @@
     public static final String NAME_DONE_KEY = "done_key";
     public static final String NAME_PREVIOUS_KEY = "previous_key";
     public static final String NAME_TAB_KEY = "tab_key";
-    public static final String NANE_TAB_KEY_PREVIEW = "tab_key_preview";
     public static final String NAME_SHORTCUT_KEY = "shortcut_key";
     public static final String NAME_SHORTCUT_KEY_DISABLED = "shortcut_key_disabled";
     public static final String NAME_LANGUAGE_SWITCH_KEY = "language_switch_key";
@@ -79,7 +78,6 @@
         NAME_SPACE_KEY_FOR_NUMBER_LAYOUT, R.styleable.Keyboard_iconSpaceKeyForNumberLayout,
         NAME_SHIFT_KEY_SHIFTED,           R.styleable.Keyboard_iconShiftKeyShifted,
         NAME_SHORTCUT_KEY_DISABLED,       R.styleable.Keyboard_iconShortcutKeyDisabled,
-        NANE_TAB_KEY_PREVIEW,             R.styleable.Keyboard_iconTabKeyPreview,
         NAME_LANGUAGE_SWITCH_KEY,         R.styleable.Keyboard_iconLanguageSwitchKey,
         NAME_ZWNJ_KEY,                    R.styleable.Keyboard_iconZwnjKey,
         NAME_ZWJ_KEY,                     R.styleable.Keyboard_iconZwjKey,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 6edc56c..f18ebd1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -88,16 +88,16 @@
         /*   2:30 */ "morekeys_u",
         /*   3:29 */ "morekeys_e",
         /*   4:28 */ "morekeys_i",
-        /*   5:24 */ "keylabel_to_alpha",
+        /*   5:28 */ "keylabel_to_alpha",
         /*   6:23 */ "morekeys_c",
         /*   7:23 */ "double_quotes",
         /*   8:22 */ "morekeys_n",
         /*   9:22 */ "single_quotes",
         /*  10:20 */ "morekeys_s",
-        /*  11:14 */ "morekeys_y",
-        /*  12:13 */ "morekeys_d",
-        /*  13:12 */ "morekeys_z",
-        /*  14:11 */ "keyspec_currency",
+        /*  11:15 */ "keyspec_currency",
+        /*  12:14 */ "morekeys_y",
+        /*  13:13 */ "morekeys_d",
+        /*  14:12 */ "morekeys_z",
         /*  15:10 */ "morekeys_t",
         /*  16:10 */ "morekeys_l",
         /*  17: 9 */ "morekeys_g",
@@ -266,12 +266,10 @@
         /* double_quotes */ "!text/double_lqm_rqm",
         /* morekeys_n */ EMPTY,
         /* single_quotes */ "!text/single_lqm_rqm",
-        /* morekeys_s ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ morekeys_z */
+        /* morekeys_s */ EMPTY,
         /* keyspec_currency */ "$",
-        /* morekeys_t ~ */
-        EMPTY, EMPTY, EMPTY,
+        /* morekeys_y ~ */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_laqm_raqm",
         /* double_angle_quotes */ "!text/double_laqm_raqm",
@@ -516,8 +514,9 @@
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
         /* morekeys_n */ "\u00F1,\u0144",
-        /* single_quotes */ null,
-        /* morekeys_s */ null,
+        /* single_quotes ~ */
+        null, null, null,
+        /* ~ keyspec_currency */
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_y */ "\u00FD,\u0133",
@@ -697,7 +696,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
@@ -753,8 +752,8 @@
         /* double_quotes */ "!text/double_9qm_lqm",
     };
 
-    /* Locale bn: Bengali */
-    private static final String[] TEXTS_bn = {
+    /* Locale bn_IN: Bengali (India) */
+    private static final String[] TEXTS_bn_IN = {
         /* morekeys_a ~ */
         null, null, null, null, null,
         /* ~ morekeys_i */
@@ -764,8 +763,8 @@
         // U+0997: "ग" BENGALI LETTER GA
         /* keylabel_to_alpha */ "\u0995\u0996\u0997",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+09F3: "৳" BENGALI RUPEE SIGN
         /* keyspec_currency */ "\u09F3",
     };
@@ -904,6 +903,7 @@
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         /* morekeys_s */ "\u0161,\u00DF,\u015B",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -913,7 +913,6 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
-        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0165",
         /* morekeys_l */ null,
@@ -963,14 +962,14 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u00DF,\u015B,\u0161",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
-        /* morekeys_z ~ */
-        null, null, null,
-        /* ~ morekeys_t */
+        /* morekeys_z */ null,
+        /* morekeys_t */ null,
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u0142",
         /* morekeys_g */ null,
@@ -1039,7 +1038,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
@@ -1200,6 +1199,7 @@
         // U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
@@ -1213,7 +1213,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017A,\u017C,\u017E",
-        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
@@ -1398,6 +1397,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -1407,7 +1407,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
-        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -1505,13 +1504,13 @@
         // U+067E: "پ" ARABIC LETTER PEH
         /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+FDFC: "﷼" RIAL SIGN
         /* keyspec_currency */ "\uFDFC",
-        /* morekeys_t ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
         /* keyspec_symbols_1 */ "\u06F1",
@@ -1663,14 +1662,15 @@
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         /* morekeys_s */ "\u0161,\u00DF,\u015B",
-        /* morekeys_y */ null,
-        /* morekeys_d */ null,
+        /* keyspec_currency ~ */
+        null, null, null,
+        /* ~ morekeys_d */
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
-        /* keyspec_currency ~ */
-        null, null, null, null, null, null, null, null, null,
+        /* morekeys_t ~ */
+        null, null, null, null, null, null, null, null,
         /* ~ morekeys_cyrillic_ie */
         // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
         /* keyspec_nordic_row1_11 */ "\u00E5",
@@ -1737,14 +1737,14 @@
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,%,\u0107,\u010D",
         /* double_quotes ~ */
-        null, null, null, null,
-        /* ~ morekeys_s */
+        null, null, null, null, null,
+        /* ~ keyspec_currency */
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "%,\u00FF",
         /* morekeys_d ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ keyspec_tablet_comma */
         // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
         /* keyspec_swiss_row1_11 */ "\u00E8",
@@ -1826,13 +1826,13 @@
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_t ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -1886,6 +1886,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u0161,\u015B,\u00DF",
+        /* keyspec_currency */ null,
         /* morekeys_y */ null,
         // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
@@ -1893,8 +1894,8 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
-        /* keyspec_currency ~ */
-        null, null, null, null,
+        /* morekeys_t ~ */
+        null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
         /* double_angle_quotes */ "!text/double_raqm_laqm",
@@ -2063,13 +2064,13 @@
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
         /* morekeys_s */ null,
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
         /* morekeys_z */ null,
-        /* keyspec_currency */ null,
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         /* morekeys_t */ "\u00FE",
     };
@@ -2151,16 +2152,14 @@
         /* double_quotes */ "!text/double_rqm_9qm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_rqm_9qm",
-        /* morekeys_s ~ */
-        null, null, null, null,
-        /* ~ morekeys_z */
+        /* morekeys_s */ null,
         // U+20AA: "₪" NEW SHEQEL SIGN
         /* keyspec_currency */ "\u20AA",
-        /* morekeys_t ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null,
+        null, null, null, null, null,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         /* morekeys_star */ "\u2605",
@@ -2294,6 +2293,23 @@
         /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
     };
 
+    /* Locale kn_IN: Kannada (India) */
+    private static final String[] TEXTS_kn_IN = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0C85: "ಅ" KANNADA LETTER A
+        // U+0C86: "ಆ" KANNADA LETTER AA
+        // U+0C87: "ಇ" KANNADA LETTER I
+        /* keylabel_to_alpha */ "\u0C85\u0C86\u0C87",
+        /* morekeys_c ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        /* keyspec_currency */ "\u20B9",
+    };
+
     /* Locale ky: Kirghiz */
     private static final String[] TEXTS_ky = {
         /* morekeys_a ~ */
@@ -2349,8 +2365,8 @@
         // U+0E84: "ຄ" LAO LETTER KHO TAM
         /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20AD: "₭" KIP SIGN
         /* keyspec_currency */ "\u20AD",
     };
@@ -2419,6 +2435,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -2428,7 +2445,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
-        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -2513,6 +2529,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -2522,7 +2539,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
-        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -2582,6 +2598,21 @@
         /* keyspec_south_slavic_row3_8 */ "\u0453",
     };
 
+    /* Locale ml_IN: Malayalam (India) */
+    private static final String[] TEXTS_ml_IN = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0D05: "അ" MALAYALAM LETTER A
+        /* keylabel_to_alpha */ "\u0D05",
+        /* morekeys_c ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        /* keyspec_currency */ "\u20B9",
+    };
+
     /* Locale mn_MN: Mongolian (Mongolia) */
     private static final String[] TEXTS_mn_MN = {
         /* morekeys_a ~ */
@@ -2593,8 +2624,8 @@
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20AE: "₮" TUGRIK SIGN
         /* keyspec_currency */ "\u20AE",
     };
@@ -2610,13 +2641,13 @@
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_t ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2757,13 +2788,13 @@
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
         /* keyspec_currency */ "\u0930\u0941.",
-        /* morekeys_t ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2849,6 +2880,7 @@
         /* morekeys_n */ "\u00F1,\u0144",
         /* single_quotes */ "!text/single_9qm_rqm",
         /* morekeys_s */ null,
+        /* keyspec_currency */ null,
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_y */ "\u0133",
     };
@@ -2898,13 +2930,13 @@
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015B,\u00DF,\u0161",
-        /* morekeys_y */ null,
-        /* morekeys_d */ null,
+        /* keyspec_currency ~ */
+        null, null, null,
+        /* ~ morekeys_d */
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017C,\u017A,\u017E",
-        /* keyspec_currency */ null,
         /* morekeys_t */ null,
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u0142",
@@ -3004,9 +3036,9 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null,
-        /* ~ keyspec_currency */
+        /* ~ morekeys_z */
         // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
         /* morekeys_t */ "\u021B",
     };
@@ -3120,6 +3152,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -3129,7 +3162,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
-        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         /* morekeys_t */ "\u0165,\u0163",
@@ -3164,13 +3196,14 @@
         /* single_quotes */ "!text/single_9qm_lqm",
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u0161",
+        /* keyspec_currency */ null,
         /* morekeys_y */ null,
         // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017E",
-        /* keyspec_currency ~ */
-        null, null, null, null,
+        /* morekeys_t ~ */
+        null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
         /* double_angle_quotes */ "!text/double_raqm_laqm",
@@ -3284,6 +3317,7 @@
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u015B,\u0161,\u015F,\u00DF",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
@@ -3294,7 +3328,6 @@
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017A,\u017E,\u017C",
-        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         /* morekeys_t */ "\u0165,\u00FE",
@@ -3372,12 +3405,46 @@
         /* single_quotes */ null,
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u00DF",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         /* morekeys_g */ "g\'",
     };
 
+    /* Locale ta_IN: Tamil (India) */
+    private static final String[] TEXTS_ta_IN = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0BA4: "த" TAMIL LETTER TA
+        // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I
+        // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
+        /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
+        /* morekeys_c ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
+        // U+0BF9: "௹" TAMIL RUPEE SIGN
+        /* keyspec_currency */ "\u0BF9",
+    };
+
+    /* Locale te_IN: Telugu (India) */
+    private static final String[] TEXTS_te_IN = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0C05: "అ" TELUGU LETTER A
+        // U+0C06: "ఆ" TELUGU LETTER AA
+        // U+0C07: "ఇ" TELUGU LETTER I
+        /* keylabel_to_alpha */ "\u0C05\u0C06\u0C07",
+        /* morekeys_c ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        /* keyspec_currency */ "\u20B9",
+    };
+
     /* Locale th: Thai */
     private static final String[] TEXTS_th = {
         /* morekeys_a ~ */
@@ -3389,8 +3456,8 @@
         // U+0E04: "ค" THAI CHARACTER KHO KHWAI
         /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04",
         /* morekeys_c ~ */
-        null, null, null, null, null, null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
         /* keyspec_currency */ "\u0E3F",
     };
@@ -3491,7 +3558,7 @@
         // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
@@ -3512,13 +3579,11 @@
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
-        /* morekeys_s ~ */
-        null, null, null, null,
-        /* ~ morekeys_z */
+        /* morekeys_s */ null,
         // U+20B4: "₴" HRYVNIA SIGN
         /* keyspec_currency */ "\u20B4",
-        /* morekeys_t ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* morekeys_y ~ */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ morekeys_nordic_row2_10 */
         // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
         /* keyspec_east_slavic_row1_9 */ "\u0449",
@@ -3615,6 +3680,8 @@
         /* keylabel_to_alpha ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_s */
+        // U+20AB: "₫" DONG SIGN
+        /* keyspec_currency */ "\u20AB",
         // U+1EF3: "ỳ" LATIN SMALL LETTER Y WITH GRAVE
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+1EF7: "ỷ" LATIN SMALL LETTER Y WITH HOOK ABOVE
@@ -3623,9 +3690,6 @@
         /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
         // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
-        /* morekeys_z */ null,
-        // U+20AB: "₫" DONG SIGN
-        /* keyspec_currency */ "\u20AB",
     };
 
     /* Locale zu: Zulu */
@@ -3759,6 +3823,7 @@
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         // U+017F: "ſ" LATIN SMALL LETTER LONG S
         /* morekeys_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
@@ -3772,7 +3837,6 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017A,\u017C,\u017E",
-        /* keyspec_currency */ null,
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
@@ -3819,12 +3883,12 @@
     private static final Object[] LOCALES_AND_TEXTS = {
     // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
         "DEFAULT", TEXTS_DEFAULT, /* 168/168 DEFAULT */
-        "af"     , TEXTS_af,    /*   7/ 12 Afrikaans */
+        "af"     , TEXTS_af,    /*   7/ 13 Afrikaans */
         "ar"     , TEXTS_ar,    /*  55/110 Arabic */
         "az_AZ"  , TEXTS_az_AZ, /*   8/ 18 Azerbaijani (Azerbaijan) */
         "be_BY"  , TEXTS_be_BY, /*   9/ 32 Belarusian (Belarus) */
         "bg"     , TEXTS_bg,    /*   2/  8 Bulgarian */
-        "bn"     , TEXTS_bn,    /*   2/ 15 Bengali */
+        "bn_IN"  , TEXTS_bn_IN, /*   2/ 12 Bengali (India) */
         "ca"     , TEXTS_ca,    /*  11/ 96 Catalan */
         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
         "da"     , TEXTS_da,    /*  19/ 54 Danish */
@@ -3849,17 +3913,19 @@
         "ka_GE"  , TEXTS_ka_GE, /*   3/ 10 Georgian (Georgia) */
         "kk"     , TEXTS_kk,    /*  15/121 Kazakh */
         "km_KH"  , TEXTS_km_KH, /*   2/122 Khmer (Cambodia) */
+        "kn_IN"  , TEXTS_kn_IN, /*   2/ 12 Kannada (India) */
         "ky"     , TEXTS_ky,    /*  10/ 89 Kirghiz */
-        "lo_LA"  , TEXTS_lo_LA, /*   2/ 15 Lao (Laos) */
+        "lo_LA"  , TEXTS_lo_LA, /*   2/ 12 Lao (Laos) */
         "lt"     , TEXTS_lt,    /*  18/ 22 Lithuanian */
         "lv"     , TEXTS_lv,    /*  18/ 22 Latvian */
         "mk"     , TEXTS_mk,    /*   9/ 94 Macedonian */
-        "mn_MN"  , TEXTS_mn_MN, /*   2/ 15 Mongolian (Mongolia) */
+        "ml_IN"  , TEXTS_ml_IN, /*   2/ 12 Malayalam (India) */
+        "mn_MN"  , TEXTS_mn_MN, /*   2/ 12 Mongolian (Mongolia) */
         "mr_IN"  , TEXTS_mr_IN, /*  23/ 53 Marathi (India) */
         "my_MM"  , TEXTS_my_MM, /*   8/104 Burmese (Myanmar) */
         "nb"     , TEXTS_nb,    /*  11/ 54 Norwegian Bokmål */
         "ne_NP"  , TEXTS_ne_NP, /*  23/ 53 Nepali (Nepal) */
-        "nl"     , TEXTS_nl,    /*   9/ 12 Dutch */
+        "nl"     , TEXTS_nl,    /*   9/ 13 Dutch */
         "pl"     , TEXTS_pl,    /*  10/ 17 Polish */
         "pt"     , TEXTS_pt,    /*   6/  7 Portuguese */
         "rm"     , TEXTS_rm,    /*   1/  2 Raeto-Romance */
@@ -3871,11 +3937,13 @@
         "sr"     , TEXTS_sr,    /*  11/ 94 Serbian */
         "sv"     , TEXTS_sv,    /*  21/ 54 Swedish */
         "sw"     , TEXTS_sw,    /*   9/ 18 Swahili */
-        "th"     , TEXTS_th,    /*   2/ 15 Thai */
+        "ta_IN"  , TEXTS_ta_IN, /*   2/ 12 Tamil (India) */
+        "te_IN"  , TEXTS_te_IN, /*   2/ 12 Telugu (India) */
+        "th"     , TEXTS_th,    /*   2/ 12 Thai */
         "tl"     , TEXTS_tl,    /*   7/  9 Tagalog */
         "tr"     , TEXTS_tr,    /*   7/ 18 Turkish */
         "uk"     , TEXTS_uk,    /*  11/ 88 Ukrainian */
-        "vi"     , TEXTS_vi,    /*   8/ 15 Vietnamese */
+        "vi"     , TEXTS_vi,    /*   8/ 14 Vietnamese */
         "zu"     , TEXTS_zu,    /*   8/ 11 Zulu */
         "zz"     , TEXTS_zz,    /*  19/112 Alphabet */
     };
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.cpp
index 146cab6..08dc107 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.cpp
@@ -175,9 +175,9 @@
     bool hasNext = true;
     int readingPos = bigramListPos;
     while (hasNext) {
-        const int entryPos = readingPos;
         const BigramEntry bigramEntry =
                 mBigramDictContent->getBigramEntryAndAdvancePosition(&readingPos);
+        const int entryPos = readingPos - mBigramDictContent->getBigramEntrySize();
         hasNext = bigramEntry.hasNext();
         if (!bigramEntry.isValid()) {
             continue;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_writing_helper.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_writing_helper.cpp
index 40fdfa0..0e658f8 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_writing_helper.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_writing_helper.cpp
@@ -242,9 +242,9 @@
         bool hasNext = true;
         int readingPos = bigramListPos;
         while (hasNext) {
-            const int entryPos = readingPos;
             const BigramEntry bigramEntry =
                     bigramDictContent->getBigramEntryAndAdvancePosition(&readingPos);
+            const int entryPos = readingPos - bigramDictContent->getBigramEntrySize();
             hasNext = bigramEntry.hasNext();
             if (!bigramEntry.isValid()) {
                 continue;
diff --git a/tests/src/com/android/inputmethod/compat/TextInfoCompatUtilsTests.java b/tests/src/com/android/inputmethod/compat/TextInfoCompatUtilsTests.java
new file mode 100644
index 0000000..c399cce
--- /dev/null
+++ b/tests/src/com/android/inputmethod/compat/TextInfoCompatUtilsTests.java
@@ -0,0 +1,86 @@
+/*
+ * 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.compat;
+
+import android.graphics.Typeface;
+import android.os.Parcel;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.text.style.StyleSpan;
+import android.text.style.URLSpan;
+import android.view.textservice.TextInfo;
+
+import java.util.Arrays;
+
+@SmallTest
+public class TextInfoCompatUtilsTests extends AndroidTestCase {
+    final private static String TEST_TEXT = "0123456789";
+    final private static int TEST_COOKIE = 0x1234;
+    final private static int TEST_SEQUENCE_NUMBER = 0x4321;
+    final private static int TEST_CHAR_SEQUENCE_START = 1;
+    final private static int TEST_CHAR_SEQUENCE_END = 6;
+    final private static StyleSpan TEST_STYLE_SPAN = new StyleSpan(Typeface.BOLD);
+    final private static int TEST_STYLE_SPAN_START = 4;
+    final private static int TEST_STYLE_SPAN_END = 5;
+    final private static int TEST_STYLE_SPAN_FLAGS = Spanned.SPAN_EXCLUSIVE_INCLUSIVE;
+    final private static URLSpan TEST_URL_SPAN_URL = new URLSpan("http://example.com");
+    final private static int TEST_URL_SPAN_START = 3;
+    final private static int TEST_URL_SPAN_END = 7;
+    final private static int TEST_URL_SPAN_FLAGS = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
+
+    public void testGetCharSequence() {
+        final SpannableString text = new SpannableString(TEST_TEXT);
+        text.setSpan(TEST_STYLE_SPAN, TEST_STYLE_SPAN_START, TEST_STYLE_SPAN_END,
+                TEST_STYLE_SPAN_FLAGS);
+        text.setSpan(TEST_URL_SPAN_URL, TEST_URL_SPAN_START, TEST_URL_SPAN_END,
+                TEST_URL_SPAN_FLAGS);
+
+        final TextInfo textInfo = TextInfoCompatUtils.newInstance(text,
+                TEST_CHAR_SEQUENCE_START, TEST_CHAR_SEQUENCE_END, TEST_COOKIE,
+                TEST_SEQUENCE_NUMBER);
+        final Spanned expectedSpanned = (Spanned) text.subSequence(TEST_CHAR_SEQUENCE_START,
+                TEST_CHAR_SEQUENCE_END);
+        final CharSequence actualCharSequence =
+                TextInfoCompatUtils.getCharSequenceOrString(textInfo);
+
+        // This should be valid even if TextInfo#getCharSequence is not supported.
+        assertTrue(TextUtils.equals(expectedSpanned, actualCharSequence));
+
+        if (TextInfoCompatUtils.isCharSequenceSupported()) {
+            // This is valid only if TextInfo#getCharSequence is supported.
+            assertTrue("should be Spanned", actualCharSequence instanceof Spanned);
+            assertTrue(Arrays.equals(marshall(expectedSpanned), marshall(actualCharSequence)));
+        }
+    }
+
+    private static byte[] marshall(final CharSequence cahrSequence) {
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            TextUtils.writeToParcel(cahrSequence, parcel, 0);
+            return parcel.marshall();
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+                parcel = null;
+            }
+        }
+    }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
index 6ee6adb..eb67bc1 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
@@ -25,7 +25,7 @@
 
 @SmallTest
 public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase {
-    private static final int NUMBER_OF_SUBTYPES = 73;
+    private static final int NUMBER_OF_SUBTYPES = 77;
     private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 45;
     private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;
 
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
index f9d98af..0c7e400 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardThemeTests.java
@@ -16,6 +16,11 @@
 
 package com.android.inputmethod.keyboard;
 
+import static com.android.inputmethod.keyboard.KeyboardTheme.THEME_ID_ICS;
+import static com.android.inputmethod.keyboard.KeyboardTheme.THEME_ID_KLP;
+import static com.android.inputmethod.keyboard.KeyboardTheme.THEME_ID_LXX_DARK;
+import static com.android.inputmethod.keyboard.KeyboardTheme.THEME_ID_LXX_LIGHT;
+
 import android.content.SharedPreferences;
 import android.os.Build.VERSION_CODES;
 import android.preference.PreferenceManager;
@@ -33,9 +38,6 @@
     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_DARK = KeyboardTheme.THEME_ID_LXX_DARK;
 
     @Override
     protected void setUp() throws Exception {
@@ -51,6 +53,7 @@
         switch (themeId) {
         case THEME_ID_ICS:
         case THEME_ID_KLP:
+        case THEME_ID_LXX_LIGHT:
         case THEME_ID_LXX_DARK:
             return true;
         default:
@@ -99,6 +102,7 @@
         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_LIGHT, THEME_ID_LXX_LIGHT);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_LXX_DARK, THEME_ID_LXX_DARK);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_UNKNOWN, defaultThemeId);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_ILLEGAL, defaultThemeId);
@@ -114,10 +118,11 @@
     }
 
     private void assertKeyboardThemePreferenceOnLxx(final int sdkVersion) {
-        final int defaultThemeId = THEME_ID_LXX_DARK;
+        final int defaultThemeId = THEME_ID_LXX_LIGHT;
         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_LIGHT, THEME_ID_LXX_LIGHT);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_LXX_DARK, THEME_ID_LXX_DARK);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_UNKNOWN, defaultThemeId);
         assertKeyboardThemePreference(sdkVersion, THEME_ID_ILLEGAL, defaultThemeId);
@@ -169,11 +174,11 @@
 
     private void assertDefaultKeyboardThemeOnLxx(final int sdkVersion) {
         // Forced to switch to LXX theme.
-        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);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_NULL, THEME_ID_LXX_LIGHT);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ICS, THEME_ID_LXX_LIGHT);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_KLP, THEME_ID_LXX_LIGHT);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_LIGHT);
+        assertDefaultKeyboardTheme(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_LIGHT);
     }
 
     public void testDefaultKeyboardThemeOnLxx() {
@@ -234,11 +239,11 @@
 
     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);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_NULL, THEME_ID_LXX_LIGHT);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ICS, THEME_ID_LXX_LIGHT);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_KLP, THEME_ID_LXX_LIGHT);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_LIGHT);
+        assertUpgradeKeyboardToLxxOn(sdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_LIGHT);
     }
 
     // Upgrading keyboard on L.
@@ -298,15 +303,15 @@
         // Forced to switch to LXX theme.
         final int newSdkVersion = VERSION_CODES_LXX;
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_LIGHT);
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_ICS, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_ICS, THEME_ID_LXX_LIGHT);
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_KLP, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_KLP, THEME_ID_LXX_LIGHT);
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_LIGHT);
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_LIGHT);
     }
 
     // Update platform from I,J, and K to L
@@ -324,14 +329,18 @@
         final int oldSdkVersion = VERSION_CODES_LXX;
         final int newSdkVersion = VERSION_CODES_LXX;
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_NULL, THEME_ID_LXX_LIGHT);
         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);
+                oldSdkVersion, newSdkVersion, THEME_ID_LXX_LIGHT, THEME_ID_LXX_LIGHT);
         assertUpgradePlatformFromTo(
-                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_DARK);
+                oldSdkVersion, newSdkVersion, THEME_ID_LXX_DARK, THEME_ID_LXX_DARK);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_UNKNOWN, THEME_ID_LXX_LIGHT);
+        assertUpgradePlatformFromTo(
+                oldSdkVersion, newSdkVersion, THEME_ID_ILLEGAL, THEME_ID_LXX_LIGHT);
     }
 }
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Bengali.java b/tests/src/com/android/inputmethod/keyboard/layout/Bengali.java
index 79c7d08..2101ddf 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/Bengali.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Bengali.java
@@ -72,20 +72,25 @@
     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
             .setKeysOfRow(1,
                     // U+0994: "ঔ" BENGALI LETTER AU
+                    // U+09CC: "ৌ" BENGALI VOWEL SIGN AU
                     // U+09E7: "১" BENGALI DIGIT ONE
-                    key("\u0994", joinMoreKeys("\u09E7", "1")),
+                    key("\u0994", joinMoreKeys("\u09CC", "\u09E7", "1")),
                     // U+0990: "ঐ" BENGALI LETTER AI
+                    // U+09C8: "ৈ" BENGALI VOWEL SIGN AI
                     // U+09E8: "২" BENGALI DIGIT TWO
-                    key("\u0990", joinMoreKeys("\u09E8", "2")),
+                    key("\u0990", joinMoreKeys("\u09C8", "\u09E8", "2")),
                     // U+0986: "আ" BENGALI LETTER AA
+                    // U+09BE: "া" BENGALI VOWEL SIGN AA
                     // U+09E9: "৩" BENGALI DIGIT THREE
-                    key("\u0986", joinMoreKeys("\u09E9", "3")),
+                    key("\u0986", joinMoreKeys("\u09BE", "\u09E9", "3")),
                     // U+0988: "ঈ" BENGALI LETTER II
+                    // U+09C0: "ী" BENGALI VOWEL SIGN II
                     // U+09EA: "৪" BENGALI DIGIT FOUR
-                    key("\u0988", joinMoreKeys("\u09EA", "4")),
+                    key("\u0988", joinMoreKeys("\u09C0", "\u09EA", "4")),
                     // U+098A: "ঊ" BENGALI LETTER UU
+                    // U+09C2: "ূ" BENGALI VOWEL SIGN UU
                     // U+09EB: "৫" BENGALI DIGIT FIVE
-                    key("\u098A", joinMoreKeys("\u09EB", "5")),
+                    key("\u098A", joinMoreKeys("\u09C2", "\u09EB", "5")),
                     // U+09AC: "ব" BENGALI LETTER BA
                     // U+09AD: "ভ" BENGALI LETTER BHA
                     // U+09EC: "৬" BENGALI DIGIT SIX
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Kannada.java b/tests/src/com/android/inputmethod/keyboard/layout/Kannada.java
new file mode 100644
index 0000000..5ce7f4d
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Kannada.java
@@ -0,0 +1,197 @@
+/*
+ * 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.keyboard.layout;
+
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.latin.Constants;
+
+import java.util.Locale;
+
+/**
+ * The Kannada keyboard.
+ */
+public final class Kannada extends LayoutBase {
+    private static final String LAYOUT_NAME = "kannada";
+
+    public Kannada(final LayoutCustomizer customizer) {
+        super(customizer, Symbols.class, SymbolsShifted.class);
+    }
+
+    @Override
+    public String getName() { return LAYOUT_NAME; }
+
+    public static class KannadaCustomizer extends LayoutCustomizer {
+        public KannadaCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKey getAlphabetKey() { return KANNADA_ALPHABET_KEY; }
+
+        @Override
+        public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
+
+        @Override
+        public ExpectedKey[] getOtherCurrencyKeys() {
+            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
+        }
+
+        @Override
+        public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
+            return EMPTY_KEYS;
+        }
+
+        @Override
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
+        }
+
+        @Override
+        public ExpectedKey[] getSpaceKeys(final boolean isPhone) {
+            return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY));
+        }
+
+        // U+0C85: "ಅ" KANNADA LETTER A
+        // U+0C86: "ಆ" KANNADA LETTER AA
+        // U+0C87: "ಇ" KANNADA LETTER I
+        private static final ExpectedKey KANNADA_ALPHABET_KEY = key(
+                "\u0C85\u0C86\u0C87", Constants.CODE_SWITCH_ALPHA_SYMBOL);
+
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
+                Symbols.CURRENCY_GENERIC_MORE_KEYS);
+    }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+        return null;
+    }
+
+    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
+            .setKeysOfRow(1,
+                    // U+0CCC: "ೌ" KANNADA VOWEL SIGN AU
+                    // U+0C94: "ಔ" KANNADA LETTER AU
+                    // U+0CE7: "೧" KANNADA DIGIT ONE
+                    key("\u0CCC", joinMoreKeys("\u0C94", "\u0CE7", "1")),
+                    // U+0CC8: "ೈ" KANNADA VOWEL SIGN AI
+                    // U+0C90: "ಐ" KANNADA LETTER AI
+                    // U+0CE8: "೨" KANNADA DIGIT TWO
+                    key("\u0CC8", joinMoreKeys("\u0C90", "\u0CE8", "2")),
+                    // U+0CBE: "ಾ" KANNADA VOWEL SIGN AA
+                    // U+0C86: "ಆ" KANNADA LETTER AA
+                    // U+0CE9: "೩" KANNADA DIGIT THREE
+                    key("\u0CBE", joinMoreKeys("\u0C86", "\u0CE9", "3")),
+                    // U+0CC0: "ೀ" KANNADA VOWEL SIGN II
+                    // U+0C88: "ಈ" KANNADA LETTER II
+                    // U+0CEA: "೪" KANNADA DIGIT FOUR
+                    key("\u0CC0", joinMoreKeys("\u0C88", "\u0CEA", "4")),
+                    // U+0CC2: "ೂ" KANNADA VOWEL SIGN UU
+                    // U+0C8A: "ಊ" KANNADA LETTER UU
+                    // U+0CEB: "೫" KANNADA DIGIT FIVE
+                    key("\u0CC2", joinMoreKeys("\u0C8A", "\u0CEB", "5")),
+                    // U+0CAC: "ಬ" KANNADA LETTER BA
+                    // U+0CAD: "ಭ" KANNADA LETTER BHA
+                    // U+0CEC: "೬" KANNADA DIGIT SIX
+                    key("\u0CAC", joinMoreKeys("\u0CAD", "\u0CEC", "6")),
+                    // U+0CB9: "ಹ" KANNADA LETTER HA
+                    // U+0C99: "ಙ" KANNADA LETTER NGA
+                    // U+0CED: "೭" KANNADA DIGIT SEVEN
+                    key("\u0CB9", joinMoreKeys("\u0C99", "\u0CED", "7")),
+                    // U+0C97: "ಗ" KANNADA LETTER GA
+                    // U+0C98: "ಘ" KANNADA LETTER GHA
+                    // U+0CEE: "೮" KANNADA DIGIT EIGHT
+                    key("\u0C97", joinMoreKeys("\u0C98", "\u0CEE", "8")),
+                    // U+0CA6: "ದ" KANNADA LETTER DA
+                    // U+0CA7: "ಧ" KANNADA LETTER DHA
+                    // U+0CEF: "೯" KANNADA DIGIT NINE
+                    key("\u0CA6", joinMoreKeys("\u0CA7", "\u0CEF", "9")),
+                    // U+0C9C: "ಜ" KANNADA LETTER JA
+                    // U+0C9D: "ಝ" KANNADA LETTER JHA
+                    // U+0CE6: "೦" KANNADA DIGIT ZERO
+                    key("\u0C9C", joinMoreKeys("\u0C9D", "\u0CE6", "0")),
+                    // U+0CA1: "ಡ" KANNADA LETTER DDA
+                    // U+0CA2: "ಢ" KANNADA LETTER DDHA
+                    key("\u0CA1", moreKey("\u0CA2")))
+            .setKeysOfRow(2,
+                    // U+0CCB: "ೋ" KANNADA VOWEL SIGN OO
+                    // U+0C93: "ಓ" KANNADA LETTER OO
+                    key("\u0CCB", moreKey("\u0C93")),
+                    // U+0CC7: "ೇ" KANNADA VOWEL SIGN EE
+                    // U+0C8F: "ಏ" KANNADA LETTER EE
+                    key("\u0CC7", moreKey("\u0C8F")),
+                    // U+0CCD: "್" KANNADA SIGN VIRAMA
+                    // U+0C85: "ಅ" KANNADA LETTER A
+                    key("\u0CCD", moreKey("\u0C85")),
+                    // U+0CBF: "ಿ" KANNADA VOWEL SIGN I
+                    // U+0C87: "ಇ" KANNADA LETTER I
+                    key("\u0CBF", moreKey("\u0C87")),
+                    // U+0CC1: "ು" KANNADA VOWEL SIGN U
+                    // U+0C89: "ಉ" KANNADA LETTER U
+                    key("\u0CC1", moreKey("\u0C89")),
+                    // U+0CAA: "ಪ" KANNADA LETTER PA
+                    // U+0CAB: "ಫ" KANNADA LETTER PHA
+                    key("\u0CAA", moreKey("\u0CAB")),
+                    // U+0CB0: "ರ" KANNADA LETTER RA
+                    // U+0CB1: "ಱ" KANNADA LETTER RRA
+                    // U+0CC3: "ೃ" KANNADA VOWEL SIGN VOCALIC R
+                    key("\u0CB0", joinMoreKeys("\u0CB1", "\u0CC3")),
+                    // U+0C95: "ಕ" KANNADA LETTER KA
+                    // U+0C96: "ಖ" KANNADA LETTER KHA
+                    key("\u0C95", moreKey("\u0C96")),
+                    // U+0CA4: "ತ" KANNADA LETTER TA
+                    // U+0CA5: "ಥ" KANNADA LETTER THA
+                    key("\u0CA4", moreKey("\u0CA5")),
+                    // U+0C9A: "ಚ" KANNADA LETTER CA
+                    // U+0C9B: "ಛ" KANNADA LETTER CHA
+                    key("\u0C9A", moreKey("\u0C9B")),
+                    // U+0C9F: "ಟ" KANNADA LETTER TTA
+                    // U+0CA0: "ಠ" KANNADA LETTER TTHA
+                    key("\u0C9F", moreKey("\u0CA0")))
+            .setKeysOfRow(3,
+                    // U+0CC6: "ೆ" KANNADA VOWEL SIGN E
+                    // U+0C92: "ಒ" KANNADA LETTER O
+                    key("\u0CC6", moreKey("\u0C92")),
+                    // U+0C82: "ಂ" KANNADA SIGN ANUSVARA
+                    // U+0C8E: "ಎ" KANNADA LETTER E
+                    key("\u0C82", moreKey("\u0C8E")),
+                    // U+0CAE: "ಮ" KANNADA LETTER MA
+                    // U+0CA3: "ಣ" KANNADA LETTER NNA
+                    key("\u0CAE", moreKey("\u0CA3")),
+                    // U+0CA8: "ನ" KANNADA LETTER NA
+                    // U+0CB5: "ವ" KANNADA LETTER VA
+                    "\u0CA8", "\u0CB5",
+                    // U+0CB2: "ಲ" KANNADA LETTER LA
+                    // U+0CB3: "ಳ" KANNADA LETTER LLA
+                    key("\u0CB2", moreKey("\u0CB3")),
+                    // U+0CB8: "ಸ" KANNADA LETTER SA
+                    // U+0CB6: "ಶ" KANNADA LETTER SHA
+                    key("\u0CB8", moreKey("\u0CB6")),
+                    // U+0C8B: "ಋ" KANNADA LETTER VOCALIC R
+                    // U+0CCD/U+0CB0: "್ರ" KANNADA SIGN VIRAMA/KANNADA LETTER RA
+                    key("\u0C8B", moreKey("\u0CCD\u0CB0")),
+                    // U+0CB7: "ಷ" KANNADA LETTER SSA
+                    // U+0C95/U+0CCD/U+0CB7:
+                    //     "ಕ್ಷ" KANNADA LETTER RA/KANNADA SIGN VIRAMA/KANNADA LETTER SSA
+                    key("\u0CB7", moreKey("\u0C95\u0CCD\u0CB7")),
+                    // U+0CAF: "ಯ" KANNADA LETTER YA
+                    // U+0C9C/U+0CCD/U+0C9E:
+                    //     "ಜ್ಞ" KANNADA LETTER JA/KANNADA SIGN VIRAMA/KANNADA LETTER NYA
+                    key("\u0CAF", moreKey("\u0C9C\u0CCD\u0C9E")))
+            .build();
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Malayalam.java b/tests/src/com/android/inputmethod/keyboard/layout/Malayalam.java
new file mode 100644
index 0000000..b44b888
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Malayalam.java
@@ -0,0 +1,188 @@
+/*
+ * 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.keyboard.layout;
+
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.latin.Constants;
+
+import java.util.Locale;
+
+/**
+ * The Malayalam keyboard.
+ */
+public final class Malayalam extends LayoutBase {
+    private static final String LAYOUT_NAME = "malayalam";
+
+    public Malayalam(final LayoutCustomizer customizer) {
+        super(customizer, Symbols.class, SymbolsShifted.class);
+    }
+
+    @Override
+    public String getName() { return LAYOUT_NAME; }
+
+    public static class MalayalamCustomizer extends LayoutCustomizer {
+        public MalayalamCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKey getAlphabetKey() { return MALAYALAM_ALPHABET_KEY; }
+
+        @Override
+        public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
+
+        @Override
+        public ExpectedKey[] getOtherCurrencyKeys() {
+            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
+        }
+
+        @Override
+        public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
+            return EMPTY_KEYS;
+        }
+
+        @Override
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
+        }
+
+        // U+0D05: "അ" MALAYALAM LETTER A
+        private static final ExpectedKey MALAYALAM_ALPHABET_KEY = key(
+                "\u0D05", Constants.CODE_SWITCH_ALPHA_SYMBOL);
+
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
+                Symbols.CURRENCY_GENERIC_MORE_KEYS);
+    }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+        return null;
+    }
+
+    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
+            .setKeysOfRow(1,
+                    // U+0D4D: "്" MALAYALAM SIGN VIRAMA
+                    // U+0D05: "അ" MALAYALAM LETTER A
+                    key("\u0D4D", joinMoreKeys("\u0D05", "1")),
+                    // U+0D3E: "ാ" MALAYALAM VOWEL SIGN AA
+                    // U+0D06: "ആ" MALAYALAM LETTER AA
+                    key("\u0D3E", joinMoreKeys("\u0D06", "2")),
+                    // U+0D3F: "ി" MALAYALAM VOWEL SIGN I
+                    // U+0D07: "ഇ" MALAYALAM LETTER I
+                    key("\u0D3F", joinMoreKeys("\u0D07", "3")),
+                    // U+0D40: "ീ" MALAYALAM VOWEL SIGN II
+                    // U+0D08: "ഈ" MALAYALAM LETTER II
+                    key("\u0D40", joinMoreKeys("\u0D08", "4")),
+                    // U+0D41: "ു" MALAYALAM VOWEL SIGN U
+                    // U+0D09: "ഉ" MALAYALAM LETTER U
+                    key("\u0D41", joinMoreKeys("\u0D09", "5")),
+                    // U+0D42: "ൂ" MALAYALAM VOWEL SIGN UU
+                    // U+0D0A: "ഊ" MALAYALAM LETTER UU
+                    key("\u0D42", joinMoreKeys("\u0D0A", "6")),
+                    // U+0D43: "ൃ" MALAYALAM VOWEL SIGN VOCALIC R
+                    // U+0D0B: "ഋ" MALAYALAM LETTER VOCALIC R
+                    key("\u0D43", joinMoreKeys("\u0D0B", "7")),
+                    // U+0D46: "െ" MALAYALAM VOWEL SIGN E
+                    // U+0D0E: "എ" MALAYALAM LETTER E
+                    // U+0D10: "ഐ" MALAYALAM LETTER AI
+                    // U+0D48: "ൈ" MALAYALAM VOWEL SIGN AI
+                    key("\u0D46", joinMoreKeys("\u0D0E", "\u0D10", "\u0D48", "8")),
+                    // U+0D47: "േ" MALAYALAM VOWEL SIGN EE
+                    // U+0D0F: "ഏ" MALAYALAM LETTER EE
+                    key("\u0D47", joinMoreKeys("\u0D0F", "9")),
+                    // U+0D4A: "ൊ" MALAYALAM VOWEL SIGN O
+                    // U+0D12: "ഒ" MALAYALAM LETTER O
+                    key("\u0D4A", joinMoreKeys("\u0D12", "0")),
+                    // U+0D4B: "ോ" MALAYALAM VOWEL SIGN OO
+                    // U+0D13: "ഓ" MALAYALAM LETTER OO
+                    // U+0D14: "ഔ" MALAYALAM LETTER AU
+                    // U+0D57: "ൗ" MALAYALAM AU LENGTH MARK
+                    key("\u0D4B", joinMoreKeys("\u0D13", "\u0D14", "\u0D57")))
+            .setKeysOfRow(2,
+                    // U+0D15: "ക" MALAYALAM LETTER KA
+                    // U+0D16: "ഖ" MALAYALAM LETTER KHA
+                    key("\u0D15", moreKey("\u0D16")),
+                    // U+0D17: "ഗ" MALAYALAM LETTER GA
+                    // U+0D18: "ഘ" MALAYALAM LETTER GHA
+                    key("\u0D17", moreKey("\u0D18")),
+                    // U+0D19: "ങ" MALAYALAM LETTER NGA
+                    // U+0D1E: "ഞ" MALAYALAM LETTER NYA
+                    key("\u0D19", moreKey("\u0D1E")),
+                    // U+0D1A: "ച" MALAYALAM LETTER CA
+                    // U+0D1B: "ഛ" MALAYALAM LETTER CHA
+                    key("\u0D1A", moreKey("\u0D1B")),
+                    // U+0D1C: "ജ" MALAYALAM LETTER JA
+                    // U+0D1D: "ഝ" MALAYALAM LETTER JHA
+                    key("\u0D1C", moreKey("\u0D1D")),
+                    // U+0D1F: "ട" MALAYALAM LETTER TTA
+                    // U+0D20: "ഠ" MALAYALAM LETTER TTHA
+                    key("\u0D1F", moreKey("\u0D20")),
+                    // U+0D21: "ഡ" MALAYALAM LETTER DDA
+                    // U+0D22: "ഢ" MALAYALAM LETTER DDHA
+                    key("\u0D21", moreKey("\u0D22")),
+                    // U+0D23: "ണ" MALAYALAM LETTER NNA
+                    // U+0D7A: "ൺ" MALAYALAM LETTER CHILLU NN
+                    key("\u0D23", moreKey("\u0D7A")),
+                    // U+0D24: "ത" MALAYALAM LETTER TA
+                    // U+0D25: "ഥ" MALAYALAM LETTER THA
+                    key("\u0D24", moreKey("\u0D25")),
+                    // U+0D26: "ദ" MALAYALAM LETTER DA
+                    // U+0D27: "ധ" MALAYALAM LETTER DHA
+                    key("\u0D26", moreKey("\u0D27")),
+                    // U+0D28: "ഗന" MALAYALAM LETTER NA
+                    // U+0D7B: "ൻ" MALAYALAM LETTER CHILLU N
+                    key("\u0D28", moreKey("\u0D7B")))
+            .setKeysOfRow(3,
+                    // U+0D2A: "പ" MALAYALAM LETTER PA
+                    // U+0D2B: "ഫ" MALAYALAM LETTER PHA
+                    key("\u0D2A", moreKey("\u0D2B")),
+                    // U+0D2C: "ബ" MALAYALAM LETTER BA
+                    // U+0D2D: "ഭ" MALAYALAM LETTER BHA
+                    key("\u0D2C", moreKey("\u0D2D")),
+                    // U+0D2E: "മ" MALAYALAM LETTER MA
+                    // U+0D02: "ം" MALAYALAM SIGN ANUSVARA
+                    key("\u0D2E", moreKey("\u0D02")),
+                    // U+0D2F: "യ" MALAYALAM LETTER YA
+                    // U+0D4D/U+0D2F: "്യ" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER YA
+                    key("\u0D2F", moreKey("\u0D4D\u0D2F")),
+                    // U+0D30: "ര" MALAYALAM LETTER RA
+                    // U+0D4D/U+0D30: "്ര" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER RA
+                    // U+0D7C: "ർ" MALAYALAM LETTER CHILLU RR
+                    // U+0D31: "റ" MALAYALAM LETTER RRA
+                    key("\u0D30", joinMoreKeys("\u0D4D\u0D30", "\u0D7C", "\u0D31")),
+                    // U+0D32: "ല" MALAYALAM LETTER LA
+                    // U+0D7D: "ൽ" MALAYALAM LETTER CHILLU L
+                    key("\u0D32", moreKey("\u0D7D")),
+                    // U+0D35: "വ" MALAYALAM LETTER VA
+                    // U+0D4D/U+0D35: "്വ" MALAYALAM SIGN VIRAMA/MALAYALAM LETTER VA
+                    key("\u0D35", moreKey("\u0D4D\u0D35")),
+                    // U+0D36: "ശ" MALAYALAM LETTER SHA
+                    // U+0D37: "ഷ" MALAYALAM LETTER SSA
+                    // U+0D38: "സ" MALAYALAM LETTER SA
+                    key("\u0D36", joinMoreKeys("\u0D37", "\u0D38")),
+                    // U+0D39: "ഹ" MALAYALAM LETTER HA
+                    // U+0D03: "ഃ" MALAYALAM SIGN VISARGA
+                    key("\u0D39", moreKey("\u0D03")),
+                    // U+0D33: "ള" MALAYALAM LETTER LLA
+                    // U+0D7E: "ൾ" MALAYALAM LETTER CHILLU LL
+                    // U+0D34: "ഴ" MALAYALAM LETTER LLLA
+                    key("\u0D33", joinMoreKeys("\u0D7E", "\u0D34")))
+            .build();
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java b/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java
index 1b571ac..f2a2dfd 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java
@@ -144,17 +144,29 @@
                     key("\u1040", moreKey("0")))
             .setKeysOfRow(2,
                     // U+1006: "ဆ" MYANMAR LETTER CHA
+                    // U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA
+                    key("\u1006", moreKey("\u1039\u1006")),
                     // U+1010: "တ" MYANMAR LETTER TA
+                    // U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA
+                    key("\u1010", moreKey("\u1039\u1010")),
                     // U+1014: "န" MYANMAR LETTER NA
+                    // U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA
+                    key("\u1014", moreKey("\u1039\u1014")),
                     // U+1019: "မ" MYANMAR LETTER MA
+                    // U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA
+                    key("\u1019", moreKey("\u1039\u1019")),
                     // U+1021: "အ" MYANMAR LETTER A
                     // U+1015: "ပ" MYANMAR LETTER PA
+                    "\u1021", "\u1015",
                     // U+1000: "က" MYANMAR LETTER KA
+                    // U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA
+                    key("\u1000", moreKey("\u1039\u1000")),
                     // U+1004: "င" MYANMAR LETTER NGA
                     // U+101E: "သ" MYANMAR LETTER SA
+                    "\u1004", "\u101E",
                     // U+1005: "စ" MYANMAR LETTER CA
-                    "\u1006", "\u1010", "\u1014", "\u1019", "\u1021", "\u1015", "\u1000", "\u1004",
-                    "\u101E", "\u1005")
+                    // U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA
+                    key("\u1005", moreKey("\u1039\u1005")))
             .setKeysOfRow(3,
                     // U+1031: "ေ" MYANMAR VOWEL SIGN E
                     // U+103B: "ျ" MYANMAR CONSONANT SIGN MEDIAL YA
@@ -172,7 +184,8 @@
                     // U+1030: "ူ" MYANMAR VOWEL SIGN UU
                     key("\u102F", moreKey("\u1030")),
                     // U+102C: "ာ" MYANMAR VOWEL SIGN AA
-                    "\u102C",
+                    // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA
+                    key("\u102C", moreKey("\u102B")),
                     // U+103A: "်" MYANMAR SIGN ASAT
                     // U+1032: "ဲ" MYANMAR VOWEL SIGN AI
                     key("\u103A", moreKey("\u1032")),
@@ -183,11 +196,19 @@
                     "\u1038")
             .setKeysOfRow(4,
                     // U+1016: "ဖ" MYANMAR LETTER PHA
+                    "\u1016",
                     // U+1011: "ထ" MYANMAR LETTER THA
+                    // U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA
+                    key("\u1011", moreKey("\u1039\u1011")),
                     // U+1001: "ခ" MYANMAR LETTER KHA
+                    // U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA
+                    key("\u1001", moreKey("\u1039\u1001")),
                     // U+101C: "လ" MYANMAR LETTER LA
+                    // U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA
+                    key("\u101C", moreKey("\u1039\u101C")),
                     // U+1018: "ဘ" MYANMAR LETTER BHA
-                    "\u1016", "\u1011", "\u1001", "\u101C", "\u1018",
+                    // U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA
+                    key("\u1018", moreKey("\u1039\u1018")),
                     // U+100A: "ည" MYANMAR LETTER NNYA
                     // U+1009: "ဉ" MYANMAR LETTER NYA
                     key("\u100A", moreKey("\u1009")),
@@ -213,17 +234,28 @@
                     "\u1029", "\u102A", "\u104D", "\u104C")
             .setKeysOfRow(2,
                     // U+1017: "ဗ" MYANMAR LETTER BA
+                    // U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA
+                    key("\u1017", moreKey("\u1039\u1017")),
                     // U+1012: "ဒ" MYANMAR LETTER DA
+                    // U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA
+                    key("\u1012", moreKey("\u1039\u1012")),
                     // U+1013: "ဓ" MYANMAR LETTER DHA
+                    // U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA
+                    key("\u1013", moreKey("\u1039\u1013")),
                     // U+1003: "ဃ" MYANMAR LETTER GHA
                     // U+100E: "ဎ" MYANMAR LETTER DDHA
                     // U+103F: "ဿ" MYANMAR LETTER GREAT SA
                     // U+100F: "ဏ" MYANMAR LETTER NNA
+                    "\u1003", "\u100E", "\u103F", "\u100F",
                     // U+1008: "ဈ" MYANMAR LETTER JHA
+                    // U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA
+                    key("\u1008", moreKey("\u1039\u1008")),
                     // U+1007: "ဇ" MYANMAR LETTER JA
+                    // U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA
+                    key("\u1007", moreKey("\u1039\u1007")),
                     // U+1002: "ဂ" MYANMAR LETTER GA
-                    "\u1017", "\u1012", "\u1013", "\u1003", "\u100E", "\u103F", "\u100F", "\u1008",
-                    "\u1007", "\u1002")
+                    // U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA
+                    key("\u1002", moreKey("\u1039\u1002")))
             .setKeysOfRow(3,
                     // U+101A: "ယ" MYANMAR LETTER YA
                     // U+1039: "္" MYANMAR SIGN VIRAMA
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Tamil.java b/tests/src/com/android/inputmethod/keyboard/layout/Tamil.java
new file mode 100644
index 0000000..70385c7
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Tamil.java
@@ -0,0 +1,150 @@
+/*
+ * 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.keyboard.layout;
+
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.latin.Constants;
+
+import java.util.Locale;
+
+/**
+ * The Tamil keyboard.
+ */
+public final class Tamil extends LayoutBase {
+    private static final String LAYOUT_NAME = "tamil";
+
+    public Tamil(final LayoutCustomizer customizer) {
+        super(customizer, Symbols.class, SymbolsShifted.class);
+    }
+
+    @Override
+    public String getName() { return LAYOUT_NAME; }
+
+    public static class TamilCustomizer extends LayoutCustomizer {
+        public TamilCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKey getAlphabetKey() { return TAMIL_ALPHABET_KEY; }
+
+        @Override
+        public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
+
+        @Override
+        public ExpectedKey[] getOtherCurrencyKeys() {
+            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
+        }
+
+        @Override
+        public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
+            return EMPTY_KEYS;
+        }
+
+        @Override
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
+        }
+
+        // U+0BA4: "த" TAMIL LETTER TA
+        // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I
+        // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
+        private static final ExpectedKey TAMIL_ALPHABET_KEY = key(
+                "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", Constants.CODE_SWITCH_ALPHA_SYMBOL);
+
+        // U+0BF9: "௹" TAMIL RUPEE SIGN
+        private static final ExpectedKey CURRENCY_RUPEE = key("\u0BF9",
+                Symbols.CURRENCY_GENERIC_MORE_KEYS);
+    }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+        return null;
+    }
+
+    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
+            .setKeysOfRow(1,
+                    // U+0B94: "ஔ" TAMIL LETTER AU
+                    key("\u0B94", moreKey("1")),
+                    // U+0B90: "ஐ" TAMIL LETTER AI
+                    key("\u0B90", moreKey("2")),
+                    // U+0B86: "ஆ" TAMIL LETTER AA
+                    key("\u0B86", moreKey("3")),
+                    // U+0B88: "ஈ" TAMIL LETTER II
+                    key("\u0B88", moreKey("4")),
+                    // U+0B8A: "ஊ" TAMIL LETTER UU
+                    key("\u0B8A", moreKey("5")),
+                    // U+0BAE: "ம" TAMIL LETTER MA
+                    key("\u0BAE", moreKey("6")),
+                    // U+0BA9: "ன" TAMIL LETTER NNNA
+                    key("\u0BA9", moreKey("7")),
+                    // U+0BA8: "ந" TAMIL LETTER NA
+                    key("\u0BA8", moreKey("8")),
+                    // U+0B99: "ங" TAMIL LETTER NGA
+                    key("\u0B99", moreKey("9")),
+                    // U+0BA3: "ண" TAMIL LETTER NNA
+                    key("\u0BA3", moreKey("0")),
+                    // U+0B9E: "ஞ" TAMIL LETTER NYA
+                    "\u0B9E")
+            .setKeysOfRow(2,
+                    // U+0B93: "ஓ" TAMIL LETTER OO
+                    // U+0BD0: "ௐ" TAMIL OM
+                    key("\u0B93", moreKey("\u0BD0")),
+                    // U+0B8F: "ஏ" TAMIL LETTER EE
+                    "\u0B8F",
+                    // U+0B85: "அ" TAMIL LETTER A
+                    // U+0B83: "ஃ" TAMIL SIGN VISARGA
+                    key("\u0B85", moreKey("\u0B83")),
+                    // U+0B87: "இ" TAMIL LETTER I
+                    // U+0B89: "உ" TAMIL LETTER U
+                    // U+0BB1: "ற" TAMIL LETTER RRA
+                    // U+0BAA: "ப" TAMIL LETTER PA
+                    "\u0B87", "\u0B89", "\u0BB1", "\u0BAA",
+                    // U+0B95: "க" TAMIL LETTER KA
+                    // U+0BB9: "ஹ" TAMIL LETTER HA
+                    // U+0B95/U+0BCD/U+0BB7:
+                    //     "க்ஷ" TAMIL LETTER KA/TAMIL SIGN VIRAMA/TAMIL LETTER SSA
+                    key("\u0B95", joinMoreKeys("\u0BB9", "\u0B95\u0BCD\u0BB7")),
+                    // U+0BA4: "த" TAMIL LETTER TA
+                    "\u0BA4",
+                    // U+0B9A: "ச" TAMIL LETTER CA
+                    // U+0BB8: "ஸ" TAMIL LETTER SA
+                    // U+0BB6/U+0BCD/U+0BB0/U+0BC0:
+                    //     "ஶ்ரீ" TAMIL LETTER SHA/TAMIL SIGN VIRAMA/TAMIL LETTER RA
+                    //          /TAMIL VOWEL SIGN II
+                    key("\u0B9A", joinMoreKeys("\u0BB8", "\u0BB6\u0BCD\u0BB0\u0BC0")),
+                    // U+0B9F: "ட" TAMIL LETTER TTA
+                    "\u0B9F")
+            .setKeysOfRow(3,
+                    // U+0B92: "ஒ" TAMIL LETTER O
+                    // U+0B8E: "எ" TAMIL LETTER E
+                    // U+0BCD: "்" TAMIL SIGN VIRAMA
+                    // U+0BB0: "ர" TAMIL LETTER RA
+                    // U+0BB5: "வ" TAMIL LETTER VA
+                    // U+0BB4: "ழ TAMIL LETTER LLLA
+                    // U+0BB2: "ல" TAMIL LETTER LA
+                    // U+0BB3: "ள" TAMIL LETTER LLA
+                    // U+0BAF: "ய" TAMIL LETTER YA
+                    "\u0B92", "\u0B8E", "\u0BCD", "\u0BB0", "\u0BB5", "\u0BB4", "\u0BB2", "\u0BB3",
+                    "\u0BAF",
+                    // U+0BB7: "ஷ" TAMIL LETTER SSA
+                    // U+0B9C: "ஜ" TAMIL LETTER JA
+                    key("\u0BB7", moreKey("\u0B9C")))
+            .build();
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java b/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java
new file mode 100644
index 0000000..cc8224c
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java
@@ -0,0 +1,189 @@
+/*
+ * 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.keyboard.layout;
+
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.latin.Constants;
+
+import java.util.Locale;
+
+/**
+ * The Telugu keyboard.
+ */
+public final class Telugu extends LayoutBase {
+    private static final String LAYOUT_NAME = "telugu";
+
+    public Telugu(final LayoutCustomizer customizer) {
+        super(customizer, Symbols.class, SymbolsShifted.class);
+    }
+
+    @Override
+    public String getName() { return LAYOUT_NAME; }
+
+    public static class TeluguCustomizer extends LayoutCustomizer {
+        public TeluguCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKey getAlphabetKey() { return TELUGU_ALPHABET_KEY; }
+
+        @Override
+        public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
+
+        @Override
+        public ExpectedKey[] getOtherCurrencyKeys() {
+            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
+        }
+
+        @Override
+        public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
+            return EMPTY_KEYS;
+        }
+
+        @Override
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
+        }
+
+        @Override
+        public ExpectedKey[] getSpaceKeys(final boolean isPhone) {
+            return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY));
+        }
+
+        // U+0C05: "అ" TELUGU LETTER A
+        // U+0C06: "ఆ" TELUGU LETTER AA
+        // U+0C07: "ఇ" TELUGU LETTER I
+        private static final ExpectedKey TELUGU_ALPHABET_KEY = key(
+                "\u0C05\u0C06\u0C07", Constants.CODE_SWITCH_ALPHA_SYMBOL);
+
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
+                Symbols.CURRENCY_GENERIC_MORE_KEYS);
+    }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+        return null;
+    }
+
+    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
+            .setKeysOfRow(1,
+                    // U+0C4C: "ౌ" TELUGU VOWEL SIGN AU
+                    // U+0C14: "ఔ" TELUGU LETTER AU
+                    key("\u0C4C", joinMoreKeys("\u0C14", "1")),
+                    // U+0C48: "ై" TELUGU VOWEL SIGN AI
+                    // U+0C10: "ఐ" TELUGU LETTER AI
+                    key("\u0C48", joinMoreKeys("\u0C10", "2")),
+                    // U+0C3E: "ా" TELUGU VOWEL SIGN AA
+                    // U+0C06: "ఆ" TELUGU LETTER AA
+                    key("\u0C3E", joinMoreKeys("\u0C06", "3")),
+                    // U+0C40: "ీ" TELUGU VOWEL SIGN II
+                    // U+0C08: "ఈ" TELUGU LETTER II
+                    key("\u0C40", joinMoreKeys("\u0C08", "4")),
+                    // U+0C42: "ూ" TELUGU VOWEL SIGN UU
+                    // U+0C0A: "ఊ" TELUGU LETTER UU
+                    key("\u0C42", joinMoreKeys("\u0C0A", "5")),
+                    // U+0C2C: "బ" TELUGU LETTER BA
+                    // U+0C2D: "భ" TELUGU LETTER BHA
+                    key("\u0C2C", joinMoreKeys("\u0C2D", "6")),
+                    // U+0C39: "హ" TELUGU LETTER HA
+                    // U+0C03: "ః" TELUGU SIGN VISARGA
+                    key("\u0C39", joinMoreKeys("\u0C03", "7")),
+                    // U+0C17: "గ" TELUGU LETTER GA
+                    // U+0C18: "ఘ" TELUGU LETTER GHA
+                    key("\u0C17", joinMoreKeys("\u0C18", "8")),
+                    // U+0C26: "ద" TELUGU LETTER DA
+                    // U+0C27: "ధ" TELUGU LETTER DHA
+                    key("\u0C26", joinMoreKeys("\u0C27", "9")),
+                    // U+0C1C: "జ" TELUGU LETTER JA
+                    // U+0C1D: "ఝ" TELUGU LETTER JHA
+                    key("\u0C1C", joinMoreKeys("\u0C1D", "0")),
+                    // U+0C21: "డ" TELUGU LETTER DDA
+                    // U+0C22: "ఢ" TELUGU LETTER DDHA
+                    key("\u0C21", moreKey("\u0C22")))
+            .setKeysOfRow(2,
+                    // U+0C4B: "ో" TELUGU VOWEL SIGN OO
+                    // U+0C13: "ఓ" TELUGU LETTER OO
+                    key("\u0C4B", moreKey("\u0C13")),
+                    // U+0C47: "ే" TELUGU VOWEL SIGN EE
+                    // U+0C0F: "ఏ" TELUGU LETTER EE
+                    key("\u0C47", moreKey("\u0C0F")),
+                    // U+0C4D: "్" TELUGU SIGN VIRAMA
+                    // U+0C05: "అ" TELUGU LETTER A
+                    key("\u0C4D", moreKey("\u0C05")),
+                    // U+0C3F: "ి" TELUGU VOWEL SIGN I
+                    // U+0C07: "ఇ" TELUGU LETTER I
+                    key("\u0C3F", moreKey("\u0C07")),
+                    // U+0C41: "ు" TELUGU VOWEL SIGN U
+                    // U+0C09: "ఉ" TELUGU LETTER U
+                    key("\u0C41", moreKey("\u0C09")),
+                    // U+0C2A: "ప" TELUGU LETTER PA
+                    // U+0C2B: "ఫ" TELUGU LETTER PHA
+                    key("\u0C2A", moreKey("\u0C2B")),
+                    // U+0C30: "ర" TELUGU LETTER RA
+                    // U+0C31: "ఱ" TELUGU LETTER RRA
+                    // U+0C43: "ృ" TELUGU VOWEL SIGN VOCALIC R
+                    key("\u0C30", joinMoreKeys("\u0C31", "\u0C43")),
+                    // U+0C15: "క" TELUGU LETTER KA
+                    // U+0C16: "ఖ" TELUGU LETTER KHA
+                    key("\u0C15", moreKey("\u0C16")),
+                    // U+0C24: "త" TELUGU LETTER TA
+                    // U+0C25: "థ" TELUGU LETTER THA
+                    key("\u0C24", moreKey("\u0C25")),
+                    // U+0C1A: "చ" TELUGU LETTER CA
+                    // U+0C1B: "ఛ" TELUGU LETTER CHA
+                    key("\u0C1A", moreKey("\u0C1B")),
+                    // U+0C1F: "ట" TELUGU LETTER TTA
+                    // U+0C20: "ఠ" TELUGU LETTER TTHA
+                    key("\u0C1F", moreKey("\u0C20")))
+            .setKeysOfRow(3,
+                    // U+0C46: "ె" TELUGU VOWEL SIGN E
+                    // U+0C12: "ఒ" TELUGU LETTER O
+                    key("\u0C46", moreKey("\u0C12")),
+                    // U+0C02: "ం" TELUGU SIGN ANUSVARA
+                    // U+0C0E: "ఎ" TELUGU LETTER E
+                    key("\u0C02", moreKey("\u0C0E")),
+                    // U+0C2E: "మ" TELUGU LETTER MA
+                    "\u0C2E",
+                    // U+0C28: "న" TELUGU LETTER NA
+                    // U+0C23: "ణ" TELUGU LETTER NNA
+                    // U+0C19: "ఙ" TELUGU LETTER NGA
+                    key("\u0C28", joinMoreKeys("\u0C23", "\u0C19")),
+                    // U+0C35: "వ" TELUGU LETTER VA
+                    "\u0C35",
+                    // U+0C32: "ల" TELUGU LETTER LA
+                    // U+0C33: "ళ" TELUGU LETTER LLA
+                    key("\u0C32", moreKey("\u0C33")),
+                    // U+0C38: "స" TELUGU LETTER SA
+                    // U+0C36: "శ" TELUGU LETTER SHA
+                    key("\u0C38", moreKey("\u0C36")),
+                    // U+0C0B: "ఋ" TELUGU LETTER VOCALIC R
+                    // U+0C4D/U+0C30: "్ర" TELUGU SIGN VIRAMA/TELUGU LETTER RA
+                    key("\u0C0B", moreKey("\u0C4D\u0C30")),
+                    // U+0C37: "ష" TELUGU LETTER SSA
+                    // U+0C15/U+0C4D/U+0C37:
+                    //     "క్ష" TELUGU LETTER KA/TELUGU SIGN VIRAMA/TELUGU LETTER SSA
+                    key("\u0C37", moreKey("\u0C15\u0C4D\u0C37")),
+                    // U+0C2F: "య" TELUGU LETTER YA
+                    // U+0C1C/U+0C4D/U+0C1E:
+                    //     "జ్ఞ" TELUGU LETTER JA/TELUGU SIGN VIRAMA/TELUGU LETTER NYA
+                    key("\u0C2F", moreKey("\u0C1C\u0C4D\u0C1E")))
+            .build();
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsKannadaIN.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsKannadaIN.java
new file mode 100644
index 0000000..d1866e8
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsKannadaIN.java
@@ -0,0 +1,37 @@
+/*
+ * 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.keyboard.layout.tests;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.keyboard.layout.Kannada;
+import com.android.inputmethod.keyboard.layout.Kannada.KannadaCustomizer;
+import com.android.inputmethod.keyboard.layout.LayoutBase;
+
+import java.util.Locale;
+
+/**
+ * kn_IN: Kannada (India)/kannada
+ */
+@SmallTest
+public final class TestsKannadaIN extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("kn", "IN");
+    private static final LayoutBase LAYOUT = new Kannada(new KannadaCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMalayalamIN.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMalayalamIN.java
new file mode 100644
index 0000000..f937de8
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMalayalamIN.java
@@ -0,0 +1,37 @@
+/*
+ * 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.keyboard.layout.tests;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.keyboard.layout.LayoutBase;
+import com.android.inputmethod.keyboard.layout.Malayalam;
+import com.android.inputmethod.keyboard.layout.Malayalam.MalayalamCustomizer;
+
+import java.util.Locale;
+
+/**
+ * ta_IN: Malayalam (India)/malayalam
+ */
+@SmallTest
+public final class TestsMalayalamIN extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("ml", "IN");
+    private static final LayoutBase LAYOUT = new Malayalam(new MalayalamCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTamilIN.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTamilIN.java
new file mode 100644
index 0000000..5b3649d
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTamilIN.java
@@ -0,0 +1,37 @@
+/*
+ * 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.keyboard.layout.tests;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.keyboard.layout.LayoutBase;
+import com.android.inputmethod.keyboard.layout.Tamil;
+import com.android.inputmethod.keyboard.layout.Tamil.TamilCustomizer;
+
+import java.util.Locale;
+
+/**
+ * ta_IN: Tamil (India)/tamil
+ */
+@SmallTest
+public final class TestsTamilIN extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("ta", "IN");
+    private static final LayoutBase LAYOUT = new Tamil(new TamilCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java
new file mode 100644
index 0000000..04996d9
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java
@@ -0,0 +1,37 @@
+/*
+ * 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.keyboard.layout.tests;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.keyboard.layout.LayoutBase;
+import com.android.inputmethod.keyboard.layout.Telugu;
+import com.android.inputmethod.keyboard.layout.Telugu.TeluguCustomizer;
+
+import java.util.Locale;
+
+/**
+ * te_IN: Telugu (India)/telugu
+ */
+@SmallTest
+public final class TestsTeluguIN extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("te", "IN");
+    private static final LayoutBase LAYOUT = new Telugu(new TeluguCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+}
diff --git a/tools/make-keyboard-text/res/values-bn/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-bn-rIN/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-bn/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-bn-rIN/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-kn-rIN/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-kn-rIN/donottranslate-more-keys.xml
new file mode 100644
index 0000000..54b2674
--- /dev/null
+++ b/tools/make-keyboard-text/res/values-kn-rIN/donottranslate-more-keys.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Label for "switch to alphabetic" key.
+         U+0C85: "ಅ" KANNADA LETTER A
+         U+0C86: "ಆ" KANNADA LETTER AA
+         U+0C87: "ಇ" KANNADA LETTER I -->
+    <string name="keylabel_to_alpha">&#x0C85;&#x0C86;&#x0C87;</string>
+    <!-- U+20B9: "₹" INDIAN RUPEE SIGN -->
+    <string name="keyspec_currency">&#x20B9;</string>
+</resources>
diff --git a/tools/make-keyboard-text/res/values-ml-rIN/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-ml-rIN/donottranslate-more-keys.xml
new file mode 100644
index 0000000..7a2aeed
--- /dev/null
+++ b/tools/make-keyboard-text/res/values-ml-rIN/donottranslate-more-keys.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Label for "switch to alphabetic" key.
+         U+0D05: "അ" MALAYALAM LETTER A -->
+    <string name="keylabel_to_alpha">&#x0D05;</string>
+    <!-- U+20B9: "₹" INDIAN RUPEE SIGN -->
+    <string name="keyspec_currency">&#x20B9;</string>
+</resources>
diff --git a/tools/make-keyboard-text/res/values-ta-rIN/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-ta-rIN/donottranslate-more-keys.xml
new file mode 100644
index 0000000..547c8e1
--- /dev/null
+++ b/tools/make-keyboard-text/res/values-ta-rIN/donottranslate-more-keys.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Label for "switch to alphabetic" key.
+         U+0BA4: "த" TAMIL LETTER TA
+         U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I
+         U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA -->
+    <string name="keylabel_to_alpha">&#x0BA4;&#x0BAE;&#x0BBF;&#x0BB4;&#x0BCD;</string>
+    <!-- U+0BF9: "௹" TAMIL RUPEE SIGN -->
+    <string name="keyspec_currency">&#x0BF9;</string>
+</resources>
diff --git a/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml
new file mode 100644
index 0000000..6518dea
--- /dev/null
+++ b/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Label for "switch to alphabetic" key.
+         U+0C05: "అ" TELUGU LETTER A
+         U+0C06: "ఆ" TELUGU LETTER AA
+         U+0C07: "ఇ" TELUGU LETTER I -->
+    <string name="keylabel_to_alpha">&#x0C05;&#x0C06;&#x0C07;</string>
+    <!-- U+20B9: "₹" INDIAN RUPEE SIGN -->
+    <string name="keyspec_currency">&#x20B9;</string>
+</resources>