Merge "Add suppress ime swicher notification"
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
index 2dc1bed..5e6a9d6 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index 575781f..eb9d740 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 6c5b42e..869a330 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
index 8c999f6..1195a42 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index 8c7c2f3..0a9d4b4 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index 02497b4..fac757a 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
index a13b200..baff858 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
index 0b76855..f0ebdaf 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
index 0b27589..046bac6 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/hint_popup.9.png b/java/res/drawable-hdpi/hint_popup.9.png
deleted file mode 100644
index 5b2ad53..0000000
--- a/java/res/drawable-hdpi/hint_popup.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/hint_popup_holo.9.png b/java/res/drawable-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index c44af88..0000000
--- a/java/res/drawable-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
index fd7a56e..e994560 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
index 60d9203..0891b91 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
index f694b79..28975d1 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
index 3165d08..462072c 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
index 3136073..72c474c 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
index 13d5af9..8035afd 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png b/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png
index f250034..85b6360 100644
--- a/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png
+++ b/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num0.png b/java/res/drawable-hdpi/sym_bkeyboard_num0.png
deleted file mode 100644
index 02f2811..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num1.png b/java/res/drawable-hdpi/sym_bkeyboard_num1.png
deleted file mode 100644
index 304acfd..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num2.png b/java/res/drawable-hdpi/sym_bkeyboard_num2.png
deleted file mode 100644
index 295eba1..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num3.png b/java/res/drawable-hdpi/sym_bkeyboard_num3.png
deleted file mode 100644
index 9ee6e44..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num4.png b/java/res/drawable-hdpi/sym_bkeyboard_num4.png
deleted file mode 100644
index ab4392d..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num5.png b/java/res/drawable-hdpi/sym_bkeyboard_num5.png
deleted file mode 100644
index 004ecd7..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num6.png b/java/res/drawable-hdpi/sym_bkeyboard_num6.png
deleted file mode 100644
index 2aa317d..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num7.png b/java/res/drawable-hdpi/sym_bkeyboard_num7.png
deleted file mode 100644
index 721361c..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num8.png b/java/res/drawable-hdpi/sym_bkeyboard_num8.png
deleted file mode 100644
index 941359f..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num9.png b/java/res/drawable-hdpi/sym_bkeyboard_num9.png
deleted file mode 100644
index 74e08a0..0000000
--- a/java/res/drawable-hdpi/sym_bkeyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_123_mic_holo.png b/java/res/drawable-hdpi/sym_keyboard_123_mic_holo.png
new file mode 100644
index 0000000..3b32171
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_123_mic_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_holo.png b/java/res/drawable-hdpi/sym_keyboard_delete_holo.png
index 9d87ba6..11ed0b3 100644
--- a/java/res/drawable-hdpi/sym_keyboard_delete_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
deleted file mode 100644
index e56799c..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
deleted file mode 100644
index 960bb4e..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index 5d1cb78..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 3a56d47..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
deleted file mode 100644
index 7d418d9..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_return.png b/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
deleted file mode 100644
index f73ff3c..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_search.png b/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
deleted file mode 100644
index 0e69157..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
deleted file mode 100644
index fc858f2..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 79f235f..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index e1444e8..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num0.png b/java/res/drawable-hdpi/sym_keyboard_num0.png
deleted file mode 100644
index 2024f41..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num0_holo.png b/java/res/drawable-hdpi/sym_keyboard_num0_holo.png
deleted file mode 100644
index fbd55d6..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num0_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num1.png b/java/res/drawable-hdpi/sym_keyboard_num1.png
deleted file mode 100644
index 5e66b9a..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num1_holo.png b/java/res/drawable-hdpi/sym_keyboard_num1_holo.png
deleted file mode 100644
index e651c3e..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num1_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num2.png b/java/res/drawable-hdpi/sym_keyboard_num2.png
deleted file mode 100644
index 3933270..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num2_holo.png b/java/res/drawable-hdpi/sym_keyboard_num2_holo.png
deleted file mode 100644
index 8458f53..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num2_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num3.png b/java/res/drawable-hdpi/sym_keyboard_num3.png
deleted file mode 100644
index c695483..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num3_holo.png b/java/res/drawable-hdpi/sym_keyboard_num3_holo.png
deleted file mode 100644
index 81025c6..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num3_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num4.png b/java/res/drawable-hdpi/sym_keyboard_num4.png
deleted file mode 100644
index ef20add..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num4_holo.png b/java/res/drawable-hdpi/sym_keyboard_num4_holo.png
deleted file mode 100644
index 30a0c77..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num4_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num5.png b/java/res/drawable-hdpi/sym_keyboard_num5.png
deleted file mode 100644
index 9a2f51f..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num5_holo.png b/java/res/drawable-hdpi/sym_keyboard_num5_holo.png
deleted file mode 100644
index 147f056..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num5_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num6.png b/java/res/drawable-hdpi/sym_keyboard_num6.png
deleted file mode 100644
index 6829f81..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num6_holo.png b/java/res/drawable-hdpi/sym_keyboard_num6_holo.png
deleted file mode 100644
index b968308..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num6_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num7.png b/java/res/drawable-hdpi/sym_keyboard_num7.png
deleted file mode 100644
index dc608d4..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num7_holo.png b/java/res/drawable-hdpi/sym_keyboard_num7_holo.png
deleted file mode 100644
index 7d44bfb..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num7_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num8.png b/java/res/drawable-hdpi/sym_keyboard_num8.png
deleted file mode 100644
index f0978c6..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num8_holo.png b/java/res/drawable-hdpi/sym_keyboard_num8_holo.png
deleted file mode 100644
index 093cd74..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num8_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num9.png b/java/res/drawable-hdpi/sym_keyboard_num9.png
deleted file mode 100644
index 4b8328d..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num9_holo.png b/java/res/drawable-hdpi/sym_keyboard_num9_holo.png
deleted file mode 100644
index f35e80d..0000000
--- a/java/res/drawable-hdpi/sym_keyboard_num9_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return_holo.png b/java/res/drawable-hdpi/sym_keyboard_return_holo.png
index ef04d67..0906082 100644
--- a/java/res/drawable-hdpi/sym_keyboard_return_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_search_holo.png b/java/res/drawable-hdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..86b9252
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
index 29085e5..c08b2b7 100644
--- a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
index 1e074a7..faf6b29 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
index ab77b95..f2b9fce 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_holo.png b/java/res/drawable-hdpi/sym_keyboard_space_holo.png
index 143a899..908f1ed 100644
--- a/java/res/drawable-hdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_tab_holo.png b/java/res/drawable-hdpi/sym_keyboard_tab_holo.png
index 321c541..7215743 100644
--- a/java/res/drawable-hdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_holo.png b/java/res/drawable-hdpi/sym_keyboard_voice_holo.png
index d3cb46e..d5414c8 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png
index 45e3e79..6fb538c 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png
deleted file mode 100644
index 603bf0e..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png
deleted file mode 100644
index 6ddd516..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off_stone.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off_stone.9.png
deleted file mode 100644
index 67a204f..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off_stone.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png
deleted file mode 100644
index 65fdeb3..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on_stone.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on_stone.9.png
deleted file mode 100644
index 63cbe60..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on_stone.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_stone.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_stone.9.png
deleted file mode 100644
index 0dd33b4..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_normal_stone.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png
deleted file mode 100644
index 7ec915f..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png
deleted file mode 100644
index 4392717..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png
deleted file mode 100644
index c2cc320..0000000
--- a/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-hdpi/hint_popup_holo.9.png b/java/res/drawable-land-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index 2b93014..0000000
--- a/java/res/drawable-land-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-mdpi/hint_popup_holo.9.png b/java/res/drawable-land-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index c409cea..0000000
--- a/java/res/drawable-land-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land-xhdpi/hint_popup_holo.9.png b/java/res/drawable-land-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index 3cd20d3..0000000
--- a/java/res/drawable-land-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-land/btn_keyboard_key.xml b/java/res/drawable-land/btn_keyboard_key.xml
deleted file mode 100644
index 45578e5..0000000
--- a/java/res/drawable-land/btn_keyboard_key.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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">
-
-    <!-- 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" />
-    <item android:state_checkable="true" android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_pressed_off" />
-    <item android:state_checkable="true" android:state_checked="true"
-          android:drawable="@drawable/btn_keyboard_key_normal_on" />
-    <item android:state_checkable="true"
-          android:drawable="@drawable/btn_keyboard_key_normal_off" />
-
-    <!-- Normal keys -->
-
-    <item android:state_pressed="true"
-          android:drawable="@drawable/btn_keyboard_key_pressed" />
-    <item
-          android:drawable="@drawable/btn_keyboard_key_normal" />
-          
-</selector>
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
index 034d638..d449d76 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index 0cb53d5..80fe863 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 0050a01..196d6d9 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
index 27f8fda..ab0b3be 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index b8ce952..b0969a8 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index 4d4d1a7..cb49f18 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
index 90f471f..976083f 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
index c850768..1de7abb 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
index e9186b7..d66309d 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/hint_popup.9.png b/java/res/drawable-mdpi/hint_popup.9.png
deleted file mode 100644
index 444cc26..0000000
--- a/java/res/drawable-mdpi/hint_popup.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/hint_popup_holo.9.png b/java/res/drawable-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index e9e131c..0000000
--- a/java/res/drawable-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
index 9a1b7aa..f3be5fd 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
index cb222b0..51eb7ed 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
index 07d9800..de32364 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
index 05a332b..1d893a5 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
index fd16755..900e4ba 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
index 1acbd82..78cb488 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png b/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png
index 17faf86..e488323 100644
--- a/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num0.png b/java/res/drawable-mdpi/sym_bkeyboard_num0.png
deleted file mode 100644
index 7188f9c..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num1.png b/java/res/drawable-mdpi/sym_bkeyboard_num1.png
deleted file mode 100644
index 2a31bd4..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num2.png b/java/res/drawable-mdpi/sym_bkeyboard_num2.png
deleted file mode 100644
index c1e9cc9..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num3.png b/java/res/drawable-mdpi/sym_bkeyboard_num3.png
deleted file mode 100644
index e998766..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num4.png b/java/res/drawable-mdpi/sym_bkeyboard_num4.png
deleted file mode 100644
index 7f0f3cc..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num5.png b/java/res/drawable-mdpi/sym_bkeyboard_num5.png
deleted file mode 100644
index 5f748b4..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num6.png b/java/res/drawable-mdpi/sym_bkeyboard_num6.png
deleted file mode 100644
index 78aae74..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num7.png b/java/res/drawable-mdpi/sym_bkeyboard_num7.png
deleted file mode 100644
index 5bb874c..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num8.png b/java/res/drawable-mdpi/sym_bkeyboard_num8.png
deleted file mode 100644
index 6b58fdc..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_num9.png b/java/res/drawable-mdpi/sym_bkeyboard_num9.png
deleted file mode 100644
index f348c92..0000000
--- a/java/res/drawable-mdpi/sym_bkeyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_123_mic_holo.png b/java/res/drawable-mdpi/sym_keyboard_123_mic_holo.png
new file mode 100644
index 0000000..546cce2
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_123_mic_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_holo.png b/java/res/drawable-mdpi/sym_keyboard_delete_holo.png
index f8f6e6a..bc3393f 100644
--- a/java/res/drawable-mdpi/sym_keyboard_delete_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
deleted file mode 100644
index c556c35..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
deleted file mode 100644
index a79f158..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index eecb026..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 7e10ae3..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
deleted file mode 100644
index bc8f1cf..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_return.png b/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
deleted file mode 100644
index dd99ff3..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_search.png b/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
deleted file mode 100644
index 6b8e01d..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
deleted file mode 100644
index d563575..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 7067a8b..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index f7a133d..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num0.png b/java/res/drawable-mdpi/sym_keyboard_num0.png
deleted file mode 100644
index e7007c8..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num0_holo.png b/java/res/drawable-mdpi/sym_keyboard_num0_holo.png
deleted file mode 100644
index 2c57adf..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num0_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num1.png b/java/res/drawable-mdpi/sym_keyboard_num1.png
deleted file mode 100644
index aaac11b..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num1_holo.png b/java/res/drawable-mdpi/sym_keyboard_num1_holo.png
deleted file mode 100644
index 509e28f..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num1_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num2.png b/java/res/drawable-mdpi/sym_keyboard_num2.png
deleted file mode 100644
index 4372eb8..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num2_holo.png b/java/res/drawable-mdpi/sym_keyboard_num2_holo.png
deleted file mode 100644
index 0da18e7..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num2_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num3.png b/java/res/drawable-mdpi/sym_keyboard_num3.png
deleted file mode 100644
index 6f54c85..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num3_holo.png b/java/res/drawable-mdpi/sym_keyboard_num3_holo.png
deleted file mode 100644
index e847058..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num3_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num4.png b/java/res/drawable-mdpi/sym_keyboard_num4.png
deleted file mode 100644
index 3e50bb9..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num4_holo.png b/java/res/drawable-mdpi/sym_keyboard_num4_holo.png
deleted file mode 100644
index 13c216d..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num4_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num5.png b/java/res/drawable-mdpi/sym_keyboard_num5.png
deleted file mode 100644
index c39ef44..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num5_holo.png b/java/res/drawable-mdpi/sym_keyboard_num5_holo.png
deleted file mode 100644
index 0065153..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num5_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num6.png b/java/res/drawable-mdpi/sym_keyboard_num6.png
deleted file mode 100644
index ea88ceb..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num6_holo.png b/java/res/drawable-mdpi/sym_keyboard_num6_holo.png
deleted file mode 100644
index 09fab76..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num6_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num7.png b/java/res/drawable-mdpi/sym_keyboard_num7.png
deleted file mode 100644
index ce800ba..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num7_holo.png b/java/res/drawable-mdpi/sym_keyboard_num7_holo.png
deleted file mode 100644
index d350fdd..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num7_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num8.png b/java/res/drawable-mdpi/sym_keyboard_num8.png
deleted file mode 100644
index 1a8ff94..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num8_holo.png b/java/res/drawable-mdpi/sym_keyboard_num8_holo.png
deleted file mode 100644
index c40cb89..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num8_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num9.png b/java/res/drawable-mdpi/sym_keyboard_num9.png
deleted file mode 100644
index 8b344c0..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num9_holo.png b/java/res/drawable-mdpi/sym_keyboard_num9_holo.png
deleted file mode 100644
index 7352693..0000000
--- a/java/res/drawable-mdpi/sym_keyboard_num9_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return_holo.png b/java/res/drawable-mdpi/sym_keyboard_return_holo.png
index abbce52..c0a16df 100644
--- a/java/res/drawable-mdpi/sym_keyboard_return_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_search_holo.png b/java/res/drawable-mdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..423dff7
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
index 82df903..7ac90d0 100644
--- a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
index 49b9fc0..13298ad 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
index 5375beb..594ebfe 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-mdpi/sym_keyboard_space_holo.png
index e413ddf..27e3d21 100644
--- a/java/res/drawable-mdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_tab_holo.png b/java/res/drawable-mdpi/sym_keyboard_tab_holo.png
index c41af7b..e424321 100644
--- a/java/res/drawable-mdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_holo.png b/java/res/drawable-mdpi/sym_keyboard_voice_holo.png
index 158439a..dc5a9dd 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png
index 79026f1..527e832 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw600dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index 544ed7f..0000000
--- a/java/res/drawable-sw600dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index 2ffc6ea..0000000
--- a/java/res/drawable-sw600dp-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_delete_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..223fcfb
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_numsymbol_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_numsymbol_holo.png
deleted file mode 100644
index 398eaea..0000000
--- a/java/res/drawable-sw600dp-hdpi/sym_keyboard_numsymbol_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png
new file mode 100644
index 0000000..c9d3d74
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_search_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..5ed614a
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_settings_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_settings_holo.png
new file mode 100644
index 0000000..00168b2
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_holo.png
new file mode 100644
index 0000000..980547e
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_locked_holo.png
new file mode 100644
index 0000000..868eec3
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_smiley_holo.png
new file mode 100644
index 0000000..27d2b7d
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_smiley_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_space_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_space_holo.png
new file mode 100644
index 0000000..d89bdda
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_tab_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_tab_holo.png
index 1780f68..e11d854 100644
--- a/java/res/drawable-sw600dp-hdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_holo.png
new file mode 100644
index 0000000..0eb4aa2
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_off_holo.png
new file mode 100644
index 0000000..b53456a
--- /dev/null
+++ b/java/res/drawable-sw600dp-hdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-land-hdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-land-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index 2ffc6ea..0000000
--- a/java/res/drawable-sw600dp-land-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-land-mdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-land-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index f5d15b7..0000000
--- a/java/res/drawable-sw600dp-land-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-land-xhdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-land-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index bc37fa8..0000000
--- a/java/res/drawable-sw600dp-land-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index 2ad7304..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
deleted file mode 100644
index fc21e79..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
deleted file mode 100644
index 76cfbb2..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
deleted file mode 100644
index 73748c2..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
deleted file mode 100644
index 059d4ac..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
deleted file mode 100644
index e5cfdec..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_normal_holo.9.png
deleted file mode 100644
index 060524a..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png
deleted file mode 100644
index f4b061e..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index ffa7386..0000000
--- a/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index f5d15b7..0000000
--- a/java/res/drawable-sw600dp-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png b/java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png
deleted file mode 100644
index a93966c..0000000
--- a/java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/keyboard_popup_panel_background_holo.9.png b/java/res/drawable-sw600dp-mdpi/keyboard_popup_panel_background_holo.9.png
deleted file mode 100644
index 7be7ab7..0000000
--- a/java/res/drawable-sw600dp-mdpi/keyboard_popup_panel_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png b/java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png
deleted file mode 100644
index 1f87a68..0000000
--- a/java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_delete_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_delete_holo.png
index 1555791..66111ee 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_delete_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num0_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num0_holo.png
deleted file mode 100644
index e1d395b..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num0_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num1_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num1_holo.png
deleted file mode 100644
index 225436a..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num1_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num2_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num2_holo.png
deleted file mode 100644
index e513fa4..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num2_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num3_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num3_holo.png
deleted file mode 100644
index b91e005..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num3_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num4_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num4_holo.png
deleted file mode 100644
index 65f8824..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num4_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num5_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num5_holo.png
deleted file mode 100644
index b89ef07..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num5_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num6_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num6_holo.png
deleted file mode 100644
index 931275a..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num6_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num7_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num7_holo.png
deleted file mode 100644
index 9396c4c..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num7_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num8_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num8_holo.png
deleted file mode 100644
index 12e3eef..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num8_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num9_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num9_holo.png
deleted file mode 100644
index 6911c2b..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_num9_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbpound_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbpound_holo.png
deleted file mode 100644
index e3a8b49..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbpound_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbstar_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbstar_holo.png
deleted file mode 100644
index e80e934..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbstar_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png
deleted file mode 100644
index 7315384..0000000
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png
index d519cce..5420161 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_search_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..1821337
--- /dev/null
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_settings_holo.png
index 784a450..3c81666 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_holo.png
index 91d6e32..6e3d718 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_locked_holo.png
index 2bd0536..ea2f0e9 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_smiley_holo.png
new file mode 100644
index 0000000..9c08b5a
--- /dev/null
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_smiley_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png
index 25e655d..dac90bb 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_tab_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_tab_holo.png
index 5acd12c..79f3735 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_holo.png
index c1116dc..b1678f0 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_off_holo.png
index 081a130..58142fa 100644
--- a/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_off_holo.png
+++ b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw600dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index 8b5d1b0..0000000
--- a/java/res/drawable-sw600dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/hint_popup_holo.9.png b/java/res/drawable-sw600dp-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index bc37fa8..0000000
--- a/java/res/drawable-sw600dp-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_delete_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 0000000..df64bbe
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_numsymbol_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_numsymbol_holo.png
deleted file mode 100644
index c7a8b28..0000000
--- a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_numsymbol_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png
new file mode 100644
index 0000000..13f78c4
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_search_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..7e0f1ae
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_settings_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_settings_holo.png
new file mode 100644
index 0000000..8c1395e
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_holo.png
new file mode 100644
index 0000000..a4068ea
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_locked_holo.png
new file mode 100644
index 0000000..4cb37cd
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_smiley_holo.png
new file mode 100644
index 0000000..481d889
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_smiley_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_space_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_space_holo.png
new file mode 100644
index 0000000..4bfbf66
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_tab_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_tab_holo.png
index fd9f8cc..1ea57c5 100644
--- a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_holo.png
new file mode 100644
index 0000000..597be7d
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_off_holo.png
new file mode 100644
index 0000000..58fd48b
--- /dev/null
+++ b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable-sw768dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw768dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index 544ed7f..0000000
--- a/java/res/drawable-sw768dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-hdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index 2ffc6ea..0000000
--- a/java/res/drawable-sw768dp-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-land-hdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-land-hdpi/hint_popup_holo.9.png
deleted file mode 100644
index 2b93014..0000000
--- a/java/res/drawable-sw768dp-land-hdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index c409cea..0000000
--- a/java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-land-xhdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-land-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index 3cd20d3..0000000
--- a/java/res/drawable-sw768dp-land-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png
deleted file mode 100644
index 2ad7304..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
deleted file mode 100644
index fc21e79..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
deleted file mode 100644
index 76cfbb2..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
deleted file mode 100644
index 73748c2..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
deleted file mode 100644
index 059d4ac..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
deleted file mode 100644
index e5cfdec..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_normal_holo.9.png
deleted file mode 100644
index 060524a..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_normal_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png
deleted file mode 100644
index f4b061e..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index ffa7386..0000000
--- a/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png
deleted file mode 100644
index 01d1139..0000000
--- a/java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png b/java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png
deleted file mode 100644
index a93966c..0000000
--- a/java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/keyboard_popup_panel_background_holo.9.png b/java/res/drawable-sw768dp-mdpi/keyboard_popup_panel_background_holo.9.png
deleted file mode 100644
index 7be7ab7..0000000
--- a/java/res/drawable-sw768dp-mdpi/keyboard_popup_panel_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png b/java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png
deleted file mode 100644
index 1f87a68..0000000
--- a/java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_delete_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_delete_holo.png
deleted file mode 100644
index 1555791..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_delete_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num0_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num0_holo.png
deleted file mode 100644
index e1d395b..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num0_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num1_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num1_holo.png
deleted file mode 100644
index 225436a..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num1_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num2_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num2_holo.png
deleted file mode 100644
index e513fa4..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num2_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num3_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num3_holo.png
deleted file mode 100644
index b91e005..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num3_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num4_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num4_holo.png
deleted file mode 100644
index 65f8824..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num4_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num5_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num5_holo.png
deleted file mode 100644
index b89ef07..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num5_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num6_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num6_holo.png
deleted file mode 100644
index 931275a..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num6_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num7_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num7_holo.png
deleted file mode 100644
index 9396c4c..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num7_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num8_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num8_holo.png
deleted file mode 100644
index 12e3eef..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num8_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num9_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num9_holo.png
deleted file mode 100644
index 6911c2b..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_num9_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbpound_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbpound_holo.png
deleted file mode 100644
index e3a8b49..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbpound_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbstar_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbstar_holo.png
deleted file mode 100644
index e80e934..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbstar_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_return_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_return_holo.png
deleted file mode 100644
index d519cce..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_return_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_settings_holo.png
deleted file mode 100644
index 784a450..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_settings_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_holo.png
deleted file mode 100644
index 91d6e32..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_locked_holo.png
deleted file mode 100644
index 2bd0536..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_locked_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png
deleted file mode 100644
index 25e655d..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_holo.png
deleted file mode 100644
index c1116dc..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_off_holo.png
deleted file mode 100644
index 081a130..0000000
--- a/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-sw768dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
deleted file mode 100644
index 8b5d1b0..0000000
--- a/java/res/drawable-sw768dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-sw768dp-xhdpi/hint_popup_holo.9.png b/java/res/drawable-sw768dp-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index bc37fa8..0000000
--- a/java/res/drawable-sw768dp-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
index b9667be..d2cd029 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
index 1719992..0f709eb 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
index 0eb9c9f..2f4de8e 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png
index 5114bf5..aefb21b 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
index 9923950..b49ba10 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
index 474951c..e9c7387 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png
index 4a255f7..b26f1d2 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png
index 5bcd1c9..b6ab815 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
index 10d788d..cbcabe1 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/hint_popup.9.png b/java/res/drawable-xhdpi/hint_popup.9.png
deleted file mode 100644
index add4743..0000000
--- a/java/res/drawable-xhdpi/hint_popup.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/hint_popup_holo.9.png b/java/res/drawable-xhdpi/hint_popup_holo.9.png
deleted file mode 100644
index a2b114e..0000000
--- a/java/res/drawable-xhdpi/hint_popup_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
index 44675ba..0e4056f 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
index cfd1f52..353deed 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
index a01c173..0c9a35e 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
index 1d2abc2..4ff7029 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
index 5616d19..58e2922 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
index ecf9c2c..06c33c0 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png b/java/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png
index f4ff7dc..b40f766 100644
--- a/java/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png
+++ b/java/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num0.png b/java/res/drawable-xhdpi/sym_bkeyboard_num0.png
deleted file mode 100644
index da8d50a..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num1.png b/java/res/drawable-xhdpi/sym_bkeyboard_num1.png
deleted file mode 100644
index 62443eb..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num2.png b/java/res/drawable-xhdpi/sym_bkeyboard_num2.png
deleted file mode 100644
index 4b3ef7e..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num3.png b/java/res/drawable-xhdpi/sym_bkeyboard_num3.png
deleted file mode 100644
index 48315e4..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num4.png b/java/res/drawable-xhdpi/sym_bkeyboard_num4.png
deleted file mode 100644
index 17958d7..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num5.png b/java/res/drawable-xhdpi/sym_bkeyboard_num5.png
deleted file mode 100644
index 43716c4..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num6.png b/java/res/drawable-xhdpi/sym_bkeyboard_num6.png
deleted file mode 100644
index 09f2b42..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num7.png b/java/res/drawable-xhdpi/sym_bkeyboard_num7.png
deleted file mode 100644
index 72438ec..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num8.png b/java/res/drawable-xhdpi/sym_bkeyboard_num8.png
deleted file mode 100644
index 403b53f..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num9.png b/java/res/drawable-xhdpi/sym_bkeyboard_num9.png
deleted file mode 100644
index 644c2a4..0000000
--- a/java/res/drawable-xhdpi/sym_bkeyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_123_mic_holo.png b/java/res/drawable-xhdpi/sym_keyboard_123_mic_holo.png
new file mode 100644
index 0000000..9306903
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_123_mic_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png b/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png
index 5150073..53479ab 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_123_mic.png
deleted file mode 100644
index 5238c16..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_123_mic.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png
deleted file mode 100644
index f0c29e7..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index a90b8da..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 1123bf3..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png
deleted file mode 100644
index b68e606..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png
deleted file mode 100644
index c777d00..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png
deleted file mode 100644
index 32e0789..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png
deleted file mode 100644
index d8c0325..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 226f2e6..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index 1e02e7e..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num0.png b/java/res/drawable-xhdpi/sym_keyboard_num0.png
deleted file mode 100644
index 06bd3bf..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num0.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png
deleted file mode 100644
index 33e80bd..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num1.png b/java/res/drawable-xhdpi/sym_keyboard_num1.png
deleted file mode 100644
index dfa0cfe..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num1.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png
deleted file mode 100644
index dce3ee8..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num2.png b/java/res/drawable-xhdpi/sym_keyboard_num2.png
deleted file mode 100644
index 4bd2ead..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num2.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png
deleted file mode 100644
index e776efb..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num3.png b/java/res/drawable-xhdpi/sym_keyboard_num3.png
deleted file mode 100644
index 39db112..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num3.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png
deleted file mode 100644
index 66e7b37..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num4.png b/java/res/drawable-xhdpi/sym_keyboard_num4.png
deleted file mode 100644
index 6035694..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num4.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png
deleted file mode 100644
index bf70e28..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num5.png b/java/res/drawable-xhdpi/sym_keyboard_num5.png
deleted file mode 100644
index 3238b3f..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num5.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png
deleted file mode 100644
index 98d0b5c..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num6.png b/java/res/drawable-xhdpi/sym_keyboard_num6.png
deleted file mode 100644
index c8da5a9..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num6.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png
deleted file mode 100644
index 67340ef..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num7.png b/java/res/drawable-xhdpi/sym_keyboard_num7.png
deleted file mode 100644
index 553cf5f..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num7.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png
deleted file mode 100644
index 8432249..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num8.png b/java/res/drawable-xhdpi/sym_keyboard_num8.png
deleted file mode 100644
index eaaf533..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num8.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png
deleted file mode 100644
index 6d520bc..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num9.png b/java/res/drawable-xhdpi/sym_keyboard_num9.png
deleted file mode 100644
index b510d37..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png
deleted file mode 100644
index 158c879..0000000
--- a/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return_holo.png b/java/res/drawable-xhdpi/sym_keyboard_return_holo.png
index 6e2e1c0..6b0021d 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_return_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_return_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_search_holo.png b/java/res/drawable-xhdpi/sym_keyboard_search_holo.png
new file mode 100644
index 0000000..118f4f9
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_search_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
index 018e45d..16a8aea 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
index 41d4ca1..8195112 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
index b811b74..ab4d61b 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_holo.png b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
index da89264..2a11eaa 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png b/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png
index dd207ca..1666434 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png b/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png
index d73e499..fc05b9c 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_off_holo.png b/java/res/drawable-xhdpi/sym_keyboard_voice_off_holo.png
index 8d34a5a..6a5b121 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_off_holo.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_off_holo.png
Binary files differ
diff --git a/java/res/drawable/keyboard_key_feedback_left_ics.xml b/java/res/drawable/keyboard_key_feedback_left_ics.xml
new file mode 100644
index 0000000..b68b37f
--- /dev/null
+++ b/java/res/drawable/keyboard_key_feedback_left_ics.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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_long_pressable="true"
+            android:drawable="@drawable/keyboard_key_feedback_left_more_background_holo" />
+    <item android:drawable="@drawable/keyboard_key_feedback_left_background_holo" />
+</selector>
diff --git a/java/res/drawable/keyboard_key_feedback_right_ics.xml b/java/res/drawable/keyboard_key_feedback_right_ics.xml
new file mode 100644
index 0000000..830678a
--- /dev/null
+++ b/java/res/drawable/keyboard_key_feedback_right_ics.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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_long_pressable="true"
+            android:drawable="@drawable/keyboard_key_feedback_right_more_background_holo" />
+    <item android:drawable="@drawable/keyboard_key_feedback_right_background_holo" />
+</selector>
diff --git a/java/res/layout/candidate_divider.xml b/java/res/layout/candidate_divider.xml
index 1d75e52..7481630 100644
--- a/java/res/layout/candidate_divider.xml
+++ b/java/res/layout/candidate_divider.xml
@@ -23,8 +23,7 @@
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:src="@drawable/keyboard_suggest_strip_divider"
-    android:paddingRight="@dimen/candidate_padding"
-    android:paddingLeft="@dimen/candidate_padding"
+    android:padding="0dp"
     android:focusable="false"
     android:clickable="false"
     android:gravity="center_vertical|center_horizontal" />
diff --git a/java/res/layout/candidate_word.xml b/java/res/layout/candidate_word.xml
index 3d2ad06..7b6db2f 100644
--- a/java/res/layout/candidate_word.xml
+++ b/java/res/layout/candidate_word.xml
@@ -20,9 +20,14 @@
 
 <Button
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
     android:minWidth="@dimen/candidate_min_width"
     android:textSize="@dimen/candidate_text_size"
-    android:padding="0dp"
+    android:paddingLeft="@dimen/candidate_padding"
+    android:paddingTop="0dp"
+    android:paddingRight="@dimen/candidate_padding"
+    android:paddingBottom="0dp"
+    android:singleLine="true"
+    android:ellipsize="none"
     style="?attr/suggestionBackgroundStyle" />
diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/candidates_strip.xml
index bb11e05..ea6708e 100644
--- a/java/res/layout/candidates_strip.xml
+++ b/java/res/layout/candidates_strip.xml
@@ -22,42 +22,11 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
-    <RelativeLayout
-        android:layout_weight="1.0"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:gravity="center"
-    >
-        <include
-            android:id="@+id/word_left"
-            layout="@layout/candidate_word" />
-        <include
-            android:id="@+id/info_left"
-            layout="@layout/candidate_info" />
-    </RelativeLayout>
-    <include
-        layout="@layout/candidate_divider" />
-    <RelativeLayout
-        android:layout_weight="1.0"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:gravity="center"
-    >
-        <include
-            android:id="@+id/word_center"
-            layout="@layout/candidate_word" />
-        <include
-            android:id="@+id/info_center"
-            layout="@layout/candidate_info" />
-    </RelativeLayout>
-    <include
-        layout="@layout/candidate_divider" />
     <LinearLayout
+        android:id="@+id/candidates_strip"
         android:orientation="horizontal"
-        android:layout_weight="1.0"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:gravity="center_vertical"
     >
         <RelativeLayout
             android:layout_weight="1.0"
@@ -66,24 +35,90 @@
             android:gravity="center"
         >
             <include
-                android:id="@+id/word_right"
+                android:id="@+id/word_left"
                 layout="@layout/candidate_word" />
             <include
-                android:id="@+id/info_right"
+                android:id="@+id/info_left"
                 layout="@layout/candidate_info" />
         </RelativeLayout>
-        <!-- Image drawables are set in CandidateView constructor -->
-        <ImageButton
-            android:id="@+id/expand_candidates_pane"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="gone"
-            style="?attr/suggestionsStripBackgroundStyle" />
-        <ImageButton
-            android:id="@+id/close_candidates_pane"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="gone"
-            style="?attr/suggestionsStripBackgroundStyle" />
+        <include
+            layout="@layout/candidate_divider" />
+        <RelativeLayout
+            android:layout_weight="1.0"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:gravity="center"
+        >
+            <include
+                android:id="@+id/word_center"
+                layout="@layout/candidate_word" />
+            <include
+                android:id="@+id/info_center"
+                layout="@layout/candidate_info" />
+        </RelativeLayout>
+        <include
+            layout="@layout/candidate_divider" />
+        <LinearLayout
+            android:orientation="horizontal"
+            android:layout_weight="1.0"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:gravity="center_vertical"
+        >
+            <RelativeLayout
+                android:layout_weight="1.0"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:gravity="center"
+            >
+                <include
+                    android:id="@+id/word_right"
+                    layout="@layout/candidate_word" />
+                <include
+                    android:id="@+id/info_right"
+                    layout="@layout/candidate_info" />
+            </RelativeLayout>
+            <!-- Image drawables are set in CandidateView constructor -->
+            <ImageButton
+                android:id="@+id/expand_candidates_pane"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:visibility="gone"
+                android:background="@null" />
+            <ImageButton
+                android:id="@+id/close_candidates_pane"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:visibility="gone"
+                android:background="@null" />
+        </LinearLayout>
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/touch_to_save"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:visibility="gone"
+    >
+        <Button
+            android:id="@+id/word_to_save"
+            android:layout_weight="1.0"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_gravity="center_vertical"
+            android:textSize="@dimen/candidate_text_size"
+            android:singleLine="true"
+            android:ellipsize="middle"
+            style="?attr/suggestionBackgroundStyle" />
+        <include
+            layout="@layout/candidate_divider" />
+        <TextView
+            android:layout_weight="2.0"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:gravity="left|center_vertical"
+            android:text="@string/hint_add_to_dictionary"
+            android:textSize="@dimen/candidate_text_size"
+            android:background="@null" />
     </LinearLayout>
 </merge>
diff --git a/java/res/layout/key_preview.xml b/java/res/layout/key_preview.xml
index 5332d15..b620d07 100644
--- a/java/res/layout/key_preview.xml
+++ b/java/res/layout/key_preview.xml
@@ -24,5 +24,4 @@
     android:textSize="40sp"
     android:minWidth="32dip"
     android:gravity="center"
-    style="?attr/keyPreviewStyle"
     />
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 8f6eb23..d6e0962 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -33,13 +33,21 @@
     <dimen name="keyboard_top_padding_ics">0.03in</dimen>
     <dimen name="keyboard_bottom_padding_ics">0.00in</dimen>
     <dimen name="keyboard_horizontal_edges_padding">0.0in</dimen>
+
+    <!-- left or right padding of label alignment -->
+    <dimen name="key_label_horizontal_alignment_padding">8dip</dimen>
+
     <fraction name="key_letter_ratio">55%</fraction>
+    <fraction name="key_large_letter_ratio">68%</fraction>
     <fraction name="key_label_ratio">35%</fraction>
     <fraction name="key_hint_letter_ratio">28%</fraction>
+    <fraction name="key_hint_label_ratio">45%</fraction>
     <fraction name="key_uppercase_letter_ratio">40%</fraction>
     <fraction name="key_preview_text_ratio">90%</fraction>
     <dimen name="key_preview_offset">0.08in</dimen>
+
     <dimen name="key_preview_offset_ics">0.01in</dimen>
+
     <dimen name="candidate_strip_height">38dip</dimen>
     <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
index 6e583e3..5d1fbc7 100644
--- a/java/res/values-sw600dp-land/dimens.xml
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -34,11 +34,15 @@
     <dimen name="keyboard_bottom_padding_ics">0.0mm</dimen>
     <dimen name="popup_key_height">13.0mm</dimen>
 
-    <fraction name="key_letter_ratio">45%</fraction>
-    <fraction name="key_label_ratio">32%</fraction>
-    <fraction name="key_hint_letter_ratio">23%</fraction>
-    <fraction name="key_uppercase_letter_ratio">29%</fraction>
     <!-- left or right padding of label alignment -->
     <dimen name="key_label_horizontal_alignment_padding">18dip</dimen>
+
+    <fraction name="key_letter_ratio">45%</fraction>
+    <fraction name="key_large_letter_ratio">45%</fraction>
+    <fraction name="key_label_ratio">32%</fraction>
+    <fraction name="key_hint_letter_ratio">23%</fraction>
+    <fraction name="key_hint_label_ratio">34%</fraction>
+    <fraction name="key_uppercase_letter_ratio">29%</fraction>
+
     <dimen name="candidate_strip_padding">40.0mm</dimen>
 </resources>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index 274b62b..675f40c 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -41,16 +41,21 @@
     <!-- popup_key_height x -1.0 -->
     <dimen name="mini_keyboard_vertical_correction">-13.0mm</dimen>
 
+    <!-- left or right padding of label alignment -->
+    <dimen name="key_label_horizontal_alignment_padding">6dip</dimen>
+
     <fraction name="key_letter_ratio">37%</fraction>
+    <fraction name="key_large_letter_ratio">37%</fraction>
     <fraction name="key_label_ratio">22%</fraction>
     <fraction name="key_hint_letter_ratio">23%</fraction>
+    <fraction name="key_hint_label_ratio">26%</fraction>
     <fraction name="key_uppercase_letter_ratio">25%</fraction>
     <fraction name="key_preview_text_ratio">50%</fraction>
     <dimen name="key_preview_height">15.0mm</dimen>
     <dimen name="key_preview_offset">0.1in</dimen>
+
+    <dimen name="key_preview_height_ics">15.0mm</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
-    <!-- left or right padding of label alignment -->
-    <dimen name="key_label_horizontal_alignment_padding">6dip</dimen>
 
     <dimen name="candidate_strip_height">46dip</dimen>
     <dimen name="candidate_strip_padding">15.0mm</dimen>
diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
index 74eb08a..2201ce8 100644
--- a/java/res/values-sw768dp-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -35,15 +35,19 @@
     <dimen name="popup_key_height">13.0mm</dimen>
     <dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
 
-    <fraction name="key_letter_ratio">38%</fraction>
-    <fraction name="key_label_ratio">26%</fraction>
-    <fraction name="key_hint_letter_ratio">23%</fraction>
-    <fraction name="key_uppercase_letter_ratio">24%</fraction>
-    <dimen name="key_preview_height">17.0mm</dimen>
     <!-- left or right padding of label alignment -->
     <dimen name="key_label_horizontal_alignment_padding">18dip</dimen>
-    <dimen name="key_preview_height_holo">26.5mm</dimen>
-    <dimen name="key_preview_offset_holo">7.5mm</dimen>
+
+    <fraction name="key_letter_ratio">38%</fraction>
+    <fraction name="key_large_letter_ratio">38%</fraction>
+    <fraction name="key_label_ratio">26%</fraction>
+    <fraction name="key_hint_letter_ratio">23%</fraction>
+    <fraction name="key_hint_label_ratio">26%</fraction>
+    <fraction name="key_uppercase_letter_ratio">24%</fraction>
+    <dimen name="key_preview_height">17.0mm</dimen>
+
+    <dimen name="key_preview_height_ics">26.5mm</dimen>
+    <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="candidate_strip_padding">40.0mm</dimen>
 </resources>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index b5d5a84..2e41db5 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -35,7 +35,7 @@
     <dimen name="keyboard_bottom_padding_ics">0.0mm</dimen>
     <dimen name="popup_key_height">10.0mm</dimen>
     <dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
-    <dimen name="mini_keyboard_horizontal_padding_holo">40dip</dimen>
+    <dimen name="mini_keyboard_horizontal_padding_ics">40dip</dimen>
     <dimen name="mini_keyboard_key_horizontal_padding">12dip</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- popup_key_height x 1.2 -->
@@ -43,16 +43,21 @@
     <!-- popup_key_height x -1.0 -->
     <dimen name="mini_keyboard_vertical_correction">-13.0mm</dimen>
 
+    <!-- left or right padding of label alignment -->
+    <dimen name="key_label_horizontal_alignment_padding">6dip</dimen>
+
     <fraction name="key_letter_ratio">38%</fraction>
+    <fraction name="key_large_letter_ratio">38%</fraction>
     <fraction name="key_label_ratio">26%</fraction>
     <fraction name="key_hint_letter_ratio">23%</fraction>
+    <fraction name="key_hint_label_ratio">26%</fraction>
     <fraction name="key_uppercase_letter_ratio">25%</fraction>
     <fraction name="key_preview_text_ratio">50%</fraction>
     <dimen name="key_preview_height">15.0mm</dimen>
     <dimen name="key_preview_offset">0.1in</dimen>
+
+    <dimen name="key_preview_height_ics">15.0mm</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
-    <!-- left or right padding of label alignment -->
-    <dimen name="key_label_horizontal_alignment_padding">6dip</dimen>
 
     <dimen name="candidate_strip_height">46dip</dimen>
     <!-- candidate_strip_minimum_height =
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index e9b6354..4470d7b 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -22,7 +22,6 @@
         <attr name="latinKeyboardStyle" format="reference" />
         <!-- KeyboardView style -->
         <attr name="keyboardViewStyle" format="reference" />
-        <attr name="keyPreviewStyle" format="reference" />
         <!-- PopupMiniKeyboardView style -->
         <attr name="popupMiniKeyboardViewStyle" format="reference" />
         <attr name="popupMiniKeyboardPanelStyle" format="reference" />
@@ -41,10 +40,15 @@
 
         <!-- Size of the text for one letter keys, in the proportion of key height. -->
         <attr name="keyLetterRatio" format="float" />
+        <!-- Large size of the text for one letter keys, in the proportion of key height. -->
+        <attr name="keyLargeLetterRatio" format="float" />
         <!-- Size of the text for keys with some text, in the proportion of key height. -->
         <attr name="keyLabelRatio" format="float" />
-        <!-- Size of the text for hint letter, in the proportion of key height. -->
+        <!-- Size of the text for hint letter (= one character hint label), in the proportion of
+             key height. -->
         <attr name="keyHintLetterRatio" format="float" />
+        <!-- Size of the text for hint label, in the proportion of key height. -->
+        <attr name="keyHintLabelRatio" format="float" />
         <!-- Size of the text for upper case letter, in the proportion of key height. -->
         <attr name="keyUppercaseLetterRatio" format="float" />
 
@@ -52,21 +56,32 @@
         <attr name="keyTextColor" format="color" />
         <!-- Color to use for the label in a key when in inactivated state. -->
         <attr name="keyTextInactivatedColor" format="color" />
-        <!-- Key hint letter color -->
+        <!-- Key hint letter (= one character hint label) color -->
         <attr name="keyHintLetterColor" format="color" />
+        <!-- Key hint label color -->
+        <attr name="keyHintLabelColor" format="color" />
         <!-- Upper case letter colors -->
         <attr name="keyUppercaseLetterInactivatedColor" format="color" />
         <attr name="keyUppercaseLetterActivatedColor" format="color" />
 
-        <!-- Popup hint icon "..." -->
-        <attr name="keyPopupHintIcon" format="reference" />
-
         <!-- Layout resource for key press feedback.-->
         <attr name="keyPreviewLayout" format="reference" />
+        <!-- The background for key press feedback. -->
+        <attr name="keyPreviewBackground" format="reference" />
+        <!-- The background for the left edge key press feedback. -->
+        <attr name="keyPreviewLeftBackground" format="reference" />
+        <!-- The background for the right edge key press feedback. -->
+        <attr name="keyPreviewRightBackground" format="reference" />
+        <!-- The background for spacebar press feedback. -->
+        <attr name="keyPreviewSpacebarBackground" format="reference" />
+        <!-- The text color for key press feedback. -->
+        <attr name="keyPreviewTextColor" format="color" />
         <!-- Vertical offset of the key press feedback from the key. -->
         <attr name="keyPreviewOffset" format="dimension" />
         <!-- Height of the key press feedback popup. -->
         <attr name="keyPreviewHeight" format="dimension" />
+        <!-- Size of the text for key press feedback popup, int the proportion of key height -->
+        <attr name="keyPreviewTextRatio" format="float" />
 
         <!-- Hysteresis distance for key debouncing -->
         <attr name="keyHysteresisDistance" format="dimension" />
@@ -146,16 +161,6 @@
         <attr name="iconReturnKey" format="reference" />
         <attr name="iconSearchKey" format="reference" />
         <attr name="iconTabKey" format="reference" />
-        <attr name="iconNum1Key" format="reference" />
-        <attr name="iconNum2Key" format="reference" />
-        <attr name="iconNum3Key" format="reference" />
-        <attr name="iconNum4Key" format="reference" />
-        <attr name="iconNum5Key" format="reference" />
-        <attr name="iconNum6Key" format="reference" />
-        <attr name="iconNum7Key" format="reference" />
-        <attr name="iconNum8Key" format="reference" />
-        <attr name="iconNum9Key" format="reference" />
-        <attr name="iconNum0Key" format="reference" />
         <attr name="iconShiftedShiftKey" format="reference" />
         <attr name="iconPreviewSpaceKey" format="reference" />
         <attr name="iconPreviewTabKey" format="reference" />
@@ -187,19 +192,23 @@
         <attr name="keyOutputText" format="string" />
         <!-- The label to display on the key. -->
         <attr name="keyLabel" format="string" />
-        <!-- The hint letter to display on the key in conjunction with the label. -->
-        <attr name="keyHintLetter" format="string" />
+        <!-- The hint label to display on the key in conjunction with the label. -->
+        <attr name="keyHintLabel" format="string" />
         <!-- The key label option. -->
         <attr name="keyLabelOption" format="integer">
             <!-- This should be aligned with Key.LABEL_OPTION_* -->
             <flag name="alignLeft" value="0x01" />
             <flag name="alignRight" value="0x02" />
-            <flag name="alignBottom" value="0x08" />
-            <flag name="fontNormal" value="0x10" />
-            <flag name="fontFixedWidth" value="0x20" />
-            <flag name="followKeyLetterRatio" value="0x40" />
-            <flag name="popupHint" value="0x80" />
-            <flag name="hasUppercaseLetter" value="0x100" />
+            <flag name="alignBottom" value="0x04" />
+            <flag name="alignLeftOfCenter" value="0x08" />
+            <flag name="largeLetter" value="0x10" />
+            <flag name="fontNormal" value="0x20" />
+            <flag name="fontMonoSpace" value="0x40" />
+            <flag name="followKeyLetterRatio" value="0x80" />
+            <flag name="followKeyHintLabelRatio" value="0x100" />
+            <flag name="hasPopupHint" value="0x200" />
+            <flag name="hasUppercaseLetter" value="0x400" />
+            <flag name="hasHintLabel" value="0x800" />
         </attr>
         <!-- The icon to display on the key instead of the label. -->
         <attr name="keyIcon" format="enum">
@@ -214,29 +223,19 @@
             <enum name="iconReturnKey" value="8" />
             <enum name="iconSearchKey" value="9" />
             <enum name="iconTabKey" value="10" />
-            <enum name="iconNum1Key" value="11" />
-            <enum name="iconNum2Key" value="12" />
-            <enum name="iconNum3Key" value="13" />
-            <enum name="iconNum4Key" value="14" />
-            <enum name="iconNum5Key" value="15" />
-            <enum name="iconNum6Key" value="16" />
-            <enum name="iconNum7Key" value="17" />
-            <enum name="iconNum8Key" value="18" />
-            <enum name="iconNum9Key" value="19" />
-            <enum name="iconNum0Key" value="20" />
         </attr>
         <!-- Shift key icon for shifted state -->
         <attr name="keyIconShifted" format="enum">
             <!-- This should be aligned with KeyboardIcons.ICON_SHIFTED_* -->
-            <enum name="iconShiftedShiftKey" value="21" />
+            <enum name="iconShiftedShiftKey" value="11" />
         </attr>
         <!-- The icon to show in the popup preview. -->
         <attr name="keyIconPreview" format="enum">
             <!-- This should be aligned with KeyboardIcons.ICON_PREVIEW_* -->
-            <enum name="iconPreviewSpaceKey" value="22" />
-            <enum name="iconPreviewTabKey" value="23" />
-            <enum name="iconPreviewSettingsKey" value="24" />
-            <enum name="iconPreviewShortcutKey" value="25" />
+            <enum name="iconPreviewSpaceKey" value="12" />
+            <enum name="iconPreviewTabKey" value="13" />
+            <enum name="iconPreviewSettingsKey" value="14" />
+            <enum name="iconPreviewShortcutKey" value="15" />
         </attr>
         <!-- The key style to specify a set of key attributes defined by <key_style/> -->
         <attr name="keyStyle" format="string" />
@@ -314,9 +313,5 @@
         <attr name="disabledShortcutIcon" format="reference" />
         <attr name="spacebarTextColor" format="color" />
         <attr name="spacebarTextShadowColor" format="color" />
-        <attr name="spacebarArrowLeftIcon" format="reference" />
-        <attr name="spacebarArrowRightIcon" format="reference" />
-        <attr name="spacebarArrowPreviewLeftIcon" format="reference" />
-        <attr name="spacebarArrowPreviewRightIcon" format="reference" />
     </declare-styleable>
 </resources>
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index 54256de..c1ef869 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -30,16 +30,16 @@
     <dimen name="popup_key_height">0.330in</dimen>
     <dimen name="keyboard_top_padding">0.00in</dimen>
     <dimen name="keyboard_bottom_padding">0.06in</dimen>
-    <dimen name="key_bottom_gap_stone">0.00in</dimen>
-    <dimen name="key_horizontal_gap_stone">0.00in</dimen>
+    <dimen name="keyboard_horizontal_edges_padding">0.0in</dimen>
+    <dimen name="mini_keyboard_horizontal_padding">16dip</dimen>
+    <dimen name="mini_keyboard_key_horizontal_padding">8dip</dimen>
+
     <dimen name="key_bottom_gap_ics">0.06in</dimen>
     <dimen name="key_horizontal_gap_ics">0.01in</dimen>
     <dimen name="keyboard_top_padding_ics">0.03in</dimen>
     <dimen name="keyboard_bottom_padding_ics">0.06in</dimen>
-    <dimen name="keyboard_horizontal_edges_padding">0.0in</dimen>
-    <dimen name="mini_keyboard_horizontal_padding">16dip</dimen>
-    <dimen name="mini_keyboard_horizontal_padding_holo">38dip</dimen>
-    <dimen name="mini_keyboard_key_horizontal_padding">8dip</dimen>
+    <dimen name="mini_keyboard_horizontal_padding_ics">38dip</dimen>
+
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- popup_key_height x 1.2 -->
     <dimen name="mini_keyboard_slide_allowance">0.396in</dimen>
@@ -49,15 +49,20 @@
          to user's finger. -->
     <dimen name="keyboard_vertical_correction">-0.05in</dimen>
 
+    <!-- left or right padding of label alignment -->
+    <dimen name="key_label_horizontal_alignment_padding">4dip</dimen>
+
     <fraction name="key_letter_ratio">45%</fraction>
+    <fraction name="key_large_letter_ratio">55%</fraction>
     <fraction name="key_label_ratio">29%</fraction>
     <fraction name="key_hint_letter_ratio">23%</fraction>
+    <fraction name="key_hint_label_ratio">36%</fraction>
     <fraction name="key_uppercase_letter_ratio">35%</fraction>
-    <!-- left or right padding of label alignment -->
-    <dimen name="key_label_horizontal_alignment_padding">21dip</dimen>
     <fraction name="key_preview_text_ratio">82%</fraction>
     <dimen name="key_preview_height">80sp</dimen>
     <dimen name="key_preview_offset">0.1in</dimen>
+
+    <dimen name="key_preview_height_ics">80sp</dimen>
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="candidate_strip_height">42dip</dimen>
@@ -66,7 +71,7 @@
     <dimen name="candidate_strip_minimum_height">100sp</dimen>
     <dimen name="candidate_strip_fading_edge_length">63dip</dimen>
     <dimen name="candidate_strip_padding">0dip</dimen>
-    <dimen name="candidate_min_width">32dip</dimen>
+    <dimen name="candidate_min_width">44dip</dimen>
     <dimen name="candidate_padding">6dip</dimen>
     <dimen name="candidate_text_size">18dip</dimen>
     <!-- If the screen height in landscape is larger than the below value, then the keyboard
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
index 3ba3455..e2c6889 100644
--- a/java/res/values/keyboard-icons-black.xml
+++ b/java/res/values/keyboard-icons-black.xml
@@ -15,8 +15,12 @@
 -->
 
 <resources>
-    <style name="KeyboardIcons.Black" parent="android:Theme.Light">
+    <style name="KeyboardIcons.Black">
         <!-- Keyboard icons -->
+        <!-- TODO: The following holo icon for phone (drawable-hdpi and drawable-xhdpi) are too
+             large for phone.
+             sym_bkeyboard_voice_off
+          -->
         <item name="iconShiftKey">@drawable/sym_bkeyboard_shift</item>
         <item name="iconToSymbolKeyWithShortcut">@drawable/sym_bkeyboard_123_mic</item>
         <item name="iconDeleteKey">@drawable/sym_bkeyboard_delete</item>
@@ -26,16 +30,6 @@
         <item name="iconReturnKey">@drawable/sym_bkeyboard_return</item>
         <item name="iconSearchKey">@drawable/sym_bkeyboard_search</item>
         <item name="iconTabKey">@drawable/sym_bkeyboard_tab</item>
-        <item name="iconNum1Key">@drawable/sym_bkeyboard_num1</item>
-        <item name="iconNum2Key">@drawable/sym_bkeyboard_num2</item>
-        <item name="iconNum3Key">@drawable/sym_bkeyboard_num3</item>
-        <item name="iconNum4Key">@drawable/sym_bkeyboard_num4</item>
-        <item name="iconNum5Key">@drawable/sym_bkeyboard_num5</item>
-        <item name="iconNum6Key">@drawable/sym_bkeyboard_num6</item>
-        <item name="iconNum7Key">@drawable/sym_bkeyboard_num7</item>
-        <item name="iconNum8Key">@drawable/sym_bkeyboard_num8</item>
-        <item name="iconNum9Key">@drawable/sym_bkeyboard_num9</item>
-        <item name="iconNum0Key">@drawable/sym_bkeyboard_num0</item>
         <item name="iconShiftedShiftKey">@drawable/sym_bkeyboard_shift_locked</item>
         <item name="iconPreviewSpaceKey">@drawable/sym_keyboard_feedback_space</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
@@ -43,10 +37,6 @@
         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_mic</item>
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
-        <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
-        <item name="spacebarArrowLeftIcon">@drawable/sym_keyboard_language_arrows_left</item>
-        <item name="spacebarArrowRightIcon">@drawable/sym_keyboard_language_arrows_right</item>
-        <item name="spacebarArrowPreviewLeftIcon">@drawable/sym_keyboard_feedback_language_arrows_left</item>
-        <item name="spacebarArrowPreviewRightIcon">@drawable/sym_keyboard_feedback_language_arrows_right</item>
+        <item name="disabledShortcutIcon">@drawable/sym_bkeyboard_voice_off</item>
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
index 1dfbdf9..c813152 100644
--- a/java/res/values/keyboard-icons-ics.xml
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -15,64 +15,42 @@
 -->
 
 <resources>
-    <style name="KeyboardIcons.IceCreamSandwich" parent="android:Theme.Holo">
+    <style name="KeyboardIcons.IceCreamSandwich">
         <!-- Keyboard icons -->
-<!--         <item name="iconShiftKey">@drawable/sym_keyboard_shift_holo</item> -->
-        <item name="iconShiftKey">@drawable/sym_keyboard_shift</item>
-<!--         <item name="iconToSymbolKeyWithShortcut">@drawable/sym_keyboard_123_voice_holo</item> -->
-        <item name="iconToSymbolKeyWithShortcut">@drawable/sym_keyboard_123_mic</item>
-<!--         <item name="iconDeleteKey">@drawable/sym_keyboard_delete_holo</item> -->
-        <item name="iconDeleteKey">@drawable/sym_keyboard_delete</item>
-<!--         <item name="iconSettingsKey">@drawable/sym_keyboard_settings_holo</item> -->
-        <item name="iconSettingsKey">@drawable/sym_keyboard_settings</item>
-<!--         <item name="iconShortcutKey">@drawable/sym_keyboard_voice_holo</item> -->
-        <item name="iconShortcutKey">@drawable/sym_keyboard_mic</item>
-<!--         <item name="iconSpaceKey">@drawable/sym_keyboard_space_holo</item> -->
-        <item name="iconSpaceKey">@drawable/sym_keyboard_space</item>
-<!--         <item name="iconReturnKey">@drawable/sym_keyboard_return_holo</item> -->
-        <item name="iconReturnKey">@drawable/sym_keyboard_return</item>
-<!--         <item name="iconSearchKey">@drawable/sym_keyboard_search_holo</item> -->
+        <!-- TODO: The following holo icon for phone (drawable-hdpi and drawable-xhdpi) are too
+             large for phone.
+             sym_keyboard_shift_holo
+             sym_keyboard_shift_locked_holo
+             sym_keyboard_delete_holo,
+             sym_keyboard_settings_holo
+             sym_keyboard_voice_holo
+             sym_keyboard_voice_holo_off
+             sym_keyboard_space_holo
+             sym_keyboard_return_holo
+             sym_keyboard_tab_holo
+             -->
+        <!-- TODO: The following holo icon for phone (drawable-hdpi and drawable-xhdpi) are missing.
+             sym_keyboard_123_mic_holo
+             sym_keyboard_search_holo
+             sym_keyboard_feedback_tab_holo
+             sym_keyboard_feedback_voice_holo
+             -->
+        <item name="iconShiftKey">@drawable/sym_keyboard_shift_holo</item>
+        <item name="iconToSymbolKeyWithShortcut">@drawable/sym_keyboard_123_mic_holo</item>
+        <item name="iconDeleteKey">@drawable/sym_keyboard_delete_holo</item>
+        <item name="iconSettingsKey">@drawable/sym_keyboard_settings_holo</item>
+        <item name="iconShortcutKey">@drawable/sym_keyboard_voice_holo</item>
+        <item name="iconSpaceKey">@drawable/sym_keyboard_space_holo</item>
+        <item name="iconReturnKey">@drawable/sym_keyboard_return_holo</item>
         <item name="iconSearchKey">@drawable/sym_keyboard_search</item>
-<!--         <item name="iconTabKey">@drawable/sym_keyboard_tab_holo</item> -->
-        <item name="iconTabKey">@drawable/sym_keyboard_tab</item>
-<!--         <item name="iconNum1Key">@drawable/sym_keyboard_num1_holo</item> -->
-<!--         <item name="iconNum2Key">@drawable/sym_keyboard_num2_holo</item> -->
-<!--         <item name="iconNum3Key">@drawable/sym_keyboard_num3_holo</item> -->
-<!--         <item name="iconNum4Key">@drawable/sym_keyboard_num4_holo</item> -->
-<!--         <item name="iconNum5Key">@drawable/sym_keyboard_num5_holo</item> -->
-<!--         <item name="iconNum6Key">@drawable/sym_keyboard_num6_holo</item> -->
-<!--         <item name="iconNum7Key">@drawable/sym_keyboard_num7_holo</item> -->
-<!--         <item name="iconNum8Key">@drawable/sym_keyboard_num8_holo</item> -->
-<!--         <item name="iconNum9Key">@drawable/sym_keyboard_num9_holo</item> -->
-<!--         <item name="iconNum0Key">@drawable/sym_keyboard_num0_holo</item> -->
-<!--         <item name="iconNumStarKey">@drawable/sym_keyboard_numbstar_holo</item> -->
-<!--         <item name="iconNumPoundKey">@drawable/sym_keyboard_numbpound_holo</item> -->
-<!--         <item name="iconNumAltKey">@drawable/sym_keyboard_numalt_holo</item> -->
-        <item name="iconNum1Key">@drawable/sym_keyboard_num1</item>
-        <item name="iconNum2Key">@drawable/sym_keyboard_num2</item>
-        <item name="iconNum3Key">@drawable/sym_keyboard_num3</item>
-        <item name="iconNum4Key">@drawable/sym_keyboard_num4</item>
-        <item name="iconNum5Key">@drawable/sym_keyboard_num5</item>
-        <item name="iconNum6Key">@drawable/sym_keyboard_num6</item>
-        <item name="iconNum7Key">@drawable/sym_keyboard_num7</item>
-        <item name="iconNum8Key">@drawable/sym_keyboard_num8</item>
-        <item name="iconNum9Key">@drawable/sym_keyboard_num9</item>
-        <item name="iconNum0Key">@drawable/sym_keyboard_num0</item>
-<!--         <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked_holo</item> -->
-        <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked</item>
+        <item name="iconTabKey">@drawable/sym_keyboard_tab_holo</item>
+        <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked_holo</item>
         <item name="iconPreviewSpaceKey">@drawable/transparent</item>
-<!--         <item name="iconPreviewTabKey">@drawable/sym_keyboard_tab_holo</item> -->
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
-<!--         <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_settings_holo</item> -->
-        <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_settings</item>
-<!--         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_voice_holo</item> -->
+        <item name="iconPreviewSettingsKey">@drawable/sym_keyboard_settings_holo</item>
         <item name="iconPreviewShortcutKey">@drawable/sym_keyboard_feedback_mic</item>
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
         <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
-        <item name="spacebarArrowLeftIcon">@drawable/sym_keyboard_language_arrows_left</item>
-        <item name="spacebarArrowRightIcon">@drawable/sym_keyboard_language_arrows_right</item>
-<!--         <item name="spacebarArrowPreviewLeftIcon">@drawable/sym_keyboard_feedback_language_arrows_left</item> -->
-<!--         <item name="spacebarArrowPreviewRightIcon">@drawable/sym_keyboard_feedback_language_arrows_right</item> -->
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
index 9f5fb5a..8bc7539 100644
--- a/java/res/values/keyboard-icons-white.xml
+++ b/java/res/values/keyboard-icons-white.xml
@@ -15,7 +15,7 @@
 -->
 
 <resources>
-    <style name="KeyboardIcons" parent="android:Theme">
+    <style name="KeyboardIcons">
         <!-- Keyboard icons -->
         <item name="iconShiftKey">@drawable/sym_keyboard_shift</item>
         <item name="iconToSymbolKeyWithShortcut">@drawable/sym_keyboard_123_mic</item>
@@ -26,16 +26,6 @@
         <item name="iconReturnKey">@drawable/sym_keyboard_return</item>
         <item name="iconSearchKey">@drawable/sym_keyboard_search</item>
         <item name="iconTabKey">@drawable/sym_keyboard_tab</item>
-        <item name="iconNum1Key">@drawable/sym_keyboard_num1</item>
-        <item name="iconNum2Key">@drawable/sym_keyboard_num2</item>
-        <item name="iconNum3Key">@drawable/sym_keyboard_num3</item>
-        <item name="iconNum4Key">@drawable/sym_keyboard_num4</item>
-        <item name="iconNum5Key">@drawable/sym_keyboard_num5</item>
-        <item name="iconNum6Key">@drawable/sym_keyboard_num6</item>
-        <item name="iconNum7Key">@drawable/sym_keyboard_num7</item>
-        <item name="iconNum8Key">@drawable/sym_keyboard_num8</item>
-        <item name="iconNum9Key">@drawable/sym_keyboard_num9</item>
-        <item name="iconNum0Key">@drawable/sym_keyboard_num0</item>
         <item name="iconShiftedShiftKey">@drawable/sym_keyboard_shift_locked</item>
         <item name="iconPreviewSpaceKey">@drawable/sym_keyboard_feedback_space</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
@@ -44,9 +34,5 @@
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
         <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
-        <item name="spacebarArrowLeftIcon">@drawable/sym_keyboard_language_arrows_left</item>
-        <item name="spacebarArrowRightIcon">@drawable/sym_keyboard_language_arrows_right</item>
-        <item name="spacebarArrowPreviewLeftIcon">@drawable/sym_keyboard_feedback_language_arrows_left</item>
-        <item name="spacebarArrowPreviewRightIcon">@drawable/sym_keyboard_feedback_language_arrows_right</item>
     </style>
 </resources>
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 05defcb..08301be 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -37,19 +37,27 @@
         <item name="android:background">@drawable/keyboard_background</item>
         <item name="keyBackground">@drawable/btn_keyboard_key</item>
         <item name="keyLetterRatio">@fraction/key_letter_ratio</item>
+        <item name="keyLargeLetterRatio">@fraction/key_large_letter_ratio</item>
         <item name="keyLabelRatio">@fraction/key_label_ratio</item>
         <item name="keyHintLetterRatio">@fraction/key_hint_letter_ratio</item>
+        <item name="keyHintLabelRatio">@fraction/key_hint_label_ratio</item>
         <item name="keyUppercaseLetterRatio">@fraction/key_uppercase_letter_ratio</item>
         <item name="keyTextStyle">normal</item>
         <item name="keyTextColor">#FFFFFFFF</item>
         <item name="keyTextInactivatedColor">#FFFFFFFF</item>
         <item name="keyHintLetterColor">#80000000</item>
+        <item name="keyHintLabelColor">#E0E0E4E5</item>
         <item name="keyUppercaseLetterInactivatedColor">#66E0E4E5</item>
         <item name="keyUppercaseLetterActivatedColor">#CCE0E4E5</item>
-        <item name="keyPopupHintIcon">@drawable/hint_popup</item>
         <item name="keyPreviewLayout">@layout/key_preview</item>
+        <item name="keyPreviewBackground">@drawable/keyboard_key_feedback</item>
+        <item name="keyPreviewLeftBackground">@null</item>
+        <item name="keyPreviewRightBackground">@null</item>
+        <item name="keyPreviewSpacebarBackground">@drawable/keyboard_key_feedback</item>
+        <item name="keyPreviewTextColor">#FFFFFFFF</item>
         <item name="keyPreviewOffset">@dimen/key_preview_offset</item>
         <item name="keyPreviewHeight">@dimen/key_preview_height</item>
+        <item name="keyPreviewTextRatio">@fraction/key_preview_text_ratio</item>
         <item name="popupLayout">@layout/keyboard_popup</item>
         <item name="keyHysteresisDistance">@dimen/key_hysteresis_distance</item>
         <item name="verticalCorrection">@dimen/keyboard_vertical_correction</item>
@@ -57,10 +65,6 @@
         <item name="shadowRadius">2.75</item>
         <item name="backgroundDimAmount">0.5</item>
     </style>
-    <style name="KeyPreviewStyle">
-        <item name="android:background">@drawable/keyboard_key_feedback</item>
-        <item name="android:textColor">#FFFFFFFF</item>
-    </style>
     <style name="PopupMiniKeyboardView" parent="KeyboardView">
         <item name="keyBackground">@drawable/btn_keyboard_key_popup</item>
         <item name="keyHysteresisDistance">0dip</item>
@@ -95,17 +99,21 @@
     </style>
     <!-- Theme "Stone" -->
     <style name="Keyboard.Stone" parent="Keyboard">
-        <item name="horizontalGap">@dimen/key_horizontal_gap_stone</item>
-        <item name="verticalGap">@dimen/key_bottom_gap_stone</item>
+        <item name="horizontalGap">@dimen/key_horizontal_gap</item>
+        <item name="verticalGap">@dimen/key_bottom_gap</item>
     </style>
     <style name="LatinKeyboard.Stone" parent="LatinKeyboard">
-        <item name="spacebarTextColor">#FF444444</item>
-        <item name="spacebarTextShadowColor">#80FFFFFF</item>
+        <item name="spacebarTextColor">#FF000000</item>
+        <item name="spacebarTextShadowColor">#D0FFFFFF</item>
     </style>
     <style name="KeyboardView.Stone" parent="KeyboardView">
         <item name="keyBackground">@drawable/btn_keyboard_key_stone</item>
         <item name="keyTextColor">#FF000000</item>
         <item name="keyTextInactivatedColor">#FF808080</item>
+        <item name="keyHintLetterColor">#80000000</item>
+        <item name="keyHintLabelColor">#E0000000</item>
+        <item name="keyUppercaseLetterInactivatedColor">#66000000</item>
+        <item name="keyUppercaseLetterActivatedColor">#CC000000</item>
         <item name="shadowColor">#FFFFFFFF</item>
     </style>
     <style name="PopupMiniKeyboardView.Stone" parent="PopupMiniKeyboardView">
@@ -142,25 +150,27 @@
         <item name="keyTextStyle">bold</item>
         <item name="keyTextInactivatedColor">#66E0E4E5</item>
         <item name="keyHintLetterColor">#80000000</item>
+        <item name="keyHintLabelColor">#A0FFFFFF</item>
         <item name="keyUppercaseLetterInactivatedColor">#66E0E4E5</item>
         <item name="keyUppercaseLetterActivatedColor">#FFFFFFFF</item>
-        <item name="keyPopupHintIcon">@drawable/hint_popup</item>
-        <item name="keyPreviewHeight">@dimen/key_preview_height</item>
+        <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_ics</item>
+        <item name="keyPreviewLeftBackground">@drawable/keyboard_key_feedback_left_ics</item>
+        <item name="keyPreviewRightBackground">@drawable/keyboard_key_feedback_right_ics</item>
+        <item name="keyPreviewSpacebarBackground">@drawable/transparent</item>
+        <item name="keyPreviewTextColor">#FFFFFFFF</item>
+        <item name="keyPreviewHeight">@dimen/key_preview_height_ics</item>
         <item name="keyPreviewOffset">@dimen/key_preview_offset_ics</item>
         <item name="shadowColor">#00000000</item>
         <item name="shadowRadius">0.0</item>
     </style>
-    <style name="KeyPreviewStyle.IceCreamSandwich">
-        <item name="android:background">@drawable/keyboard_key_feedback_ics</item>
-    </style>
     <style name="PopupMiniKeyboardView.IceCreamSandwich" parent="PopupMiniKeyboardView">
         <item name="android:background">@null</item>
         <item name="keyBackground">@drawable/btn_keyboard_key_popup_ics</item>
     </style>
     <style name="PopupMiniKeyboardPanelStyle.IceCreamSandwich">
         <item name="android:background">@drawable/keyboard_popup_panel_background_holo</item>
-        <item name="android:paddingLeft">@dimen/mini_keyboard_horizontal_padding_holo</item>
-        <item name="android:paddingRight">@dimen/mini_keyboard_horizontal_padding_holo</item>
+        <item name="android:paddingLeft">@dimen/mini_keyboard_horizontal_padding_ics</item>
+        <item name="android:paddingRight">@dimen/mini_keyboard_horizontal_padding_ics</item>
     </style>
     <style name="SuggestionsStripBackgroundStyle.IceCreamSandwich">
         <item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
diff --git a/java/res/values/themes-basic-highcontrast.xml b/java/res/values/themes-basic-highcontrast.xml
index 8122e4e..820f962 100644
--- a/java/res/values/themes-basic-highcontrast.xml
+++ b/java/res/values/themes-basic-highcontrast.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.HighContrast</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
index 50b52de..18cae4e 100644
--- a/java/res/values/themes-basic.xml
+++ b/java/res/values/themes-basic.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
index cdb10c8..091baa7 100644
--- a/java/res/values/themes-gingerbread.xml
+++ b/java/res/values/themes-gingerbread.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Gingerbread</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Gingerbread</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 33c4081..97c5944 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard.IceCreamSandwich</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.IceCreamSandwich</item>
         <item name="keyboardViewStyle">@style/KeyboardView.IceCreamSandwich</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle.IceCreamSandwich</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.IceCreamSandwich</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle.IceCreamSandwich</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle.IceCreamSandwich</item>
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
index 6589807..d33e6bf 100644
--- a/java/res/values/themes-stone-bold.xml
+++ b/java/res/values/themes-stone-bold.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard.Stone</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone.Bold</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Stone</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
index a8608f6..230b2ca 100644
--- a/java/res/values/themes-stone.xml
+++ b/java/res/values/themes-stone.xml
@@ -19,7 +19,6 @@
         <item name="keyboardStyle">@style/Keyboard.Stone</item>
         <item name="latinKeyboardStyle">@style/LatinKeyboard.Stone</item>
         <item name="keyboardViewStyle">@style/KeyboardView.Stone</item>
-        <item name="keyPreviewStyle">@style/KeyPreviewStyle</item>
         <item name="popupMiniKeyboardViewStyle">@style/PopupMiniKeyboardView.Stone</item>
         <item name="popupMiniKeyboardPanelStyle">@style/PopupMiniKeyboardPanelStyle</item>
         <item name="suggestionsStripBackgroundStyle">@style/SuggestionsStripBackgroundStyle</item>
diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml
index e8e80ac..dbea4dc 100644
--- a/java/res/xml-sw600dp/kbd_key_styles.xml
+++ b/java/res/xml-sw600dp/kbd_key_styles.xml
@@ -37,7 +37,7 @@
         <default>
             <key-style
                 latin:styleName="settingsPopupStyle"
-                latin:keyLabelOption="popupHint"
+                latin:keyLabelOption="hasPopupHint"
                 latin:popupCharacters="\@icon/5|\@integer/key_settings"
                 latin:parentStyle="functionalKeyStyle" />
         </default>
@@ -73,7 +73,7 @@
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
         latin:keyOutputText=":-) "
-        latin:keyLabelOption="popupHint"
+        latin:keyLabelOption="hasPopupHint"
         latin:popupCharacters="@string/alternates_for_smiley"
         latin:maxPopupKeyboardColumn="5" />
     <key-style
@@ -116,7 +116,7 @@
     <key-style
         latin:styleName="comKeyStyle"
         latin:keyLabel="@string/keylabel_for_popular_domain"
-        latin:keyLabelOption="fontNormal|popupHint"
+        latin:keyLabelOption="fontNormal|hasPopupHint"
         latin:keyOutputText="@string/keylabel_for_popular_domain"
         latin:popupCharacters="@string/alternates_for_popular_domain" />
     <switch>
diff --git a/java/res/xml-sw600dp/kbd_number.xml b/java/res/xml-sw600dp/kbd_number.xml
index 2c7af0a..b3a1010 100644
--- a/java/res/xml-sw600dp/kbd_number.xml
+++ b/java/res/xml-sw600dp/kbd_number.xml
@@ -91,24 +91,27 @@
             <Row>
                 <Key
                     latin:keyLabel="-"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="+"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="."
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="1"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="38.75%p" />
                 <Key
-                    latin:keyLabel="2" />
+                    latin:keyLabel="2"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="3" />
+                    latin:keyLabel="3"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.00%p"
@@ -117,25 +120,27 @@
             </Row>
             <Row>
                 <Key
-                    latin:keyLabel="*"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numStarKeyStyle"
                     latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="/"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel=","
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="4"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="38.75%p" />
                 <Key
-                    latin:keyLabel="5" />
+                    latin:keyLabel="5"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="6" />
+                    latin:keyLabel="6"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.00%p"
@@ -148,24 +153,27 @@
                      edge key. -->
                 <Key
                     latin:keyLabel="("
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="11.00%p"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel=")"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="="
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="9.25%p" />
                 <Key
                     latin:keyLabel="7"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="38.75%p" />
                 <Key
-                    latin:keyLabel="8" />
+                    latin:keyLabel="8"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="9" />
+                    latin:keyLabel="9"
+                    latin:keyStyle="numKeyStyle" />
             </Row>
             <!-- This row is intentionally not marked as a bottom row -->
             <Row>
@@ -180,10 +188,11 @@
                     latin:keyStyle="numStarKeyStyle"
                     latin:keyXPos="38.75%p" />
                 <Key
-                    latin:keyLabel="0" />
+                    latin:keyLabel="0"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="#"
-                    latin:keyStyle="numLabelStyle" />
+                    latin:keyStyle="numKeyStyle" />
                 <Spacer
                     latin:keyXPos="-11.00%p"
                     latin:keyWidth="0%p" />
diff --git a/java/res/xml-sw600dp/kbd_phone.xml b/java/res/xml-sw600dp/kbd_phone.xml
index 4dee882..dd53a20 100644
--- a/java/res/xml-sw600dp/kbd_phone.xml
+++ b/java/res/xml-sw600dp/kbd_phone.xml
@@ -30,12 +30,12 @@
     <Row>
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="15.625%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="+"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyStyle="num1KeyStyle"
@@ -53,12 +53,12 @@
     <Row>
         <Key
             latin:keyLabel=","
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="15.625%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyStyle="num4KeyStyle"
@@ -82,12 +82,12 @@
              the touch event on the area, "(" is intentionally not marked as a left edge key. -->
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="15.625%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel=")"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyStyle="num7KeyStyle"
@@ -114,7 +114,7 @@
             latin:keyStyle="num0KeyStyle" />
         <Key
             latin:keyLabel="#"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Spacer
             latin:keyXPos="-11.00%p"
             latin:keyWidth="0%p" />
diff --git a/java/res/xml-sw600dp/kbd_phone_symbols.xml b/java/res/xml-sw600dp/kbd_phone_symbols.xml
index 87de880..d083ecb 100644
--- a/java/res/xml-sw600dp/kbd_phone_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_phone_symbols.xml
@@ -30,12 +30,12 @@
     <Row>
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="11.00%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="+"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:code="44"
@@ -57,12 +57,12 @@
     <Row>
         <Key
             latin:keyLabel=","
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="11.00%p"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:code="59"
@@ -90,15 +90,15 @@
              the touch event on the area, "(" is intentionally not marked as a left edge key. -->
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel=")"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyLabel="N"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="9.25%p" />
         <Key
             latin:keyStyle="num7KeyStyle"
@@ -124,7 +124,7 @@
             latin:keyStyle="num0KeyStyle" />
         <Key
             latin:keyLabel="#"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Spacer
             latin:keyXPos="-11.00%p"
             latin:keyWidth="0%p" />
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row3.xml b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
index 0dbc5cf..278db13 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
@@ -59,12 +59,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row4.xml b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
index 8fd65fe..4f41c17 100644
--- a/java/res/xml-sw600dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row4.xml
@@ -49,7 +49,7 @@
                 <Key
                     latin:keyLabel="/"
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\@"
+                    latin:keyHintLabel="\@"
                     latin:popupCharacters="\@" />
             </default>
         </switch>
@@ -75,7 +75,7 @@
                         <Key
                             latin:keyLabel="/"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter=":"
+                            latin:keyHintLabel=":"
                             latin:popupCharacters=":"
                             latin:keyWidth="9.750%p" />
                     </case>
@@ -83,7 +83,7 @@
                         <Key
                             latin:keyLabel="\?"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="_"
+                            latin:keyHintLabel="_"
                             latin:popupCharacters="_"
                             latin:keyWidth="9.750%p" />
                     </default>
@@ -100,7 +100,7 @@
                         <Key
                             latin:keyLabel="!"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="\'"
+                            latin:keyHintLabel="\'"
                             latin:popupCharacters="\'"
                             latin:keyWidth="9.750%p" />
                     </default>
@@ -122,7 +122,7 @@
                         <Key
                             latin:keyLabel="/"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter=":"
+                            latin:keyHintLabel=":"
                             latin:popupCharacters=":"
                             latin:keyWidth="9.750%p" />
                     </case>
@@ -130,7 +130,7 @@
                         <Key
                             latin:keyLabel="\'"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="&quot;"
+                            latin:keyHintLabel="&quot;"
                             latin:popupCharacters="&quot;"
                             latin:keyWidth="9.750%p" />
                     </default>
@@ -147,7 +147,7 @@
                         <Key
                             latin:keyLabel="-"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="_"
+                            latin:keyHintLabel="_"
                             latin:popupCharacters="_"
                             latin:keyWidth="9.750%p" />
                     </default>
diff --git a/java/res/xml-sw600dp/kbd_row3_right.xml b/java/res/xml-sw600dp/kbd_row3_right.xml
index a9c5eb3..5e9584f 100644
--- a/java/res/xml-sw600dp/kbd_row3_right.xml
+++ b/java/res/xml-sw600dp/kbd_row3_right.xml
@@ -37,7 +37,7 @@
             <Key
                 latin:keyLabel="-"
                 latin:keyLabelOption="hasUppercaseLetter"
-                latin:keyHintLetter="_"
+                latin:keyHintLabel="_"
                 latin:popupCharacters="_"
                 latin:keyXPos="-8.9%p"
                 latin:keyWidth="fillBoth"
@@ -49,7 +49,7 @@
             <Key
                 latin:keyLabel=":"
                 latin:keyLabelOption="hasUppercaseLetter"
-                latin:keyHintLetter="+"
+                latin:keyHintLabel="+"
                 latin:popupCharacters="+"
                 latin:keyXPos="-8.9%p"
                 latin:keyWidth="fillBoth"
diff --git a/java/res/xml-sw600dp/kbd_rows_azerty.xml b/java/res/xml-sw600dp/kbd_rows_azerty.xml
index b53bbbb..7ba716b 100644
--- a/java/res/xml-sw600dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw600dp/kbd_rows_azerty.xml
@@ -139,12 +139,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw600dp/kbd_rows_qwertz.xml b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
index 7ea9b0f..7f85fe7 100644
--- a/java/res/xml-sw600dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
@@ -104,12 +104,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw600dp/kbd_rows_russian.xml b/java/res/xml-sw600dp/kbd_rows_russian.xml
index 43fa665..b723247 100644
--- a/java/res/xml-sw600dp/kbd_rows_russian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_russian.xml
@@ -119,7 +119,7 @@
         <Key
             latin:keyLabel="."
             latin:keyLabelOption="hasUppercaseLetter"
-            latin:keyHintLetter=","
+            latin:keyHintLabel=","
             latin:popupCharacters="," />
         <include
             latin:keyboardLayout="@xml/kbd_row3_right" />
diff --git a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
index 3666ead..645ef62 100644
--- a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
@@ -147,12 +147,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw600dp/kbd_rows_serbian.xml b/java/res/xml-sw600dp/kbd_rows_serbian.xml
index 80debda..4dfe944 100644
--- a/java/res/xml-sw600dp/kbd_rows_serbian.xml
+++ b/java/res/xml-sw600dp/kbd_rows_serbian.xml
@@ -127,12 +127,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml
index 5d8c081..4c1e3b6 100644
--- a/java/res/xml-sw768dp/kbd_key_styles.xml
+++ b/java/res/xml-sw768dp/kbd_key_styles.xml
@@ -55,7 +55,7 @@
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
         latin:keyOutputText=":-) "
-        latin:keyLabelOption="popupHint"
+        latin:keyLabelOption="hasPopupHint"
         latin:popupCharacters="@string/alternates_for_smiley"
         latin:maxPopupKeyboardColumn="5" />
     <key-style
@@ -98,7 +98,7 @@
     <key-style
         latin:styleName="comKeyStyle"
         latin:keyLabel="@string/keylabel_for_popular_domain"
-        latin:keyLabelOption="fontNormal|popupHint"
+        latin:keyLabelOption="fontNormal|hasPopupHint"
         latin:keyOutputText="@string/keylabel_for_popular_domain"
         latin:popupCharacters="@string/alternates_for_popular_domain" />
     <switch>
diff --git a/java/res/xml-sw768dp/kbd_number.xml b/java/res/xml-sw768dp/kbd_number.xml
index 1ae6984..a3bed2f 100644
--- a/java/res/xml-sw768dp/kbd_number.xml
+++ b/java/res/xml-sw768dp/kbd_number.xml
@@ -98,24 +98,27 @@
                     latin:keyEdgeFlags="left" />
                 <Key
                     latin:keyLabel="-"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="13.829%p"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="+"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="."
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="1"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="43.125%p" />
                 <Key
-                    latin:keyLabel="2" />
+                    latin:keyLabel="2"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="3" />
+                    latin:keyLabel="3"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyXPos="-11.172%p"
@@ -124,25 +127,27 @@
             </Row>
             <Row>
                 <Key
-                    latin:keyLabel="*"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numStarKeyStyle"
                     latin:keyXPos="13.829%p"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="/"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel=","
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="4"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="43.125%p" />
                 <Key
-                    latin:keyLabel="5" />
+                    latin:keyLabel="5"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="6" />
+                    latin:keyLabel="6"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyXPos="-11.172%p"
@@ -155,24 +160,27 @@
                      edge key. -->
                 <Key
                     latin:keyLabel="("
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="13.829%p"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel=")"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="="
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyWidth="8.047%p" />
                 <Key
                     latin:keyLabel="7"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyXPos="43.125%p" />
                 <Key
-                    latin:keyLabel="8" />
+                    latin:keyLabel="8"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="9" />
+                    latin:keyLabel="9"
+                    latin:keyStyle="numKeyStyle" />
                 <!-- There is an empty area below the "Enter" key and right of the "9" key. To
                      ignore the touch event on the area, "9" is intentionally not marked as a right
                      edge key. -->
@@ -191,14 +199,14 @@
                     latin:keyXPos="13.829%p"
                     latin:keyWidth="24.140%p" />
                 <Key
-                    latin:keyLabel="*"
-                    latin:keyStyle="numLabelStyle"
+                    latin:keyStyle="numStarKeyStyle"
                     latin:keyXPos="43.125%p" />
                 <Key
-                    latin:keyLabel="0" />
+                    latin:keyLabel="0"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="#"
-                    latin:keyStyle="numLabelStyle" />
+                    latin:keyStyle="numKeyStyle" />
                 <switch>
                     <case
                         latin:voiceKeyEnabled="true"
diff --git a/java/res/xml-sw768dp/kbd_phone.xml b/java/res/xml-sw768dp/kbd_phone.xml
index 6801ac5..0935992 100644
--- a/java/res/xml-sw768dp/kbd_phone.xml
+++ b/java/res/xml-sw768dp/kbd_phone.xml
@@ -35,12 +35,12 @@
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="20.400%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel="+"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyStyle="num1KeyStyle"
@@ -62,12 +62,12 @@
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel=","
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="20.400%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyStyle="num4KeyStyle"
@@ -87,12 +87,12 @@
              the touch event on the area, "(" is intentionally not marked as a left edge key. -->
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="20.400%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel=")"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyStyle="num7KeyStyle"
@@ -124,7 +124,7 @@
             latin:keyStyle="num0KeyStyle" />
         <Key
             latin:keyLabel="#"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <switch>
             <case
                 latin:voiceKeyEnabled="true"
diff --git a/java/res/xml-sw768dp/kbd_phone_symbols.xml b/java/res/xml-sw768dp/kbd_phone_symbols.xml
index 22f78b6..6ee57d6 100644
--- a/java/res/xml-sw768dp/kbd_phone_symbols.xml
+++ b/java/res/xml-sw768dp/kbd_phone_symbols.xml
@@ -35,12 +35,12 @@
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel="+"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:code="44"
@@ -66,12 +66,12 @@
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel=","
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:code="59"
@@ -95,16 +95,16 @@
              the touch event on the area, "(" is intentionally not marked as a left edge key. -->
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyXPos="13.829%p"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel=")"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyLabel="N"
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyWidth="8.047%p" />
         <Key
             latin:keyStyle="num7KeyStyle"
@@ -136,7 +136,7 @@
             latin:keyStyle="num0KeyStyle" />
         <Key
             latin:keyLabel="#"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <switch>
             <case
                 latin:voiceKeyEnabled="true"
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row4.xml b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
index 00eabab..bdef89d 100644
--- a/java/res/xml-sw768dp/kbd_qwerty_row4.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
@@ -59,7 +59,7 @@
                         <Key
                             latin:keyLabel=":"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="+"
+                            latin:keyHintLabel="+"
                             latin:popupCharacters="+" />
                     </case>
                     <default>
@@ -78,7 +78,7 @@
                         <Key
                             latin:keyLabel="/"
                             latin:keyLabelOption="hasUppercaseLetter"
-                            latin:keyHintLetter="\@"
+                            latin:keyHintLabel="\@"
                             latin:popupCharacters="\@" />
                     </default>
                 </switch>
@@ -101,14 +101,14 @@
                 <Key
                     latin:keyLabel="/"
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter=":"
+                    latin:keyHintLabel=":"
                     latin:popupCharacters=":" />
             </case>
             <default>
                 <Key
                     latin:keyLabel="\'"
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="&quot;"
+                    latin:keyHintLabel="&quot;"
                     latin:popupCharacters="&quot;" />
             </default>
         </switch>
@@ -123,7 +123,7 @@
                 <Key
                     latin:keyLabel="-"
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="_"
+                    latin:keyHintLabel="_"
                     latin:popupCharacters="_" />
             </default>
         </switch>
diff --git a/java/res/xml-sw768dp/kbd_row3_right2.xml b/java/res/xml-sw768dp/kbd_row3_right2.xml
index e90de8e..2545316 100644
--- a/java/res/xml-sw768dp/kbd_row3_right2.xml
+++ b/java/res/xml-sw768dp/kbd_row3_right2.xml
@@ -34,12 +34,12 @@
             <Key
                 latin:keyLabel=","
                 latin:keyLabelOption="hasUppercaseLetter"
-                latin:keyHintLetter="!"
+                latin:keyHintLabel="!"
                 latin:popupCharacters="!" />
             <Key
                 latin:keyLabel="."
                 latin:keyLabelOption="hasUppercaseLetter"
-                latin:keyHintLetter="\?"
+                latin:keyHintLabel="\?"
                 latin:popupCharacters="\?" />
         </default>
     </switch>
diff --git a/java/res/xml-sw768dp/kbd_rows_azerty.xml b/java/res/xml-sw768dp/kbd_rows_azerty.xml
index 3bcba00..373bda9 100644
--- a/java/res/xml-sw768dp/kbd_rows_azerty.xml
+++ b/java/res/xml-sw768dp/kbd_rows_azerty.xml
@@ -134,7 +134,7 @@
         <Key
             latin:keyLabel="\'"
             latin:keyLabelOption="hasUppercaseLetter"
-            latin:keyHintLetter=":"
+            latin:keyHintLabel=":"
             latin:popupCharacters=":" />
         <switch>
             <case
@@ -149,12 +149,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml-sw768dp/kbd_rows_qwertz.xml b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
index 8d5f1e6..6567c31 100644
--- a/java/res/xml-sw768dp/kbd_rows_qwertz.xml
+++ b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
@@ -107,12 +107,12 @@
                 <Key
                     latin:keyLabel=","
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="!"
+                    latin:keyHintLabel="!"
                     latin:popupCharacters="!" />
                 <Key
                     latin:keyLabel="."
                     latin:keyLabelOption="hasUppercaseLetter"
-                    latin:keyHintLetter="\?"
+                    latin:keyHintLabel="\?"
                     latin:popupCharacters="\?" />
             </default>
         </switch>
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index 63d519c..3d86003 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -46,7 +46,7 @@
         <default>
             <key-style
                 latin:styleName="settingsPopupStyle"
-                latin:keyLabelOption="popupHint"
+                latin:keyLabelOption="hasPopupHint"
                 latin:popupCharacters="\@icon/5|\@integer/key_settings"
                 latin:parentStyle="functionalKeyStyle" />
         </default>
@@ -129,7 +129,7 @@
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
         latin:keyOutputText=":-) "
-        latin:keyLabelOption="popupHint"
+        latin:keyLabelOption="hasPopupHint"
         latin:popupCharacters="@string/alternates_for_smiley"
         latin:maxPopupKeyboardColumn="5"
         latin:parentStyle="functionalKeyStyle" />
diff --git a/java/res/xml/kbd_number.xml b/java/res/xml/kbd_number.xml
index 429b818..4d7b6d9 100644
--- a/java/res/xml/kbd_number.xml
+++ b/java/res/xml/kbd_number.xml
@@ -83,39 +83,48 @@
             >
                 <Key
                     latin:keyLabel="1"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyEdgeFlags="left" />
                 <Key
-                    latin:keyLabel="2" />
+                    latin:keyLabel="2"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="3" />
+                    latin:keyLabel="3"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel="-"
-                    latin:keyStyle="functionalKeyStyle"
+                    latin:keyStyle="numFunctionalKeyStyle"
                     latin:keyWidth="fillRight"
                     latin:keyEdgeFlags="right" />
             </Row>
             <Row>
                 <Key
                     latin:keyLabel="4"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyEdgeFlags="left" />
                 <Key
-                    latin:keyLabel="5" />
+                    latin:keyLabel="5"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="6" />
+                    latin:keyLabel="6"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyLabel=","
-                    latin:keyStyle="functionalKeyStyle"
+                    latin:keyStyle="numFunctionalKeyStyle"
                     latin:keyWidth="fillRight"
                     latin:keyEdgeFlags="right" />
             </Row>
             <Row>
                 <Key
                     latin:keyLabel="7"
+                    latin:keyStyle="numKeyStyle"
                     latin:keyEdgeFlags="left" />
                 <Key
-                    latin:keyLabel="8" />
+                    latin:keyLabel="8"
+                    latin:keyStyle="numKeyStyle"/>
                 <Key
-                    latin:keyLabel="9" />
+                    latin:keyLabel="9"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="deleteKeyStyle"
                     latin:keyWidth="fillRight"
@@ -128,9 +137,11 @@
                     latin:keyStyle="numSpaceKeyStyle"
                     latin:keyEdgeFlags="left" />
                 <Key
-                    latin:keyLabel="0" />
+                    latin:keyLabel="0"
+                    latin:keyStyle="numKeyStyle" />
                 <Key
-                    latin:keyLabel="." />
+                    latin:keyLabel="."
+                    latin:keyStyle="numKeyStyle" />
                 <Key
                     latin:keyStyle="returnKeyStyle"
                     latin:keyWidth="fillRight"
diff --git a/java/res/xml/kbd_numkey_styles.xml b/java/res/xml/kbd_numkey_styles.xml
index 3a26a02..657bfbc 100644
--- a/java/res/xml/kbd_numkey_styles.xml
+++ b/java/res/xml/kbd_numkey_styles.xml
@@ -22,71 +22,83 @@
     xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
 >
     <key-style
+        latin:styleName="numKeyStyle"
+        latin:keyLabelOption="largeLetter|followKeyLetterRatio" />
+    <key-style
+        latin:styleName="numModeKeyStyle"
+        latin:keyLabelOption="fontNormal|followKeyLetterRatio" />
+    <key-style
+        latin:styleName="numFunctionalKeyStyle"
+        latin:keyLabelOption="largeLetter|followKeyLetterRatio"
+        latin:parentStyle="functionalKeyStyle" />
+    <key-style
+        latin:styleName="numberKeyStyle"
+        latin:keyLabelOption="alignLeftOfCenter|hasHintLabel"
+        latin:parentStyle="numKeyStyle" />
+    <key-style
         latin:styleName="num0KeyStyle"
         latin:code="48"
-        latin:keyIcon="iconNum0Key" />
+        latin:keyLabel="0 +"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num1KeyStyle"
-        latin:code="49"
-        latin:keyIcon="iconNum1Key" />
+        latin:keyLabel="1"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num2KeyStyle"
-        latin:code="50"
-        latin:keyIcon="iconNum2Key" />
+        latin:keyLabel="2"
+        latin:keyHintLabel="ABC"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num3KeyStyle"
-        latin:code="51"
-        latin:keyIcon="iconNum3Key" />
+        latin:keyLabel="3"
+        latin:keyHintLabel="DEF"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num4KeyStyle"
-        latin:code="52"
-        latin:keyIcon="iconNum4Key" />
+        latin:keyLabel="4"
+        latin:keyHintLabel="GHI"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num5KeyStyle"
-        latin:code="53"
-        latin:keyIcon="iconNum5Key" />
+        latin:keyLabel="5"
+        latin:keyHintLabel="JKL"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num6KeyStyle"
-        latin:code="54"
-        latin:keyIcon="iconNum6Key" />
+        latin:keyLabel="6"
+        latin:keyHintLabel="MNO"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num7KeyStyle"
-        latin:code="55"
-        latin:keyIcon="iconNum7Key" />
+        latin:keyLabel="7"
+        latin:keyHintLabel="PQRS"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num8KeyStyle"
-        latin:code="56"
-        latin:keyIcon="iconNum8Key" />
+        latin:keyLabel="8"
+        latin:keyHintLabel="TUV"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="num9KeyStyle"
-        latin:code="57"
-        latin:keyIcon="iconNum9Key" />
-    <key-style
-        latin:styleName="numLabelStyle"
-        latin:keyLabelOption="fontFixedWidth|followKeyLetterRatio" />
-    <key-style
-        latin:styleName="numLabelFunctionalStyle"
-        latin:keyLabelOption="fontFixedWidth|followKeyLetterRatio"
-        latin:parentStyle="functionalKeyStyle" />
+        latin:keyLabel="9"
+        latin:keyHintLabel="WXYZ"
+        latin:parentStyle="numberKeyStyle" />
     <key-style
         latin:styleName="numStarKeyStyle"
         latin:code="42"
         latin:keyLabel="\uff0a"
-        latin:parentStyle="numLabelStyle" />
-    <key-style
-        latin:styleName="numPoundKeyStyle"
-        latin:keyLabel="#"
-        latin:parentStyle="numLabelStyle" />
+        latin:parentStyle="numKeyStyle" />
     <key-style
         latin:styleName="numSwitchToAltKeyStyle"
         latin:code="@integer/key_switch_alpha_symbol"
         latin:keyLabel="@string/label_to_phone_symbols_key"
-        latin:parentStyle="numLabelStyle" />
+        latin:parentStyle="numModeKeyStyle" />
     <key-style
         latin:styleName="numSwitchToNumericKeyStyle"
         latin:code="@integer/key_switch_alpha_symbol"
         latin:keyLabel="@string/label_to_phone_numeric_key"
-        latin:parentStyle="numLabelStyle" />
+        latin:parentStyle="numModeKeyStyle" />
     <key-style
         latin:styleName="numSpaceKeyStyle"
         latin:code="@integer/key_space"
diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml
index 794528c..c6508fb 100644
--- a/java/res/xml/kbd_phone.xml
+++ b/java/res/xml/kbd_phone.xml
@@ -38,7 +38,7 @@
             latin:keyStyle="num3KeyStyle" />
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelFunctionalStyle"
+            latin:keyStyle="numFunctionalKeyStyle"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
     </Row>
@@ -52,7 +52,7 @@
             latin:keyStyle="num6KeyStyle" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelFunctionalStyle"
+            latin:keyStyle="numFunctionalKeyStyle"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
     </Row>
diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml
index 1405c3c..5d99122 100644
--- a/java/res/xml/kbd_phone_symbols.xml
+++ b/java/res/xml/kbd_phone_symbols.xml
@@ -31,36 +31,36 @@
     >
         <Key
             latin:keyLabel="("
-            latin:keyStyle="numLabelStyle"
+            latin:keyStyle="numKeyStyle"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="/"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyLabel=")"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyLabel="-"
-            latin:keyStyle="numLabelFunctionalStyle"
+            latin:keyStyle="numFunctionalKeyStyle"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
     </Row>
     <Row>
         <Key
             latin:keyLabel="N"
-            latin:keyStyle="numLabelStyle"
             latin:keyEdgeFlags="left" />
         <!-- Pause is a comma. Check PhoneNumberUtils.java to see if this 
             has changed. -->
         <Key
             latin:code="44"
-            latin:keyLabel="Pause" />
+            latin:keyLabel="@string/label_pause_key"
+            latin:keyLabelOption="followKeyHintLabelRatio" />
         <Key
             latin:keyLabel=","
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyLabel="."
-            latin:keyStyle="numLabelFunctionalStyle"
+            latin:keyStyle="numFunctionalKeyStyle"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
     </Row>
@@ -71,10 +71,11 @@
         <!-- Wait is a semicolon. -->
         <Key
             latin:code="59"
-            latin:keyLabel="Wait" />
+            latin:keyLabel="@string/label_wait_key"
+            latin:keyLabelOption="followKeyHintLabelRatio" />
         <Key
             latin:keyLabel="#"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyStyle="deleteKeyStyle"
             latin:keyWidth="fillRight"
@@ -88,7 +89,7 @@
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="+"
-            latin:keyStyle="numLabelStyle" />
+            latin:keyStyle="numKeyStyle" />
         <Key
             latin:keyStyle="numSpaceKeyStyle" />
         <Key
diff --git a/java/res/xml/kbd_qwerty_row1.xml b/java/res/xml/kbd_qwerty_row1.xml
index 8c3669d..cfd2efd 100644
--- a/java/res/xml/kbd_qwerty_row1.xml
+++ b/java/res/xml/kbd_qwerty_row1.xml
@@ -27,44 +27,44 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="@string/alternates_for_q"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="w"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="@string/alternates_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="@string/alternates_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="@string/alternates_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="@string/alternates_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="@string/alternates_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="@string/alternates_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="@string/alternates_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="@string/alternates_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml
index 0951339..ff2ef3a 100644
--- a/java/res/xml/kbd_qwerty_row4.xml
+++ b/java/res/xml/kbd_qwerty_row4.xml
@@ -47,7 +47,7 @@
                     >
                         <Key
                             latin:keyStyle="tabKeyStyle"
-                            latin:keyLabelOption="popupHint"
+                            latin:keyLabelOption="hasPopupHint"
                             latin:popupCharacters="@string/alternates_for_web_tab_punctuation"
                             latin:keyWidth="9.2%p"
                             latin:maxPopupKeyboardColumn="8" />
@@ -55,7 +55,7 @@
                     <default>
                         <Key
                             latin:keyLabel="."
-                            latin:keyLabelOption="popupHint"
+                            latin:keyLabelOption="hasPopupHint"
                             latin:popupCharacters="@string/alternates_for_punctuation"
                             latin:keyWidth="9.2%p"
                             latin:maxPopupKeyboardColumn="7"
@@ -80,14 +80,14 @@
                     >
                         <Key
                             latin:keyStyle="tabKeyStyle"
-                            latin:keyLabelOption="popupHint"
+                            latin:keyLabelOption="hasPopupHint"
                             latin:popupCharacters="@string/alternates_for_web_tab_punctuation"
                             latin:maxPopupKeyboardColumn="8" />
                     </case>
                     <default>
                         <Key
                             latin:keyLabel="."
-                            latin:keyLabelOption="popupHint"
+                            latin:keyLabelOption="hasPopupHint"
                             latin:popupCharacters="@string/alternates_for_punctuation"
                             latin:maxPopupKeyboardColumn="7"
                             latin:keyStyle="functionalKeyStyle" />
diff --git a/java/res/xml/kbd_rows_azerty.xml b/java/res/xml/kbd_rows_azerty.xml
index 9825c4a..96efb66 100644
--- a/java/res/xml/kbd_rows_azerty.xml
+++ b/java/res/xml/kbd_rows_azerty.xml
@@ -29,44 +29,44 @@
     >
         <Key
             latin:keyLabel="a"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="@string/alternates_for_a"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="z"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="@string/alternates_for_z" />
         <Key
             latin:keyLabel="e"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="@string/alternates_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="@string/alternates_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="@string/alternates_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="@string/alternates_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="@string/alternates_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="@string/alternates_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="@string/alternates_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
diff --git a/java/res/xml/kbd_rows_qwertz.xml b/java/res/xml/kbd_rows_qwertz.xml
index 0d70b26..347ef60 100644
--- a/java/res/xml/kbd_rows_qwertz.xml
+++ b/java/res/xml/kbd_rows_qwertz.xml
@@ -29,44 +29,44 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="@string/alternates_for_q"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="w"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="@string/alternates_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="@string/alternates_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="@string/alternates_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="@string/alternates_for_t" />
         <Key
             latin:keyLabel="z"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="@string/alternates_for_z" />
         <Key
             latin:keyLabel="u"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="@string/alternates_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="@string/alternates_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="@string/alternates_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p"
             latin:keyWidth="fillRight"
             latin:keyEdgeFlags="right" />
diff --git a/java/res/xml/kbd_rows_russian.xml b/java/res/xml/kbd_rows_russian.xml
index ff9fef4..2c10c31 100644
--- a/java/res/xml/kbd_rows_russian.xml
+++ b/java/res/xml/kbd_rows_russian.xml
@@ -29,45 +29,45 @@
     >
         <Key
             latin:keyLabel="й"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="1"
             latin:keyWidth="8.75%p"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="ц"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="2" />
         <Key
             latin:keyLabel="у"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="3" />
         <Key
             latin:keyLabel="к"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="4" />
         <Key
             latin:keyLabel="е"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="@string/alternates_for_cyrillic_e" />
         <Key
             latin:keyLabel="н"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="6" />
         <Key
             latin:keyLabel="г"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="7" />
         <Key
             latin:keyLabel="ш"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="8" />
         <Key
             latin:keyLabel="щ"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="9" />
         <Key
             latin:keyLabel="з"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="0" />
         <Key
             latin:keyLabel="Ñ…"
diff --git a/java/res/xml/kbd_rows_scandinavian.xml b/java/res/xml/kbd_rows_scandinavian.xml
index 2d7dcde..3f25601 100644
--- a/java/res/xml/kbd_rows_scandinavian.xml
+++ b/java/res/xml/kbd_rows_scandinavian.xml
@@ -29,45 +29,45 @@
     >
         <Key
             latin:keyLabel="q"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="@string/alternates_for_q"
             latin:keyWidth="8.75%p"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="w"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="@string/alternates_for_w" />
         <Key
             latin:keyLabel="e"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="@string/alternates_for_e" />
         <Key
             latin:keyLabel="r"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="@string/alternates_for_r" />
         <Key
             latin:keyLabel="t"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="@string/alternates_for_t" />
         <Key
             latin:keyLabel="y"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="@string/alternates_for_y" />
         <Key
             latin:keyLabel="u"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="@string/alternates_for_u" />
         <Key
             latin:keyLabel="i"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="@string/alternates_for_i" />
         <Key
             latin:keyLabel="o"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="@string/alternates_for_o" />
         <Key
             latin:keyLabel="p"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="@string/alternates_for_p" />
         <Key
             latin:keyLabel="å"
diff --git a/java/res/xml/kbd_rows_serbian.xml b/java/res/xml/kbd_rows_serbian.xml
index 9f4b6a2..2bed276 100644
--- a/java/res/xml/kbd_rows_serbian.xml
+++ b/java/res/xml/kbd_rows_serbian.xml
@@ -29,44 +29,44 @@
     >
         <Key
             latin:keyLabel="Ñ™"
-            latin:keyHintLetter="1"
+            latin:keyHintLabel="1"
             latin:popupCharacters="1"
             latin:keyEdgeFlags="left" />
         <Key
             latin:keyLabel="Ñš"
-            latin:keyHintLetter="2"
+            latin:keyHintLabel="2"
             latin:popupCharacters="2" />
         <Key
             latin:keyLabel="е"
-            latin:keyHintLetter="3"
+            latin:keyHintLabel="3"
             latin:popupCharacters="3" />
         <Key
             latin:keyLabel="Ñ€"
-            latin:keyHintLetter="4"
+            latin:keyHintLabel="4"
             latin:popupCharacters="4" />
         <Key
             latin:keyLabel="Ñ‚"
-            latin:keyHintLetter="5"
+            latin:keyHintLabel="5"
             latin:popupCharacters="5" />
         <Key
             latin:keyLabel="з"
-            latin:keyHintLetter="6"
+            latin:keyHintLabel="6"
             latin:popupCharacters="6" />
         <Key
             latin:keyLabel="у"
-            latin:keyHintLetter="7"
+            latin:keyHintLabel="7"
             latin:popupCharacters="7" />
         <Key
             latin:keyLabel="и"
-            latin:keyHintLetter="8"
+            latin:keyHintLabel="8"
             latin:popupCharacters="8" />
         <Key
             latin:keyLabel="о"
-            latin:keyHintLetter="9"
+            latin:keyHintLabel="9"
             latin:popupCharacters="9" />
         <Key
             latin:keyLabel="п"
-            latin:keyHintLetter="0"
+            latin:keyHintLabel="0"
             latin:popupCharacters="0" />
         <Key
             latin:keyLabel="ш"
diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml
index 9323d4f..68b79e8 100644
--- a/java/res/xml/kbd_symbols_row4.xml
+++ b/java/res/xml/kbd_symbols_row4.xml
@@ -43,7 +43,7 @@
                     latin:keyWidth="35.83%p" />
                 <Key
                     latin:keyLabel="."
-                    latin:keyLabelOption="popupHint"
+                    latin:keyLabelOption="hasPopupHint"
                     latin:popupCharacters="@string/alternates_for_punctuation"
                     latin:keyWidth="9.2%p"
                     latin:maxPopupKeyboardColumn="7"
@@ -62,7 +62,7 @@
                     latin:keyWidth="50%p" />
                 <Key
                     latin:keyLabel="."
-                    latin:keyLabelOption="popupHint"
+                    latin:keyLabelOption="hasPopupHint"
                     latin:popupCharacters="@string/alternates_for_punctuation"
                     latin:maxPopupKeyboardColumn="7"
                     latin:keyStyle="functionalKeyStyle" />
diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 154f4af..a31911d 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -134,7 +134,7 @@
                 return context.getString(mKeyLabelMap.get(label));
             } else if (label.length() == 1
                     || (keyboard.isManualTemporaryUpperCase() && !TextUtils
-                            .isEmpty(key.mHintLetter))) {
+                            .isEmpty(key.mHintLabel))) {
                 return getDescriptionForKeyCode(context, keyboard, key);
             } else {
                 return label;
@@ -181,8 +181,8 @@
      * @return the key code for the specified key
      */
     private int getCorrectKeyCode(Keyboard keyboard, Key key) {
-        if (keyboard.isManualTemporaryUpperCase() && !TextUtils.isEmpty(key.mHintLetter)) {
-            return key.mHintLetter.charAt(0);
+        if (keyboard.isManualTemporaryUpperCase() && !TextUtils.isEmpty(key.mHintLabel)) {
+            return key.mHintLabel.charAt(0);
         } else {
             return key.mCode;
         }
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 2850c95..872fbf8 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -19,17 +19,18 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
+import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.util.Xml;
 
 import com.android.inputmethod.keyboard.internal.KeyStyles;
+import com.android.inputmethod.keyboard.internal.KeyStyles.KeyStyle;
 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
 import com.android.inputmethod.keyboard.internal.KeyboardParser;
+import com.android.inputmethod.keyboard.internal.KeyboardParser.ParseException;
 import com.android.inputmethod.keyboard.internal.PopupCharactersParser;
 import com.android.inputmethod.keyboard.internal.Row;
-import com.android.inputmethod.keyboard.internal.KeyStyles.KeyStyle;
-import com.android.inputmethod.keyboard.internal.KeyboardParser.ParseException;
 import com.android.inputmethod.latin.R;
 
 import java.util.ArrayList;
@@ -45,18 +46,22 @@
 
     /** Label to display */
     public final CharSequence mLabel;
-    /** Hint letter to display on the key in conjunction with the label */
-    public final CharSequence mHintLetter;
+    /** Hint label to display on the key in conjunction with the label */
+    public final CharSequence mHintLabel;
     /** Option of the label */
     public final int mLabelOption;
     public static final int LABEL_OPTION_ALIGN_LEFT = 0x01;
     public static final int LABEL_OPTION_ALIGN_RIGHT = 0x02;
-    public static final int LABEL_OPTION_ALIGN_BOTTOM = 0x08;
-    public static final int LABEL_OPTION_FONT_NORMAL = 0x10;
-    public static final int LABEL_OPTION_FONT_FIXED_WIDTH = 0x20;
-    public static final int LABEL_OPTION_FOLLOW_KEY_LETTER_RATIO = 0x40;
-    private static final int LABEL_OPTION_POPUP_HINT = 0x80;
-    private static final int LABEL_OPTION_HAS_UPPERCASE_LETTER = 0x100;
+    public static final int LABEL_OPTION_ALIGN_BOTTOM = 0x04;
+    public static final int LABEL_OPTION_ALIGN_LEFT_OF_CENTER = 0x08;
+    private static final int LABEL_OPTION_LARGE_LETTER = 0x10;
+    private static final int LABEL_OPTION_FONT_NORMAL = 0x20;
+    private static final int LABEL_OPTION_FONT_MONO_SPACE = 0x40;
+    private static final int LABEL_OPTION_FOLLOW_KEY_LETTER_RATIO = 0x80;
+    private static final int LABEL_OPTION_FOLLOW_KEY_HINT_LABEL_RATIO = 0x100;
+    private static final int LABEL_OPTION_HAS_POPUP_HINT = 0x200;
+    private static final int LABEL_OPTION_HAS_UPPERCASE_LETTER = 0x400;
+    private static final int LABEL_OPTION_HAS_HINT_LABEL = 0x800;
 
     /** Icon to display instead of a label. Icon takes precedence over a label */
     private Drawable mIcon;
@@ -160,7 +165,7 @@
         mVisualInsetsLeft = mVisualInsetsRight = 0;
         mWidth = width - mGap;
         mEdgeFlags = edgeFlags;
-        mHintLetter = null;
+        mHintLabel = null;
         mLabelOption = 0;
         mFunctional = false;
         mSticky = false;
@@ -282,7 +287,7 @@
                     keyAttr, R.styleable.Keyboard_Key_keyIcon,
                     KeyboardIconsSet.ICON_UNDEFINED));
             Keyboard.setDefaultBounds(mIcon);
-            mHintLetter = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLetter);
+            mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
 
             mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
             mLabelOption = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelOption, 0);
@@ -309,14 +314,43 @@
         }
     }
 
+    public Typeface selectTypeface(Typeface defaultTypeface) {
+        // TODO: Handle "bold" here too?
+        if ((mLabelOption & LABEL_OPTION_FONT_NORMAL) != 0) {
+            return Typeface.DEFAULT;
+        } else if ((mLabelOption & LABEL_OPTION_FONT_MONO_SPACE) != 0) {
+            return Typeface.MONOSPACE;
+        } else {
+            return defaultTypeface;
+        }
+    }
+
+    public int selectTextSize(int letter, int largeLetter, int label, int hintLabel) {
+        if (mLabel.length() > 1
+                && (mLabelOption & (LABEL_OPTION_FOLLOW_KEY_LETTER_RATIO
+                        | LABEL_OPTION_FOLLOW_KEY_HINT_LABEL_RATIO)) == 0) {
+            return label;
+        } else if ((mLabelOption & LABEL_OPTION_FOLLOW_KEY_HINT_LABEL_RATIO) != 0) {
+            return hintLabel;
+        } else if ((mLabelOption & LABEL_OPTION_LARGE_LETTER) != 0) {
+            return largeLetter;
+        } else {
+            return letter;
+        }
+    }
+
     public boolean hasPopupHint() {
-        return (mLabelOption & LABEL_OPTION_POPUP_HINT) != 0;
+        return (mLabelOption & LABEL_OPTION_HAS_POPUP_HINT) != 0;
     }
 
     public boolean hasUppercaseLetter() {
         return (mLabelOption & LABEL_OPTION_HAS_UPPERCASE_LETTER) != 0;
     }
 
+    public boolean hasHintLabel() {
+        return (mLabelOption & LABEL_OPTION_HAS_HINT_LABEL) != 0;
+    }
+
     private static boolean isDigitPopupCharacter(CharSequence label) {
         return label != null && label.length() == 1 && Character.isDigit(label.charAt(0));
     }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 6a60a9d..da738b2 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -66,16 +66,20 @@
  * @attr ref R.styleable#KeyboardView_keyBackground
  * @attr ref R.styleable#KeyboardView_keyHysteresisDistance
  * @attr ref R.styleable#KeyboardView_keyLetterRatio
+ * @attr ref R.styleable#KeyboardView_keyLargeLetterRatio
  * @attr ref R.styleable#KeyboardView_keyLabelRatio
  * @attr ref R.styleable#KeyboardView_keyHintLetterRatio
  * @attr ref R.styleable#KeyboardView_keyUppercaseLetterRatio
+ * @attr ref R.styleable#KeyboardView_keyHintLabelRatio
  * @attr ref R.styleable#KeyboardView_keyTextStyle
  * @attr ref R.styleable#KeyboardView_keyPreviewLayout
+ * @attr ref R.styleable#KeyboardView_keyPreviewTextRatio
  * @attr ref R.styleable#KeyboardView_keyPreviewOffset
  * @attr ref R.styleable#KeyboardView_keyPreviewHeight
  * @attr ref R.styleable#KeyboardView_keyTextColor
  * @attr ref R.styleable#KeyboardView_keyTextColorDisabled
  * @attr ref R.styleable#KeyboardView_keyHintLetterColor
+ * @attr ref R.styleable#KeyboardView_keyHintLabelColor
  * @attr ref R.styleable#KeyboardView_keyUppercaseLetterInactivatedColor
  * @attr ref R.styleable#KeyboardView_keyUppercaseLetterActivatedColor
  * @attr ref R.styleable#KeyboardView_verticalCorrection
@@ -96,42 +100,51 @@
 
     // Miscellaneous constants
     private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable };
-    private static final int HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL = -1;
 
     // XML attribute
-    private final float mKeyLetterRatio;
     private final int mKeyTextColor;
     private final int mKeyTextInactivatedColor;
     private final Typeface mKeyTextStyle;
+    private final float mKeyLetterRatio;
+    private final float mKeyLargeLetterRatio;
     private final float mKeyLabelRatio;
     private final float mKeyHintLetterRatio;
     private final float mKeyUppercaseLetterRatio;
+    private final float mKeyHintLabelRatio;
     private final int mShadowColor;
     private final float mShadowRadius;
     private final Drawable mKeyBackground;
     private final float mBackgroundDimAmount;
     private final float mKeyHysteresisDistance;
     private final float mVerticalCorrection;
+    private final Drawable mPreviewBackground;
+    private final Drawable mPreviewLeftBackground;
+    private final Drawable mPreviewRightBackground;
+    private final Drawable mPreviewSpacebarBackground;
+    private final int mPreviewTextColor;
+    private final float mPreviewTextRatio;
     private final int mPreviewOffset;
     private final int mPreviewHeight;
     private final int mPopupLayout;
-    private final Drawable mKeyPopupHintIcon;
     private final int mKeyHintLetterColor;
+    private final int mKeyHintLabelColor;
     private final int mKeyUppercaseLetterInactivatedColor;
     private final int mKeyUppercaseLetterActivatedColor;
 
+    // HORIZONTAL ELLIPSIS "...", character for popup hint.
+    private static final String POPUP_HINT_CHAR = "\u2026";
+
     // Main keyboard
     private Keyboard mKeyboard;
     private int mKeyLetterSize;
+    private int mKeyLargeLetterSize;
     private int mKeyLabelSize;
     private int mKeyHintLetterSize;
     private int mKeyUppercaseLetterSize;
+    private int mKeyHintLabelSize;
 
     // Key preview
-    private boolean mInForeground;
-    private TextView mPreviewText;
-    private Drawable mPreviewBackground;
-    private float mPreviewTextRatio;
+    private final TextView mPreviewText;
     private int mPreviewTextSize;
     private boolean mShowKeyPreviewPopup = true;
     private final int mDelayBeforePreview;
@@ -182,7 +195,6 @@
     private Canvas mCanvas;
     private final Paint mPaint = new Paint();
     private final Rect mPadding = new Rect();
-    private final Rect mTextBounds = new Rect();
     // This map caches key label text height in pixel as value and key label text size as map key.
     private final HashMap<Integer, Integer> mTextHeightCache = new HashMap<Integer, Integer>();
     // This map caches key label text width in pixel as value and key label text size as map key.
@@ -193,6 +205,9 @@
     private static final String KEY_LABEL_REFERENCE_CHAR = "M";
     private final int mKeyLabelHorizontalPadding;
 
+    private static final int MEASURESPEC_UNSPECIFIED = MeasureSpec.makeMeasureSpec(
+            0, MeasureSpec.UNSPECIFIED);
+
     private final UIHandler mHandler = new UIHandler(this);
 
     public static class UIHandler extends StaticInnerHandlerWrapper<KeyboardView> {
@@ -334,19 +349,35 @@
                 R.styleable.KeyboardView_keyHysteresisDistance, 0);
         mVerticalCorrection = a.getDimensionPixelOffset(
                 R.styleable.KeyboardView_verticalCorrection, 0);
+        mPreviewTextColor = a.getColor(R.styleable.KeyboardView_keyPreviewTextColor, 0);
         final int previewLayout = a.getResourceId(R.styleable.KeyboardView_keyPreviewLayout, 0);
+        if (previewLayout != 0) {
+            mPreviewText = (TextView) LayoutInflater.from(context).inflate(previewLayout, null);
+            mPreviewText.setTextColor(mPreviewTextColor);
+        } else {
+            mPreviewText = null;
+            mShowKeyPreviewPopup = false;
+        }
+        mPreviewBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewBackground);
+        mPreviewLeftBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewLeftBackground);
+        mPreviewRightBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewRightBackground);
+        mPreviewSpacebarBackground = a.getDrawable(
+                R.styleable.KeyboardView_keyPreviewSpacebarBackground);
         mPreviewOffset = a.getDimensionPixelOffset(R.styleable.KeyboardView_keyPreviewOffset, 0);
         mPreviewHeight = a.getDimensionPixelSize(R.styleable.KeyboardView_keyPreviewHeight, 80);
         mKeyLetterRatio = getRatio(a, R.styleable.KeyboardView_keyLetterRatio);
+        mKeyLargeLetterRatio = getRatio(a, R.styleable.KeyboardView_keyLargeLetterRatio);
         mKeyLabelRatio = getRatio(a, R.styleable.KeyboardView_keyLabelRatio);
         mKeyHintLetterRatio = getRatio(a, R.styleable.KeyboardView_keyHintLetterRatio);
         mKeyUppercaseLetterRatio = getRatio(a,
                 R.styleable.KeyboardView_keyUppercaseLetterRatio);
+        mKeyHintLabelRatio = getRatio(a, R.styleable.KeyboardView_keyHintLabelRatio);
+        mPreviewTextRatio = getRatio(a, R.styleable.KeyboardView_keyPreviewTextRatio);
         mKeyTextColor = a.getColor(R.styleable.KeyboardView_keyTextColor, 0xFF000000);
         mKeyTextInactivatedColor = a.getColor(
                 R.styleable.KeyboardView_keyTextInactivatedColor, 0xFF000000);
-        mKeyPopupHintIcon = a.getDrawable(R.styleable.KeyboardView_keyPopupHintIcon);
         mKeyHintLetterColor = a.getColor(R.styleable.KeyboardView_keyHintLetterColor, 0);
+        mKeyHintLabelColor = a.getColor(R.styleable.KeyboardView_keyHintLabelColor, 0);
         mKeyUppercaseLetterInactivatedColor = a.getColor(
                 R.styleable.KeyboardView_keyUppercaseLetterInactivatedColor, 0);
         mKeyUppercaseLetterActivatedColor = a.getColor(
@@ -362,13 +393,6 @@
 
         final Resources res = getResources();
 
-        if (previewLayout != 0) {
-            mPreviewText = (TextView) LayoutInflater.from(context).inflate(previewLayout, null);
-            mPreviewBackground = mPreviewText.getBackground();
-            mPreviewTextRatio = getRatio(res, R.fraction.key_preview_text_ratio);
-        } else {
-            mShowKeyPreviewPopup = false;
-        }
         mDelayBeforePreview = res.getInteger(R.integer.config_delay_before_preview);
         mDelayAfterPreview = res.getInteger(R.integer.config_delay_after_preview);
         mKeyLabelHorizontalPadding = (int)res.getDimension(
@@ -462,11 +486,6 @@
         return a.getFraction(index, 1000, 1000, 1) / 1000.0f;
     }
 
-    // Read fraction value in resource as float.
-    private static float getRatio(Resources res, int id) {
-        return res.getFraction(id, 1000, 1000) / 1000.0f;
-    }
-
     public void startIgnoringDoubleTap() {
         if (ENABLE_CAPSLOCK_BY_DOUBLETAP)
             mHandler.startIgnoringDoubleTap();
@@ -521,10 +540,12 @@
         mPopupPanelCache.clear();
         final int keyHeight = keyboard.getRowHeight() - keyboard.getVerticalGap();
         mKeyLetterSize = (int)(keyHeight * mKeyLetterRatio);
+        mKeyLargeLetterSize = (int)(keyHeight * mKeyLargeLetterRatio);
         mKeyLabelSize = (int)(keyHeight * mKeyLabelRatio);
         mKeyHintLetterSize = (int)(keyHeight * mKeyHintLetterRatio);
         mKeyUppercaseLetterSize = (int)(
                 keyHeight * mKeyUppercaseLetterRatio);
+        mKeyHintLabelSize = (int)(keyHeight * mKeyHintLabelRatio);
         mPreviewTextSize = (int)(keyHeight * mPreviewTextRatio);
     }
 
@@ -587,7 +608,7 @@
     protected CharSequence adjustCase(CharSequence label) {
         if (mKeyboard.isShiftedOrShiftLocked() && label != null && label.length() < 3
                 && Character.isLowerCase(label.charAt(0))) {
-            return label.toString().toUpperCase();
+            return label.toString().toUpperCase(mKeyboard.mId.mLocale);
         }
         return label;
     }
@@ -689,6 +710,8 @@
         final int kbdPaddingTop = getPaddingTop();
         final int keyDrawX = key.mX + key.mVisualInsetsLeft;
         final int keyDrawWidth = key.mWidth - key.mVisualInsetsLeft - key.mVisualInsetsRight;
+        final int centerX = (keyDrawWidth + padding.left - padding.right) / 2;
+        final float centerY = (key.mHeight + padding.top - padding.bottom) / 2;
         final int rowHeight = padding.top + key.mHeight;
         final boolean isManualTemporaryUpperCase = mKeyboard.isManualTemporaryUpperCase();
 
@@ -704,47 +727,48 @@
         keyBackground.draw(canvas);
 
         // Draw key label.
+        int positionX = centerX;
         if (key.mLabel != null) {
             // Switch the character to uppercase if shift is pressed
-            final String label = key.mLabel == null ? null : adjustCase(key.mLabel).toString();
-            // For characters, use large font. For labels like "Done", use small font.
-            final int labelSize = getLabelSizeAndSetPaint(label, key.mLabelOption, paint);
-            final int labelCharHeight = getLabelCharHeight(labelSize, paint);
+            final CharSequence label = key.mLabel == null ? null : adjustCase(key.mLabel);
+            // For characters, use large font. For labels like "Done", use smaller font.
+            paint.setTypeface(key.selectTypeface(mKeyTextStyle));
+            final int labelSize = key.selectTextSize(mKeyLetterSize, mKeyLargeLetterSize,
+                    mKeyLabelSize, mKeyHintLabelSize);
+            paint.setTextSize(labelSize);
+            final int labelCharHeight = getLabelCharHeight(paint);
+            final int labelCharWidth = getLabelCharWidth(paint);
 
             // Vertical label text alignment.
             final float baseline;
+            // TODO: Generalize the following calculations.
             if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_BOTTOM) != 0) {
                 baseline = key.mHeight - labelCharHeight * KEY_LABEL_VERTICAL_PADDING_FACTOR;
-                if (DEBUG_SHOW_ALIGN)
-                    drawHorizontalLine(canvas, (int)baseline, keyDrawWidth, 0xc0008000,
-                            new Paint());
             } else { // Align center
-                final float centerY = (key.mHeight + padding.top - padding.bottom) / 2;
                 baseline = centerY + labelCharHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR_CENTER;
-                if (DEBUG_SHOW_ALIGN)
-                    drawHorizontalLine(canvas, (int)baseline, keyDrawWidth, 0xc0008000,
-                            new Paint());
             }
+
             // Horizontal label text alignment
-            final int positionX;
             if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_LEFT) != 0) {
-                positionX = mKeyLabelHorizontalPadding + padding.left;
+                positionX = padding.left + mKeyLabelHorizontalPadding;
                 paint.setTextAlign(Align.LEFT);
-                if (DEBUG_SHOW_ALIGN)
-                    drawVerticalLine(canvas, positionX, rowHeight, 0xc0800080, new Paint());
             } else if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_RIGHT) != 0) {
                 positionX = keyDrawWidth - mKeyLabelHorizontalPadding - padding.right;
                 paint.setTextAlign(Align.RIGHT);
-                if (DEBUG_SHOW_ALIGN)
-                    drawVerticalLine(canvas, positionX, rowHeight, 0xc0808000, new Paint());
+            } else if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_LEFT_OF_CENTER) != 0) {
+                // TODO: Parameterise this?
+                positionX = centerX - labelCharWidth * 7 / 4;
+                paint.setTextAlign(Align.LEFT);
             } else {
-                positionX = (keyDrawWidth + padding.left - padding.right) / 2;
+                positionX = centerX;
                 paint.setTextAlign(Align.CENTER);
-                if (DEBUG_SHOW_ALIGN) {
-                    if (label.length() > 1)
-                        drawVerticalLine(canvas, positionX, rowHeight, 0xc0008080, new Paint());
-                }
             }
+            if (DEBUG_SHOW_ALIGN) {
+                final Paint line = new Paint();
+                drawHorizontalLine(canvas, (int)baseline, keyDrawWidth, 0xc0008000, line);
+                drawVerticalLine(canvas, positionX, rowHeight, 0xc0800080, line);
+            }
+
             if (key.hasUppercaseLetter() && isManualTemporaryUpperCase) {
                 paint.setColor(mKeyTextInactivatedColor);
             } else {
@@ -757,124 +781,128 @@
                 // Make label invisible
                 paint.setColor(Color.TRANSPARENT);
             }
-            canvas.drawText(label, positionX, baseline, paint);
+            canvas.drawText(label, 0, label.length(), positionX, baseline, paint);
             // Turn off drop shadow
             paint.setShadowLayer(0, 0, 0, 0);
+
         }
 
-        // Draw hint letter.
-        if (key.mHintLetter != null) {
-            final String label = key.mHintLetter.toString();
-            final int textColor;
-            final int textSize;
+        // Draw hint label.
+        if (key.mHintLabel != null) {
+            final CharSequence hint = key.mHintLabel;
+            final int hintColor;
+            final int hintSize;
             if (key.hasUppercaseLetter()) {
-                textColor = isManualTemporaryUpperCase ? mKeyUppercaseLetterActivatedColor
+                hintColor = isManualTemporaryUpperCase ? mKeyUppercaseLetterActivatedColor
                         : mKeyUppercaseLetterInactivatedColor;
-                textSize = mKeyUppercaseLetterSize;
+                hintSize = mKeyUppercaseLetterSize;
+            } else if (key.hasHintLabel()) {
+                hintColor = mKeyHintLabelColor;
+                hintSize = mKeyHintLabelSize;
+                paint.setTypeface(Typeface.DEFAULT);
             } else {
-                textColor = mKeyHintLetterColor;
-                textSize = mKeyHintLetterSize;
+                hintColor = mKeyHintLetterColor;
+                hintSize = mKeyHintLetterSize;
             }
-            paint.setColor(textColor);
-            paint.setTextSize(textSize);
+            paint.setColor(hintColor);
+            paint.setTextSize(hintSize);
             // Note: padding.right for drawX?
-            final float drawX = keyDrawWidth - getLabelCharWidth(textSize, paint);
-            final float drawY = -paint.ascent() + padding.top;
-            canvas.drawText(label, drawX, drawY, paint);
+            final float hintX, hintY;
+            if (key.hasHintLabel()) {
+                // TODO: Generalize the following calculations.
+                hintX = positionX + getLabelCharWidth(paint) * 2;
+                hintY = centerY + getLabelCharHeight(paint) / 2;
+            } else {
+                hintX = keyDrawWidth - getLabelCharWidth(paint);
+                hintY = -paint.ascent() + padding.top;
+            }
+            canvas.drawText(hint, 0, hint.length(), hintX, hintY, paint);
         }
 
         // Draw key icon.
         final Drawable icon = key.getIcon();
         if (key.mLabel == null && icon != null) {
-            final int drawableWidth = icon.getIntrinsicWidth();
-            final int drawableHeight = icon.getIntrinsicHeight();
-            final int drawableX;
-            final int drawableY = (key.mHeight + padding.top - padding.bottom - drawableHeight) / 2;
+            final int iconWidth = icon.getIntrinsicWidth();
+            final int iconHeight = icon.getIntrinsicHeight();
+            final int iconX, alignX;
+            final int iconY = (key.mHeight + padding.top - padding.bottom - iconHeight) / 2;
             if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_LEFT) != 0) {
-                drawableX = padding.left + mKeyLabelHorizontalPadding;
-                if (DEBUG_SHOW_ALIGN)
-                    drawVerticalLine(canvas, drawableX, rowHeight, 0xc0800080, new Paint());
+                iconX = padding.left + mKeyLabelHorizontalPadding;
+                alignX = iconX;
             } else if ((key.mLabelOption & Key.LABEL_OPTION_ALIGN_RIGHT) != 0) {
-                drawableX = keyDrawWidth - padding.right - mKeyLabelHorizontalPadding
-                        - drawableWidth;
-                if (DEBUG_SHOW_ALIGN)
-                    drawVerticalLine(canvas, drawableX + drawableWidth, rowHeight,
-                            0xc0808000, new Paint());
+                iconX = keyDrawWidth - padding.right - mKeyLabelHorizontalPadding - iconWidth;
+                alignX = iconX + iconWidth;
             } else { // Align center
-                drawableX = (keyDrawWidth + padding.left - padding.right - drawableWidth) / 2;
-                if (DEBUG_SHOW_ALIGN)
-                    drawVerticalLine(canvas, drawableX + drawableWidth / 2, rowHeight,
-                            0xc0008080, new Paint());
+                iconX = (keyDrawWidth + padding.left - padding.right - iconWidth) / 2;
+                alignX = iconX + iconWidth / 2;
             }
-            drawIcon(canvas, icon, drawableX, drawableY, drawableWidth, drawableHeight);
-            if (DEBUG_SHOW_ALIGN)
-                drawRectangle(canvas, drawableX, drawableY, drawableWidth, drawableHeight,
-                        0x80c00000, new Paint());
+            drawIcon(canvas, icon, iconX, iconY, iconWidth, iconHeight);
+            if (DEBUG_SHOW_ALIGN) {
+                final Paint line = new Paint();
+                drawVerticalLine(canvas, alignX, rowHeight, 0xc0800080, line);
+                drawRectangle(canvas, iconX, iconY, iconWidth, iconHeight, 0x80c00000, line);
+            }
         }
 
-        // Draw popup hint icon "...".
-        // TODO: Draw "..." by text.
+        // Draw popup hint "..." at the bottom right corner of the key.
         if (key.hasPopupHint()) {
-            final int drawableWidth = keyDrawWidth;
-            final int drawableHeight = key.mHeight;
-            final int drawableX = 0;
-            final int drawableY = HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL;
-            final Drawable hintIcon = mKeyPopupHintIcon;
-            drawIcon(canvas, hintIcon, drawableX, drawableY, drawableWidth, drawableHeight);
-            if (DEBUG_SHOW_ALIGN)
-                drawRectangle(canvas, drawableX, drawableY, drawableWidth, drawableHeight,
-                        0x80c0c000, new Paint());
+            paint.setTextSize(mKeyHintLetterSize);
+            paint.setColor(mKeyHintLabelColor);
+            final int hintX = keyDrawWidth - getLabelCharWidth(paint);
+            // Using y-coordinate "key.mHeight - paint.descent()" draws "..." just on the bottom
+            // edge of the key. So we use slightly higher position by multiply descent length by 2.
+            final int hintY = key.mHeight - (int)paint.descent() * 2;
+            canvas.drawText(POPUP_HINT_CHAR, hintX, hintY, paint);
         }
 
         canvas.translate(-keyDrawX - kbdPaddingLeft, -key.mY - kbdPaddingTop);
     }
 
-    public int getLabelSizeAndSetPaint(CharSequence label, int keyLabelOption, Paint paint) {
+    // This method is currently being used only by MiniKeyboardBuilder
+    public int getDefaultLabelSizeAndSetPaint(Paint paint) {
         // For characters, use large font. For labels like "Done", use small font.
-        final int labelSize;
-        final Typeface labelStyle;
-        if ((keyLabelOption & Key.LABEL_OPTION_FONT_NORMAL) != 0) {
-            labelStyle = Typeface.DEFAULT;
-        } else if ((keyLabelOption & Key.LABEL_OPTION_FONT_FIXED_WIDTH) != 0) {
-            labelStyle = Typeface.MONOSPACE;
-        } else {
-            labelStyle = mKeyTextStyle;
-        }
-        if (label.length() > 1) {
-            labelSize = (keyLabelOption & Key.LABEL_OPTION_FOLLOW_KEY_LETTER_RATIO) != 0
-                    ? mKeyLetterSize : mKeyLabelSize;
-        } else {
-            labelSize = mKeyLetterSize;
-        }
+        final int labelSize = mKeyLabelSize;
         paint.setTextSize(labelSize);
-        paint.setTypeface(labelStyle);
+        paint.setTypeface(mKeyTextStyle);
         return labelSize;
     }
 
-    private int getLabelCharHeight(int labelSize, Paint paint) {
-        Integer labelHeightValue = mTextHeightCache.get(labelSize);
-        final int labelCharHeight;
-        if (labelHeightValue != null) {
-            labelCharHeight = labelHeightValue;
-        } else {
-            paint.getTextBounds(KEY_LABEL_REFERENCE_CHAR, 0, 1, mTextBounds);
-            labelCharHeight = mTextBounds.height();
-            mTextHeightCache.put(labelSize, labelCharHeight);
-        }
-        return labelCharHeight;
+    private final Rect mTextBounds = new Rect();
+
+    private int getLabelCharHeight(Paint paint) {
+        final int labelSize = (int)paint.getTextSize();
+        final Integer cachedValue = mTextHeightCache.get(labelSize);
+        if (cachedValue != null)
+            return cachedValue;
+
+        paint.getTextBounds(KEY_LABEL_REFERENCE_CHAR, 0, 1, mTextBounds);
+        final int height = mTextBounds.height();
+        mTextHeightCache.put(labelSize, height);
+        return height;
     }
 
-    private int getLabelCharWidth(int labelSize, Paint paint) {
-        Integer labelWidthValue = mTextWidthCache.get(labelSize);
-        final int labelCharWidth;
-        if (labelWidthValue != null) {
-            labelCharWidth = labelWidthValue;
+    private int getLabelCharWidth(Paint paint) {
+        final int labelSize = (int)paint.getTextSize();
+        final Typeface face = paint.getTypeface();
+        final Integer key;
+        if (face == Typeface.DEFAULT) {
+            key = labelSize;
+        } else if (face == Typeface.DEFAULT_BOLD) {
+            key = labelSize + 1000;
+        } else if (face == Typeface.MONOSPACE) {
+            key = labelSize + 2000;
         } else {
-            paint.getTextBounds(KEY_LABEL_REFERENCE_CHAR, 0, 1, mTextBounds);
-            labelCharWidth = mTextBounds.width();
-            mTextWidthCache.put(labelSize, labelCharWidth);
+            key = labelSize;
         }
-        return labelCharWidth;
+
+        final Integer cached = mTextWidthCache.get(key);
+        if (cached != null)
+            return cached;
+
+        paint.getTextBounds(KEY_LABEL_REFERENCE_CHAR, 0, 1, mTextBounds);
+        final int width = mTextBounds.width();
+        mTextWidthCache.put(key, width);
+        return width;
     }
 
     private static void drawIcon(Canvas canvas, Drawable icon, int x, int y, int width,
@@ -909,10 +937,6 @@
         canvas.translate(-x, -y);
     }
 
-    public void setForeground(boolean foreground) {
-        mInForeground = foreground;
-    }
-
     // TODO: clean up this method.
     private void dismissAllKeyPreviews() {
         for (PointerTracker tracker : mPointerTrackers) {
@@ -921,6 +945,10 @@
         }
     }
 
+    public void cancelAllMessage() {
+        mHandler.cancelAllMessages();
+    }
+
     @Override
     public void showKeyPreview(int keyIndex, PointerTracker tracker) {
         if (mShowKeyPreviewPopup) {
@@ -965,7 +993,7 @@
         // If keyIndex is invalid or IME is already closed, we must not show key preview.
         // Trying to show key preview while root window is closed causes
         // WindowManager.BadTokenException.
-        if (key == null || !mInForeground)
+        if (key == null)
             return;
 
         mHandler.cancelAllDismissKeyPreviews();
@@ -991,25 +1019,29 @@
             previewText.setText(null);
         }
         if (key.mCode == Keyboard.CODE_SPACE) {
-            previewText.setBackgroundColor(Color.TRANSPARENT);
+            previewText.setBackgroundDrawable(mPreviewSpacebarBackground);
         } else {
             previewText.setBackgroundDrawable(mPreviewBackground);
         }
-        // Set the preview background state
-        previewText.getBackground().setState(
-                key.mPopupCharacters != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET);
 
-        previewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
-                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+        previewText.measure(MEASURESPEC_UNSPECIFIED, MEASURESPEC_UNSPECIFIED);
         final int previewWidth = Math.max(previewText.getMeasuredWidth(), keyDrawWidth
                 + previewText.getPaddingLeft() + previewText.getPaddingRight());
         final int previewHeight = mPreviewHeight;
         getLocationInWindow(mCoordinates);
-        final int previewX = keyDrawX - (previewWidth - keyDrawWidth) / 2 + mCoordinates[0];
+        int previewX = keyDrawX - (previewWidth - keyDrawWidth) / 2 + mCoordinates[0];
         final int previewY = key.mY - previewHeight + mCoordinates[1] + mPreviewOffset;
+        if (previewX < 0 && mPreviewLeftBackground != null) {
+            previewText.setBackgroundDrawable(mPreviewLeftBackground);
+            previewX = 0;
+        } else if (previewX + previewWidth > getWidth() && mPreviewRightBackground != null) {
+            previewText.setBackgroundDrawable(mPreviewRightBackground);
+            previewX = getWidth() - previewWidth;
+        }
 
-        // Place the key preview.
-        // TODO: Adjust position of key previews which touch screen edges
+        // Set the preview background state
+        previewText.getBackground().setState(
+                key.mPopupCharacters != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET);
         FrameLayoutCompatUtils.placeViewAt(
                 previewText, previewX, previewY, previewWidth, previewHeight);
         previewText.setVisibility(VISIBLE);
@@ -1126,7 +1158,7 @@
         miniKeyboardView.setKeyboard(keyboard);
 
         container.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
-                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+                MEASURESPEC_UNSPECIFIED);
 
         return miniKeyboardView;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index 00bf348..9d58f69 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -23,9 +23,6 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.graphics.PorterDuff;
@@ -61,8 +58,6 @@
     private final int mSpaceKeyIndex;
     private final boolean mAutoCorrectionSpacebarLedEnabled;
     private final Drawable mAutoCorrectionSpacebarLedIcon;
-    private final Drawable mSpacebarArrowLeftIcon;
-    private final Drawable mSpacebarArrowRightIcon;
     private final int mSpacebarTextColor;
     private final int mSpacebarTextShadowColor;
     private float mSpacebarTextFadeFactor = 0.0f;
@@ -77,6 +72,11 @@
     private final Drawable mEnabledShortcutIcon;
     private final Drawable mDisabledShortcutIcon;
 
+    // BLACK LEFT-POINTING TRIANGLE and two spaces.
+    public static final String ARROW_LEFT = "\u25C0  ";
+    // Two spaces and BLACK RIGHT-POINTING TRIANGLE.
+    public static final String ARROW_RIGHT = "  \u25B6";
+
     // Minimum width of spacebar dragging to trigger the language switch (represented by the number
     // of the most common key width of this keyboard).
     private static final int SPACEBAR_DRAG_WIDTH = 3;
@@ -131,10 +131,6 @@
         mSpacebarTextColor = a.getColor(R.styleable.LatinKeyboard_spacebarTextColor, 0);
         mSpacebarTextShadowColor = a.getColor(
                 R.styleable.LatinKeyboard_spacebarTextShadowColor, 0);
-        mSpacebarArrowLeftIcon = a.getDrawable(
-                R.styleable.LatinKeyboard_spacebarArrowLeftIcon);
-        mSpacebarArrowRightIcon = a.getDrawable(
-                R.styleable.LatinKeyboard_spacebarArrowRightIcon);
         a.recycle();
 
         // The threshold is "key width" x 1.25
@@ -165,12 +161,6 @@
         return newColor;
     }
 
-    private static ColorFilter getSpacebarDrawableFilter(float fadeFactor) {
-        final ColorMatrix colorMatrix = new ColorMatrix();
-        colorMatrix.setScale(1, 1, 1, fadeFactor);
-        return new ColorMatrixColorFilter(colorMatrix);
-    }
-
     public void updateShortcutKey(boolean available, LatinKeyboardView view) {
         if (mShortcutKey == null)
             return;
@@ -214,52 +204,40 @@
     }
 
     // Layout local language name and left and right arrow on spacebar.
-    private static String layoutSpacebar(Paint paint, Locale locale, Drawable icon, Drawable lArrow,
-            Drawable rArrow, int width, int height, float origTextSize) {
-        final float arrowWidth = lArrow.getIntrinsicWidth();
-        final float arrowHeight = lArrow.getIntrinsicHeight();
-        final float maxTextWidth = width - (arrowWidth + arrowWidth);
+    private static String layoutSpacebar(Paint paint, Locale locale, int width,
+            float origTextSize) {
         final Rect bounds = new Rect();
 
         // Estimate appropriate language name text size to fit in maxTextWidth.
-        String language = SubtypeSwitcher.getFullDisplayName(locale, true);
+        String language = ARROW_LEFT + SubtypeSwitcher.getFullDisplayName(locale, true)
+                + ARROW_RIGHT;
         int textWidth = getTextWidth(paint, language, origTextSize, bounds);
         // Assuming text width and text size are proportional to each other.
-        float textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+        float textSize = origTextSize * Math.min(width / textWidth, 1.0f);
         // allow variable text size
         textWidth = getTextWidth(paint, language, textSize, bounds);
         // If text size goes too small or text does not fit, use middle or short name
         final boolean useMiddleName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
-                || (textWidth > maxTextWidth);
+                || (textWidth > width);
 
         final boolean useShortName;
         if (useMiddleName) {
-            language = SubtypeSwitcher.getMiddleDisplayLanguage(locale);
+            language = ARROW_LEFT + SubtypeSwitcher.getMiddleDisplayLanguage(locale) + ARROW_RIGHT;
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
-            textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
             useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
-                    || (textWidth > maxTextWidth);
+                    || (textWidth > width);
         } else {
             useShortName = false;
         }
 
         if (useShortName) {
-            language = SubtypeSwitcher.getShortDisplayLanguage(locale);
+            language = ARROW_LEFT + SubtypeSwitcher.getShortDisplayLanguage(locale) + ARROW_RIGHT;
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
-            textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
         }
         paint.setTextSize(textSize);
 
-        // Place left and right arrow just before and after language text.
-        final float textHeight = -paint.ascent() + paint.descent();
-        final float baseline = (icon != null) ? height * SPACEBAR_LANGUAGE_BASELINE
-                : height / 2 + textHeight / 2;
-        final int top = (int)(baseline - arrowHeight);
-        final float remains = (width - textWidth) / 2;
-        lArrow.setBounds((int)(remains - arrowWidth), top, (int)remains, (int)baseline);
-        rArrow.setBounds((int)(remains + textWidth), top, (int)(remains + textWidth + arrowWidth),
-                (int)baseline);
-
         return language;
     }
 
@@ -304,9 +282,8 @@
                 defaultTextSize = 14;
             }
 
-            final String language = layoutSpacebar(paint, inputLocale, mSpaceIcon,
-                    mSpacebarArrowLeftIcon, mSpacebarArrowRightIcon, width, height,
-                    getTextSizeFromTheme(mTheme, textStyle, defaultTextSize));
+            final String language = layoutSpacebar(paint, inputLocale, width, getTextSizeFromTheme(
+                    mTheme, textStyle, defaultTextSize));
 
             // Draw language text with shadow
             // In case there is no space icon, we will place the language text at the center of
@@ -319,18 +296,6 @@
             canvas.drawText(language, width / 2, baseline - descent - 1, paint);
             paint.setColor(getSpacebarTextColor(mSpacebarTextColor, textFadeFactor));
             canvas.drawText(language, width / 2, baseline - descent, paint);
-
-            // Put arrows that are already laid out on either side of the text
-            // Because language switch is disabled on phone and number layouts, hide arrows.
-            // TODO: Sort out how to enable language switch on these layouts.
-            if (mSubtypeSwitcher.useSpacebarLanguageSwitcher()
-                    && mSubtypeSwitcher.getEnabledKeyboardLocaleCount() > 1
-                    && !(isPhoneKeyboard() || isNumberKeyboard())) {
-                mSpacebarArrowLeftIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
-                mSpacebarArrowRightIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
-                mSpacebarArrowLeftIcon.draw(canvas);
-                mSpacebarArrowRightIcon.draw(canvas);
-            }
         }
 
         // Draw the spacebar icon at the bottom
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index c7620f9..8b03360 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -670,7 +670,7 @@
             // If keyboard is in manual temporary upper case state and key has manual temporary
             // uppercase letter as key hint letter, alternate character code should be sent.
             if (mKeyboard.isManualTemporaryUpperCase() && key.hasUppercaseLetter()) {
-                code = key.mHintLetter.charAt(0);
+                code = key.mHintLabel.charAt(0);
                 codes[0] = code;
             }
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index 983f064..30d9692 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -165,7 +165,7 @@
             readInt(keyAttr, R.styleable.Keyboard_Key_code);
             readText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
             readText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
-            readText(keyAttr, R.styleable.Keyboard_Key_keyHintLetter);
+            readText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
             readTextArray(keyAttr, R.styleable.Keyboard_Key_popupCharacters);
             readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelOption);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index 37b3682..1530fed 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -40,25 +40,15 @@
     private static final int ICON_RETURN_KEY = 8;
     private static final int ICON_SEARCH_KEY = 9;
     private static final int ICON_TAB_KEY = 10;
-    private static final int ICON_NUM1_KEY = 11;
-    private static final int ICON_NUM2_KEY = 12;
-    private static final int ICON_NUM3_KEY = 13;
-    private static final int ICON_NUM4_KEY = 14;
-    private static final int ICON_NUM5_KEY = 15;
-    private static final int ICON_NUM6_KEY = 16;
-    private static final int ICON_NUM7_KEY = 17;
-    private static final int ICON_NUM8_KEY = 18;
-    private static final int ICON_NUM9_KEY = 19;
-    private static final int ICON_NUM0_KEY = 20;
     // This should be aligned with Keyboard.keyIconShifted enum.
-    private static final int ICON_SHIFTED_SHIFT_KEY = 21;
+    private static final int ICON_SHIFTED_SHIFT_KEY = 11;
     // This should be aligned with Keyboard.keyIconPreview enum.
-    private static final int ICON_PREVIEW_SPACE_KEY = 22;
-    private static final int ICON_PREVIEW_TAB_KEY = 23;
-    private static final int ICON_PREVIEW_SETTINGS_KEY = 24;
-    private static final int ICON_PREVIEW_SHORTCUT_KEY = 25;
+    private static final int ICON_PREVIEW_SPACE_KEY = 12;
+    private static final int ICON_PREVIEW_TAB_KEY = 13;
+    private static final int ICON_PREVIEW_SETTINGS_KEY = 14;
+    private static final int ICON_PREVIEW_SHORTCUT_KEY = 15;
 
-    private static final int ICON_LAST = 25;
+    private static final int ICON_LAST = 15;
 
     private final Drawable mIcons[] = new Drawable[ICON_LAST + 1];
 
@@ -84,26 +74,6 @@
             return ICON_SEARCH_KEY;
         case R.styleable.Keyboard_iconTabKey:
             return ICON_TAB_KEY;
-        case R.styleable.Keyboard_iconNum1Key:
-            return ICON_NUM1_KEY;
-        case R.styleable.Keyboard_iconNum2Key:
-            return ICON_NUM2_KEY;
-        case R.styleable.Keyboard_iconNum3Key:
-            return ICON_NUM3_KEY;
-        case R.styleable.Keyboard_iconNum4Key:
-            return ICON_NUM4_KEY;
-        case R.styleable.Keyboard_iconNum5Key:
-            return ICON_NUM5_KEY;
-        case R.styleable.Keyboard_iconNum6Key:
-            return ICON_NUM6_KEY;
-        case R.styleable.Keyboard_iconNum7Key:
-            return ICON_NUM7_KEY;
-        case R.styleable.Keyboard_iconNum8Key:
-            return ICON_NUM8_KEY;
-        case R.styleable.Keyboard_iconNum9Key:
-            return ICON_NUM9_KEY;
-        case R.styleable.Keyboard_iconNum0Key:
-            return ICON_NUM0_KEY;
         case R.styleable.Keyboard_iconShiftedShiftKey:
             return ICON_SHIFTED_SHIFT_KEY;
         case R.styleable.Keyboard_iconPreviewSpaceKey:
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilder.java
index 040c16d..1e67eec 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilder.java
@@ -221,7 +221,7 @@
                     paint = new Paint();
                     paint.setAntiAlias(true);
                 }
-                final int labelSize = view.getLabelSizeAndSetPaint(label, 0, paint);
+                final int labelSize = view.getDefaultLabelSizeAndSetPaint(paint);
                 paint.setTextSize(labelSize);
                 if (bounds == null) bounds = new Rect();
                 paint.getTextBounds(label.toString(), 0, label.length(), bounds);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java b/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
index f8c81ad..ef3ea4c 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
@@ -46,8 +46,7 @@
     private final int mSpacebarTextColor;
     private final TextPaint mTextPaint;
     private final int mMiddleX;
-    private final Drawable mLeftDrawable;
-    private final Drawable mRightDrawable;
+    private final boolean mDrawArrows;
     private final int mThreshold;
 
     private int mDiff;
@@ -65,16 +64,17 @@
         textPaint.setTextSize(LatinKeyboard.getTextSizeFromTheme(
                 context.getTheme(), android.R.style.TextAppearance_Medium, 18));
         textPaint.setColor(Color.TRANSPARENT);
-        textPaint.setTextAlign(Align.CENTER);
         textPaint.setAntiAlias(true);
         mTextPaint = textPaint;
         mMiddleX = (background != null) ? (mWidth - mBackground.getIntrinsicWidth()) / 2 : 0;
 
         final TypedArray a = context.obtainStyledAttributes(
-                null, R.styleable.LatinKeyboard, R.attr.latinKeyboardStyle, R.style.LatinKeyboard);
-        mSpacebarTextColor = a.getColor(R.styleable.LatinKeyboard_spacebarTextColor, 0);
-        mLeftDrawable = a.getDrawable(R.styleable.LatinKeyboard_spacebarArrowPreviewLeftIcon);
-        mRightDrawable = a.getDrawable(R.styleable.LatinKeyboard_spacebarArrowPreviewRightIcon);
+                null, R.styleable.KeyboardView, R.attr.keyboardViewStyle, R.style.KeyboardView);
+        mSpacebarTextColor = a.getColor(R.styleable.KeyboardView_keyPreviewTextColor, 0);
+        final int spacebarPreviewBackrgound = a.getResourceId(
+                R.styleable.KeyboardView_keyPreviewSpacebarBackground, 0);
+        // If spacebar preview background is transparent, we need not draw arrows.
+        mDrawArrows = (spacebarPreviewBackrgound != R.drawable.transparent);
         a.recycle();
 
         mThreshold = ViewConfiguration.get(context).getScaledTouchSlop();
@@ -102,8 +102,6 @@
             final int width = mWidth;
             final int height = mHeight;
             final int diff = mDiff;
-            final Drawable lArrow = mLeftDrawable;
-            final Drawable rArrow = mRightDrawable;
             canvas.clipRect(0, 0, width, height);
             if (mCurrentLanguage == null) {
                 SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance();
@@ -111,20 +109,19 @@
                 mNextLanguage = subtypeSwitcher.getNextInputLanguageName();
                 mPrevLanguage = subtypeSwitcher.getPreviousInputLanguageName();
             }
-            // Draw language text with shadow
+            // Draw language text.
             final float baseline = mHeight * LatinKeyboard.SPACEBAR_LANGUAGE_BASELINE
                     - paint.descent();
             paint.setColor(mSpacebarTextColor);
+            paint.setTextAlign(Align.CENTER);
             canvas.drawText(mCurrentLanguage, width / 2 + diff, baseline, paint);
             canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint);
             canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint);
-
-            if (lArrow != null && rArrow != null) {
-                Keyboard.setDefaultBounds(lArrow);
-                rArrow.setBounds(width - rArrow.getIntrinsicWidth(), 0, width,
-                        rArrow.getIntrinsicHeight());
-                lArrow.draw(canvas);
-                rArrow.draw(canvas);
+            if (mDrawArrows) {
+                paint.setTextAlign(Align.LEFT);
+                canvas.drawText(LatinKeyboard.ARROW_LEFT, 0, baseline, paint);
+                paint.setTextAlign(Align.RIGHT);
+                canvas.drawText(LatinKeyboard.ARROW_RIGHT, width, baseline, paint);
             }
         }
         if (mBackground != null) {
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 313555d..a5bfea0 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -25,11 +25,11 @@
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.Spanned;
+import android.text.TextPaint;
 import android.text.TextUtils;
 import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
 import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
 import android.text.style.UnderlineSpan;
 import android.util.AttributeSet;
 import android.view.Gravity;
@@ -57,15 +57,15 @@
         public void pickSuggestionManually(int index, CharSequence word);
     }
 
-    private static final CharacterStyle BOLD_SPAN = new StyleSpan(Typeface.BOLD);
     private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan();
     // The maximum number of suggestions available. See {@link Suggest#mPrefMaxSuggestions}.
     private static final int MAX_SUGGESTIONS = 18;
-    private static final int UNSPECIFIED_MEASURESPEC = MeasureSpec.makeMeasureSpec(
-            0, MeasureSpec.UNSPECIFIED);
+    private static final int MATCH_PARENT = MeasureSpec.makeMeasureSpec(
+            -1, MeasureSpec.UNSPECIFIED);
 
     private static final boolean DBG = LatinImeLogger.sDBG;
 
+    private final View mCandidatesStrip;
     private static final int NUM_CANDIDATES_IN_STRIP = 3;
     private final ImageView mExpandCandidatesPane;
     private final ImageView mCloseCandidatesPane;
@@ -88,11 +88,17 @@
     private final PopupWindow mPreviewPopup;
     private final TextView mPreviewText;
 
+    private final View mTouchToSave;
+    private final TextView mWordToSave;
+
     private Listener mListener;
     private SuggestedWords mSuggestions = SuggestedWords.EMPTY;
     private boolean mShowingAutoCorrectionInverted;
     private boolean mShowingAddToDictionary;
 
+    private static final float MIN_TEXT_XSCALE = 0.4f;
+    private static final String ELLIPSIS = "\u2026";
+
     private final UiHandler mHandler = new UiHandler(this);
 
     private static class UiHandler extends StaticInnerHandlerWrapper<CandidateView> {
@@ -178,13 +184,13 @@
         mPreviewPopup.setContentView(mPreviewText);
         mPreviewPopup.setBackgroundDrawable(null);
 
+        mCandidatesStrip = findViewById(R.id.candidates_strip);
         mCandidateStripHeight = res.getDimensionPixelOffset(R.dimen.candidate_strip_height);
         for (int i = 0; i < MAX_SUGGESTIONS; i++) {
             final TextView word, info;
             switch (i) {
             case 0:
                 word = (TextView)findViewById(R.id.word_left);
-                word.setPadding(res.getDimensionPixelOffset(R.dimen.candidate_padding), 0, 0, 0);
                 info = (TextView)findViewById(R.id.info_left);
                 break;
             case 1:
@@ -208,11 +214,15 @@
             mInfos.add(info);
             if (i > 0) {
                 final View divider = inflater.inflate(R.layout.candidate_divider, null);
-                divider.measure(UNSPECIFIED_MEASURESPEC, UNSPECIFIED_MEASURESPEC);
+                divider.measure(MATCH_PARENT, MATCH_PARENT);
                 mDividers.add(divider);
             }
         }
 
+        mTouchToSave = findViewById(R.id.touch_to_save);
+        mWordToSave = (TextView)findViewById(R.id.word_to_save);
+        mWordToSave.setOnClickListener(this);
+
         final TypedArray a = context.obtainStyledAttributes(
                 attrs, R.styleable.CandidateView, defStyle, R.style.CandidateViewStyle);
         mAutoCorrectHighlight = a.getInt(R.styleable.CandidateView_autoCorrectHighlight, 0);
@@ -269,12 +279,14 @@
         }
     }
 
-    private CharSequence getStyledCandidateWord(CharSequence word, boolean isAutoCorrect) {
+    private CharSequence getStyledCandidateWord(CharSequence word, TextView v,
+            boolean isAutoCorrect) {
+        v.setTypeface(Typeface.DEFAULT);
         if (!isAutoCorrect)
             return word;
         final Spannable spannedWord = new SpannableString(word);
         if ((mAutoCorrectHighlight & AUTO_CORRECT_BOLD) != 0)
-            spannedWord.setSpan(BOLD_SPAN, 0, word.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+            v.setTypeface(Typeface.DEFAULT_BOLD);
         if ((mAutoCorrectHighlight & AUTO_CORRECT_UNDERLINE) != 0)
             spannedWord.setSpan(UNDERLINE_SPAN, 0, word.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
         return spannedWord;
@@ -311,7 +323,7 @@
         int fromIndex = NUM_CANDIDATES_IN_STRIP;
         final int count = Math.min(mWords.size(), suggestions.size());
         closeCandidatesPane();
-        mExpandCandidatesPane.setEnabled(count >= NUM_CANDIDATES_IN_STRIP);
+        mExpandCandidatesPane.setVisibility(count > NUM_CANDIDATES_IN_STRIP ? VISIBLE : GONE);
         for (int i = 0; i < count; i++) {
             final CharSequence suggestion = suggestions.getWord(i);
             if (suggestion == null) continue;
@@ -332,11 +344,15 @@
             // the word when space is typed (valid typed word or auto corrected word).
             word.setTextColor(getCandidateTextColor(isAutoCorrect,
                     isSuggestedCandidate || isPunctuationSuggestions, suggestionInfo));
-            word.setText(getStyledCandidateWord(suggestion, isAutoCorrect));
-            // TODO: call TextView.setTextScaleX() to fit the candidate in single line.
-            word.measure(UNSPECIFIED_MEASURESPEC, UNSPECIFIED_MEASURESPEC);
-            final int width = word.getMeasuredWidth();
-            final int height = word.getMeasuredHeight();
+            final CharSequence text = getStyledCandidateWord(suggestion, word, isAutoCorrect);
+            if (i < NUM_CANDIDATES_IN_STRIP) {
+                final View parent = (View)word.getParent();
+                final int width = parent.getWidth() - word.getPaddingLeft()
+                        - word.getPaddingRight();
+                setTextWithAutoScaleAndEllipsis(text, width, word);
+            } else {
+                setTextWithAutoScaleAndEllipsis(text, paneWidth, word);
+            }
 
             final TextView info;
             if (DBG && suggestionInfo != null
@@ -344,18 +360,23 @@
                 info = mInfos.get(i);
                 info.setText(suggestionInfo.getDebugString());
                 info.setVisibility(View.VISIBLE);
-                info.measure(UNSPECIFIED_MEASURESPEC, UNSPECIFIED_MEASURESPEC);
             } else {
                 info = null;
             }
 
             if (i < NUM_CANDIDATES_IN_STRIP) {
                 if (info != null) {
+                    word.measure(MATCH_PARENT, MATCH_PARENT);
+                    info.measure(MATCH_PARENT, MATCH_PARENT);
+                    final int width = word.getMeasuredWidth();
                     final int infoWidth = info.getMeasuredWidth();
                     FrameLayoutCompatUtils.placeViewAt(
                             info, width - infoWidth, 0, infoWidth, info.getMeasuredHeight());
                 }
             } else {
+                word.measure(MATCH_PARENT, MATCH_PARENT);
+                final int width = word.getMeasuredWidth();
+                final int height = word.getMeasuredHeight();
                 // TODO: Handle overflow case.
                 if (dividerWidth + x + width >= paneWidth) {
                     centeringCandidates(fromIndex, i - 1, x, paneWidth);
@@ -376,6 +397,7 @@
                         word, x, y + (mCandidateStripHeight - height) / 2, width, height);
                 if (info != null) {
                     mCandidatesPane.addView(info);
+                    info.measure(MATCH_PARENT, MATCH_PARENT);
                     final int infoWidth = info.getMeasuredWidth();
                     FrameLayoutCompatUtils.placeViewAt(
                             info, x + width - infoWidth, y, infoWidth, info.getMeasuredHeight());
@@ -414,6 +436,60 @@
         }
     }
 
+    private static void setTextWithAutoScaleAndEllipsis(CharSequence text, int w, TextView v) {
+        // To prevent partially rendered character at the end of text, subtract few extra pixels
+        // from the width.
+        final int width = w - 4;
+
+        final TextPaint paint = v.getPaint();
+        final int textWidth = getTextWidth(text, paint, 1.0f);
+        if (textWidth < width || textWidth == 0 || width <= 0) {
+            v.setTextScaleX(1.0f);
+            v.setText(text);
+            return;
+        }
+
+        final float scaleX = Math.min((float)width / textWidth, 1.0f);
+        if (scaleX >= MIN_TEXT_XSCALE) {
+            v.setTextScaleX(scaleX);
+            v.setText(text);
+            return;
+        }
+
+        final int truncatedWidth = width - getTextWidth(ELLIPSIS, paint, MIN_TEXT_XSCALE);
+        final CharSequence ellipsized = getTextEllipsizedAtStart(text, paint, truncatedWidth);
+        v.setTextScaleX(MIN_TEXT_XSCALE);
+        v.setText(ELLIPSIS);
+        v.append(ellipsized);
+    }
+
+    private static int getTextWidth(CharSequence text, TextPaint paint, float scaleX) {
+        if (TextUtils.isEmpty(text)) return 0;
+        final int len = text.length();
+        final float[] widths = new float[len];
+        paint.setTextScaleX(scaleX);
+        final int count = paint.getTextWidths(text, 0, len, widths);
+        float width = 0;
+        for (int i = 0; i < count; i++) {
+            width += widths[i];
+        }
+        return (int)Math.round(width + 0.5);
+    }
+
+    private static CharSequence getTextEllipsizedAtStart(CharSequence text, TextPaint paint,
+            int maxWidth) {
+        final int len = text.length();
+        final float[] widths = new float[len];
+        final int count = paint.getTextWidths(text, 0, len, widths);
+        float width = 0;
+        for (int i = count - 1; i >= 0; i--) {
+            width += widths[i];
+            if (width > maxWidth)
+                return text.subSequence(i + 1, len);
+        }
+        return text;
+    }
+
     private void expandCandidatesPane() {
         mExpandCandidatesPane.setVisibility(View.GONE);
         mCloseCandidatesPane.setVisibility(View.VISIBLE);
@@ -448,14 +524,10 @@
     }
 
     public void showAddToDictionaryHint(CharSequence word) {
-        SuggestedWords.Builder builder = new SuggestedWords.Builder()
-                .addWord(word)
-                .addWord(getContext().getText(R.string.hint_add_to_dictionary));
-        setSuggestions(builder.build());
+        mWordToSave.setText(word);
         mShowingAddToDictionary = true;
-        // Disable R.string.hint_add_to_dictionary button
-        TextView tv = mWords.get(1);
-        tv.setClickable(false);
+        mCandidatesStrip.setVisibility(View.GONE);
+        mTouchToSave.setVisibility(View.VISIBLE);
     }
 
     public boolean dismissAddToDictionaryHint() {
@@ -475,6 +547,8 @@
             mWords.get(i).setText(null);
             mInfos.get(i).setVisibility(View.GONE);
         }
+        mTouchToSave.setVisibility(View.GONE);
+        mCandidatesStrip.setVisibility(View.VISIBLE);
         mCandidatesPane.removeAllViews();
     }
 
@@ -530,6 +604,12 @@
 
     @Override
     public void onClick(View view) {
+        if (view == mWordToSave) {
+            addToDictionary(((TextView)view).getText());
+            clear();
+            return;
+        }
+
         final Object tag = view.getTag();
         if (!(tag instanceof Integer))
             return;
@@ -538,11 +618,7 @@
             return;
 
         final CharSequence word = mSuggestions.getWord(index);
-        if (mShowingAddToDictionary && index == 0) {
-            addToDictionary(word);
-        } else {
-            mListener.pickSuggestionManually(index, word);
-        }
+        mListener.pickSuggestionManually(index, word);
         // Because some punctuation letters are not treated as word separator depending on locale,
         // {@link #setSuggestions} might not be called and candidates pane left opened.
         closeCandidatesPane();
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 52935ef..874d77f 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -514,7 +514,8 @@
         super.setInputView(view);
         mCandidateViewContainer = view.findViewById(R.id.candidates_container);
         mCandidateView = (CandidateView) view.findViewById(R.id.candidates);
-        mCandidateView.setListener(this, view);
+        if (mCandidateView != null)
+            mCandidateView.setListener(this, view);
         mCandidateStripHeight = (int)mResources.getDimension(R.dimen.candidate_strip_height);
     }
 
@@ -590,7 +591,6 @@
         inputView.setProximityCorrectionEnabled(true);
         // If we just entered a text field, maybe it has some old text that requires correction
         mRecorrection.checkRecorrectionOnStart();
-        inputView.setForeground(true);
 
         voiceIme.onStartInputView(inputView.getWindowToken());
 
@@ -678,7 +678,7 @@
     public void onFinishInputView(boolean finishingInput) {
         super.onFinishInputView(finishingInput);
         KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
-        if (inputView != null) inputView.setForeground(false);
+        if (inputView != null) inputView.cancelAllMessage();
         // Remove pending messages related to update suggestions
         mHandler.cancelUpdateSuggestions();
         mHandler.cancelUpdateOldSuggestions();
@@ -842,7 +842,7 @@
 
     private void setSuggestionStripShownInternal(boolean shown, boolean needsInputViewShown) {
         // TODO: Modify this if we support candidates with hard keyboard
-        if (onEvaluateInputViewShown()) {
+        if (onEvaluateInputViewShown() && mCandidateViewContainer != null) {
             final boolean shouldShowCandidates = shown
                     && (needsInputViewShown ? mKeyboardSwitcher.isInputViewShown() : true);
             if (isExtractViewShown()) {
@@ -1869,6 +1869,11 @@
     // Notify that language or mode have been changed and toggleLanguage will update KeyboardID
     // according to new language or mode.
     public void onRefreshKeyboard() {
+        if (!CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) {
+            // Before Honeycomb, Voice IME is in LatinIME and it changes the current input view,
+            // so that we need to re-create the keyboard input view here.
+            setInputView(mKeyboardSwitcher.onCreateInputView());
+        }
         // Reload keyboard because the current language has been changed.
         mKeyboardSwitcher.loadKeyboard(getCurrentInputEditorInfo(),
                 mSubtypeSwitcher.isShortcutImeEnabled() && mVoiceProxy.isVoiceButtonEnabled(),