aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.pngbin1014 -> 1710 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.pngbin0 -> 1470 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.pngbin1031 -> 1756 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.pngbin0 -> 1237 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.pngbin161 -> 252 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.pngbin0 -> 252 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.pngbin162 -> 251 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.pngbin0 -> 251 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.pngbin0 -> 244 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.pngbin0 -> 245 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.pngbin160 -> 220 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.pngbin0 -> 220 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.pngbin162 -> 253 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.pngbin0 -> 253 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.pngbin557 -> 773 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.pngbin0 -> 709 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.pngbin687 -> 1013 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.pngbin0 -> 959 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.pngbin871 -> 686 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.pngbin0 -> 646 bytes
-rw-r--r--java/res/drawable-hdpi/suggestions_strip_divider_holo.png (renamed from java/res/drawable-hdpi/suggestions_strip_divider.png)bin73 -> 73 bytes
-rw-r--r--java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.pngbin0 -> 329 bytes
-rw-r--r--java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.pngbin0 -> 328 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.pngbin14841 -> 900 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.pngbin0 -> 981 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_done_lxx_light.pngbin0 -> 713 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_go_lxx_light.pngbin0 -> 573 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.pngbin14956 -> 1380 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.pngbin0 -> 1504 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_next_lxx_light.pngbin0 -> 655 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.pngbin0 -> 654 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_return_lxx_light.pngbin0 -> 649 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_search_lxx_light.pngbin0 -> 1022 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_send_lxx_light.pngbin0 -> 936 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.pngbin14913 -> 1062 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.pngbin0 -> 1197 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.pngbin0 -> 810 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.pngbin901 -> 747 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.pngbin0 -> 806 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.pngbin14888 -> 1134 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.pngbin0 -> 1134 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.pngbin303 -> 334 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.pngbin0 -> 334 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.pngbin14761 -> 965 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.pngbin0 -> 1006 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.pngbin14896 -> 1126 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.pngbin0 -> 1238 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.pngbin655 -> 1094 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.pngbin0 -> 974 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.pngbin684 -> 1159 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.pngbin0 -> 868 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.pngbin143 -> 227 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.pngbin0 -> 228 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.pngbin138 -> 242 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.pngbin0 -> 239 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.pngbin0 -> 196 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.pngbin0 -> 197 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.pngbin127 -> 213 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.pngbin0 -> 216 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.pngbin144 -> 241 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.pngbin0 -> 248 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.pngbin361 -> 513 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.pngbin0 -> 497 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.pngbin398 -> 656 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.pngbin0 -> 647 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.pngbin589 -> 455 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.pngbin0 -> 442 bytes
-rw-r--r--java/res/drawable-mdpi/suggestions_strip_divider_holo.png (renamed from java/res/drawable-mdpi/suggestions_strip_divider.png)bin324 -> 324 bytes
-rw-r--r--java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.pngbin0 -> 324 bytes
-rw-r--r--java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.pngbin0 -> 324 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.pngbin14721 -> 690 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.pngbin0 -> 710 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_done_lxx_light.pngbin0 -> 556 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_go_lxx_light.pngbin0 -> 465 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.pngbin14786 -> 912 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.pngbin0 -> 1004 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_next_lxx_light.pngbin0 -> 552 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.pngbin0 -> 560 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_return_lxx_light.pngbin0 -> 536 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_search_lxx_light.pngbin0 -> 742 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_send_lxx_light.pngbin0 -> 694 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.pngbin14781 -> 827 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.pngbin0 -> 901 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.pngbin0 -> 665 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.pngbin708 -> 609 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.pngbin0 -> 667 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.pngbin14720 -> 777 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.pngbin0 -> 777 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.pngbin244 -> 260 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.pngbin0 -> 261 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.pngbin14690 -> 707 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.pngbin0 -> 732 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.pngbin14768 -> 807 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.pngbin0 -> 842 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.pngbin1364 -> 2258 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.pngbin0 -> 1978 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.pngbin1441 -> 2380 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.pngbin0 -> 1648 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.pngbin282 -> 286 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.pngbin0 -> 281 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.pngbin295 -> 291 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.pngbin0 -> 285 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.pngbin0 -> 262 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.pngbin0 -> 263 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.pngbin276 -> 261 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.pngbin0 -> 266 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.pngbin295 -> 288 bytes
-rw-r--r--java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.pngbin0 -> 313 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.pngbin765 -> 1064 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.pngbin0 -> 942 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.pngbin835 -> 1302 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.pngbin0 -> 1222 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.pngbin1246 -> 920 bytes
-rw-r--r--java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.pngbin0 -> 845 bytes
-rw-r--r--java/res/drawable-xhdpi/suggestions_strip_divider_holo.png (renamed from java/res/drawable-xhdpi/suggestions_strip_divider.png)bin330 -> 330 bytes
-rw-r--r--java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.pngbin0 -> 329 bytes
-rw-r--r--java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.pngbin0 -> 329 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.pngbin14911 -> 1007 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.pngbin0 -> 1083 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.pngbin0 -> 783 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.pngbin0 -> 577 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.pngbin15109 -> 1847 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.pngbin0 -> 2012 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.pngbin0 -> 708 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.pngbin0 -> 716 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.pngbin0 -> 663 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.pngbin0 -> 1194 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.pngbin0 -> 1043 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.pngbin15050 -> 1418 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.pngbin0 -> 1591 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.pngbin0 -> 989 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.pngbin1156 -> 893 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.pngbin0 -> 972 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.pngbin14966 -> 1344 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.pngbin0 -> 1344 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.pngbin393 -> 416 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.pngbin0 -> 416 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.pngbin14878 -> 1144 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.pngbin0 -> 1184 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.pngbin15029 -> 1281 bytes
-rw-r--r--java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.pngbin0 -> 1459 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.pngbin2477 -> 3615 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.pngbin0 -> 3280 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.pngbin2635 -> 3712 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.pngbin0 -> 2662 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.pngbin171 -> 306 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.pngbin0 -> 296 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.pngbin158 -> 321 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.pngbin0 -> 306 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.pngbin0 -> 317 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.pngbin0 -> 319 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.pngbin165 -> 288 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.pngbin0 -> 292 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.pngbin173 -> 314 bytes
-rw-r--r--java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.pngbin0 -> 339 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.pngbin1187 -> 1756 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.pngbin0 -> 1569 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.pngbin1358 -> 2162 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.pngbin0 -> 1999 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.pngbin2732 -> 1519 bytes
-rw-r--r--java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.pngbin0 -> 1336 bytes
-rw-r--r--java/res/drawable-xxhdpi/suggestions_strip_divider_holo.png (renamed from java/res/drawable-xxhdpi/suggestions_strip_divider.png)bin1007 -> 1007 bytes
-rw-r--r--java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.pngbin0 -> 331 bytes
-rw-r--r--java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.pngbin0 -> 331 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.pngbin15113 -> 1489 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.pngbin0 -> 1634 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.pngbin0 -> 1217 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.pngbin0 -> 787 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.pngbin15436 -> 2599 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.pngbin0 -> 2865 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.pngbin0 -> 977 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.pngbin0 -> 987 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.pngbin0 -> 840 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.pngbin0 -> 1845 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.pngbin0 -> 1431 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.pngbin15329 -> 1872 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.pngbin0 -> 2263 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.pngbin0 -> 1365 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.pngbin1563 -> 1223 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.pngbin0 -> 1299 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.pngbin15210 -> 1969 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.pngbin0 -> 1967 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.pngbin609 -> 659 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.pngbin0 -> 659 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.pngbin15114 -> 1579 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.pngbin0 -> 1664 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.pngbin15261 -> 1865 bytes
-rw-r--r--java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.pngbin0 -> 2093 bytes
-rw-r--r--java/res/drawable/btn_keyboard_key_functional_lxx_light.xml22
-rw-r--r--java/res/drawable/btn_keyboard_key_lxx_light.xml42
-rw-r--r--java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml21
-rw-r--r--java/res/drawable/btn_keyboard_spacebar_lxx_light.xml21
-rw-r--r--java/res/drawable/btn_suggestion_lxx_light.xml27
-rw-r--r--java/res/drawable/keyboard_key_feedback_lxx_light.xml36
-rw-r--r--java/res/layout/emoji_palettes_view.xml6
-rw-r--r--java/res/layout/suggestion_divider.xml4
-rw-r--r--java/res/values/colors.xml43
-rw-r--r--java/res/values/keyboard-icons-lxx-dark.xml2
-rw-r--r--java/res/values/keyboard-icons-lxx-light.xml46
-rw-r--r--java/res/values/keyboard-themes.xml4
-rw-r--r--java/res/values/themes-ics.xml1
-rw-r--r--java/res/values/themes-klp.xml1
-rw-r--r--java/res/values/themes-lxx-dark.xml6
-rw-r--r--java/res/values/themes-lxx-light.xml140
-rw-r--r--java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardTheme.java7
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java338
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java136
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java45
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java137
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java56
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java61
212 files changed, 648 insertions, 568 deletions
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
index 82e850c6b..bbdc41116 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 000000000..854c849cb
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index e2b9e3d9c..33f7d8077 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 000000000..7a7e98297
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 2e6489cf5..b8bb10f24 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 000000000..0802b11f8
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index 0b1482281..b1f543548 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 000000000..f0a89c524
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 000000000..0ef8cc764
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 000000000..45d586570
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 4bf38fc35..bfc981edb 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 000000000..1b52bcc85
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index ea12c7776..fbb4f8c43 100644
--- a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 000000000..1bc2a233f
--- /dev/null
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png
index 9d6514bdd..e49efe5dc 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 000000000..615a40a3d
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
index 8ad54f69d..a0511a1a1 100644
--- a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 000000000..c5871f699
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
index f9dd3b8b1..c7b147f5f 100644
--- a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 000000000..41b0a1b35
--- /dev/null
+++ b/java/res/drawable-hdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider.png b/java/res/drawable-hdpi/suggestions_strip_divider_holo.png
index 5d44d9ce5..5d44d9ce5 100644
--- a/java/res/drawable-hdpi/suggestions_strip_divider.png
+++ b/java/res/drawable-hdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 000000000..68a2270a5
--- /dev/null
+++ b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 000000000..12485ef1a
--- /dev/null
+++ b/java/res/drawable-hdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
index 5f5eb3fe7..2e68b2016 100644
--- a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 000000000..e17d29715
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 000000000..04eab599d
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 000000000..189d609e1
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
index edf9a20de..4fc82d6d4 100644
--- a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 000000000..1c7af2018
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 000000000..70679b028
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 000000000..952dd4fd2
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 000000000..9ab1a3f50
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 000000000..ec7062723
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 000000000..bbc5094c9
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
index f2613023f..23eac1674 100644
--- a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 000000000..144b15b0c
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 000000000..657f65acc
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
index cb03e55a8..427f01468 100644
--- a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 000000000..a46d65383
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
index 3999d1e2d..2cfe1d406 100644
--- a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 000000000..2cfe1d406
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_smiley_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
index f344deeec..c57cb73a5 100644
--- a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 000000000..c27a36e81
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
index 6b68c8af5..80d12481a 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 000000000..d6b070eb6
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
index e67697b3f..e2bd604b8 100644
--- a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 000000000..d33ab4e88
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
index 281b5d3bc..787ce45ce 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 000000000..e7a585b70
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index eb1564353..7e34c6cf1 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 000000000..5a6513392
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 9f244f2e9..bb9fc5910 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 000000000..afcb4f9b1
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index c5b3fbbd7..5b23e22b4 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 000000000..3323d2c7d
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 000000000..cf12a8c1f
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 000000000..e388cfb2f
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 66824cf8e..1b0ed0c97 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 000000000..d8e4355ce
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 527dfd014..f990a9e7c 100644
--- a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 000000000..b9a42fa72
--- /dev/null
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png
index d3200921a..8bd1343b7 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 000000000..f97cfb913
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
index 60a36333e..37e45fb28 100644
--- a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 000000000..1fe06f9fe
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 896505518..f12ba5f7f 100644
--- a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 000000000..1edf94fbf
--- /dev/null
+++ b/java/res/drawable-mdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider.png b/java/res/drawable-mdpi/suggestions_strip_divider_holo.png
index 21e904939..21e904939 100644
--- a/java/res/drawable-mdpi/suggestions_strip_divider.png
+++ b/java/res/drawable-mdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 000000000..c8afc6681
--- /dev/null
+++ b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 000000000..051e66ccd
--- /dev/null
+++ b/java/res/drawable-mdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
index 2d3ac9749..ba74e5e14 100644
--- a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 000000000..007b5ea49
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 000000000..930f97111
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 000000000..f9975c34f
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
index a90bf757c..44dc1b620 100644
--- a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 000000000..e1c1265d5
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 000000000..e18b1cf1c
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 000000000..2044db67e
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 000000000..bfc7d7108
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 000000000..05fbe83c8
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 000000000..2de9b5619
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
index dea7addfe..a04f4f515 100644
--- a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 000000000..f70030ba3
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 000000000..298cb9526
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
index c10066e81..d5bd44cb3 100644
--- a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 000000000..056fc51d6
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
index 8276d992c..2258851a9 100644
--- a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 000000000..ff49d58e1
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_smiley_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
index ed32cf652..30892b8ee 100644
--- a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 000000000..ab64cd642
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
index 5661f6b33..d40b10687 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 000000000..0ddcb792c
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
index 5182f1e8f..7bde452e7 100644
--- a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 000000000..8831bc04c
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
index 0f6a3e1e0..47264065a 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 000000000..dca7a3274
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index 44c84f1f8..8063fcd82 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 000000000..fa32a2c6e
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 98c085b15..daa3c8afc 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 000000000..e58df5cb0
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index f0c132869..ea002f53b 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 000000000..5a9507387
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 000000000..4c024e261
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 000000000..0b340e2cb
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index a2b17ba50..10a6ab5f9 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 000000000..58b705414
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 99ff0affb..e6227c34b 100644
--- a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 000000000..3da5f47b0
--- /dev/null
+++ b/java/res/drawable-xhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png
index d40afebd8..8407877e2 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 000000000..bd6ec94b8
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
index d1a2f7599..630340ff0 100644
--- a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 000000000..eef27a377
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 36df715b6..19957fa5f 100644
--- a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 000000000..8a51d7148
--- /dev/null
+++ b/java/res/drawable-xhdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider.png b/java/res/drawable-xhdpi/suggestions_strip_divider_holo.png
index 4101ebc59..4101ebc59 100644
--- a/java/res/drawable-xhdpi/suggestions_strip_divider.png
+++ b/java/res/drawable-xhdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 000000000..0334602a2
--- /dev/null
+++ b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 000000000..0047e5c17
--- /dev/null
+++ b/java/res/drawable-xhdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
index 7c9f34f12..ffb9598cc 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 000000000..df4e358a1
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 000000000..070fe8d7b
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 000000000..33bbe3c50
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
index f964346c1..bdc126796 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 000000000..023e64720
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 000000000..2c1fe6d3c
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 000000000..49b2651f3
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 000000000..85473bc08
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 000000000..a95d55441
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 000000000..21b0ac0c5
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
index 8c83d9fb6..ec72c3867 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 000000000..d46c26bc8
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 000000000..64fdb1762
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
index 19acffaeb..bf5560580 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 000000000..3a56ed9dc
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
index 78923fadb..a1d4b2259 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 000000000..df3eba750
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_smiley_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
index 71234e570..9eaa00560 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 000000000..0cf38f2af
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
index 4e9631e7b..5c2b40603 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 000000000..c9b25040c
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
index 66c0e3c56..a32f741b3 100644
--- a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 000000000..1398a3ed6
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
index dc67c6f19..f49239794 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png
new file mode 100644
index 000000000..1f5f922dc
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
index 2e12dd1d4..65e455c7b 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
new file mode 100644
index 000000000..031014360
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_active_pressed_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
index 4ec5864c1..535a00ade 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
new file mode 100644
index 000000000..fb1dc62d1
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
index 6b5c0c0a4..2166f62ad 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
new file mode 100644
index 000000000..70346218f
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_normal_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
new file mode 100644
index 000000000..f74ac5ce4
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
new file mode 100644
index 000000000..e58d6643f
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_popup_selected_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
index 6fd8eedd3..2fd8b670b 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
new file mode 100644
index 000000000..8e01cfa2d
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_off_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
index 91322882f..d0252e165 100644
--- a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
new file mode 100644
index 000000000..1619411b2
--- /dev/null
+++ b/java/res/drawable-xxhdpi/btn_keyboard_key_pressed_on_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png
index f7814917d..284302f9b 100644
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png
new file mode 100644
index 000000000..dcc0ab084
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
index a79499f24..1ae262510 100644
--- a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
new file mode 100644
index 000000000..5fd175187
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_key_feedback_more_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
index 91d5d7f90..92c479da8 100644
--- a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png
new file mode 100644
index 000000000..1336d8005
--- /dev/null
+++ b/java/res/drawable-xxhdpi/keyboard_popup_panel_background_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_holo.png
index d13ca42aa..d13ca42aa 100644
--- a/java/res/drawable-xxhdpi/suggestions_strip_divider.png
+++ b/java/res/drawable-xxhdpi/suggestions_strip_divider_holo.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png
new file mode 100644
index 000000000..5f0b3dec5
--- /dev/null
+++ b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png
new file mode 100644
index 000000000..9b37dd094
--- /dev/null
+++ b/java/res/drawable-xxhdpi/suggestions_strip_divider_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
index dd95be61e..0196033a9 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png
new file mode 100644
index 000000000..c3937c491
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_delete_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png
new file mode 100644
index 000000000..0347327ff
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_done_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png
new file mode 100644
index 000000000..0c66a6bc1
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_go_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
index fc85e512d..151fafe8e 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png
new file mode 100644
index 000000000..82b4d51e5
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_language_switch_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png
new file mode 100644
index 000000000..4e1407012
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_next_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png
new file mode 100644
index 000000000..78865cb0e
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_previous_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png
new file mode 100644
index 000000000..a429d6634
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_return_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png
new file mode 100644
index 000000000..1b9952aa6
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_search_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png
new file mode 100644
index 000000000..a886505e1
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_send_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
index d513ad9e6..143ec0038 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png
new file mode 100644
index 000000000..e5be02811
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_settings_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png
new file mode 100644
index 000000000..2da7b6514
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_locked_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
index ddfc1a90d..774174c8b 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png
new file mode 100644
index 000000000..ee51c562b
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_shift_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
index a4df3bb0e..ea89a8790 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.png
new file mode 100644
index 000000000..08d4f8adc
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_smiley_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
index 01075ebf3..abd263f00 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_dark.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png
new file mode 100644
index 000000000..90c963733
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_spacebar_lxx_light.9.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
index a36724cac..9bc9effcb 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png
new file mode 100644
index 000000000..42331e920
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_lxx_light.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
index 2706dca57..413c4ff3f 100644
--- a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_dark.png
Binary files differ
diff --git a/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png
new file mode 100644
index 000000000..5a3ed0d48
--- /dev/null
+++ b/java/res/drawable-xxhdpi/sym_keyboard_voice_off_lxx_light.png
Binary files differ
diff --git a/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml b/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml
new file mode 100644
index 000000000..e518ca11d
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_functional_lxx_light.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- Functional keys. -->
+ <item android:state_pressed="true"
+ android:drawable="@color/key_background_pressed_lxx_light" />
+ <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_keyboard_key_lxx_light.xml b/java/res/drawable/btn_keyboard_key_lxx_light.xml
new file mode 100644
index 000000000..60fe02dd2
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_lxx_light.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- Action keys. -->
+ <item android:state_active="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_active_pressed_lxx_light" />
+ <item android:state_active="true"
+ android:drawable="@drawable/btn_keyboard_key_active_lxx_light" />
+
+ <!-- Toggle keys. Use checkable/checked state. -->
+ <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_on_lxx_light" />
+ <item android:state_checkable="true" android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_pressed_off_lxx_light" />
+ <item android:state_checkable="true" android:state_checked="true"
+ android:drawable="@drawable/btn_keyboard_key_normal_on_lxx_light" />
+ <item android:state_checkable="true"
+ android:drawable="@drawable/btn_keyboard_key_normal_off_lxx_light" />
+
+ <!-- Empty background keys. -->
+ <item android:state_empty="true"
+ android:drawable="@color/key_background_lxx_light" />
+
+ <!-- Normal keys. -->
+ <item android:state_pressed="true"
+ android:drawable="@color/key_background_pressed_lxx_light" />
+ <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
new file mode 100644
index 000000000..dee645712
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_key_popup_lxx_dark.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_keyboard_key_popup_selected_lxx_dark" />
+ <item android:drawable="@android:color/transparent" />
+</selector>
diff --git a/java/res/drawable/btn_keyboard_spacebar_lxx_light.xml b/java/res/drawable/btn_keyboard_spacebar_lxx_light.xml
new file mode 100644
index 000000000..acd19fda4
--- /dev/null
+++ b/java/res/drawable/btn_keyboard_spacebar_lxx_light.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@color/key_background_pressed_lxx_light" />
+ <item android:drawable="@color/key_background_lxx_light" />
+</selector>
diff --git a/java/res/drawable/btn_suggestion_lxx_light.xml b/java/res/drawable/btn_suggestion_lxx_light.xml
new file mode 100644
index 000000000..84a91209e
--- /dev/null
+++ b/java/res/drawable/btn_suggestion_lxx_light.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<selector
+ xmlns:android="http://schemas.android.com/apk/res/android"
+>
+ <item
+ android:state_pressed="true"
+ android:drawable="@color/suggested_word_background_selected_lxx_dark" />
+</selector>
diff --git a/java/res/drawable/keyboard_key_feedback_lxx_light.xml b/java/res/drawable/keyboard_key_feedback_lxx_light.xml
new file mode 100644
index 000000000..f4341c9b5
--- /dev/null
+++ b/java/res/drawable/keyboard_key_feedback_lxx_light.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- Left edge -->
+ <item latin:state_left_edge="true" latin:state_has_morekeys="true"
+ android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+ <item latin:state_left_edge="true"
+ android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+
+ <!-- Right edge -->
+ <item latin:state_right_edge="true" latin:state_has_morekeys="true"
+ android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+ <item latin:state_right_edge="true"
+ android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+
+ <item latin:state_has_morekeys="true"
+ android:drawable="@drawable/keyboard_key_feedback_more_background_lxx_light" />
+ <item android:drawable="@drawable/keyboard_key_feedback_background_lxx_light" />
+</selector>
diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml
index 9ff090aad..a6ea38ba4 100644
--- a/java/res/layout/emoji_palettes_view.xml
+++ b/java/res/layout/emoji_palettes_view.xml
@@ -30,6 +30,7 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/config_suggestions_strip_height"
+ style="?attr/suggestionStripViewStyle"
>
<TabHost
android:id="@+id/emoji_category_tabhost"
@@ -57,10 +58,7 @@
android:visibility="gone" />
</FrameLayout>
</TabHost>
- <View
- android:layout_width="2dip"
- android:layout_height="match_parent"
- android:background="@drawable/suggestions_strip_divider" />
+ <include layout="@layout/suggestion_divider" />
<!-- TODO: Implement KeyView and replace this. -->
<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings.
We just need to ignore the system's audio and haptic feedback settings. -->
diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml
index 563599d82..dfea017e6 100644
--- a/java/res/layout/suggestion_divider.xml
+++ b/java/res/layout/suggestion_divider.xml
@@ -26,9 +26,9 @@
android:layout_height="match_parent"
android:padding="0dp"
android:gravity="center"
- android:src="@drawable/suggestions_strip_divider"
android:contentDescription="@null"
android:clickable="false"
android:longClickable="false"
android:hapticFeedbackEnabled="false"
- android:soundEffectsEnabled="false" />
+ android:soundEffectsEnabled="false"
+ style="?attr/suggestionStripViewStyle" />
diff --git a/java/res/values/colors.xml b/java/res/values/colors.xml
index 0eee08de2..ad7a04ebf 100644
--- a/java/res/values/colors.xml
+++ b/java/res/values/colors.xml
@@ -40,21 +40,36 @@
<color name="typed_word_color_klp">#D8F0F0F0</color>
<color name="suggested_word_color_klp">#B2F0F0F0</color>
<color name="highlight_translucent_color_klp">#99E0E0E0</color>
- <!-- Color resources for LXX theme. Base color = F0F0F0 -->
- <color name="key_text_color_lxx_dark">#FFFFFF</color>
- <color name="key_text_inactive_color_lxx_dark">#808184</color>
- <color name="key_hint_letter_color_lxx_dark">#808184</color>
- <color name="highlight_color_lxx_dark">#7FCAC3</color>
- <color name="typed_word_color_lxx_dark">#D87FCAC3</color>
- <color name="suggested_word_color_lxx_dark">#B27FCAC3</color>
- <color name="highlight_translucent_color_lxx_dark">#997FCAC3</color>
- <color name="keyboard_background_lxx_dark">#384248</color>
- <color name="key_background_lxx_dark">#384248</color>
- <color name="key_background_pressed_lxx_dark">#546872</color>
- <color name="suggestions_strip_background_lxx_dark">#263238</color>
- <color name="suggested_word_background_selected_lxx_dark">#384248</color>
+ <!-- Color resources for LXX_Light theme. -->
+ <color name="key_text_color_lxx_light">#546E7A</color>
+ <color name="key_text_inactive_color_lxx_light">#99546E7A</color>
+ <color name="key_hint_letter_color_lxx_light">#99546E7A</color>
+ <color name="highlight_color_lxx_light">#4DB6AC</color>
+ <color name="typed_word_color_lxx_light">#D84DB6AC</color>
+ <color name="suggested_word_color_lxx_light">#B24DB6AC</color>
+ <color name="highlight_translucent_color_lxx_light">#994DB6AC</color>
+ <color name="keyboard_background_lxx_light">#ECEFF1</color>
+ <color name="key_background_lxx_light">#ECEFF1</color>
+ <color name="key_background_pressed_lxx_light">#26546E7A</color>
+ <color name="suggestions_strip_background_lxx_light">#E4E7E9</color>
+ <color name="suggested_word_background_selected_lxx_light">#26546E7A</color>
+ <color name="gesture_floating_preview_color_lxx_light">#C0000000</color>
+ <color name="emoji_tab_page_indicator_background_lxx_light">#E4E7E9</color>
+ <!-- Color resources for LXX_Dark theme. -->
+ <color name="key_text_color_lxx_dark">#B3FFFFFF</color>
+ <color name="key_text_inactive_color_lxx_dark">#66FFFFFF</color>
+ <color name="key_hint_letter_color_lxx_dark">#66FFFFFF</color>
+ <color name="highlight_color_lxx_dark">#80CBC4</color>
+ <color name="typed_word_color_lxx_dark">#D880CBC4</color>
+ <color name="suggested_word_color_lxx_dark">#B280CBC4</color>
+ <color name="highlight_translucent_color_lxx_dark">#9980CBC4</color>
+ <color name="keyboard_background_lxx_dark">#263238</color>
+ <color name="key_background_lxx_dark">#263238</color>
+ <color name="key_background_pressed_lxx_dark">#26CFD8DC</color>
+ <color name="suggestions_strip_background_lxx_dark">#21272B</color>
+ <color name="suggested_word_background_selected_lxx_dark">#26CFD8DC</color>
<color name="gesture_floating_preview_color_lxx_dark">#C0000000</color>
- <color name="emoji_tab_page_indicator_background_lxx_dark">#263238</color>
+ <color name="emoji_tab_page_indicator_background_lxx_dark">#21272B</color>
<!-- Color resources for setup wizard and tutorial -->
<color name="setup_background">#FFEBEBEB</color>
<color name="setup_text_dark">#FF707070</color>
diff --git a/java/res/values/keyboard-icons-lxx-dark.xml b/java/res/values/keyboard-icons-lxx-dark.xml
index 7988e739e..b1549f2ca 100644
--- a/java/res/values/keyboard-icons-lxx-dark.xml
+++ b/java/res/values/keyboard-icons-lxx-dark.xml
@@ -21,7 +21,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="KeyboardIcons.LXX_Dark">
<!-- Keyboard icons -->
- <!-- TODO: Update those icons for LXX theme. -->
+ <!-- TODO: Update those icons for LXX_Dark theme. -->
<item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_dark</item>
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_dark</item>
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_dark</item>
diff --git a/java/res/values/keyboard-icons-lxx-light.xml b/java/res/values/keyboard-icons-lxx-light.xml
new file mode 100644
index 000000000..651e75ce2
--- /dev/null
+++ b/java/res/values/keyboard-icons-lxx-light.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="KeyboardIcons.LXX_Light">
+ <!-- Keyboard icons -->
+ <!-- TODO: Update those icons for LXX_Light theme. -->
+ <item name="iconShiftKey">@drawable/sym_keyboard_shift_lxx_light</item>
+ <item name="iconDeleteKey">@drawable/sym_keyboard_delete_lxx_light</item>
+ <item name="iconSettingsKey">@drawable/sym_keyboard_settings_lxx_light</item>
+ <item name="iconSpaceKey">@drawable/sym_keyboard_spacebar_lxx_light</item>
+ <item name="iconEnterKey">@drawable/sym_keyboard_return_lxx_light</item>
+ <item name="iconGoKey">@drawable/sym_keyboard_go_lxx_light</item>
+ <item name="iconSearchKey">@drawable/sym_keyboard_search_lxx_light</item>
+ <item name="iconSendKey">@drawable/sym_keyboard_send_lxx_light</item>
+ <item name="iconNextKey">@drawable/sym_keyboard_next_lxx_light</item>
+ <item name="iconDoneKey">@drawable/sym_keyboard_done_lxx_light</item>
+ <item name="iconPreviousKey">@drawable/sym_keyboard_previous_lxx_light</item>
+ <item name="iconTabKey">@drawable/sym_keyboard_tab_holo_dark</item>
+ <item name="iconShortcutKey">@drawable/sym_keyboard_voice_lxx_light</item>
+ <item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo_dark</item>
+ <item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_lxx_dark</item>
+ <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_lxx_light</item>
+ <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch_lxx_light</item>
+ <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo_dark</item>
+ <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo_dark</item>
+ <item name="iconEmojiKey">@drawable/sym_keyboard_smiley_lxx_light</item>
+ </style>
+</resources>
diff --git a/java/res/values/keyboard-themes.xml b/java/res/values/keyboard-themes.xml
index 28a34c315..9d772c4e7 100644
--- a/java/res/values/keyboard-themes.xml
+++ b/java/res/values/keyboard-themes.xml
@@ -20,15 +20,15 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- For keyboard color scheme option dialog. -->
<string-array name="keyboard_theme_names" translatable="false">
- <!-- TODO: Implement Material Light theme. -->
+ <item>@string/keyboard_theme_material_light</item>
<item>@string/keyboard_theme_material_dark</item>
<item>@string/keyboard_theme_holo_white</item>
<item>@string/keyboard_theme_holo_blue</item>
</string-array>
<!-- An element must be a keyboard theme id of {@link KeyboardTheme#THEME_ID_*}. -->
<string-array name="keyboard_theme_ids" translatable="false">
- <!-- TODO: Implement Material Light theme. -->
<item>3</item>
+ <item>4</item>
<item>2</item>
<item>0</item>
</string-array>
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 073ae90b9..6118ce177 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -121,6 +121,7 @@
<item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
<item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
<item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
+ <item name="android:src">@drawable/suggestions_strip_divider_holo</item>
<item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
<item name="colorValidTypedWord">@color/typed_word_color_ics</item>
<item name="colorTypedWord">@color/typed_word_color_ics</item>
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index f895de572..193386062 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -121,6 +121,7 @@
<item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
<item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
<item name="android:background">@drawable/keyboard_suggest_strip_holo</item>
+ <item name="android:src">@drawable/suggestions_strip_divider_holo</item>
<item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
<item name="colorValidTypedWord">@color/typed_word_color_klp</item>
<item name="colorTypedWord">@color/typed_word_color_klp</item>
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index 1db8f428e..c04e04d56 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -34,7 +34,7 @@
parent="Keyboard"
>
<!-- This should be aligned with KeyboardSwitcher.KEYBOARD_THEMES[] -->
- <item name="themeId">3</item>
+ <item name="themeId">4</item>
<item name="keyboardTopPadding">@fraction/config_keyboard_top_padding_holo</item>
<item name="keyboardBottomPadding">@fraction/config_keyboard_bottom_padding_holo</item>
<item name="horizontalGap">@fraction/config_key_horizontal_gap_holo</item>
@@ -108,8 +108,7 @@
parent="KeyboardView.LXX_Dark"
>
<item name="android:background">@drawable/keyboard_popup_panel_background_lxx_dark</item>
- <!-- Reuse KLP key background -->
- <item name="keyBackground">@drawable/btn_keyboard_key_popup_klp</item>
+ <item name="keyBackground">@drawable/btn_keyboard_key_popup_lxx_dark</item>
<item name="keyTypeface">normal</item>
<item name="verticalCorrection">@dimen/config_more_keys_keyboard_vertical_correction_holo</item>
</style>
@@ -122,6 +121,7 @@
<item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
<item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
<item name="android:background">@color/suggestions_strip_background_lxx_dark</item>
+ <item name="android:src">@drawable/suggestions_strip_divider_lxx_dark</item>
<item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
<item name="colorValidTypedWord">@color/typed_word_color_lxx_dark</item>
<item name="colorTypedWord">@color/typed_word_color_lxx_dark</item>
diff --git a/java/res/values/themes-lxx-light.xml b/java/res/values/themes-lxx-light.xml
new file mode 100644
index 000000000..3695f8046
--- /dev/null
+++ b/java/res/values/themes-lxx-light.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="KeyboardTheme.LXX_Light" parent="KeyboardIcons.LXX_Light">
+ <item name="keyboardStyle">@style/Keyboard.LXX_Light</item>
+ <item name="keyboardViewStyle">@style/KeyboardView.LXX_Light</item>
+ <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Light</item>
+ <item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Light</item>
+ <item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Light</item>
+ <item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Light</item>
+ <item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX_Light</item>
+ <item name="suggestionWordStyle">@style/SuggestionWord.LXX_Light</item>
+ </style>
+ <style
+ name="Keyboard.LXX_Light"
+ parent="Keyboard"
+ >
+ <!-- This should be aligned with KeyboardSwitcher.KEYBOARD_THEMES[] -->
+ <item name="themeId">3</item>
+ <item name="keyboardTopPadding">@fraction/config_keyboard_top_padding_holo</item>
+ <item name="keyboardBottomPadding">@fraction/config_keyboard_bottom_padding_holo</item>
+ <item name="horizontalGap">@fraction/config_key_horizontal_gap_holo</item>
+ <item name="verticalGap">@fraction/config_key_vertical_gap_holo</item>
+ <item name="touchPositionCorrectionData">@array/touch_position_correction_data_holo</item>
+ </style>
+ <style
+ name="KeyboardView.LXX_Light"
+ parent="KeyboardView"
+ >
+ <item name="android:background">@color/keyboard_background_lxx_light</item>
+ <item name="keyBackground">@drawable/btn_keyboard_key_lxx_light</item>
+ <item name="functionalKeyBackground">@drawable/btn_keyboard_key_functional_lxx_light</item>
+ <item name="spacebarBackground">@drawable/btn_keyboard_spacebar_lxx_light</item>
+ <item name="spacebarIconWidthRatio">0.9</item>
+ <item name="keyTypeface">normal</item>
+ <item name="keyTextColor">@color/key_text_color_lxx_light</item>
+ <item name="keyTextInactivatedColor">@color/key_text_inactive_color_lxx_light</item>
+ <item name="functionalTextColor">@color/key_hint_letter_color_lxx_light</item>
+ <item name="keyHintLetterColor">@color/key_hint_letter_color_lxx_light</item>
+ <item name="keyHintLabelColor">@color/key_text_inactive_color_lxx_light</item>
+ <item name="keyShiftedLetterHintInactivatedColor">@color/key_text_inactive_color_lxx_light</item>
+ <item name="keyShiftedLetterHintActivatedColor">@color/key_text_color_lxx_light</item>
+ <item name="keyPreviewTextColor">@color/key_text_color_lxx_light</item>
+ <!-- A negative value to disable key text shadow layer. -->
+ <item name="keyTextShadowRadius">-1.0</item>
+ </style>
+ <style
+ name="MainKeyboardView.LXX_Light"
+ parent="KeyboardView.LXX_Light"
+ >
+ <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_lxx_light</item>
+ <item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
+ <item name="gestureFloatingPreviewTextColor">@color/highlight_color_lxx_light</item>
+ <item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_lxx_light</item>
+ <item name="gestureTrailColor">@color/highlight_color_lxx_light</item>
+ <item name="slidingKeyInputPreviewColor">@color/highlight_translucent_color_lxx_light</item>
+ <item name="languageOnSpacebarTextColor">@color/key_text_inactive_color_lxx_light</item>
+ <!-- A negative value to disable text shadow layer. -->
+ <item name="languageOnSpacebarTextShadowRadius">-1.0</item>
+ </style>
+ <!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
+ for instance delete button, need themed {@link KeyboardView} attributes. -->
+ <style
+ name="EmojiPalettesView.LXX_Light"
+ parent="MainKeyboardView.LXX_Light"
+ >
+ <item name="categoryIndicatorEnabled">false</item>
+ <item name="categoryPageIndicatorColor">@color/highlight_color_lxx_light</item>
+ <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_lxx_light</item>
+ <!-- TODO: Update those icons to LXX_Light theme. -->
+ <item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
+ <item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
+ <item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
+ <item name="iconEmojiCategory3Tab">@drawable/ic_emoji_nature_holo_dark</item>
+ <item name="iconEmojiCategory4Tab">@drawable/ic_emoji_places_holo_dark</item>
+ <item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
+ <item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
+ </style>
+ <style
+ name="MoreKeysKeyboard.LXX_Light"
+ parent="Keyboard.LXX_Light"
+ >
+ <item name="keyboardTopPadding">0%p</item>
+ <item name="keyboardBottomPadding">0%p</item>
+ <item name="horizontalGap">0%p</item>
+ <item name="touchPositionCorrectionData">@null</item>
+ </style>
+ <style
+ name="MoreKeysKeyboardView.LXX_Light"
+ parent="KeyboardView.LXX_Light"
+ >
+ <item name="android:background">@drawable/keyboard_popup_panel_background_lxx_light</item>
+ <!-- Reuse KLP key background -->
+ <item name="keyBackground">@drawable/btn_keyboard_key_popup_klp</item>
+ <item name="keyTypeface">normal</item>
+ <item name="verticalCorrection">@dimen/config_more_keys_keyboard_vertical_correction_holo</item>
+ </style>
+ <style
+ name="SuggestionStripView.LXX_Light"
+ parent="KeyboardView.LXX_Light"
+ >
+ <item name="suggestionsCountInStrip">@integer/config_suggestions_count_in_strip</item>
+ <item name="centerSuggestionPercentile">@fraction/config_center_suggestion_percentile</item>
+ <item name="maxMoreSuggestionsRow">@integer/config_max_more_suggestions_row</item>
+ <item name="minMoreSuggestionsWidth">@fraction/config_min_more_suggestions_width</item>
+ <item name="android:background">@color/suggestions_strip_background_lxx_light</item>
+ <item name="android:src">@drawable/suggestions_strip_divider_lxx_light</item>
+ <item name="suggestionStripOptions">autoCorrectBold|validTypedWordBold</item>
+ <item name="colorValidTypedWord">@color/typed_word_color_lxx_light</item>
+ <item name="colorTypedWord">@color/typed_word_color_lxx_light</item>
+ <item name="colorAutoCorrect">@color/highlight_color_lxx_light</item>
+ <item name="colorSuggested">@color/suggested_word_color_lxx_light</item>
+ <item name="alphaObsoleted">70%</item>
+ </style>
+ <style
+ name="SuggestionWord.LXX_Light"
+ parent="SuggestionWord"
+ >
+ <item name="android:background">@drawable/btn_suggestion_lxx_light</item>
+ <item name="android:textColor">@color/highlight_color_lxx_light</item>
+ </style>
+</resources>
diff --git a/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java
index 8bd919749..09f39a756 100644
--- a/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/TextInfoCompatUtils.java
@@ -22,7 +22,6 @@ import com.android.inputmethod.annotations.UsedForTesting;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-import java.util.Locale;
@UsedForTesting
public final class TextInfoCompatUtils {
@@ -50,9 +49,18 @@ public final class TextInfoCompatUtils {
sequenceNumber);
}
+ /**
+ * Returns the result of {@link TextInfo#getCharSequence()} when available. Otherwise returns
+ * the result of {@link TextInfo#getText()} as fall back.
+ * @param textInfo the instance for which {@link TextInfo#getCharSequence()} or
+ * {@link TextInfo#getText()} is called.
+ * @return the result of {@link TextInfo#getCharSequence()} when available. Otherwise returns
+ * the result of {@link TextInfo#getText()} as fall back. If {@code textInfo} is {@code null},
+ * returns {@code null}.
+ */
@UsedForTesting
- public static CharSequence getCharSequence(final TextInfo textInfo,
- final CharSequence defaultValue) {
+ public static CharSequence getCharSequenceOrString(final TextInfo textInfo) {
+ final CharSequence defaultValue = (textInfo == null ? null : textInfo.getText());
return (CharSequence) CompatUtils.invoke(textInfo, defaultValue,
TEXT_INFO_GET_CHAR_SEQUENCE);
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
index 7b41dfef6..4c2e0dd1d 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
@@ -34,7 +34,8 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> {
public static final int THEME_ID_ICS = 0;
public static final int THEME_ID_KLP = 2;
- public static final int THEME_ID_LXX_DARK = 3;
+ public static final int THEME_ID_LXX_LIGHT = 3;
+ public static final int THEME_ID_LXX_DARK = 4;
public static final int DEFAULT_THEME_ID = THEME_ID_KLP;
private static final KeyboardTheme[] KEYBOARD_THEMES = {
@@ -44,10 +45,12 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> {
new KeyboardTheme(THEME_ID_KLP, R.style.KeyboardTheme_KLP,
// Default theme for ICS, JB, and KLP.
VERSION_CODES.ICE_CREAM_SANDWICH),
- new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
+ new KeyboardTheme(THEME_ID_LXX_LIGHT, R.style.KeyboardTheme_LXX_Light,
// Default theme for LXX.
// TODO: Update this constant once the *next* version becomes available.
VERSION_CODES.CUR_DEVELOPMENT),
+ new KeyboardTheme(THEME_ID_LXX_DARK, R.style.KeyboardTheme_LXX_Dark,
+ VERSION_CODES.BASE),
};
static {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 90c8f618f..72b503138 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -16,22 +16,31 @@
package com.android.inputmethod.latin.spellcheck;
+import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.service.textservice.SpellCheckerService;
import android.text.InputType;
import android.util.Log;
+import android.util.LruCache;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;
import android.view.textservice.SuggestionsInfo;
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
+import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.ContactsBinaryDictionary;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryCollection;
+import com.android.inputmethod.latin.DictionaryFacilitator;
import com.android.inputmethod.latin.DictionaryFactory;
+import com.android.inputmethod.latin.PrevWordsInfo;
import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
import com.android.inputmethod.latin.UserBinaryDictionary;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
@@ -39,15 +48,23 @@ import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.LocaleUtils;
import com.android.inputmethod.latin.utils.ScriptUtils;
import com.android.inputmethod.latin.utils.StringUtils;
+import com.android.inputmethod.latin.utils.SuggestionResults;
+import com.android.inputmethod.latin.WordComposer;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
/**
* Service for spell checking, using LatinIME's dictionaries and mechanisms.
@@ -56,31 +73,79 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = AndroidSpellCheckerService.class.getSimpleName();
private static final boolean DBG = false;
- private static final int POOL_SIZE = 2;
public static final String PREF_USE_CONTACTS_KEY = "pref_spellcheck_use_contacts";
private static final int SPELLCHECKER_DUMMY_KEYBOARD_WIDTH = 480;
private static final int SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT = 368;
- private final static String[] EMPTY_STRING_ARRAY = new String[0];
- private Map<String, DictionaryPool> mDictionaryPools = CollectionUtils.newSynchronizedTreeMap();
- private Map<String, UserBinaryDictionary> mUserDictionaries =
- CollectionUtils.newSynchronizedTreeMap();
- private ContactsBinaryDictionary mContactsDictionary;
+ private static final String DICTIONARY_NAME_PREFIX = "spellcheck_";
+ private static final int WAIT_FOR_LOADING_MAIN_DICT_IN_MILLISECONDS = 1000;
+ private static final int MAX_RETRY_COUNT_FOR_WAITING_FOR_LOADING_DICT = 5;
+
+ private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+ private final HashSet<Locale> mCachedLocales = new HashSet<>();
+
+ private final int MAX_NUM_OF_THREADS_READ_DICTIONARY = 2;
+ private final Semaphore mSemaphore = new Semaphore(MAX_NUM_OF_THREADS_READ_DICTIONARY,
+ true /* fair */);
+ // TODO: Make each spell checker session has its own session id.
+ private final ConcurrentLinkedQueue<Integer> mSessionIdPool = new ConcurrentLinkedQueue<>();
+
+ private static class DictionaryFacilitatorLruCache extends
+ LruCache<Locale, DictionaryFacilitator> {
+ private final HashSet<Locale> mCachedLocales;
+ public DictionaryFacilitatorLruCache(final HashSet<Locale> cachedLocales, int maxSize) {
+ super(maxSize);
+ mCachedLocales = cachedLocales;
+ }
+
+ @Override
+ protected void entryRemoved(boolean evicted, Locale key,
+ DictionaryFacilitator oldValue, DictionaryFacilitator newValue) {
+ if (oldValue != null && oldValue != newValue) {
+ oldValue.closeDictionaries();
+ }
+ if (key != null && newValue == null) {
+ // Remove locale from the cache when the dictionary facilitator for the locale is
+ // evicted and new facilitator is not set for the locale.
+ mCachedLocales.remove(key);
+ if (size() >= maxSize()) {
+ Log.w(TAG, "DictionaryFacilitator for " + key.toString()
+ + " has been evicted due to cache size limit."
+ + " size: " + size() + ", maxSize: " + maxSize());
+ }
+ }
+ }
+ }
+
+ private static final int MAX_DICTIONARY_FACILITATOR_COUNT = 3;
+ private final LruCache<Locale, DictionaryFacilitator> mDictionaryFacilitatorCache =
+ new DictionaryFacilitatorLruCache(mCachedLocales, MAX_DICTIONARY_FACILITATOR_COUNT);
+ private final ConcurrentHashMap<Locale, Keyboard> mKeyboardCache = new ConcurrentHashMap<>();
// The threshold for a suggestion to be considered "recommended".
private float mRecommendedThreshold;
// Whether to use the contacts dictionary
private boolean mUseContactsDictionary;
- private final Object mUseContactsLock = new Object();
-
- private final HashSet<WeakReference<DictionaryCollection>> mDictionaryCollectionsList =
- new HashSet<>();
+ // TODO: make a spell checker option to block offensive words or not
+ private final SettingsValuesForSuggestion mSettingsValuesForSuggestion =
+ new SettingsValuesForSuggestion(true /* blockPotentiallyOffensive */,
+ true /* spaceAwareGestureEnabled */,
+ null /* additionalFeaturesSettingValues */);
+ private final Object mDictionaryLock = new Object();
public static final String SINGLE_QUOTE = "\u0027";
public static final String APOSTROPHE = "\u2019";
+ public AndroidSpellCheckerService() {
+ super();
+ for (int i = 0; i < MAX_NUM_OF_THREADS_READ_DICTIONARY; i++) {
+ mSessionIdPool.add(i);
+ }
+ }
+
@Override public void onCreate() {
super.onCreate();
mRecommendedThreshold =
@@ -106,52 +171,21 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
@Override
public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
if (!PREF_USE_CONTACTS_KEY.equals(key)) return;
- synchronized(mUseContactsLock) {
- mUseContactsDictionary = prefs.getBoolean(PREF_USE_CONTACTS_KEY, true);
- if (mUseContactsDictionary) {
- startUsingContactsDictionaryLocked();
- } else {
- stopUsingContactsDictionaryLocked();
- }
- }
- }
-
- private void startUsingContactsDictionaryLocked() {
- if (null == mContactsDictionary) {
- // TODO: use the right locale for each session
- mContactsDictionary =
- new SynchronouslyLoadedContactsBinaryDictionary(this, Locale.getDefault());
- }
- final Iterator<WeakReference<DictionaryCollection>> iterator =
- mDictionaryCollectionsList.iterator();
- while (iterator.hasNext()) {
- final WeakReference<DictionaryCollection> dictRef = iterator.next();
- final DictionaryCollection dict = dictRef.get();
- if (null == dict) {
- iterator.remove();
- } else {
- dict.addDictionary(mContactsDictionary);
- }
- }
- }
-
- private void stopUsingContactsDictionaryLocked() {
- if (null == mContactsDictionary) return;
- final Dictionary contactsDict = mContactsDictionary;
- // TODO: revert to the concrete type when USE_BINARY_CONTACTS_DICTIONARY is no longer needed
- mContactsDictionary = null;
- final Iterator<WeakReference<DictionaryCollection>> iterator =
- mDictionaryCollectionsList.iterator();
- while (iterator.hasNext()) {
- final WeakReference<DictionaryCollection> dictRef = iterator.next();
- final DictionaryCollection dict = dictRef.get();
- if (null == dict) {
- iterator.remove();
- } else {
- dict.removeDictionary(contactsDict);
+ final boolean useContactsDictionary = prefs.getBoolean(PREF_USE_CONTACTS_KEY, true);
+ if (useContactsDictionary != mUseContactsDictionary) {
+ mSemaphore.acquireUninterruptibly(MAX_NUM_OF_THREADS_READ_DICTIONARY);
+ try {
+ mUseContactsDictionary = useContactsDictionary;
+ for (final Locale locale : mCachedLocales) {
+ final DictionaryFacilitator dictionaryFacilitator =
+ mDictionaryFacilitatorCache.get(locale);
+ resetDictionariesForLocale(this /* context */,
+ dictionaryFacilitator, locale, mUseContactsDictionary);
+ }
+ } finally {
+ mSemaphore.release(MAX_NUM_OF_THREADS_READ_DICTIONARY);
+ }
}
- }
- contactsDict.close();
}
@Override
@@ -203,11 +237,6 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
private final int mMaxLength;
private int mLength = 0;
- // The two following attributes are only ever filled if the requested max length
- // is 0 (or less, which is treated the same).
- private String mBestSuggestion = null;
- private int mBestScore = Integer.MIN_VALUE; // As small as possible
-
SuggestionsGatherer(final String originalText, final float recommendedThreshold,
final int maxLength) {
mOriginalText = originalText;
@@ -226,20 +255,6 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
// Weak <- insertIndex == 0, ..., insertIndex == mLength -> Strong
if (insertIndex == 0 && mLength >= mMaxLength) {
- // In the future, we may want to keep track of the best suggestion score even if
- // we are asked for 0 suggestions. In this case, we can use the following
- // (tested) code to keep it:
- // If the maxLength is 0 (should never be less, but if it is, it's treated as 0)
- // then we need to keep track of the best suggestion in mBestScore and
- // mBestSuggestion. This is so that we know whether the best suggestion makes
- // the score cutoff, since we need to know that to return a meaningful
- // looksLikeTypo.
- // if (0 >= mMaxLength) {
- // if (score > mBestScore) {
- // mBestScore = score;
- // mBestSuggestion = new String(word, wordOffset, wordLength);
- // }
- // }
return true;
}
@@ -264,20 +279,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
final String[] gatheredSuggestions;
final boolean hasRecommendedSuggestions;
if (0 == mLength) {
- // TODO: the comment below describes what is intended, but in the practice
- // mBestSuggestion is only ever set to null so it doesn't work. Fix this.
- // Either we found no suggestions, or we found some BUT the max length was 0.
- // If we found some mBestSuggestion will not be null. If it is null, then
- // we found none, regardless of the max length.
- if (null == mBestSuggestion) {
- gatheredSuggestions = null;
- hasRecommendedSuggestions = false;
- } else {
- gatheredSuggestions = EMPTY_STRING_ARRAY;
- final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
- mOriginalText, mBestSuggestion, mBestScore);
- hasRecommendedSuggestions = (normalizedScore > mRecommendedThreshold);
- }
+ gatheredSuggestions = null;
+ hasRecommendedSuggestions = false;
} else {
if (DBG) {
if (mLength != mSuggestions.size()) {
@@ -323,85 +326,114 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
}
}
- @Override
- public boolean onUnbind(final Intent intent) {
- closeAllDictionaries();
- return false;
+ public boolean isValidWord(final Locale locale, final String word) {
+ mSemaphore.acquireUninterruptibly();
+ try {
+ DictionaryFacilitator dictionaryFacilitatorForLocale =
+ getDictionaryFacilitatorForLocaleLocked(locale);
+ return dictionaryFacilitatorForLocale.isValidWord(word, false /* igroreCase */);
+ } finally {
+ mSemaphore.release();
+ }
}
- private void closeAllDictionaries() {
- final Map<String, DictionaryPool> oldPools = mDictionaryPools;
- mDictionaryPools = CollectionUtils.newSynchronizedTreeMap();
- final Map<String, UserBinaryDictionary> oldUserDictionaries = mUserDictionaries;
- mUserDictionaries = CollectionUtils.newSynchronizedTreeMap();
- new Thread("spellchecker_close_dicts") {
- @Override
- public void run() {
- // Contacts dictionary can be closed multiple times here. If the dictionary is
- // already closed, extra closings are no-ops, so it's safe.
- for (DictionaryPool pool : oldPools.values()) {
- pool.close();
- }
- for (Dictionary dict : oldUserDictionaries.values()) {
- dict.close();
- }
- synchronized (mUseContactsLock) {
- if (null != mContactsDictionary) {
- // The synchronously loaded contacts dictionary should have been in one
- // or several pools, but it is shielded against multiple closing and it's
- // safe to call it several times.
- final ContactsBinaryDictionary dictToClose = mContactsDictionary;
- // TODO: revert to the concrete type when USE_BINARY_CONTACTS_DICTIONARY
- // is no longer needed
- mContactsDictionary = null;
- dictToClose.close();
- }
+ public SuggestionResults getSuggestionResults(final Locale locale, final WordComposer composer,
+ final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo) {
+ Integer sessionId = null;
+ mSemaphore.acquireUninterruptibly();
+ try {
+ sessionId = mSessionIdPool.poll();
+ DictionaryFacilitator dictionaryFacilitatorForLocale =
+ getDictionaryFacilitatorForLocaleLocked(locale);
+ return dictionaryFacilitatorForLocale.getSuggestionResults(composer, prevWordsInfo,
+ proximityInfo, mSettingsValuesForSuggestion, sessionId);
+ } finally {
+ if (sessionId != null) {
+ mSessionIdPool.add(sessionId);
+ }
+ mSemaphore.release();
+ }
+ }
+
+ public boolean hasMainDictionaryForLocale(final Locale locale) {
+ mSemaphore.acquireUninterruptibly();
+ try {
+ final DictionaryFacilitator dictionaryFacilitator =
+ getDictionaryFacilitatorForLocaleLocked(locale);
+ return dictionaryFacilitator.hasInitializedMainDictionary();
+ } finally {
+ mSemaphore.release();
+ }
+ }
+
+ private DictionaryFacilitator getDictionaryFacilitatorForLocaleLocked(final Locale locale) {
+ DictionaryFacilitator dictionaryFacilitatorForLocale =
+ mDictionaryFacilitatorCache.get(locale);
+ if (dictionaryFacilitatorForLocale == null) {
+ dictionaryFacilitatorForLocale = new DictionaryFacilitator();
+ mDictionaryFacilitatorCache.put(locale, dictionaryFacilitatorForLocale);
+ mCachedLocales.add(locale);
+ resetDictionariesForLocale(this /* context */, dictionaryFacilitatorForLocale,
+ locale, mUseContactsDictionary);
+ }
+ return dictionaryFacilitatorForLocale;
+ }
+
+ private static void resetDictionariesForLocale(final Context context,
+ final DictionaryFacilitator dictionaryFacilitator, final Locale locale,
+ final boolean useContactsDictionary) {
+ dictionaryFacilitator.resetDictionariesWithDictNamePrefix(context, locale,
+ useContactsDictionary, false /* usePersonalizedDicts */,
+ false /* forceReloadMainDictionary */, null /* listener */,
+ DICTIONARY_NAME_PREFIX);
+ for (int i = 0; i < MAX_RETRY_COUNT_FOR_WAITING_FOR_LOADING_DICT; i++) {
+ try {
+ dictionaryFacilitator.waitForLoadingMainDictionary(
+ WAIT_FOR_LOADING_MAIN_DICT_IN_MILLISECONDS, TimeUnit.MILLISECONDS);
+ return;
+ } catch (final InterruptedException e) {
+ Log.i(TAG, "Interrupted during waiting for loading main dictionary.", e);
+ if (i < MAX_RETRY_COUNT_FOR_WAITING_FOR_LOADING_DICT - 1) {
+ Log.i(TAG, "Retry", e);
+ } else {
+ Log.w(TAG, "Give up retrying. Retried "
+ + MAX_RETRY_COUNT_FOR_WAITING_FOR_LOADING_DICT + " times.", e);
}
}
- }.start();
+ }
+ }
+
+ @Override
+ public boolean onUnbind(final Intent intent) {
+ mSemaphore.acquireUninterruptibly(MAX_NUM_OF_THREADS_READ_DICTIONARY);
+ try {
+ mDictionaryFacilitatorCache.evictAll();
+ mCachedLocales.clear();
+ } finally {
+ mSemaphore.release(MAX_NUM_OF_THREADS_READ_DICTIONARY);
+ }
+ mKeyboardCache.clear();
+ return false;
}
- public DictionaryPool getDictionaryPool(final String locale) {
- DictionaryPool pool = mDictionaryPools.get(locale);
- if (null == pool) {
- final Locale localeObject = LocaleUtils.constructLocaleFromString(locale);
- pool = new DictionaryPool(POOL_SIZE, this, localeObject);
- mDictionaryPools.put(locale, pool);
+ public Keyboard getKeyboardForLocale(final Locale locale) {
+ Keyboard keyboard = mKeyboardCache.get(locale);
+ if (keyboard == null) {
+ keyboard = createKeyboardForLocale(locale);
+ if (keyboard != null) {
+ mKeyboardCache.put(locale, keyboard);
+ }
}
- return pool;
+ return keyboard;
}
- public DictAndKeyboard createDictAndKeyboard(final Locale locale) {
+ private Keyboard createKeyboardForLocale(final Locale locale) {
final int script = ScriptUtils.getScriptFromSpellCheckerLocale(locale);
final String keyboardLayoutName = getKeyboardLayoutNameForScript(script);
final InputMethodSubtype subtype = AdditionalSubtypeUtils.createDummyAdditionalSubtype(
locale.toString(), keyboardLayoutName);
final KeyboardLayoutSet keyboardLayoutSet = createKeyboardSetForSpellChecker(subtype);
-
- final DictionaryCollection dictionaryCollection =
- DictionaryFactory.createMainDictionaryFromManager(this, locale,
- true /* useFullEditDistance */);
- final String localeStr = locale.toString();
- UserBinaryDictionary userDictionary = mUserDictionaries.get(localeStr);
- if (null == userDictionary) {
- userDictionary = new SynchronouslyLoadedUserBinaryDictionary(this, locale, true);
- mUserDictionaries.put(localeStr, userDictionary);
- }
- dictionaryCollection.addDictionary(userDictionary);
- synchronized (mUseContactsLock) {
- if (mUseContactsDictionary) {
- if (null == mContactsDictionary) {
- // TODO: use the right locale. We can't do it right now because the
- // spell checker is reusing the contacts dictionary across sessions
- // without regard for their locale, so we need to fix that first.
- mContactsDictionary = new SynchronouslyLoadedContactsBinaryDictionary(this,
- Locale.getDefault());
- }
- }
- dictionaryCollection.addDictionary(mContactsDictionary);
- mDictionaryCollectionsList.add(new WeakReference<>(dictionaryCollection));
- }
- return new DictAndKeyboard(dictionaryCollection, keyboardLayoutSet);
+ return keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
}
private KeyboardLayoutSet createKeyboardSetForSpellChecker(final InputMethodSubtype subtype) {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index 08adaf844..19c1dd0a5 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -28,8 +28,9 @@ import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;
import com.android.inputmethod.compat.SuggestionsInfoCompatUtils;
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.PrevWordsInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.WordComposer;
@@ -39,17 +40,15 @@ import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.LocaleUtils;
import com.android.inputmethod.latin.utils.ScriptUtils;
import com.android.inputmethod.latin.utils.StringUtils;
+import com.android.inputmethod.latin.utils.SuggestionResults;
-import java.util.ArrayList;
import java.util.Locale;
public abstract class AndroidWordLevelSpellCheckerSession extends Session {
private static final String TAG = AndroidWordLevelSpellCheckerSession.class.getSimpleName();
private static final boolean DBG = false;
- // Immutable, but need the locale which is not available in the constructor yet
- private DictionaryPool mDictionaryPool;
- // Likewise
+ // Immutable, but not available in the constructor.
private Locale mLocale;
// Cache this for performance
private int mScript; // One of SCRIPT_LATIN or SCRIPT_CYRILLIC for now.
@@ -116,7 +115,6 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
@Override
public void onCreate() {
final String localeString = getLocale();
- mDictionaryPool = mService.getDictionaryPool(localeString);
mLocale = LocaleUtils.constructLocaleFromString(localeString);
mScript = ScriptUtils.getScriptFromSpellCheckerLocale(mLocale);
}
@@ -191,24 +189,24 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
* If the "TEXT" is fully upper case, we test the exact string "TEXT", the lower-cased
* version of it "text" and the capitalized version of it "Text".
*/
- private boolean isInDictForAnyCapitalization(final Dictionary dict, final String text,
- final int capitalizeType) {
+ private boolean isInDictForAnyCapitalization(final String text, final int capitalizeType) {
// If the word is in there as is, then it's in the dictionary. If not, we'll test lower
// case versions, but only if the word is not already all-lower case or mixed case.
- if (dict.isValidWord(text)) return true;
+ if (mService.isValidWord(mLocale, text)) return true;
if (StringUtils.CAPITALIZE_NONE == capitalizeType) return false;
// If we come here, we have a capitalized word (either First- or All-).
// Downcase the word and look it up again. If the word is only capitalized, we
// tested all possibilities, so if it's still negative we can return false.
final String lowerCaseText = text.toLowerCase(mLocale);
- if (dict.isValidWord(lowerCaseText)) return true;
+ if (mService.isValidWord(mLocale, lowerCaseText)) return true;
if (StringUtils.CAPITALIZE_FIRST == capitalizeType) return false;
// If the lower case version is not in the dictionary, it's still possible
// that we have an all-caps version of a word that needs to be capitalized
// according to the dictionary. E.g. "GERMANS" only exists in the dictionary as "Germans".
- return dict.isValidWord(StringUtils.capitalizeFirstAndDowncaseRest(lowerCaseText, mLocale));
+ return mService.isValidWord(mLocale,
+ StringUtils.capitalizeFirstAndDowncaseRest(lowerCaseText, mLocale));
}
// Note : this must be reentrant
@@ -236,46 +234,28 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
return new SuggestionsInfo(
cachedSuggestionsParams.mFlags, cachedSuggestionsParams.mSuggestions);
}
-
final int checkability = getCheckabilityInScript(inText, mScript);
if (CHECKABILITY_CHECKABLE != checkability) {
- DictAndKeyboard dictInfo = null;
- try {
- dictInfo = mDictionaryPool.pollWithDefaultTimeout();
- if (!DictionaryPool.isAValidDictionary(dictInfo)) {
- return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
- false /* reportAsTypo */);
- }
- if (CHECKABILITY_CONTAINS_PERIOD == checkability) {
- final String[] splitText = inText.split(Constants.REGEXP_PERIOD);
- boolean allWordsAreValid = true;
- for (final String word : splitText) {
- if (!dictInfo.mDictionary.isValidWord(word)) {
- allWordsAreValid = false;
- break;
- }
- }
- if (allWordsAreValid) {
- return new SuggestionsInfo(SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO
- | SuggestionsInfo.RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS,
- new String[] {
- TextUtils.join(Constants.STRING_SPACE, splitText),
- TextUtils.join(Constants.STRING_PERIOD_AND_SPACE,
- splitText) });
+ if (CHECKABILITY_CONTAINS_PERIOD == checkability) {
+ final String[] splitText = inText.split(Constants.REGEXP_PERIOD);
+ boolean allWordsAreValid = true;
+ for (final String word : splitText) {
+ if (!mService.isValidWord(mLocale, word)) {
+ allWordsAreValid = false;
+ break;
}
}
- return dictInfo.mDictionary.isValidWord(inText)
- ? AndroidSpellCheckerService.getInDictEmptySuggestions()
- : AndroidSpellCheckerService.getNotInDictEmptySuggestions(
- CHECKABILITY_CONTAINS_PERIOD == checkability
- /* reportAsTypo */);
- } finally {
- if (null != dictInfo) {
- if (!mDictionaryPool.offer(dictInfo)) {
- Log.e(TAG, "Can't re-insert a dictionary into its pool");
- }
+ if (allWordsAreValid) {
+ return new SuggestionsInfo(SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO
+ | SuggestionsInfo.RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS,
+ new String[] {
+ TextUtils.join(Constants.STRING_SPACE, splitText) });
}
}
+ return mService.isValidWord(mLocale, inText) ?
+ AndroidSpellCheckerService.getInDictEmptySuggestions() :
+ AndroidSpellCheckerService.getNotInDictEmptySuggestions(
+ CHECKABILITY_CONTAINS_PERIOD == checkability /* reportAsTypo */);
}
final String text = inText.replaceAll(
AndroidSpellCheckerService.APOSTROPHE, AndroidSpellCheckerService.SINGLE_QUOTE);
@@ -289,48 +269,34 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
final int capitalizeType = StringUtils.getCapitalizationType(text);
boolean isInDict = true;
- DictAndKeyboard dictInfo = null;
- try {
- dictInfo = mDictionaryPool.pollWithDefaultTimeout();
- if (!DictionaryPool.isAValidDictionary(dictInfo)) {
- return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
- false /* reportAsTypo */);
- }
- final WordComposer composer = new WordComposer();
- final int[] codePoints = StringUtils.toCodePointArray(text);
- final int[] coordinates;
- if (null == dictInfo.mKeyboard) {
- coordinates = CoordinateUtils.newCoordinateArray(codePoints.length,
- Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
- } else {
- coordinates = dictInfo.mKeyboard.getCoordinates(codePoints);
- }
- composer.setComposingWord(codePoints, coordinates);
- // TODO: make a spell checker option to block offensive words or not
- final ArrayList<SuggestedWordInfo> suggestions =
- dictInfo.mDictionary.getSuggestions(composer, prevWordsInfo,
- dictInfo.getProximityInfo(),
- new SettingsValuesForSuggestion(
- true /* blockPotentiallyOffensive */,
- true /* spaceAwareGestureEnabled */,
- null /* additionalFeaturesSettingValues */),
- 0 /* sessionId */,
- null /* inOutLanguageWeight */);
- if (suggestions != null) {
- for (final SuggestedWordInfo suggestion : suggestions) {
- final String suggestionStr = suggestion.mWord;
- suggestionsGatherer.addWord(suggestionStr.toCharArray(), null, 0,
- suggestionStr.length(), suggestion.mScore);
- }
- }
- isInDict = isInDictForAnyCapitalization(dictInfo.mDictionary, text, capitalizeType);
- } finally {
- if (null != dictInfo) {
- if (!mDictionaryPool.offer(dictInfo)) {
- Log.e(TAG, "Can't re-insert a dictionary into its pool");
- }
+ if (!mService.hasMainDictionaryForLocale(mLocale)) {
+ return AndroidSpellCheckerService.getNotInDictEmptySuggestions(
+ false /* reportAsTypo */);
+ }
+ final Keyboard keyboard = mService.getKeyboardForLocale(mLocale);
+ final WordComposer composer = new WordComposer();
+ final int[] codePoints = StringUtils.toCodePointArray(text);
+ final int[] coordinates;
+ final ProximityInfo proximityInfo;
+ if (null == keyboard) {
+ coordinates = CoordinateUtils.newCoordinateArray(codePoints.length,
+ Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
+ proximityInfo = null;
+ } else {
+ coordinates = keyboard.getCoordinates(codePoints);
+ proximityInfo = keyboard.getProximityInfo();
+ }
+ composer.setComposingWord(codePoints, coordinates);
+ final SuggestionResults suggestionResults = mService.getSuggestionResults(
+ mLocale, composer, prevWordsInfo, proximityInfo);
+ if (suggestionResults != null) {
+ for (final SuggestedWordInfo suggestion : suggestionResults) {
+ final String suggestionStr = suggestion.mWord;
+ suggestionsGatherer.addWord(suggestionStr.toCharArray(), null, 0,
+ suggestionStr.length(), suggestion.mScore);
}
}
+ isInDict = isInDictForAnyCapitalization(text, capitalizeType);
final SuggestionsGatherer.Result result = suggestionsGatherer.getResults(
capitalizeType, mLocale);
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
deleted file mode 100644
index b33739fc1..000000000
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardLayoutSet;
-import com.android.inputmethod.keyboard.ProximityInfo;
-import com.android.inputmethod.latin.Dictionary;
-
-/**
- * A container for a Dictionary and a Keyboard.
- */
-public final class DictAndKeyboard {
- public final Dictionary mDictionary;
- public final Keyboard mKeyboard;
-
- public DictAndKeyboard(
- final Dictionary dictionary, final KeyboardLayoutSet keyboardLayoutSet) {
- mDictionary = dictionary;
- if (keyboardLayoutSet == null) {
- mKeyboard = null;
- return;
- }
- mKeyboard = keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
- }
-
- public ProximityInfo getProximityInfo() {
- return mKeyboard == null ? null : mKeyboard.getProximityInfo();
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
deleted file mode 100644
index eb85d4969..000000000
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.util.Log;
-
-import com.android.inputmethod.keyboard.ProximityInfo;
-import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
-import com.android.inputmethod.latin.WordComposer;
-
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A blocking queue that creates dictionaries up to a certain limit as necessary.
- * As a deadlock-detecting device, if waiting for more than TIMEOUT = 3 seconds, we
- * will clear the queue and generate its contents again. This is transparent for
- * the client code, but may help with sloppy clients.
- */
-@SuppressWarnings("serial")
-public final class DictionaryPool extends LinkedBlockingQueue<DictAndKeyboard> {
- private final static String TAG = DictionaryPool.class.getSimpleName();
- // How many seconds we wait for a dictionary to become available. Past this delay, we give up in
- // fear some bug caused a deadlock, and reset the whole pool.
- private final static int TIMEOUT = 3;
- private final AndroidSpellCheckerService mService;
- private final int mMaxSize;
- private final Locale mLocale;
- private int mSize;
- private volatile boolean mClosed;
- final static ArrayList<SuggestedWordInfo> noSuggestions = new ArrayList<>();
- private final static DictAndKeyboard dummyDict = new DictAndKeyboard(
- new Dictionary(Dictionary.TYPE_MAIN) {
- // TODO: this dummy dictionary should be a singleton in the Dictionary class.
- @Override
- public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
- final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
- final SettingsValuesForSuggestion settingsValuesForSuggestion,
- final int sessionId, final float[] inOutLanguageWeight) {
- return noSuggestions;
- }
- @Override
- public boolean isInDictionary(final String word) {
- // This is never called. However if for some strange reason it ever gets
- // called, returning true is less destructive (it will not underline the
- // word in red).
- return true;
- }
- }, null);
-
- static public boolean isAValidDictionary(final DictAndKeyboard dictInfo) {
- return null != dictInfo && dummyDict != dictInfo;
- }
-
- public DictionaryPool(final int maxSize, final AndroidSpellCheckerService service,
- final Locale locale) {
- super();
- mMaxSize = maxSize;
- mService = service;
- mLocale = locale;
- mSize = 0;
- mClosed = false;
- }
-
- @Override
- public DictAndKeyboard poll(final long timeout, final TimeUnit unit)
- throws InterruptedException {
- final DictAndKeyboard dict = poll();
- if (null != dict) return dict;
- synchronized(this) {
- if (mSize >= mMaxSize) {
- // Our pool is already full. Wait until some dictionary is ready, or TIMEOUT
- // expires to avoid a deadlock.
- final DictAndKeyboard result = super.poll(timeout, unit);
- if (null == result) {
- Log.e(TAG, "Deadlock detected ! Resetting dictionary pool");
- clear();
- mSize = 1;
- return mService.createDictAndKeyboard(mLocale);
- } else {
- return result;
- }
- } else {
- ++mSize;
- return mService.createDictAndKeyboard(mLocale);
- }
- }
- }
-
- // Convenience method
- public DictAndKeyboard pollWithDefaultTimeout() {
- try {
- return poll(TIMEOUT, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- return null;
- }
- }
-
- public void close() {
- synchronized(this) {
- mClosed = true;
- for (DictAndKeyboard dict : this) {
- dict.mDictionary.close();
- }
- clear();
- }
- }
-
- @Override
- public boolean offer(final DictAndKeyboard dict) {
- if (mClosed) {
- dict.mDictionary.close();
- return super.offer(dummyDict);
- } else {
- return super.offer(dict);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
deleted file mode 100644
index 688b184cb..000000000
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2012 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 com.android.inputmethod.keyboard.ProximityInfo;
-import com.android.inputmethod.latin.ContactsBinaryDictionary;
-import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
-import com.android.inputmethod.latin.WordComposer;
-
-import java.util.ArrayList;
-import java.util.Locale;
-
-public final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsBinaryDictionary {
- private static final String NAME = "spellcheck_contacts";
- private final Object mLock = new Object();
-
- public SynchronouslyLoadedContactsBinaryDictionary(final Context context, final Locale locale) {
- super(context, locale, null /* dictFile */, NAME);
- }
-
- @Override
- public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes,
- final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
- final SettingsValuesForSuggestion settingsValuesForSuggestion,
- final int sessionId, final float[] inOutLanguageWeight) {
- synchronized (mLock) {
- return super.getSuggestions(codes, prevWordsInfo, proximityInfo,
- settingsValuesForSuggestion, sessionId, inOutLanguageWeight);
- }
- }
-
- @Override
- public boolean isInDictionary(final String word) {
- synchronized (mLock) {
- return super.isInDictionary(word);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
deleted file mode 100644
index ff71f59f8..000000000
--- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2012 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 com.android.inputmethod.keyboard.ProximityInfo;
-import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion;
-import com.android.inputmethod.latin.UserBinaryDictionary;
-import com.android.inputmethod.latin.WordComposer;
-
-import java.util.ArrayList;
-import java.util.Locale;
-
-public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDictionary {
- private static final String NAME = "spellcheck_user";
- private final Object mLock = new Object();
-
- public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale) {
- this(context, locale, false /* alsoUseMoreRestrictiveLocales */);
- }
-
- public SynchronouslyLoadedUserBinaryDictionary(final Context context, final Locale locale,
- final boolean alsoUseMoreRestrictiveLocales) {
- super(context, locale, alsoUseMoreRestrictiveLocales, null /* dictFile */, NAME);
- }
-
- @Override
- public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer codes,
- final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
- final SettingsValuesForSuggestion settingsValuesForSuggestion,
- final int sessionId, final float[] inOutLanguageWeight) {
- synchronized (mLock) {
- return super.getSuggestions(codes, prevWordsInfo, proximityInfo,
- settingsValuesForSuggestion, sessionId, inOutLanguageWeight);
- }
- }
-
- @Override
- public boolean isInDictionary(final String word) {
- synchronized (mLock) {
- return super.isInDictionary(word);
- }
- }
-}