diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index 2fbf4c2be..cb0a9a2e1 100644
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -41,5 +41,11 @@
+
+
+
+
+
+
diff --git a/java/proguard.flags b/java/proguard.flags
index 914bd7595..9094be401 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -22,3 +22,7 @@
-keep class com.android.inputmethod.latin.Utils {
boolean equalsIgnoreCase(...);
}
+
+-keep class com.android.inputmethod.latin.spellcheck.SpellChecker {
+ *;
+}
diff --git a/java/res/drawable-hdpi/btn_center_default.9.png b/java/res/drawable-hdpi/btn_center_default.9.png
new file mode 100644
index 000000000..4f5f01cb8
Binary files /dev/null and b/java/res/drawable-hdpi/btn_center_default.9.png differ
diff --git a/java/res/drawable-hdpi/btn_center_pressed.9.png b/java/res/drawable-hdpi/btn_center_pressed.9.png
new file mode 100644
index 000000000..213b482d4
Binary files /dev/null and b/java/res/drawable-hdpi/btn_center_pressed.9.png differ
diff --git a/java/res/drawable-hdpi/btn_center_selected.9.png b/java/res/drawable-hdpi/btn_center_selected.9.png
new file mode 100644
index 000000000..213b482d4
Binary files /dev/null and b/java/res/drawable-hdpi/btn_center_selected.9.png differ
diff --git a/java/res/drawable-hdpi/btn_close_candidates_pane.9.png b/java/res/drawable-hdpi/btn_close_candidates_pane.9.png
new file mode 100644
index 000000000..bdd949577
Binary files /dev/null and b/java/res/drawable-hdpi/btn_close_candidates_pane.9.png differ
diff --git a/java/res/drawable-hdpi/btn_expand_candidates_pane.9.png b/java/res/drawable-hdpi/btn_expand_candidates_pane.9.png
new file mode 100644
index 000000000..63015ec5b
Binary files /dev/null and b/java/res/drawable-hdpi/btn_expand_candidates_pane.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png
index 01fc8ca78..50cc49fdb 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png
index a8c1688f7..2dc1bed5d 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png
index af4017e2c..dabf77ec6 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png 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 829647663..575781f07 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png
index 4c35aca95..6e7d74c88 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png 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 020a65d6e..6c5b42e5c 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png
index 174f3452c..ddb77c224 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png 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 88b27c07b..8c999f655 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png
index 1fcbd9a88..1e9227e1c 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png 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 87497bc1f..8c7c2f3bc 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png
index 072753f37..7207b2ece 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png 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 f0d76dfa2..02497b472 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png
index b6c234c04..a524168c9 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png
index 73a8cd1c3..4395e978a 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png
index 1ad746053..9d85c7b74 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png 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 3115fa436..a13b2003f 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png
index e3a77d61b..2ed1b3447 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_popup_normal.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png
index 431c44967..77e17dbae 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_popup_selected.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png
index ccd59d5fa..a409639e7 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png 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 dc08102a7..0b76855e6 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png
index 42c7c146d..6ec7e6592 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
index 01e2506b0..995780cbf 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png
index fad0ec458..1388b6694 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_stone.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
index 83c6eb3fc..7215782eb 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png
index 215f8157c..5a94cb6ac 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_stone.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png
index 88acdd748..c6373a8af 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_normal_stone.9.png 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
new file mode 100644
index 000000000..0b2758925
Binary files /dev/null and b/java/res/drawable-hdpi/btn_keyboard_key_popup_background_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png
index 5ecdaf428..166de2a03 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_holo.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
index e047eaff1..0bd49a0e7 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
index 218a2d29e..634419f1b 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
index afe49512e..8474f9f42 100644
Binary files a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png and b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png differ
diff --git a/java/res/drawable-hdpi/cancel.png b/java/res/drawable-hdpi/cancel.png
deleted file mode 100644
index 506cf99d0..000000000
Binary files a/java/res/drawable-hdpi/cancel.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/cancel_holo.9.png b/java/res/drawable-hdpi/cancel_holo.9.png
deleted file mode 100644
index 33548d606..000000000
Binary files a/java/res/drawable-hdpi/cancel_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/candidate_feedback_background.9.png b/java/res/drawable-hdpi/candidate_feedback_background.9.png
index 203c4e640..16499002e 100644
Binary files a/java/res/drawable-hdpi/candidate_feedback_background.9.png and b/java/res/drawable-hdpi/candidate_feedback_background.9.png differ
diff --git a/java/res/drawable-hdpi/caution.png b/java/res/drawable-hdpi/caution.png
index 5cb6c54b9..61eb4dd62 100644
Binary files a/java/res/drawable-hdpi/caution.png and b/java/res/drawable-hdpi/caution.png differ
diff --git a/java/res/drawable-hdpi/dialog_bubble_step02.9.png b/java/res/drawable-hdpi/dialog_bubble_step02.9.png
deleted file mode 100644
index b338364c5..000000000
Binary files a/java/res/drawable-hdpi/dialog_bubble_step02.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/dialog_bubble_step07.9.png b/java/res/drawable-hdpi/dialog_bubble_step07.9.png
deleted file mode 100644
index 94b915432..000000000
Binary files a/java/res/drawable-hdpi/dialog_bubble_step07.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/hint_popup.9.png b/java/res/drawable-hdpi/hint_popup.9.png
index b5ec003e6..5b2ad5388 100644
Binary files a/java/res/drawable-hdpi/hint_popup.9.png and b/java/res/drawable-hdpi/hint_popup.9.png differ
diff --git a/java/res/drawable-hdpi/hint_popup_holo.9.png b/java/res/drawable-hdpi/hint_popup_holo.9.png
index 2ffc6ea2b..c44af8883 100644
Binary files a/java/res/drawable-hdpi/hint_popup_holo.9.png and b/java/res/drawable-hdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-hdpi/ic_dialog_keyboard.png b/java/res/drawable-hdpi/ic_dialog_keyboard.png
index c7729566c..305441633 100644
Binary files a/java/res/drawable-hdpi/ic_dialog_keyboard.png and b/java/res/drawable-hdpi/ic_dialog_keyboard.png differ
diff --git a/java/res/drawable-hdpi/ic_mic_dialog.png b/java/res/drawable-hdpi/ic_mic_dialog.png
index 349dc4b37..6107f876e 100644
Binary files a/java/res/drawable-hdpi/ic_mic_dialog.png and b/java/res/drawable-hdpi/ic_mic_dialog.png differ
diff --git a/java/res/drawable-hdpi/ic_subtype_keyboard.png b/java/res/drawable-hdpi/ic_subtype_keyboard.png
index 7015e266a..484305655 100644
Binary files a/java/res/drawable-hdpi/ic_subtype_keyboard.png and b/java/res/drawable-hdpi/ic_subtype_keyboard.png differ
diff --git a/java/res/drawable-hdpi/ic_subtype_mic.png b/java/res/drawable-hdpi/ic_subtype_mic.png
index cb86a5598..25c9ee2ab 100644
Binary files a/java/res/drawable-hdpi/ic_subtype_mic.png and b/java/res/drawable-hdpi/ic_subtype_mic.png differ
diff --git a/java/res/drawable-hdpi/ic_suggest_strip_microphone.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
index c00b4aaa6..189a861fb 100644
Binary files a/java/res/drawable-hdpi/ic_suggest_strip_microphone.png and b/java/res/drawable-hdpi/ic_suggest_strip_microphone.png differ
diff --git a/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
index 256dc3d61..b4a6e373b 100644
Binary files a/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png and b/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png differ
diff --git a/java/res/drawable-hdpi/key_hint_at_holo.9.png b/java/res/drawable-hdpi/key_hint_at_holo.9.png
deleted file mode 100644
index 129e19853..000000000
Binary files a/java/res/drawable-hdpi/key_hint_at_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_at_large_holo.9.png b/java/res/drawable-hdpi/key_hint_at_large_holo.9.png
deleted file mode 100644
index d90bc31ab..000000000
Binary files a/java/res/drawable-hdpi/key_hint_at_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_colon_holo.9.png b/java/res/drawable-hdpi/key_hint_colon_holo.9.png
deleted file mode 100644
index e82e41c94..000000000
Binary files a/java/res/drawable-hdpi/key_hint_colon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_colon_large_holo.9.png b/java/res/drawable-hdpi/key_hint_colon_large_holo.9.png
deleted file mode 100644
index e46845dbd..000000000
Binary files a/java/res/drawable-hdpi/key_hint_colon_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_comma_holo.9.png b/java/res/drawable-hdpi/key_hint_comma_holo.9.png
deleted file mode 100644
index da0d6fdd6..000000000
Binary files a/java/res/drawable-hdpi/key_hint_comma_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_comma_large_holo.9.png b/java/res/drawable-hdpi/key_hint_comma_large_holo.9.png
deleted file mode 100644
index 1f2f70762..000000000
Binary files a/java/res/drawable-hdpi/key_hint_comma_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_dash_holo.9.png b/java/res/drawable-hdpi/key_hint_dash_holo.9.png
deleted file mode 100644
index a2b2fceeb..000000000
Binary files a/java/res/drawable-hdpi/key_hint_dash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_doublecross_holo.9.png b/java/res/drawable-hdpi/key_hint_doublecross_holo.9.png
deleted file mode 100644
index d5af9f8c7..000000000
Binary files a/java/res/drawable-hdpi/key_hint_doublecross_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_equal_holo.9.png b/java/res/drawable-hdpi/key_hint_equal_holo.9.png
deleted file mode 100644
index 4acc3c3be..000000000
Binary files a/java/res/drawable-hdpi/key_hint_equal_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_exclamation_holo.9.png b/java/res/drawable-hdpi/key_hint_exclamation_holo.9.png
deleted file mode 100644
index 8d99a27d2..000000000
Binary files a/java/res/drawable-hdpi/key_hint_exclamation_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_exclamation_large_holo.9.png b/java/res/drawable-hdpi/key_hint_exclamation_large_holo.9.png
deleted file mode 100644
index e93e49187..000000000
Binary files a/java/res/drawable-hdpi/key_hint_exclamation_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_larger_holo.9.png b/java/res/drawable-hdpi/key_hint_larger_holo.9.png
deleted file mode 100644
index 10614d9fe..000000000
Binary files a/java/res/drawable-hdpi/key_hint_larger_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_minus_holo.9.png b/java/res/drawable-hdpi/key_hint_minus_holo.9.png
deleted file mode 100644
index 2c34ef90b..000000000
Binary files a/java/res/drawable-hdpi/key_hint_minus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_minus_large_holo.9.png b/java/res/drawable-hdpi/key_hint_minus_large_holo.9.png
deleted file mode 100644
index 0df056ee1..000000000
Binary files a/java/res/drawable-hdpi/key_hint_minus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_parenclose_holo.9.png b/java/res/drawable-hdpi/key_hint_parenclose_holo.9.png
deleted file mode 100644
index 9096362e0..000000000
Binary files a/java/res/drawable-hdpi/key_hint_parenclose_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_parenopen_holo.9.png b/java/res/drawable-hdpi/key_hint_parenopen_holo.9.png
deleted file mode 100644
index bb4cbd40d..000000000
Binary files a/java/res/drawable-hdpi/key_hint_parenopen_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_period_holo.9.png b/java/res/drawable-hdpi/key_hint_period_holo.9.png
deleted file mode 100644
index 68f789b95..000000000
Binary files a/java/res/drawable-hdpi/key_hint_period_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_plus_holo.9.png b/java/res/drawable-hdpi/key_hint_plus_holo.9.png
deleted file mode 100644
index 3dd85065a..000000000
Binary files a/java/res/drawable-hdpi/key_hint_plus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_plus_large_holo.9.png b/java/res/drawable-hdpi/key_hint_plus_large_holo.9.png
deleted file mode 100644
index b0d75f433..000000000
Binary files a/java/res/drawable-hdpi/key_hint_plus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_question_holo.9.png b/java/res/drawable-hdpi/key_hint_question_holo.9.png
deleted file mode 100644
index 4fe6a5b80..000000000
Binary files a/java/res/drawable-hdpi/key_hint_question_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_question_large_holo.9.png b/java/res/drawable-hdpi/key_hint_question_large_holo.9.png
deleted file mode 100644
index 44dfdc4ea..000000000
Binary files a/java/res/drawable-hdpi/key_hint_question_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_quote_holo.9.png b/java/res/drawable-hdpi/key_hint_quote_holo.9.png
deleted file mode 100644
index 8308aa647..000000000
Binary files a/java/res/drawable-hdpi/key_hint_quote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_quote_large_holo.9.png b/java/res/drawable-hdpi/key_hint_quote_large_holo.9.png
deleted file mode 100644
index e73b9e0c6..000000000
Binary files a/java/res/drawable-hdpi/key_hint_quote_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_semicolon_holo.9.png b/java/res/drawable-hdpi/key_hint_semicolon_holo.9.png
deleted file mode 100644
index ac3de374c..000000000
Binary files a/java/res/drawable-hdpi/key_hint_semicolon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_simplequote_holo.9.png b/java/res/drawable-hdpi/key_hint_simplequote_holo.9.png
deleted file mode 100644
index 20d56c549..000000000
Binary files a/java/res/drawable-hdpi/key_hint_simplequote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_slash_holo.9.png b/java/res/drawable-hdpi/key_hint_slash_holo.9.png
deleted file mode 100644
index 3fe2c4271..000000000
Binary files a/java/res/drawable-hdpi/key_hint_slash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_slash_large_holo.9.png b/java/res/drawable-hdpi/key_hint_slash_large_holo.9.png
deleted file mode 100644
index 47e767557..000000000
Binary files a/java/res/drawable-hdpi/key_hint_slash_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_smaller_holo.9.png b/java/res/drawable-hdpi/key_hint_smaller_holo.9.png
deleted file mode 100644
index 19a7d937e..000000000
Binary files a/java/res/drawable-hdpi/key_hint_smaller_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_star_holo.9.png b/java/res/drawable-hdpi/key_hint_star_holo.9.png
deleted file mode 100644
index 4e4340d63..000000000
Binary files a/java/res/drawable-hdpi/key_hint_star_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_underline_holo.9.png b/java/res/drawable-hdpi/key_hint_underline_holo.9.png
deleted file mode 100644
index e4f271918..000000000
Binary files a/java/res/drawable-hdpi/key_hint_underline_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-hdpi/key_hint_underline_large_holo.9.png
deleted file mode 100644
index dad34fc72..000000000
Binary files a/java/res/drawable-hdpi/key_hint_underline_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_underscore_holo.9.png b/java/res/drawable-hdpi/key_hint_underscore_holo.9.png
deleted file mode 100644
index e4f271918..000000000
Binary files a/java/res/drawable-hdpi/key_hint_underscore_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/key_hint_underscore_large_holo.9.png b/java/res/drawable-hdpi/key_hint_underscore_large_holo.9.png
deleted file mode 100644
index dad34fc72..000000000
Binary files a/java/res/drawable-hdpi/key_hint_underscore_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_background.9.png b/java/res/drawable-hdpi/keyboard_background.9.png
index edffac5b8..d57463fb6 100644
Binary files a/java/res/drawable-hdpi/keyboard_background.9.png and b/java/res/drawable-hdpi/keyboard_background.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_background_holo.9.png b/java/res/drawable-hdpi/keyboard_background_holo.9.png
index 76fe2c8b8..39746ffd2 100644
Binary files a/java/res/drawable-hdpi/keyboard_background_holo.9.png and b/java/res/drawable-hdpi/keyboard_background_holo.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_dark_background.9.png b/java/res/drawable-hdpi/keyboard_dark_background.9.png
index f315cbdd4..fa3d449f7 100644
Binary files a/java/res/drawable-hdpi/keyboard_dark_background.9.png and b/java/res/drawable-hdpi/keyboard_dark_background.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_0.9.png b/java/res/drawable-hdpi/keyboard_hint_0.9.png
deleted file mode 100644
index 271264e92..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_0.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_1.9.png b/java/res/drawable-hdpi/keyboard_hint_1.9.png
deleted file mode 100644
index eaf374262..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_1.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_2.9.png b/java/res/drawable-hdpi/keyboard_hint_2.9.png
deleted file mode 100644
index 8a1657117..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_2.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_3.9.png b/java/res/drawable-hdpi/keyboard_hint_3.9.png
deleted file mode 100644
index 34b501109..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_3.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_4.9.png b/java/res/drawable-hdpi/keyboard_hint_4.9.png
deleted file mode 100644
index d4cc250dd..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_4.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_5.9.png b/java/res/drawable-hdpi/keyboard_hint_5.9.png
deleted file mode 100644
index 6a054b42f..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_5.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_6.9.png b/java/res/drawable-hdpi/keyboard_hint_6.9.png
deleted file mode 100644
index 66e91400a..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_6.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_7.9.png b/java/res/drawable-hdpi/keyboard_hint_7.9.png
deleted file mode 100644
index 5eae24f4f..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_7.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_8.9.png b/java/res/drawable-hdpi/keyboard_hint_8.9.png
deleted file mode 100644
index ea7f512fd..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_8.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_9.9.png b/java/res/drawable-hdpi/keyboard_hint_9.9.png
deleted file mode 100644
index 0bf85de93..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_9.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_at.9.png b/java/res/drawable-hdpi/keyboard_hint_at.9.png
deleted file mode 100644
index 4b49c0dd9..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_at.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_colon.9.png b/java/res/drawable-hdpi/keyboard_hint_colon.9.png
deleted file mode 100644
index a91dc47f1..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_colon.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_doublecross.9.png b/java/res/drawable-hdpi/keyboard_hint_doublecross.9.png
deleted file mode 100644
index c0917c200..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_doublecross.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_exclamation.9.png b/java/res/drawable-hdpi/keyboard_hint_exclamation.9.png
deleted file mode 100644
index 98c07d94a..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_exclamation.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_greater.9.png b/java/res/drawable-hdpi/keyboard_hint_greater.9.png
deleted file mode 100644
index f2bf37dc2..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_greater.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_plus.9.png b/java/res/drawable-hdpi/keyboard_hint_plus.9.png
deleted file mode 100644
index 586e9c158..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_plus.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_question.9.png b/java/res/drawable-hdpi/keyboard_hint_question.9.png
deleted file mode 100644
index 6c7d4310a..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_question.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_quote.9.png b/java/res/drawable-hdpi/keyboard_hint_quote.9.png
deleted file mode 100644
index 57f44e4a2..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_quote.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_smaller.9.png b/java/res/drawable-hdpi/keyboard_hint_smaller.9.png
deleted file mode 100644
index 438b95ea8..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_smaller.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_hint_star.9.png b/java/res/drawable-hdpi/keyboard_hint_star.9.png
deleted file mode 100644
index 33f8281b2..000000000
Binary files a/java/res/drawable-hdpi/keyboard_hint_star.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png
index 762a25704..27d992375 100644
Binary files a/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png and b/java/res/drawable-hdpi/keyboard_key_feedback_background.9.png 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 8d6acacfb..fd7a56e17 100644
Binary files a/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png and b/java/res/drawable-hdpi/keyboard_key_feedback_background_holo.9.png 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
new file mode 100644
index 000000000..60d920315
Binary files /dev/null and b/java/res/drawable-hdpi/keyboard_key_feedback_left_background_holo.9.png 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
new file mode 100644
index 000000000..f694b796c
Binary files /dev/null and b/java/res/drawable-hdpi/keyboard_key_feedback_left_more_background_holo.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png
index 141d2d6be..33263b9d7 100644
Binary files a/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png and b/java/res/drawable-hdpi/keyboard_key_feedback_more_background.9.png 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 c21240f17..3165d08aa 100644
Binary files a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png and b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_holo.9.png 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
new file mode 100644
index 000000000..3136073a2
Binary files /dev/null and b/java/res/drawable-hdpi/keyboard_key_feedback_right_background_holo.9.png 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
new file mode 100644
index 000000000..13d5af9cb
Binary files /dev/null and b/java/res/drawable-hdpi/keyboard_key_feedback_right_more_background_holo.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png
index d6b2c7936..baff80950 100644
Binary files a/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png and b/java/res/drawable-hdpi/keyboard_popup_panel_background.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip.9.png b/java/res/drawable-hdpi/keyboard_suggest_strip.9.png
index 0ccdb6ab2..7cab5a899 100644
Binary files a/java/res/drawable-hdpi/keyboard_suggest_strip.9.png and b/java/res/drawable-hdpi/keyboard_suggest_strip.9.png differ
diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png
index 7ca3e6131..a62daf90c 100644
Binary files a/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png and b/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png 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 f55bcc933..f25003405 100644
Binary files a/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png and b/java/res/drawable-hdpi/keyboard_suggest_strip_holo.9.png differ
diff --git a/java/res/drawable-hdpi/mic_base.png b/java/res/drawable-hdpi/mic_base.png
new file mode 100644
index 000000000..504a1aa2a
Binary files /dev/null and b/java/res/drawable-hdpi/mic_base.png differ
diff --git a/java/res/drawable-hdpi/mic_full.png b/java/res/drawable-hdpi/mic_full.png
new file mode 100644
index 000000000..3f4a67657
Binary files /dev/null and b/java/res/drawable-hdpi/mic_full.png differ
diff --git a/java/res/drawable-hdpi/mic_slash.png b/java/res/drawable-hdpi/mic_slash.png
index dc8da6252..c3b10929b 100644
Binary files a/java/res/drawable-hdpi/mic_slash.png and b/java/res/drawable-hdpi/mic_slash.png differ
diff --git a/java/res/drawable-hdpi/mic_slash_holo.png b/java/res/drawable-hdpi/mic_slash_holo.png
deleted file mode 100644
index 27a05dec3..000000000
Binary files a/java/res/drawable-hdpi/mic_slash_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/ok_cancel.png b/java/res/drawable-hdpi/ok_cancel.png
deleted file mode 100644
index f11e57a38..000000000
Binary files a/java/res/drawable-hdpi/ok_cancel.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/ok_cancel_holo.9.png b/java/res/drawable-hdpi/ok_cancel_holo.9.png
deleted file mode 100644
index 5be81c35a..000000000
Binary files a/java/res/drawable-hdpi/ok_cancel_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level0.png b/java/res/drawable-hdpi/speak_now_level0.png
deleted file mode 100644
index 342849cfe..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level0.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level0_holo.png b/java/res/drawable-hdpi/speak_now_level0_holo.png
deleted file mode 100644
index 29eef926b..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level0_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level1.png b/java/res/drawable-hdpi/speak_now_level1.png
deleted file mode 100644
index 8947a4306..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level1.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level1_holo.png b/java/res/drawable-hdpi/speak_now_level1_holo.png
deleted file mode 100644
index a76e990b7..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level1_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level2.png b/java/res/drawable-hdpi/speak_now_level2.png
deleted file mode 100644
index 44fc58c4e..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level2.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level2_holo.png b/java/res/drawable-hdpi/speak_now_level2_holo.png
deleted file mode 100644
index 8cd462d20..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level2_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level3.png b/java/res/drawable-hdpi/speak_now_level3.png
deleted file mode 100644
index cfa5c1b87..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level3.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level3_holo.png b/java/res/drawable-hdpi/speak_now_level3_holo.png
deleted file mode 100644
index b7371dc88..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level3_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level4.png b/java/res/drawable-hdpi/speak_now_level4.png
deleted file mode 100644
index a050d8836..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level4.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level4_holo.png b/java/res/drawable-hdpi/speak_now_level4_holo.png
deleted file mode 100644
index 74befc8c3..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level4_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level5.png b/java/res/drawable-hdpi/speak_now_level5.png
deleted file mode 100644
index 8cd5ae7ad..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level5.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level5_holo.png b/java/res/drawable-hdpi/speak_now_level5_holo.png
deleted file mode 100644
index b027e8343..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level5_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level6.png b/java/res/drawable-hdpi/speak_now_level6.png
deleted file mode 100644
index 9f4481eb4..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level6.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/speak_now_level6_holo.png b/java/res/drawable-hdpi/speak_now_level6_holo.png
deleted file mode 100644
index 17bb03452..000000000
Binary files a/java/res/drawable-hdpi/speak_now_level6_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png b/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png
index 3e4eff698..af6082d04 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png and b/java/res/drawable-hdpi/sym_bkeyboard_123_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_delete.png b/java/res/drawable-hdpi/sym_bkeyboard_delete.png
index 1d24cc85c..999a182f4 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_delete.png and b/java/res/drawable-hdpi/sym_bkeyboard_delete.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_done.png b/java/res/drawable-hdpi/sym_bkeyboard_done.png
deleted file mode 100644
index b77803d21..000000000
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_done.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_mic.png b/java/res/drawable-hdpi/sym_bkeyboard_mic.png
index 512f46080..5c73600d9 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_mic.png and b/java/res/drawable-hdpi/sym_bkeyboard_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num0.png b/java/res/drawable-hdpi/sym_bkeyboard_num0.png
index 678a790de..02f281166 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num0.png and b/java/res/drawable-hdpi/sym_bkeyboard_num0.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num1.png b/java/res/drawable-hdpi/sym_bkeyboard_num1.png
index 4e68e35b3..304acfd31 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num1.png and b/java/res/drawable-hdpi/sym_bkeyboard_num1.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num2.png b/java/res/drawable-hdpi/sym_bkeyboard_num2.png
index 546663fda..295eba1e4 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num2.png and b/java/res/drawable-hdpi/sym_bkeyboard_num2.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num3.png b/java/res/drawable-hdpi/sym_bkeyboard_num3.png
index 57f9a8d8e..9ee6e4437 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num3.png and b/java/res/drawable-hdpi/sym_bkeyboard_num3.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num4.png b/java/res/drawable-hdpi/sym_bkeyboard_num4.png
index de504388f..ab4392dcb 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num4.png and b/java/res/drawable-hdpi/sym_bkeyboard_num4.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num5.png b/java/res/drawable-hdpi/sym_bkeyboard_num5.png
index 1d2e1ef89..004ecd72e 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num5.png and b/java/res/drawable-hdpi/sym_bkeyboard_num5.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num6.png b/java/res/drawable-hdpi/sym_bkeyboard_num6.png
index 39788b727..2aa317d77 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num6.png and b/java/res/drawable-hdpi/sym_bkeyboard_num6.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num7.png b/java/res/drawable-hdpi/sym_bkeyboard_num7.png
index fff6f27bf..721361c29 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num7.png and b/java/res/drawable-hdpi/sym_bkeyboard_num7.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num8.png b/java/res/drawable-hdpi/sym_bkeyboard_num8.png
index 8cc1a955e..941359f6b 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num8.png and b/java/res/drawable-hdpi/sym_bkeyboard_num8.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_num9.png b/java/res/drawable-hdpi/sym_bkeyboard_num9.png
index 021742509..74e08a087 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_num9.png and b/java/res/drawable-hdpi/sym_bkeyboard_num9.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_numalt.png b/java/res/drawable-hdpi/sym_bkeyboard_numalt.png
deleted file mode 100644
index 200714f66..000000000
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_numalt.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_numpound.png b/java/res/drawable-hdpi/sym_bkeyboard_numpound.png
deleted file mode 100644
index 0a46122b2..000000000
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_numpound.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_numstar.png b/java/res/drawable-hdpi/sym_bkeyboard_numstar.png
deleted file mode 100644
index ca22bd535..000000000
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_numstar.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_return.png b/java/res/drawable-hdpi/sym_bkeyboard_return.png
index 426e1599e..91bb397ff 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_return.png and b/java/res/drawable-hdpi/sym_bkeyboard_return.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_search.png b/java/res/drawable-hdpi/sym_bkeyboard_search.png
index 1b6f884fa..0ac08145b 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_search.png and b/java/res/drawable-hdpi/sym_bkeyboard_search.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_settings.png b/java/res/drawable-hdpi/sym_bkeyboard_settings.png
index 08ba18f28..5b6217aa0 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_settings.png and b/java/res/drawable-hdpi/sym_bkeyboard_settings.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_shift.png b/java/res/drawable-hdpi/sym_bkeyboard_shift.png
index 5a22dd309..5ef01b8bd 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_shift.png and b/java/res/drawable-hdpi/sym_bkeyboard_shift.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png b/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png
index 566449126..7d36dcb34 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png and b/java/res/drawable-hdpi/sym_bkeyboard_shift_locked.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_space.png b/java/res/drawable-hdpi/sym_bkeyboard_space.png
index cd0ebe2f4..77518cc93 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_space.png and b/java/res/drawable-hdpi/sym_bkeyboard_space.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_tab.png b/java/res/drawable-hdpi/sym_bkeyboard_tab.png
index 3466e1271..5db4cef2b 100644
Binary files a/java/res/drawable-hdpi/sym_bkeyboard_tab.png and b/java/res/drawable-hdpi/sym_bkeyboard_tab.png differ
diff --git a/java/res/drawable-hdpi/sym_bkeyboard_voice_off.png b/java/res/drawable-hdpi/sym_bkeyboard_voice_off.png
new file mode 100644
index 000000000..081a13096
Binary files /dev/null and b/java/res/drawable-hdpi/sym_bkeyboard_voice_off.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_123_mic.png b/java/res/drawable-hdpi/sym_keyboard_123_mic.png
index 62669803d..6f0aec24c 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_123_mic.png and b/java/res/drawable-hdpi/sym_keyboard_123_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete.png b/java/res/drawable-hdpi/sym_keyboard_delete.png
index 459ebcff8..0591b82cd 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_delete.png and b/java/res/drawable-hdpi/sym_keyboard_delete.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_holo.png b/java/res/drawable-hdpi/sym_keyboard_delete_holo.png
index ff2a4acbb..9d87ba619 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_delete_holo.png and b/java/res/drawable-hdpi/sym_keyboard_delete_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_done.png b/java/res/drawable-hdpi/sym_keyboard_done.png
deleted file mode 100644
index 471c5021b..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_done.png and /dev/null 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
index eef789680..e56799cdb 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
index 8322e8e1d..960bb4e8e 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_done.png b/java/res/drawable-hdpi/sym_keyboard_feedback_done.png
deleted file mode 100644
index 7015e266a..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_done.png and /dev/null 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
index 889477cfb..5d1cb7833 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png 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
index b0f6d7feb..3a56d4745 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png b/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png
index f82c33ae3..a88a19d0d 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
index 819236c8e..7d418d91d 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_return.png b/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
index f038d3abe..f73ff3cd9 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_return.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_return.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_search.png b/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
index 337f9e4fe..0e69157d6 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_search.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_search.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png b/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png
index 8a02be07e..6304b00ed 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_settings.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
index abf15f8f9..fc858f220 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
deleted file mode 100644
index 1fd822ea6..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_space.png b/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
index 70debca9b..67311fc8f 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_space.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_space.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
index d2efb1619..d75fcacd5 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png and b/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png 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
index dcc4bd59b..79f235f25 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png and b/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png 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
index ecf61a98e..e1444e85b 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png and b/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_mic.png b/java/res/drawable-hdpi/sym_keyboard_mic.png
index c8dca62a0..520a40f09 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_mic.png and b/java/res/drawable-hdpi/sym_keyboard_mic.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_mic_disabled.png b/java/res/drawable-hdpi/sym_keyboard_mic_disabled.png
deleted file mode 100644
index c8dca62a0..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_mic_disabled.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num0.png b/java/res/drawable-hdpi/sym_keyboard_num0.png
index 10ac70b9d..2024f416b 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num0.png and b/java/res/drawable-hdpi/sym_keyboard_num0.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num0_holo.png b/java/res/drawable-hdpi/sym_keyboard_num0_holo.png
index ec8b5a8d2..fbd55d68d 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num0_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num0_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num1.png b/java/res/drawable-hdpi/sym_keyboard_num1.png
index 0fc03efa5..5e66b9a31 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num1.png and b/java/res/drawable-hdpi/sym_keyboard_num1.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num1_holo.png b/java/res/drawable-hdpi/sym_keyboard_num1_holo.png
index 60c8ab8a8..e651c3e85 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num1_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num1_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num2.png b/java/res/drawable-hdpi/sym_keyboard_num2.png
index 283560b35..3933270dc 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num2.png and b/java/res/drawable-hdpi/sym_keyboard_num2.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num2_holo.png b/java/res/drawable-hdpi/sym_keyboard_num2_holo.png
index 578e37d6e..8458f5313 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num2_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num2_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num3.png b/java/res/drawable-hdpi/sym_keyboard_num3.png
index 9a3b3294b..c69548345 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num3.png and b/java/res/drawable-hdpi/sym_keyboard_num3.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num3_holo.png b/java/res/drawable-hdpi/sym_keyboard_num3_holo.png
index fb6250699..81025c635 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num3_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num3_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num4.png b/java/res/drawable-hdpi/sym_keyboard_num4.png
index f13ff1ae9..ef20add54 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num4.png and b/java/res/drawable-hdpi/sym_keyboard_num4.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num4_holo.png b/java/res/drawable-hdpi/sym_keyboard_num4_holo.png
index c0e54a523..30a0c77c7 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num4_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num4_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num5.png b/java/res/drawable-hdpi/sym_keyboard_num5.png
index c251329fa..9a2f51f8d 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num5.png and b/java/res/drawable-hdpi/sym_keyboard_num5.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num5_holo.png b/java/res/drawable-hdpi/sym_keyboard_num5_holo.png
index b581a4657..147f056fc 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num5_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num5_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num6.png b/java/res/drawable-hdpi/sym_keyboard_num6.png
index 4acba4c91..6829f81d1 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num6.png and b/java/res/drawable-hdpi/sym_keyboard_num6.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num6_holo.png b/java/res/drawable-hdpi/sym_keyboard_num6_holo.png
index 0791802ba..b96830844 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num6_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num6_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num7.png b/java/res/drawable-hdpi/sym_keyboard_num7.png
index 14931c18c..dc608d4e1 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num7.png and b/java/res/drawable-hdpi/sym_keyboard_num7.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num7_holo.png b/java/res/drawable-hdpi/sym_keyboard_num7_holo.png
index 7b3d3a825..7d44bfb45 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num7_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num7_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num8.png b/java/res/drawable-hdpi/sym_keyboard_num8.png
index d4973fdc9..f0978c611 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num8.png and b/java/res/drawable-hdpi/sym_keyboard_num8.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num8_holo.png b/java/res/drawable-hdpi/sym_keyboard_num8_holo.png
index e076aedbe..093cd743a 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num8_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num8_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num9.png b/java/res/drawable-hdpi/sym_keyboard_num9.png
index 49cec66f4..4b8328d1f 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num9.png and b/java/res/drawable-hdpi/sym_keyboard_num9.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_num9_holo.png b/java/res/drawable-hdpi/sym_keyboard_num9_holo.png
index 4189cda79..f35e80dab 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_num9_holo.png and b/java/res/drawable-hdpi/sym_keyboard_num9_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_numalt.png b/java/res/drawable-hdpi/sym_keyboard_numalt.png
deleted file mode 100644
index 3cc5311cd..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_numalt.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_numbpound_holo.png b/java/res/drawable-hdpi/sym_keyboard_numbpound_holo.png
deleted file mode 100644
index 73f8be054..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_numbpound_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_numbstar_holo.png b/java/res/drawable-hdpi/sym_keyboard_numbstar_holo.png
deleted file mode 100644
index fcb891b93..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_numbstar_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_numpound.png b/java/res/drawable-hdpi/sym_keyboard_numpound.png
deleted file mode 100644
index d09133929..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_numpound.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_numstar.png b/java/res/drawable-hdpi/sym_keyboard_numstar.png
deleted file mode 100644
index e838e169f..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_numstar.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return.png b/java/res/drawable-hdpi/sym_keyboard_return.png
index 9d97e1efd..9743c7f2f 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_return.png and b/java/res/drawable-hdpi/sym_keyboard_return.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return_holo.png b/java/res/drawable-hdpi/sym_keyboard_return_holo.png
index ca3c02dbe..ef04d6767 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_return_holo.png and b/java/res/drawable-hdpi/sym_keyboard_return_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_search.png b/java/res/drawable-hdpi/sym_keyboard_search.png
index 1aa22d7e2..8cd28c64a 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_search.png and b/java/res/drawable-hdpi/sym_keyboard_search.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings.png b/java/res/drawable-hdpi/sym_keyboard_settings.png
index 35d1ed6e6..1e5bf939e 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_settings.png and b/java/res/drawable-hdpi/sym_keyboard_settings.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png
index 471bd0b86..29085e5ea 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_settings_holo.png and b/java/res/drawable-hdpi/sym_keyboard_settings_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift.png b/java/res/drawable-hdpi/sym_keyboard_shift.png
index bf217d147..8e3d0320c 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_shift.png and b/java/res/drawable-hdpi/sym_keyboard_shift.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png
index 375c1b4ca..1e074a716 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_shift_holo.png and b/java/res/drawable-hdpi/sym_keyboard_shift_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked.png
index d11b39712..d345634a6 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_shift_locked.png and b/java/res/drawable-hdpi/sym_keyboard_shift_locked.png 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 57362eaf4..ab77b9542 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png and b/java/res/drawable-hdpi/sym_keyboard_shift_locked_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-hdpi/sym_keyboard_smiley_holo.png
deleted file mode 100644
index a3f5e840d..000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_smiley_holo.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space.png b/java/res/drawable-hdpi/sym_keyboard_space.png
index fcd20de7d..780733ec5 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_space.png and b/java/res/drawable-hdpi/sym_keyboard_space.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_holo.png b/java/res/drawable-hdpi/sym_keyboard_space_holo.png
index a8e5f7d5e..143a89964 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_space_holo.png and b/java/res/drawable-hdpi/sym_keyboard_space_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_space_led.9.png b/java/res/drawable-hdpi/sym_keyboard_space_led.9.png
index 2c6f4a925..c76f64b94 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_space_led.9.png and b/java/res/drawable-hdpi/sym_keyboard_space_led.9.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_tab.png b/java/res/drawable-hdpi/sym_keyboard_tab.png
index 51d17d989..3d1c5c0ea 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_tab.png and b/java/res/drawable-hdpi/sym_keyboard_tab.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_tab_holo.png b/java/res/drawable-hdpi/sym_keyboard_tab_holo.png
new file mode 100644
index 000000000..321c541cc
Binary files /dev/null and b/java/res/drawable-hdpi/sym_keyboard_tab_holo.png differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_holo.png b/java/res/drawable-hdpi/sym_keyboard_voice_holo.png
index 5ea2edc53..d3cb46e0d 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_voice_holo.png and b/java/res/drawable-hdpi/sym_keyboard_voice_holo.png 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 6e6279a8a..45e3e79c5 100644
Binary files a/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png and b/java/res/drawable-hdpi/sym_keyboard_voice_off_holo.png differ
diff --git a/java/res/drawable-hdpi/top_suggest_line_holo.9.png b/java/res/drawable-hdpi/top_suggest_line_holo.9.png
deleted file mode 100644
index dcce3015f..000000000
Binary files a/java/res/drawable-hdpi/top_suggest_line_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/voice_ime_background.9.png b/java/res/drawable-hdpi/voice_ime_background.9.png
deleted file mode 100644
index 42868522f..000000000
Binary files a/java/res/drawable-hdpi/voice_ime_background.9.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/voice_swipe_hint.png b/java/res/drawable-hdpi/voice_swipe_hint.png
deleted file mode 100644
index 130f83a9c..000000000
Binary files a/java/res/drawable-hdpi/voice_swipe_hint.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/vs_dialog_blue.9.png b/java/res/drawable-hdpi/vs_dialog_blue.9.png
new file mode 100644
index 000000000..4f813ead3
Binary files /dev/null and b/java/res/drawable-hdpi/vs_dialog_blue.9.png differ
diff --git a/java/res/drawable-hdpi/vs_dialog_red.9.png b/java/res/drawable-hdpi/vs_dialog_red.9.png
new file mode 100644
index 000000000..a2055600e
Binary files /dev/null and b/java/res/drawable-hdpi/vs_dialog_red.9.png differ
diff --git a/java/res/drawable-hdpi/vs_dialog_yellow.9.png b/java/res/drawable-hdpi/vs_dialog_yellow.9.png
new file mode 100644
index 000000000..ce664b676
Binary files /dev/null and b/java/res/drawable-hdpi/vs_dialog_yellow.9.png differ
diff --git a/java/res/drawable-xlarge/vs_popup_mic_edge.png b/java/res/drawable-hdpi/vs_popup_mic_edge.png
similarity index 100%
rename from java/res/drawable-xlarge/vs_popup_mic_edge.png
rename to java/res/drawable-hdpi/vs_popup_mic_edge.png
diff --git a/java/res/drawable-hdpi/working.png b/java/res/drawable-hdpi/working.png
deleted file mode 100755
index 5ea702307..000000000
Binary files a/java/res/drawable-hdpi/working.png and /dev/null 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
old mode 100755
new mode 100644
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
old mode 100755
new mode 100644
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
old mode 100755
new mode 100644
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
old mode 100755
new mode 100644
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
old mode 100755
new mode 100644
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
old mode 100755
new mode 100644
diff --git a/java/res/drawable-land-hdpi/key_hint_at_holo.9.png b/java/res/drawable-land-hdpi/key_hint_at_holo.9.png
deleted file mode 100644
index 874802fcb..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_at_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_at_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_at_large_holo.9.png
deleted file mode 100644
index d90bc31ab..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_at_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_colon_holo.9.png b/java/res/drawable-land-hdpi/key_hint_colon_holo.9.png
deleted file mode 100644
index e82e41c94..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_colon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_colon_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_colon_large_holo.9.png
deleted file mode 100644
index e46845dbd..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_colon_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_comma_holo.9.png b/java/res/drawable-land-hdpi/key_hint_comma_holo.9.png
deleted file mode 100644
index da0d6fdd6..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_comma_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_comma_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_comma_large_holo.9.png
deleted file mode 100644
index 1f2f70762..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_comma_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_dash_holo.9.png b/java/res/drawable-land-hdpi/key_hint_dash_holo.9.png
deleted file mode 100644
index c045b8c54..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_dash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_doublecross_holo.9.png b/java/res/drawable-land-hdpi/key_hint_doublecross_holo.9.png
deleted file mode 100644
index 6975ab71f..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_doublecross_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_equal_holo.9.png b/java/res/drawable-land-hdpi/key_hint_equal_holo.9.png
deleted file mode 100644
index a619fb29f..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_equal_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_exclamation_holo.9.png b/java/res/drawable-land-hdpi/key_hint_exclamation_holo.9.png
deleted file mode 100644
index 570a1b87d..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_exclamation_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_exclamation_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_exclamation_large_holo.9.png
deleted file mode 100644
index e93e49187..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_exclamation_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_larger_holo.9.png b/java/res/drawable-land-hdpi/key_hint_larger_holo.9.png
deleted file mode 100644
index f8d960f17..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_larger_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_minus_holo.9.png b/java/res/drawable-land-hdpi/key_hint_minus_holo.9.png
deleted file mode 100644
index 2c34ef90b..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_minus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_minus_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_minus_large_holo.9.png
deleted file mode 100644
index 0df056ee1..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_minus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_parenclose_holo.9.png b/java/res/drawable-land-hdpi/key_hint_parenclose_holo.9.png
deleted file mode 100644
index 9d8b05761..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_parenclose_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_parenopen_holo.9.png b/java/res/drawable-land-hdpi/key_hint_parenopen_holo.9.png
deleted file mode 100644
index 8e2d8f2ad..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_parenopen_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_period_holo.9.png b/java/res/drawable-land-hdpi/key_hint_period_holo.9.png
deleted file mode 100644
index bf8c6d722..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_period_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_plus_holo.9.png b/java/res/drawable-land-hdpi/key_hint_plus_holo.9.png
deleted file mode 100644
index 3dd85065a..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_plus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_plus_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_plus_large_holo.9.png
deleted file mode 100644
index b0d75f433..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_plus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_question_holo.9.png b/java/res/drawable-land-hdpi/key_hint_question_holo.9.png
deleted file mode 100644
index 1a0db31ec..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_question_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_question_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_question_large_holo.9.png
deleted file mode 100644
index 44dfdc4ea..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_question_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_quote_holo.9.png b/java/res/drawable-land-hdpi/key_hint_quote_holo.9.png
deleted file mode 100644
index bfb612f59..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_quote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_quote_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_quote_large_holo.9.png
deleted file mode 100644
index e73b9e0c6..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_quote_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_semicolon_holo.9.png b/java/res/drawable-land-hdpi/key_hint_semicolon_holo.9.png
deleted file mode 100644
index f35275857..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_semicolon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_simplequote_holo.9.png b/java/res/drawable-land-hdpi/key_hint_simplequote_holo.9.png
deleted file mode 100644
index e69a9696e..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_simplequote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_slash_holo.9.png b/java/res/drawable-land-hdpi/key_hint_slash_holo.9.png
deleted file mode 100644
index 592ea4434..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_slash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_slash_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_slash_large_holo.9.png
deleted file mode 100644
index b18be7bb5..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_slash_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_smaller_holo.9.png b/java/res/drawable-land-hdpi/key_hint_smaller_holo.9.png
deleted file mode 100644
index 145320dab..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_smaller_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_star_holo.9.png b/java/res/drawable-land-hdpi/key_hint_star_holo.9.png
deleted file mode 100644
index 9bde78a21..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_star_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_underline_holo.9.png b/java/res/drawable-land-hdpi/key_hint_underline_holo.9.png
deleted file mode 100644
index b2ab17d41..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_underline_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_underline_large_holo.9.png
deleted file mode 100644
index dad34fc72..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_underline_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_underscore_holo.9.png b/java/res/drawable-land-hdpi/key_hint_underscore_holo.9.png
deleted file mode 100644
index e4f271918..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_underscore_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-hdpi/key_hint_underscore_large_holo.9.png b/java/res/drawable-land-hdpi/key_hint_underscore_large_holo.9.png
deleted file mode 100644
index dad34fc72..000000000
Binary files a/java/res/drawable-land-hdpi/key_hint_underscore_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_at_holo.9.png b/java/res/drawable-land-mdpi/key_hint_at_holo.9.png
deleted file mode 100644
index 5b946ff9b..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_at_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_at_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_at_large_holo.9.png
deleted file mode 100644
index 852f899ed..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_at_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_colon_holo.9.png b/java/res/drawable-land-mdpi/key_hint_colon_holo.9.png
deleted file mode 100644
index 1d9346e6f..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_colon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_colon_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_colon_large_holo.9.png
deleted file mode 100644
index 17e9091b4..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_colon_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_comma_holo.9.png b/java/res/drawable-land-mdpi/key_hint_comma_holo.9.png
deleted file mode 100644
index c2a913c04..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_comma_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_comma_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_comma_large_holo.9.png
deleted file mode 100644
index 846f213f1..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_comma_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_dash_holo.9.png b/java/res/drawable-land-mdpi/key_hint_dash_holo.9.png
deleted file mode 100644
index 1cb0bdfaa..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_dash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_doublecross_holo.9.png b/java/res/drawable-land-mdpi/key_hint_doublecross_holo.9.png
deleted file mode 100644
index 7e7ceb3fc..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_doublecross_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_equal_holo.9.png b/java/res/drawable-land-mdpi/key_hint_equal_holo.9.png
deleted file mode 100644
index 8e570595c..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_equal_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_exclamation_holo.9.png b/java/res/drawable-land-mdpi/key_hint_exclamation_holo.9.png
deleted file mode 100644
index ce8e8de43..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_exclamation_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_exclamation_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_exclamation_large_holo.9.png
deleted file mode 100644
index 035dcf85d..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_exclamation_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_larger_holo.9.png b/java/res/drawable-land-mdpi/key_hint_larger_holo.9.png
deleted file mode 100644
index 37c05275e..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_larger_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_parenclose_holo.9.png b/java/res/drawable-land-mdpi/key_hint_parenclose_holo.9.png
deleted file mode 100644
index 97e1f1449..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_parenclose_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_parenopen_holo.9.png b/java/res/drawable-land-mdpi/key_hint_parenopen_holo.9.png
deleted file mode 100644
index 36add5d51..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_parenopen_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_period_holo.9.png b/java/res/drawable-land-mdpi/key_hint_period_holo.9.png
deleted file mode 100644
index 4a70f07dc..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_period_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_plus_holo.9.png b/java/res/drawable-land-mdpi/key_hint_plus_holo.9.png
deleted file mode 100644
index 931390b45..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_plus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_plus_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_plus_large_holo.9.png
deleted file mode 100644
index e6f9f8a9c..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_plus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_question_holo.9.png b/java/res/drawable-land-mdpi/key_hint_question_holo.9.png
deleted file mode 100644
index 6cbeb5993..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_question_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_question_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_question_large_holo.9.png
deleted file mode 100644
index bfd58de09..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_question_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_quote_holo.9.png b/java/res/drawable-land-mdpi/key_hint_quote_holo.9.png
deleted file mode 100644
index 3b361b71c..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_quote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_quote_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_quote_large_holo.9.png
deleted file mode 100644
index 2a08aa12e..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_quote_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_semicolon_holo.9.png b/java/res/drawable-land-mdpi/key_hint_semicolon_holo.9.png
deleted file mode 100644
index 63a3875b5..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_semicolon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_simplequote_holo.9.png b/java/res/drawable-land-mdpi/key_hint_simplequote_holo.9.png
deleted file mode 100644
index 3c217b058..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_simplequote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_slash_holo.9.png b/java/res/drawable-land-mdpi/key_hint_slash_holo.9.png
deleted file mode 100644
index 98545f0ac..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_slash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_slash_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_slash_large_holo.9.png
deleted file mode 100644
index a3a02973c..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_slash_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_smaller_holo.9.png b/java/res/drawable-land-mdpi/key_hint_smaller_holo.9.png
deleted file mode 100644
index 5af183644..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_smaller_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_star_holo.9.png b/java/res/drawable-land-mdpi/key_hint_star_holo.9.png
deleted file mode 100644
index 18304d738..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_star_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-land-mdpi/key_hint_underscore_large_holo.9.png b/java/res/drawable-land-mdpi/key_hint_underscore_large_holo.9.png
deleted file mode 100644
index ee0e83578..000000000
Binary files a/java/res/drawable-land-mdpi/key_hint_underscore_large_holo.9.png and /dev/null 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
new file mode 100644
index 000000000..3cd20d34f
Binary files /dev/null and b/java/res/drawable-land-xhdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-xlarge/btn_center_default.9.png b/java/res/drawable-mdpi/btn_center_default.9.png
old mode 100755
new mode 100644
similarity index 100%
rename from java/res/drawable-xlarge/btn_center_default.9.png
rename to java/res/drawable-mdpi/btn_center_default.9.png
diff --git a/java/res/drawable-xlarge/btn_center_pressed.9.png b/java/res/drawable-mdpi/btn_center_pressed.9.png
old mode 100755
new mode 100644
similarity index 100%
rename from java/res/drawable-xlarge/btn_center_pressed.9.png
rename to java/res/drawable-mdpi/btn_center_pressed.9.png
diff --git a/java/res/drawable-xlarge/btn_center_selected.9.png b/java/res/drawable-mdpi/btn_center_selected.9.png
similarity index 100%
rename from java/res/drawable-xlarge/btn_center_selected.9.png
rename to java/res/drawable-mdpi/btn_center_selected.9.png
diff --git a/java/res/drawable-mdpi/btn_close_candidates_pane.9.png b/java/res/drawable-mdpi/btn_close_candidates_pane.9.png
new file mode 100644
index 000000000..5ea56925d
Binary files /dev/null and b/java/res/drawable-mdpi/btn_close_candidates_pane.9.png differ
diff --git a/java/res/drawable-mdpi/btn_expand_candidates_pane.9.png b/java/res/drawable-mdpi/btn_expand_candidates_pane.9.png
new file mode 100644
index 000000000..83cb65305
Binary files /dev/null and b/java/res/drawable-mdpi/btn_expand_candidates_pane.9.png differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png
index 1534d99d1..034d63870 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_holo.9.png 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 936513a31..0cb53d506 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png 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 b071251a7..0050a0110 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png 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 9fed21edf..27f8fdac6 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_holo.9.png 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 3fce55938..b8ce95235 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png 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 3f82b67dd..4d4d1a748 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png 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 eded1736b..90f471f48 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_normal_holo.9.png 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 e6a1dcecc..c850768cd 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed_holo.9.png 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
new file mode 100644
index 000000000..e9186b7bb
Binary files /dev/null and b/java/res/drawable-mdpi/btn_keyboard_key_popup_background_holo.9.png differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png
index d2f5f3bf2..e96c8c5db 100644
Binary files a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png and b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_holo.9.png differ
diff --git a/java/res/drawable-mdpi/cancel.png b/java/res/drawable-mdpi/cancel.png
deleted file mode 100644
index 713a37875..000000000
Binary files a/java/res/drawable-mdpi/cancel.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/cancel_holo.9.png b/java/res/drawable-mdpi/cancel_holo.9.png
deleted file mode 100644
index 74f967eb9..000000000
Binary files a/java/res/drawable-mdpi/cancel_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/dialog_bubble_step02.9.png b/java/res/drawable-mdpi/dialog_bubble_step02.9.png
deleted file mode 100644
index d77f85fe2..000000000
Binary files a/java/res/drawable-mdpi/dialog_bubble_step02.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/dialog_bubble_step07.9.png b/java/res/drawable-mdpi/dialog_bubble_step07.9.png
deleted file mode 100644
index 80f4a0eaa..000000000
Binary files a/java/res/drawable-mdpi/dialog_bubble_step07.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/hint_popup_holo.9.png b/java/res/drawable-mdpi/hint_popup_holo.9.png
index 01d1139d8..e9e131c54 100644
Binary files a/java/res/drawable-mdpi/hint_popup_holo.9.png and b/java/res/drawable-mdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-mdpi/key_hint_at_holo.9.png b/java/res/drawable-mdpi/key_hint_at_holo.9.png
deleted file mode 100644
index 5b946ff9b..000000000
Binary files a/java/res/drawable-mdpi/key_hint_at_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_at_large_holo.9.png b/java/res/drawable-mdpi/key_hint_at_large_holo.9.png
deleted file mode 100644
index 852f899ed..000000000
Binary files a/java/res/drawable-mdpi/key_hint_at_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_colon_holo.9.png b/java/res/drawable-mdpi/key_hint_colon_holo.9.png
deleted file mode 100644
index 1d9346e6f..000000000
Binary files a/java/res/drawable-mdpi/key_hint_colon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_colon_large_holo.9.png b/java/res/drawable-mdpi/key_hint_colon_large_holo.9.png
deleted file mode 100644
index 17e9091b4..000000000
Binary files a/java/res/drawable-mdpi/key_hint_colon_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_comma_holo.9.png b/java/res/drawable-mdpi/key_hint_comma_holo.9.png
deleted file mode 100644
index c2a913c04..000000000
Binary files a/java/res/drawable-mdpi/key_hint_comma_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_comma_large_holo.9.png b/java/res/drawable-mdpi/key_hint_comma_large_holo.9.png
deleted file mode 100644
index 846f213f1..000000000
Binary files a/java/res/drawable-mdpi/key_hint_comma_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_dash_holo.9.png b/java/res/drawable-mdpi/key_hint_dash_holo.9.png
deleted file mode 100644
index 2ee22ba79..000000000
Binary files a/java/res/drawable-mdpi/key_hint_dash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_doublecross_holo.9.png b/java/res/drawable-mdpi/key_hint_doublecross_holo.9.png
deleted file mode 100644
index 0da933239..000000000
Binary files a/java/res/drawable-mdpi/key_hint_doublecross_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_equal_holo.9.png b/java/res/drawable-mdpi/key_hint_equal_holo.9.png
deleted file mode 100644
index f5a9ba2f4..000000000
Binary files a/java/res/drawable-mdpi/key_hint_equal_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_exclamation_holo.9.png b/java/res/drawable-mdpi/key_hint_exclamation_holo.9.png
deleted file mode 100644
index ce8e8de43..000000000
Binary files a/java/res/drawable-mdpi/key_hint_exclamation_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_exclamation_large_holo.9.png b/java/res/drawable-mdpi/key_hint_exclamation_large_holo.9.png
deleted file mode 100644
index 035dcf85d..000000000
Binary files a/java/res/drawable-mdpi/key_hint_exclamation_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_larger_holo.9.png b/java/res/drawable-mdpi/key_hint_larger_holo.9.png
deleted file mode 100644
index 50652bb13..000000000
Binary files a/java/res/drawable-mdpi/key_hint_larger_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_minus_holo.9.png b/java/res/drawable-mdpi/key_hint_minus_holo.9.png
deleted file mode 100644
index e59a31587..000000000
Binary files a/java/res/drawable-mdpi/key_hint_minus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_minus_large_holo.9.png b/java/res/drawable-mdpi/key_hint_minus_large_holo.9.png
deleted file mode 100644
index 52c28dd87..000000000
Binary files a/java/res/drawable-mdpi/key_hint_minus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_parenclose_holo.9.png b/java/res/drawable-mdpi/key_hint_parenclose_holo.9.png
deleted file mode 100644
index 52ee86a0f..000000000
Binary files a/java/res/drawable-mdpi/key_hint_parenclose_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_parenopen_holo.9.png b/java/res/drawable-mdpi/key_hint_parenopen_holo.9.png
deleted file mode 100644
index b0ed388ad..000000000
Binary files a/java/res/drawable-mdpi/key_hint_parenopen_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_period_holo.9.png b/java/res/drawable-mdpi/key_hint_period_holo.9.png
deleted file mode 100644
index 8d798a57f..000000000
Binary files a/java/res/drawable-mdpi/key_hint_period_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_plus_holo.9.png b/java/res/drawable-mdpi/key_hint_plus_holo.9.png
deleted file mode 100644
index 931390b45..000000000
Binary files a/java/res/drawable-mdpi/key_hint_plus_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_plus_large_holo.9.png b/java/res/drawable-mdpi/key_hint_plus_large_holo.9.png
deleted file mode 100644
index e6f9f8a9c..000000000
Binary files a/java/res/drawable-mdpi/key_hint_plus_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_question_holo.9.png b/java/res/drawable-mdpi/key_hint_question_holo.9.png
deleted file mode 100644
index 6cbeb5993..000000000
Binary files a/java/res/drawable-mdpi/key_hint_question_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_question_large_holo.9.png b/java/res/drawable-mdpi/key_hint_question_large_holo.9.png
deleted file mode 100644
index bfd58de09..000000000
Binary files a/java/res/drawable-mdpi/key_hint_question_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_quote_holo.9.png b/java/res/drawable-mdpi/key_hint_quote_holo.9.png
deleted file mode 100644
index 3b361b71c..000000000
Binary files a/java/res/drawable-mdpi/key_hint_quote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_quote_large_holo.9.png b/java/res/drawable-mdpi/key_hint_quote_large_holo.9.png
deleted file mode 100644
index 2a08aa12e..000000000
Binary files a/java/res/drawable-mdpi/key_hint_quote_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_semicolon_holo.9.png b/java/res/drawable-mdpi/key_hint_semicolon_holo.9.png
deleted file mode 100644
index 7f9e8c90e..000000000
Binary files a/java/res/drawable-mdpi/key_hint_semicolon_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_simplequote_holo.9.png b/java/res/drawable-mdpi/key_hint_simplequote_holo.9.png
deleted file mode 100644
index 5e1a45c0e..000000000
Binary files a/java/res/drawable-mdpi/key_hint_simplequote_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_slash_holo.9.png b/java/res/drawable-mdpi/key_hint_slash_holo.9.png
deleted file mode 100644
index 645586a30..000000000
Binary files a/java/res/drawable-mdpi/key_hint_slash_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_slash_large_holo.9.png b/java/res/drawable-mdpi/key_hint_slash_large_holo.9.png
deleted file mode 100644
index 75c3bb1a6..000000000
Binary files a/java/res/drawable-mdpi/key_hint_slash_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_smaller_holo.9.png b/java/res/drawable-mdpi/key_hint_smaller_holo.9.png
deleted file mode 100644
index 2a0587cbd..000000000
Binary files a/java/res/drawable-mdpi/key_hint_smaller_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_star_holo.9.png b/java/res/drawable-mdpi/key_hint_star_holo.9.png
deleted file mode 100644
index 9f33b9830..000000000
Binary files a/java/res/drawable-mdpi/key_hint_star_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_underscore_holo.9.png b/java/res/drawable-mdpi/key_hint_underscore_holo.9.png
deleted file mode 100644
index 52e871e0a..000000000
Binary files a/java/res/drawable-mdpi/key_hint_underscore_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/key_hint_underscore_large_holo.9.png b/java/res/drawable-mdpi/key_hint_underscore_large_holo.9.png
deleted file mode 100644
index ee0e83578..000000000
Binary files a/java/res/drawable-mdpi/key_hint_underscore_large_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_background_holo.9.png b/java/res/drawable-mdpi/keyboard_background_holo.9.png
index a93966c92..f1d55c6dd 100644
Binary files a/java/res/drawable-mdpi/keyboard_background_holo.9.png and b/java/res/drawable-mdpi/keyboard_background_holo.9.png differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_0.9.png b/java/res/drawable-mdpi/keyboard_hint_0.9.png
deleted file mode 100644
index 61ad1b50a..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_0.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_1.9.png b/java/res/drawable-mdpi/keyboard_hint_1.9.png
deleted file mode 100644
index cd7772e71..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_1.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_2.9.png b/java/res/drawable-mdpi/keyboard_hint_2.9.png
deleted file mode 100644
index fa5f8b79c..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_2.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_3.9.png b/java/res/drawable-mdpi/keyboard_hint_3.9.png
deleted file mode 100644
index 0c7336cb7..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_3.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_4.9.png b/java/res/drawable-mdpi/keyboard_hint_4.9.png
deleted file mode 100644
index 73ef06c0e..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_4.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_5.9.png b/java/res/drawable-mdpi/keyboard_hint_5.9.png
deleted file mode 100644
index aea460e1c..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_5.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_6.9.png b/java/res/drawable-mdpi/keyboard_hint_6.9.png
deleted file mode 100644
index 16a9237e3..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_6.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_7.9.png b/java/res/drawable-mdpi/keyboard_hint_7.9.png
deleted file mode 100644
index 6747a19c0..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_7.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_8.9.png b/java/res/drawable-mdpi/keyboard_hint_8.9.png
deleted file mode 100644
index 28be2fb86..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_8.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_9.9.png b/java/res/drawable-mdpi/keyboard_hint_9.9.png
deleted file mode 100644
index 731d63b1b..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_9.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_at.9.png b/java/res/drawable-mdpi/keyboard_hint_at.9.png
deleted file mode 100644
index 69baedef4..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_at.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_colon.9.png b/java/res/drawable-mdpi/keyboard_hint_colon.9.png
deleted file mode 100644
index 9d0d7cbab..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_colon.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png b/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png
deleted file mode 100644
index d24aa0f07..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_doublecross.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png b/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png
deleted file mode 100644
index f6cc7fe84..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_exclamation.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_greater.9.png b/java/res/drawable-mdpi/keyboard_hint_greater.9.png
deleted file mode 100644
index 5210392bf..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_greater.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_plus.9.png b/java/res/drawable-mdpi/keyboard_hint_plus.9.png
deleted file mode 100644
index d1d85ac87..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_plus.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_question.9.png b/java/res/drawable-mdpi/keyboard_hint_question.9.png
deleted file mode 100644
index 37f6e5f36..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_question.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_quote.9.png b/java/res/drawable-mdpi/keyboard_hint_quote.9.png
deleted file mode 100644
index e7d2cb5e3..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_quote.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_smaller.9.png b/java/res/drawable-mdpi/keyboard_hint_smaller.9.png
deleted file mode 100644
index 76553cf96..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_smaller.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/keyboard_hint_star.9.png b/java/res/drawable-mdpi/keyboard_hint_star.9.png
deleted file mode 100644
index 47978c46c..000000000
Binary files a/java/res/drawable-mdpi/keyboard_hint_star.9.png and /dev/null 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 286cf84fc..9a1b7aadd 100644
Binary files a/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png and b/java/res/drawable-mdpi/keyboard_key_feedback_background_holo.9.png 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
new file mode 100644
index 000000000..cb222b0f9
Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_key_feedback_left_background_holo.9.png 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
new file mode 100644
index 000000000..07d980083
Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_key_feedback_left_more_background_holo.9.png 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 e3f5be86d..05a332b8e 100644
Binary files a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png and b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_holo.9.png 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
new file mode 100644
index 000000000..fd1675512
Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_key_feedback_right_background_holo.9.png 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
new file mode 100644
index 000000000..1acbd8268
Binary files /dev/null and b/java/res/drawable-mdpi/keyboard_key_feedback_right_more_background_holo.9.png 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 1f87a68e9..17faf86d0 100644
Binary files a/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png and b/java/res/drawable-mdpi/keyboard_suggest_strip_holo.9.png differ
diff --git a/java/res/drawable-xlarge/mic_base.png b/java/res/drawable-mdpi/mic_base.png
similarity index 100%
rename from java/res/drawable-xlarge/mic_base.png
rename to java/res/drawable-mdpi/mic_base.png
diff --git a/java/res/drawable-xlarge/mic_full.png b/java/res/drawable-mdpi/mic_full.png
similarity index 100%
rename from java/res/drawable-xlarge/mic_full.png
rename to java/res/drawable-mdpi/mic_full.png
diff --git a/java/res/drawable-mdpi/mic_slash_holo.png b/java/res/drawable-mdpi/mic_slash_holo.png
deleted file mode 100644
index 07181e6fa..000000000
Binary files a/java/res/drawable-mdpi/mic_slash_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/ok_cancel.png b/java/res/drawable-mdpi/ok_cancel.png
deleted file mode 100644
index 20d10f986..000000000
Binary files a/java/res/drawable-mdpi/ok_cancel.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/ok_cancel_holo.9.png b/java/res/drawable-mdpi/ok_cancel_holo.9.png
deleted file mode 100644
index 035a4f6f0..000000000
Binary files a/java/res/drawable-mdpi/ok_cancel_holo.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level0.png b/java/res/drawable-mdpi/speak_now_level0.png
deleted file mode 100644
index 5bd13603e..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level0.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level0_holo.png b/java/res/drawable-mdpi/speak_now_level0_holo.png
deleted file mode 100644
index 2090b95a5..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level0_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level1.png b/java/res/drawable-mdpi/speak_now_level1.png
deleted file mode 100644
index ccb76b879..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level1.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level1_holo.png b/java/res/drawable-mdpi/speak_now_level1_holo.png
deleted file mode 100644
index 8acf482aa..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level1_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level2.png b/java/res/drawable-mdpi/speak_now_level2.png
deleted file mode 100644
index 715f90081..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level2.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level2_holo.png b/java/res/drawable-mdpi/speak_now_level2_holo.png
deleted file mode 100644
index 4b307d542..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level2_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level3.png b/java/res/drawable-mdpi/speak_now_level3.png
deleted file mode 100644
index 725248a25..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level3.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level3_holo.png b/java/res/drawable-mdpi/speak_now_level3_holo.png
deleted file mode 100644
index 7c7cd666f..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level3_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level4.png b/java/res/drawable-mdpi/speak_now_level4.png
deleted file mode 100644
index ff6c50b40..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level4.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level4_holo.png b/java/res/drawable-mdpi/speak_now_level4_holo.png
deleted file mode 100644
index 362c45337..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level4_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level5.png b/java/res/drawable-mdpi/speak_now_level5.png
deleted file mode 100644
index a5d6b89d6..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level5.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level5_holo.png b/java/res/drawable-mdpi/speak_now_level5_holo.png
deleted file mode 100644
index 1886befff..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level5_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level6.png b/java/res/drawable-mdpi/speak_now_level6.png
deleted file mode 100644
index dcdb48d08..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level6.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/speak_now_level6_holo.png b/java/res/drawable-mdpi/speak_now_level6_holo.png
deleted file mode 100644
index 88e4131c8..000000000
Binary files a/java/res/drawable-mdpi/speak_now_level6_holo.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_done.png b/java/res/drawable-mdpi/sym_bkeyboard_done.png
deleted file mode 100644
index 05ce7c643..000000000
Binary files a/java/res/drawable-mdpi/sym_bkeyboard_done.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_numalt.png b/java/res/drawable-mdpi/sym_bkeyboard_numalt.png
deleted file mode 100644
index 4fa410b62..000000000
Binary files a/java/res/drawable-mdpi/sym_bkeyboard_numalt.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_numpound.png b/java/res/drawable-mdpi/sym_bkeyboard_numpound.png
deleted file mode 100644
index 9126eed0d..000000000
Binary files a/java/res/drawable-mdpi/sym_bkeyboard_numpound.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_bkeyboard_numstar.png b/java/res/drawable-mdpi/sym_bkeyboard_numstar.png
deleted file mode 100644
index 9b9f1b986..000000000
Binary files a/java/res/drawable-mdpi/sym_bkeyboard_numstar.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_holo.png b/java/res/drawable-mdpi/sym_keyboard_delete_holo.png
index 155579169..f8f6e6a80 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_delete_holo.png and b/java/res/drawable-mdpi/sym_keyboard_delete_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_done.png b/java/res/drawable-mdpi/sym_keyboard_done.png
deleted file mode 100644
index c0d6d1394..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_done.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_done.png b/java/res/drawable-mdpi/sym_keyboard_feedback_done.png
deleted file mode 100644
index 0d7ebd4e5..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_feedback_done.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
deleted file mode 100644
index 494524a66..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_mic_disabled.png b/java/res/drawable-mdpi/sym_keyboard_mic_disabled.png
deleted file mode 100644
index e926b3fa6..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_mic_disabled.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num0_holo.png b/java/res/drawable-mdpi/sym_keyboard_num0_holo.png
index e1d395b45..2c57adf8b 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num0_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num0_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num1_holo.png b/java/res/drawable-mdpi/sym_keyboard_num1_holo.png
index 225436ac2..509e28f9b 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num1_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num1_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num2_holo.png b/java/res/drawable-mdpi/sym_keyboard_num2_holo.png
index e513fa4a0..0da18e772 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num2_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num2_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num3_holo.png b/java/res/drawable-mdpi/sym_keyboard_num3_holo.png
index b91e005fc..e8470586f 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num3_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num3_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num4_holo.png b/java/res/drawable-mdpi/sym_keyboard_num4_holo.png
index 65f88245b..13c216d3a 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num4_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num4_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num5_holo.png b/java/res/drawable-mdpi/sym_keyboard_num5_holo.png
index b89ef07eb..0065153fc 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num5_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num5_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num6_holo.png b/java/res/drawable-mdpi/sym_keyboard_num6_holo.png
index 931275a9e..09fab76a1 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num6_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num6_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num7_holo.png b/java/res/drawable-mdpi/sym_keyboard_num7_holo.png
index 9396c4c8f..d350fddc8 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num7_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num7_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num8_holo.png b/java/res/drawable-mdpi/sym_keyboard_num8_holo.png
index 12e3eef45..c40cb89a5 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num8_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num8_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_num9_holo.png b/java/res/drawable-mdpi/sym_keyboard_num9_holo.png
index 6911c2b4f..73526939d 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_num9_holo.png and b/java/res/drawable-mdpi/sym_keyboard_num9_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_numalt.png b/java/res/drawable-mdpi/sym_keyboard_numalt.png
deleted file mode 100644
index 32a2cf3ca..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_numalt.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_numpound.png b/java/res/drawable-mdpi/sym_keyboard_numpound.png
deleted file mode 100644
index b2419d9ab..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_numpound.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_numstar.png b/java/res/drawable-mdpi/sym_keyboard_numstar.png
deleted file mode 100644
index cb66f968f..000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_numstar.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return_holo.png b/java/res/drawable-mdpi/sym_keyboard_return_holo.png
index d519ccecf..abbce5234 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_return_holo.png and b/java/res/drawable-mdpi/sym_keyboard_return_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png
index 784a45054..82df90376 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_settings_holo.png and b/java/res/drawable-mdpi/sym_keyboard_settings_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png
index 91d6e32f9..49b9fc088 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_shift_holo.png and b/java/res/drawable-mdpi/sym_keyboard_shift_holo.png 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 2bd053656..5375beb4e 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png and b/java/res/drawable-mdpi/sym_keyboard_shift_locked_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_space_holo.png b/java/res/drawable-mdpi/sym_keyboard_space_holo.png
index 25e655d96..e413ddf2e 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_space_holo.png and b/java/res/drawable-mdpi/sym_keyboard_space_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_tab_holo.png b/java/res/drawable-mdpi/sym_keyboard_tab_holo.png
new file mode 100644
index 000000000..c41af7b89
Binary files /dev/null and b/java/res/drawable-mdpi/sym_keyboard_tab_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_holo.png b/java/res/drawable-mdpi/sym_keyboard_voice_holo.png
index c1116dc17..158439a9f 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_voice_holo.png and b/java/res/drawable-mdpi/sym_keyboard_voice_holo.png 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 44919dfcc..79026f1ab 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png and b/java/res/drawable-mdpi/sym_keyboard_voice_off_holo.png differ
diff --git a/java/res/drawable-mdpi/voice_ime_background.9.png b/java/res/drawable-mdpi/voice_ime_background.9.png
deleted file mode 100644
index 9b15bc25f..000000000
Binary files a/java/res/drawable-mdpi/voice_ime_background.9.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/voice_swipe_hint.png b/java/res/drawable-mdpi/voice_swipe_hint.png
deleted file mode 100644
index bb8873251..000000000
Binary files a/java/res/drawable-mdpi/voice_swipe_hint.png and /dev/null differ
diff --git a/java/res/drawable-xlarge/vs_dialog_blue.9.png b/java/res/drawable-mdpi/vs_dialog_blue.9.png
similarity index 100%
rename from java/res/drawable-xlarge/vs_dialog_blue.9.png
rename to java/res/drawable-mdpi/vs_dialog_blue.9.png
diff --git a/java/res/drawable-xlarge/vs_dialog_red.9.png b/java/res/drawable-mdpi/vs_dialog_red.9.png
similarity index 100%
rename from java/res/drawable-xlarge/vs_dialog_red.9.png
rename to java/res/drawable-mdpi/vs_dialog_red.9.png
diff --git a/java/res/drawable-xlarge/vs_dialog_yellow.9.png b/java/res/drawable-mdpi/vs_dialog_yellow.9.png
similarity index 100%
rename from java/res/drawable-xlarge/vs_dialog_yellow.9.png
rename to java/res/drawable-mdpi/vs_dialog_yellow.9.png
diff --git a/java/res/drawable/vs_popup_mic_edge.png b/java/res/drawable-mdpi/vs_popup_mic_edge.png
similarity index 100%
rename from java/res/drawable/vs_popup_mic_edge.png
rename to java/res/drawable-mdpi/vs_popup_mic_edge.png
diff --git a/java/res/drawable-mdpi/working.png b/java/res/drawable-mdpi/working.png
deleted file mode 100644
index 4a930c52d..000000000
Binary files a/java/res/drawable-mdpi/working.png and /dev/null 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
new file mode 100644
index 000000000..544ed7f78
Binary files /dev/null and b/java/res/drawable-sw600dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png 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
new file mode 100644
index 000000000..2ffc6ea2b
Binary files /dev/null and b/java/res/drawable-sw600dp-hdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..398eaea12
Binary files /dev/null and b/java/res/drawable-sw600dp-hdpi/sym_keyboard_numsymbol_holo.png 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
new file mode 100644
index 000000000..1780f682b
Binary files /dev/null and b/java/res/drawable-sw600dp-hdpi/sym_keyboard_tab_holo.png 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
new file mode 100644
index 000000000..2ffc6ea2b
Binary files /dev/null and b/java/res/drawable-sw600dp-land-hdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..f5d15b728
Binary files /dev/null and b/java/res/drawable-sw600dp-land-mdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..bc37fa844
Binary files /dev/null and b/java/res/drawable-sw600dp-land-xhdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..2ad73041e
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png 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
new file mode 100644
index 000000000..fc21e79c4
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png 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
new file mode 100644
index 000000000..76cfbb221
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png 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
new file mode 100644
index 000000000..73748c2fb
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png 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
new file mode 100644
index 000000000..059d4ac2e
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png 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
new file mode 100644
index 000000000..e5cfdec88
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png 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
new file mode 100644
index 000000000..060524a53
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_normal_holo.9.png 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
new file mode 100644
index 000000000..f4b061e07
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png 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
new file mode 100644
index 000000000..ffa7386df
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png 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
new file mode 100644
index 000000000..f5d15b728
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-mdpi/key_hint_underline_holo.9.png b/java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png
similarity index 62%
rename from java/res/drawable-mdpi/key_hint_underline_holo.9.png
rename to java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png
index b137b0021..a93966c92 100644
Binary files a/java/res/drawable-mdpi/key_hint_underline_holo.9.png and b/java/res/drawable-sw600dp-mdpi/keyboard_background_holo.9.png 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
new file mode 100644
index 000000000..7be7ab7e2
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/keyboard_popup_panel_background_holo.9.png differ
diff --git a/java/res/drawable-mdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png
similarity index 61%
rename from java/res/drawable-mdpi/key_hint_underline_large_holo.9.png
rename to java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png
index 9845e3bd6..1f87a68e9 100644
Binary files a/java/res/drawable-mdpi/key_hint_underline_large_holo.9.png and b/java/res/drawable-sw600dp-mdpi/keyboard_suggest_strip_holo.9.png 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
new file mode 100644
index 000000000..155579169
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_delete_holo.png 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
new file mode 100644
index 000000000..e1d395b45
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num0_holo.png 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
new file mode 100644
index 000000000..225436ac2
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num1_holo.png 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
new file mode 100644
index 000000000..e513fa4a0
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num2_holo.png 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
new file mode 100644
index 000000000..b91e005fc
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num3_holo.png 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
new file mode 100644
index 000000000..65f88245b
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num4_holo.png 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
new file mode 100644
index 000000000..b89ef07eb
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num5_holo.png 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
new file mode 100644
index 000000000..931275a9e
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num6_holo.png 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
new file mode 100644
index 000000000..9396c4c8f
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num7_holo.png 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
new file mode 100644
index 000000000..12e3eef45
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num8_holo.png 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
new file mode 100644
index 000000000..6911c2b4f
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_num9_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_numbpound_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbpound_holo.png
similarity index 100%
rename from java/res/drawable-mdpi/sym_keyboard_numbpound_holo.png
rename to java/res/drawable-sw600dp-mdpi/sym_keyboard_numbpound_holo.png
diff --git a/java/res/drawable-mdpi/sym_keyboard_numbstar_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numbstar_holo.png
similarity index 100%
rename from java/res/drawable-mdpi/sym_keyboard_numbstar_holo.png
rename to java/res/drawable-sw600dp-mdpi/sym_keyboard_numbstar_holo.png
diff --git a/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png
new file mode 100644
index 000000000..73153849c
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_numsymbol_holo.png 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
new file mode 100644
index 000000000..d519ccecf
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_return_holo.png 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
new file mode 100644
index 000000000..784a45054
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_settings_holo.png 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
new file mode 100644
index 000000000..91d6e32f9
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_holo.png 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
new file mode 100644
index 000000000..2bd053656
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_shift_locked_holo.png differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_holo.png b/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png
similarity index 56%
rename from java/res/drawable-mdpi/sym_keyboard_smiley_holo.png
rename to java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png
index 594fe211c..25e655d96 100644
Binary files a/java/res/drawable-mdpi/sym_keyboard_smiley_holo.png and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_space_holo.png 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
new file mode 100644
index 000000000..5acd12cc4
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_tab_holo.png 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
new file mode 100644
index 000000000..c1116dc17
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_holo.png 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
new file mode 100644
index 000000000..081a13096
Binary files /dev/null and b/java/res/drawable-sw600dp-mdpi/sym_keyboard_voice_off_holo.png 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
new file mode 100644
index 000000000..8b5d1b098
Binary files /dev/null and b/java/res/drawable-sw600dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png 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
new file mode 100644
index 000000000..bc37fa844
Binary files /dev/null and b/java/res/drawable-sw600dp-xhdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..c7a8b286a
Binary files /dev/null and b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_numsymbol_holo.png 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
new file mode 100644
index 000000000..fd9f8cce6
Binary files /dev/null and b/java/res/drawable-sw600dp-xhdpi/sym_keyboard_tab_holo.png 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
new file mode 100644
index 000000000..544ed7f78
Binary files /dev/null and b/java/res/drawable-sw768dp-hdpi/btn_keyboard_key_popup_selected_holo.9.png 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
new file mode 100644
index 000000000..2ffc6ea2b
Binary files /dev/null and b/java/res/drawable-sw768dp-hdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..2b93014e1
Binary files /dev/null and b/java/res/drawable-sw768dp-land-hdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png b/java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png
similarity index 54%
rename from java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png
rename to java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png
index 50f99a191..c409cea00 100644
Binary files a/java/res/drawable-land-mdpi/key_hint_underline_large_holo.9.png and b/java/res/drawable-sw768dp-land-mdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..3cd20d34f
Binary files /dev/null and b/java/res/drawable-sw768dp-land-xhdpi/hint_popup_holo.9.png 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
new file mode 100644
index 000000000..2ad73041e
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_holo.9.png 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
new file mode 100644
index 000000000..fc21e79c4
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_off_holo.9.png 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
new file mode 100644
index 000000000..76cfbb221
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_normal_on_holo.9.png 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
new file mode 100644
index 000000000..73748c2fb
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_holo.9.png 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
new file mode 100644
index 000000000..059d4ac2e
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_off_holo.9.png 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
new file mode 100644
index 000000000..e5cfdec88
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_dark_pressed_on_holo.9.png 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
new file mode 100644
index 000000000..060524a53
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_normal_holo.9.png 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
new file mode 100644
index 000000000..f4b061e07
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_light_pressed_holo.9.png 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
new file mode 100644
index 000000000..ffa7386df
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/btn_keyboard_key_popup_selected_holo.9.png differ
diff --git a/java/res/drawable-land-mdpi/key_hint_minus_large_holo.9.png b/java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png
similarity index 55%
rename from java/res/drawable-land-mdpi/key_hint_minus_large_holo.9.png
rename to java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png
index 52c28dd87..01d1139d8 100644
Binary files a/java/res/drawable-land-mdpi/key_hint_minus_large_holo.9.png and b/java/res/drawable-sw768dp-mdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-land-mdpi/key_hint_underline_holo.9.png b/java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png
similarity index 56%
rename from java/res/drawable-land-mdpi/key_hint_underline_holo.9.png
rename to java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png
index 06f3efb7e..a93966c92 100644
Binary files a/java/res/drawable-land-mdpi/key_hint_underline_holo.9.png and b/java/res/drawable-sw768dp-mdpi/keyboard_background_holo.9.png 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
new file mode 100644
index 000000000..7be7ab7e2
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/keyboard_popup_panel_background_holo.9.png differ
diff --git a/java/res/drawable-land-mdpi/key_hint_underscore_holo.9.png b/java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png
similarity index 56%
rename from java/res/drawable-land-mdpi/key_hint_underscore_holo.9.png
rename to java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png
index 52e871e0a..1f87a68e9 100644
Binary files a/java/res/drawable-land-mdpi/key_hint_underscore_holo.9.png and b/java/res/drawable-sw768dp-mdpi/keyboard_suggest_strip_holo.9.png 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
new file mode 100644
index 000000000..155579169
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_delete_holo.png 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
new file mode 100644
index 000000000..e1d395b45
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num0_holo.png 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
new file mode 100644
index 000000000..225436ac2
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num1_holo.png 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
new file mode 100644
index 000000000..e513fa4a0
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num2_holo.png 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
new file mode 100644
index 000000000..b91e005fc
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num3_holo.png 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
new file mode 100644
index 000000000..65f88245b
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num4_holo.png 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
new file mode 100644
index 000000000..b89ef07eb
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num5_holo.png 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
new file mode 100644
index 000000000..931275a9e
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num6_holo.png 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
new file mode 100644
index 000000000..9396c4c8f
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num7_holo.png 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
new file mode 100644
index 000000000..12e3eef45
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num8_holo.png 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
new file mode 100644
index 000000000..6911c2b4f
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_num9_holo.png 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
new file mode 100644
index 000000000..e3a8b4900
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbpound_holo.png 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
new file mode 100644
index 000000000..e80e9345f
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_numbstar_holo.png 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
new file mode 100644
index 000000000..d519ccecf
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_return_holo.png 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
new file mode 100644
index 000000000..784a45054
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_settings_holo.png 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
new file mode 100644
index 000000000..91d6e32f9
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_holo.png 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
new file mode 100644
index 000000000..2bd053656
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_shift_locked_holo.png differ
diff --git a/java/res/drawable-land-mdpi/key_hint_minus_holo.9.png b/java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png
similarity index 54%
rename from java/res/drawable-land-mdpi/key_hint_minus_holo.9.png
rename to java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png
index e59a31587..25e655d96 100644
Binary files a/java/res/drawable-land-mdpi/key_hint_minus_holo.9.png and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_space_holo.png 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
new file mode 100644
index 000000000..c1116dc17
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_holo.png 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
new file mode 100644
index 000000000..081a13096
Binary files /dev/null and b/java/res/drawable-sw768dp-mdpi/sym_keyboard_voice_off_holo.png 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
new file mode 100644
index 000000000..8b5d1b098
Binary files /dev/null and b/java/res/drawable-sw768dp-xhdpi/btn_keyboard_key_popup_selected_holo.9.png 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
new file mode 100644
index 000000000..bc37fa844
Binary files /dev/null and b/java/res/drawable-sw768dp-xhdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_candidate_pressed.9.png b/java/res/drawable-xhdpi/btn_candidate_pressed.9.png
new file mode 100644
index 000000000..41e126a73
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_candidate_pressed.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_center_default.9.png b/java/res/drawable-xhdpi/btn_center_default.9.png
new file mode 100644
index 000000000..e847425f8
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_center_default.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_center_pressed.9.png b/java/res/drawable-xhdpi/btn_center_pressed.9.png
new file mode 100644
index 000000000..facfd4323
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_center_pressed.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_center_selected.9.png b/java/res/drawable-xhdpi/btn_center_selected.9.png
new file mode 100644
index 000000000..facfd4323
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_center_selected.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_close_candidates_pane.9.png b/java/res/drawable-xhdpi/btn_close_candidates_pane.9.png
new file mode 100644
index 000000000..9d797ed0d
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_close_candidates_pane.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_expand_candidates_pane.9.png b/java/res/drawable-xhdpi/btn_expand_candidates_pane.9.png
new file mode 100644
index 000000000..88d01c9c8
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_expand_candidates_pane.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal.9.png
new file mode 100644
index 000000000..eae1e3a54
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal.9.png 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
new file mode 100644
index 000000000..b9667be13
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png
new file mode 100644
index 000000000..13bad8f1a
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off.9.png 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
new file mode 100644
index 000000000..1719992e1
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_off_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png
new file mode 100644
index 000000000..853b8bc6e
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on.9.png 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
new file mode 100644
index 000000000..0eb9c9f93
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_normal_on_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed.9.png
new file mode 100644
index 000000000..1edfd64fe
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed.9.png 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
new file mode 100644
index 000000000..5114bf5f1
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png
new file mode 100644
index 000000000..dfdbfadd3
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off.9.png 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
new file mode 100644
index 000000000..992395039
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_off_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on.9.png
new file mode 100644
index 000000000..0e2733e17
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on.9.png 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
new file mode 100644
index 000000000..474951c1d
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_dark_pressed_on_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png
new file mode 100644
index 000000000..f7e32f764
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_normal.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png
new file mode 100644
index 000000000..00c447604
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_fulltrans_pressed.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_normal.9.png
new file mode 100644
index 000000000..ea13a7fdf
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_normal.9.png 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
new file mode 100644
index 000000000..4a255f7fb
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_normal_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png
new file mode 100644
index 000000000..2ed1b3447
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_normal.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_selected.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_selected.9.png
new file mode 100644
index 000000000..057c5716e
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_popup_selected.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed.9.png
new file mode 100644
index 000000000..5d8e46de0
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed.9.png 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
new file mode 100644
index 000000000..5bcd1c9c2
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_light_pressed_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal.9.png
new file mode 100644
index 000000000..f53b40419
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png
new file mode 100644
index 000000000..3c6ae6be8
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_stone.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_stone.9.png
new file mode 100644
index 000000000..eebe7d391
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_stone.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png
new file mode 100644
index 000000000..655bfb2c6
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_stone.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_stone.9.png
new file mode 100644
index 000000000..336248aae
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_stone.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_stone.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_stone.9.png
new file mode 100644
index 000000000..bb1c72bb3
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_normal_stone.9.png 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
new file mode 100644
index 000000000..10d788dfb
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_popup_background_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png
new file mode 100644
index 000000000..0a9a9e44d
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png
new file mode 100644
index 000000000..f73911674
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_pressed.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png
new file mode 100644
index 000000000..34a948f4e
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off.9.png differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png
new file mode 100644
index 000000000..520f12d3f
Binary files /dev/null and b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on.9.png differ
diff --git a/java/res/drawable-xhdpi/candidate_feedback_background.9.png b/java/res/drawable-xhdpi/candidate_feedback_background.9.png
new file mode 100644
index 000000000..0ec90e5ea
Binary files /dev/null and b/java/res/drawable-xhdpi/candidate_feedback_background.9.png differ
diff --git a/java/res/drawable-xhdpi/caution.png b/java/res/drawable-xhdpi/caution.png
new file mode 100644
index 000000000..cfc3f7547
Binary files /dev/null and b/java/res/drawable-xhdpi/caution.png differ
diff --git a/java/res/drawable-xhdpi/hint_popup.9.png b/java/res/drawable-xhdpi/hint_popup.9.png
new file mode 100644
index 000000000..add474337
Binary files /dev/null and b/java/res/drawable-xhdpi/hint_popup.9.png differ
diff --git a/java/res/drawable-xhdpi/hint_popup_holo.9.png b/java/res/drawable-xhdpi/hint_popup_holo.9.png
new file mode 100644
index 000000000..a2b114e14
Binary files /dev/null and b/java/res/drawable-xhdpi/hint_popup_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/ic_dialog_keyboard.png b/java/res/drawable-xhdpi/ic_dialog_keyboard.png
new file mode 100644
index 000000000..f114c93b6
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_dialog_keyboard.png differ
diff --git a/java/res/drawable-xhdpi/ic_mic_dialog.png b/java/res/drawable-xhdpi/ic_mic_dialog.png
new file mode 100644
index 000000000..5d6399c0a
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_mic_dialog.png differ
diff --git a/java/res/drawable-xhdpi/ic_subtype_keyboard.png b/java/res/drawable-xhdpi/ic_subtype_keyboard.png
new file mode 100644
index 000000000..a79bb3458
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_subtype_keyboard.png differ
diff --git a/java/res/drawable-xhdpi/ic_subtype_mic.png b/java/res/drawable-xhdpi/ic_subtype_mic.png
new file mode 100644
index 000000000..fc8d18cc2
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_subtype_mic.png differ
diff --git a/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png b/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png
new file mode 100644
index 000000000..d65d28708
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png differ
diff --git a/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png
new file mode 100644
index 000000000..889378a6a
Binary files /dev/null and b/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_background.9.png b/java/res/drawable-xhdpi/keyboard_background.9.png
new file mode 100644
index 000000000..263996322
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_background.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_background_holo.9.png b/java/res/drawable-xhdpi/keyboard_background_holo.9.png
new file mode 100644
index 000000000..58d15142b
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_background_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_dark_background.9.png b/java/res/drawable-xhdpi/keyboard_dark_background.9.png
new file mode 100644
index 000000000..27b7a108c
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_dark_background.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background.9.png
new file mode 100644
index 000000000..16c76106c
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_background.9.png 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
new file mode 100644
index 000000000..44675ba00
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_background_holo.9.png 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
new file mode 100644
index 000000000..cfd1f5242
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_left_background_holo.9.png 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
new file mode 100644
index 000000000..a01c1733d
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_left_more_background_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png
new file mode 100644
index 000000000..e020e34b1
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background.9.png 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
new file mode 100644
index 000000000..1d2abc26b
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_holo.9.png 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
new file mode 100644
index 000000000..5616d1988
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_right_background_holo.9.png 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
new file mode 100644
index 000000000..ecf9c2cbc
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_key_feedback_right_more_background_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background.9.png
new file mode 100644
index 000000000..79f7ab00a
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_popup_panel_background.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_suggest_strip.9.png b/java/res/drawable-xhdpi/keyboard_suggest_strip.9.png
new file mode 100644
index 000000000..1b568df03
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_suggest_strip.9.png differ
diff --git a/java/res/drawable-xhdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-xhdpi/keyboard_suggest_strip_divider.png
new file mode 100644
index 000000000..cd7c2c7a2
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_suggest_strip_divider.png 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
new file mode 100644
index 000000000..f4ff7dc1c
Binary files /dev/null and b/java/res/drawable-xhdpi/keyboard_suggest_strip_holo.9.png differ
diff --git a/java/res/drawable-xhdpi/mic_base.png b/java/res/drawable-xhdpi/mic_base.png
new file mode 100644
index 000000000..5c060bec9
Binary files /dev/null and b/java/res/drawable-xhdpi/mic_base.png differ
diff --git a/java/res/drawable-xhdpi/mic_full.png b/java/res/drawable-xhdpi/mic_full.png
new file mode 100644
index 000000000..32ffe124e
Binary files /dev/null and b/java/res/drawable-xhdpi/mic_full.png differ
diff --git a/java/res/drawable-xhdpi/mic_slash.png b/java/res/drawable-xhdpi/mic_slash.png
new file mode 100644
index 000000000..18b22542b
Binary files /dev/null and b/java/res/drawable-xhdpi/mic_slash.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_123_mic.png b/java/res/drawable-xhdpi/sym_bkeyboard_123_mic.png
new file mode 100644
index 000000000..0aefaa1c3
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_123_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_delete.png b/java/res/drawable-xhdpi/sym_bkeyboard_delete.png
new file mode 100644
index 000000000..b84ee76dc
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_delete.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_mic.png b/java/res/drawable-xhdpi/sym_bkeyboard_mic.png
new file mode 100644
index 000000000..8c3f11dd4
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num0.png b/java/res/drawable-xhdpi/sym_bkeyboard_num0.png
new file mode 100644
index 000000000..da8d50a8c
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num0.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num1.png b/java/res/drawable-xhdpi/sym_bkeyboard_num1.png
new file mode 100644
index 000000000..62443eb1c
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num1.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num2.png b/java/res/drawable-xhdpi/sym_bkeyboard_num2.png
new file mode 100644
index 000000000..4b3ef7ecc
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num2.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num3.png b/java/res/drawable-xhdpi/sym_bkeyboard_num3.png
new file mode 100644
index 000000000..48315e499
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num3.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num4.png b/java/res/drawable-xhdpi/sym_bkeyboard_num4.png
new file mode 100644
index 000000000..17958d7cc
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num4.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num5.png b/java/res/drawable-xhdpi/sym_bkeyboard_num5.png
new file mode 100644
index 000000000..43716c424
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num5.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num6.png b/java/res/drawable-xhdpi/sym_bkeyboard_num6.png
new file mode 100644
index 000000000..09f2b428d
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num6.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num7.png b/java/res/drawable-xhdpi/sym_bkeyboard_num7.png
new file mode 100644
index 000000000..72438ec0f
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num7.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num8.png b/java/res/drawable-xhdpi/sym_bkeyboard_num8.png
new file mode 100644
index 000000000..403b53f71
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num8.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_num9.png b/java/res/drawable-xhdpi/sym_bkeyboard_num9.png
new file mode 100644
index 000000000..644c2a4df
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_num9.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_return.png b/java/res/drawable-xhdpi/sym_bkeyboard_return.png
new file mode 100644
index 000000000..1632ecd8e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_return.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_search.png b/java/res/drawable-xhdpi/sym_bkeyboard_search.png
new file mode 100644
index 000000000..69d8b22d1
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_search.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_settings.png b/java/res/drawable-xhdpi/sym_bkeyboard_settings.png
new file mode 100644
index 000000000..050154a3a
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_settings.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_shift.png b/java/res/drawable-xhdpi/sym_bkeyboard_shift.png
new file mode 100644
index 000000000..d15d11a50
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_shift.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_shift_locked.png b/java/res/drawable-xhdpi/sym_bkeyboard_shift_locked.png
new file mode 100644
index 000000000..83b287fea
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_shift_locked.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_space.png b/java/res/drawable-xhdpi/sym_bkeyboard_space.png
new file mode 100644
index 000000000..5ca62c7b7
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_space.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_tab.png b/java/res/drawable-xhdpi/sym_bkeyboard_tab.png
new file mode 100644
index 000000000..6ca199755
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_tab.png differ
diff --git a/java/res/drawable-xhdpi/sym_bkeyboard_voice_off.png b/java/res/drawable-xhdpi/sym_bkeyboard_voice_off.png
new file mode 100644
index 000000000..fc6a4eb59
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_bkeyboard_voice_off.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_123_mic.png b/java/res/drawable-xhdpi/sym_keyboard_123_mic.png
new file mode 100644
index 000000000..bcb097967
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_123_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete.png b/java/res/drawable-xhdpi/sym_keyboard_delete.png
new file mode 100644
index 000000000..3c0b8b186
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_delete.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png b/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png
new file mode 100644
index 000000000..5150073b8
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_delete_holo.png 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
new file mode 100644
index 000000000..5238c16d2
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_123_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png
new file mode 100644
index 000000000..f0c29e7c8
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_delete.png 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
new file mode 100644
index 000000000..a90b8dacf
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png 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
new file mode 100644
index 000000000..1123bf36e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_mic.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_mic.png
new file mode 100644
index 000000000..5ac27ebad
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png
new file mode 100644
index 000000000..b68e6066a
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_numalt.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png
new file mode 100644
index 000000000..c777d00d6
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_return.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png
new file mode 100644
index 000000000..32e0789dd
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_search.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_settings.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_settings.png
new file mode 100644
index 000000000..021cafacb
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_settings.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png
new file mode 100644
index 000000000..d8c0325c4
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_shift.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png
new file mode 100644
index 000000000..cee10568d
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_space.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png
new file mode 100644
index 000000000..0650e01cb
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_feedback_tab.png 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
new file mode 100644
index 000000000..226f2e617
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png 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
new file mode 100644
index 000000000..1e02e7e46
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_mic.png b/java/res/drawable-xhdpi/sym_keyboard_mic.png
new file mode 100644
index 000000000..1323b6d1e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_mic.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num0.png b/java/res/drawable-xhdpi/sym_keyboard_num0.png
new file mode 100644
index 000000000..06bd3bfc7
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num0.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png
new file mode 100644
index 000000000..33e80bdc3
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num0_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num1.png b/java/res/drawable-xhdpi/sym_keyboard_num1.png
new file mode 100644
index 000000000..dfa0cfe78
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num1.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png
new file mode 100644
index 000000000..dce3ee801
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num1_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num2.png b/java/res/drawable-xhdpi/sym_keyboard_num2.png
new file mode 100644
index 000000000..4bd2ead08
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num2.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png
new file mode 100644
index 000000000..e776efb33
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num2_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num3.png b/java/res/drawable-xhdpi/sym_keyboard_num3.png
new file mode 100644
index 000000000..39db11228
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num3.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png
new file mode 100644
index 000000000..66e7b3735
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num3_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num4.png b/java/res/drawable-xhdpi/sym_keyboard_num4.png
new file mode 100644
index 000000000..60356947e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num4.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png
new file mode 100644
index 000000000..bf70e2890
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num4_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num5.png b/java/res/drawable-xhdpi/sym_keyboard_num5.png
new file mode 100644
index 000000000..3238b3f40
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num5.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png
new file mode 100644
index 000000000..98d0b5cc9
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num5_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num6.png b/java/res/drawable-xhdpi/sym_keyboard_num6.png
new file mode 100644
index 000000000..c8da5a9d0
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num6.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png
new file mode 100644
index 000000000..67340ef6a
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num6_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num7.png b/java/res/drawable-xhdpi/sym_keyboard_num7.png
new file mode 100644
index 000000000..553cf5f0d
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num7.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png
new file mode 100644
index 000000000..843224954
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num7_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num8.png b/java/res/drawable-xhdpi/sym_keyboard_num8.png
new file mode 100644
index 000000000..eaaf53390
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num8.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png
new file mode 100644
index 000000000..6d520bca9
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num8_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num9.png b/java/res/drawable-xhdpi/sym_keyboard_num9.png
new file mode 100644
index 000000000..b510d3774
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num9.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png b/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png
new file mode 100644
index 000000000..158c87957
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_num9_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return.png b/java/res/drawable-xhdpi/sym_keyboard_return.png
new file mode 100644
index 000000000..ad061227e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_return.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return_holo.png b/java/res/drawable-xhdpi/sym_keyboard_return_holo.png
new file mode 100644
index 000000000..6e2e1c0b9
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_return_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_search.png b/java/res/drawable-xhdpi/sym_keyboard_search.png
new file mode 100644
index 000000000..aa785a221
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_search.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings.png b/java/res/drawable-xhdpi/sym_keyboard_settings.png
new file mode 100644
index 000000000..50704255d
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_settings.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png
new file mode 100644
index 000000000..018e45d9e
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_settings_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift.png b/java/res/drawable-xhdpi/sym_keyboard_shift.png
new file mode 100644
index 000000000..290170619
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_shift.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png
new file mode 100644
index 000000000..41d4ca176
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_shift_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked.png
new file mode 100644
index 000000000..a5deb60e9
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_shift_locked.png 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
new file mode 100644
index 000000000..b811b7464
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space.png b/java/res/drawable-xhdpi/sym_keyboard_space.png
new file mode 100644
index 000000000..66fc3e9d3
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_space.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_holo.png b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png
new file mode 100644
index 000000000..da8926496
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_space_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_space_led.9.png b/java/res/drawable-xhdpi/sym_keyboard_space_led.9.png
new file mode 100644
index 000000000..6525fefab
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_space_led.9.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_tab.png b/java/res/drawable-xhdpi/sym_keyboard_tab.png
new file mode 100644
index 000000000..0ef2ab5b9
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_tab.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png b/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png
new file mode 100644
index 000000000..dd207ca3f
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_tab_holo.png differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png b/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png
new file mode 100644
index 000000000..d73e49910
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_voice_holo.png 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
new file mode 100644
index 000000000..8d34a5ada
Binary files /dev/null and b/java/res/drawable-xhdpi/sym_keyboard_voice_off_holo.png differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_blue.9.png b/java/res/drawable-xhdpi/vs_dialog_blue.9.png
new file mode 100644
index 000000000..3284d78ef
Binary files /dev/null and b/java/res/drawable-xhdpi/vs_dialog_blue.9.png differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_red.9.png b/java/res/drawable-xhdpi/vs_dialog_red.9.png
new file mode 100644
index 000000000..5af2465b5
Binary files /dev/null and b/java/res/drawable-xhdpi/vs_dialog_red.9.png differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_yellow.9.png b/java/res/drawable-xhdpi/vs_dialog_yellow.9.png
new file mode 100644
index 000000000..4f50439de
Binary files /dev/null and b/java/res/drawable-xhdpi/vs_dialog_yellow.9.png differ
diff --git a/java/res/drawable-xhdpi/vs_popup_mic_edge.png b/java/res/drawable-xhdpi/vs_popup_mic_edge.png
new file mode 100644
index 000000000..1063cb464
Binary files /dev/null and b/java/res/drawable-xhdpi/vs_popup_mic_edge.png differ
diff --git a/java/res/drawable-xlarge/caution.png b/java/res/drawable-xlarge/caution.png
deleted file mode 100755
index eaef53425..000000000
Binary files a/java/res/drawable-xlarge/caution.png and /dev/null differ
diff --git a/java/res/drawable-xlarge/mic_slash.png b/java/res/drawable-xlarge/mic_slash.png
deleted file mode 100644
index 1dd05c5b4..000000000
Binary files a/java/res/drawable-xlarge/mic_slash.png and /dev/null differ
diff --git a/java/res/drawable/btn_candidate_holo.xml b/java/res/drawable/btn_candidate_ics.xml
similarity index 94%
rename from java/res/drawable/btn_candidate_holo.xml
rename to java/res/drawable/btn_candidate_ics.xml
index 66cd2460b..e4257e327 100644
--- a/java/res/drawable/btn_candidate_holo.xml
+++ b/java/res/drawable/btn_candidate_ics.xml
@@ -2,7 +2,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/drawable/btn_keyboard_key_honeycomb.xml b/java/res/drawable/btn_keyboard_key_ics.xml
similarity index 92%
rename from java/res/drawable/btn_keyboard_key_honeycomb.xml
rename to java/res/drawable/btn_keyboard_key_ics.xml
index 3dab8430f..7335cc299 100644
--- a/java/res/drawable/btn_keyboard_key_honeycomb.xml
+++ b/java/res/drawable/btn_keyboard_key_ics.xml
@@ -1,5 +1,5 @@
-
-
diff --git a/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml b/java/res/drawable/btn_keyboard_key_popup.xml
similarity index 94%
rename from java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
rename to java/res/drawable/btn_keyboard_key_popup.xml
index 9b6d23beb..860cfd5d5 100644
--- a/java/res/drawable/btn_keyboard_key_gingerbread_popup.xml
+++ b/java/res/drawable/btn_keyboard_key_popup.xml
@@ -1,5 +1,5 @@
-
+
+
+
+
-
-
-
-
-
-
-
-
diff --git a/java/res/layout-xlarge/candidates.xml b/java/res/layout-xlarge/candidates.xml
deleted file mode 100644
index 096a0adf1..000000000
--- a/java/res/layout-xlarge/candidates.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/layout/bubble_text.xml b/java/res/layout/bubble_text.xml
deleted file mode 100644
index c3957b65e..000000000
--- a/java/res/layout/bubble_text.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/candidate.xml b/java/res/layout/candidate.xml
deleted file mode 100644
index 5472a1dd1..000000000
--- a/java/res/layout/candidate.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/java/res/layout/key_preview_honeycomb.xml b/java/res/layout/candidate_divider.xml
similarity index 64%
rename from java/res/layout/key_preview_honeycomb.xml
rename to java/res/layout/candidate_divider.xml
index 2fbfbb517..1d75e52b3 100644
--- a/java/res/layout/key_preview_honeycomb.xml
+++ b/java/res/layout/candidate_divider.xml
@@ -18,12 +18,13 @@
*/
-->
-
+ android:layout_height="match_parent"
+ android:src="@drawable/keyboard_suggest_strip_divider"
+ android:paddingRight="@dimen/candidate_padding"
+ android:paddingLeft="@dimen/candidate_padding"
+ android:focusable="false"
+ android:clickable="false"
+ android:gravity="center_vertical|center_horizontal" />
diff --git a/java/res/layout/candidate_info.xml b/java/res/layout/candidate_info.xml
new file mode 100644
index 000000000..f3557289c
--- /dev/null
+++ b/java/res/layout/candidate_info.xml
@@ -0,0 +1,28 @@
+
+
+
+
diff --git a/java/res/layout/candidate_preview.xml b/java/res/layout/candidate_preview.xml
index fe2002d46..32705c996 100644
--- a/java/res/layout/candidate_preview.xml
+++ b/java/res/layout/candidate_preview.xml
@@ -19,11 +19,10 @@
-->
+ style="?attr/suggestionPreviewBackgroundStyle" />
diff --git a/java/res/layout-xlarge/candidate_preview.xml b/java/res/layout/candidate_word.xml
similarity index 77%
rename from java/res/layout-xlarge/candidate_preview.xml
rename to java/res/layout/candidate_word.xml
index 61d5f8e7b..94ae2b44e 100644
--- a/java/res/layout-xlarge/candidate_preview.xml
+++ b/java/res/layout/candidate_word.xml
@@ -18,12 +18,10 @@
*/
-->
-
+ android:minWidth="@dimen/candidate_min_width"
+ android:textSize="@dimen/candidate_text_size"
+ style="?attr/suggestionBackgroundStyle" />
diff --git a/java/res/layout/candidates.xml b/java/res/layout/candidates.xml
deleted file mode 100644
index 3d91c1d20..000000000
--- a/java/res/layout/candidates.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/candidates_strip.xml
new file mode 100644
index 000000000..c23c29cbe
--- /dev/null
+++ b/java/res/layout/candidates_strip.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/layout/input_basic.xml b/java/res/layout/input_basic.xml
deleted file mode 100644
index 8666daece..000000000
--- a/java/res/layout/input_basic.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_basic_highcontrast.xml b/java/res/layout/input_basic_highcontrast.xml
deleted file mode 100644
index 4829c7d7c..000000000
--- a/java/res/layout/input_basic_highcontrast.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml
deleted file mode 100644
index ccca501af..000000000
--- a/java/res/layout/input_gingerbread.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_honeycomb.xml b/java/res/layout/input_honeycomb.xml
deleted file mode 100644
index 8dadafd81..000000000
--- a/java/res/layout/input_honeycomb.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_stone_bold.xml b/java/res/layout/input_stone_bold.xml
deleted file mode 100644
index a0b40684f..000000000
--- a/java/res/layout/input_stone_bold.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_stone_normal.xml b/java/res/layout/input_stone_normal.xml
deleted file mode 100644
index 41cbc16fa..000000000
--- a/java/res/layout/input_stone_normal.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml
new file mode 100644
index 000000000..821082f91
--- /dev/null
+++ b/java/res/layout/input_view.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/layout/key_preview.xml b/java/res/layout/key_preview.xml
index de03506ad..5332d15c6 100644
--- a/java/res/layout/key_preview.xml
+++ b/java/res/layout/key_preview.xml
@@ -22,8 +22,7 @@
android:layout_width="wrap_content"
android:layout_height="80sp"
android:textSize="40sp"
- android:textColor="@color/latinkeyboard_key_color_white"
android:minWidth="32dip"
android:gravity="center"
- android:background="@drawable/keyboard_key_feedback"
+ style="?attr/keyPreviewStyle"
/>
diff --git a/java/res/layout/keyboard_popup.xml b/java/res/layout/keyboard_popup.xml
index 0317d8deb..e2508da78 100644
--- a/java/res/layout/keyboard_popup.xml
+++ b/java/res/layout/keyboard_popup.xml
@@ -22,9 +22,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:background="@drawable/keyboard_popup_panel_background"
- android:paddingLeft="@dimen/mini_keyboard_horizontal_padding"
- android:paddingRight="@dimen/mini_keyboard_horizontal_padding"
+ style="?attr/popupMiniKeyboardPanelStyle"
>
diff --git a/java/res/layout/keyboard_popup_honeycomb.xml b/java/res/layout/keyboard_popup_honeycomb.xml
deleted file mode 100644
index 2ddcbdc0c..000000000
--- a/java/res/layout/keyboard_popup_honeycomb.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
diff --git a/java/res/layout/keyboard_popup_stone.xml b/java/res/layout/keyboard_popup_stone.xml
deleted file mode 100644
index 94176b244..000000000
--- a/java/res/layout/keyboard_popup_stone.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
diff --git a/java/res/raw/type3.ogg b/java/res/raw/type3.ogg
deleted file mode 100644
index 20e670807..000000000
Binary files a/java/res/raw/type3.ogg and /dev/null differ
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
new file mode 100644
index 000000000..db6217315
--- /dev/null
+++ b/java/res/values-af/strings.xml
@@ -0,0 +1,177 @@
+
+
+
+
+ "Android-sleutelbord"
+ "Android-sleutelbordinstellings"
+ "Invoeropsies"
+ "Vibreer met sleuteldruk"
+ "Klank met sleuteldruk"
+ "Opspring by druk van sleutel"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Outohoofletters"
+ "Vinnige oplossings"
+ "Korrigeer algemene tikfoute"
+
+
+ "Wys voorgestelde woorde terwyl jy tik"
+ "Wys altyd"
+ "Wys in portretmodus"
+ "Versteek altyd"
+
+
+ "Wys instellingsleutel"
+ "Outomaties"
+ "Wys altyd"
+ "Versteek altyd"
+ "Outokorrigering"
+ "Korrigeer outomaties die vorige woord"
+ "Af"
+ "Nederig"
+ "Aggressief"
+ "Bigram-voorstelle"
+ "Gebruik vorige woord om voorstel te verbeter"
+
+
+
+
+ "%s : Gestoor"
+ "Gaan"
+ "Volgende"
+ "Klaar"
+ "Stuur"
+ "ABC"
+ "Meer"
+ "Laat wag"
+ "Wag"
+ "Steminvoering"
+ "Steminvoering vir jou taal word nie tans ondersteun nie, maar werk wel in Engels."
+ "Steminvoer gebruik Google se spraakherkenning. ""Die Mobiel-privaatheidsbeleid"" is van toepassing."
+ "Om steminvoer af te skakel, gaan na invoermetode-instellings."
+ "Om steminvoer te gebruik, druk die mikrofoonknoppie."
+ "Praat nou"
+ "Werkend"
+
+ "Fout. Probeer asseblief weer."
+ "Kon nie koppel nie"
+ "Fout, te veel spraak."
+ "Oudioprobleem"
+ "Bedienerfout"
+ "Geen spraak gehoor nie"
+ "Geen passings gevind nie"
+ "Stemsoek nie geïnstalleer nie"
+ "Wenk:"" Sleep oor die sleutelbord om te praat"
+ "Wenk:"" Probeer volgende keer om leestekens soos \"punt\", \"komma\" of \"vraagteken\" hardop te sê."
+ "Kanselleer"
+ "OK"
+ "Steminvoering"
+ "Op hoofsleutelbord"
+ "Op simbolesleutelbord"
+ "Af"
+ "Mikrofoon op hoofsleutelbord"
+ "Mikrofoon op simbolesleutelbord"
+ "Steminvoer is gedeaktiveer"
+ "Kies invoermetode"
+ "Invoertale"
+ "Gly vinger op spasiebalk om taal te verander"
+ "← Raak weer om te stoor"
+ "Woordeboek beskikbaar"
+ "Aktiveer gebruikerterugvoer"
+ "Help hierdie invoermetode-redigeerder te verbeter deur gebruikstatistiek en omvalverslae outomaties na Google te stuur."
+ "Raak om woorde reg te maak"
+ "Raak ingevoerde woorde om hulle te korrigeer, net wanneer voorstelle sigbaar is"
+ "Sleutelbordtema"
+ "Tsjeggiese sleutelbord"
+
+
+ "Deense sleutelbord"
+ "Duitse sleutelbord"
+ "Engelse (VK) sleutelbord"
+ "Engelse (VS) sleutelbord"
+ "Spaanse sleutelbord"
+
+
+ "Franse sleutelbord"
+ "Franse (Kanada) sleutelbord"
+ "Franse (Switserland) sleutelbord"
+
+
+
+
+
+
+ "Italiaanse sleutelbord"
+ "Noorweegse sleutelbord"
+ "Nederlandse sleutelbord"
+
+
+
+
+ "Russiese sleutelbord"
+ "Serwiese sleutelbord"
+ "Sweedse sleutelbord"
+
+
+ "Tsjeggiese stem"
+ "Duitse stem"
+
+
+ "Spaanse stem"
+ "Franse stem"
+
+
+ "Japannese stem"
+ "Koreaanse stem"
+
+
+ "Poolse stem"
+ "Portugese stem"
+ "Russiese stem"
+ "Turkse stem"
+
+
+
+
+
+
+ "Bruikbaarheidsmodus"
+
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
new file mode 100644
index 000000000..740aefc2a
--- /dev/null
+++ b/java/res/values-am/strings.xml
@@ -0,0 +1,177 @@
+
+
+
+
+ "የAndroid ቁልፍሰሌዳ"
+ "የAndroid ቁልፍሰሌዳ ቅንብሮች"
+ "ግቤት አማራጮች"
+ "በቁልፍመጫንጊዜ አንዝር"
+ "በቁልፍ መጫን ላይ የሚወጣ ድምፅ"
+ "ቁልፍ ጫን ላይ ብቅ ባይ"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "ራስ-ሰር አቢይ ማድረግ"
+ "ፈጣንጥገና"
+ " የተለመዱ የትየባ ስህተቶችንያስተካክላል"
+
+
+ "እየተየብክ ተመራጭ ቃላትን አሳይ"
+ "ሁልጊዜ አሳይ"
+ "በቁመት ሁነታ አሳይ"
+ "ሁልጊዜ ደብቅ"
+
+
+ "የቅንብሮች ቁልፍ አሳይ"
+ "ራስ ሰር"
+ "ሁልጊዜ አሳይ"
+ "ሁልጊዜ ደብቅ"
+ "በራስ ማስተካከል"
+ "የቀደመውን ቃል በራስሰር አስተካክል"
+ "ውጪ"
+ "መጠነኛ"
+ "ኃይለኛ"
+ "ቢግራም ምክሮች"
+ "ምክርን ለማሻሻል የቀደመ ቃልን ተጠቀም"
+
+
+
+
+ "%s : ተቀምጧል"
+ "ሂድ"
+ "በመቀጠል"
+ "ተከናውኗል"
+ " ይላኩ"
+ "ABC"
+ "ተጨማሪ"
+ "ላፍታ አቁም"
+ "ቆይ"
+ "የድምፅ ግቤ ት"
+ "የድምፅ ግቤት በአሁኑ ጊዜ ለእርስዎን ቋንቋ አይደግፍም፣ ግን በእንግሊዘኛ ይሰራል።"
+ "የድምፅ ግቤት የGoogleን ንግግር ለይቶ ማወቂያ ይጠቀማል።""የተንቀሳቃሽ ስልክ ግላዊ ፖሊሲ"" ይተገበራል።"
+ "የድምፅ ግቤት ለማጥፋት፣ወደ ግቤት ሜተድ ቅንብሮች ሂድ።"
+ "የድምፅግቤት ለመጠቀም፣ የማይክራፎንየድምፅ ማጉያ አዝራር ተጫን።"
+ "አሁን ተናገር"
+ "ሥራ ላይ"
+
+ "ስህተት፣ እባክዎ እንደገና ይሞክሩ።"
+ "ማያያዝ አልተቻለም"
+ "ስህተት፣ በጣም ብዙ ንግግር።"
+ "የድምፅ ችግር"
+ "የአገልጋይ ስህተት"
+ "ምንም ንግግር አልተሰማም"
+ "ምንም ተመሳሳይ አልተገኘም።"
+ "የድምፅ ፍለጋአልተጫነም"
+ "ምክር፡"" ለመናገር በቁልፍሰሌዳ ላይ አንሸራት"
+ "ምክር፡"" ሌላ ጊዜ፣ እንደ \"period\", \"comma\", ወይም \"question mark\" ያሉ ስርዓተ ነጥቦችን ለመናገር ሞክር።"
+ "ይቅር"
+ "እሺ"
+ "የድምፅ ግቤት"
+ "በዋናቁልፍ ሰሌዳ ላይ"
+ "በምልክቶች ቁልፍ ሰሌዳ ላይ"
+ "ውጪ"
+ "ድምፅ ማጉያ በዋናው ቁልፍሰሌዳው ላይ"
+ "የድምፅ ማጉያ ምልክትበቁልፍ ሰሌዳላይ"
+ "የድምፅ ግቤት ቦዝኗል"
+ "የግቤት ሜተድ ምረጥ"
+ "ቋንቋዎች አግቤት"
+ "ቋንቋ ለመለወጥ የቦታ ቁልፍ ላይ ጣትዎን ያንሸራቱ"
+ "← ለማስቀመጥ ድጋሚ ንካ"
+ "መዝገበ ቃላት አለ"
+ "የተጠቃሚ ግብረ ምላሽ አንቃ"
+ "ወደ Google የተሰናከለ ሪፖርቶች እና አጠቃቀም ስታስቲክስ በራስ ሰር በመላክ ይህን ግቤት ሜተድ አርትኢ እገዛ ያሻሽላል።"
+ "ቃላትን ለማስተካከል ንካ"
+ "የገቡ ቃላትን ለማስተካከል ንካ፣ አማራጮች ሲታዩብቻ"
+ "የቁልፍ ሰሌዳ ገጽታ"
+ "የቼክ ቁልፍሰሌዳ"
+
+
+ "የዳኒሽኛ ቁልፍሰሌዳ"
+ "የጀርመንኛ ቁልፍሰሌዳ"
+ "የእንግሊዘኛ(ዩኬ) ቁልፍሰሌዳ"
+ "የእንግሊዘኛ(ዩኤስ) ቁልፍሰሌዳ"
+ "የስፖኒሽኛቁልፍ ሰሌዳ"
+
+
+ "የፈረንሳይኛ ቁልፍሰሌዳ"
+ "የፈረንሳይኛ(ካናዳ) ቁልፍሰሌዳ"
+ "የፈረንሳይኛ(ስዊዘርላንድ) ቁልፍሰሌዳ"
+
+
+
+
+
+
+ "የጣሊያንኛ ቁልፍ ሰሌዳ"
+ "የኖርዌጂኛ ቁልፍሰሌዳ"
+ "የደች ቁልፍሰሌዳ"
+
+
+
+
+ "የራሽኛቁልፍ ሰሌዳ"
+ "የሩሲኪኛቁልፍ ሰሌዳ"
+ "የሲውድናዊ ቁልፍሰሌዳ"
+
+
+ "የቼክ ድምፅ"
+ "የጀርመናዊ ድምፅ"
+
+
+ "የስፔናዊ ድምፅ"
+ "የፈረንሳዊ ድምፅ"
+
+
+ "የጃፓናዊ ድምፅ"
+ "የኮሪያዊ ድምፅ"
+
+
+ "የፖሊሽኛ ድምፅ"
+ "የፖርቹጊኛ ድምፅ"
+ "የራሽኛድምፅ"
+ "የቱርካዊ ድምፅ"
+
+
+
+
+
+
+ "የተገልጋይነት ጥናት ሁነታ"
+
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index df5b87ac1..455e9f5f2 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -30,6 +30,15 @@
"تصحيح النص"
"الاقتراحات بناءً على الكلمات السابقة"
"خيارات أخرى"
+ "الإعدادات المتقدمة"
+ "خيارات للمستخدمين الخبراء"
+ "تأخير إزالة النافذة المنبثقة الأساسية"
+ "بلا تأخير"
+ "افتراضي"
+
+
+
+
"استخدام الأحرف الكبيرة تلقائيًا"
"إصلاحات سريعة"
"تصحيح الأخطاء المكتوبة الشائعة"
@@ -105,14 +114,21 @@
"لوحة مفاتيح إنجليزية (بريطانيا)"
"لوحة مفاتيح إنجليزية (الولايات المتحدة)"
"لوحة مفاتيح إسبانية"
- "لوحة مفاتيح إسبانية (الولايات المتحدة)"
+
+
"لوحة مفاتيح فرنسية"
"لوحة مفاتيح فرنسية (كندا)"
"لوحة مفاتيح فرنسية (سويسرا)"
+
+
+
+
"لوحة المفاتيح العبرية"
"لوحة مفاتيح إيطالية"
"لوحة مفاتيح نرويجية"
"لوحة مفاتيح بولندية"
+ "لوحة المفاتيح البولندية"
+ "لوحة المفاتيح البرتغالية"
"لوحة مفاتيح روسية"
"لوحة مفاتيح صربية"
"لوحة مفاتيح سويدية"
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 7f59a13db..05af01668 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -28,8 +28,17 @@
"Изскачащ прозорец при натискане на клавиш"
"Общи"
"Корекция на текста"
- "Предложения въз на основа на предишни думи"
+ "Предложения въз основа на предишни думи"
"Други опции"
+ "Разширени настройки"
+ "Опции за потребителите експерти"
+ "Отхвърляне на подсказката"
+ "Без задържане"
+ "По подразбиране"
+
+
+
+
"Автоматично поставяне на главни букви"
"Бързи корекции"
"Коригира най-честите грешки при въвеждане"
@@ -38,7 +47,7 @@
"Винаги да се показва"
"Показване с вертикална ориентация"
"Винаги да се скрива"
- "Клавишът интервал да превкл. езика"
+ "Смяна на езика с клавиша за интервал"
"Показване на клавиша за настройки"
"Автоматично"
"Да се показва винаги"
@@ -105,14 +114,21 @@
"английска (Великобрит.) клавиатура"
"английска (САЩ) клавиатура"
"испанска клавиатура"
- "испанска (САЩ) клавиатура"
+
+
"френска клавиатура"
"френска (Канада) клавиатура"
"френска (Швейцария) клавиатура"
+
+
+
+
"клавиатура на иврит"
"италианска клавиатура"
"норвежка клавиатура"
"нидерландска клавиатура"
+ "Полска клавиатура"
+ "Португалска клавиатура"
"руска клавиатура"
"сръбска клавиатура"
"шведска клавиатура"
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 36939fef7..01de93372 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -30,6 +30,15 @@
"Correcció de text"
"Suggeriments basats en paraules anteriors"
"Altres opcions"
+ "Configuració avançada"
+ "Opcions per a usuaris experts"
+ "Retard d\'om. em. de tecla"
+ "Sense retard"
+ "Predeterminat"
+
+
+
+
"Majúscules automàtiques"
"Correccions ràpides"
"Corregeix els errors d\'ortografia habituals"
@@ -38,7 +47,7 @@
"Mostra sempre"
"Mostra en mode vertical"
"Amaga sempre"
- "Utilitza el canvi d\'idioma amb la barra espaiadora"
+ "Canvi d\'idioma amb la barra espaiadora"
"Mostra la tecla de configuració"
"Automàtic"
"Mostra sempre"
@@ -51,7 +60,7 @@
"Suggeriments Bigram"
"Utilitza la paraula anterior per millorar el suggeriment"
"Predicció Bigram"
- "Utilitza la paraula anterior per a la predicció també"
+ "Utilitza també la paraula anterior per a la predicció"
"%s: desada"
"Vés"
"Següent"
@@ -63,7 +72,7 @@
"Espera"
"Entrada de veu"
"Actualment, l\'entrada de veu no és compatible amb el vostre idioma, però funciona en anglès."
- "L\'entrada de veu utilitza el reconeixement de veu de Google. S\'hi aplica la ""Política de privadesa de Google Mobile""."
+ "L\'entrada de veu utilitza el reconeixement de veu de Google. S\'hi aplica la ""Política de privadesa de Google per a mòbils""."
"Per desactivar l\'entada de veu, vés a la configuració del mètode d\'entrada."
"Per utilitzar l\'entrada de veu, prem el botó del micròfon."
"Parleu ara"
@@ -105,14 +114,21 @@
"Teclat anglès (Regne Unit)"
"Teclat anglès (Estats Units)"
"Teclat espanyol"
- "Teclat espanyol (Estats Units)"
+
+
"Teclat francès"
"Teclat francès (Canadà)"
"Teclat francès (Suïssa)"
+
+
+
+
"Teclat hebreu"
"Teclat italià"
"Teclat noruec"
"Teclat holandès"
+ "Teclat polonès"
+ "Teclat portuguès"
"Teclat rus"
"Teclat serbi"
"Teclat suec"
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 132bc1c29..9dbe9ae4e 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -30,6 +30,15 @@
"Oprava textu"
"Návrhy na základě předchozích slov"
"Další možnosti"
+ "Pokročilá nastavení"
+ "Možnosti pro zkušené uživatele"
+ "Prodleva vysk. okna kláv."
+ "Bez prodlevy"
+ "Výchozí"
+
+
+
+
"Velká písmena automaticky"
"Rychlé opravy"
"Opravuje nejčastější chyby při psaní"
@@ -105,14 +114,21 @@
"Klávesnice – angličtina (VB)"
"Klávesnice – angličtina (USA)"
"Klávesnice – španělština"
- "Klávesnice – španělština (USA)"
+
+
"Klávesnice – francouzština"
"Klávesnice – francouzština (Kanada)"
"Klávesnice – francouzština (Švýc.)"
+
+
+
+
"Klávesnice – hebrejština"
"Klávesnice – italština"
"Klávesnice – norština"
"Klávesnice – holandština"
+ "Polská klávesnice"
+ "Portugalská klávesnice"
"Klávesnice – ruština"
"Klávesnice – srbština"
"Klávesnice – švédština"
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index ad92b24d1..b4b4b5ad8 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -30,6 +30,15 @@
"Tekstkorrigering"
"Forslag baseret på tidligere ord"
"Andre valgmuligheder"
+ "Avancerede indstillinger"
+ "Muligheder for ekspertbrugere"
+ "Forsink. afvis. af taste-popup"
+ "Ingen forsink."
+ "Standard"
+
+
+
+
"Skriv aut. med stort"
"Hurtige løsninger"
"Retter almindelige stavefejl"
@@ -105,14 +114,21 @@
"Engelsk tastatur (Storbritannien)"
"Engelsk tastatur (USA)"
"Spansk tastatur"
- "Spansk tastatur (USA)"
+
+
"Fransk tastatur"
"Fransk tastatur (Canada)"
"Fransk tastatur (Schweiz)"
+
+
+
+
"Hebraisk tastatur"
"Italiensk tastatur"
"Norsk tastatur"
"Hollandsk tastatur"
+ "Polsk tastatur"
+ "Portugisisk tastatur"
"Russisk tastatur"
"Serbisk tastatur"
"Svensk tastatur"
diff --git a/java/res/values-de-rZZ/donottranslate-altchars.xml b/java/res/values-de-rZZ/donottranslate-altchars.xml
new file mode 100644
index 000000000..a6f8fc810
--- /dev/null
+++ b/java/res/values-de-rZZ/donottranslate-altchars.xml
@@ -0,0 +1,29 @@
+
+
+
+ ä,â,à,á,æ,ã,å,ā
+ 3,ė
+ 9,ö,ô,ò,ó,õ,œ,ø,ō
+ 7,ü,û,ù,ú,ū
+ ß,ś,š
+ ñ,ń
+ 6
+
+
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 65f0faa32..01adc52d2 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -30,6 +30,15 @@
"Textkorrektur"
"Vorschläge basieren auf bisherigen Wörtern"
"Sonstige Optionen"
+ "Erweiterte Einstellungen"
+ "Optionen für Experten"
+ "Verzög. Schlüssel-Pop-up"
+ "Keine Verzögerung"
+ "Standard"
+
+
+
+
"Autom. Groß-/Kleinschr."
"Quick Fixes"
"Korrigiert gängige Tippfehler"
@@ -62,7 +71,7 @@
"Pause"
"Warten"
"Spracheingabe"
- "Spracheingaben werden derzeit nicht für Ihre Sprache unterstützt, funktionieren jedoch in Englisch."
+ "Spracheingaben werden zurzeit nicht für Ihre Sprache unterstützt, funktionieren jedoch in Englisch."
"Die Spracheingabe verwendet die Spracherkennung von Google. Es gelten die ""Google Mobile-Datenschutzbestimmungen""."
"Rufen Sie zum Deaktivieren der Spracheingabe die Einstellungen für die Eingabemethode auf."
"Drücken Sie zur Verwendung der Spracheingabe die Mikrofonschaltfläche."
@@ -105,14 +114,21 @@
"Englische Tastatur (GB)"
"Englische Tastatur (USA)"
"Spanische Tastatur"
- "Spanische Tastatur (USA)"
+
+
"Französische Tastatur"
"Französische Tastatur (Kanada)"
"Französische Tastatur (Schweiz)"
+
+
+
+
"Hebräische Tastatur"
"Italienische Tastatur"
"Norwegische Tastatur"
"Niederländische Tastatur"
+ "Polnische Tastatur"
+ "Portugiesische Tastatur"
"Russische Tastatur"
"Serbische Tastatur"
"Schwedische Tastatur"
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 5cee959a0..9d8729ebe 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -30,6 +30,15 @@
"Διόρθωση κειμένου"
"Προτάσεις που βασίζονται σε προηγούμενες λέξεις"
"Άλλες επιλογές"
+ "Σύνθετες ρυθμίσεις"
+ "Επιλογές για έμπειρους χρήστες"
+ "Χρόνος εξαφ. αναδ. παραθ."
+ "Χωρίς καθυστέρ."
+ "Προεπιλογή"
+
+
+
+
"Αυτόματη χρήση κεφαλαίων"
"Γρήγορες διορθώσεις"
"Διορθώνει συνηθισμένα λάθη πληκτρολόγησης"
@@ -105,14 +114,21 @@
"Αγγλικό (ΗΒ) πληκτρολόγιο"
"Αγγλικό (ΗΠΑ) πληκτρολόγιο"
"Ισπανικό πληκτρολόγιο"
- "Ισπανικό (ΗΠΑ) πληκτρολόγιο"
+
+
"Γαλλικό πληκτρολόγιο"
"Γαλλικό (Καναδάς) πληκτρολόγιο"
"Γαλλικό (Ελβετία) πληκτρολόγιο"
+
+
+
+
"Πληκτρολόγιο με εβραϊκή γραφή"
"Ιταλικό πληκτρολόγιο"
"Νορβηγικό πληκτρολόγιο"
"Ολλανδικό πληκτρολόγιο"
+ "Πληκτρολόγιο με πολωνικούς χαρακτήρες"
+ "Πορτογαλικό πληκτρολόγιο"
"Ρωσικό πληκτρολόγιο"
"Σερβικό πληκτρολόγιο"
"Σουηδικό πληκτρολόγιο"
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 7d5d50177..3a488f4cc 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -30,6 +30,13 @@
"Text correction"
"Suggestions based on previous words"
"Other Options"
+ "Advanced settings"
+ "Options for expert users"
+ "Key pop-up dismiss delay"
+ "No delay"
+ "Default"
+ "Suggest Contact names"
+ "Use names from Contacts for suggestions and corrections"
"Auto-capitalisation"
"Quick fixes"
"Corrects commonly typed mistakes"
@@ -105,14 +112,18 @@
"English (UK) Keyboard"
"English (US) Keyboard"
"Spanish Keyboard"
- "Spanish (US) Keyboard"
+ "Finnish Keyboard"
"French Keyboard"
"French (Canada) Keyboard"
"French (Switzerland) Keyboard"
+ "Croatian Keyboard"
+ "Hungarian Keyboard"
"Hebrew Keyboard"
"Italian Keyboard"
"Norwegian Keyboard"
"Dutch Keyboard"
+ "Polish keyboard"
+ "Portuguese Keyboard"
"Russian Keyboard"
"Serbian Keyboard"
"Swedish Keyboard"
diff --git a/java/res/values-en/whitelist.xml b/java/res/values-en/whitelist.xml
new file mode 100644
index 000000000..9395f4c88
--- /dev/null
+++ b/java/res/values-en/whitelist.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
- 255
+ - ill
+ - I\'ll
+
+ - 255
+ - thisd
+ - this\'d
+
+
+
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index e40f98b3b..048f02eed 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -30,6 +30,15 @@
"Corrección de texto"
"Sugerencias sobre la base de palabras anteriores"
"Otras opciones"
+ "Configuración avanzada"
+ "Opciones para usuarios expertos"
+ "Demora en rechazo de ventana emergente de clave"
+ "Sin demora"
+ "Predeterminada"
+
+
+
+
"Mayúsculas automáticas"
"Arreglos rápidos"
"Corrige errores de escritura comunes"
@@ -105,14 +114,21 @@
"Teclado en inglés (Reino Unido)"
"Teclado en inglés (EE.UU.)"
"Teclado en español"
- "Teclado en español (EE.UU.)"
+
+
"Teclado en francés"
"Teclado en francés (Canadá)"
"Teclado en francés (Suiza)"
+
+
+
+
"Teclado hebreo"
"Teclado en italiano"
"Teclado en noruego"
"Teclado en holandés"
+ "Teclado polaco"
+ "Teclado en portugués"
"Teclado en ruso"
"Teclado en serbio"
"Teclado en sueco"
diff --git a/java/res/values-es/donottranslate-altchars.xml b/java/res/values-es/donottranslate-altchars.xml
index 99f1663a1..16111ec42 100644
--- a/java/res/values-es/donottranslate-altchars.xml
+++ b/java/res/values-es/donottranslate-altchars.xml
@@ -25,4 +25,6 @@
7,ú,ü,ù,û,ū
ñ,ń
ç,ć,č
+ "\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&,\@"
+ ".,\\,,\?,!,¿,¡,:,-,\',\",),(,/,;,+,&,\@"
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index e1532427a..b7fbe96ec 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -27,11 +27,17 @@
"Sonido al pulsar tecla"
"Popup al pulsar tecla"
"General"
-
+ "Corrección ortográfica"
+ "Sugerencias basadas en palabras anteriores"
+ "Otras opciones"
+ "Ajustes avanzados"
+ "Opciones para usuarios expertos"
+ "Retraso de rechazo"
+ "Sin retraso"
+ "Predeterminado"
+
-
-
-
+
"Mayúsculas automáticas"
"Correcciones rápidas"
@@ -41,8 +47,7 @@
"Mostrar siempre"
"Mostrar en modo vertical"
"Ocultar siempre"
-
-
+ "Utilizar espacio para cambiar idioma"
"Mostrar tecla de ajustes"
"Automáticamente"
"Mostrar siempre"
@@ -52,12 +57,10 @@
"Desactivada"
"Parcial"
"Total"
- "Sugerencias de bigramas"
+ "Sugerencias de bigramas"
"Usar palabra anterior para mejorar sugerencias"
-
-
-
-
+ "Predicción de bigramas"
+ "Utilizar también la palabra anterior para realizar la predicción"
"%s: guardada"
"Ir"
"Sig."
@@ -111,14 +114,21 @@
"Teclado inglés (Reino Unido)"
"Teclado de inglés (EE.UU.)"
"Teclado español"
- "Teclado en español (EE.UU.)"
+
+
"Teclado francés"
"Teclado francés (Canadá)"
"Teclado francés (Suiza)"
+
+
+
+
"Teclado hebreo"
"Teclado italiano"
"Teclado noruego"
"Teclado holandés"
+ "Teclado polaco"
+ "Teclado portugués"
"Teclado ruso"
"Teclado serbio"
"Teclado sueco"
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 25ee9dff8..17347b20d 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -30,6 +30,15 @@
"تصحیح متن"
"پیشنهادهایی بر اساس کلمه های قبلی"
"سایر گزینه ها"
+ "تنظیمات پیشرفته"
+ "گزینه هایی برای کاربران حرفه ای"
+ "تأخیر در رد کردن کلید نمایشی"
+ "بدون تأخیر"
+ "پیش فرض"
+
+
+
+
"نوشتن با حروف بزرگ خودکار"
"راه حل های سریع"
"تصحیح خطاهای تایپی رایج"
@@ -105,14 +114,21 @@
"صفحه کلید انگلیسی (بریتانیایی)"
"صفحه کلید انگلیسی (آمریکایی)"
"صفحه کلید اسپانیایی"
- "صفحه کلید اسپانیایی (آمریکایی)"
+
+
"صفحه کلید فرانسوی"
"صفحه کلید فرانسوی (کانادایی)"
"صفحه کلید فرانسوی (سوئیس)"
+
+
+
+
"صفحه کلید عبری"
"صفحه کلید ایتالیایی"
"صفحه کلید نروژی"
"صفحه کلید هلندی"
+ "صفحه کلید لهستانی"
+ "صفحه کلید پرتغالی"
"صفحه کلید روسی"
"صفحه کلید صربی"
"صفحه کلید سوئدی"
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index f02e8217d..7fda7c78a 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -30,6 +30,15 @@
"Tekstin korjaus"
"Aiempiin sanoihin perustuvat ehdotukset"
"Muut vaihtoehdot"
+ "Lisäasetukset"
+ "Valinnat kokeneille käyttäjille"
+ "Näppäimen hylkäysviive"
+ "Ei viivettä"
+ "Oletus"
+
+
+
+
"Automaattiset isot kirjaimet"
"Pikakorjaukset"
"Korjaa yleiset kirjoitusvirheet"
@@ -105,14 +114,21 @@
"Näppäimistö: englanti (UK)"
"Näppäimistö: englanti (US)"
"Näppäimistö: espanja"
- "Näppäimistö: espanja (US)"
+
+
"Näppäimistö: ranska"
"Näppäimistö: ranska (Kanada)"
"Näppäimistö: ranska (Sveitsi)"
+
+
+
+
"Hepreankielinen näppäimistö"
"Näppäimistö: italia"
"Näppäimistö: norja"
"Näppäimistö: hollanti"
+ "Näppäimistö: puola"
+ "Näppäimistö: portugali"
"Näppäimistö: venäjä"
"Näppäimistö: serbia"
"Näppäimistö: ruotsi"
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 276aed2c5..2f09277b5 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -30,6 +30,15 @@
"Correction du texte"
"Suggestions basées sur les mots précédents"
"Autres options"
+ "Paramètres avancés"
+ "Options destinées aux utilisateurs expérimentés"
+ "Délai masq. touche pop-up"
+ "Aucun délai"
+ "Par défaut"
+
+
+
+
"Majuscules auto"
"Corrections rapides"
"Corrige les fautes de frappe courantes"
@@ -38,7 +47,7 @@
"Toujours afficher"
"Afficher en mode Portrait"
"Toujours masquer"
- "Sélecteur langue barre d\'espace"
+ "Barre d\'espace pour changer langue"
"Afficher touche param."
"Automatique"
"Toujours afficher"
@@ -105,14 +114,21 @@
"Clavier anglais (Royaume-Uni)"
"Clavier anglais (États-Unis)"
"Clavier espagnol"
- "Clavier espagnol (États-Unis)"
+
+
"Clavier français"
"Clavier français (Canada)"
"Clavier français (Suisse)"
+
+
+
+
"Clavier hébreu"
"Clavier italien"
"Clavier norvégien"
"Clavier néerlandais"
+ "Clavier polonais"
+ "Clavier portugais"
"Clavier russe"
"Clavier serbe"
"Clavier suédois"
diff --git a/java/res/values-hr/donottranslate-altchars.xml b/java/res/values-hr/donottranslate-altchars.xml
new file mode 100644
index 000000000..d0c9d4049
--- /dev/null
+++ b/java/res/values-hr/donottranslate-altchars.xml
@@ -0,0 +1,27 @@
+
+
+
+ š,ś,ß
+ ñ,ń
+
+ 6,ž,ź,ż
+ č,ć,ç
+ đ
+
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 6117821ee..b3df4ed05 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -30,6 +30,15 @@
"Ispravak teksta"
"Prijedlozi na temelju prethodnih riječi"
"Ostale opcije"
+ "Napredne postavke"
+ "Opcije za stručne korisnike"
+ "Bez odgode klj. skočnih"
+ "Bez odgode"
+ "Zadano"
+
+
+
+
"Automatsko pisanje velikih slova"
"Brzi popravci"
"Ispravlja uobičajene pogreške u pisanju"
@@ -38,7 +47,7 @@
"Uvijek prikaži"
"Prikaži u portretnom načinu"
"Uvijek sakrij"
- "Koristite razmaknicu za prebacivanje jezika"
+ "Upotrijebite razmaknicu za prebacivanje jezika"
"Prikaži tipku postavki"
"Automatski"
"Uvijek prikaži"
@@ -51,7 +60,7 @@
"Bigram prijedlozi"
"Upotrijebi prethodnu riječ radi poboljšanja prijedloga"
"Bigram predviđanje"
- "Koristite prethodnu riječ i za predviđanje"
+ "Upotrijebite prethodnu riječ i za predviđanje"
"%s : Spremljeno"
"Idi"
"Dalje"
@@ -61,7 +70,7 @@
"Više"
"Pauza"
"Pričekaj"
- "Glasovni unos"
+ "Glasovni ulaz"
"Vaš jezik trenutno nije podržan za glasovni unos, ali radi za engleski."
"Glasovni unos upotrebljava Googleovo prepoznavanje govora. Primjenjuju se ""Pravila o privatnosti za uslugu Mobile""."
"Za isključivanje glasovnog unosa idite na postavke načina unosa."
@@ -81,7 +90,7 @@
"Savjet:"" Sljedeći put pokušajte izgovoriti znakove interpunkcije poput \"točka, \"zarez\" ili \"upitnik\"."
"Odustani"
"U redu"
- "Glasovni unos"
+ "Glasovni ulaz"
"Na glavnoj tipkovnici"
"Na tipkovnici simb."
"Isključeno"
@@ -105,14 +114,21 @@
"Engleska (UK) tipkovnica"
"Engleska (SAD) tipkovnica"
"Španjolska tipkovnica"
- "Tipkovnica za španjolski (SAD)"
+
+
"Francuska tipkovnica"
"Francuska (Kanada) tipkovnica"
"Francuska (Švicarska) tipkovnica"
+
+
+
+
"Hebrejska tipkovnica"
"Talijanska tipkovnica"
"Norveška tipkovnica"
"Nizozemska tipkovnica"
+ "Poljska tipkovnica"
+ "Portugalska tipkovnica"
"Ruska tipkovnica"
"Srpska tipkovnica"
"Švedska tipkovnica"
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 81255d719..aed535ab0 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -30,6 +30,15 @@
"Szövegjavítás"
"Javaslatok korábbi szavak alapján"
"Egyéb beállítások"
+ "Speciális beállítások"
+ "Beállítások gyakorlott felhasználóknak"
+ "Gombeltüntetés késése"
+ "Nincs késés"
+ "Alapbeállítás"
+
+
+
+
"Automatikusan nagy kezdőbetű"
"Gyorsjavítások"
"Kijavítja a gyakori gépelési hibákat"
@@ -105,14 +114,21 @@
"Angol (UK) billentyűzet"
"Angol (US) billentyűzet"
"Spanyol billentyűzet"
- "Spanyol (US) billentyűzet"
+
+
"Francia billentyűzet"
"Francia (kanadai) billentyűzet"
"Francia (svájci) billentyűzet"
+
+
+
+
"Héber billentyűzet"
"Olasz billentyűzet"
"Norvég billentyűzet"
"Holland billentyűzet"
+ "Lengyel billentyűzet"
+ "Portugál billentyűzet"
"Orosz billentyűzet"
"Szerb billentyűzet"
"Svéd billentyűzet"
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 32ef38d35..97706d031 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -30,6 +30,15 @@
"Koreksi teks"
"Saran berdasarkan kata sebelumnya"
"Opsi lain"
+ "Setelan lanjutan"
+ "Pilihan untuk pengguna ahli"
+ "Tundaan singkir munculan kunci"
+ "Tanpa penundaan"
+ "Bawaan"
+
+
+
+
"Kapitalisasi otomatis"
"Perbaikan cepat"
"Memperbaiki kesalahan ketik umum"
@@ -105,14 +114,21 @@
"Keyboard Inggris (Britania Raya)"
"Keyboard Inggris (AS)"
"Keyboard Spanyol"
- "Keyboard Spanyol (AS)"
+
+
"Keyboard Prancis"
"Keyboard Prancis (Kanada)"
"Keyboard Prancis (Swiss)"
+
+
+
+
"Papan tombol Ibrani"
"Keyboard Italia"
"Keyboard Norwegia"
"Keyboard Belanda"
+ "Keyboard bahasa Polski"
+ "Keyboard Portugis"
"Keyboard Rusia"
"Keyboard Serbia"
"Keyboard Swedia"
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 3a896fcd7..eb902e049 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -30,6 +30,15 @@
"Correzione testo"
"Suggerimenti in base alle parole precedenti"
"Altre opzioni"
+ "Impostazioni avanzate"
+ "Opzioni per utenti esperti"
+ "Ritardo eliminaz. popup tasto"
+ "Nessun ritardo"
+ "Predefinito"
+
+
+
+
"Maiuscole automatiche"
"Correzioni veloci"
"Corregge gli errori di digitazione più comuni"
@@ -105,14 +114,21 @@
"Tastiera inglese (Regno Unito)"
"Tastiera inglese (Stati Uniti)"
"Tastiera spagnola"
- "Tastiera spagnola (Stati Uniti)"
+
+
"Tastiera francese"
"Tastiera francese (Canada)"
"Tastiera francese (Svizzera)"
+
+
+
+
"Tastiera ebraica"
"Tastiera italiana"
"Tastiera norvegese"
"Tastiera olandese"
+ "Tastiera polacca"
+ "Tastiera portoghese"
"Tastiera russa"
"Tastiera serba"
"Tastiera svedese"
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 0b26ed9fe..c45351037 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -30,6 +30,15 @@
"תיקון טקסט"
"הצעות המבוססות על מילים קודמות"
"אפשרויות אחרות"
+ "הגדרות מתקדמות"
+ "אפשרויות עבור משתמשים מתקדמים"
+ "עיכוב דחייה של מוקפץ ראשי"
+ "ללא עיכוב"
+ "ברירת מחדל"
+
+
+
+
"הפיכה אוטומטית של אותיות לרישיות"
"תיקונים מהירים"
"מתקן שגיאות הקלדה נפוצות"
@@ -105,14 +114,21 @@
"מקלדת אנגלית (בריטניה)"
"מקלדת אנגלית (ארה\"ב)"
"מקלדת ספרדית"
- "מקלדת ספרדית (ארה\"ב)"
+
+
"מקלדת צרפתית"
"מקלדת צרפתית (קנדה)"
"מקלדת צרפתית (שוויץ)"
+
+
+
+
"מקלדת בשפה העברית"
"מקלדת איטלקית"
"מקלדת נורווגית"
"מקלדת הולנדית"
+ "מקלדת פולנית"
+ "מקלדת פורטוגזית"
"מקלדת רוסית"
"מקלדת סרבית"
"מקלדת שוודית"
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 402c35675..2aa55a7e0 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -30,6 +30,15 @@
"テキストの修正"
"前の語句に基づいた入力候補表示"
"他のオプション"
+ "詳細設定"
+ "上級ユーザー向けオプション"
+ "キーのポップアップ時間"
+ "すぐに消去"
+ "デフォルト"
+
+
+
+
"自動大文字変換"
"クイックフィックス"
"よくある誤字・脱字を修正します"
@@ -105,14 +114,21 @@
"英語(英国)のキーボード"
"英語(米国)のキーボード"
"スペイン語のキーボード"
- "スペイン語(米国)のキーボード"
+
+
"フランス語のキーボード"
"フランス語(カナダ)のキーボード"
"フランス語(スイス)のキーボード"
+
+
+
+
"ヘブライ語のキーボード"
"イタリア語のキーボード"
"ノルウェー語のキーボード"
"オランダ語のキーボード"
+ "ポーランド語のキーボード"
+ "ポルトガル語のキーボード"
"ロシア語のキーボード"
"セルビア語のキーボード"
"スウェーデン語のキーボード"
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index ca2f570a8..8f4747843 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -30,6 +30,15 @@
"텍스트 수정"
"이전 단어에 기반한 추천"
"기타 옵션"
+ "고급 설정"
+ "전문 사용자용 옵션"
+ "키 팝업 해제 지연"
+ "지연 없음"
+ "기본값"
+
+
+
+
"자동 대문자화"
"빠른 수정"
"자주 발생하는 오타를 수정합니다."
@@ -105,14 +114,21 @@
"영어(영국) 키보드"
"영어(미국) 키보드"
"스페인어 키보드"
- "스페인어(미국) 키보드"
+
+
"프랑스어 키보드"
"프랑스어(캐나다) 키보드"
"프랑스어(스위스) 키보드"
+
+
+
+
"히브리어 키보드"
"이탈리아어 키보드"
"노르웨이어 키보드"
"네덜란드어 키보드"
+ "폴란드어 키보드"
+ "포르투갈어 키보드"
"러시아어 키보드"
"세르비아어 키보드"
"스웨덴어 키보드"
diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 8af3cb005..8f6eb2339 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -26,16 +26,22 @@
0.020in
0.280in
- 0.0in
- 0.0in
+ 0.00in
+ 0.00in
+ 0.04in
+ 0.01in
+ 0.03in
+ 0.00in
0.0in
55%
- 35%
- 0.08in
+ 35%
+ 28%
+ 40%
90%
+ 0.08in
+ 0.01in
38dip
63dip
- 2dip
0.336in
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index fbe50e005..ae32914ed 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -30,6 +30,15 @@
"Teksto taisymas"
"Pasiūlymai pagal ankstesnius žodžius"
"Kitos parinktys"
+ "Išplėstiniai nustatymai"
+ "Parinktys ekspertams"
+ "Pagr. išš. l. atsis. d."
+ "Be delsos"
+ "Numatytasis"
+
+
+
+
"Automatinis didžiųjų raidžių rašymas"
"Greiti pataisymai"
"Taiso dažnai padarytas rašybos klaidas"
@@ -105,14 +114,21 @@
"Angliška (JK) klaviatūra"
"Angliška (JAV) klaviatūra"
"Ispaniška klaviatūra"
- "Ispaniška (JAV) klaviatūra"
+
+
"Prancūziška klaviatūra"
"Prancūziška (Kanada) klaviatūra"
"Prancūziška (Šveicarija) klaviatūra"
+
+
+
+
"Hebrajiška klaviatūra"
"Itališka klaviatūra"
"Norvegiška klaviatūra"
"Olandiška klaviatūra"
+ "Lenkiška klaviatūra"
+ "Portugališka klaviatūra"
"Rusiška klaviatūra"
"Serbiška klaviatūra"
"Švediška klaviatūra"
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 84bee5382..d455715e5 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -28,8 +28,17 @@
"Nospiežot taustiņu, parādīt uznirstošo izvēlni"
"Vispārīgi"
"Teksta korekcija"
- "Ieteikumi, pamatojoties uz iepriekšējiem vārdiem"
+ "Ieteikumi, kuru pamatā ir iepriekšējie vārdi"
"Citas opcijas"
+ "Papildu iestatījumi"
+ "Opcijas speciālistiem"
+ "Taust. uzn. loga noraid. aizk."
+ "Bez aizkaves"
+ "Noklusējums"
+
+
+
+
"Automātiska lielo burtu lietošana"
"Ātrie labojumi"
"Nodrošina izplatītu drukas kļūdu labošanu."
@@ -38,7 +47,7 @@
"Vienmēr rādīt"
"Rādīt portreta režīmā"
"Vienmēr slēpt"
- "Izmantot atstarpēšanas taustiņu, lai pārslēgtu valodu"
+ "Izmantot valodu pārslēgšanai atstarpēšanas taustiņu"
"Rādīt iestatījumu taustiņu"
"Automātiski"
"Vienmēr rādīt"
@@ -105,14 +114,21 @@
"Angļu (Lielbritānija) tastatūra"
"Angļu (ASV) tastatūra"
"Spāņu tastatūra"
- "Spāņu (ASV) tastatūra"
+
+
"Franču tastatūra"
"Franču (Kanāda) tastatūra"
"Franču (Šveices) tastatūra"
+
+
+
+
"Ebreju tastatūra"
"Itāļu tastatūra"
"Norvēģu tastatūra"
"Holandiešu tastatūra"
+ "Poļu valodas tastatūra"
+ "Portugāļu valodas tastatūra"
"Krievu tastatūra"
"Serbu tastatūra"
"Zviedru tastatūra"
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
new file mode 100644
index 000000000..532a89539
--- /dev/null
+++ b/java/res/values-ms/strings.xml
@@ -0,0 +1,160 @@
+
+
+
+
+ "Papan kekunci Android"
+ "Tetapan papan kekunci Android"
+ "Pilihan input"
+ "Getar pada tekanan kekunci"
+ "Bunyi pada tekanan kekunci"
+ "Pop timbul pada tekanan kunci"
+ "Umum"
+ "Pembetulan teks"
+ "Cadangan berdasarkan pada perkataan sebelumnya"
+ "Pilihan lain"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Huruf besar auto"
+ "Pembaikan pantas"
+ "Membetulkan kesalahan menaip yang biasa"
+ "Tunjukkan cadangan pembetulan"
+ "Paparkan cadangan perkataan semasa menaip"
+ "Sentiasa tunjukkan"
+ "Tunjukkan pada mod potret"
+ "Sentiasa sembunyikan"
+ "Bar ruang tukar bhs"
+ "Tunjukkan kekunci tetapan"
+ "Automatik"
+ "Sentiasa tunjukkan"
+ "Sentiasa sembunyikan"
+ "Auto Pembetulan"
+ "Bar ruang dan tanda baca secara automatik membetulkan perkataan yang ditaip salah"
+ "Matikan"
+ "Sederhana"
+ "Agresif"
+ "Cadangan bigram"
+ "Gunakan perkataan sebelumnya untuk memperbaik cadangan"
+ "Ramalan bigram"
+ "Gunakan juga perkataan sebelumnya untuk ramalan"
+ "%s : Disimpan"
+ "Pergi"
+ "Seterusnya"
+ "Selesai"
+ "Hantar"
+ "ABC"
+ "Lagi"
+ "Jeda"
+ "Tnggu"
+ "Input suara"
+ "Input suara tidak disokong untuk bahasa anda pada masa ini tetapi ia berfungsi dalam bahasa Inggeris."
+ "Input suara menggunakan pengecaman pertuturan Google. ""Dasar Polisi Mudah Alih"" digunakan."
+ "Untuk mematikan input suara, pergi ke tetapan kaedah input."
+ "Untuk menggunakan input suara, tekan butang mikrofon."
+ "Sebutkan sekarang"
+ "Berfungsi"
+
+ "Ralat. Sila cuba lagi."
+ "Tidak boleh disambungkan"
+ "Ralat, terlalu banyak pertuturan."
+ "Masalah audio"
+ "Ralat pelayan"
+ "Tiada pertuturan didengari"
+ "Tiada padanan ditemui"
+ "Carian suara tidak dipasang"
+ "Petunjuk"":"" Leret merentasi papan kekunci untuk bercakap"
+ "Petunjuk:"" Lain kali, cuba ucapkan tanda baca seperti \"titik\", \"koma\" atau \"tanda soal\"."
+ "Batal"
+ "OK"
+ "Input suara"
+ "Hidpkn kekunci utama"
+ "Pd ppn kekunci simbl"
+ "Matikan"
+ "Mik. pd kekunci utma"
+ "Mik. pd kekunci smbl"
+ "Input suara dilmphkn"
+ "Pilih kaedah input"
+ "Bahasa input"
+ "Luncurkan jari pada spacebar untuk menukar bahasa"
+ "← Sentuh sekali lagi untuk menyimpan"
+ "Kamus tersedia"
+ "Dayakan maklum balas pengguna"
+ "Bantu memperbaik editor input ini dengan menghantar statistik penggunaan dan laporan runtuhan kepada Google."
+ "Sentuh untuk membetulkan perkataan"
+ "Sentuh perkataan yang dimasukkan untuk membetulkannya, hanya apabila cadangan boleh dilihat"
+ "Tema Papan Kekunci"
+ "Papan kekunci Czech"
+ "Papan kekunci bahasa Arab"
+ "Papan kekunci Denmark"
+ "Papan kekunci Jerman"
+ "Papan kekunci Inggeris (UK)"
+ "Papan kekunci Inggeris (AS)"
+ "Papan kekunci Sepanyol"
+
+
+ "Papan kekunci Perancis"
+ "Papan kekunci Perancis (Kanada)"
+ "Ppan kekunci Perancis (Switzerland)"
+
+
+
+
+ "Papan kekunci bahasa Ibrani"
+ "Papan kekunci Itali"
+ "Papan kekunci Norway"
+ "Papan kekunci Belanda"
+
+
+
+
+ "Papan kekunci Rusia"
+ "Papan kekunci Serbia"
+ "Papan kekunci Sweden"
+ "Suara Bahasa Afrikaans"
+ "Suara Orang Czech"
+ "Suara Orang Jerman"
+ "Suara Bahasa Inggeris"
+ "Suara Orang Sepanyol"
+ "Suara Orang Perancis"
+ "Suara Bahasa Itali"
+ "Suara Orang Jepun"
+ "Suara Orang Korea"
+ "Suara Bahasa Belanda"
+ "Suara Orang Poland"
+ "Suara Orang Portugis"
+ "Suara Orang Rusia"
+ "Suara Orang Turki"
+ "Cina, Suara Bahasa Yue"
+ "Cina, Suara Bahasa Mandarin"
+ "Suara bahasa isiZulu"
+ "Mod Kajian Kebolehgunaan"
+
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index e20c9515e..af5dd3ce3 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -30,6 +30,15 @@
"Tekstkorrigering"
"Forslag basert på tidligere ord"
"Andre alternativer"
+ "Avanserte innstillinger"
+ "Alternativer for ekspertbrukere"
+ "Tregt tastevindu"
+ "U/ forsinkelse"
+ "Standard"
+
+
+
+
"Stor forbokstav"
"Autokorrektur"
"Retter vanlige stavefeil"
@@ -105,14 +114,21 @@
"Engelsk tastatur (Storbritannia)"
"Engelsk tastatur (USA)"
"Spansk tastatur"
- "Spansk tastatur (USA)"
+
+
"Fransk tastatur"
"Fransk tastatur (Canada)"
"Fransk tastatur (Sveits)"
+
+
+
+
"Hebraisk tastatur"
"Italiensk tastatur"
"Norsk tastatur"
"Nederlandsk tastatur"
+ "Polsk tastatur"
+ "Portugisisk tastatur"
"Russisk tastatur"
"Serbisk tastatur"
"Svensk tastatur"
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 89b714bc8..6c4cb135c 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -30,6 +30,15 @@
"Tekstcorrectie"
"Suggesties op basis van eerdere woorden"
"Andere opties"
+ "Geavanceerde instellingen"
+ "Opties voor ervaren gebruikers"
+ "Afwijz.vertr. toetspop-up"
+ "Geen vertraging"
+ "Standaard"
+
+
+
+
"Auto-hoofdlettergebruik"
"Snelle oplossingen"
"Hiermee worden veelvoorkomende typefouten gecorrigeerd"
@@ -105,14 +114,21 @@
"Engels toetsenbord (VK)"
"Engels toetsenbord (VS)"
"Spaans toetsenbord"
- "Spaans toetsenbord (VS)"
+
+
"Frans toetsenbord"
"Frans toetsenbord (Canada)"
"Frans toetsenbord (Zwitserland)"
+
+
+
+
"Hebreeuws toetsenbord"
"Italiaans toetsenbord"
"Noors toetsenbord"
"Nederlands toetsenbord"
+ "Pools toetsenbord"
+ "Portugees toetsenbord"
"Russisch toetsenbord"
"Servisch toetsenbord"
"Zweeds toetsenbord"
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 65240d748..2c39c532c 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -30,6 +30,15 @@
"Poprawianie tekstu"
"Podpowiedzi na podstawie wcześniejszych słów"
"Inne opcje"
+ "Ustawienia zaawansowane"
+ "Opcje dla zaawansowanych użytkowników"
+ "Opóźnienie wyłączenia wyskakującego okienka"
+ "Bez opóźnienia"
+ "Wartość domyślna"
+
+
+
+
"Wstawiaj wielkie litery"
"Szybkie poprawki"
"Poprawia częste błędy wpisywania"
@@ -105,14 +114,21 @@
"Klawiatura angielska (UK)"
"Klawiatura angielska (USA)"
"Klawiatura hiszpańska"
- "Klawiatura hiszpańska (USA)"
+
+
"Klawiatura francuska"
"Klawiatura francuska (Kanada)"
"Klawiatura francuska (Szwajcaria)"
+
+
+
+
"Klawiatura hebrajska"
"Klawiatura włoska"
"Klawiatura norweska"
"Klawiatura holenderska"
+ "Klawiatura polska"
+ "Klawiatura portugalska"
"Klawiatura rosyjska"
"Klawiatura serbska"
"Klawiatura szwedzka"
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index b972ce049..cae6f49f7 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -30,6 +30,15 @@
"Correção de texto"
"Sugestões baseadas em palavras anteriores"
"Outras opções"
+ "Definições avançadas"
+ "Opções para utilizadores experientes"
+ "Atraso p/ ignorar pop-up"
+ "Sem atraso"
+ "Predefinido"
+
+
+
+
"Letras maiúsculas automáticas"
"Correcções rápidas"
"Corrige os erros de escrita comuns"
@@ -105,14 +114,21 @@
"Teclado inglês (Reino Unido)"
"Teclado inglês (EUA)"
"Teclado espanhol"
- "Teclado espanhol (EUA)"
+
+
"Teclado francês"
"Teclado francês (Canadá)"
"Teclado francês (Suíça)"
+
+
+
+
"Teclado hebraico"
"Teclado italiano"
"Teclado norueguês"
"Teclado holandês"
+ "Teclado Polaco"
+ "Teclado Português"
"Teclado russo"
"Teclado sérvio"
"Teclado sueco"
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index a999dc67e..62c20eb82 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -30,6 +30,15 @@
"Correção de texto"
"Sugestões baseadas em palavras anteriores"
"Outras opções"
+ "Configurações avançadas"
+ "Opções para usuários experientes"
+ "Dispens. atraso chave princ."
+ "Sem atraso"
+ "Padrão"
+
+
+
+
"Capitaliz. automática"
"Reparos rápidos"
"Corrige erros comuns de digitação"
@@ -105,14 +114,21 @@
"Teclado para inglês (Reino Unido)"
"Teclado para inglês (EUA)"
"Teclado para espanhol"
- "Teclado para espanhol"
+
+
"Teclado para francês"
"Teclado para francês (Canadá)"
"Teclado para francês (Suíça)"
+
+
+
+
"Teclado hebraico"
"Teclado para italiano"
"Teclado para norueguês"
"Teclado para holandês"
+ "Teclado polonês"
+ "Teclado em português"
"Teclado para russo"
"Teclado para sérvio"
"Teclado para sueco"
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index b0c1bea24..ddb40e809 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -35,6 +35,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
"Maiusclas automaticas"
"Correcturas sveltas"
"Curregia sbagls da tippar currents"
@@ -145,7 +159,7 @@
-
+
@@ -153,6 +167,10 @@
+
+
+
+
@@ -161,6 +179,10 @@
+
+
+
+
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 0fcefd1f2..960ced552 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -30,6 +30,15 @@
"Corectare text"
"Sugestii bazate pe cuvinte anterioare"
"Alte opţiuni"
+ "Setări avansate"
+ "Opţiuni pt. utiliz. experţi"
+ "Înt. înch. pop-up esenţ."
+ "Fără întârziere"
+ "Prestabilit"
+
+
+
+
"Auto-capitalizare"
"Remedieri rapide"
"Corectează greşelile introduse frecvent"
@@ -38,7 +47,7 @@
"Afişaţi întotdeauna"
"Afişaţi în modul Portret"
"Ascundeţi întotdeauna"
- "Sp. pt. comut. lb."
+ "Spacebar – selector limbă"
"Afişaţi tasta setări"
"Automat"
"Afişaţi întotdeauna"
@@ -48,10 +57,10 @@
"Dezactivată"
"Moderată"
"Agresivă"
- "Sugestii pentru cuvinte de două litere"
+ "Sugestii de tip bigram"
"Utilizaţi cuvântul anterior pentru a îmbunătăţi sugestia"
- "Sugestii pentru cuvinte de două litere"
- "De asemenea, utilizaţi pentru sugestii cuvântul precedent"
+ "Predicţii de tip bigram"
+ "Se utilizează şi cuvântul precedent pentru predicţii"
"%s: salvat"
"OK"
"Înainte"
@@ -105,14 +114,21 @@
"Tastatură engleză (Marea Britanie)"
"Tastatură engleză (S.U.A.)"
"Tastatură spaniolă"
- "Tastatură spaniolă (S.U.A.)"
+
+
"Tastatură franceză"
"Tastatură franceză (Canada)"
"Tastatură franceză (Elveţia)"
+
+
+
+
"Tastatură ebraică"
"Tastatură italiană"
"Tastatură norvegiană"
"Tastatură olandeză"
+ "Tastatură poloneză"
+ "Tastatură portugheză"
"Tastatură rusă"
"Tastatură sârbă"
"Tastatură suedeză"
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 2e8577ea1..68ec65038 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -30,6 +30,15 @@
"Исправление текста"
"Подсказки, основанные на предыдущих словах"
"Другие варианты"
+ "Расширенные настройки"
+ "Для опытных пользователей"
+ "Задержка закрытия"
+ "Без задержки"
+ "По умолчанию"
+
+
+
+
"Заглавные автоматически"
"Быстрое исправление"
"Исправлять распространенные опечатки"
@@ -105,14 +114,21 @@
"Клавиатура: английская (Великобритания)"
"Клавиатура: английская (США)"
"Клавиатура: испанская"
- "Клавиатура: испанская (США)"
+
+
"Клавиатура: французская"
"Клавиатура: французская"
"Клавиатура: французская (Швейцария)"
+
+
+
+
"Клавиатура на иврите"
"Клавиатура: итальянская"
"Клавиатура: норвежская"
"Клавиатура: голландская"
+ "Польская клавиатура"
+ "Португальская раскладка"
"Клавиатура: русская"
"Клавиатура: сербская"
"Голос: шведский"
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index eeefa820f..3d5dd5878 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -30,6 +30,15 @@
"Oprava textu"
"Návrhy na základe predchádzajúcich slov"
"Ďalšie možnosti"
+ "Rozšírené nastavenia"
+ "Možnosti pre skúsených používateľov"
+ "Onesk. zrušenia kľúč. kon. okna"
+ "Bez oneskorenia"
+ "Predvolená"
+
+
+
+
"Veľké písmená automaticky"
"Rýchle opravy"
"Opravuje najčastejšie chyby pri písaní"
@@ -105,14 +114,21 @@
"klávesnica – angličtina (br.)"
"klávesnica – angličtina (am.)"
"klávesnica – španielčina"
- "klávesnica – španielčina (am.)"
+
+
"klávesnica – francúzština"
"klávesnica – francúzština (Kanada)"
"klávesnica – francúzština (Švajč.)"
+
+
+
+
"klávesnica – hebrejčina"
"klávesnica – taliančina"
"klávesnica – nórčina"
"klávesnica – holandčina"
+ "Poľská klávesnica"
+ "Portugalská klávesnica"
"klávesnica – ruština"
"hlas – srbčina"
"klávesnica – švédčina"
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 91f9036e6..a747f4c66 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -30,6 +30,15 @@
"Popravek besedila"
"Predlogi, ki temeljijo na prejšnjih besedah"
"Druge možnosti"
+ "Dodatne nastavitve"
+ "Možnosti za izkušene uporabnike"
+ "Zakas. okna za zavrnitev"
+ "Brez zamude"
+ "Privzeto"
+
+
+
+
"Samodejne velike začetnice"
"Hitri popravki"
"Popravi pogoste tipkarske napake"
@@ -105,14 +114,21 @@
"Tipkovnica za britansko angleščino"
"Tipkovnica za ameriško angleščino"
"Španska tipkovnica"
- "Tipkovnica za ameriško španščino"
+
+
"Francoska tipkovnica"
"Tipkovnica za kanadsko francoščino"
"Tipkovnica za švicarsko francoščino"
+
+
+
+
"Hebrejska tipkovnica"
"Italijanska tipkovnica"
"Norveška tipkovnica"
"Nizozemska tipkovnica"
+ "Poljska tipkovnica"
+ "Portugalska tipkovnica"
"Ruska tipkovnica"
"Srbska tipkovnica"
"Švedska tipkovnica"
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index b20f1df2e..025ce91b5 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -29,7 +29,16 @@
"Опште"
"Исправљање текста"
"Предлози на основу претходних речи"
- "Друге опције:"
+ "Друге опције"
+ "Напредна подешавања"
+ "Опције за искусне кориснике"
+ "Одложи одбац. иск. прозора тастера"
+ "Без одлагања"
+ "Подразумевано"
+
+
+
+
"Аутоматски унос великих слова"
"Брзе исправке"
"Исправља честе грешке у куцању"
@@ -105,14 +114,21 @@
"Језик тастатуре: енглески (УК)"
"Језик тастатуре: енглески (САД)"
"Језик тастатуре: шпански"
- "Језик тастатуре: шпански (САД)"
+
+
"Језик тастатуре: француски"
"Језик тастатуре: француски (Канада)"
"Језик тастатуре: француски (Швајц.)"
+
+
+
+
"Језик тастатуре: хебрејски"
"Језик тастатуре: италијански"
"Језик тастатуре: норвешки"
"Језик тастатуре: холандски"
+ "Језик тастатуре: пољски"
+ "Језик тастатуре: португалски"
"Језик тастатуре: руски"
"Језик тастатуре: српски"
"Језик тастатуре: шведски"
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 2d35fd87b..cf0fcf899 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -30,6 +30,15 @@
"Textkorrigering"
"Förslag baserade på tidigare ord"
"Andra alternativ"
+ "Avancerade inställningar"
+ "Alternativ för expertanvändare"
+ "Ta bort popup-fördröjning"
+ "Fördröj inte"
+ "Standard"
+
+
+
+
"Automatiska versaler"
"Snabba lösningar"
"Åtgärdar automatiskt vanliga misstag"
@@ -105,14 +114,21 @@
"Engelskt tangentbord (Storbrit.)"
"Engelskt tangentbord (USA)"
"Spanskt tangentbord"
- "Spanskt tangentbord (USA)"
+
+
"Franskt tangentbord"
"Franskt tangentbord (Kanada)"
"Franskt tangentbord (Schweiz)"
+
+
+
+
"Hebreiskt tangentbord"
"Italienskt tangentbord"
"Norskt tangentbord"
"Holländskt tangentbord"
+ "Polskt tangentbord"
+ "Portugisiskt tangentbord"
"Ryskt tangentbord"
"Serbiskt tangentbord"
"Svenskt tangentbord"
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
new file mode 100644
index 000000000..44f0722da
--- /dev/null
+++ b/java/res/values-sw/strings.xml
@@ -0,0 +1,177 @@
+
+
+
+
+ "Kibodi ya Android"
+ "Mipangilio ya kibodi ya Android"
+ "Chaguo za uingizaji"
+ "Tetema unabofya kitufe"
+ "Toa sauti unapobofya kitufe"
+ "Ibuka kitufe kinapobonyezwa"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Uwekaji wa herufi kubwa kiotomatiki"
+ "Utatuzi wa haraka"
+ "Husahihisha makosa ya kawaida yaliyoandikwa"
+
+
+ "Onyesha maneno yaliyopendekezwa wakati unachapa"
+ "Onyesha kila wakati"
+ "Onyesha kwenye hali wima"
+ "Ficha kila wakati"
+
+
+ "Onyesha kitufe cha mipangilio"
+ "Kiotomatiki"
+ "Onyesha kila wakati"
+ " Ficha kila mara"
+ "Usahihishaji Kioto"
+ "Sahihisha neno lililotangulia kiotomatiki"
+ "Zima"
+ "Ya wastani"
+ "Ya hima"
+ "Mapendekezo ya Bigramu"
+ "Tumia neno la hapo awali ili kuboresha pendekezo"
+
+
+
+
+ "%s : Imehifadhiwa"
+ "Nenda"
+ "Ifuatayo"
+ "Kwisha"
+ "Tuma"
+ "ABC"
+ "Zaidi"
+ "Pumzisha"
+ "Subiri"
+ "Uingizaji wa sauti"
+ "Uingizaji wa sauti hauhimiliwi kwa lugha yako kwa sasa, lakini inafanya kazi kwa Kiingereza."
+ "Uingizaji wa sauti hutumia utambuaji wa usemi wa Google. ""Sera ya Faragha ya Simu za mkononi "" hutumika."
+ "Ili kuzima uingizaji sauti, nenda kwa mipangilio ya mbinu ya uingizaji."
+ "Ili kutumia uingizaji wa sauti, bonyeza kitufe cha maikrofoni."
+ "Ongea sasa"
+ "Inafanya kazi"
+
+ "Hitilafu. Tafadhali jaribu tena."
+ "Haiwezi kuunganisha"
+ "Hitilafu, usemi ni zaidi."
+ "Tatizo la sauti"
+ "Hitilafu ya Seva"
+ "Hakuna matamshi yaliyosikizwa"
+ "Hakuna zinazolingana zilizopatikana."
+ "Utafutaji wa sauti haujawekwa"
+ "Kidokezo:"" Telezesha kidole kwenye kibodi ili utamke"
+ "Kidokezo:"" Wakati mwingine, jaribu kutamka uakifishaji kama vile \"kituo\", \"koma\", au \"kiulizio cha swali\"."
+ "Ghairi"
+ "Sawa"
+ "Uingizaji wa sauti"
+ "Kwenye kibodi kuu"
+ "Kwenye kibodi ya ishara"
+ "Zima"
+ "Maikrofoni kwenye kibodi kuu"
+ "Maikrofoni kwenye kibodi ya ishara"
+ "Uingizaji sauti umelemazwa"
+ "Chagua mtindo wa uingizaji"
+ "Lugha za uingizaji"
+ "Telezesha kidole kwenye kitufe cha nafasi ili kubadilisha lugha"
+ "← Gusa tena ili kuhifadhi"
+ "Kamusi inapatikana"
+ "Wezesha maoni ya watumiaji"
+ "Saidia kuimarisha mbinu ya uingizaji wa kihariri, kwa kutuma takwimu za matumizi na ripoti za kuvurugika kwa Google kiotomatiki."
+ "Gusa ili kurekebisha maneno"
+ "Gusa maneno yaliyoingizwa ili kuyasahihisha, wakati mapendekezo yanaonekana tu"
+ "Maandhari ya Kibodi"
+ "Kibodi ya Kicheki"
+
+
+ "Kibodi ya Kidenmaki"
+ "Kibodi ya Kijerumani"
+ "Kibodi ya Kiingereza (Uingereza)"
+ "Kibodi ya Kiingereza (Marekani)"
+ "Kibodi ya Kihispania"
+
+
+ "Kibodi ya Kifaransa"
+ "Kibodi ya Kifaransa (Kanada)"
+ "Kibodi ya Kifaransa (Uswizi)"
+
+
+
+
+
+
+ "Kibodi ya Kiitaliano"
+ "Kibodi ya Kinorwe"
+ "Kibodi ya Kiholanzi"
+
+
+
+
+ "Kibodi ya Kirusi"
+ "Kibodi ya Kiserbia"
+ "Kibodi ya Kiswidi"
+
+
+ "Sauti ya Kicheki"
+ "Sauti ya Kijerumani"
+
+
+ "Sauti ya Kihispania"
+ "Sauti ya Kifaransa"
+
+
+ "Sauti ya Kijapani"
+ "Sauti ya Kikorea"
+
+
+ "Sauti ya Kipolandi"
+ "Sauti ya Kireno"
+ "Sauti ya Kirusi"
+ "Sauti ya Kituruki"
+
+
+
+
+
+
+ "Hali ya Uchunguzi wa Utumizi"
+
diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
new file mode 100644
index 000000000..6e583e3bf
--- /dev/null
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+ 45.0mm
+ 45%p
+
+
+ 1.3mm
+ 1.3mm
+ 1.1mm
+ 0.0mm
+ 1.3mm
+ 1.3mm
+ 1.1mm
+ 0.0mm
+ 13.0mm
+
+ 45%
+ 32%
+ 23%
+ 29%
+
+ 18dip
+ 40.0mm
+
diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml
new file mode 100644
index 000000000..75c0edf87
--- /dev/null
+++ b/java/res/values-sw600dp/config.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+ false
+ true
+ false
+ false
+
+ true
+
+ 1200
+
+ 5
+ medium
+ 5
+
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
new file mode 100644
index 000000000..274b62b4c
--- /dev/null
+++ b/java/res/values-sw600dp/dimens.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+ 48.0mm
+ 50%p
+ -35.0%p
+
+
+ 1.0mm
+ 1.0mm
+ 10.0mm
+ 1.1mm
+ 0.0mm
+ 1.0mm
+ 1.0mm
+ 1.1mm
+ 0.0mm
+ 12dip
+
+
+ 15.6mm
+
+ -13.0mm
+
+ 37%
+ 22%
+ 23%
+ 25%
+ 50%
+ 15.0mm
+ 0.1in
+ 0.05in
+
+ 6dip
+
+ 46dip
+ 15.0mm
+ 0.3in
+ 12dip
+ 22dip
+
diff --git a/java/res/values-sw600dp/donottranslate.xml b/java/res/values-sw600dp/donottranslate.xml
new file mode 100644
index 000000000..6d94c2811
--- /dev/null
+++ b/java/res/values-sw600dp/donottranslate.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ 1
+
diff --git a/java/res/values-xlarge-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
similarity index 69%
rename from java/res/values-xlarge-land/dimens.xml
rename to java/res/values-sw768dp-land/dimens.xml
index ade125639..74eb08aa3 100644
--- a/java/res/values-xlarge-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -21,17 +21,25 @@
58.0mm
+ 45%p
- 0.0mm
- 0.0mm
- 13.0mm
+ 1.6mm
+ 1.6mm
1.1mm
0.0mm
+ 1.6mm
+ 1.6mm
+ 1.1mm
+ 0.0mm
+ 13.0mm
0.0mm
- 30.7%
- 21.9%
+ 38%
+ 26%
+ 23%
+ 24%
+ 17.0mm
18dip
26.5mm
diff --git a/java/res/values-xlarge/config.xml b/java/res/values-sw768dp/config.xml
similarity index 87%
rename from java/res/values-xlarge/config.xml
rename to java/res/values-sw768dp/config.xml
index 80ef3cd8e..4025b0e41 100644
--- a/java/res/values-xlarge/config.xml
+++ b/java/res/values-sw768dp/config.xml
@@ -20,20 +20,18 @@
false
- false
false
-
- true
+ false
false
false
false
- false
false
false
false
false
true
+ false
false
true
diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-sw768dp/dimens.xml
similarity index 71%
rename from java/res/values-xlarge/dimens.xml
rename to java/res/values-sw768dp/dimens.xml
index 2796b6fcb..b5d5a8496 100644
--- a/java/res/values-xlarge/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -21,13 +21,19 @@
48.0mm
+ 50%p
+ -35.0%p
- 0.0mm
- 0.0mm
- 10.0mm
+ 1.1mm
+ 1.1mm
1.1mm
0.0mm
+ 1.1mm
+ 1.1mm
+ 1.1mm
+ 0.0mm
+ 10.0mm
0.0mm
40dip
12dip
@@ -37,13 +43,16 @@
-13.0mm
- 34.4%
- 21.2%
+ 38%
+ 26%
+ 23%
+ 25%
+ 50%
+ 15.0mm
+ 0.1in
+ 0.05in
6dip
- 26.3%
- 23.0mm
- 8.0mm
46dip
+
+
+
"ปรับเป็นตัวพิมพ์ใหญ่อัตโนมัติ"
"แก้ไขด่วน"
"แก้ไขข้อผิดพลาดในการพิมพ์ที่พบบ่อย"
@@ -105,14 +114,21 @@
"แป้นพิมพ์ภาษาอังกฤษ (สหราชอาณาจักร)"
"แป้นพิมพ์ภาษาอังกฤษ (สหรัฐอเมริกา)"
"แปันพิมพ์ภาษาสเปน"
- "แป้นพิมพ์ภาษาสเปน (สหรัฐอเมริกา)"
+
+
"แป้นพิมพ์ภาษาฝรั่งเศส"
"แป้นพิมพ์ภาษาฝรั่งเศส (แคนาดา)"
"แป้นพิมพ์ภาษาฝรั่งเศส (สวิตเซอร์แลนด์)"
+
+
+
+
"แป้นพิมพ์ภาษาฮิบรู"
"แป้นพิมพ์ภาษาอิตาลี"
"แป้นพิมพ์ภาษานอร์เวย์"
"แป้นพิมพ์ภาษาดัตช์"
+ "แป้นพิมพ์ภาษาโปแลนด์"
+ "แป้นพิมพ์ภาษาโปรตุเกส"
"แป้นพิมพ์ภาษารัสเซีย"
"แป้นพิมพ์ภาษาเซอร์เบีย"
"แป้นพิมพ์ภาษาสวีเดน"
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index da62eafc6..e5d968769 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -30,6 +30,15 @@
"Pagwawasto ng teksto"
"Mga suhestiyon batay sa mga nakaraang salita"
"Iba pang mga pagpipilian"
+ "Mga advanced na setting"
+ "Mga pagpipilian para sa mga ekspertong user"
+ "Balewala antala key popup"
+ "Walang antala"
+ "Default"
+
+
+
+
"Auto-capitalization"
"Mga mabilisang pagsasaayos"
"Itinatama ang mga karaniwang na-type na mali"
@@ -105,14 +114,21 @@
"Ingles (UK) na Keyboard"
"Ingles (US) na Keyboard"
"Spanish na Keyboard"
- "Spanish (US) na Keyboard"
+
+
"French na Keyboard"
"French (Canada) na Keyboard"
"French (Switzerland) na Keyboard"
+
+
+
+
"Hebrew na Keyboard"
"Italian na Keyboard"
"Norwegian na Keyboard"
"Dutch na Keyboard"
+ "Polish na Keyboard"
+ "Portuguese na Keyboard"
"Russian na Keyboard"
"Serbian na Keyboard"
"Swedish na Keyboard"
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 2607ae257..8be9f7a6d 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -30,6 +30,15 @@
"Metin düzeltme"
"Önceki kelimelere dayalı öneriler"
"Diğer seçenekler"
+ "Gelişmiş ayarlar"
+ "Uzman kullanıcılar için seçenekler"
+ "Tuş popup içn kaptm ertlm"
+ "Gecikme yok"
+ "Varsayılan"
+
+
+
+
"Otomatik olarak büyük harf yap"
"Hızlı onarımlar"
"Yaygın olarak yapılan yazım hatalarını düzeltir"
@@ -38,7 +47,7 @@
"Her zaman göster"
"Dikey modda göster"
"Her zaman gizle"
- "Dil geçişi içn boşluk çubğn kullan"
+ "Dil geçişi > boşluk çubuğuyla"
"Ayarları göster tuşu"
"Otomatik"
"Her zaman göster"
@@ -105,14 +114,21 @@
"İngilizce (İngiltere) Klavye"
"İngilizce (ABD) Klavye"
"İspanyolca Klavye"
- "İspanyolca (ABD) Klavye"
+
+
"Fransızca Klavye"
"Fransızca (Kanada) Klavye"
"Fransızca (İsviçre) Klavye"
+
+
+
+
"İbranice Klavye"
"İtalyanca Klavye"
"Norveççe Klavye"
"Felemenkçe Klavye"
+ "Lehçe Klavye"
+ "Portekizce Klavye"
"Rusça Klavye"
"Sırpça Klavye"
"İsveççe Klavye"
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index a2f589d1d..e5d2b31e1 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -30,6 +30,15 @@
"Виправлення тексту"
"Пропозиції на основі попередніх слів"
"Інші опції"
+ "Розширені налаштування"
+ "Налаштування для досвідчених користувачів"
+ "Затримка клавіши закриття"
+ "Без затримки"
+ "За умовчанням"
+
+
+
+
"Авто викор. вел. літер"
"Шв. виправлення"
"Виправляє поширені помилки"
@@ -105,14 +114,21 @@
"Англ. розкладка (Великобританія)"
"Англійська розкладка (США)"
"Іспанська розкладка"
- "Іспанська розкладка (США)"
+
+
"Французька розкладка"
"Французька розкладка (Канада)"
"Французька розкладка (Швейцарія)"
+
+
+
+
"Розкладка для івриту"
"Італійська розкладка"
"Норвезька розкладка"
"Голланд. розклад."
+ "Польська розкладка"
+ "Португальська розкладка"
"Російська розкладка"
"Сербська розкладка"
"Шведська розкладка"
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 81be8264e..a75f7e82e 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -30,6 +30,15 @@
"Sửa văn bản"
"Đề xuất dựa trên các từ trước đó"
"Tùy chọn khác"
+ "Cài đặt nâng cao"
+ "Tùy chọn cho người dùng chuyên gia"
+ "Hlại việc l.bỏ csổ b.lên chính"
+ "Không có tgian trễ"
+ "Mặc định"
+
+
+
+
"Tự động viết hoa"
"Sửa nhanh"
"Sửa lỗi nhập thông thường"
@@ -105,14 +114,21 @@
"Bàn phím tiếng Anh (Anh)"
"Bàn phím tiếng Anh (Mỹ)"
"Bàn phím tiếng Tây Ban Nha"
- "Bàn phím tiếng Tây Ban Nha (Mỹ)"
+
+
"Bàn phím tiếng Pháp"
"Bàn phím tiếng Pháp (Canada)"
"Bàn phím tiếng Pháp (Thụy Sĩ)"
+
+
+
+
"Bàn phím tiếng Do Thái"
"Bàn phím tiếng Ý"
"Bàn phím tiếng Na Uy"
"Bàn phím tiếng Hà Lan"
+ "Bàn phím tiếng Ba Lan"
+ "Bàn phím tiếng Bồ Đào Nha"
"Bàn phím tiếng Nga"
"Bàn phím tiếng Serbia"
"Bàn phím tiếng Thụy Điển"
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 1f15831b3..2db21f4d1 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -30,6 +30,15 @@
"文本更正"
"根据前面的字词提供建议"
"其他选项"
+ "高级设置"
+ "适合专家级用户的选项"
+ "关闭弹出式键盘的延迟"
+ "无延迟"
+ "默认"
+
+
+
+
"自动大写"
"快速纠正"
"纠正常见的输入错误"
@@ -105,14 +114,21 @@
"英语(英国)键盘"
"英语(美国)键盘"
"西班牙语键盘"
- "西班牙语(美国)键盘"
+
+
"法语键盘"
"法语(加拿大)键盘"
"法语(瑞士)键盘"
+
+
+
+
"希伯来语键盘"
"意大利语键盘"
"挪威语键盘"
"荷兰语键盘"
+ "波兰语键盘"
+ "葡萄牙语键盘"
"俄语键盘"
"塞尔维亚语键盘"
"瑞典语键盘"
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 8a89aeb08..43a1f3770 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -30,6 +30,15 @@
"文字修正"
"根據先前字詞產生的建議"
"其他選項"
+ "進階設定"
+ "提供給專業使用者的選項"
+ "關閉彈出式鍵盤的延遲時間"
+ "不延遲"
+ "預設"
+
+
+
+
"自動大寫"
"快速修正"
"修正一般打字錯誤"
@@ -105,14 +114,21 @@
"英文 (英國) 鍵盤"
"英文 (美國) 鍵盤"
"西班牙文鍵盤"
- "西班牙文 (美國) 鍵盤"
+
+
"法文鍵盤"
"法文 (加拿大) 鍵盤"
"法文 (瑞士) 鍵盤"
+
+
+
+
"希伯來文鍵盤"
"義大利文鍵盤"
"挪威文鍵盤"
"荷蘭文鍵盤"
+ "波蘭文鍵盤"
+ "葡萄牙文鍵盤"
"俄文鍵盤"
"塞爾維亞文鍵盤"
"瑞典文語音"
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
new file mode 100644
index 000000000..3c6f2ba75
--- /dev/null
+++ b/java/res/values-zu/strings.xml
@@ -0,0 +1,177 @@
+
+
+
+
+ "Ikhibhodi ye-Android"
+ "Izilungiselelo zekhibhodi ye-Android"
+ "Okukhethwa kukho kokungenayo"
+ "Dlidlizelisa ngokucindezela inkinobho"
+ "Umsindo wokucindezela ukhiye"
+ "Ugaxekile ngokucindezela ukhiye"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Ukwenza ofeleba okuzenzakalelayo"
+ "Ukulungisa okusheshayo"
+ "Ilungisa amaphutha athayiphwa ngokuvamile"
+
+
+ "Bonisa amagama aphakamisiwe ngenkathi uthayipha"
+ "Bonisa njalo"
+ "Bonisa kwimodi emile"
+ "Fihla njalo"
+
+
+ "Bonisa ukhiye wezilungiselelo"
+ "Okuzenzakalelayo"
+ "Bonisa njalo"
+ "Fihla njalo"
+ "Ukulungisa okuzenzakalelayo"
+ "Ngokuzenzakalelayo ilungisa igama elandulele"
+ "Valiwe"
+ "Thobekile"
+ "Bukhali"
+ "Iziphakamiso ze-Biagram"
+ "Sebenzisa igama elandulele ukuthuthukisa okusikiselwayo"
+
+
+
+
+ "%s : Kulondoloziwe"
+ "Iya"
+ "Okulandelayo"
+ "Kwenziwe"
+ "Thumela"
+ "ABC"
+ "Okungaphezulu"
+ "Misa okwesikhashana"
+ "Linda"
+ "Okungenayo kwezwi"
+ "Okungenayo kwezwi akusekelwa kolimi lwakho, kodwa kuyasebenza Ngesingisi."
+ "Okufakwayo kwezwi kusebenzisa ukuqaphela izwi le-Google. ""Inqubomgomo Yobumfihlo Yefoni"" iyasebenza."
+ "Ukuvala okufakwayo kwezwi, iya kuzilungiselelo zendlela yokufakwayo"
+ "Ukusebenzisa okufakwayo kwezwi, cindezela inkinobho yemakrofoni."
+ "Khuluma manje"
+ "Kuyasebenza"
+
+ "Iphutha. Sicela uzame futhi."
+ "Ayikwazanga ukuxhuma"
+ "Iphutha, kunamagama amaningi."
+ "Inkinga yomsindo"
+ "Iphutha leseva"
+ "Awekho amagama azwakele"
+ "Akukho okufanayo okutholiwe"
+ "Ukusesha ngezwi akufakiwe"
+ "Isexwayiso:""Shintshela kwikhibhodi ukuze ukhulume"
+ "Isixwayiso: ""Esikhathini esilandelayo, zama ukukhuluma izimpimiselo ezinjengo \"isikhathi, \"ikhefu\" noma \"uphawu lombuzo\"."
+ "Khansela"
+ "KULUNGILE"
+ "Okungenayo kwezwi"
+ "Kwikhibhodi eyisisekelo"
+ "Ikhibhodi yezimpawu"
+ "VALIWE"
+ "I-mic kwikhibhodi eyisisekelo"
+ "Ikhibhodi yezimpawu ze-mic"
+ "Okufakwayo kwezwi kuvimbelwe"
+ "Khetha indlela yokungenayo"
+ "Izilimi zokufakwayo"
+ "Slayida umunwe kwibha yesikhala ukushintsha ulimi"
+ "← Thinta futhi ukulondoloza"
+ "Isichazamazwi siyatholakala"
+ "Vumela impendulo yomsebenzisi"
+ "Siza ukuthuthukisa umhleli wendlela yokungenayo ngokuthumela izibalo zokubala nokuphahlaza imibiko e-Google."
+ "Thinta ukulungisa amagama"
+ "Thinta amagama afakiwe ukuwalungisa, kuphela lapho okusikiselwayo kubonakala"
+ "Indikimba Yekhibhodi"
+ "Ikhibhodi yesi-Czech"
+
+
+ "Ikhibhodi yesi-Danish"
+ "Ikhobhodi yei-German"
+ "Ikhibhodi ye-English (UK)"
+ "Ikhobhodi ye-English (US)"
+ "Ikhobhodi yesi-Spanish"
+
+
+ "Ikhibhodi yesi-French"
+ "Ikhobhodi yesi-French (i-Canada)"
+ "Ikhibhodi yesi-French (i-Switzerland"
+
+
+
+
+
+
+ "Ikhibhodi yesi-Italian"
+ "Ikhibhodi yesi-Norwegian"
+ "Ikhibhodi yesi-Dutch"
+
+
+
+
+ "Ikhobhodi yesi-Russian"
+ "Ikhibhodi yesi-Serbian"
+ "Ikhobhodi yesi-Swedish"
+
+
+ "Izwi le-Czech"
+ "Izwi lesi-German"
+
+
+ "Izwi lesi-Spanish"
+ "Izwi lesi-French"
+
+
+ "Izwi lesi-Japanese"
+ "Izwi lesi-Korean"
+
+
+ "Izwi lesi-Polish"
+ "Izwi lesi-Portuguese"
+ "Izwi lesi-Russian"
+ "Izwi lesi-Turkish"
+
+
+
+
+
+
+ "Imodi Yesitadi Yokusebenziseka"
+
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index f03da4f8f..e9b6354a5 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -15,36 +15,56 @@
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
@@ -61,20 +81,26 @@
-
+
+
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
@@ -85,8 +111,19 @@
-
-
+
+
+
+
+
+
+
+
@@ -98,6 +135,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -108,7 +171,7 @@
-
+
@@ -120,43 +183,76 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
@@ -170,29 +266,39 @@
-
+
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -201,4 +307,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/values/bools.xml b/java/res/values/bools.xml
index 2a181e17d..889d8f784 100644
--- a/java/res/values/bools.xml
+++ b/java/res/values/bools.xml
@@ -21,6 +21,4 @@
false
-
- true
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
deleted file mode 100644
index 733a464cc..000000000
--- a/java/res/values/colors.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- #FFFFFFFF
- #FFFCAE00
- #FFFCAE00
- #80000000
- #80FFFFFF
- #FFC0C0C0
- #FFFFFFFF
- #FFFFFFFF
- #FF000000
-
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index 1d24b1088..ad580cc69 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -20,16 +20,13 @@
true
- true
true
- true
true
true
true
true
true
false
- true
true
true
true
@@ -45,6 +42,7 @@
false
true
false
+ true
true
false
@@ -69,11 +67,9 @@
1100
2.0mm
- 4
+ 5
small
5
-
- true
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index 4708611e0..54256de3c 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -30,9 +30,15 @@
0.330in
0.00in
0.06in
+ 0.00in
+ 0.00in
+ 0.06in
+ 0.01in
+ 0.03in
+ 0.06in
0.0in
16dip
- 32dip
+ 38dip
8dip
@@ -44,14 +50,15 @@
-0.05in
45%
- 29%
+ 29%
+ 23%
+ 35%
21dip
+ 82%
80sp
0.1in
- 82%
- 130sp
- 0.193in
+ 0.05in
42dip
2.5in
- 22dip
0.05in
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 1cdae3d81..1c198d9cb 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -38,8 +38,10 @@
Tab
\?123
-
- 123
+
+ 123
+
+ \uff0a\uff03\uff08
@@ -126,7 +128,7 @@
Stone (bold)
Stone (normal)
Gingerbread
- Honeycomb
+ IceCreamSandwich
@@ -135,7 +137,7 @@
- @string/layout_stone_normal
- @string/layout_stone_bold
- @string/layout_gingerbread
- - @string/layout_honeycomb
+ - @string/layout_ics
- 0
@@ -150,9 +152,11 @@
- en_US
- en_GB
+ - de_ZZ
- English (US)
- English (UK)
+ - Deutsch (QWERTY)
diff --git a/java/res/values/durations.xml b/java/res/values/durations.xml
deleted file mode 100644
index 92af68e39..000000000
--- a/java/res/values/durations.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
- 40
-
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
new file mode 100644
index 000000000..3ba345580
--- /dev/null
+++ b/java/res/values/keyboard-icons-black.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
new file mode 100644
index 000000000..3029695e6
--- /dev/null
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
new file mode 100644
index 000000000..9f5fb5a5b
--- /dev/null
+++ b/java/res/values/keyboard-icons-white.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
diff --git a/java/res/values/keycodes.xml b/java/res/values/keycodes.xml
index d5926ecfd..ee345291a 100644
--- a/java/res/values/keycodes.xml
+++ b/java/res/values/keycodes.xml
@@ -23,9 +23,6 @@
9
10
32
- 45
- 39
- 34
-1
-2
-5
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index ac6082f22..75f4c50fb 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -58,6 +58,11 @@
Default
+
+ Suggest Contact names
+
+ Use names from Contacts for suggestions and corrections
+
Auto-capitalization
@@ -126,6 +131,81 @@
Wait
+
+ Current text is "%s"
+
+ No text entered
+
+
+ Key code %d
+
+ Shift
+
+ Shift enabled
+
+ Caps lock enabled
+
+ Delete
+
+ Symbols
+
+ Letters
+
+ Numbers
+
+ Settings
+
+ Tab
+
+ Space
+
+ Voice input
+
+ Smiley face
+
+ Return
+
+
+ Comma
+
+ Period
+
+ Left parenthesis
+
+ Right parenthesis
+
+ Colon
+
+ Semicolon
+
+ Exclamation mark
+
+ Question mark
+
+ Double quote
+
+ Single quote
+
+ Dot
+
+ Square root
+
+ Pi
+
+ Delta
+
+ Trademark
+
+ Care of
+
+ Star
+
+ Pound
+
+ Ellipsis
+
+ Low double quote
+
German Keyboard
+
+ German QWERTY Keyboard
English (UK) Keyboard
English (US) Keyboard
Spanish Keyboard
-
- Spanish (US) Keyboard
+
+ Finnish Keyboard
French Keyboard
French (Canada) Keyboard
French (Switzerland) Keyboard
+
+ Croatian Keyboard
+
+ Hungarian Keyboard
Hebrew Keyboard
@@ -280,6 +366,8 @@
Serbian Keyboard
Swedish Keyboard
+
+ Turkish Keyboard
Afrikaans Voice
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 3a389e57b..05defcb52 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -15,25 +15,169 @@
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/values/themes-basic.xml b/java/res/values/themes-basic.xml
new file mode 100644
index 000000000..50b52de32
--- /dev/null
+++ b/java/res/values/themes-basic.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/java/res/values/themes-gingerbread.xml b/java/res/values/themes-gingerbread.xml
new file mode 100644
index 000000000..cdb10c81a
--- /dev/null
+++ b/java/res/values/themes-gingerbread.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
new file mode 100644
index 000000000..33c40816b
--- /dev/null
+++ b/java/res/values/themes-ics.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/java/res/values/themes-stone-bold.xml b/java/res/values/themes-stone-bold.xml
new file mode 100644
index 000000000..6589807ec
--- /dev/null
+++ b/java/res/values/themes-stone-bold.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/java/res/values/themes-stone.xml b/java/res/values/themes-stone.xml
new file mode 100644
index 000000000..a8608f6b3
--- /dev/null
+++ b/java/res/values/themes-stone.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
diff --git a/java/res/values/whitelist.xml b/java/res/values/whitelist.xml
index ced52e70e..d4ecbfaa4 100644
--- a/java/res/values/whitelist.xml
+++ b/java/res/values/whitelist.xml
@@ -25,14 +25,5 @@
3. (String)after
-->
-
- - 255
- - ill
- - I\'ll
-
- - 255
- - thisd
- - this\'d
-
diff --git a/java/res/xml-ar/kbd_qwerty.xml b/java/res/xml-ar/kbd_qwerty.xml
index 93310bf9c..57a6d2caf 100644
--- a/java/res/xml-ar/kbd_qwerty.xml
+++ b/java/res/xml-ar/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_arabic" />
diff --git a/java/res/xml-cs/kbd_qwerty.xml b/java/res/xml-cs/kbd_qwerty.xml
index a74f7fa84..9991ea2d2 100644
--- a/java/res/xml-cs/kbd_qwerty.xml
+++ b/java/res/xml-cs/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwertz" />
diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml
index 12ea33c13..37a50fdfd 100644
--- a/java/res/xml-da/kbd_qwerty.xml
+++ b/java/res/xml-da/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_scandinavian" />
diff --git a/java/res/xml-de-rZZ/kbd_qwerty.xml b/java/res/xml-de-rZZ/kbd_qwerty.xml
new file mode 100644
index 000000000..d5fd8ef7a
--- /dev/null
+++ b/java/res/xml-de-rZZ/kbd_qwerty.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/java/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml
index cc7722a44..89e10b26d 100644
--- a/java/res/xml-de/kbd_qwerty.xml
+++ b/java/res/xml-de/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwertz" />
diff --git a/java/res/xml-es/kbd_qwerty.xml b/java/res/xml-es/kbd_qwerty.xml
index 3906bde38..568f4d652 100644
--- a/java/res/xml-es/kbd_qwerty.xml
+++ b/java/res/xml-es/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_spanish" />
diff --git a/java/res/xml-fi/kbd_qwerty.xml b/java/res/xml-fi/kbd_qwerty.xml
index e35ab2b41..75721e057 100644
--- a/java/res/xml-fi/kbd_qwerty.xml
+++ b/java/res/xml-fi/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_scandinavian" />
diff --git a/java/res/xml-fr-rCA/kbd_qwerty.xml b/java/res/xml-fr-rCA/kbd_qwerty.xml
index e649a1e9c..7bdfbadf1 100644
--- a/java/res/xml-fr-rCA/kbd_qwerty.xml
+++ b/java/res/xml-fr-rCA/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwerty" />
diff --git a/java/res/xml-fr-rCH/kbd_qwerty.xml b/java/res/xml-fr-rCH/kbd_qwerty.xml
index f82becb48..41b701d83 100644
--- a/java/res/xml-fr-rCH/kbd_qwerty.xml
+++ b/java/res/xml-fr-rCH/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwertz" />
diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml
index 5d1f10c6b..8c730a24f 100644
--- a/java/res/xml-fr/kbd_qwerty.xml
+++ b/java/res/xml-fr/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_azerty" />
diff --git a/java/res/xml-hr/kbd_qwerty.xml b/java/res/xml-hr/kbd_qwerty.xml
new file mode 100644
index 000000000..ca92e86a7
--- /dev/null
+++ b/java/res/xml-hr/kbd_qwerty.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/java/res/xml-hu/kbd_qwerty.xml b/java/res/xml-hu/kbd_qwerty.xml
index 952ad9a0f..3195d5b1f 100644
--- a/java/res/xml-hu/kbd_qwerty.xml
+++ b/java/res/xml-hu/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwertz" />
diff --git a/java/res/xml-iw/kbd_qwerty.xml b/java/res/xml-iw/kbd_qwerty.xml
index cfe404c9d..dc2c5d35a 100644
--- a/java/res/xml-iw/kbd_qwerty.xml
+++ b/java/res/xml-iw/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_hebrew" />
diff --git a/java/res/xml-nb/kbd_qwerty.xml b/java/res/xml-nb/kbd_qwerty.xml
index e7a743ca9..1f4e86e89 100644
--- a/java/res/xml-nb/kbd_qwerty.xml
+++ b/java/res/xml-nb/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_scandinavian" />
diff --git a/java/res/xml-pl/kbd_qwerty.xml b/java/res/xml-pl/kbd_qwerty.xml
index ab5b88728..44312c52c 100644
--- a/java/res/xml-pl/kbd_qwerty.xml
+++ b/java/res/xml-pl/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwerty" />
diff --git a/java/res/xml-pt/kbd_qwerty.xml b/java/res/xml-pt/kbd_qwerty.xml
index 83fb5b4c1..f5dcbc61b 100644
--- a/java/res/xml-pt/kbd_qwerty.xml
+++ b/java/res/xml-pt/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwerty" />
diff --git a/java/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml
index 826818c46..aee1b1bfc 100644
--- a/java/res/xml-ru/kbd_qwerty.xml
+++ b/java/res/xml-ru/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_russian" />
diff --git a/java/res/xml-sr/kbd_qwerty.xml b/java/res/xml-sr/kbd_qwerty.xml
index 6116c7536..58fc187c2 100644
--- a/java/res/xml-sr/kbd_qwerty.xml
+++ b/java/res/xml-sr/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_serbian" />
diff --git a/java/res/xml-sv/kbd_qwerty.xml b/java/res/xml-sv/kbd_qwerty.xml
index 69f0b3fa0..e29d9abce 100644
--- a/java/res/xml-sv/kbd_qwerty.xml
+++ b/java/res/xml-sv/kbd_qwerty.xml
@@ -20,16 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_scandinavian" />
diff --git a/java/res/xml-sw600dp-land/kbd_popup_template.xml b/java/res/xml-sw600dp-land/kbd_popup_template.xml
new file mode 100644
index 000000000..2c1d1902e
--- /dev/null
+++ b/java/res/xml-sw600dp-land/kbd_popup_template.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_key_styles.xml b/java/res/xml-sw600dp/kbd_key_styles.xml
new file mode 100644
index 000000000..e8e80ac03
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_key_styles.xml
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_number.xml b/java/res/xml-sw600dp/kbd_number.xml
new file mode 100644
index 000000000..2c7af0ae2
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_number.xml
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_phone.xml b/java/res/xml-sw600dp/kbd_phone.xml
new file mode 100644
index 000000000..4dee882e9
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_phone.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_phone_symbols.xml b/java/res/xml-sw600dp/kbd_phone_symbols.xml
new file mode 100644
index 000000000..87de880d9
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_phone_symbols.xml
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_popup_template.xml b/java/res/xml-sw600dp/kbd_popup_template.xml
new file mode 100644
index 000000000..fff2659be
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_popup_template.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_qwerty_f2.xml b/java/res/xml-sw600dp/kbd_qwerty_f2.xml
new file mode 100644
index 000000000..7638ee4b4
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_qwerty_f2.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row1.xml b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
new file mode 100644
index 000000000..b781d681e
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_qwerty_row1.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_qwerty_row2.xml b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
new file mode 100644
index 000000000..05b005af1
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_qwerty_row2.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_qwerty_row3.xml b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
similarity index 72%
rename from java/res/xml-xlarge/kbd_qwerty_row3.xml
rename to java/res/xml-sw600dp/kbd_qwerty_row3.xml
index b7e9bcff9..0dbc5cf66 100644
--- a/java/res/xml-xlarge/kbd_qwerty_row3.xml
+++ b/java/res/xml-sw600dp/kbd_qwerty_row3.xml
@@ -2,7 +2,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_row3_right.xml b/java/res/xml-sw600dp/kbd_row3_right.xml
new file mode 100644
index 000000000..a9c5eb371
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_row3_right.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_arabic.xml b/java/res/xml-sw600dp/kbd_rows_arabic.xml
new file mode 100644
index 000000000..bc37d5a9f
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_arabic.xml
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_azerty.xml b/java/res/xml-sw600dp/kbd_rows_azerty.xml
new file mode 100644
index 000000000..b53bbbbf9
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_azerty.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_hebrew.xml b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
new file mode 100644
index 000000000..a1475376b
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_hebrew.xml
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_qwerty.xml b/java/res/xml-sw600dp/kbd_rows_qwerty.xml
new file mode 100644
index 000000000..a2d26b3de
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_qwerty.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_qwertz.xml b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
new file mode 100644
index 000000000..7ea9b0f37
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_qwertz.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_russian.xml b/java/res/xml-sw600dp/kbd_rows_russian.xml
new file mode 100644
index 000000000..43fa665e6
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_russian.xml
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_scandinavian.xml b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
new file mode 100644
index 000000000..3666ead51
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_scandinavian.xml
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_serbian.xml b/java/res/xml-sw600dp/kbd_rows_serbian.xml
new file mode 100644
index 000000000..80debdadb
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_serbian.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw600dp/kbd_rows_spanish.xml b/java/res/xml-sw600dp/kbd_rows_spanish.xml
new file mode 100644
index 000000000..7ef44bb53
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_rows_spanish.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_symbols.xml b/java/res/xml-sw600dp/kbd_symbols.xml
similarity index 74%
rename from java/res/xml-xlarge/kbd_symbols.xml
rename to java/res/xml-sw600dp/kbd_symbols.xml
index 41e8522dc..77849f6fd 100644
--- a/java/res/xml-xlarge/kbd_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_symbols.xml
@@ -2,7 +2,7 @@
-
@@ -71,19 +58,16 @@
latin:popupCharacters="ⁿ,∅" />
-
+ latin:keyLabel="#"
+ latin:keyXPos="4.5%p" />
-
+
+ latin:keyLabel="/"
+ latin:keyWidth="fillRight" />
-
-
-
-
-
-
-
-
-
+ latin:keyStyle="toAlphaKeyStyle"
+ latin:keyLabelOption="alignLeft"
+ latin:keyWidth="13.0%p"
+ latin:keyEdgeFlags="left" />
+
+ latin:keyXPos="30.750%p"
+ latin:keyWidth="39.750%p" />
+ latin:keyLabel="_"
+ latin:keyWidth="9.750%p" />
+ latin:keyLabel="-"
+ latin:keyWidth="9.750%p" />
-
+
+ latin:popupCharacters="“,”,«,»,‘,’,‚,‛"
+ latin:keyWidth="9.750%p" />
+ latin:keyLabel="_"
+ latin:keyWidth="9.750%p" />
-
-
-
-
-
+
+
diff --git a/java/res/xml-sw600dp/kbd_symbols_shift.xml b/java/res/xml-sw600dp/kbd_symbols_shift.xml
new file mode 100644
index 000000000..b25292f27
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_symbols_shift.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge-land/kbd_popup_template.xml b/java/res/xml-sw768dp-land/kbd_popup_template.xml
similarity index 100%
rename from java/res/xml-xlarge-land/kbd_popup_template.xml
rename to java/res/xml-sw768dp-land/kbd_popup_template.xml
diff --git a/java/res/xml-sw768dp/kbd_key_styles.xml b/java/res/xml-sw768dp/kbd_key_styles.xml
new file mode 100644
index 000000000..5d8c081a6
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_key_styles.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_number.xml b/java/res/xml-sw768dp/kbd_number.xml
similarity index 61%
rename from java/res/xml-xlarge/kbd_number.xml
rename to java/res/xml-sw768dp/kbd_number.xml
index 7cb77ea00..1ae6984a5 100644
--- a/java/res/xml-xlarge/kbd_number.xml
+++ b/java/res/xml-sw768dp/kbd_number.xml
@@ -20,15 +20,7 @@
@@ -40,42 +32,42 @@
>
-
+ latin:keyStyle="tabKeyStyle"
+ latin:keyLabelOption="alignLeft"
+ latin:keyWidth="11.172%p"
+ latin:keyEdgeFlags="left" />
+
-
-
+ latin:keyStyle="num4KeyStyle"
+ latin:keyXPos="32.076%p" />
-
-
+ latin:keyStyle="num7KeyStyle"
+ latin:keyXPos="32.076%p" />
+ latin:keyXPos="32.076%p" />
-
+ latin:keyStyle="numLabelStyle"
+ latin:keyXPos="13.829%p"
+ latin:keyWidth="8.047%p" />
+ latin:keyStyle="numLabelStyle"
+ latin:keyWidth="8.047%p" />
-
+ latin:keyStyle="numLabelStyle"
+ latin:keyWidth="8.047%p" />
+ latin:keyLabel="7"
+ latin:keyXPos="43.125%p" />
-
-
+ latin:keyWidth="8.047%p" />
-
-
-
-
+ latin:keyXPos="13.829%p"
+ latin:keyWidth="24.140%p" />
+ latin:keyLabel="*"
+ latin:keyStyle="numLabelStyle"
+ latin:keyXPos="43.125%p" />
+ latin:keyLabel="#"
+ latin:keyStyle="numLabelStyle" />
+ latin:keyStyle="shortcutKeyStyle"
+ latin:keyXPos="-8.047%p"
+ latin:keyWidth="fillRight" />
-
diff --git a/java/res/xml-sw768dp/kbd_phone.xml b/java/res/xml-sw768dp/kbd_phone.xml
new file mode 100644
index 000000000..6801ac5cc
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_phone.xml
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw768dp/kbd_phone_symbols.xml b/java/res/xml-sw768dp/kbd_phone_symbols.xml
new file mode 100644
index 000000000..22f78b6d3
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_phone_symbols.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_popup_template.xml b/java/res/xml-sw768dp/kbd_popup_template.xml
similarity index 100%
rename from java/res/xml-xlarge/kbd_popup_template.xml
rename to java/res/xml-sw768dp/kbd_popup_template.xml
diff --git a/java/res/xml-xlarge/kbd_qwerty_row1.xml b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
similarity index 93%
rename from java/res/xml-xlarge/kbd_qwerty_row1.xml
rename to java/res/xml-sw768dp/kbd_qwerty_row1.xml
index f5135591c..3727cf34e 100644
--- a/java/res/xml-xlarge/kbd_qwerty_row1.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row1.xml
@@ -23,12 +23,12 @@
>
diff --git a/java/res/xml-xlarge/kbd_qwerty_row2.xml b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
similarity index 92%
rename from java/res/xml-xlarge/kbd_qwerty_row2.xml
rename to java/res/xml-sw768dp/kbd_qwerty_row2.xml
index 02bd0a6c9..45af120e2 100644
--- a/java/res/xml-xlarge/kbd_qwerty_row2.xml
+++ b/java/res/xml-sw768dp/kbd_qwerty_row2.xml
@@ -22,12 +22,12 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row3.xml b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
new file mode 100644
index 000000000..7297ea512
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_qwerty_row3.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw768dp/kbd_qwerty_row4.xml b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
new file mode 100644
index 000000000..00eabab9e
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_qwerty_row4.xml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw768dp/kbd_row3_right2.xml b/java/res/xml-sw768dp/kbd_row3_right2.xml
new file mode 100644
index 000000000..e90de8eec
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_row3_right2.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_ar_rows.xml b/java/res/xml-sw768dp/kbd_rows_arabic.xml
similarity index 90%
rename from java/res/xml-xlarge/kbd_ar_rows.xml
rename to java/res/xml-sw768dp/kbd_rows_arabic.xml
index e84aae6b5..c1810026b 100644
--- a/java/res/xml-xlarge/kbd_ar_rows.xml
+++ b/java/res/xml-sw768dp/kbd_rows_arabic.xml
@@ -27,12 +27,12 @@
@@ -61,16 +61,17 @@
latin:popupCharacters="ج,چ" />
@@ -100,15 +101,19 @@
latin:keyLabel="ط" />
+
-
diff --git a/java/res/xml-xlarge/kbd_azerty_rows.xml b/java/res/xml-sw768dp/kbd_rows_azerty.xml
similarity index 83%
rename from java/res/xml-xlarge/kbd_azerty_rows.xml
rename to java/res/xml-sw768dp/kbd_rows_azerty.xml
index 564f77629..3bcba0042 100644
--- a/java/res/xml-xlarge/kbd_azerty_rows.xml
+++ b/java/res/xml-sw768dp/kbd_rows_azerty.xml
@@ -24,12 +24,12 @@
@@ -53,16 +52,17 @@
latin:keyLabel="פ" />
@@ -89,15 +89,16 @@
latin:keyLabel="ף" />
-
diff --git a/java/res/xml-xlarge/kbd_qwerty_rows.xml b/java/res/xml-sw768dp/kbd_rows_qwerty.xml
similarity index 100%
rename from java/res/xml-xlarge/kbd_qwerty_rows.xml
rename to java/res/xml-sw768dp/kbd_rows_qwerty.xml
diff --git a/java/res/xml-xlarge/kbd_qwertz_rows.xml b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
similarity index 84%
rename from java/res/xml-xlarge/kbd_qwertz_rows.xml
rename to java/res/xml-sw768dp/kbd_rows_qwertz.xml
index 3e99f0511..8d5f1e6d4 100644
--- a/java/res/xml-xlarge/kbd_qwertz_rows.xml
+++ b/java/res/xml-sw768dp/kbd_rows_qwertz.xml
@@ -24,12 +24,12 @@
+ latin:keyLabel="й" />
+ latin:keyLabel="ц" />
+ latin:keyLabel="у" />
+ latin:keyLabel="к" />
+ latin:keyLabel="н" />
+ latin:keyLabel="г" />
+ latin:keyLabel="ш" />
+ latin:keyLabel="щ" />
+ latin:keyLabel="з" />
+
@@ -101,15 +93,16 @@
latin:keyLabel="э" />
@@ -124,21 +117,16 @@
+ latin:keyLabel="ь" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/java/res/xml-xlarge/kbd_sr_rows.xml b/java/res/xml-sw768dp/kbd_rows_serbian.xml
similarity index 60%
rename from java/res/xml-xlarge/kbd_sr_rows.xml
rename to java/res/xml-sw768dp/kbd_rows_serbian.xml
index be0058505..4997dabb9 100644
--- a/java/res/xml-xlarge/kbd_sr_rows.xml
+++ b/java/res/xml-sw768dp/kbd_rows_serbian.xml
@@ -25,57 +25,48 @@
latin:keyboardLayout="@xml/kbd_key_styles" />
+ latin:keyLabel="љ" />
+ latin:keyLabel="њ" />
+ latin:keyLabel="е" />
+ latin:keyLabel="р" />
+ latin:keyLabel="т" />
+ latin:keyLabel="з" />
+ latin:keyLabel="у" />
+ latin:keyLabel="и" />
+ latin:keyLabel="о" />
+ latin:keyLabel="п" />
+ latin:keyLabel="ђ" />
+
@@ -100,16 +91,17 @@
@@ -125,25 +117,12 @@
latin:keyLabel="н" />
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-sw768dp/kbd_symbols.xml b/java/res/xml-sw768dp/kbd_symbols.xml
new file mode 100644
index 000000000..0e6103ab9
--- /dev/null
+++ b/java/res/xml-sw768dp/kbd_symbols.xml
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_symbols_shift.xml b/java/res/xml-sw768dp/kbd_symbols_shift.xml
similarity index 80%
rename from java/res/xml-xlarge/kbd_symbols_shift.xml
rename to java/res/xml-sw768dp/kbd_symbols_shift.xml
index d7f5958b7..b36814104 100644
--- a/java/res/xml-xlarge/kbd_symbols_shift.xml
+++ b/java/res/xml-sw768dp/kbd_symbols_shift.xml
@@ -20,25 +20,17 @@
@@ -72,16 +64,17 @@
latin:keyLabel="Δ" />
@@ -148,34 +142,33 @@
latin:keyLabel="¿" />
-
+ latin:keyStyle="settingsKeyStyle"
+ latin:keyWidth="8.047%p" />
-
-
-
+ latin:keyXPos="31.250%p"
+ latin:keyWidth="37.500%p" />
+ latin:keyStyle="shortcutKeyStyle"
+ latin:keyXPos="-8.047%p"
+ latin:keyWidth="fillRight" />
diff --git a/java/res/xml-tr/kbd_qwerty.xml b/java/res/xml-tr/kbd_qwerty.xml
new file mode 100644
index 000000000..d2c38f60a
--- /dev/null
+++ b/java/res/xml-tr/kbd_qwerty.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/java/res/xml-xlarge/kbd_key_styles.xml b/java/res/xml-xlarge/kbd_key_styles.xml
deleted file mode 100644
index 57eaccbae..000000000
--- a/java/res/xml-xlarge/kbd_key_styles.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml-xlarge/kbd_numkey_styles.xml b/java/res/xml-xlarge/kbd_numkey_styles.xml
deleted file mode 100644
index e27db94c7..000000000
--- a/java/res/xml-xlarge/kbd_numkey_styles.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml-xlarge/kbd_phone.xml b/java/res/xml-xlarge/kbd_phone.xml
deleted file mode 100644
index 60edcf2bd..000000000
--- a/java/res/xml-xlarge/kbd_phone.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml-xlarge/kbd_phone_symbols.xml b/java/res/xml-xlarge/kbd_phone_symbols.xml
deleted file mode 100644
index c388a4667..000000000
--- a/java/res/xml-xlarge/kbd_phone_symbols.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml-xlarge/kbd_qwerty_row4.xml b/java/res/xml-xlarge/kbd_qwerty_row4.xml
deleted file mode 100644
index f36b61fc7..000000000
--- a/java/res/xml-xlarge/kbd_qwerty_row4.xml
+++ /dev/null
@@ -1,258 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml/kbd_currency_key_styles.xml b/java/res/xml/kbd_currency_key_styles.xml
index b30dd6451..9d3bb4725 100644
--- a/java/res/xml/kbd_currency_key_styles.xml
+++ b/java/res/xml/kbd_currency_key_styles.xml
@@ -27,229 +27,59 @@
>
+ latin:keyLabel="$" />
-
+ 1. Andorra (ca_AD, ca_ES)
+ 2. Austria (de_AT)
+ 3. Belgium (nl_BE, fr_BE, de_BE)
+ 4. Cyprus (el_CY, tr_CY)
+ 5. Estonia (et_EE)
+ 6. Finland (fi_FI, sv_FI)
+ 7. France (fr_FR)
+ 8. Germany (de_DE)
+ 9. Greece (el_GR)
+ 10. Ireland (ga_IE, en_IE)
+ 11. Italy (it_IT)
+ 12. Kosovo (??_XK) ??
+ 13. Luxembourg (lb_LU, fr_LU, de_LU)
+ 14. Malta (mt_MT, en_MT)
+ 15. Monaco (fr_MO)
+ 16. Montenegro (sla_ME)
+ 17. Netherlands (nl_NL)
+ 18. Portugal (pt_PT)
+ 19. San Marino (it_SM)
+ 20. Slovakia (sk_SK)
+ 21. Slovenia (sl_SI)
+ 22. Spain (es_ES, ca_ES)
+ 23. Vatican City (it_VA)
+ -->
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/java/res/xml/kbd_key_styles.xml b/java/res/xml/kbd_key_styles.xml
index d4d25d4a2..63d519c4c 100644
--- a/java/res/xml/kbd_key_styles.xml
+++ b/java/res/xml/kbd_key_styles.xml
@@ -22,188 +22,49 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
-
-
-
-
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+
diff --git a/java/res/xml/kbd_number.xml b/java/res/xml/kbd_number.xml
index 2556f6830..429b81846 100644
--- a/java/res/xml/kbd_number.xml
+++ b/java/res/xml/kbd_number.xml
@@ -20,95 +20,122 @@
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/java/res/xml/kbd_numkey_styles.xml b/java/res/xml/kbd_numkey_styles.xml
index 2f9ae325a..3a26a022b 100644
--- a/java/res/xml/kbd_numkey_styles.xml
+++ b/java/res/xml/kbd_numkey_styles.xml
@@ -21,130 +21,75 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml
index ca591c72d..794528c2b 100644
--- a/java/res/xml/kbd_phone.xml
+++ b/java/res/xml/kbd_phone.xml
@@ -20,15 +20,7 @@
@@ -46,8 +38,8 @@
latin:keyStyle="num3KeyStyle" />
@@ -60,8 +52,8 @@
latin:keyStyle="num6KeyStyle" />
@@ -74,14 +66,14 @@
latin:keyStyle="num9KeyStyle" />
@@ -89,7 +81,7 @@
latin:keyStyle="numSpaceKeyStyle" />
diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml
index 99db23ef1..1405c3c21 100644
--- a/java/res/xml/kbd_phone_symbols.xml
+++ b/java/res/xml/kbd_phone_symbols.xml
@@ -20,15 +20,7 @@
@@ -39,20 +31,24 @@
>
+ latin:keyLabel="/"
+ latin:keyStyle="numLabelStyle" />
+ latin:keyLabel=")"
+ latin:keyStyle="numLabelStyle" />
@@ -60,11 +56,12 @@
latin:code="44"
latin:keyLabel="Pause" />
+ latin:keyLabel=","
+ latin:keyStyle="numLabelStyle" />
@@ -76,26 +73,27 @@
latin:code="59"
latin:keyLabel="Wait" />
+ latin:keyLabel="#"
+ latin:keyStyle="numLabelStyle" />
+ latin:keyLabel="+"
+ latin:keyStyle="numLabelStyle" />
diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml
index fd43740a7..40917b921 100644
--- a/java/res/xml/kbd_qwerty.xml
+++ b/java/res/xml/kbd_qwerty.xml
@@ -20,17 +20,8 @@
+ latin:keyboardLayout="@xml/kbd_rows_qwerty" />
diff --git a/java/res/xml/kbd_qwerty_f1.xml b/java/res/xml/kbd_qwerty_f1.xml
index d0e2884e1..51b9800e0 100644
--- a/java/res/xml/kbd_qwerty_f1.xml
+++ b/java/res/xml/kbd_qwerty_f1.xml
@@ -23,39 +23,92 @@
>
-
-
-
-
-
-
+ latin:keyLabel="/"
+ latin:keyWidth="9.2%p"
+ latin:keyStyle="settingsPopupStyle" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_qwerty_row1.xml b/java/res/xml/kbd_qwerty_row1.xml
index d9249657e..8c3669de0 100644
--- a/java/res/xml/kbd_qwerty_row1.xml
+++ b/java/res/xml/kbd_qwerty_row1.xml
@@ -27,45 +27,46 @@
>
diff --git a/java/res/xml/kbd_qwerty_row2.xml b/java/res/xml/kbd_qwerty_row2.xml
index 9ed4553c4..57bbad75a 100644
--- a/java/res/xml/kbd_qwerty_row2.xml
+++ b/java/res/xml/kbd_qwerty_row2.xml
@@ -24,11 +24,10 @@
-
+
diff --git a/java/res/xml/kbd_qwerty_row3.xml b/java/res/xml/kbd_qwerty_row3.xml
index 3d106e615..98f0404c0 100644
--- a/java/res/xml/kbd_qwerty_row3.xml
+++ b/java/res/xml/kbd_qwerty_row3.xml
@@ -49,7 +49,7 @@
latin:keyLabel="m" />
diff --git a/java/res/xml/kbd_qwerty_row4.xml b/java/res/xml/kbd_qwerty_row4.xml
index 82f5a4a92..095133929 100644
--- a/java/res/xml/kbd_qwerty_row4.xml
+++ b/java/res/xml/kbd_qwerty_row4.xml
@@ -26,104 +26,90 @@
latin:rowEdgeFlags="bottom"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ latin:keyStyle="settingsKeyStyle"
+ latin:keyWidth="9.2%p" />
+ latin:keyWidth="35.83%p" />
-
+ latin:keyWidth="9.2%p"
+ latin:maxPopupKeyboardColumn="8" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_ar_rows.xml b/java/res/xml/kbd_rows_arabic.xml
similarity index 95%
rename from java/res/xml/kbd_ar_rows.xml
rename to java/res/xml/kbd_rows_arabic.xml
index b2ea45701..a548775a4 100644
--- a/java/res/xml/kbd_ar_rows.xml
+++ b/java/res/xml/kbd_rows_arabic.xml
@@ -53,6 +53,7 @@
diff --git a/java/res/xml/kbd_azerty_rows.xml b/java/res/xml/kbd_rows_azerty.xml
similarity index 87%
rename from java/res/xml/kbd_azerty_rows.xml
rename to java/res/xml/kbd_rows_azerty.xml
index e805d5b1b..9825c4a10 100644
--- a/java/res/xml/kbd_azerty_rows.xml
+++ b/java/res/xml/kbd_rows_azerty.xml
@@ -29,45 +29,46 @@
>
diff --git a/java/res/xml/kbd_iw_rows.xml b/java/res/xml/kbd_rows_hebrew.xml
similarity index 90%
rename from java/res/xml/kbd_iw_rows.xml
rename to java/res/xml/kbd_rows_hebrew.xml
index fb0c2a915..c3c8f7d3e 100644
--- a/java/res/xml/kbd_iw_rows.xml
+++ b/java/res/xml/kbd_rows_hebrew.xml
@@ -27,12 +27,12 @@
-
@@ -50,11 +50,13 @@
latin:keyLabel="פ" />
-
+
@@ -76,13 +78,15 @@
latin:keyLabel="ך" />
-
-
+
@@ -101,6 +105,7 @@
+
diff --git a/java/res/xml/kbd_qwerty_rows.xml b/java/res/xml/kbd_rows_qwerty.xml
similarity index 100%
rename from java/res/xml/kbd_qwerty_rows.xml
rename to java/res/xml/kbd_rows_qwerty.xml
diff --git a/java/res/xml/kbd_qwertz_rows.xml b/java/res/xml/kbd_rows_qwertz.xml
similarity index 83%
rename from java/res/xml/kbd_qwertz_rows.xml
rename to java/res/xml/kbd_rows_qwertz.xml
index bb41f067a..0d70b2637 100644
--- a/java/res/xml/kbd_qwertz_rows.xml
+++ b/java/res/xml/kbd_rows_qwertz.xml
@@ -29,45 +29,46 @@
>
diff --git a/java/res/xml/kbd_ru_rows.xml b/java/res/xml/kbd_rows_russian.xml
similarity index 83%
rename from java/res/xml/kbd_ru_rows.xml
rename to java/res/xml/kbd_rows_russian.xml
index fa2af3be0..ff9fef409 100644
--- a/java/res/xml/kbd_ru_rows.xml
+++ b/java/res/xml/kbd_rows_russian.xml
@@ -29,49 +29,49 @@
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml
index 0a8068991..8e9124f74 100644
--- a/java/res/xml/kbd_symbols.xml
+++ b/java/res/xml/kbd_symbols.xml
@@ -20,15 +20,7 @@
@@ -65,6 +57,7 @@
@@ -95,6 +88,7 @@
@@ -126,7 +120,7 @@
latin:popupCharacters="¿" />
diff --git a/java/res/xml/kbd_symbols_f1.xml b/java/res/xml/kbd_symbols_f1.xml
index 0fb7136b9..da5b5fc8d 100644
--- a/java/res/xml/kbd_symbols_f1.xml
+++ b/java/res/xml/kbd_symbols_f1.xml
@@ -23,16 +23,41 @@
>
-
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_symbols_row4.xml b/java/res/xml/kbd_symbols_row4.xml
index b330095af..9323d4fd1 100644
--- a/java/res/xml/kbd_symbols_row4.xml
+++ b/java/res/xml/kbd_symbols_row4.xml
@@ -22,81 +22,67 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ latin:keyStyle="settingsKeyStyle"
+ latin:keyWidth="9.2%p" />
+
+
+
+
+
+
+
+ latin:keyWidth="50%p" />
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml
index cde07333b..f22d45aff 100644
--- a/java/res/xml/kbd_symbols_shift.xml
+++ b/java/res/xml/kbd_symbols_shift.xml
@@ -20,15 +20,7 @@
@@ -63,6 +55,7 @@
latin:keyLabel="{" />
@@ -94,6 +87,7 @@
latin:keyLabel="[" />
@@ -125,7 +119,7 @@
latin:popupCharacters="≥,»,›" />
diff --git a/java/res/xml/kbd_symbols_shift_row4.xml b/java/res/xml/kbd_symbols_shift_row4.xml
index 4f8567d58..90a96e4bc 100644
--- a/java/res/xml/kbd_symbols_shift_row4.xml
+++ b/java/res/xml/kbd_symbols_shift_row4.xml
@@ -22,79 +22,66 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ latin:keyStyle="settingsKeyStyle"
+ latin:keyWidth="9.2%p" />
+
+
+
+
+
+
+
+ latin:keyWidth="50%p" />
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 31ba650f1..3b700b136 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -20,7 +20,7 @@
-
+
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index b0497a51c..5f4a27d91 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -138,6 +138,12 @@
+
language: en & country: US
// "en" --> language: en
// "" --> the system locale
- mLocaleSplitter.setString(inputLocaleStr);
- if (mLocaleSplitter.hasNext()) {
- String language = mLocaleSplitter.next();
- if (mLocaleSplitter.hasNext()) {
- mInputLocale = new Locale(language, mLocaleSplitter.next());
- } else {
- mInputLocale = new Locale(language);
- }
+ if (!TextUtils.isEmpty(inputLocaleStr)) {
+ mInputLocale = Utils.constructLocaleFromString(inputLocaleStr);
mInputLocaleStr = inputLocaleStr;
} else {
mInputLocale = mSystemLocale;
@@ -420,7 +413,7 @@ public class SubtypeSwitcher {
final KeyboardSwitcher switcher = KeyboardSwitcher.getInstance();
final LatinKeyboard keyboard = switcher.getLatinKeyboard();
if (keyboard != null) {
- keyboard.updateShortcutKey(isShortcutImeReady(), switcher.getInputView());
+ keyboard.updateShortcutKey(isShortcutImeReady(), switcher.getKeyboardView());
}
}
@@ -510,7 +503,7 @@ public class SubtypeSwitcher {
private void triggerVoiceIME() {
if (!mService.isInputViewShown()) return;
VoiceProxy.getInstance().startListening(false,
- KeyboardSwitcher.getInstance().getInputView().getWindowToken());
+ KeyboardSwitcher.getInstance().getKeyboardView().getWindowToken());
}
//////////////////////////////////////
@@ -549,12 +542,12 @@ public class SubtypeSwitcher {
|| mEnabledKeyboardSubtypesOfCurrentInputMethod.size() == 0) return;
mCurrentKeyboardSubtypeIndex = getCurrentIndex();
mNextKeyboardSubtype = getNextKeyboardSubtypeInternal(mCurrentKeyboardSubtypeIndex);
- Locale locale = new Locale(mNextKeyboardSubtype.getLocale());
- mNextLanguage = getDisplayLanguage(locale);
+ Locale locale = Utils.constructLocaleFromString(mNextKeyboardSubtype.getLocale());
+ mNextLanguage = getFullDisplayName(locale, true);
mPreviousKeyboardSubtype = getPreviousKeyboardSubtypeInternal(
mCurrentKeyboardSubtypeIndex);
- locale = new Locale(mPreviousKeyboardSubtype.getLocale());
- mPreviousLanguage = getDisplayLanguage(locale);
+ locale = Utils.constructLocaleFromString(mPreviousKeyboardSubtype.getLocale());
+ mPreviousLanguage = getFullDisplayName(locale, true);
}
private int normalize(int index) {
@@ -584,29 +577,30 @@ public class SubtypeSwitcher {
public static String getFullDisplayName(Locale locale, boolean returnsNameInThisLocale) {
if (returnsNameInThisLocale) {
- return toTitleCase(SubtypeLocale.getFullDisplayName(locale));
+ return toTitleCase(SubtypeLocale.getFullDisplayName(locale), locale);
} else {
- return toTitleCase(locale.getDisplayName());
+ return toTitleCase(locale.getDisplayName(), locale);
}
}
public static String getDisplayLanguage(Locale locale) {
- return toTitleCase(locale.getDisplayLanguage(locale));
+ return toTitleCase(SubtypeLocale.getFullDisplayName(locale), locale);
}
public static String getMiddleDisplayLanguage(Locale locale) {
- return toTitleCase((new Locale(locale.getLanguage()).getDisplayLanguage(locale)));
+ return toTitleCase((Utils.constructLocaleFromString(
+ locale.getLanguage()).getDisplayLanguage(locale)), locale);
}
public static String getShortDisplayLanguage(Locale locale) {
- return toTitleCase(locale.getLanguage());
+ return toTitleCase(locale.getLanguage(), locale);
}
- private static String toTitleCase(String s) {
+ private static String toTitleCase(String s, Locale locale) {
if (s.length() == 0) {
return s;
}
- return Character.toUpperCase(s.charAt(0)) + s.substring(1);
+ return s.toUpperCase(locale).charAt(0) + s.substring(1);
}
public String getInputLanguageName() {
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index ca75866c0..eb5ed5a65 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -84,7 +84,7 @@ public class Suggest implements Dictionary.WordCallback {
private final Map mUnigramDictionaries = new HashMap();
private final Map mBigramDictionaries = new HashMap();
- private int mPrefMaxSuggestions = 12;
+ private int mPrefMaxSuggestions = 18;
private static final int PREF_MAX_BIGRAMS = 60;
@@ -117,30 +117,31 @@ public class Suggest implements Dictionary.WordCallback {
}
private void init(Context context, Dictionary mainDict) {
- if (mainDict != null) {
- mMainDict = mainDict;
- mUnigramDictionaries.put(DICT_KEY_MAIN, mainDict);
- mBigramDictionaries.put(DICT_KEY_MAIN, mainDict);
- }
+ mMainDict = mainDict;
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, mainDict);
+ addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, mainDict);
mWhiteListDictionary = WhitelistDictionary.init(context);
- if (mWhiteListDictionary != null) {
- mUnigramDictionaries.put(DICT_KEY_WHITELIST, mWhiteListDictionary);
- }
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_WHITELIST, mWhiteListDictionary);
mAutoCorrection = new AutoCorrection();
initPool();
}
+ private void addOrReplaceDictionary(Map dictionaries, String key,
+ Dictionary dict) {
+ final Dictionary oldDict = (dict == null)
+ ? dictionaries.remove(key)
+ : dictionaries.put(key, dict);
+ if (oldDict != null && dict != oldDict) {
+ oldDict.close();
+ }
+ }
+
public void resetMainDict(Context context, int dictionaryResId, Locale locale) {
final Dictionary newMainDict = DictionaryFactory.createDictionaryFromManager(
context, locale, dictionaryResId);
mMainDict = newMainDict;
- if (null == newMainDict) {
- mUnigramDictionaries.remove(DICT_KEY_MAIN);
- mBigramDictionaries.remove(DICT_KEY_MAIN);
- } else {
- mUnigramDictionaries.put(DICT_KEY_MAIN, newMainDict);
- mBigramDictionaries.put(DICT_KEY_MAIN, newMainDict);
- }
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_MAIN, newMainDict);
+ addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_MAIN, newMainDict);
}
private void initPool() {
@@ -179,28 +180,25 @@ public class Suggest implements Dictionary.WordCallback {
* before the main dictionary, if set.
*/
public void setUserDictionary(Dictionary userDictionary) {
- if (userDictionary != null)
- mUnigramDictionaries.put(DICT_KEY_USER, userDictionary);
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_USER, userDictionary);
}
/**
- * Sets an optional contacts dictionary resource to be loaded.
+ * Sets an optional contacts dictionary resource to be loaded. It is also possible to remove
+ * the contacts dictionary by passing null to this method. In this case no contacts dictionary
+ * won't be used.
*/
public void setContactsDictionary(Dictionary contactsDictionary) {
- if (contactsDictionary != null) {
- mUnigramDictionaries.put(DICT_KEY_CONTACTS, contactsDictionary);
- mBigramDictionaries.put(DICT_KEY_CONTACTS, contactsDictionary);
- }
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_CONTACTS, contactsDictionary);
+ addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_CONTACTS, contactsDictionary);
}
public void setAutoDictionary(Dictionary autoDictionary) {
- if (autoDictionary != null)
- mUnigramDictionaries.put(DICT_KEY_AUTO, autoDictionary);
+ addOrReplaceDictionary(mUnigramDictionaries, DICT_KEY_AUTO, autoDictionary);
}
public void setUserBigramDictionary(Dictionary userBigramDictionary) {
- if (userBigramDictionary != null)
- mBigramDictionaries.put(DICT_KEY_USER_BIGRAM, userBigramDictionary);
+ addOrReplaceDictionary(mBigramDictionaries, DICT_KEY_USER_BIGRAM, userBigramDictionary);
}
public void setAutoCorrectionThreshold(double threshold) {
@@ -252,6 +250,7 @@ public class Suggest implements Dictionary.WordCallback {
poolSize > 0 ? (StringBuilder) mStringPool.remove(poolSize - 1)
: new StringBuilder(getApproxMaxWordLength());
sb.setLength(0);
+ // TODO: Must pay attention to locale when changing case.
if (all) {
sb.append(word.toString().toUpperCase());
} else if (first) {
@@ -317,6 +316,7 @@ public class Suggest implements Dictionary.WordCallback {
} else {
// Word entered: return only bigrams that match the first char of the typed word
final char currentChar = typedWord.charAt(0);
+ // TODO: Must pay attention to locale when changing case.
final char currentCharUpper = Character.toUpperCase(currentChar);
int count = 0;
final int bigramSuggestionSize = mBigramSuggestions.size();
@@ -520,6 +520,7 @@ public class Suggest implements Dictionary.WordCallback {
StringBuilder sb = poolSize > 0 ? (StringBuilder) mStringPool.remove(poolSize - 1)
: new StringBuilder(getApproxMaxWordLength());
sb.setLength(0);
+ // TODO: Must pay attention to locale when changing case.
if (mIsAllUpperCase) {
sb.append(new String(word, offset, length).toUpperCase());
} else if (mIsFirstCharCapitalized) {
diff --git a/java/src/com/android/inputmethod/latin/SuggestionSpanPickedNotificationReceiver.java b/java/src/com/android/inputmethod/latin/SuggestionSpanPickedNotificationReceiver.java
new file mode 100644
index 000000000..4a3f42d5d
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/SuggestionSpanPickedNotificationReceiver.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+package com.android.inputmethod.latin;
+
+import com.android.inputmethod.compat.SuggestionSpanUtils;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+public class SuggestionSpanPickedNotificationReceiver extends BroadcastReceiver {
+ private static final boolean DBG = LatinImeLogger.sDBG;
+ private static final String TAG =
+ SuggestionSpanPickedNotificationReceiver.class.getSimpleName();
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (SuggestionSpanUtils.ACTION_SUGGESTION_PICKED.equals(intent.getAction())) {
+ if (DBG) {
+ final String before = intent.getStringExtra(
+ SuggestionSpanUtils.SUGGESTION_SPAN_PICKED_BEFORE);
+ final String after = intent.getStringExtra(
+ SuggestionSpanUtils.SUGGESTION_SPAN_PICKED_AFTER);
+ Log.d(TAG, "Received notification picked: " + before + "," + after);
+ }
+ }
+ }
+}
diff --git a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
index a32a6461a..5b615ca29 100644
--- a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 Google Inc.
+ * Copyright (C) 2010 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
@@ -158,7 +158,7 @@ public class UserBigramDictionary extends ExpandableDictionary {
* Pair will be added to the userbigram database.
*/
public int addBigrams(String word1, String word2) {
- // remove caps
+ // remove caps if second word is autocapitalized
if (mIme != null && mIme.getCurrentWord().isAutoCapitalized()) {
word2 = Character.toLowerCase(word2.charAt(0)) + word2.substring(1);
}
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index 47890e643..245fc20bc 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
+import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
@@ -43,7 +44,10 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
import java.util.Locale;
public class Utils {
@@ -108,7 +112,34 @@ public class Utils {
}
public static boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManagerCompatWrapper imm) {
- return imm.getEnabledInputMethodList().size() > 1
+ final List enabledImis = imm.getEnabledInputMethodList();
+
+ // Filters out IMEs that have auxiliary subtypes only (including either implicitly or
+ // explicitly enabled ones).
+ final ArrayList filteredImis =
+ new ArrayList();
+
+ outerloop:
+ for (InputMethodInfoCompatWrapper imi : enabledImis) {
+ // We can return true immediately after we find two or more filtered IMEs.
+ if (filteredImis.size() > 1) return true;
+ final List subtypes =
+ imm.getEnabledInputMethodSubtypeList(imi, true);
+ // IMEs that have no subtypes should be included.
+ if (subtypes.isEmpty()) {
+ filteredImis.add(imi);
+ continue;
+ }
+ // IMEs that have one or more non-auxiliary subtypes should be included.
+ for (InputMethodSubtypeCompatWrapper subtype : subtypes) {
+ if (!subtype.isAuxiliary()) {
+ filteredImis.add(imi);
+ continue outerloop;
+ }
+ }
+ }
+
+ return filteredImis.size() > 1
// imm.getEnabledInputMethodSubtypeList(null, false) will return the current IME's enabled
// input method subtype (The current IME should be LatinIME.)
|| imm.getEnabledInputMethodSubtypeList(null, false).size() > 1;
@@ -537,8 +568,6 @@ public class Utils {
return KeyboardId.MODE_IM;
} else if (variation == InputType.TYPE_TEXT_VARIATION_FILTER) {
return KeyboardId.MODE_TEXT;
- } else if (variation == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) {
- return KeyboardId.MODE_WEB;
} else {
return KeyboardId.MODE_TEXT;
}
@@ -662,4 +691,28 @@ public class Utils {
res.updateConfiguration(conf, res.getDisplayMetrics());
return saveLocale;
}
+
+ private static final HashMap sLocaleCache = new HashMap();
+
+ public static Locale constructLocaleFromString(String localeStr) {
+ if (localeStr == null)
+ return null;
+ synchronized (sLocaleCache) {
+ if (sLocaleCache.containsKey(localeStr))
+ return sLocaleCache.get(localeStr);
+ Locale retval = null;
+ String[] localeParams = localeStr.split("_", 3);
+ if (localeParams.length == 1) {
+ retval = new Locale(localeParams[0]);
+ } else if (localeParams.length == 2) {
+ retval = new Locale(localeParams[0], localeParams[1]);
+ } else if (localeParams.length == 3) {
+ retval = new Locale(localeParams[0], localeParams[1], localeParams[2]);
+ }
+ if (retval != null) {
+ sLocaleCache.put(localeStr, retval);
+ }
+ return retval;
+ }
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
index 2389d4e3c..4377373d2 100644
--- a/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
+++ b/java/src/com/android/inputmethod/latin/WhitelistDictionary.java
@@ -39,6 +39,7 @@ public class WhitelistDictionary extends Dictionary {
public static WhitelistDictionary init(Context context) {
synchronized (sInstance) {
if (context != null) {
+ // Wordlist is initialized by the proper language in Suggestion.java#init
sInstance.initWordlist(
context.getResources().getStringArray(R.array.wordlist_whitelist));
} else {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SpellChecker.java b/java/src/com/android/inputmethod/latin/spellcheck/SpellChecker.java
new file mode 100644
index 000000000..63c6d69d7
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/spellcheck/SpellChecker.java
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ */
+
+package com.android.inputmethod.latin.spellcheck;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import com.android.inputmethod.compat.ArraysCompatUtils;
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.Dictionary.DataType;
+import com.android.inputmethod.latin.Dictionary.WordCallback;
+import com.android.inputmethod.latin.DictionaryFactory;
+import com.android.inputmethod.latin.Utils;
+import com.android.inputmethod.latin.WordComposer;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * Implements spell checking methods.
+ */
+public class SpellChecker {
+
+ public final Dictionary mDictionary;
+
+ public SpellChecker(final Context context, final Locale locale) {
+ final Resources resources = context.getResources();
+ final int fallbackResourceId = Utils.getMainDictionaryResourceId(resources);
+ mDictionary = DictionaryFactory.createDictionaryFromManager(context, locale,
+ fallbackResourceId);
+ }
+
+ // Note : this must be reentrant
+ /**
+ * Finds out whether a word is in the dictionary or not.
+ *
+ * @param text the sequence containing the word to check for.
+ * @param start the index of the first character of the word in text.
+ * @param end the index of the next-to-last character in text.
+ * @return true if the word is in the dictionary, false otherwise.
+ */
+ public boolean isCorrect(final CharSequence text, final int start, final int end) {
+ return mDictionary.isValidWord(text.subSequence(start, end));
+ }
+
+ private static class SuggestionsGatherer implements WordCallback {
+ private final int DEFAULT_SUGGESTION_LENGTH = 16;
+ private final List mSuggestions = new LinkedList();
+ private int[] mScores = new int[DEFAULT_SUGGESTION_LENGTH];
+ private int mLength = 0;
+
+ @Override
+ synchronized public boolean addWord(char[] word, int wordOffset, int wordLength, int score,
+ int dicTypeId, DataType dataType) {
+ if (mLength >= mScores.length) {
+ final int newLength = mScores.length * 2;
+ mScores = new int[newLength];
+ }
+ final int positionIndex = ArraysCompatUtils.binarySearch(mScores, 0, mLength, score);
+ // binarySearch returns the index if the element exists, and - - 1
+ // if it doesn't. See documentation for binarySearch.
+ final int insertionIndex = positionIndex >= 0 ? positionIndex : -positionIndex - 1;
+ System.arraycopy(mScores, insertionIndex, mScores, insertionIndex + 1,
+ mLength - insertionIndex);
+ mLength += 1;
+ mScores[insertionIndex] = score;
+ mSuggestions.add(insertionIndex, new String(word, wordOffset, wordLength));
+ return true;
+ }
+
+ public List getGatheredSuggestions() {
+ return mSuggestions;
+ }
+ }
+
+ // Note : this must be reentrant
+ /**
+ * Gets a list of suggestions for a specific string.
+ *
+ * This returns a list of possible corrections for the text passed as an
+ * arguments. It may split or group words, and even perform grammatical
+ * analysis.
+ *
+ * @param text the sequence containing the word to check for.
+ * @param start the index of the first character of the word in text.
+ * @param end the index of the next-to-last character in text.
+ * @return a list of possible suggestions to replace the text.
+ */
+ public List getSuggestions(final CharSequence text, final int start, final int end) {
+ final SuggestionsGatherer suggestionsGatherer = new SuggestionsGatherer();
+ final WordComposer composer = new WordComposer();
+ for (int i = start; i < end; ++i) {
+ int character = text.charAt(i);
+ composer.add(character, new int[] { character },
+ WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE);
+ }
+ mDictionary.getWords(composer, suggestionsGatherer);
+ return suggestionsGatherer.getGatheredSuggestions();
+ }
+}
diff --git a/native/Android.mk b/native/Android.mk
index 1d32deab4..54b24e42e 100644
--- a/native/Android.mk
+++ b/native/Android.mk
@@ -11,7 +11,7 @@ LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
LOCAL_SRC_FILES := \
jni/com_android_inputmethod_keyboard_ProximityInfo.cpp \
jni/com_android_inputmethod_latin_BinaryDictionary.cpp \
- jni/onload.cpp \
+ jni/jni_common.cpp \
src/bigram_dictionary.cpp \
src/char_utils.cpp \
src/dictionary.cpp \
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
index 3db89edf1..f3e2a7e60 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
@@ -19,28 +19,15 @@
#include "com_android_inputmethod_keyboard_ProximityInfo.h"
#include "jni.h"
+#include "jni_common.h"
#include "proximity_info.h"
#include
#include
#include
-// ----------------------------------------------------------------------------
-
namespace latinime {
-//
-// helper function to throw an exception
-//
-static void throwException(JNIEnv *env, const char* ex, const char* fmt, int data) {
- if (jclass cls = env->FindClass(ex)) {
- char msg[1000];
- snprintf(msg, sizeof(msg), fmt, data);
- env->ThrowNew(cls, msg);
- env->DeleteLocalRef(cls);
- }
-}
-
static jint latinime_Keyboard_setProximityInfo(JNIEnv *env, jobject object,
jint maxProximityCharsSize, jint displayWidth, jint displayHeight, jint gridWidth,
jint gridHeight, jintArray proximityCharsArray) {
@@ -57,34 +44,15 @@ static void latinime_Keyboard_release(JNIEnv *env, jobject object, jint proximit
delete pi;
}
-// ----------------------------------------------------------------------------
-
static JNINativeMethod sKeyboardMethods[] = {
{"setProximityInfoNative", "(IIIII[I)I", (void*)latinime_Keyboard_setProximityInfo},
{"releaseProximityInfoNative", "(I)V", (void*)latinime_Keyboard_release}
};
-static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods,
- int numMethods) {
- jclass clazz;
-
- clazz = env->FindClass(className);
- if (clazz == NULL) {
- LOGE("Native registration unable to find class '%s'", className);
- return JNI_FALSE;
- }
- if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
- LOGE("RegisterNatives failed for '%s'", className);
- return JNI_FALSE;
- }
-
- return JNI_TRUE;
-}
-
int register_ProximityInfo(JNIEnv *env) {
const char* const kClassPathName = "com/android/inputmethod/keyboard/ProximityInfo";
return registerNativeMethods(env, kClassPathName, sKeyboardMethods,
sizeof(sKeyboardMethods) / sizeof(sKeyboardMethods[0]));
}
-}; // namespace latinime
+} // namespace latinime
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
index bdeeb8f37..4a1e83b09 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
@@ -21,7 +21,9 @@
#include "jni.h"
namespace latinime {
+
int register_ProximityInfo(JNIEnv *env);
+
}
#endif // _COM_ANDROID_INPUTMETHOD_KEYBOARD_PROXIMITYINFO_H
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 555a522eb..ce874d8d4 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -20,6 +20,7 @@
#include "com_android_inputmethod_latin_BinaryDictionary.h"
#include "dictionary.h"
#include "jni.h"
+#include "jni_common.h"
#include "proximity_info.h"
#include
@@ -35,22 +36,8 @@
#include
#endif // USE_MMAP_FOR_DICTIONARY
-// ----------------------------------------------------------------------------
-
namespace latinime {
-//
-// helper function to throw an exception
-//
-static void throwException(JNIEnv *env, const char* ex, const char* fmt, int data) {
- if (jclass cls = env->FindClass(ex)) {
- char msg[1000];
- snprintf(msg, sizeof(msg), fmt, data);
- env->ThrowNew(cls, msg);
- env->DeleteLocalRef(cls);
- }
-}
-
static jint latinime_BinaryDictionary_open(JNIEnv *env, jobject object,
jstring sourceDir, jlong dictOffset, jlong dictSize,
jint typedLetterMultiplier, jint fullWordMultiplier, jint maxWordLength, jint maxWords,
@@ -131,7 +118,6 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jobject object,
Dictionary *dictionary = (Dictionary*)dict;
if (!dictionary) return 0;
ProximityInfo *pInfo = (ProximityInfo*)proximityInfo;
- if (!pInfo) return 0;
int *xCoordinates = env->GetIntArrayElements(xCoordinatesArray, NULL);
int *yCoordinates = env->GetIntArrayElements(yCoordinatesArray, NULL);
@@ -209,8 +195,6 @@ static void latinime_BinaryDictionary_close(JNIEnv *env, jobject object, jint di
delete dictionary;
}
-// ----------------------------------------------------------------------------
-
static JNINativeMethod sMethods[] = {
{"openNative", "(Ljava/lang/String;JJIIIII)I", (void*)latinime_BinaryDictionary_open},
{"closeNative", "(I)V", (void*)latinime_BinaryDictionary_close},
@@ -219,27 +203,10 @@ static JNINativeMethod sMethods[] = {
{"getBigramsNative", "(I[CI[II[C[IIII)I", (void*)latinime_BinaryDictionary_getBigrams}
};
-static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods,
- int numMethods) {
- jclass clazz;
-
- clazz = env->FindClass(className);
- if (clazz == NULL) {
- LOGE("Native registration unable to find class '%s'", className);
- return JNI_FALSE;
- }
- if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
- LOGE("RegisterNatives failed for '%s'", className);
- return JNI_FALSE;
- }
-
- return JNI_TRUE;
-}
-
int register_BinaryDictionary(JNIEnv *env) {
const char* const kClassPathName = "com/android/inputmethod/latin/BinaryDictionary";
return registerNativeMethods(env, kClassPathName, sMethods,
sizeof(sMethods) / sizeof(sMethods[0]));
}
-}; // namespace latinime
+} // namespace latinime
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.h b/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
index f7cd81fa7..1b1ba7f0f 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
@@ -21,7 +21,9 @@
#include "jni.h"
namespace latinime {
+
int register_BinaryDictionary(JNIEnv *env);
+
}
#endif // _COM_ANDROID_INPUTMETHOD_LATIN_BINARYDICTIONARY_H
diff --git a/native/jni/onload.cpp b/native/jni/jni_common.cpp
similarity index 73%
rename from native/jni/onload.cpp
rename to native/jni/jni_common.cpp
index f02c9a052..8643f723f 100644
--- a/native/jni/onload.cpp
+++ b/native/jni/jni_common.cpp
@@ -26,11 +26,8 @@
#include
#include
-// ----------------------------------------------------------------------------
-
using namespace latinime;
-
/*
* Returns the JNI version on success, -1 on failure.
*/
@@ -60,3 +57,23 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) {
bail:
return result;
}
+
+namespace latinime {
+
+int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* methods,
+ int numMethods) {
+ jclass clazz = env->FindClass(className);
+ if (clazz == NULL) {
+ LOGE("Native registration unable to find class '%s'", className);
+ return JNI_FALSE;
+ }
+ if (env->RegisterNatives(clazz, methods, numMethods) < 0) {
+ LOGE("RegisterNatives failed for '%s'", className);
+ env->DeleteLocalRef(clazz);
+ return JNI_FALSE;
+ }
+ env->DeleteLocalRef(clazz);
+ return JNI_TRUE;
+}
+
+} // namespace latinime
diff --git a/native/jni/jni_common.h b/native/jni/jni_common.h
new file mode 100644
index 000000000..c502fa3a8
--- /dev/null
+++ b/native/jni/jni_common.h
@@ -0,0 +1,30 @@
+/*
+**
+** Copyright 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.
+*/
+
+#ifndef LATINIME_JNI_COMMON_H
+#define LATINIME_JNI_COMMON_H
+
+#include "jni.h"
+
+namespace latinime {
+
+int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* methods,
+ int numMethods);
+
+} // namespace latinime
+
+#endif // LATINIME_JNI_COMMON_H
diff --git a/native/src/bigram_dictionary.cpp b/native/src/bigram_dictionary.cpp
index 36761b88d..11e6dc250 100644
--- a/native/src/bigram_dictionary.cpp
+++ b/native/src/bigram_dictionary.cpp
@@ -111,8 +111,7 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
mMaxBigrams = maxBigrams;
if (HAS_BIGRAM && IS_LATEST_DICT_VERSION) {
- int pos = mParentDictionary->isValidWordRec(
- DICTIONARY_HEADER_SIZE, prevWord, 0, prevWordLength);
+ int pos = mParentDictionary->getBigramPosition(prevWord, prevWordLength);
if (DEBUG_DICT) {
LOGI("Pos -> %d", pos);
}
diff --git a/native/src/bigram_dictionary.h b/native/src/bigram_dictionary.h
index d658b93e6..c07458a38 100644
--- a/native/src/bigram_dictionary.h
+++ b/native/src/bigram_dictionary.h
@@ -50,6 +50,7 @@ private:
int *mInputCodes;
int mInputLength;
};
-// ----------------------------------------------------------------------------
-}; // namespace latinime
+
+} // namespace latinime
+
#endif // LATINIME_BIGRAM_DICTIONARY_H
diff --git a/native/src/char_utils.h b/native/src/char_utils.h
index 921ecb4a5..a69a35e7a 100644
--- a/native/src/char_utils.h
+++ b/native/src/char_utils.h
@@ -21,6 +21,6 @@ namespace latinime {
unsigned short latin_tolower(unsigned short c);
-}; // namespace latinime
+} // namespace latinime
#endif // LATINIME_CHAR_UTILS_H
diff --git a/native/src/debug.h b/native/src/debug.h
index ae629b222..38b2f107a 100644
--- a/native/src/debug.h
+++ b/native/src/debug.h
@@ -28,6 +28,7 @@ static inline unsigned char* convertToUnibyteString(unsigned short* input, unsig
output[i] = 0;
return output;
}
+
static inline unsigned char* convertToUnibyteStringAndReplaceLastChar(unsigned short* input,
unsigned char* output, const unsigned int length, unsigned char c) {
int i = 0;
@@ -37,6 +38,7 @@ static inline unsigned char* convertToUnibyteStringAndReplaceLastChar(unsigned s
output[i] = 0;
return output;
}
+
static inline void LOGI_S16(unsigned short* string, const unsigned int length) {
unsigned char tmp_buffer[length];
convertToUnibyteString(string, tmp_buffer, length);
@@ -46,6 +48,7 @@ static inline void LOGI_S16(unsigned short* string, const unsigned int length) {
// TODO : refactor this in a blocking log or something.
// usleep(10);
}
+
static inline void LOGI_S16_PLUS(unsigned short* string, const unsigned int length,
unsigned char c) {
unsigned char tmp_buffer[length+1];
diff --git a/native/src/defines.h b/native/src/defines.h
index bdab19ff7..0a3240507 100644
--- a/native/src/defines.h
+++ b/native/src/defines.h
@@ -140,7 +140,7 @@ static void prof_out(void) {
// The following "rate"s are used as a multiplier before dividing by 100, so they are in percent.
#define WORDS_WITH_MISSING_CHARACTER_DEMOTION_RATE 80
#define WORDS_WITH_MISSING_CHARACTER_DEMOTION_START_POS_10X 12
-#define WORDS_WITH_MISSING_SPACE_CHARACTER_DEMOTION_RATE 80
+#define WORDS_WITH_MISSING_SPACE_CHARACTER_DEMOTION_RATE 67
#define WORDS_WITH_EXCESSIVE_CHARACTER_DEMOTION_RATE 75
#define WORDS_WITH_EXCESSIVE_CHARACTER_OUT_OF_PROXIMITY_DEMOTION_RATE 75
#define WORDS_WITH_TRANSPOSED_CHARACTERS_DEMOTION_RATE 60
diff --git a/native/src/dictionary.cpp b/native/src/dictionary.cpp
index d69cb2a53..9e32ee80f 100644
--- a/native/src/dictionary.cpp
+++ b/native/src/dictionary.cpp
@@ -53,45 +53,16 @@ bool Dictionary::hasBigram() {
return ((mDict[1] & 0xFF) == 1);
}
-// TODO: use uint16_t instead of unsigned short
bool Dictionary::isValidWord(unsigned short *word, int length) {
+ return mUnigramDictionary->isValidWord(word, length);
+}
+
+int Dictionary::getBigramPosition(unsigned short *word, int length) {
if (IS_LATEST_DICT_VERSION) {
- return (isValidWordRec(DICTIONARY_HEADER_SIZE, word, 0, length) != NOT_VALID_WORD);
+ return mUnigramDictionary->getBigramPosition(DICTIONARY_HEADER_SIZE, word, 0, length);
} else {
- return (isValidWordRec(0, word, 0, length) != NOT_VALID_WORD);
+ return mUnigramDictionary->getBigramPosition(0, word, 0, length);
}
}
-int Dictionary::isValidWordRec(int pos, unsigned short *word, int offset, int length) {
- // returns address of bigram data of that word
- // return -99 if not found
-
- int count = Dictionary::getCount(mDict, &pos);
- unsigned short currentChar = (unsigned short) word[offset];
- for (int j = 0; j < count; j++) {
- unsigned short c = Dictionary::getChar(mDict, &pos);
- int terminal = Dictionary::getTerminal(mDict, &pos);
- int childPos = Dictionary::getAddress(mDict, &pos);
- if (c == currentChar) {
- if (offset == length - 1) {
- if (terminal) {
- return (pos+1);
- }
- } else {
- if (childPos != 0) {
- int t = isValidWordRec(childPos, word, offset + 1, length);
- if (t > 0) {
- return t;
- }
- }
- }
- }
- if (terminal) {
- Dictionary::getFreq(mDict, IS_LATEST_DICT_VERSION, &pos);
- }
- // There could be two instances of each alphabet - upper and lower case. So continue
- // looking ...
- }
- return NOT_VALID_WORD;
-}
} // namespace latinime
diff --git a/native/src/dictionary.h b/native/src/dictionary.h
index 13b2a2816..3dc577a56 100644
--- a/native/src/dictionary.h
+++ b/native/src/dictionary.h
@@ -43,7 +43,6 @@ public:
}
bool isValidWord(unsigned short *word, int length);
- int isValidWordRec(int pos, unsigned short *word, int offset, int length);
void *getDict() { return (void *)mDict; }
int getDictSize() { return mDictSize; }
int getMmapFd() { return mMmapFd; }
@@ -63,6 +62,9 @@ public:
const int pos, unsigned short *c, int *childrenPosition,
bool *terminal, int *freq);
+ // TODO: delete this
+ int getBigramPosition(unsigned short *word, int length);
+
private:
bool hasBigram();
@@ -79,7 +81,6 @@ private:
BigramDictionary *mBigramDictionary;
};
-// ----------------------------------------------------------------------------
// public static utility methods
// static inline methods should be defined in the header file
inline unsigned short Dictionary::getChar(const unsigned char *dict, int *pos) {
@@ -132,7 +133,6 @@ inline int Dictionary::getFreq(const unsigned char *dict,
return freq;
}
-
inline int Dictionary::wideStrLen(unsigned short *str) {
if (!str) return 0;
unsigned short *end = str;
@@ -156,5 +156,6 @@ inline int Dictionary::setDictionaryValues(const unsigned char *dict,
return position;
}
-}; // namespace latinime
+} // namespace latinime
+
#endif // LATINIME_DICTIONARY_H
diff --git a/native/src/proximity_info.cpp b/native/src/proximity_info.cpp
index 102123c3c..209c31e6e 100644
--- a/native/src/proximity_info.cpp
+++ b/native/src/proximity_info.cpp
@@ -22,6 +22,7 @@
#include "proximity_info.h"
namespace latinime {
+
ProximityInfo::ProximityInfo(const int maxProximityCharsSize, const int keyboardWidth,
const int keyboardHeight, const int gridWidth, const int gridHeight,
const uint32_t *proximityCharsArray)
@@ -61,4 +62,5 @@ bool ProximityInfo::hasSpaceProximity(const int x, const int y) const {
}
return false;
}
-} // namespace latinime
+
+} // namespace latinime
diff --git a/native/src/proximity_info.h b/native/src/proximity_info.h
index c2062e8c5..327cd0940 100644
--- a/native/src/proximity_info.h
+++ b/native/src/proximity_info.h
@@ -41,5 +41,7 @@ private:
const int CELL_HEIGHT;
uint32_t *mProximityCharsArray;
};
-}; // namespace latinime
+
+} // namespace latinime
+
#endif // LATINIME_PROXIMITY_INFO_H
diff --git a/native/src/unigram_dictionary.cpp b/native/src/unigram_dictionary.cpp
index 20a185219..e3296f12a 100644
--- a/native/src/unigram_dictionary.cpp
+++ b/native/src/unigram_dictionary.cpp
@@ -16,8 +16,6 @@
*/
#include
-#include
-#include
#include
#define LOG_TAG "LatinIME: unigram_dictionary.cpp"
@@ -34,10 +32,12 @@ const UnigramDictionary::digraph_t UnigramDictionary::GERMAN_UMLAUT_DIGRAPHS[] =
{ 'o', 'e' },
{ 'u', 'e' } };
-UnigramDictionary::UnigramDictionary(const unsigned char *dict, int typedLetterMultiplier,
+// TODO: check the header
+UnigramDictionary::UnigramDictionary(const uint8_t* const streamStart, int typedLetterMultiplier,
int fullWordMultiplier, int maxWordLength, int maxWords, int maxProximityChars,
const bool isLatestDictVersion)
- : DICT(dict), MAX_WORD_LENGTH(maxWordLength), MAX_WORDS(maxWords),
+ : DICT_ROOT(streamStart),
+ MAX_WORD_LENGTH(maxWordLength), MAX_WORDS(maxWords),
MAX_PROXIMITY_CHARS(maxProximityChars), IS_LATEST_DICT_VERSION(isLatestDictVersion),
TYPED_LETTER_MULTIPLIER(typedLetterMultiplier), FULL_WORD_MULTIPLIER(fullWordMultiplier),
ROOT_POS(isLatestDictVersion ? DICTIONARY_HEADER_SIZE : 0),
@@ -233,7 +233,7 @@ void UnigramDictionary::getWordSuggestions(const ProximityInfo *proximityInfo,
PROF_END(5);
PROF_START(6);
- if (SUGGEST_WORDS_WITH_SPACE_PROXIMITY) {
+ if (SUGGEST_WORDS_WITH_SPACE_PROXIMITY && proximityInfo) {
// The first and last "mistyped spaces" are taken care of by excessive character handling
for (int i = 1; i < codesSize - 1; ++i) {
if (DEBUG_DICT) {
@@ -265,14 +265,14 @@ void UnigramDictionary::initSuggestions(const int *codes, const int codesSize,
mMaxEditDistance = mInputLength < 5 ? 2 : mInputLength / 2;
}
-void UnigramDictionary::registerNextLetter(
- unsigned short c, int *nextLetters, int nextLettersSize) {
+static inline void registerNextLetter(unsigned short c, int *nextLetters, int nextLettersSize) {
if (c < nextLettersSize) {
nextLetters[c]++;
}
}
// TODO: We need to optimize addWord by using STL or something
+// TODO: This needs to take an const unsigned short* and not tinker with its contents
bool UnigramDictionary::addWord(unsigned short *word, int length, int frequency) {
word[length] = 0;
if (DEBUG_DICT && DEBUG_SHOW_FOUND_WORD) {
@@ -290,8 +290,8 @@ bool UnigramDictionary::addWord(unsigned short *word, int length, int frequency)
// Find the right insertion point
int insertAt = 0;
while (insertAt < MAX_WORDS) {
- if (frequency > mFrequencies[insertAt] || (mFrequencies[insertAt] == frequency
- && length < Dictionary::wideStrLen(mOutputChars + insertAt * MAX_WORD_LENGTH))) {
+ // TODO: How should we sort words with the same frequency?
+ if (frequency > mFrequencies[insertAt]) {
break;
}
insertAt++;
@@ -322,7 +322,17 @@ bool UnigramDictionary::addWord(unsigned short *word, int length, int frequency)
return false;
}
-unsigned short UnigramDictionary::toBaseLowerCase(unsigned short c) {
+inline void UnigramDictionary::addWordAlternatesSpellings(const uint8_t* const root, int pos,
+ int depth, int finalFreq) {
+ // TODO: actually add alternates when the format supports it.
+}
+
+static inline bool hasAlternateSpellings(uint8_t flags) {
+ // TODO: when the format supports it, return the actual value.
+ return false;
+}
+
+static inline unsigned short toBaseLowerCase(unsigned short c) {
if (c < sizeof(BASE_CHARS) / sizeof(BASE_CHARS[0])) {
c = BASE_CHARS[c];
}
@@ -334,7 +344,7 @@ unsigned short UnigramDictionary::toBaseLowerCase(unsigned short c) {
return c;
}
-bool UnigramDictionary::sameAsTyped(unsigned short *word, int length) {
+bool UnigramDictionary::sameAsTyped(const unsigned short *word, int length) const {
if (length != mInputLength) {
return false;
}
@@ -363,7 +373,7 @@ void UnigramDictionary::getSuggestionCandidates(const int skipPos,
}
int rootPosition = ROOT_POS;
// Get the number of child of root, then increment the position
- int childCount = Dictionary::getCount(DICT, &rootPosition);
+ int childCount = Dictionary::getCount(DICT_ROOT, &rootPosition);
int depth = 0;
mStackChildCount[0] = childCount;
@@ -372,6 +382,7 @@ void UnigramDictionary::getSuggestionCandidates(const int skipPos,
mStackInputIndex[0] = 0;
mStackDiffs[0] = 0;
mStackSiblingPos[0] = rootPosition;
+ mStackOutputIndex[0] = 0;
// Depth first search
while (depth >= 0) {
@@ -382,14 +393,15 @@ void UnigramDictionary::getSuggestionCandidates(const int skipPos,
int inputIndex = mStackInputIndex[depth];
int diffs = mStackDiffs[depth];
int siblingPos = mStackSiblingPos[depth];
+ int outputIndex = mStackOutputIndex[depth];
int firstChildPos;
// depth will never be greater than maxDepth because in that case,
// needsToTraverseChildrenNodes should be false
- const bool needsToTraverseChildrenNodes = processCurrentNode(siblingPos, depth,
+ const bool needsToTraverseChildrenNodes = processCurrentNode(siblingPos, outputIndex,
maxDepth, traverseAllNodes, matchWeight, inputIndex, diffs, skipPos,
excessivePos, transposedPos, nextLetters, nextLettersSize, &childCount,
&firstChildPos, &traverseAllNodes, &matchWeight, &inputIndex, &diffs,
- &siblingPos);
+ &siblingPos, &outputIndex);
// Update next sibling pos
mStackSiblingPos[depth] = siblingPos;
if (needsToTraverseChildrenNodes) {
@@ -401,6 +413,7 @@ void UnigramDictionary::getSuggestionCandidates(const int skipPos,
mStackInputIndex[depth] = inputIndex;
mStackDiffs[depth] = diffs;
mStackSiblingPos[depth] = firstChildPos;
+ mStackOutputIndex[depth] = outputIndex;
}
} else {
// Goes to parent sibling node
@@ -451,8 +464,8 @@ inline static void multiplyRate(const int rate, int *freq) {
}
inline static int calcFreqForSplitTwoWords(
- const int typedLetterMultiplier, const int firstWordLength,
- const int secondWordLength, const int firstFreq, const int secondFreq) {
+ const int typedLetterMultiplier, const int firstWordLength, const int secondWordLength,
+ const int firstFreq, const int secondFreq, const bool isSpaceProximity) {
if (firstWordLength == 0 || secondWordLength == 0) {
return 0;
}
@@ -492,102 +505,28 @@ inline static int calcFreqForSplitTwoWords(
const int normalizedScoreDemotionRateOffset = (100 + 100 / totalLength);
multiplyRate(normalizedScoreDemotionRateOffset, &totalFreq);
+ if (isSpaceProximity) {
+ // A word pair with one space proximity correction
+ if (DEBUG_DICT) {
+ LOGI("Found a word pair with space proximity correction.");
+ }
+ multiplyIntCapped(typedLetterMultiplier, &totalFreq);
+ multiplyRate(WORDS_WITH_PROXIMITY_CHARACTER_DEMOTION_RATE, &totalFreq);
+ }
+
multiplyRate(WORDS_WITH_MISSING_SPACE_CHARACTER_DEMOTION_RATE, &totalFreq);
return totalFreq;
}
-bool UnigramDictionary::getSplitTwoWordsSuggestion(const int inputLength,
- const int firstWordStartPos, const int firstWordLength, const int secondWordStartPos,
- const int secondWordLength) {
- if (inputLength >= MAX_WORD_LENGTH) return false;
- if (0 >= firstWordLength || 0 >= secondWordLength || firstWordStartPos >= secondWordStartPos
- || firstWordStartPos < 0 || secondWordStartPos + secondWordLength > inputLength)
- return false;
- const int newWordLength = firstWordLength + secondWordLength + 1;
- // Allocating variable length array on stack
- unsigned short word[newWordLength];
- const int firstFreq = getBestWordFreq(firstWordStartPos, firstWordLength, mWord);
- if (DEBUG_DICT) {
- LOGI("First freq: %d", firstFreq);
- }
- if (firstFreq <= 0) return false;
-
- for (int i = 0; i < firstWordLength; ++i) {
- word[i] = mWord[i];
- }
-
- const int secondFreq = getBestWordFreq(secondWordStartPos, secondWordLength, mWord);
- if (DEBUG_DICT) {
- LOGI("Second freq: %d", secondFreq);
- }
- if (secondFreq <= 0) return false;
-
- word[firstWordLength] = SPACE;
- for (int i = (firstWordLength + 1); i < newWordLength; ++i) {
- word[i] = mWord[i - firstWordLength - 1];
- }
-
- int pairFreq = calcFreqForSplitTwoWords(
- TYPED_LETTER_MULTIPLIER, firstWordLength, secondWordLength, firstFreq, secondFreq);
- if (DEBUG_DICT) {
- LOGI("Split two words: %d, %d, %d, %d, %d", firstFreq, secondFreq, pairFreq, inputLength,
- TYPED_LETTER_MULTIPLIER);
- }
- addWord(word, newWordLength, pairFreq);
- return true;
-}
-
bool UnigramDictionary::getMissingSpaceWords(const int inputLength, const int missingSpacePos) {
return getSplitTwoWordsSuggestion(
- inputLength, 0, missingSpacePos, missingSpacePos, inputLength - missingSpacePos);
+ inputLength, 0, missingSpacePos, missingSpacePos, inputLength - missingSpacePos, false);
}
bool UnigramDictionary::getMistypedSpaceWords(const int inputLength, const int spaceProximityPos) {
return getSplitTwoWordsSuggestion(
inputLength, 0, spaceProximityPos, spaceProximityPos + 1,
- inputLength - spaceProximityPos - 1);
-}
-
-// Keep this for comparing spec to new getWords
-void UnigramDictionary::getWordsOld(const int initialPos, const int inputLength, const int skipPos,
- const int excessivePos, const int transposedPos,int *nextLetters,
- const int nextLettersSize) {
- int initialPosition = initialPos;
- const int count = Dictionary::getCount(DICT, &initialPosition);
- getWordsRec(count, initialPosition, 0,
- min(inputLength * MAX_DEPTH_MULTIPLIER, MAX_WORD_LENGTH),
- mInputLength <= 0, 1, 0, 0, skipPos, excessivePos, transposedPos, nextLetters,
- nextLettersSize);
-}
-
-void UnigramDictionary::getWordsRec(const int childrenCount, const int pos, const int depth,
- const int maxDepth, const bool traverseAllNodes, const int matchWeight,
- const int inputIndex, const int diffs, const int skipPos, const int excessivePos,
- const int transposedPos, int *nextLetters, const int nextLettersSize) {
- int siblingPos = pos;
- for (int i = 0; i < childrenCount; ++i) {
- int newCount;
- int newChildPosition;
- const int newDepth = depth + 1;
- bool newTraverseAllNodes;
- int newMatchRate;
- int newInputIndex;
- int newDiffs;
- int newSiblingPos;
- const bool needsToTraverseChildrenNodes = processCurrentNode(siblingPos, depth, maxDepth,
- traverseAllNodes, matchWeight, inputIndex, diffs,
- skipPos, excessivePos, transposedPos,
- nextLetters, nextLettersSize,
- &newCount, &newChildPosition, &newTraverseAllNodes, &newMatchRate,
- &newInputIndex, &newDiffs, &newSiblingPos);
- siblingPos = newSiblingPos;
-
- if (needsToTraverseChildrenNodes) {
- getWordsRec(newCount, newChildPosition, newDepth, maxDepth, newTraverseAllNodes,
- newMatchRate, newInputIndex, newDiffs, skipPos, excessivePos, transposedPos,
- nextLetters, nextLettersSize);
- }
- }
+ inputLength - spaceProximityPos - 1, true);
}
inline int UnigramDictionary::calculateFinalFreq(const int inputIndex, const int depth,
@@ -645,28 +584,6 @@ inline int UnigramDictionary::calculateFinalFreq(const int inputIndex, const int
return finalFreq;
}
-inline void UnigramDictionary::onTerminalWhenUserTypedLengthIsGreaterThanInputLength(
- unsigned short *word, const int inputIndex, const int depth, const int matchWeight,
- int *nextLetters, const int nextLettersSize, const int skipPos, const int excessivePos,
- const int transposedPos, const int freq) {
- const int finalFreq = calculateFinalFreq(inputIndex, depth, matchWeight, skipPos, excessivePos,
- transposedPos, freq, false);
- if (depth >= MIN_SUGGEST_DEPTH) addWord(word, depth + 1, finalFreq);
- if (depth >= mInputLength && skipPos < 0) {
- registerNextLetter(mWord[mInputLength], nextLetters, nextLettersSize);
- }
-}
-
-inline void UnigramDictionary::onTerminalWhenUserTypedLengthIsSameAsInputLength(
- unsigned short *word, const int inputIndex, const int depth, const int matchWeight,
- const int skipPos, const int excessivePos, const int transposedPos, const int freq) {
- if (sameAsTyped(word, depth + 1)) return;
- const int finalFreq = calculateFinalFreq(inputIndex, depth, matchWeight, skipPos,
- excessivePos, transposedPos, freq, true);
- // Proximity collection will promote a word of the same length as what user typed.
- if (depth >= MIN_SUGGEST_DEPTH) addWord(word, depth + 1, finalFreq);
-}
-
inline bool UnigramDictionary::needsToSkipCurrentNode(const unsigned short c,
const int inputIndex, const int skipPos, const int depth) {
const unsigned short userTypedChar = getInputCharsAt(inputIndex)[0];
@@ -697,7 +614,6 @@ inline bool UnigramDictionary::existsAdjacentProximityChars(const int inputIndex
return false;
}
-
// In the following function, c is the current character of the dictionary word
// currently examined.
// currentChars is an array containing the keys close to the character the
@@ -740,96 +656,79 @@ inline UnigramDictionary::ProximityType UnigramDictionary::getMatchedProximityId
return UNRELATED_CHAR;
}
-inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth,
- const int maxDepth, const bool traverseAllNodes, int matchWeight, int inputIndex,
- const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
- int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
- bool *newTraverseAllNodes, int *newMatchRate, int *newInputIndex, int *newDiffs,
- int *nextSiblingPosition) {
- if (DEBUG_DICT) {
- int inputCount = 0;
- if (skipPos >= 0) ++inputCount;
- if (excessivePos >= 0) ++inputCount;
- if (transposedPos >= 0) ++inputCount;
- assert(inputCount <= 1);
- }
- unsigned short c;
- int childPosition;
- bool terminal;
- int freq;
- bool isSameAsUserTypedLength = false;
+inline void UnigramDictionary::onTerminal(unsigned short int* word, const int depth,
+ const uint8_t* const root, const uint8_t flags, int pos,
+ const int inputIndex, const int matchWeight, const int skipPos,
+ const int excessivePos, const int transposedPos, const int freq, const bool sameLength,
+ int* nextLetters, const int nextLettersSize) {
- if (excessivePos == depth && inputIndex < mInputLength - 1) ++inputIndex;
+ const bool isSameAsTyped = sameLength ? sameAsTyped(word, depth + 1) : false;
+ const bool hasAlternates = hasAlternateSpellings(flags);
+ if (isSameAsTyped && !hasAlternates) return;
- *nextSiblingPosition = Dictionary::setDictionaryValues(DICT, IS_LATEST_DICT_VERSION, pos, &c,
- &childPosition, &terminal, &freq);
-
- const bool needsToTraverseChildrenNodes = childPosition != 0;
-
- // If we are only doing traverseAllNodes, no need to look at the typed characters.
- if (traverseAllNodes || needsToSkipCurrentNode(c, inputIndex, skipPos, depth)) {
- mWord[depth] = c;
- if (traverseAllNodes && terminal) {
- onTerminalWhenUserTypedLengthIsGreaterThanInputLength(mWord, inputIndex, depth,
- matchWeight, nextLetters, nextLettersSize, skipPos, excessivePos, transposedPos,
- freq);
- }
- if (!needsToTraverseChildrenNodes) return false;
- *newTraverseAllNodes = traverseAllNodes;
- *newMatchRate = matchWeight;
- *newDiffs = diffs;
- *newInputIndex = inputIndex;
- } else {
- const int *currentChars = getInputCharsAt(inputIndex);
-
- if (transposedPos >= 0) {
- if (inputIndex == transposedPos) currentChars += MAX_PROXIMITY_CHARS;
- if (inputIndex == (transposedPos + 1)) currentChars -= MAX_PROXIMITY_CHARS;
- }
-
- int matchedProximityCharId = getMatchedProximityId(currentChars, c, skipPos, excessivePos,
- transposedPos);
- if (UNRELATED_CHAR == matchedProximityCharId) return false;
- mWord[depth] = c;
- // If inputIndex is greater than mInputLength, that means there is no
- // proximity chars. So, we don't need to check proximity.
- if (SAME_OR_ACCENTED_OR_CAPITALIZED_CHAR == matchedProximityCharId) {
- multiplyIntCapped(TYPED_LETTER_MULTIPLIER, &matchWeight);
- }
- bool isSameAsUserTypedLength = mInputLength == inputIndex + 1
- || (excessivePos == mInputLength - 1 && inputIndex == mInputLength - 2);
- if (isSameAsUserTypedLength && terminal) {
- onTerminalWhenUserTypedLengthIsSameAsInputLength(mWord, inputIndex, depth, matchWeight,
- skipPos, excessivePos, transposedPos, freq);
- }
- if (!needsToTraverseChildrenNodes) return false;
- // Start traversing all nodes after the index exceeds the user typed length
- *newTraverseAllNodes = isSameAsUserTypedLength;
- *newMatchRate = matchWeight;
- *newDiffs = diffs + ((NEAR_PROXIMITY_CHAR == matchedProximityCharId) ? 1 : 0);
- *newInputIndex = inputIndex + 1;
- }
- // Optimization: Prune out words that are too long compared to how much was typed.
- if (depth >= maxDepth || *newDiffs > mMaxEditDistance) {
- return false;
+ if (depth >= MIN_SUGGEST_DEPTH) {
+ const int finalFreq = calculateFinalFreq(inputIndex, depth, matchWeight, skipPos,
+ excessivePos, transposedPos, freq, sameLength);
+ if (!isSameAsTyped)
+ addWord(word, depth + 1, finalFreq);
+ if (hasAlternates)
+ addWordAlternatesSpellings(DICT_ROOT, pos, flags, finalFreq);
}
- // If inputIndex is greater than mInputLength, that means there are no proximity chars.
- // TODO: Check if this can be isSameAsUserTypedLength only.
- if (isSameAsUserTypedLength || mInputLength <= *newInputIndex) {
- *newTraverseAllNodes = true;
+ if (sameLength && depth >= mInputLength && skipPos < 0) {
+ registerNextLetter(word[mInputLength], nextLetters, nextLettersSize);
+ }
+}
+
+#ifndef NEW_DICTIONARY_FORMAT
+// TODO: Don't forget to bring inline functions back to over where they are used.
+
+// The following functions will be entirely replaced with new implementations.
+void UnigramDictionary::getWordsOld(const int initialPos, const int inputLength, const int skipPos,
+ const int excessivePos, const int transposedPos,int *nextLetters,
+ const int nextLettersSize) {
+ int initialPosition = initialPos;
+ const int count = Dictionary::getCount(DICT_ROOT, &initialPosition);
+ getWordsRec(count, initialPosition, 0,
+ min(inputLength * MAX_DEPTH_MULTIPLIER, MAX_WORD_LENGTH),
+ mInputLength <= 0, 1, 0, 0, skipPos, excessivePos, transposedPos, nextLetters,
+ nextLettersSize);
+}
+
+void UnigramDictionary::getWordsRec(const int childrenCount, const int pos, const int depth,
+ const int maxDepth, const bool traverseAllNodes, const int matchWeight,
+ const int inputIndex, const int diffs, const int skipPos, const int excessivePos,
+ const int transposedPos, int *nextLetters, const int nextLettersSize) {
+ int siblingPos = pos;
+ for (int i = 0; i < childrenCount; ++i) {
+ int newCount;
+ int newChildPosition;
+ bool newTraverseAllNodes;
+ int newMatchRate;
+ int newInputIndex;
+ int newDiffs;
+ int newSiblingPos;
+ int newOutputIndex;
+ const bool needsToTraverseChildrenNodes = processCurrentNode(siblingPos, depth, maxDepth,
+ traverseAllNodes, matchWeight, inputIndex, diffs,
+ skipPos, excessivePos, transposedPos,
+ nextLetters, nextLettersSize,
+ &newCount, &newChildPosition, &newTraverseAllNodes, &newMatchRate,
+ &newInputIndex, &newDiffs, &newSiblingPos, &newOutputIndex);
+ siblingPos = newSiblingPos;
+
+ if (needsToTraverseChildrenNodes) {
+ getWordsRec(newCount, newChildPosition, newOutputIndex, maxDepth, newTraverseAllNodes,
+ newMatchRate, newInputIndex, newDiffs, skipPos, excessivePos, transposedPos,
+ nextLetters, nextLettersSize);
+ }
}
- // get the count of nodes and increment childAddress.
- *newCount = Dictionary::getCount(DICT, &childPosition);
- *newChildPosition = childPosition;
- if (DEBUG_DICT) assert(needsToTraverseChildrenNodes);
- return needsToTraverseChildrenNodes;
}
inline int UnigramDictionary::getBestWordFreq(const int startInputIndex, const int inputLength,
unsigned short *word) {
int pos = ROOT_POS;
- int count = Dictionary::getCount(DICT, &pos);
+ int count = Dictionary::getCount(DICT_ROOT, &pos);
int maxFreq = 0;
int depth = 0;
unsigned short newWord[MAX_WORD_LENGTH_INTERNAL];
@@ -885,8 +784,8 @@ inline bool UnigramDictionary::processCurrentNodeForExactMatch(const int firstCh
const int inputIndex = startInputIndex + depth;
const int *currentChars = getInputCharsAt(inputIndex);
unsigned short c;
- *siblingPos = Dictionary::setDictionaryValues(DICT, IS_LATEST_DICT_VERSION, firstChildPos, &c,
- newChildPosition, newTerminal, newFreq);
+ *siblingPos = Dictionary::setDictionaryValues(DICT_ROOT, IS_LATEST_DICT_VERSION, firstChildPos,
+ &c, newChildPosition, newTerminal, newFreq);
const unsigned int inputC = currentChars[0];
if (DEBUG_DICT) {
assert(inputC <= U_SHORT_MAX);
@@ -903,7 +802,7 @@ inline bool UnigramDictionary::processCurrentNodeForExactMatch(const int firstCh
}
}
if (hasChild) {
- *newCount = Dictionary::getCount(DICT, newChildPosition);
+ *newCount = Dictionary::getCount(DICT_ROOT, newChildPosition);
return true;
} else {
return false;
@@ -915,4 +814,314 @@ inline bool UnigramDictionary::processCurrentNodeForExactMatch(const int firstCh
return false;
}
}
+
+// TODO: use uint32_t instead of unsigned short
+bool UnigramDictionary::isValidWord(unsigned short *word, int length) {
+ if (IS_LATEST_DICT_VERSION) {
+ return (getBigramPosition(DICTIONARY_HEADER_SIZE, word, 0, length) != NOT_VALID_WORD);
+ } else {
+ return (getBigramPosition(0, word, 0, length) != NOT_VALID_WORD);
+ }
+}
+
+
+// Require strict exact match.
+int UnigramDictionary::getBigramPosition(int pos, unsigned short *word, int offset,
+ int length) const {
+ // returns address of bigram data of that word
+ // return -99 if not found
+
+ int count = Dictionary::getCount(DICT_ROOT, &pos);
+ unsigned short currentChar = (unsigned short) word[offset];
+ for (int j = 0; j < count; j++) {
+ unsigned short c = Dictionary::getChar(DICT_ROOT, &pos);
+ int terminal = Dictionary::getTerminal(DICT_ROOT, &pos);
+ int childPos = Dictionary::getAddress(DICT_ROOT, &pos);
+ if (c == currentChar) {
+ if (offset == length - 1) {
+ if (terminal) {
+ return (pos+1);
+ }
+ } else {
+ if (childPos != 0) {
+ int t = getBigramPosition(childPos, word, offset + 1, length);
+ if (t > 0) {
+ return t;
+ }
+ }
+ }
+ }
+ if (terminal) {
+ Dictionary::getFreq(DICT_ROOT, IS_LATEST_DICT_VERSION, &pos);
+ }
+ // There could be two instances of each alphabet - upper and lower case. So continue
+ // looking ...
+ }
+ return NOT_VALID_WORD;
+}
+
+
+// The following functions will be modified.
+bool UnigramDictionary::getSplitTwoWordsSuggestion(const int inputLength,
+ const int firstWordStartPos, const int firstWordLength, const int secondWordStartPos,
+ const int secondWordLength, const bool isSpaceProximity) {
+ if (inputLength >= MAX_WORD_LENGTH) return false;
+ if (0 >= firstWordLength || 0 >= secondWordLength || firstWordStartPos >= secondWordStartPos
+ || firstWordStartPos < 0 || secondWordStartPos + secondWordLength > inputLength)
+ return false;
+ const int newWordLength = firstWordLength + secondWordLength + 1;
+ // Allocating variable length array on stack
+ unsigned short word[newWordLength];
+ const int firstFreq = getBestWordFreq(firstWordStartPos, firstWordLength, mWord);
+ if (DEBUG_DICT) {
+ LOGI("First freq: %d", firstFreq);
+ }
+ if (firstFreq <= 0) return false;
+
+ for (int i = 0; i < firstWordLength; ++i) {
+ word[i] = mWord[i];
+ }
+
+ const int secondFreq = getBestWordFreq(secondWordStartPos, secondWordLength, mWord);
+ if (DEBUG_DICT) {
+ LOGI("Second freq: %d", secondFreq);
+ }
+ if (secondFreq <= 0) return false;
+
+ word[firstWordLength] = SPACE;
+ for (int i = (firstWordLength + 1); i < newWordLength; ++i) {
+ word[i] = mWord[i - firstWordLength - 1];
+ }
+
+ int pairFreq = calcFreqForSplitTwoWords(TYPED_LETTER_MULTIPLIER, firstWordLength,
+ secondWordLength, firstFreq, secondFreq, isSpaceProximity);
+ if (DEBUG_DICT) {
+ LOGI("Split two words: %d, %d, %d, %d, %d", firstFreq, secondFreq, pairFreq, inputLength,
+ TYPED_LETTER_MULTIPLIER);
+ }
+ addWord(word, newWordLength, pairFreq);
+ return true;
+}
+
+inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth,
+ const int maxDepth, const bool traverseAllNodes, int matchWeight, int inputIndex,
+ const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
+ int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
+ bool *newTraverseAllNodes, int *newMatchRate, int *newInputIndex, int *newDiffs,
+ int *nextSiblingPosition, int *nextOutputIndex) {
+ if (DEBUG_DICT) {
+ int inputCount = 0;
+ if (skipPos >= 0) ++inputCount;
+ if (excessivePos >= 0) ++inputCount;
+ if (transposedPos >= 0) ++inputCount;
+ assert(inputCount <= 1);
+ }
+ unsigned short c;
+ int childPosition;
+ bool terminal;
+ int freq;
+ bool isSameAsUserTypedLength = false;
+
+ const uint8_t flags = 0; // No flags for now
+
+ if (excessivePos == depth && inputIndex < mInputLength - 1) ++inputIndex;
+
+ *nextSiblingPosition = Dictionary::setDictionaryValues(DICT_ROOT, IS_LATEST_DICT_VERSION, pos,
+ &c, &childPosition, &terminal, &freq);
+ *nextOutputIndex = depth + 1;
+
+ const bool needsToTraverseChildrenNodes = childPosition != 0;
+
+ // If we are only doing traverseAllNodes, no need to look at the typed characters.
+ if (traverseAllNodes || needsToSkipCurrentNode(c, inputIndex, skipPos, depth)) {
+ mWord[depth] = c;
+ if (traverseAllNodes && terminal) {
+ onTerminal(mWord, depth, DICT_ROOT, flags, pos, inputIndex, matchWeight, skipPos,
+ excessivePos, transposedPos, freq, false, nextLetters, nextLettersSize);
+ }
+ if (!needsToTraverseChildrenNodes) return false;
+ *newTraverseAllNodes = traverseAllNodes;
+ *newMatchRate = matchWeight;
+ *newDiffs = diffs;
+ *newInputIndex = inputIndex;
+ } else {
+ const int *currentChars = getInputCharsAt(inputIndex);
+
+ if (transposedPos >= 0) {
+ if (inputIndex == transposedPos) currentChars += MAX_PROXIMITY_CHARS;
+ if (inputIndex == (transposedPos + 1)) currentChars -= MAX_PROXIMITY_CHARS;
+ }
+
+ int matchedProximityCharId = getMatchedProximityId(currentChars, c, skipPos, excessivePos,
+ transposedPos);
+ if (UNRELATED_CHAR == matchedProximityCharId) return false;
+ mWord[depth] = c;
+ // If inputIndex is greater than mInputLength, that means there is no
+ // proximity chars. So, we don't need to check proximity.
+ if (SAME_OR_ACCENTED_OR_CAPITALIZED_CHAR == matchedProximityCharId) {
+ multiplyIntCapped(TYPED_LETTER_MULTIPLIER, &matchWeight);
+ }
+ bool isSameAsUserTypedLength = mInputLength == inputIndex + 1
+ || (excessivePos == mInputLength - 1 && inputIndex == mInputLength - 2);
+ if (isSameAsUserTypedLength && terminal) {
+ onTerminal(mWord, depth, DICT_ROOT, flags, pos, inputIndex, matchWeight, skipPos,
+ excessivePos, transposedPos, freq, true, nextLetters, nextLettersSize);
+ }
+ if (!needsToTraverseChildrenNodes) return false;
+ // Start traversing all nodes after the index exceeds the user typed length
+ *newTraverseAllNodes = isSameAsUserTypedLength;
+ *newMatchRate = matchWeight;
+ *newDiffs = diffs + ((NEAR_PROXIMITY_CHAR == matchedProximityCharId) ? 1 : 0);
+ *newInputIndex = inputIndex + 1;
+ }
+ // Optimization: Prune out words that are too long compared to how much was typed.
+ if (depth >= maxDepth || *newDiffs > mMaxEditDistance) {
+ return false;
+ }
+
+ // If inputIndex is greater than mInputLength, that means there are no proximity chars.
+ // TODO: Check if this can be isSameAsUserTypedLength only.
+ if (isSameAsUserTypedLength || mInputLength <= *newInputIndex) {
+ *newTraverseAllNodes = true;
+ }
+ // get the count of nodes and increment childAddress.
+ *newCount = Dictionary::getCount(DICT_ROOT, &childPosition);
+ *newChildPosition = childPosition;
+ if (DEBUG_DICT) assert(needsToTraverseChildrenNodes);
+ return needsToTraverseChildrenNodes;
+}
+
+#else // NEW_DICTIONARY_FORMAT
+
+bool UnigramDictionary::getSplitTwoWordsSuggestion(const int inputLength,
+ const int firstWordStartPos, const int firstWordLength, const int secondWordStartPos,
+ const int secondWordLength, const bool isSpaceProximity) {
+ if (inputLength >= MAX_WORD_LENGTH) return false;
+ if (0 >= firstWordLength || 0 >= secondWordLength || firstWordStartPos >= secondWordStartPos
+ || firstWordStartPos < 0 || secondWordStartPos + secondWordLength > inputLength)
+ return false;
+ const int newWordLength = firstWordLength + secondWordLength + 1;
+ // Allocating variable length array on stack
+ unsigned short word[newWordLength];
+ const int firstFreq = getBestWordFreq(firstWordStartPos, firstWordLength, mWord);
+ if (DEBUG_DICT) {
+ LOGI("First freq: %d", firstFreq);
+ }
+ if (firstFreq <= 0) return false;
+
+ for (int i = 0; i < firstWordLength; ++i) {
+ word[i] = mWord[i];
+ }
+
+ const int secondFreq = getBestWordFreq(secondWordStartPos, secondWordLength, mWord);
+ if (DEBUG_DICT) {
+ LOGI("Second freq: %d", secondFreq);
+ }
+ if (secondFreq <= 0) return false;
+
+ word[firstWordLength] = SPACE;
+ for (int i = (firstWordLength + 1); i < newWordLength; ++i) {
+ word[i] = mWord[i - firstWordLength - 1];
+ }
+
+ int pairFreq = calcFreqForSplitTwoWords(TYPED_LETTER_MULTIPLIER, firstWordLength,
+ secondWordLength, firstFreq, secondFreq, isSpaceProximity);
+ if (DEBUG_DICT) {
+ LOGI("Split two words: %d, %d, %d, %d, %d", firstFreq, secondFreq, pairFreq, inputLength,
+ TYPED_LETTER_MULTIPLIER);
+ }
+ addWord(word, newWordLength, pairFreq);
+ return true;
+}
+
+inline bool UnigramDictionary::processCurrentNode(const int pos, const int depth,
+ const int maxDepth, const bool traverseAllNodes, int matchWeight, int inputIndex,
+ const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
+ int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
+ bool *newTraverseAllNodes, int *newMatchRate, int *newInputIndex, int *newDiffs,
+ int *nextSiblingPosition, int *nextOutputIndex) {
+ if (DEBUG_DICT) {
+ int inputCount = 0;
+ if (skipPos >= 0) ++inputCount;
+ if (excessivePos >= 0) ++inputCount;
+ if (transposedPos >= 0) ++inputCount;
+ assert(inputCount <= 1);
+ }
+ unsigned short c;
+ int childPosition;
+ bool terminal;
+ int freq;
+ bool isSameAsUserTypedLength = false;
+
+ const uint8_t flags = 0; // No flags for now
+
+ if (excessivePos == depth && inputIndex < mInputLength - 1) ++inputIndex;
+
+ *nextSiblingPosition = Dictionary::setDictionaryValues(DICT_ROOT, IS_LATEST_DICT_VERSION, pos,
+ &c, &childPosition, &terminal, &freq);
+ *nextOutputIndex = depth + 1;
+
+ const bool needsToTraverseChildrenNodes = childPosition != 0;
+
+ // If we are only doing traverseAllNodes, no need to look at the typed characters.
+ if (traverseAllNodes || needsToSkipCurrentNode(c, inputIndex, skipPos, depth)) {
+ mWord[depth] = c;
+ if (traverseAllNodes && terminal) {
+ onTerminal(mWord, depth, DICT_ROOT, flags, pos, inputIndex, matchWeight, skipPos,
+ excessivePos, transposedPos, freq, false, nextLetters, nextLettersSize);
+ }
+ if (!needsToTraverseChildrenNodes) return false;
+ *newTraverseAllNodes = traverseAllNodes;
+ *newMatchRate = matchWeight;
+ *newDiffs = diffs;
+ *newInputIndex = inputIndex;
+ } else {
+ const int *currentChars = getInputCharsAt(inputIndex);
+
+ if (transposedPos >= 0) {
+ if (inputIndex == transposedPos) currentChars += MAX_PROXIMITY_CHARS;
+ if (inputIndex == (transposedPos + 1)) currentChars -= MAX_PROXIMITY_CHARS;
+ }
+
+ int matchedProximityCharId = getMatchedProximityId(currentChars, c, skipPos, excessivePos,
+ transposedPos);
+ if (UNRELATED_CHAR == matchedProximityCharId) return false;
+ mWord[depth] = c;
+ // If inputIndex is greater than mInputLength, that means there is no
+ // proximity chars. So, we don't need to check proximity.
+ if (SAME_OR_ACCENTED_OR_CAPITALIZED_CHAR == matchedProximityCharId) {
+ multiplyIntCapped(TYPED_LETTER_MULTIPLIER, &matchWeight);
+ }
+ bool isSameAsUserTypedLength = mInputLength == inputIndex + 1
+ || (excessivePos == mInputLength - 1 && inputIndex == mInputLength - 2);
+ if (isSameAsUserTypedLength && terminal) {
+ onTerminal(mWord, depth, DICT_ROOT, flags, pos, inputIndex, matchWeight, skipPos,
+ excessivePos, transposedPos, freq, true, nextLetters, nextLettersSize);
+ }
+ if (!needsToTraverseChildrenNodes) return false;
+ // Start traversing all nodes after the index exceeds the user typed length
+ *newTraverseAllNodes = isSameAsUserTypedLength;
+ *newMatchRate = matchWeight;
+ *newDiffs = diffs + ((NEAR_PROXIMITY_CHAR == matchedProximityCharId) ? 1 : 0);
+ *newInputIndex = inputIndex + 1;
+ }
+ // Optimization: Prune out words that are too long compared to how much was typed.
+ if (depth >= maxDepth || *newDiffs > mMaxEditDistance) {
+ return false;
+ }
+
+ // If inputIndex is greater than mInputLength, that means there are no proximity chars.
+ // TODO: Check if this can be isSameAsUserTypedLength only.
+ if (isSameAsUserTypedLength || mInputLength <= *newInputIndex) {
+ *newTraverseAllNodes = true;
+ }
+ // get the count of nodes and increment childAddress.
+ *newCount = Dictionary::getCount(DICT_ROOT, &childPosition);
+ *newChildPosition = childPosition;
+ if (DEBUG_DICT) assert(needsToTraverseChildrenNodes);
+ return needsToTraverseChildrenNodes;
+}
+
+#endif // NEW_DICTIONARY_FORMAT
+
} // namespace latinime
diff --git a/native/src/unigram_dictionary.h b/native/src/unigram_dictionary.h
index 3d3007ce0..154ac9b36 100644
--- a/native/src/unigram_dictionary.h
+++ b/native/src/unigram_dictionary.h
@@ -17,9 +17,14 @@
#ifndef LATINIME_UNIGRAM_DICTIONARY_H
#define LATINIME_UNIGRAM_DICTIONARY_H
+#include
#include "defines.h"
#include "proximity_info.h"
+#ifndef NULL
+#define NULL 0
+#endif
+
namespace latinime {
class UnigramDictionary {
@@ -31,8 +36,11 @@ class UnigramDictionary {
} ProximityType;
public:
- UnigramDictionary(const unsigned char *dict, int typedLetterMultipler, int fullWordMultiplier,
- int maxWordLength, int maxWords, int maxProximityChars, const bool isLatestDictVersion);
+ UnigramDictionary(const uint8_t* const streamStart, int typedLetterMultipler,
+ int fullWordMultiplier, int maxWordLength, int maxWords, int maxProximityChars,
+ const bool isLatestDictVersion);
+ bool isValidWord(unsigned short *word, int length);
+ int getBigramPosition(int pos, unsigned short *word, int offset, int length) const;
int getSuggestions(const ProximityInfo *proximityInfo, const int *xcoordinates,
const int *ycoordinates, const int *codes, const int codesSize, const int flags,
unsigned short *outWords, int *frequencies);
@@ -56,34 +64,30 @@ private:
bool checkIfDictVersionIsLatest();
int getAddress(int *pos);
int getFreq(int *pos);
- int wideStrLen(unsigned short *str);
- bool sameAsTyped(unsigned short *word, int length);
+ bool sameAsTyped(const unsigned short *word, int length) const;
bool addWord(unsigned short *word, int length, int frequency);
- unsigned short toBaseLowerCase(unsigned short c);
+ void addWordAlternatesSpellings(const uint8_t* const root, int pos, int depth, int finalFreq);
void getWordsRec(const int childrenCount, const int pos, const int depth, const int maxDepth,
const bool traverseAllNodes, const int snr, const int inputIndex, const int diffs,
const int skipPos, const int excessivePos, const int transposedPos, int *nextLetters,
const int nextLettersSize);
bool getSplitTwoWordsSuggestion(const int inputLength,
const int firstWordStartPos, const int firstWordLength,
- const int secondWordStartPos, const int secondWordLength);
+ const int secondWordStartPos, const int secondWordLength, const bool isSpaceProximity);
bool getMissingSpaceWords(const int inputLength, const int missingSpacePos);
bool getMistypedSpaceWords(const int inputLength, const int spaceProximityPos);
// Keep getWordsOld for comparing performance between getWords and getWordsOld
void getWordsOld(const int initialPos, const int inputLength, const int skipPos,
const int excessivePos, const int transposedPos, int *nextLetters,
const int nextLettersSize);
- void registerNextLetter(unsigned short c, int *nextLetters, int nextLettersSize);
int calculateFinalFreq(const int inputIndex, const int depth, const int snr, const int skipPos,
const int excessivePos, const int transposedPos, const int freq,
const bool sameLength) const;
- void onTerminalWhenUserTypedLengthIsGreaterThanInputLength(unsigned short *word,
- const int inputIndex, const int depth, const int snr, int *nextLetters,
- const int nextLettersSize, const int skipPos, const int excessivePos,
- const int transposedPos, const int freq);
- void onTerminalWhenUserTypedLengthIsSameAsInputLength(unsigned short *word,
- const int inputIndex, const int depth, const int snr, const int skipPos,
- const int excessivePos, const int transposedPos, const int freq);
+ void onTerminal(unsigned short int* word, const int depth,
+ const uint8_t* const root, const uint8_t flags, int pos,
+ const int inputIndex, const int matchWeight, const int skipPos,
+ const int excessivePos, const int transposedPos, const int freq, const bool sameLength,
+ int *nextLetters, const int nextLettersSize);
bool needsToSkipCurrentNode(const unsigned short c,
const int inputIndex, const int skipPos, const int depth);
ProximityType getMatchedProximityId(const int *currentChars, const unsigned short c,
@@ -94,7 +98,7 @@ private:
const int diffs, const int skipPos, const int excessivePos, const int transposedPos,
int *nextLetters, const int nextLettersSize, int *newCount, int *newChildPosition,
bool *newTraverseAllNodes, int *newSnr, int*newInputIndex, int *newDiffs,
- int *nextSiblingPosition);
+ int *nextSiblingPosition, int *nextOutputIndex);
int getBestWordFreq(const int startInputIndex, const int inputLength, unsigned short *word);
// Process a node by considering missing space
bool processCurrentNodeForExactMatch(const int firstChildPos,
@@ -104,7 +108,8 @@ private:
inline const int* getInputCharsAt(const int index) const {
return mInputCodes + (index * MAX_PROXIMITY_CHARS);
}
- const unsigned char *DICT;
+
+ const uint8_t* const DICT_ROOT;
const int MAX_WORD_LENGTH;
const int MAX_WORDS;
const int MAX_PROXIMITY_CHARS;
@@ -138,11 +143,10 @@ private:
int mStackInputIndex[MAX_WORD_LENGTH_INTERNAL];
int mStackDiffs[MAX_WORD_LENGTH_INTERNAL];
int mStackSiblingPos[MAX_WORD_LENGTH_INTERNAL];
+ int mStackOutputIndex[MAX_WORD_LENGTH_INTERNAL];
int mNextLettersFrequency[NEXT_LETTERS_SIZE];
};
-// ----------------------------------------------------------------------------
-
-}; // namespace latinime
+} // namespace latinime
#endif // LATINIME_UNIGRAM_DICTIONARY_H
diff --git a/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java b/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java
new file mode 100644
index 000000000..93681b616
--- /dev/null
+++ b/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+package com.android.inputmethod.compat;
+
+import android.test.AndroidTestCase;
+
+public class ArraysCompatUtilsTests extends AndroidTestCase {
+ // See {@link tests.api.java.util.ArraysTest}.
+ private static final int ARRAY_SIZE = 100;
+ private final int[] mIntArray = new int[ARRAY_SIZE];
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ mIntArray[counter] = counter;
+ }
+ }
+
+ public void testEmptyArray() {
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, 0, 0);
+ assertEquals("empty", ~0, index);
+ final int compat = ArraysCompatUtils.compatBinarySearch(mIntArray, 0, 0, 0);
+ assertEquals("empty compat", ~0, compat);
+ }
+
+ public void testEmptyRangeArray() {
+ final int mid = ARRAY_SIZE / 3;
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, mid, mid, 1);
+ assertEquals("empty", ~mid, index);
+ final int compat = ArraysCompatUtils.compatBinarySearch(mIntArray, mid, mid, 1);
+ assertEquals("empty compat", ~mid, compat);
+ }
+
+ public void testFind() {
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, counter);
+ assertEquals("found", counter, index);
+ }
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ final int compat = ArraysCompatUtils.compatBinarySearch(
+ mIntArray, 0, ARRAY_SIZE, counter);
+ assertEquals("found compat", counter, compat);
+ }
+ }
+
+ public void testFindNegative() {
+ final int offset = ARRAY_SIZE / 2;
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ mIntArray[counter] -= offset;
+ }
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ final int index = ArraysCompatUtils.binarySearch(
+ mIntArray, 0, ARRAY_SIZE, counter - offset);
+ assertEquals("found", counter, index);
+ }
+ for (int counter = 0; counter < ARRAY_SIZE; counter++) {
+ final int compat = ArraysCompatUtils.compatBinarySearch(
+ mIntArray, 0, ARRAY_SIZE, counter - offset);
+ assertEquals("found compat", counter, compat);
+ }
+ }
+
+ public void testNotFountAtTop() {
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, -1);
+ assertEquals("not found top", ~0, index);
+ final int compat = ArraysCompatUtils.compatBinarySearch(
+ mIntArray, 0, ARRAY_SIZE, -1);
+ assertEquals("not found top compat", ~0, compat);
+ }
+
+ public void testNotFountAtEnd() {
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, ARRAY_SIZE);
+ assertEquals("not found end", ~ARRAY_SIZE, index);
+ final int compat = ArraysCompatUtils.compatBinarySearch(
+ mIntArray, 0, ARRAY_SIZE, ARRAY_SIZE);
+ assertEquals("not found end compat", ~ARRAY_SIZE, compat);
+ }
+
+ public void testNotFountAtMid() {
+ final int mid = ARRAY_SIZE / 3;
+ mIntArray[mid] = mIntArray[mid + 1];
+ final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, mid);
+ assertEquals("not found mid", ~mid, index);
+ final int compat = ArraysCompatUtils.compatBinarySearch(
+ mIntArray, 0, ARRAY_SIZE, mid);
+ assertEquals("not found mid compat", ~mid, compat);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/PopupCharactersParserTests.java b/tests/src/com/android/inputmethod/keyboard/PopupCharactersParserTests.java
deleted file mode 100644
index ae78866e6..000000000
--- a/tests/src/com/android/inputmethod/keyboard/PopupCharactersParserTests.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard;
-
-import com.android.inputmethod.latin.R;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.test.AndroidTestCase;
-
-public class PopupCharactersParserTests extends AndroidTestCase {
- private Resources mRes;
-
- private static final String CODE_SETTINGS = "@integer/key_settings";
- private static final String ICON_SETTINGS = "@drawable/sym_keyboard_settings";
- private static final String CODE_NON_EXISTING = "@integer/non_existing";
- private static final String ICON_NON_EXISTING = "@drawable/non_existing";
-
- private int mCodeSettings;
- private Drawable mIconSettings;
-
- @Override
- protected void setUp() {
- Resources res = getContext().getResources();
- mRes = res;
-
- final String packageName = res.getResourcePackageName(R.string.english_ime_name);
- final int codeId = res.getIdentifier(CODE_SETTINGS.substring(1), null, packageName);
- final int iconId = res.getIdentifier(ICON_SETTINGS.substring(1), null, packageName);
- mCodeSettings = res.getInteger(codeId);
- mIconSettings = res.getDrawable(iconId);
- }
-
- private void assertParser(String message, String popupSpec, String expectedLabel,
- String expectedOutputText, Drawable expectedIcon, int expectedCode) {
- String actualLabel = PopupCharactersParser.getLabel(popupSpec);
- assertEquals(message + ": label:", expectedLabel, actualLabel);
-
- String actualOutputText = PopupCharactersParser.getOutputText(popupSpec);
- assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
-
- Drawable actualIcon = PopupCharactersParser.getIcon(mRes, popupSpec);
- // We can not compare drawables, checking null or non-null instead.
- if (expectedIcon == null) {
- assertNull(message + ": icon null:", actualIcon);
- } else {
- assertNotNull(message + ": icon non-null:", actualIcon);
- }
-
- int actualCode = PopupCharactersParser.getCode(mRes, popupSpec);
- assertEquals(message + ": codes value:", expectedCode, actualCode);
- }
-
- private void assertParserError(String message, String popupSpec, String expectedLabel,
- String expectedOutputText, Drawable expectedIcon, int expectedCode) {
- try {
- assertParser(message, popupSpec, expectedLabel, expectedOutputText, expectedIcon,
- expectedCode);
- fail(message);
- } catch (PopupCharactersParser.PopupCharactersParserError pcpe) {
- // success.
- }
- }
-
- public void testSingleLetter() {
- assertParser("Single letter", "a", "a", null, null, 'a');
- assertParser("Single escaped bar", "\\|", "|", null, null, '|');
- assertParser("Single escaped escape", "\\\\", "\\", null, null, '\\');
- assertParser("Single comma", ",", ",", null, null, ',');
- assertParser("Single escaped comma", "\\,", ",", null, null, ',');
- assertParser("Single escaped letter", "\\a", "a", null, null, 'a');
- assertParser("Single at", "@", "@", null, null, '@');
- assertParser("Single escaped at", "\\@", "@", null, null, '@');
- assertParser("Single letter with outputText", "a|abc", "a", "abc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped outputText", "a|a\\|c", "a", "a|c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with comma outputText", "a|a,b", "a", "a,b", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped comma outputText", "a|a\\,b", "a", "a,b", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with outputText starts with at", "a|@bc", "a", "@bc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with outputText contains at", "a|a@c", "a", "a@c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped at outputText", "a|\\@bc", "a", "@bc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single escaped escape with outputText", "\\\\|\\\\", "\\", "\\", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single escaped bar with outputText", "\\||\\|", "|", "|", null,
- Keyboard.CODE_DUMMY);
- assertParser("Single letter with code", "a|" + CODE_SETTINGS, "a", null, null,
- mCodeSettings);
- }
-
- public void testLabel() {
- assertParser("Simple label", "abc", "abc", "abc", null, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar", "a\\|c", "a|c", "a|c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped escape", "a\\\\c", "a\\c", "a\\c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with comma", "a,c", "a,c", "a,c", null, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped comma", "a\\,c", "a,c", "a,c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label starts with at", "@bc", "@bc", "@bc", null, Keyboard.CODE_DUMMY);
- assertParser("Label contains at", "a@c", "a@c", "a@c", null, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped at", "\\@bc", "@bc", "@bc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped letter", "\\abc", "abc", "abc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with outputText", "abc|def", "abc", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with comma and outputText", "a,c|def", "a,c", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Escaped comma label with outputText", "a\\,c|def", "a,c", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Escaped label with outputText", "a\\|c|def", "a|c", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar outputText", "abc|d\\|f", "abc", "d|f", null,
- Keyboard.CODE_DUMMY);
- assertParser("Escaped escape label with outputText", "a\\\\|def", "a\\", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label starts with at and outputText", "@bc|def", "@bc", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label contains at label and outputText", "a@c|def", "a@c", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Escaped at label with outputText", "\\@bc|def", "@bc", "def", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with comma outputText", "abc|a,b", "abc", "a,b", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped comma outputText", "abc|a\\,b", "abc", "a,b", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with outputText starts with at", "abc|@bc", "abc", "@bc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with outputText contains at", "abc|a@c", "abc", "a@c", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped at outputText", "abc|\\@bc", "abc", "@bc", null,
- Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar outputText", "abc|d\\|f", "abc", "d|f",
- null, Keyboard.CODE_DUMMY);
- assertParser("Escaped bar label with escaped bar outputText", "a\\|c|d\\|f", "a|c", "d|f",
- null, Keyboard.CODE_DUMMY);
- assertParser("Label with code", "abc|" + CODE_SETTINGS, "abc", null, null, mCodeSettings);
- assertParser("Escaped label with code", "a\\|c|" + CODE_SETTINGS, "a|c", null, null,
- mCodeSettings);
- }
-
- public void testIconAndCode() {
- assertParser("Icon with outputText", ICON_SETTINGS + "|abc", null, "abc", mIconSettings,
- Keyboard.CODE_DUMMY);
- assertParser("Icon with outputText starts with at", ICON_SETTINGS + "|@bc", null, "@bc",
- mIconSettings, Keyboard.CODE_DUMMY);
- assertParser("Icon with outputText contains at", ICON_SETTINGS + "|a@c", null, "a@c",
- mIconSettings, Keyboard.CODE_DUMMY);
- assertParser("Icon with escaped at outputText", ICON_SETTINGS + "|\\@bc", null, "@bc",
- mIconSettings, Keyboard.CODE_DUMMY);
- assertParser("Label starts with at and code", "@bc|" + CODE_SETTINGS, "@bc", null, null,
- mCodeSettings);
- assertParser("Label contains at and code", "a@c|" + CODE_SETTINGS, "a@c", null, null,
- mCodeSettings);
- assertParser("Escaped at label with code", "\\@bc|" + CODE_SETTINGS, "@bc", null, null,
- mCodeSettings);
- assertParser("Icon with code", ICON_SETTINGS + "|" + CODE_SETTINGS, null, null,
- mIconSettings, mCodeSettings);
- }
-
- public void testFormatError() {
- assertParserError("Empty spec", "", null, null, null, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty label with outputText", "|a", null, "a", null,
- Keyboard.CODE_DUMMY);
- assertParserError("Empty label with code", "|" + CODE_SETTINGS, null, null, null,
- mCodeSettings);
- assertParserError("Empty outputText with label", "a|", "a", null, null,
- Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty outputText with icon", ICON_SETTINGS + "|", null, null,
- mIconSettings, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty icon and code", "|", null, null, null, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Icon without code", ICON_SETTINGS, null, null, mIconSettings,
- Keyboard.CODE_DUMMY);
- assertParserError("Non existing icon", ICON_NON_EXISTING + "|abc", null, "abc", null,
- Keyboard.CODE_DUMMY);
- assertParserError("Non existing code", "abc|" + CODE_NON_EXISTING, "abc", null, null,
- Keyboard.CODE_UNSPECIFIED);
- assertParserError("Third bar at end", "a|b|", "a", null, null, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar", "a|b|c", "a", null, null, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar with label and code", "a|" + CODE_SETTINGS + "|c", "a",
- null, null, mCodeSettings);
- assertParserError("Multiple bar with icon and outputText", ICON_SETTINGS + "|b|c", null,
- null, mIconSettings, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar with icon and code",
- ICON_SETTINGS + "|" + CODE_SETTINGS + "|c", null, null, mIconSettings,
- mCodeSettings);
- }
-}
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyStylesTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
similarity index 96%
rename from tests/src/com/android/inputmethod/keyboard/KeyStylesTests.java
rename to tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
index 5dff11471..4050a7123 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyStylesTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
@@ -14,9 +14,9 @@
* the License.
*/
-package com.android.inputmethod.keyboard;
+package com.android.inputmethod.keyboard.internal;
-import com.android.inputmethod.keyboard.KeyStyles.EmptyKeyStyle;
+import com.android.inputmethod.keyboard.internal.KeyStyles.EmptyKeyStyle;
import android.test.AndroidTestCase;
import android.text.TextUtils;
diff --git a/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilderTests.java
similarity index 99%
rename from tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
rename to tests/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilderTests.java
index 600342a7c..0d2802d53 100644
--- a/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MiniKeyboardBuilderTests.java
@@ -14,9 +14,9 @@
* the License.
*/
-package com.android.inputmethod.keyboard;
+package com.android.inputmethod.keyboard.internal;
-import com.android.inputmethod.keyboard.MiniKeyboardBuilder.MiniKeyboardLayoutParams;
+import com.android.inputmethod.keyboard.internal.MiniKeyboardBuilder.MiniKeyboardLayoutParams;
import android.test.AndroidTestCase;
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java
new file mode 100644
index 000000000..e4a1c68d8
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/PopupCharactersParserTests.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.content.res.Resources;
+import android.test.AndroidTestCase;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.R;
+
+public class PopupCharactersParserTests extends AndroidTestCase {
+ private Resources mRes;
+
+ private static final int ICON_SETTINGS_KEY = 5;
+ private static final int ICON_UNDEFINED = KeyboardIconsSet.ICON_UNDEFINED;
+
+ private static final String CODE_SETTINGS = "@integer/key_settings";
+ private static final String ICON_SETTINGS = "@icon/" + ICON_SETTINGS_KEY;
+ private static final String CODE_NON_EXISTING = "@integer/non_existing";
+ private static final String ICON_NON_EXISTING = "@icon/non_existing";
+
+ private int mCodeSettings;
+
+ @Override
+ protected void setUp() {
+ Resources res = getContext().getResources();
+ mRes = res;
+
+ final String packageName = res.getResourcePackageName(R.string.english_ime_name);
+ final int codeId = res.getIdentifier(CODE_SETTINGS.substring(1), null, packageName);
+ mCodeSettings = res.getInteger(codeId);
+ }
+
+ private void assertParser(String message, String popupSpec, String expectedLabel,
+ String expectedOutputText, int expectedIcon, int expectedCode) {
+ String actualLabel = PopupCharactersParser.getLabel(popupSpec);
+ assertEquals(message + ": label:", expectedLabel, actualLabel);
+
+ String actualOutputText = PopupCharactersParser.getOutputText(popupSpec);
+ assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
+
+ int actualIcon = PopupCharactersParser.getIconId(popupSpec);
+ assertEquals(message + ": icon:", expectedIcon, actualIcon);
+
+ int actualCode = PopupCharactersParser.getCode(mRes, popupSpec);
+ assertEquals(message + ": codes value:", expectedCode, actualCode);
+ }
+
+ private void assertParserError(String message, String popupSpec, String expectedLabel,
+ String expectedOutputText, int expectedIcon, int expectedCode) {
+ try {
+ assertParser(message, popupSpec, expectedLabel, expectedOutputText, expectedIcon,
+ expectedCode);
+ fail(message);
+ } catch (PopupCharactersParser.PopupCharactersParserError pcpe) {
+ // success.
+ }
+ }
+
+ public void testSingleLetter() {
+ assertParser("Single letter", "a",
+ "a", null, ICON_UNDEFINED, 'a');
+ assertParser("Single escaped bar", "\\|",
+ "|", null, ICON_UNDEFINED, '|');
+ assertParser("Single escaped escape", "\\\\",
+ "\\", null, ICON_UNDEFINED, '\\');
+ assertParser("Single comma", ",",
+ ",", null, ICON_UNDEFINED, ',');
+ assertParser("Single escaped comma", "\\,",
+ ",", null, ICON_UNDEFINED, ',');
+ assertParser("Single escaped letter", "\\a",
+ "a", null, ICON_UNDEFINED, 'a');
+ assertParser("Single at", "@",
+ "@", null, ICON_UNDEFINED, '@');
+ assertParser("Single escaped at", "\\@",
+ "@", null, ICON_UNDEFINED, '@');
+ assertParser("Single letter with outputText", "a|abc",
+ "a", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with escaped outputText", "a|a\\|c",
+ "a", "a|c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with comma outputText", "a|a,b",
+ "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with escaped comma outputText", "a|a\\,b",
+ "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with outputText starts with at", "a|@bc",
+ "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with outputText contains at", "a|a@c",
+ "a", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with escaped at outputText", "a|\\@bc",
+ "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single escaped escape with outputText", "\\\\|\\\\",
+ "\\", "\\", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single escaped bar with outputText", "\\||\\|",
+ "|", "|", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Single letter with code", "a|" + CODE_SETTINGS,
+ "a", null, ICON_UNDEFINED, mCodeSettings);
+ }
+
+ public void testLabel() {
+ assertParser("Simple label", "abc",
+ "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped bar", "a\\|c",
+ "a|c", "a|c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped escape", "a\\\\c",
+ "a\\c", "a\\c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with comma", "a,c",
+ "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped comma", "a\\,c",
+ "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label starts with at", "@bc",
+ "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label contains at", "a@c",
+ "a@c", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped at", "\\@bc",
+ "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped letter", "\\abc",
+ "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with outputText", "abc|def",
+ "abc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with comma and outputText", "a,c|def",
+ "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Escaped comma label with outputText", "a\\,c|def",
+ "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Escaped label with outputText", "a\\|c|def",
+ "a|c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped bar outputText", "abc|d\\|f",
+ "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Escaped escape label with outputText", "a\\\\|def",
+ "a\\", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label starts with at and outputText", "@bc|def",
+ "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label contains at label and outputText", "a@c|def",
+ "a@c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Escaped at label with outputText", "\\@bc|def",
+ "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with comma outputText", "abc|a,b",
+ "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped comma outputText", "abc|a\\,b",
+ "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with outputText starts with at", "abc|@bc",
+ "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with outputText contains at", "abc|a@c",
+ "abc", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped at outputText", "abc|\\@bc",
+ "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with escaped bar outputText", "abc|d\\|f",
+ "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Escaped bar label with escaped bar outputText", "a\\|c|d\\|f",
+ "a|c", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParser("Label with code", "abc|" + CODE_SETTINGS,
+ "abc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped label with code", "a\\|c|" + CODE_SETTINGS,
+ "a|c", null, ICON_UNDEFINED, mCodeSettings);
+ }
+
+ public void testIconAndCode() {
+ assertParser("Icon with outputText", ICON_SETTINGS + "|abc",
+ null, "abc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
+ assertParser("Icon with outputText starts with at", ICON_SETTINGS + "|@bc",
+ null, "@bc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
+ assertParser("Icon with outputText contains at", ICON_SETTINGS + "|a@c",
+ null, "a@c", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
+ assertParser("Icon with escaped at outputText", ICON_SETTINGS + "|\\@bc",
+ null, "@bc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
+ assertParser("Label starts with at and code", "@bc|" + CODE_SETTINGS,
+ "@bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Label contains at and code", "a@c|" + CODE_SETTINGS,
+ "a@c", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped at label with code", "\\@bc|" + CODE_SETTINGS,
+ "@bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Icon with code", ICON_SETTINGS + "|" + CODE_SETTINGS,
+ null, null, ICON_SETTINGS_KEY, mCodeSettings);
+ }
+
+ public void testFormatError() {
+ assertParserError("Empty spec", "", null,
+ null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty label with outputText", "|a",
+ null, "a", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParserError("Empty label with code", "|" + CODE_SETTINGS,
+ null, null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Empty outputText with label", "a|",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty outputText with icon", ICON_SETTINGS + "|",
+ null, null, ICON_SETTINGS_KEY, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty icon and code", "|",
+ null, null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Icon without code", ICON_SETTINGS,
+ null, null, ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
+ assertParser("Non existing icon", ICON_NON_EXISTING + "|abc",
+ null, "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
+ assertParserError("Non existing code", "abc|" + CODE_NON_EXISTING,
+ "abc", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Third bar at end", "a|b|",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar", "a|b|c",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar with label and code", "a|" + CODE_SETTINGS + "|c",
+ "a", null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Multiple bar with icon and outputText", ICON_SETTINGS + "|b|c",
+ null, null, ICON_SETTINGS_KEY, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar with icon and code",
+ ICON_SETTINGS + "|" + CODE_SETTINGS + "|c",
+ null, null, ICON_SETTINGS_KEY, mCodeSettings);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/EventRingBufferTests.java b/tests/src/com/android/inputmethod/latin/EventRingBufferTests.java
index 869781f3d..a3d2a2b10 100644
--- a/tests/src/com/android/inputmethod/latin/EventRingBufferTests.java
+++ b/tests/src/com/android/inputmethod/latin/EventRingBufferTests.java
@@ -16,7 +16,7 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.keyboard.SwipeTracker.EventRingBuffer;
+import com.android.inputmethod.keyboard.internal.SwipeTracker.EventRingBuffer;
import android.test.AndroidTestCase;
diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
index d128cb3fa..d102aa4d1 100644
--- a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
+++ b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
@@ -16,6 +16,8 @@
package com.android.inputmethod.latin;
+import com.android.inputmethod.latin.Utils;
+
import android.content.Context;
import android.content.res.Resources;
import android.test.AndroidTestCase;
@@ -75,7 +77,7 @@ public class SubtypeLocaleTests extends AndroidTestCase {
int failedCount = 0;
for (final InputMethodSubtype subtype : mKeyboardSubtypes) {
final String localeCode = subtype.getLocale();
- final Locale locale = new Locale(localeCode);
+ final Locale locale = Utils.constructLocaleFromString(localeCode);
// The locale name which will be displayed on spacebar. For example 'English (US)' or
// 'Francais (Canada)'. (c=\u008d)
final String displayName = SubtypeLocale.getFullDisplayName(locale);
diff --git a/tests/src/com/android/inputmethod/latin/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
index 8a11ff955..87ea011fa 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
@@ -36,7 +36,7 @@ public class SuggestHelper {
// Use null as the locale for Suggest so as to force it to use the internal dictionary
// (and not try to find a dictionary provider for a specified locale)
mSuggest = new Suggest(context, dictionaryId, null);
- mKeyboard = new LatinKeyboard(context, keyboardId);
+ mKeyboard = new LatinKeyboard(context, keyboardId, keyboardId.mWidth);
mKeyDetector = new KeyDetector();
init();
}
@@ -44,7 +44,7 @@ public class SuggestHelper {
protected SuggestHelper(Context context, File dictionaryPath, long startOffset, long length,
KeyboardId keyboardId) {
mSuggest = new Suggest(context, dictionaryPath, startOffset, length, null);
- mKeyboard = new LatinKeyboard(context, keyboardId);
+ mKeyboard = new LatinKeyboard(context, keyboardId, keyboardId.mWidth);
mKeyDetector = new KeyDetector();
init();
}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
index 64f26743e..8aadee42e 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
@@ -16,15 +16,14 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardView;
-
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.test.AndroidTestCase;
import android.text.TextUtils;
import android.view.inputmethod.EditorInfo;
+import com.android.inputmethod.keyboard.KeyboardId;
+
import java.io.File;
import java.io.InputStream;
import java.util.Locale;
@@ -38,11 +37,12 @@ public class SuggestTestsBase extends AndroidTestCase {
mTestPackageFile = new File(getTestContext().getApplicationInfo().sourceDir);
}
- protected static KeyboardId createKeyboardId(Locale locale) {
+ protected KeyboardId createKeyboardId(Locale locale) {
+ final int displayWidth = getContext().getResources().getDisplayMetrics().widthPixels;
return new KeyboardId(locale.toString() + " keyboard",
- com.android.inputmethod.latin.R.xml.kbd_qwerty, KeyboardView.COLOR_SCHEME_WHITE,
- locale, Configuration.ORIENTATION_LANDSCAPE, KeyboardId.MODE_TEXT,
- new EditorInfo(), false, false, false, false);
+ com.android.inputmethod.latin.R.xml.kbd_qwerty, locale,
+ Configuration.ORIENTATION_LANDSCAPE, displayWidth, KeyboardId.MODE_TEXT,
+ new EditorInfo(), false, KeyboardId.F2KEY_MODE_NONE, false, false, false, false);
}
protected InputStream openTestRawResource(int resIdInTest) {