aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]Android.mk38
-rw-r--r--CleanSpec.mk52
-rwxr-xr-xjava/Android.mk22
-rwxr-xr-xjava/AndroidManifest.xml (renamed from AndroidManifest.xml)6
-rw-r--r--java/MODULE_LICENSE_APACHE20
-rw-r--r--java/NOTICE190
-rw-r--r--java/proguard.flags3
-rwxr-xr-xjava/res/drawable-en-hdpi/sym_keyboard_delete.png (renamed from res/drawable-en-hdpi/sym_keyboard_delete.png)bin2315 -> 2315 bytes
-rwxr-xr-xjava/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png (renamed from res/drawable-en-hdpi/sym_keyboard_feedback_delete.png)bin1278 -> 1278 bytes
-rw-r--r--java/res/drawable-en-mdpi/sym_keyboard_delete.png (renamed from res/drawable-en-mdpi/sym_keyboard_delete.png)bin1366 -> 1366 bytes
-rw-r--r--java/res/drawable-en-mdpi/sym_keyboard_feedback_delete.png (renamed from res/drawable-en-mdpi/sym_keyboard_feedback_delete.png)bin524 -> 524 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png)bin1649 -> 1649 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png)bin1696 -> 1696 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_normal.9.png)bin715 -> 715 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_normal_off.9.png)bin1001 -> 1001 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_normal_on.9.png)bin1077 -> 1077 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_pressed.9.png)bin745 -> 745 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png)bin1042 -> 1042 bytes
-rw-r--r--java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png (renamed from res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png)bin1105 -> 1105 bytes
-rwxr-xr-xjava/res/drawable-hdpi/cancel.png (renamed from res/drawable-hdpi/cancel.png)bin1811 -> 1811 bytes
-rwxr-xr-xjava/res/drawable-hdpi/candidate_feedback_background.9.png (renamed from res/drawable-hdpi/candidate_feedback_background.9.png)bin833 -> 833 bytes
-rwxr-xr-xjava/res/drawable-hdpi/caution.png (renamed from res/drawable-hdpi/caution.png)bin1641 -> 1641 bytes
-rwxr-xr-xjava/res/drawable-hdpi/dialog_bubble_step02.9.png (renamed from res/drawable-hdpi/dialog_bubble_step02.9.png)bin1475 -> 1475 bytes
-rwxr-xr-xjava/res/drawable-hdpi/dialog_bubble_step07.9.png (renamed from res/drawable-hdpi/dialog_bubble_step07.9.png)bin6012 -> 6012 bytes
-rwxr-xr-xjava/res/drawable-hdpi/dialog_top_dark_bottom_medium.png (renamed from res/drawable-hdpi/dialog_top_dark_bottom_medium.png)bin1976 -> 1976 bytes
-rw-r--r--java/res/drawable-hdpi/highlight_pressed.png (renamed from res/drawable-hdpi/highlight_pressed.png)bin4110 -> 4110 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_alert_large.png (renamed from res/drawable-hdpi/ic_dialog_alert_large.png)bin4918 -> 4918 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_keyboard.png (renamed from res/drawable-hdpi/ic_dialog_keyboard.png)bin807 -> 807 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_voice_input.png (renamed from res/drawable-hdpi/ic_dialog_voice_input.png)bin1931 -> 1931 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_wave_0_0.png (renamed from res/drawable-hdpi/ic_dialog_wave_0_0.png)bin15673 -> 15673 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_wave_1_3.png (renamed from res/drawable-hdpi/ic_dialog_wave_1_3.png)bin15823 -> 15823 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_wave_2_3.png (renamed from res/drawable-hdpi/ic_dialog_wave_2_3.png)bin16009 -> 16009 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_wave_3_3.png (renamed from res/drawable-hdpi/ic_dialog_wave_3_3.png)bin16022 -> 16022 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_dialog_wave_4_3.png (renamed from res/drawable-hdpi/ic_dialog_wave_4_3.png)bin15910 -> 15910 bytes
-rw-r--r--java/res/drawable-hdpi/ic_mic_dialog.png (renamed from res/drawable-hdpi/ic_mic_dialog.png)bin3634 -> 3634 bytes
-rw-r--r--java/res/drawable-hdpi/ic_suggest_strip_microphone.png (renamed from res/drawable-hdpi/ic_suggest_strip_microphone.png)bin548 -> 548 bytes
-rw-r--r--java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png (renamed from res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png)bin438 -> 438 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png (renamed from res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png)bin619 -> 619 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png (renamed from res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png)bin619 -> 619 bytes
-rwxr-xr-xjava/res/drawable-hdpi/keyboard_background.9.png (renamed from res/drawable-hdpi/keyboard_background.9.png)bin200 -> 200 bytes
-rwxr-xr-xjava/res/drawable-hdpi/keyboard_suggest_strip.9.png (renamed from res/drawable-hdpi/keyboard_suggest_strip.9.png)bin1577 -> 1577 bytes
-rw-r--r--java/res/drawable-hdpi/keyboard_suggest_strip_divider.png (renamed from res/drawable-hdpi/keyboard_suggest_strip_divider.png)bin2852 -> 2852 bytes
-rw-r--r--java/res/drawable-hdpi/list_selector_background_pressed.9.png (renamed from res/drawable-hdpi/list_selector_background_pressed.9.png)bin4203 -> 4203 bytes
-rw-r--r--java/res/drawable-hdpi/mic_slash.png (renamed from res/drawable-hdpi/mic_slash.png)bin5615 -> 5615 bytes
-rwxr-xr-xjava/res/drawable-hdpi/ok_cancel.png (renamed from res/drawable-hdpi/ok_cancel.png)bin442 -> 442 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level0.png (renamed from res/drawable-hdpi/speak_now_level0.png)bin1512 -> 1512 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level1.png (renamed from res/drawable-hdpi/speak_now_level1.png)bin2215 -> 2215 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level2.png (renamed from res/drawable-hdpi/speak_now_level2.png)bin3130 -> 3130 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level3.png (renamed from res/drawable-hdpi/speak_now_level3.png)bin3647 -> 3647 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level4.png (renamed from res/drawable-hdpi/speak_now_level4.png)bin3626 -> 3626 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level5.png (renamed from res/drawable-hdpi/speak_now_level5.png)bin3670 -> 3670 bytes
-rwxr-xr-xjava/res/drawable-hdpi/speak_now_level6.png (renamed from res/drawable-hdpi/speak_now_level6.png)bin4006 -> 4006 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_123_mic.png (renamed from res/drawable-hdpi/sym_keyboard_123_mic.png)bin2575 -> 2575 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_delete.png (renamed from res/drawable-hdpi/sym_keyboard_delete.png)bin2282 -> 2282 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_done.png (renamed from res/drawable-hdpi/sym_keyboard_done.png)bin1593 -> 1593 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_123_mic.png)bin1046 -> 1046 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_delete.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_delete.png)bin1278 -> 1278 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_done.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_done.png)bin1068 -> 1068 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png)bin322 -> 322 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png)bin328 -> 328 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_mic.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_mic.png)bin681 -> 681 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_numalt.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_numalt.png)bin1336 -> 1336 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_return.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_return.png)bin838 -> 838 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_search.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_search.png)bin1209 -> 1209 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_shift.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_shift.png)bin885 -> 885 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png)bin700 -> 700 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_feedback_space.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_space.png)bin287 -> 287 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_tab.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_tab.png)bin462 -> 462 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_feedback_tabprev.png (renamed from res/drawable-hdpi/sym_keyboard_feedback_tabprev.png)bin463 -> 463 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_globe.png (renamed from res/drawable-hdpi/sym_keyboard_globe.png)bin2093 -> 2093 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png (renamed from res/drawable-hdpi/sym_keyboard_language_arrows_left.png)bin314 -> 314 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png (renamed from res/drawable-hdpi/sym_keyboard_language_arrows_right.png)bin316 -> 316 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_mic.png (renamed from res/drawable-hdpi/sym_keyboard_mic.png)bin1440 -> 1440 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num0.png (renamed from res/drawable-hdpi/sym_keyboard_num0.png)bin1931 -> 1931 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num1.png (renamed from res/drawable-hdpi/sym_keyboard_num1.png)bin809 -> 809 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num2.png (renamed from res/drawable-hdpi/sym_keyboard_num2.png)bin3214 -> 3214 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num3.png (renamed from res/drawable-hdpi/sym_keyboard_num3.png)bin2805 -> 2805 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num4.png (renamed from res/drawable-hdpi/sym_keyboard_num4.png)bin2647 -> 2647 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num5.png (renamed from res/drawable-hdpi/sym_keyboard_num5.png)bin2536 -> 2536 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num6.png (renamed from res/drawable-hdpi/sym_keyboard_num6.png)bin3573 -> 3573 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num7.png (renamed from res/drawable-hdpi/sym_keyboard_num7.png)bin3684 -> 3684 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num8.png (renamed from res/drawable-hdpi/sym_keyboard_num8.png)bin2904 -> 2904 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_num9.png (renamed from res/drawable-hdpi/sym_keyboard_num9.png)bin3860 -> 3860 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_numalt.png (renamed from res/drawable-hdpi/sym_keyboard_numalt.png)bin2919 -> 2919 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_numpound.png (renamed from res/drawable-hdpi/sym_keyboard_numpound.png)bin1600 -> 1600 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_numstar.png (renamed from res/drawable-hdpi/sym_keyboard_numstar.png)bin1749 -> 1749 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_return.png (renamed from res/drawable-hdpi/sym_keyboard_return.png)bin1123 -> 1123 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_search.png (renamed from res/drawable-hdpi/sym_keyboard_search.png)bin1623 -> 1623 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_shift.png (renamed from res/drawable-hdpi/sym_keyboard_shift.png)bin1495 -> 1495 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_shift_locked.png (renamed from res/drawable-hdpi/sym_keyboard_shift_locked.png)bin1119 -> 1119 bytes
-rwxr-xr-xjava/res/drawable-hdpi/sym_keyboard_space.png (renamed from res/drawable-hdpi/sym_keyboard_space.png)bin371 -> 371 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_tab.png (renamed from res/drawable-hdpi/sym_keyboard_tab.png)bin1027 -> 1027 bytes
-rw-r--r--java/res/drawable-hdpi/sym_keyboard_tabprev.png (renamed from res/drawable-hdpi/sym_keyboard_tabprev.png)bin1033 -> 1033 bytes
-rwxr-xr-xjava/res/drawable-hdpi/voice_ime_background.9.png (renamed from res/drawable-hdpi/voice_ime_background.9.png)bin2349 -> 2349 bytes
-rwxr-xr-xjava/res/drawable-hdpi/working.png (renamed from res/drawable-hdpi/working.png)bin8636 -> 8636 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_normal.9.png)bin737 -> 737 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png)bin941 -> 941 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png)bin1076 -> 1076 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png)bin733 -> 733 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png)bin964 -> 964 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png (renamed from res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png)bin1055 -> 1055 bytes
-rwxr-xr-xjava/res/drawable-land-hdpi/keyboard_suggest_strip_divider.png (renamed from res/drawable-land-hdpi/keyboard_suggest_strip_divider.png)bin172 -> 172 bytes
-rw-r--r--java/res/drawable-land-mdpi/btn_keyboard_key_normal.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_normal.9.png)bin818 -> 818 bytes
-rw-r--r--java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png)bin860 -> 860 bytes
-rw-r--r--java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png)bin926 -> 926 bytes
-rwxr-xr-xjava/res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png)bin740 -> 740 bytes
-rw-r--r--java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png)bin836 -> 836 bytes
-rw-r--r--java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png (renamed from res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png)bin886 -> 886 bytes
-rw-r--r--java/res/drawable-land-mdpi/keyboard_suggest_strip_divider.png (renamed from res/drawable-land-mdpi/keyboard_suggest_strip_divider.png)bin166 -> 166 bytes
-rw-r--r--java/res/drawable-land/btn_keyboard_key.xml (renamed from res/drawable-land/btn_keyboard_key.xml)0
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png)bin1068 -> 1068 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png)bin1021 -> 1021 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_normal.9.png)bin726 -> 726 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_normal_off.9.png)bin860 -> 860 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_normal_on.9.png)bin926 -> 926 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_pressed.9.png)bin664 -> 664 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png)bin836 -> 836 bytes
-rw-r--r--java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png (renamed from res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png)bin886 -> 886 bytes
-rw-r--r--java/res/drawable-mdpi/candidate_feedback_background.9.png (renamed from res/drawable-mdpi/candidate_feedback_background.9.png)bin1182 -> 1182 bytes
-rwxr-xr-xjava/res/drawable-mdpi/dialog_bubble_step02.9.png (renamed from res/drawable-mdpi/dialog_bubble_step02.9.png)bin1036 -> 1036 bytes
-rwxr-xr-xjava/res/drawable-mdpi/dialog_bubble_step07.9.png (renamed from res/drawable-mdpi/dialog_bubble_step07.9.png)bin4646 -> 4646 bytes
-rw-r--r--java/res/drawable-mdpi/highlight_pressed.png (renamed from res/drawable-mdpi/highlight_pressed.png)bin593 -> 593 bytes
-rw-r--r--java/res/drawable-mdpi/ic_dialog_keyboard.png (renamed from res/drawable-mdpi/ic_dialog_keyboard.png)bin528 -> 528 bytes
-rw-r--r--java/res/drawable-mdpi/ic_mic_dialog.png (renamed from res/drawable-mdpi/ic_mic_dialog.png)bin3312 -> 3312 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_microphone.png (renamed from res/drawable-mdpi/ic_suggest_strip_microphone.png)bin398 -> 398 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png (renamed from res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png)bin309 -> 309 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png (renamed from res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png)bin445 -> 445 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png (renamed from res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png)bin440 -> 440 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_background.9.png (renamed from res/drawable-mdpi/keyboard_background.9.png)bin214 -> 214 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_suggest_strip.9.png (renamed from res/drawable-mdpi/keyboard_suggest_strip.9.png)bin220 -> 220 bytes
-rw-r--r--java/res/drawable-mdpi/keyboard_suggest_strip_divider.png (renamed from res/drawable-mdpi/keyboard_suggest_strip_divider.png)bin2846 -> 2846 bytes
-rw-r--r--java/res/drawable-mdpi/list_selector_background_pressed.9.png (renamed from res/drawable-mdpi/list_selector_background_pressed.9.png)bin11006 -> 11006 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_123_mic.png (renamed from res/drawable-mdpi/sym_keyboard_123_mic.png)bin1540 -> 1540 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_delete.png (renamed from res/drawable-mdpi/sym_keyboard_delete.png)bin829 -> 829 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_done.png (renamed from res/drawable-mdpi/sym_keyboard_done.png)bin771 -> 771 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_123_mic.png)bin694 -> 694 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_delete.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_delete.png)bin374 -> 374 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_feedback_done.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_done.png)bin498 -> 498 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png)bin249 -> 249 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png)bin249 -> 249 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_mic.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_mic.png)bin483 -> 483 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_numalt.png)bin735 -> 735 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_return.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_return.png)bin381 -> 381 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_feedback_search.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_search.png)bin501 -> 501 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_shift.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_shift.png)bin437 -> 437 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png)bin333 -> 333 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_space.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_space.png)bin223 -> 223 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_tab.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_tab.png)bin364 -> 364 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_feedback_tabprev.png (renamed from res/drawable-mdpi/sym_keyboard_feedback_tabprev.png)bin365 -> 365 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_globe.png (renamed from res/drawable-mdpi/sym_keyboard_globe.png)bin1290 -> 1290 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png (renamed from res/drawable-mdpi/sym_keyboard_language_arrows_left.png)bin261 -> 261 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png (renamed from res/drawable-mdpi/sym_keyboard_language_arrows_right.png)bin257 -> 257 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_mic.png (renamed from res/drawable-mdpi/sym_keyboard_mic.png)bin859 -> 859 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num0.png (renamed from res/drawable-mdpi/sym_keyboard_num0.png)bin1160 -> 1160 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num1.png (renamed from res/drawable-mdpi/sym_keyboard_num1.png)bin506 -> 506 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num2.png (renamed from res/drawable-mdpi/sym_keyboard_num2.png)bin1778 -> 1778 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num3.png (renamed from res/drawable-mdpi/sym_keyboard_num3.png)bin1676 -> 1676 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num4.png (renamed from res/drawable-mdpi/sym_keyboard_num4.png)bin1540 -> 1540 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num5.png (renamed from res/drawable-mdpi/sym_keyboard_num5.png)bin1417 -> 1417 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num6.png (renamed from res/drawable-mdpi/sym_keyboard_num6.png)bin1952 -> 1952 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num7.png (renamed from res/drawable-mdpi/sym_keyboard_num7.png)bin2051 -> 2051 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num8.png (renamed from res/drawable-mdpi/sym_keyboard_num8.png)bin1605 -> 1605 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_num9.png (renamed from res/drawable-mdpi/sym_keyboard_num9.png)bin2173 -> 2173 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_numalt.png (renamed from res/drawable-mdpi/sym_keyboard_numalt.png)bin1673 -> 1673 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_numpound.png (renamed from res/drawable-mdpi/sym_keyboard_numpound.png)bin963 -> 963 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_numstar.png (renamed from res/drawable-mdpi/sym_keyboard_numstar.png)bin954 -> 954 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_return.png (renamed from res/drawable-mdpi/sym_keyboard_return.png)bin866 -> 866 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_search.png (renamed from res/drawable-mdpi/sym_keyboard_search.png)bin1029 -> 1029 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_shift.png (renamed from res/drawable-mdpi/sym_keyboard_shift.png)bin1017 -> 1017 bytes
-rwxr-xr-xjava/res/drawable-mdpi/sym_keyboard_shift_locked.png (renamed from res/drawable-mdpi/sym_keyboard_shift_locked.png)bin799 -> 799 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_space.png (renamed from res/drawable-mdpi/sym_keyboard_space.png)bin424 -> 424 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_tab.png (renamed from res/drawable-mdpi/sym_keyboard_tab.png)bin645 -> 645 bytes
-rw-r--r--java/res/drawable-mdpi/sym_keyboard_tabprev.png (renamed from res/drawable-mdpi/sym_keyboard_tabprev.png)bin612 -> 612 bytes
-rw-r--r--java/res/drawable/btn_keyboard_key.xml (renamed from res/drawable/btn_keyboard_key.xml)0
-rw-r--r--java/res/drawable/btn_keyboard_key_fulltrans.xml (renamed from res/drawable/btn_keyboard_key_fulltrans.xml)0
-rw-r--r--java/res/drawable/cancel.png (renamed from res/drawable/cancel.png)bin1259 -> 1259 bytes
-rw-r--r--java/res/drawable/caution.png (renamed from res/drawable/caution.png)bin1100 -> 1100 bytes
-rw-r--r--java/res/drawable/dialog_top_dark_bottom_medium.9.png (renamed from res/drawable/dialog_top_dark_bottom_medium.9.png)bin1574 -> 1574 bytes
-rw-r--r--java/res/drawable/ic_dialog_alert_large.png (renamed from res/drawable/ic_dialog_alert_large.png)bin4089 -> 4089 bytes
-rw-r--r--java/res/drawable/ic_dialog_voice_input.png (renamed from res/drawable/ic_dialog_voice_input.png)bin1040 -> 1040 bytes
-rw-r--r--java/res/drawable/ic_dialog_wave_0_0.png (renamed from res/drawable/ic_dialog_wave_0_0.png)bin8471 -> 8471 bytes
-rw-r--r--java/res/drawable/ic_dialog_wave_1_3.png (renamed from res/drawable/ic_dialog_wave_1_3.png)bin9017 -> 9017 bytes
-rw-r--r--java/res/drawable/ic_dialog_wave_2_3.png (renamed from res/drawable/ic_dialog_wave_2_3.png)bin9614 -> 9614 bytes
-rw-r--r--java/res/drawable/ic_dialog_wave_3_3.png (renamed from res/drawable/ic_dialog_wave_3_3.png)bin10089 -> 10089 bytes
-rw-r--r--java/res/drawable/ic_dialog_wave_4_3.png (renamed from res/drawable/ic_dialog_wave_4_3.png)bin10514 -> 10514 bytes
-rw-r--r--java/res/drawable/ic_suggest_scroll_background.xml (renamed from res/drawable/ic_suggest_scroll_background.xml)0
-rw-r--r--java/res/drawable/mic_slash.png (renamed from res/drawable/mic_slash.png)bin3098 -> 3098 bytes
-rw-r--r--java/res/drawable/ok_cancel.png (renamed from res/drawable/ok_cancel.png)bin8453 -> 8453 bytes
-rw-r--r--java/res/drawable/speak_now_level0.png (renamed from res/drawable/speak_now_level0.png)bin3263 -> 3263 bytes
-rw-r--r--java/res/drawable/speak_now_level1.png (renamed from res/drawable/speak_now_level1.png)bin3572 -> 3572 bytes
-rw-r--r--java/res/drawable/speak_now_level2.png (renamed from res/drawable/speak_now_level2.png)bin3974 -> 3974 bytes
-rw-r--r--java/res/drawable/speak_now_level3.png (renamed from res/drawable/speak_now_level3.png)bin4270 -> 4270 bytes
-rw-r--r--java/res/drawable/speak_now_level4.png (renamed from res/drawable/speak_now_level4.png)bin4241 -> 4241 bytes
-rw-r--r--java/res/drawable/speak_now_level5.png (renamed from res/drawable/speak_now_level5.png)bin4252 -> 4252 bytes
-rw-r--r--java/res/drawable/speak_now_level6.png (renamed from res/drawable/speak_now_level6.png)bin2201 -> 2201 bytes
-rw-r--r--java/res/drawable/voice_ime_background.9.png (renamed from res/drawable/voice_ime_background.9.png)bin20661 -> 20661 bytes
-rw-r--r--java/res/drawable/voice_swipe_hint.png (renamed from res/drawable/voice_swipe_hint.png)bin3111 -> 3111 bytes
-rw-r--r--java/res/drawable/working.png (renamed from res/drawable/working.png)bin33111 -> 33111 bytes
-rw-r--r--java/res/layout/bubble_text.xml (renamed from res/layout/bubble_text.xml)0
-rwxr-xr-xjava/res/layout/candidate_preview.xml (renamed from res/layout/candidate_preview.xml)0
-rwxr-xr-xjava/res/layout/candidates.xml (renamed from res/layout/candidates.xml)0
-rwxr-xr-xjava/res/layout/input.xml (renamed from res/layout/input.xml)0
-rwxr-xr-xjava/res/layout/input_trans.xml (renamed from res/layout/input_trans.xml)1
-rw-r--r--java/res/layout/recognition_status.xml (renamed from res/layout/recognition_status.xml)4
-rw-r--r--java/res/layout/voice_punctuation_hint.xml (renamed from res/layout/voice_punctuation_hint.xml)0
-rw-r--r--java/res/layout/voice_swipe_hint.xml (renamed from res/layout/voice_swipe_hint.xml)0
-rwxr-xr-xjava/res/raw/main.dict (renamed from res/raw/main.dict)bin34 -> 34 bytes
-rwxr-xr-xjava/res/raw/type3.ogg (renamed from res/raw/type3.ogg)bin4126 -> 4126 bytes
-rw-r--r--java/res/values-cs/bools.xml (renamed from res/values-cs/bools.xml)0
-rw-r--r--java/res/values-cs/donottranslate.xml (renamed from res/values-cs/donottranslate.xml)0
-rw-r--r--java/res/values-cs/strings.xml (renamed from res/values-cs/strings.xml)72
-rw-r--r--java/res/values-da/strings.xml (renamed from res/values-da/strings.xml)48
-rw-r--r--java/res/values-de/bools.xml (renamed from res/values-de/bools.xml)0
-rw-r--r--java/res/values-de/strings.xml (renamed from res/values-de/strings.xml)50
-rw-r--r--java/res/values-el/strings.xml (renamed from res/values-el/strings.xml)34
-rw-r--r--java/res/values-en/bools.xml (renamed from res/values-en/bools.xml)0
-rw-r--r--java/res/values-es-rUS/strings.xml (renamed from res/values-es-rUS/strings.xml)34
-rw-r--r--java/res/values-es/bools.xml (renamed from res/values-es/bools.xml)0
-rw-r--r--java/res/values-es/strings.xml (renamed from res/values-es/strings.xml)54
-rw-r--r--java/res/values-fr-rCA/strings.xml (renamed from res/values-fr-rCA/strings.xml)0
-rw-r--r--java/res/values-fr/bools.xml (renamed from res/values-fr/bools.xml)0
-rw-r--r--java/res/values-fr/donottranslate.xml (renamed from res/values-fr/donottranslate.xml)0
-rw-r--r--java/res/values-fr/strings.xml (renamed from res/values-fr/strings.xml)38
-rw-r--r--java/res/values-it/bools.xml (renamed from res/values-it/bools.xml)0
-rw-r--r--java/res/values-it/donottranslate.xml (renamed from res/values-it/donottranslate.xml)0
-rw-r--r--java/res/values-it/strings.xml (renamed from res/values-it/strings.xml)50
-rw-r--r--java/res/values-ja/strings.xml (renamed from res/values-ja/strings.xml)32
-rw-r--r--java/res/values-ko/strings.xml (renamed from res/values-ko/strings.xml)56
-rw-r--r--java/res/values-land/dimens.xml (renamed from res/values-land/dimens.xml)0
-rw-r--r--java/res/values-nb/strings.xml (renamed from res/values-nb/strings.xml)38
-rw-r--r--java/res/values-nl/bools.xml (renamed from res/values-nl/bools.xml)0
-rw-r--r--java/res/values-nl/strings.xml (renamed from res/values-nl/strings.xml)40
-rw-r--r--java/res/values-pl/bools.xml (renamed from res/values-pl/bools.xml)0
-rw-r--r--java/res/values-pl/donottranslate.xml (renamed from res/values-pl/donottranslate.xml)0
-rw-r--r--java/res/values-pl/strings.xml (renamed from res/values-pl/strings.xml)42
-rw-r--r--java/res/values-pt-rPT/strings.xml (renamed from res/values-pt-rPT/strings.xml)42
-rw-r--r--java/res/values-pt/strings.xml (renamed from res/values-pt/strings.xml)38
-rw-r--r--java/res/values-ru/strings.xml (renamed from res/values-ru/strings.xml)50
-rw-r--r--java/res/values-sv/strings.xml (renamed from res/values-sv/strings.xml)36
-rw-r--r--java/res/values-tr/donottranslate.xml (renamed from res/values-tr/donottranslate.xml)0
-rw-r--r--java/res/values-tr/strings.xml (renamed from res/values-tr/strings.xml)32
-rw-r--r--java/res/values-zh-rCN/strings.xml (renamed from res/values-zh-rCN/strings.xml)58
-rw-r--r--java/res/values-zh-rTW/strings.xml (renamed from res/values-zh-rTW/strings.xml)62
-rw-r--r--java/res/values/bools.xml (renamed from res/values/bools.xml)0
-rw-r--r--java/res/values/colors.xml (renamed from res/values/colors.xml)0
-rw-r--r--java/res/values/dimens.xml (renamed from res/values/dimens.xml)0
-rw-r--r--java/res/values/donottranslate.xml (renamed from res/values/donottranslate.xml)2
-rw-r--r--java/res/values/durations.xml (renamed from res/values/durations.xml)0
-rw-r--r--java/res/values/keycodes.xml (renamed from res/values/keycodes.xml)0
-rw-r--r--java/res/values/strings.xml (renamed from res/values/strings.xml)3
-rwxr-xr-xjava/res/xml-de/kbd_qwerty.xml (renamed from res/xml-de/kbd_qwerty.xml)12
-rw-r--r--java/res/xml-fr/kbd_qwerty.xml (renamed from res/xml-fr/kbd_qwerty.xml)12
-rwxr-xr-xjava/res/xml-iw/kbd_qwerty.xml164
-rwxr-xr-xjava/res/xml-ru/kbd_qwerty.xml (renamed from res/xml-ru/kbd_qwerty.xml)20
-rw-r--r--java/res/xml-sv/kbd_qwerty.xml215
-rw-r--r--java/res/xml/azerty.xml (renamed from res/xml/azerty.xml)0
-rw-r--r--java/res/xml/kbd_alpha.xml (renamed from res/xml/kbd_alpha.xml)0
-rwxr-xr-xjava/res/xml/kbd_extension.xml (renamed from res/xml/kbd_extension.xml)0
-rwxr-xr-xjava/res/xml/kbd_phone.xml (renamed from res/xml/kbd_phone.xml)0
-rwxr-xr-xjava/res/xml/kbd_phone_symbols.xml (renamed from res/xml/kbd_phone_symbols.xml)0
-rw-r--r--java/res/xml/kbd_popup_template.xml (renamed from res/xml/kbd_popup_template.xml)0
-rwxr-xr-xjava/res/xml/kbd_qwerty.xml (renamed from res/xml/kbd_qwerty.xml)17
-rwxr-xr-xjava/res/xml/kbd_symbols.xml (renamed from res/xml/kbd_symbols.xml)6
-rwxr-xr-xjava/res/xml/kbd_symbols_shift.xml (renamed from res/xml/kbd_symbols_shift.xml)0
-rw-r--r--java/res/xml/language_prefs.xml (renamed from res/xml/language_prefs.xml)0
-rw-r--r--java/res/xml/method.xml (renamed from res/xml/method.xml)0
-rw-r--r--java/res/xml/popup_domains.xml (renamed from res/xml/popup_domains.xml)0
-rw-r--r--java/res/xml/popup_punctuation.xml (renamed from res/xml/popup_punctuation.xml)18
-rw-r--r--java/res/xml/popup_smileys.xml (renamed from res/xml/popup_smileys.xml)0
-rw-r--r--java/res/xml/prefs.xml (renamed from res/xml/prefs.xml)4
-rw-r--r--java/src/com/android/inputmethod/latin/AutoDictionary.java (renamed from src/com/android/inputmethod/latin/AutoDictionary.java)142
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java (renamed from src/com/android/inputmethod/latin/BinaryDictionary.java)42
-rwxr-xr-xjava/src/com/android/inputmethod/latin/CandidateView.java (renamed from src/com/android/inputmethod/latin/CandidateView.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/CandidateViewContainer.java (renamed from src/com/android/inputmethod/latin/CandidateViewContainer.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/ContactsDictionary.java (renamed from src/com/android/inputmethod/latin/ContactsDictionary.java)73
-rw-r--r--java/src/com/android/inputmethod/latin/Dictionary.java (renamed from src/com/android/inputmethod/latin/Dictionary.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableDictionary.java (renamed from src/com/android/inputmethod/latin/ExpandableDictionary.java)71
-rw-r--r--java/src/com/android/inputmethod/latin/Hints.java (renamed from src/com/android/inputmethod/latin/Hints.java)0
-rw-r--r--java/src/com/android/inputmethod/latin/InputLanguageSelection.java (renamed from src/com/android/inputmethod/latin/InputLanguageSelection.java)37
-rw-r--r--java/src/com/android/inputmethod/latin/KeyboardSwitcher.java (renamed from src/com/android/inputmethod/latin/KeyboardSwitcher.java)5
-rw-r--r--java/src/com/android/inputmethod/latin/LanguageSwitcher.java (renamed from src/com/android/inputmethod/latin/LanguageSwitcher.java)0
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java (renamed from src/com/android/inputmethod/latin/LatinIME.java)193
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java (renamed from src/com/android/inputmethod/latin/LatinIMEBackupAgent.java)8
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIMESettings.java (renamed from src/com/android/inputmethod/latin/LatinIMESettings.java)10
-rw-r--r--java/src/com/android/inputmethod/latin/LatinKeyboard.java (renamed from src/com/android/inputmethod/latin/LatinKeyboard.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinKeyboardView.java (renamed from src/com/android/inputmethod/latin/LatinKeyboardView.java)170
-rwxr-xr-xjava/src/com/android/inputmethod/latin/Suggest.java (renamed from src/com/android/inputmethod/latin/Suggest.java)13
-rw-r--r--java/src/com/android/inputmethod/latin/TextEntryState.java (renamed from src/com/android/inputmethod/latin/TextEntryState.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/Tutorial.java (renamed from src/com/android/inputmethod/latin/Tutorial.java)2
-rw-r--r--java/src/com/android/inputmethod/latin/UserDictionary.java (renamed from src/com/android/inputmethod/latin/UserDictionary.java)25
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java (renamed from src/com/android/inputmethod/latin/WordComposer.java)18
-rw-r--r--java/src/com/android/inputmethod/voice/EditingUtil.java (renamed from src/com/android/inputmethod/voice/EditingUtil.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/FieldContext.java (renamed from src/com/android/inputmethod/voice/FieldContext.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/LatinIMEWithVoice.java (renamed from src/com/android/inputmethod/voice/LatinIMEWithVoice.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java (renamed from src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/RecognitionView.java (renamed from src/com/android/inputmethod/voice/RecognitionView.java)35
-rw-r--r--java/src/com/android/inputmethod/voice/SettingsUtil.java (renamed from src/com/android/inputmethod/voice/SettingsUtil.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/VoiceInput.java (renamed from src/com/android/inputmethod/voice/VoiceInput.java)145
-rw-r--r--java/src/com/android/inputmethod/voice/VoiceInputLogger.java (renamed from src/com/android/inputmethod/voice/VoiceInputLogger.java)39
-rw-r--r--java/src/com/android/inputmethod/voice/WaveformImage.java (renamed from src/com/android/inputmethod/voice/WaveformImage.java)0
-rw-r--r--java/src/com/android/inputmethod/voice/Whitelist.java (renamed from src/com/android/inputmethod/voice/Whitelist.java)0
-rw-r--r--java/src/com/google/android/voicesearch/LatinIMEWithVoice.java (renamed from src/com/google/android/voicesearch/LatinIMEWithVoice.java)0
-rw-r--r--java/src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java (renamed from src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java)0
-rw-r--r--native/Android.mk (renamed from dictionary/Android.mk)12
-rw-r--r--native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp (renamed from dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp)68
-rw-r--r--native/src/basechars.h (renamed from dictionary/src/basechars.h)0
-rw-r--r--native/src/char_utils.cpp899
-rw-r--r--native/src/char_utils.h26
-rw-r--r--native/src/dictionary.cpp (renamed from dictionary/src/dictionary.cpp)15
-rw-r--r--native/src/dictionary.h (renamed from dictionary/src/dictionary.h)0
310 files changed, 2939 insertions, 814 deletions
diff --git a/Android.mk b/Android.mk
index ee1a82adb..8f1acc55a 100755..100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,21 +1,17 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_PACKAGE_NAME := LatinIME
-
-LOCAL_CERTIFICATE := shared
-
-LOCAL_JNI_SHARED_LIBRARIES := libjni_latinime
-
-LOCAL_STATIC_JAVA_LIBRARIES := android-common
-
-#LOCAL_AAPT_FLAGS := -0 .dict
-
-#LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
-include $(LOCAL_PATH)/dictionary/Android.mk
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 000000000..7cdf69a6a
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,52 @@
+# Copyright (C) 2007 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list. These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list. E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/LatinIME*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/LatinIME.apk)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
diff --git a/java/Android.mk b/java/Android.mk
new file mode 100755
index 000000000..4bb8986ee
--- /dev/null
+++ b/java/Android.mk
@@ -0,0 +1,22 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := LatinIME
+
+LOCAL_CERTIFICATE := shared
+
+LOCAL_JNI_SHARED_LIBRARIES := libjni_latinime
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-common
+
+#LOCAL_AAPT_FLAGS := -0 .dict
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
+
+include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/java/AndroidManifest.xml
index c42ad42ef..e229bc76a 100755
--- a/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -1,6 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.inputmethod.latin"
- android:sharedUserId="android.uid.shared">
+ package="com.android.inputmethod.latin">
<original-package android:name="com.android.inputmethod.latin" />
@@ -8,6 +7,7 @@
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
<application android:label="@string/english_ime_name"
android:backupAgent="LatinIMEBackupAgent"
@@ -32,6 +32,8 @@
android:label="@string/language_selection_title">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
+ <action android:name="com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION"/>
+ <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
diff --git a/java/MODULE_LICENSE_APACHE2 b/java/MODULE_LICENSE_APACHE2
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/java/MODULE_LICENSE_APACHE2
diff --git a/java/NOTICE b/java/NOTICE
new file mode 100644
index 000000000..7340b9e35
--- /dev/null
+++ b/java/NOTICE
@@ -0,0 +1,190 @@
+
+ Copyright (c) 2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ 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.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
diff --git a/java/proguard.flags b/java/proguard.flags
new file mode 100644
index 000000000..0a5d2dda9
--- /dev/null
+++ b/java/proguard.flags
@@ -0,0 +1,3 @@
+-keep class com.android.inputmethod.latin.BinaryDictionary {
+ int mDictLength;
+}
diff --git a/res/drawable-en-hdpi/sym_keyboard_delete.png b/java/res/drawable-en-hdpi/sym_keyboard_delete.png
index 569369e79..569369e79 100755
--- a/res/drawable-en-hdpi/sym_keyboard_delete.png
+++ b/java/res/drawable-en-hdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png
index ca7637552..ca7637552 100755
--- a/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png
+++ b/java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/res/drawable-en-mdpi/sym_keyboard_delete.png b/java/res/drawable-en-mdpi/sym_keyboard_delete.png
index f1f7c58cf..f1f7c58cf 100644
--- a/res/drawable-en-mdpi/sym_keyboard_delete.png
+++ b/java/res/drawable-en-mdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/res/drawable-en-mdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-en-mdpi/sym_keyboard_feedback_delete.png
index 3c9083972..3c9083972 100644
--- a/res/drawable-en-mdpi/sym_keyboard_feedback_delete.png
+++ b/java/res/drawable-en-mdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png
index b6c234c04..b6c234c04 100644
--- a/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png
index 73a8cd1c3..73a8cd1c3 100644
--- a/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_fulltrans_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png
index 42c7c146d..42c7c146d 100644
--- a/res/drawable-hdpi/btn_keyboard_key_normal.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
index 01e2506b0..01e2506b0 100644
--- a/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
index 83c6eb3fc..83c6eb3fc 100644
--- a/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
index e047eaff1..e047eaff1 100644
--- a/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
index 218a2d29e..218a2d29e 100644
--- a/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
index afe49512e..afe49512e 100644
--- a/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
+++ b/java/res/drawable-hdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/res/drawable-hdpi/cancel.png b/java/res/drawable-hdpi/cancel.png
index 6585bde17..6585bde17 100755
--- a/res/drawable-hdpi/cancel.png
+++ b/java/res/drawable-hdpi/cancel.png
Binary files differ
diff --git a/res/drawable-hdpi/candidate_feedback_background.9.png b/java/res/drawable-hdpi/candidate_feedback_background.9.png
index 203c4e640..203c4e640 100755
--- a/res/drawable-hdpi/candidate_feedback_background.9.png
+++ b/java/res/drawable-hdpi/candidate_feedback_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/caution.png b/java/res/drawable-hdpi/caution.png
index 5cb6c54b9..5cb6c54b9 100755
--- a/res/drawable-hdpi/caution.png
+++ b/java/res/drawable-hdpi/caution.png
Binary files differ
diff --git a/res/drawable-hdpi/dialog_bubble_step02.9.png b/java/res/drawable-hdpi/dialog_bubble_step02.9.png
index b338364c5..b338364c5 100755
--- a/res/drawable-hdpi/dialog_bubble_step02.9.png
+++ b/java/res/drawable-hdpi/dialog_bubble_step02.9.png
Binary files differ
diff --git a/res/drawable-hdpi/dialog_bubble_step07.9.png b/java/res/drawable-hdpi/dialog_bubble_step07.9.png
index 94b915432..94b915432 100755
--- a/res/drawable-hdpi/dialog_bubble_step07.9.png
+++ b/java/res/drawable-hdpi/dialog_bubble_step07.9.png
Binary files differ
diff --git a/res/drawable-hdpi/dialog_top_dark_bottom_medium.png b/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png
index 7c79a4f90..7c79a4f90 100755
--- a/res/drawable-hdpi/dialog_top_dark_bottom_medium.png
+++ b/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png
Binary files differ
diff --git a/res/drawable-hdpi/highlight_pressed.png b/java/res/drawable-hdpi/highlight_pressed.png
index ae04901a0..ae04901a0 100644
--- a/res/drawable-hdpi/highlight_pressed.png
+++ b/java/res/drawable-hdpi/highlight_pressed.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_alert_large.png b/java/res/drawable-hdpi/ic_dialog_alert_large.png
index 7e2646d65..7e2646d65 100755
--- a/res/drawable-hdpi/ic_dialog_alert_large.png
+++ b/java/res/drawable-hdpi/ic_dialog_alert_large.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_keyboard.png b/java/res/drawable-hdpi/ic_dialog_keyboard.png
index c7729566c..c7729566c 100755
--- a/res/drawable-hdpi/ic_dialog_keyboard.png
+++ b/java/res/drawable-hdpi/ic_dialog_keyboard.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_voice_input.png b/java/res/drawable-hdpi/ic_dialog_voice_input.png
index 11a3cfe77..11a3cfe77 100755
--- a/res/drawable-hdpi/ic_dialog_voice_input.png
+++ b/java/res/drawable-hdpi/ic_dialog_voice_input.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_wave_0_0.png b/java/res/drawable-hdpi/ic_dialog_wave_0_0.png
index 33023c3f7..33023c3f7 100755
--- a/res/drawable-hdpi/ic_dialog_wave_0_0.png
+++ b/java/res/drawable-hdpi/ic_dialog_wave_0_0.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_wave_1_3.png b/java/res/drawable-hdpi/ic_dialog_wave_1_3.png
index 662686c0f..662686c0f 100755
--- a/res/drawable-hdpi/ic_dialog_wave_1_3.png
+++ b/java/res/drawable-hdpi/ic_dialog_wave_1_3.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_wave_2_3.png b/java/res/drawable-hdpi/ic_dialog_wave_2_3.png
index e23ada57e..e23ada57e 100755
--- a/res/drawable-hdpi/ic_dialog_wave_2_3.png
+++ b/java/res/drawable-hdpi/ic_dialog_wave_2_3.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_wave_3_3.png b/java/res/drawable-hdpi/ic_dialog_wave_3_3.png
index 5fe5492ad..5fe5492ad 100755
--- a/res/drawable-hdpi/ic_dialog_wave_3_3.png
+++ b/java/res/drawable-hdpi/ic_dialog_wave_3_3.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_wave_4_3.png b/java/res/drawable-hdpi/ic_dialog_wave_4_3.png
index 81b803fd0..81b803fd0 100755
--- a/res/drawable-hdpi/ic_dialog_wave_4_3.png
+++ b/java/res/drawable-hdpi/ic_dialog_wave_4_3.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_mic_dialog.png b/java/res/drawable-hdpi/ic_mic_dialog.png
index 349dc4b37..349dc4b37 100644
--- a/res/drawable-hdpi/ic_mic_dialog.png
+++ b/java/res/drawable-hdpi/ic_mic_dialog.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_suggest_strip_microphone.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
index c00b4aaa6..c00b4aaa6 100644
--- a/res/drawable-hdpi/ic_suggest_strip_microphone.png
+++ b/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
index 256dc3d61..256dc3d61 100644
--- a/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
+++ b/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png b/java/res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png
index e375f262f..e375f262f 100755
--- a/res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png
+++ b/java/res/drawable-hdpi/ic_suggest_strip_scroll_left_arrow.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png b/java/res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png
index d38ae7562..d38ae7562 100755
--- a/res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png
+++ b/java/res/drawable-hdpi/ic_suggest_strip_scroll_right_arrow.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_background.9.png b/java/res/drawable-hdpi/keyboard_background.9.png
index edffac5b8..edffac5b8 100755
--- a/res/drawable-hdpi/keyboard_background.9.png
+++ b/java/res/drawable-hdpi/keyboard_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_suggest_strip.9.png b/java/res/drawable-hdpi/keyboard_suggest_strip.9.png
index 0cbb3ed86..0cbb3ed86 100755
--- a/res/drawable-hdpi/keyboard_suggest_strip.9.png
+++ b/java/res/drawable-hdpi/keyboard_suggest_strip.9.png
Binary files differ
diff --git a/res/drawable-hdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png
index a5980388a..a5980388a 100644
--- a/res/drawable-hdpi/keyboard_suggest_strip_divider.png
+++ b/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png
Binary files differ
diff --git a/res/drawable-hdpi/list_selector_background_pressed.9.png b/java/res/drawable-hdpi/list_selector_background_pressed.9.png
index ba79cf7f8..ba79cf7f8 100644
--- a/res/drawable-hdpi/list_selector_background_pressed.9.png
+++ b/java/res/drawable-hdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi/mic_slash.png b/java/res/drawable-hdpi/mic_slash.png
index a7b734c71..a7b734c71 100644
--- a/res/drawable-hdpi/mic_slash.png
+++ b/java/res/drawable-hdpi/mic_slash.png
Binary files differ
diff --git a/res/drawable-hdpi/ok_cancel.png b/java/res/drawable-hdpi/ok_cancel.png
index 6a99528ef..6a99528ef 100755
--- a/res/drawable-hdpi/ok_cancel.png
+++ b/java/res/drawable-hdpi/ok_cancel.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level0.png b/java/res/drawable-hdpi/speak_now_level0.png
index a681da606..a681da606 100755
--- a/res/drawable-hdpi/speak_now_level0.png
+++ b/java/res/drawable-hdpi/speak_now_level0.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level1.png b/java/res/drawable-hdpi/speak_now_level1.png
index 0dbec69a7..0dbec69a7 100755
--- a/res/drawable-hdpi/speak_now_level1.png
+++ b/java/res/drawable-hdpi/speak_now_level1.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level2.png b/java/res/drawable-hdpi/speak_now_level2.png
index 45cbff2b7..45cbff2b7 100755
--- a/res/drawable-hdpi/speak_now_level2.png
+++ b/java/res/drawable-hdpi/speak_now_level2.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level3.png b/java/res/drawable-hdpi/speak_now_level3.png
index abda8f683..abda8f683 100755
--- a/res/drawable-hdpi/speak_now_level3.png
+++ b/java/res/drawable-hdpi/speak_now_level3.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level4.png b/java/res/drawable-hdpi/speak_now_level4.png
index 18356351a..18356351a 100755
--- a/res/drawable-hdpi/speak_now_level4.png
+++ b/java/res/drawable-hdpi/speak_now_level4.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level5.png b/java/res/drawable-hdpi/speak_now_level5.png
index 7d4fd5f20..7d4fd5f20 100755
--- a/res/drawable-hdpi/speak_now_level5.png
+++ b/java/res/drawable-hdpi/speak_now_level5.png
Binary files differ
diff --git a/res/drawable-hdpi/speak_now_level6.png b/java/res/drawable-hdpi/speak_now_level6.png
index e06990faa..e06990faa 100755
--- a/res/drawable-hdpi/speak_now_level6.png
+++ b/java/res/drawable-hdpi/speak_now_level6.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_123_mic.png b/java/res/drawable-hdpi/sym_keyboard_123_mic.png
index 62669803d..62669803d 100644
--- a/res/drawable-hdpi/sym_keyboard_123_mic.png
+++ b/java/res/drawable-hdpi/sym_keyboard_123_mic.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_delete.png b/java/res/drawable-hdpi/sym_keyboard_delete.png
index 59d78bec0..59d78bec0 100755
--- a/res/drawable-hdpi/sym_keyboard_delete.png
+++ b/java/res/drawable-hdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_done.png b/java/res/drawable-hdpi/sym_keyboard_done.png
index 471c5021b..471c5021b 100755
--- a/res/drawable-hdpi/sym_keyboard_done.png
+++ b/java/res/drawable-hdpi/sym_keyboard_done.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
index f57e581d5..f57e581d5 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_123_mic.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
index ca7637552..ca7637552 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_delete.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_done.png b/java/res/drawable-hdpi/sym_keyboard_feedback_done.png
index 7015e266a..7015e266a 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_done.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_done.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
index c7638bff1..c7638bff1 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
index 7acb07c86..7acb07c86 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_mic.png b/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png
index cb86a5598..cb86a5598 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_mic.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_mic.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
index 728c6f7d4..728c6f7d4 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_numalt.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_return.png b/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
index ae57299e4..ae57299e4 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_return.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_return.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_search.png b/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
index d931b39e2..d931b39e2 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_search.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_search.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
index 4db31c849..4db31c849 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_shift.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_shift.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png b/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
index 3fd5659fd..3fd5659fd 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_space.png b/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
index 98266ee52..98266ee52 100755
--- a/res/drawable-hdpi/sym_keyboard_feedback_space.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_space.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
index 7754752f3..7754752f3 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_tab.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_tab.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_feedback_tabprev.png b/java/res/drawable-hdpi/sym_keyboard_feedback_tabprev.png
index 36f6b5364..36f6b5364 100644
--- a/res/drawable-hdpi/sym_keyboard_feedback_tabprev.png
+++ b/java/res/drawable-hdpi/sym_keyboard_feedback_tabprev.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_globe.png b/java/res/drawable-hdpi/sym_keyboard_globe.png
index fa747642d..fa747642d 100644
--- a/res/drawable-hdpi/sym_keyboard_globe.png
+++ b/java/res/drawable-hdpi/sym_keyboard_globe.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
index 65ccfda87..65ccfda87 100644
--- a/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
+++ b/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
index 0d01bc224..0d01bc224 100644
--- a/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
+++ b/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_mic.png b/java/res/drawable-hdpi/sym_keyboard_mic.png
index 0a0a68a96..0a0a68a96 100644
--- a/res/drawable-hdpi/sym_keyboard_mic.png
+++ b/java/res/drawable-hdpi/sym_keyboard_mic.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num0.png b/java/res/drawable-hdpi/sym_keyboard_num0.png
index 10ac70b9d..10ac70b9d 100755
--- a/res/drawable-hdpi/sym_keyboard_num0.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num0.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num1.png b/java/res/drawable-hdpi/sym_keyboard_num1.png
index 0fc03efa5..0fc03efa5 100755
--- a/res/drawable-hdpi/sym_keyboard_num1.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num1.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num2.png b/java/res/drawable-hdpi/sym_keyboard_num2.png
index 283560b35..283560b35 100755
--- a/res/drawable-hdpi/sym_keyboard_num2.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num2.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num3.png b/java/res/drawable-hdpi/sym_keyboard_num3.png
index 9a3b3294b..9a3b3294b 100755
--- a/res/drawable-hdpi/sym_keyboard_num3.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num3.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num4.png b/java/res/drawable-hdpi/sym_keyboard_num4.png
index f13ff1ae9..f13ff1ae9 100755
--- a/res/drawable-hdpi/sym_keyboard_num4.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num4.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num5.png b/java/res/drawable-hdpi/sym_keyboard_num5.png
index c251329fa..c251329fa 100755
--- a/res/drawable-hdpi/sym_keyboard_num5.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num5.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num6.png b/java/res/drawable-hdpi/sym_keyboard_num6.png
index 4acba4c91..4acba4c91 100755
--- a/res/drawable-hdpi/sym_keyboard_num6.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num6.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num7.png b/java/res/drawable-hdpi/sym_keyboard_num7.png
index 14931c18c..14931c18c 100755
--- a/res/drawable-hdpi/sym_keyboard_num7.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num7.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num8.png b/java/res/drawable-hdpi/sym_keyboard_num8.png
index d4973fdc9..d4973fdc9 100755
--- a/res/drawable-hdpi/sym_keyboard_num8.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num8.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_num9.png b/java/res/drawable-hdpi/sym_keyboard_num9.png
index 49cec66f4..49cec66f4 100755
--- a/res/drawable-hdpi/sym_keyboard_num9.png
+++ b/java/res/drawable-hdpi/sym_keyboard_num9.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_numalt.png b/java/res/drawable-hdpi/sym_keyboard_numalt.png
index 3cc5311cd..3cc5311cd 100755
--- a/res/drawable-hdpi/sym_keyboard_numalt.png
+++ b/java/res/drawable-hdpi/sym_keyboard_numalt.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_numpound.png b/java/res/drawable-hdpi/sym_keyboard_numpound.png
index d09133929..d09133929 100755
--- a/res/drawable-hdpi/sym_keyboard_numpound.png
+++ b/java/res/drawable-hdpi/sym_keyboard_numpound.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_numstar.png b/java/res/drawable-hdpi/sym_keyboard_numstar.png
index e838e169f..e838e169f 100755
--- a/res/drawable-hdpi/sym_keyboard_numstar.png
+++ b/java/res/drawable-hdpi/sym_keyboard_numstar.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_return.png b/java/res/drawable-hdpi/sym_keyboard_return.png
index 58505c5e0..58505c5e0 100755
--- a/res/drawable-hdpi/sym_keyboard_return.png
+++ b/java/res/drawable-hdpi/sym_keyboard_return.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_search.png b/java/res/drawable-hdpi/sym_keyboard_search.png
index e72cde3bb..e72cde3bb 100755
--- a/res/drawable-hdpi/sym_keyboard_search.png
+++ b/java/res/drawable-hdpi/sym_keyboard_search.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_shift.png b/java/res/drawable-hdpi/sym_keyboard_shift.png
index 814908178..814908178 100755
--- a/res/drawable-hdpi/sym_keyboard_shift.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_shift_locked.png b/java/res/drawable-hdpi/sym_keyboard_shift_locked.png
index 31ca27718..31ca27718 100755
--- a/res/drawable-hdpi/sym_keyboard_shift_locked.png
+++ b/java/res/drawable-hdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_space.png b/java/res/drawable-hdpi/sym_keyboard_space.png
index 3e98b3014..3e98b3014 100755
--- a/res/drawable-hdpi/sym_keyboard_space.png
+++ b/java/res/drawable-hdpi/sym_keyboard_space.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_tab.png b/java/res/drawable-hdpi/sym_keyboard_tab.png
index 1d4d92bd1..1d4d92bd1 100644
--- a/res/drawable-hdpi/sym_keyboard_tab.png
+++ b/java/res/drawable-hdpi/sym_keyboard_tab.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_keyboard_tabprev.png b/java/res/drawable-hdpi/sym_keyboard_tabprev.png
index 51bff1bcd..51bff1bcd 100644
--- a/res/drawable-hdpi/sym_keyboard_tabprev.png
+++ b/java/res/drawable-hdpi/sym_keyboard_tabprev.png
Binary files differ
diff --git a/res/drawable-hdpi/voice_ime_background.9.png b/java/res/drawable-hdpi/voice_ime_background.9.png
index 73fb0901e..73fb0901e 100755
--- a/res/drawable-hdpi/voice_ime_background.9.png
+++ b/java/res/drawable-hdpi/voice_ime_background.9.png
Binary files differ
diff --git a/res/drawable-hdpi/working.png b/java/res/drawable-hdpi/working.png
index 8b51ed116..8b51ed116 100755
--- a/res/drawable-hdpi/working.png
+++ b/java/res/drawable-hdpi/working.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png
index 603bf0e15..603bf0e15 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png
index 6ddd516e7..6ddd516e7 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png
index 65fdeb353..65fdeb353 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png
index 7ec915fe8..7ec915fe8 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png
index 439271723..439271723 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png
index c2cc32044..c2cc32044 100755
--- a/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png
+++ b/java/res/drawable-land-hdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/res/drawable-land-hdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-land-hdpi/keyboard_suggest_strip_divider.png
index 1a03c52e6..1a03c52e6 100755
--- a/res/drawable-land-hdpi/keyboard_suggest_strip_divider.png
+++ b/java/res/drawable-land-hdpi/keyboard_suggest_strip_divider.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_normal.9.png
index ea2506c6d..ea2506c6d 100644
--- a/res/drawable-land-mdpi/btn_keyboard_key_normal.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png
index bda9b8394..bda9b8394 100644
--- a/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png
index 0c16ed509..0c16ed509 100644
--- a/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png
index 6b5c718c7..6b5c718c7 100755
--- a/res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png
index bdcf06e1b..bdcf06e1b 100644
--- a/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png
index 79621a9e6..79621a9e6 100644
--- a/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png
+++ b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/res/drawable-land-mdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-land-mdpi/keyboard_suggest_strip_divider.png
index e54c5b099..e54c5b099 100644
--- a/res/drawable-land-mdpi/keyboard_suggest_strip_divider.png
+++ b/java/res/drawable-land-mdpi/keyboard_suggest_strip_divider.png
Binary files differ
diff --git a/res/drawable-land/btn_keyboard_key.xml b/java/res/drawable-land/btn_keyboard_key.xml
index 45578e582..45578e582 100644
--- a/res/drawable-land/btn_keyboard_key.xml
+++ b/java/res/drawable-land/btn_keyboard_key.xml
diff --git a/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
index 20f3d5087..20f3d5087 100644
--- a/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_normal.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
index 1ed3065c5..1ed3065c5 100644
--- a/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_fulltrans_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal.9.png
index 7ba18dd25..7ba18dd25 100644
--- a/res/drawable-mdpi/btn_keyboard_key_normal.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png
index bda9b8394..bda9b8394 100644
--- a/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_off.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png
index 0c16ed509..0c16ed509 100644
--- a/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_normal_on.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
index 39b9314a1..39b9314a1 100644
--- a/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png
index bdcf06e1b..bdcf06e1b 100644
--- a/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_off.9.png
Binary files differ
diff --git a/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png
index 79621a9e6..79621a9e6 100644
--- a/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png
+++ b/java/res/drawable-mdpi/btn_keyboard_key_pressed_on.9.png
Binary files differ
diff --git a/res/drawable-mdpi/candidate_feedback_background.9.png b/java/res/drawable-mdpi/candidate_feedback_background.9.png
index 2a80f096d..2a80f096d 100644
--- a/res/drawable-mdpi/candidate_feedback_background.9.png
+++ b/java/res/drawable-mdpi/candidate_feedback_background.9.png
Binary files differ
diff --git a/res/drawable-mdpi/dialog_bubble_step02.9.png b/java/res/drawable-mdpi/dialog_bubble_step02.9.png
index d77f85fe2..d77f85fe2 100755
--- a/res/drawable-mdpi/dialog_bubble_step02.9.png
+++ b/java/res/drawable-mdpi/dialog_bubble_step02.9.png
Binary files differ
diff --git a/res/drawable-mdpi/dialog_bubble_step07.9.png b/java/res/drawable-mdpi/dialog_bubble_step07.9.png
index 80f4a0eaa..80f4a0eaa 100755
--- a/res/drawable-mdpi/dialog_bubble_step07.9.png
+++ b/java/res/drawable-mdpi/dialog_bubble_step07.9.png
Binary files differ
diff --git a/res/drawable-mdpi/highlight_pressed.png b/java/res/drawable-mdpi/highlight_pressed.png
index d27f1061a..d27f1061a 100644
--- a/res/drawable-mdpi/highlight_pressed.png
+++ b/java/res/drawable-mdpi/highlight_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialog_keyboard.png b/java/res/drawable-mdpi/ic_dialog_keyboard.png
index 9a5aada8b..9a5aada8b 100644
--- a/res/drawable-mdpi/ic_dialog_keyboard.png
+++ b/java/res/drawable-mdpi/ic_dialog_keyboard.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_mic_dialog.png b/java/res/drawable-mdpi/ic_mic_dialog.png
index 77613ca05..77613ca05 100644
--- a/res/drawable-mdpi/ic_mic_dialog.png
+++ b/java/res/drawable-mdpi/ic_mic_dialog.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_suggest_strip_microphone.png b/java/res/drawable-mdpi/ic_suggest_strip_microphone.png
index 18f314a61..18f314a61 100644
--- a/res/drawable-mdpi/ic_suggest_strip_microphone.png
+++ b/java/res/drawable-mdpi/ic_suggest_strip_microphone.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
index ff629b674..ff629b674 100644
--- a/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
+++ b/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png b/java/res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png
index a9adef2ba..a9adef2ba 100644
--- a/res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png
+++ b/java/res/drawable-mdpi/ic_suggest_strip_scroll_left_arrow.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png b/java/res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png
index 639a28711..639a28711 100644
--- a/res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png
+++ b/java/res/drawable-mdpi/ic_suggest_strip_scroll_right_arrow.png
Binary files differ
diff --git a/res/drawable-mdpi/keyboard_background.9.png b/java/res/drawable-mdpi/keyboard_background.9.png
index 2bd4b628d..2bd4b628d 100644
--- a/res/drawable-mdpi/keyboard_background.9.png
+++ b/java/res/drawable-mdpi/keyboard_background.9.png
Binary files differ
diff --git a/res/drawable-mdpi/keyboard_suggest_strip.9.png b/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
index 71bf5e8f4..71bf5e8f4 100644
--- a/res/drawable-mdpi/keyboard_suggest_strip.9.png
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip.9.png
Binary files differ
diff --git a/res/drawable-mdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
index c9413d7c1..c9413d7c1 100644
--- a/res/drawable-mdpi/keyboard_suggest_strip_divider.png
+++ b/java/res/drawable-mdpi/keyboard_suggest_strip_divider.png
Binary files differ
diff --git a/res/drawable-mdpi/list_selector_background_pressed.9.png b/java/res/drawable-mdpi/list_selector_background_pressed.9.png
index 02b4e9a53..02b4e9a53 100644
--- a/res/drawable-mdpi/list_selector_background_pressed.9.png
+++ b/java/res/drawable-mdpi/list_selector_background_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_123_mic.png b/java/res/drawable-mdpi/sym_keyboard_123_mic.png
index 35afe0821..35afe0821 100644
--- a/res/drawable-mdpi/sym_keyboard_123_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_123_mic.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_delete.png b/java/res/drawable-mdpi/sym_keyboard_delete.png
index 43a033ead..43a033ead 100644
--- a/res/drawable-mdpi/sym_keyboard_delete.png
+++ b/java/res/drawable-mdpi/sym_keyboard_delete.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_done.png b/java/res/drawable-mdpi/sym_keyboard_done.png
index c0d6d1394..c0d6d1394 100755
--- a/res/drawable-mdpi/sym_keyboard_done.png
+++ b/java/res/drawable-mdpi/sym_keyboard_done.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png b/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
index bc11cf31a..bc11cf31a 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_123_mic.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
index 1edb10b4e..1edb10b4e 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_delete.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_delete.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_done.png b/java/res/drawable-mdpi/sym_keyboard_feedback_done.png
index 0d7ebd4e5..0d7ebd4e5 100755
--- a/res/drawable-mdpi/sym_keyboard_feedback_done.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_done.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
index e3f80fada..e3f80fada 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
index 3cb0d9913..3cb0d9913 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_mic.png b/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
index 247d5b3a9..247d5b3a9 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_mic.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_numalt.png b/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
index aac737615..aac737615 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_numalt.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_return.png b/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
index 03d9c9b2d..03d9c9b2d 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_return.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_return.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_search.png b/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
index f4af341eb..f4af341eb 100755
--- a/res/drawable-mdpi/sym_keyboard_feedback_search.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_search.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_shift.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
index 97f4661f8..97f4661f8 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_shift.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_shift.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png b/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
index 7194b30b0..7194b30b0 100755
--- a/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_shift_locked.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_space.png b/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
index 739db6879..739db6879 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_space.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_space.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_tab.png b/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
index 593fa6703..593fa6703 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_tab.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_tab.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_feedback_tabprev.png b/java/res/drawable-mdpi/sym_keyboard_feedback_tabprev.png
index d4b3e7db3..d4b3e7db3 100644
--- a/res/drawable-mdpi/sym_keyboard_feedback_tabprev.png
+++ b/java/res/drawable-mdpi/sym_keyboard_feedback_tabprev.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_globe.png b/java/res/drawable-mdpi/sym_keyboard_globe.png
index f30c1b640..f30c1b640 100644
--- a/res/drawable-mdpi/sym_keyboard_globe.png
+++ b/java/res/drawable-mdpi/sym_keyboard_globe.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
index 91eda5f2d..91eda5f2d 100644
--- a/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
index 62a5beba4..62a5beba4 100644
--- a/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
+++ b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_mic.png b/java/res/drawable-mdpi/sym_keyboard_mic.png
index a75809549..a75809549 100644
--- a/res/drawable-mdpi/sym_keyboard_mic.png
+++ b/java/res/drawable-mdpi/sym_keyboard_mic.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num0.png b/java/res/drawable-mdpi/sym_keyboard_num0.png
index e7007c871..e7007c871 100644
--- a/res/drawable-mdpi/sym_keyboard_num0.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num0.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num1.png b/java/res/drawable-mdpi/sym_keyboard_num1.png
index aaac11b0c..aaac11b0c 100644
--- a/res/drawable-mdpi/sym_keyboard_num1.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num1.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num2.png b/java/res/drawable-mdpi/sym_keyboard_num2.png
index 4372eb8f0..4372eb8f0 100644
--- a/res/drawable-mdpi/sym_keyboard_num2.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num2.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num3.png b/java/res/drawable-mdpi/sym_keyboard_num3.png
index 6f54c850f..6f54c850f 100644
--- a/res/drawable-mdpi/sym_keyboard_num3.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num3.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num4.png b/java/res/drawable-mdpi/sym_keyboard_num4.png
index 3e50bb957..3e50bb957 100644
--- a/res/drawable-mdpi/sym_keyboard_num4.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num4.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num5.png b/java/res/drawable-mdpi/sym_keyboard_num5.png
index c39ef4404..c39ef4404 100644
--- a/res/drawable-mdpi/sym_keyboard_num5.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num5.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num6.png b/java/res/drawable-mdpi/sym_keyboard_num6.png
index ea88ceb94..ea88ceb94 100644
--- a/res/drawable-mdpi/sym_keyboard_num6.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num6.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num7.png b/java/res/drawable-mdpi/sym_keyboard_num7.png
index ce800ba42..ce800ba42 100644
--- a/res/drawable-mdpi/sym_keyboard_num7.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num7.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num8.png b/java/res/drawable-mdpi/sym_keyboard_num8.png
index 1a8ff94bf..1a8ff94bf 100644
--- a/res/drawable-mdpi/sym_keyboard_num8.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num8.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_num9.png b/java/res/drawable-mdpi/sym_keyboard_num9.png
index 8b344c0a6..8b344c0a6 100644
--- a/res/drawable-mdpi/sym_keyboard_num9.png
+++ b/java/res/drawable-mdpi/sym_keyboard_num9.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_numalt.png b/java/res/drawable-mdpi/sym_keyboard_numalt.png
index 32a2cf3ca..32a2cf3ca 100644
--- a/res/drawable-mdpi/sym_keyboard_numalt.png
+++ b/java/res/drawable-mdpi/sym_keyboard_numalt.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_numpound.png b/java/res/drawable-mdpi/sym_keyboard_numpound.png
index b2419d9ab..b2419d9ab 100644
--- a/res/drawable-mdpi/sym_keyboard_numpound.png
+++ b/java/res/drawable-mdpi/sym_keyboard_numpound.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_numstar.png b/java/res/drawable-mdpi/sym_keyboard_numstar.png
index cb66f968f..cb66f968f 100644
--- a/res/drawable-mdpi/sym_keyboard_numstar.png
+++ b/java/res/drawable-mdpi/sym_keyboard_numstar.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_return.png b/java/res/drawable-mdpi/sym_keyboard_return.png
index 17f257439..17f257439 100644
--- a/res/drawable-mdpi/sym_keyboard_return.png
+++ b/java/res/drawable-mdpi/sym_keyboard_return.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_search.png b/java/res/drawable-mdpi/sym_keyboard_search.png
index 127755d6b..127755d6b 100755
--- a/res/drawable-mdpi/sym_keyboard_search.png
+++ b/java/res/drawable-mdpi/sym_keyboard_search.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_shift.png b/java/res/drawable-mdpi/sym_keyboard_shift.png
index 0566e5a88..0566e5a88 100644
--- a/res/drawable-mdpi/sym_keyboard_shift.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_shift_locked.png b/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
index ccaf05d3b..ccaf05d3b 100755
--- a/res/drawable-mdpi/sym_keyboard_shift_locked.png
+++ b/java/res/drawable-mdpi/sym_keyboard_shift_locked.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_space.png b/java/res/drawable-mdpi/sym_keyboard_space.png
index 4e6273b89..4e6273b89 100644
--- a/res/drawable-mdpi/sym_keyboard_space.png
+++ b/java/res/drawable-mdpi/sym_keyboard_space.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_tab.png b/java/res/drawable-mdpi/sym_keyboard_tab.png
index cd9daff08..cd9daff08 100644
--- a/res/drawable-mdpi/sym_keyboard_tab.png
+++ b/java/res/drawable-mdpi/sym_keyboard_tab.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_keyboard_tabprev.png b/java/res/drawable-mdpi/sym_keyboard_tabprev.png
index eb90872fc..eb90872fc 100644
--- a/res/drawable-mdpi/sym_keyboard_tabprev.png
+++ b/java/res/drawable-mdpi/sym_keyboard_tabprev.png
Binary files differ
diff --git a/res/drawable/btn_keyboard_key.xml b/java/res/drawable/btn_keyboard_key.xml
index 45578e582..45578e582 100644
--- a/res/drawable/btn_keyboard_key.xml
+++ b/java/res/drawable/btn_keyboard_key.xml
diff --git a/res/drawable/btn_keyboard_key_fulltrans.xml b/java/res/drawable/btn_keyboard_key_fulltrans.xml
index bad2a931d..bad2a931d 100644
--- a/res/drawable/btn_keyboard_key_fulltrans.xml
+++ b/java/res/drawable/btn_keyboard_key_fulltrans.xml
diff --git a/res/drawable/cancel.png b/java/res/drawable/cancel.png
index 081532bec..081532bec 100644
--- a/res/drawable/cancel.png
+++ b/java/res/drawable/cancel.png
Binary files differ
diff --git a/res/drawable/caution.png b/java/res/drawable/caution.png
index eaef53425..eaef53425 100644
--- a/res/drawable/caution.png
+++ b/java/res/drawable/caution.png
Binary files differ
diff --git a/res/drawable/dialog_top_dark_bottom_medium.9.png b/java/res/drawable/dialog_top_dark_bottom_medium.9.png
index cf7ecaf1e..cf7ecaf1e 100644
--- a/res/drawable/dialog_top_dark_bottom_medium.9.png
+++ b/java/res/drawable/dialog_top_dark_bottom_medium.9.png
Binary files differ
diff --git a/res/drawable/ic_dialog_alert_large.png b/java/res/drawable/ic_dialog_alert_large.png
index 2d4a164a7..2d4a164a7 100644
--- a/res/drawable/ic_dialog_alert_large.png
+++ b/java/res/drawable/ic_dialog_alert_large.png
Binary files differ
diff --git a/res/drawable/ic_dialog_voice_input.png b/java/res/drawable/ic_dialog_voice_input.png
index d28914132..d28914132 100644
--- a/res/drawable/ic_dialog_voice_input.png
+++ b/java/res/drawable/ic_dialog_voice_input.png
Binary files differ
diff --git a/res/drawable/ic_dialog_wave_0_0.png b/java/res/drawable/ic_dialog_wave_0_0.png
index 9c3c28f37..9c3c28f37 100644
--- a/res/drawable/ic_dialog_wave_0_0.png
+++ b/java/res/drawable/ic_dialog_wave_0_0.png
Binary files differ
diff --git a/res/drawable/ic_dialog_wave_1_3.png b/java/res/drawable/ic_dialog_wave_1_3.png
index d33bd0d9b..d33bd0d9b 100644
--- a/res/drawable/ic_dialog_wave_1_3.png
+++ b/java/res/drawable/ic_dialog_wave_1_3.png
Binary files differ
diff --git a/res/drawable/ic_dialog_wave_2_3.png b/java/res/drawable/ic_dialog_wave_2_3.png
index 5094a6e6c..5094a6e6c 100644
--- a/res/drawable/ic_dialog_wave_2_3.png
+++ b/java/res/drawable/ic_dialog_wave_2_3.png
Binary files differ
diff --git a/res/drawable/ic_dialog_wave_3_3.png b/java/res/drawable/ic_dialog_wave_3_3.png
index 69917564d..69917564d 100644
--- a/res/drawable/ic_dialog_wave_3_3.png
+++ b/java/res/drawable/ic_dialog_wave_3_3.png
Binary files differ
diff --git a/res/drawable/ic_dialog_wave_4_3.png b/java/res/drawable/ic_dialog_wave_4_3.png
index af5a84c31..af5a84c31 100644
--- a/res/drawable/ic_dialog_wave_4_3.png
+++ b/java/res/drawable/ic_dialog_wave_4_3.png
Binary files differ
diff --git a/res/drawable/ic_suggest_scroll_background.xml b/java/res/drawable/ic_suggest_scroll_background.xml
index 9d246e40e..9d246e40e 100644
--- a/res/drawable/ic_suggest_scroll_background.xml
+++ b/java/res/drawable/ic_suggest_scroll_background.xml
diff --git a/res/drawable/mic_slash.png b/java/res/drawable/mic_slash.png
index 0b0fb5803..0b0fb5803 100644
--- a/res/drawable/mic_slash.png
+++ b/java/res/drawable/mic_slash.png
Binary files differ
diff --git a/res/drawable/ok_cancel.png b/java/res/drawable/ok_cancel.png
index 0601d3231..0601d3231 100644
--- a/res/drawable/ok_cancel.png
+++ b/java/res/drawable/ok_cancel.png
Binary files differ
diff --git a/res/drawable/speak_now_level0.png b/java/res/drawable/speak_now_level0.png
index abc845466..abc845466 100644
--- a/res/drawable/speak_now_level0.png
+++ b/java/res/drawable/speak_now_level0.png
Binary files differ
diff --git a/res/drawable/speak_now_level1.png b/java/res/drawable/speak_now_level1.png
index 67cb235bf..67cb235bf 100644
--- a/res/drawable/speak_now_level1.png
+++ b/java/res/drawable/speak_now_level1.png
Binary files differ
diff --git a/res/drawable/speak_now_level2.png b/java/res/drawable/speak_now_level2.png
index 1e07f26c6..1e07f26c6 100644
--- a/res/drawable/speak_now_level2.png
+++ b/java/res/drawable/speak_now_level2.png
Binary files differ
diff --git a/res/drawable/speak_now_level3.png b/java/res/drawable/speak_now_level3.png
index 31991daee..31991daee 100644
--- a/res/drawable/speak_now_level3.png
+++ b/java/res/drawable/speak_now_level3.png
Binary files differ
diff --git a/res/drawable/speak_now_level4.png b/java/res/drawable/speak_now_level4.png
index 7363ca892..7363ca892 100644
--- a/res/drawable/speak_now_level4.png
+++ b/java/res/drawable/speak_now_level4.png
Binary files differ
diff --git a/res/drawable/speak_now_level5.png b/java/res/drawable/speak_now_level5.png
index 9034908f4..9034908f4 100644
--- a/res/drawable/speak_now_level5.png
+++ b/java/res/drawable/speak_now_level5.png
Binary files differ
diff --git a/res/drawable/speak_now_level6.png b/java/res/drawable/speak_now_level6.png
index 3eaa9bdad..3eaa9bdad 100644
--- a/res/drawable/speak_now_level6.png
+++ b/java/res/drawable/speak_now_level6.png
Binary files differ
diff --git a/res/drawable/voice_ime_background.9.png b/java/res/drawable/voice_ime_background.9.png
index 67802492a..67802492a 100644
--- a/res/drawable/voice_ime_background.9.png
+++ b/java/res/drawable/voice_ime_background.9.png
Binary files differ
diff --git a/res/drawable/voice_swipe_hint.png b/java/res/drawable/voice_swipe_hint.png
index bb8873251..bb8873251 100644
--- a/res/drawable/voice_swipe_hint.png
+++ b/java/res/drawable/voice_swipe_hint.png
Binary files differ
diff --git a/res/drawable/working.png b/java/res/drawable/working.png
index 6246a6d1c..6246a6d1c 100644
--- a/res/drawable/working.png
+++ b/java/res/drawable/working.png
Binary files differ
diff --git a/res/layout/bubble_text.xml b/java/res/layout/bubble_text.xml
index c3957b65e..c3957b65e 100644
--- a/res/layout/bubble_text.xml
+++ b/java/res/layout/bubble_text.xml
diff --git a/res/layout/candidate_preview.xml b/java/res/layout/candidate_preview.xml
index fe2002d46..fe2002d46 100755
--- a/res/layout/candidate_preview.xml
+++ b/java/res/layout/candidate_preview.xml
diff --git a/res/layout/candidates.xml b/java/res/layout/candidates.xml
index 068c17e56..068c17e56 100755
--- a/res/layout/candidates.xml
+++ b/java/res/layout/candidates.xml
diff --git a/res/layout/input.xml b/java/res/layout/input.xml
index 1d7c6f746..1d7c6f746 100755
--- a/res/layout/input.xml
+++ b/java/res/layout/input.xml
diff --git a/res/layout/input_trans.xml b/java/res/layout/input_trans.xml
index a988bcc68..94806f7e3 100755
--- a/res/layout/input_trans.xml
+++ b/java/res/layout/input_trans.xml
@@ -25,5 +25,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#A0000000"
+ android:verticalCorrection="0dip"
android:keyBackground="@drawable/btn_keyboard_key_fulltrans"
/>
diff --git a/res/layout/recognition_status.xml b/java/res/layout/recognition_status.xml
index ea23824a1..49af77360 100644
--- a/res/layout/recognition_status.xml
+++ b/java/res/layout/recognition_status.xml
@@ -63,10 +63,10 @@
<ProgressBar android:id="@+id/progress"
android:layout_height="60dip"
android:layout_width="60dip"
- android:layout_marginTop="20dip"
- android:layout_gravity="center_horizontal"
+ android:layout_gravity="center"
android:visibility="gone"
android:indeterminate="true"
+ android:indeterminateOnly="false"
/>
diff --git a/res/layout/voice_punctuation_hint.xml b/java/res/layout/voice_punctuation_hint.xml
index 629a7f2b5..629a7f2b5 100644
--- a/res/layout/voice_punctuation_hint.xml
+++ b/java/res/layout/voice_punctuation_hint.xml
diff --git a/res/layout/voice_swipe_hint.xml b/java/res/layout/voice_swipe_hint.xml
index 4e8859a71..4e8859a71 100644
--- a/res/layout/voice_swipe_hint.xml
+++ b/java/res/layout/voice_swipe_hint.xml
diff --git a/res/raw/main.dict b/java/res/raw/main.dict
index a456cf3d3..a456cf3d3 100755
--- a/res/raw/main.dict
+++ b/java/res/raw/main.dict
Binary files differ
diff --git a/res/raw/type3.ogg b/java/res/raw/type3.ogg
index 20e670807..20e670807 100755
--- a/res/raw/type3.ogg
+++ b/java/res/raw/type3.ogg
Binary files differ
diff --git a/res/values-cs/bools.xml b/java/res/values-cs/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-cs/bools.xml
+++ b/java/res/values-cs/bools.xml
diff --git a/res/values-cs/donottranslate.xml b/java/res/values-cs/donottranslate.xml
index 9c2a476a6..9c2a476a6 100644
--- a/res/values-cs/donottranslate.xml
+++ b/java/res/values-cs/donottranslate.xml
diff --git a/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 02361e1c1..4bc1f5543 100644
--- a/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Klávesnice Android"</string>
@@ -37,17 +42,17 @@
<!-- no translation found for auto_punctuate_summary (6589441565817502132) -->
<skip />
<string name="quick_fixes" msgid="5353213327680897927">"Rychlé opravy"</string>
- <string name="quick_fixes_summary" msgid="3405028402510332373">"Opravuje běžné překlepy"</string>
- <string name="show_suggestions" msgid="507074425254289133">"Zobrazovat návrhy"</string>
- <string name="show_suggestions_summary" msgid="1989672863935759654">"Při psaní zobrazovat návrhy slov"</string>
+ <string name="quick_fixes_summary" msgid="3405028402510332373">"Opravuje nejčastější chyby při psaní"</string>
+ <string name="show_suggestions" msgid="507074425254289133">"Zobrazit návrhy"</string>
+ <string name="show_suggestions_summary" msgid="1989672863935759654">"Zobrazovat navržená slova během psaní"</string>
<string name="auto_complete" msgid="1103196318775486023">"Automatické dokončování"</string>
- <string name="auto_complete_summary" msgid="6113149638718274624">"Stisknutí mezerníku nebo interpunkce automaticky vloží zvýrazněné slovo"</string>
+ <string name="auto_complete_summary" msgid="6113149638718274624">"Stisknutím mezerníku nebo interpunkčního znaménka automaticky vložíte zvýrazněné slovo."</string>
<string-array name="prediction_modes">
- <item msgid="4870266572388153286">"Není"</item>
+ <item msgid="4870266572388153286">"Žádný"</item>
<item msgid="1669461741568287396">"Základní"</item>
<item msgid="4894328801530136615">"Pokročilé"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Uloženo"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Uloženo"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"áàâãäåæ"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"éěèêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"íìîï"</string>
@@ -57,18 +62,18 @@
<string name="alternates_for_n" msgid="6257322556221886400">"ňñ"</string>
<string name="alternates_for_c" msgid="151699780720639892">"čç"</string>
<string name="alternates_for_y" msgid="1722776806607271199">"ýÿ"</string>
- <string name="tip_long_press" msgid="6101270866284343344">"Podržením klávesy zobrazíte diakritiku (ž, á atd.)"</string>
- <string name="tip_dismiss" msgid="7585579046862204381">"Stisknutím klávesy Zpět ↶ můžete klávesnici kdykoli zavřít"</string>
+ <string name="tip_long_press" msgid="6101270866284343344">"Podržením klávesy zobrazíte diakritiku (á, ž apod.)"</string>
+ <string name="tip_dismiss" msgid="7585579046862204381">"Stisknutím klávesy Zpět ↶ můžete klávesnici kdykoli zavřít."</string>
<string name="tip_access_symbols" msgid="6344098517525531652">"Přístup k číslům a symbolům"</string>
- <string name="tip_add_to_dictionary" msgid="1487293888469227817">"Stisknutím a podržením slova zcela vlevo toto slovo přidáte do slovníku"</string>
- <string name="touch_to_continue" msgid="7869803257948414531">"Chcete-li pokračovat, dotkněte se této rady »"</string>
- <string name="touch_to_finish" msgid="7990196086480585789">"Chcete-li tuto radu zavřít a začít psát, dotkněte se zde."</string>
- <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Klávesnice se zobrazí, kdykoli se dotknete textového pole."</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Stisknutím a podržením klávesy zobrazíte diakritiku"\n"(ó, ø, ö, ô atd.)"</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Stisknutím této klávesy přejdete do režimu číslic a symbolů"</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Opětovným stisknutím této klávesy se vrátíte zpět do režimu písmen"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Chcete-li změnit nastavení klávesnice, jako například automatické dokončování, stiskněte tuto klávesu a podržte ji."</b></string>
- <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Zkuste to."</b></string>
+ <string name="tip_add_to_dictionary" msgid="1487293888469227817">"Stisknutím a podržením slova zcela vlevo toto slovo přidáte do slovníku."</string>
+ <string name="touch_to_continue" msgid="7869803257948414531">"Chcete-li pokračovat, dotkněte se tohoto tipu »"</string>
+ <string name="touch_to_finish" msgid="7990196086480585789">"Chcete-li tento tip zavřít a začít psát, dotkněte se zde."</string>
+ <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Klávesnice se otevře vždy, když se dotknete textového pole."</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Přidržením klávesy zobrazíte diakritiku"\n"(ó, ø, ö, ô apod.)"</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Chcete-li přepnout na režim zadávání číslic a symbolů, dotkněte se této klávesy."</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Chcete-li přejít zpět k zadávání písmen, dotkněte se této klávesy znovu."</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Přidržením této klávesy změníte nastavení klávesnice (např. automatické dokončování)."</b></string>
+ <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Vyzkoušejte si to."</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Přejít"</string>
<string name="label_next_key" msgid="362972844525672568">"Další"</string>
<string name="label_done_key" msgid="2441578748772529288">"Hotovo"</string>
@@ -111,9 +116,9 @@
</string-array>
<string name="auto_submit" msgid="9151008027068358518">"Po hlasovém vstupu automaticky odeslat"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"Při vyhledávání nebo přechodu na další pole automaticky stisknout Enter."</string>
- <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Otevřete klávesnici"\n</b></font><font size="3">\n</font>"Dotkněte se jakéhokoli textového pole."</string>
- <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Zavřete klávesnici"\n</b></font><font size="3">\n</font>"Stiskněte klávesu Zpět."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Přidržením klávesy zobrazte možnosti"\n</b></font><font size="3">\n</font>"Použijte interpunkční znaménka a diakritiku."</string>
+ <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Otevřete klávesnici"\n</b></font><font size="3">\n</font>"Dotkněte se libovolného textového pole."</string>
+ <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Zavřete klávesnici"\n</b></font><font size="3">\n</font>"Stiskněte tlačítko Zpět."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Přidržením klávesy zobrazte možnosti"\n</b></font><font size="3">\n</font>"Přístup k interpunkčním znaménkům a diakritice."</string>
<string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Nastavení klávesnice"\n</b></font><font size="3">\n</font>"Dotkněte se klávesy "<b>"?123"</b>" a přidržte ji."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".cz"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Vstupní jazyky"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Jazyk můžete změnit posunutím prstu po mezerníku."</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Uložte slovo opětovným klepnutím"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"K dispozici je slovník"</string>
</resources>
diff --git a/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 15f6b1c6b..750d67b20 100644
--- a/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android-tastatur"</string>
@@ -58,16 +63,16 @@
<string name="alternates_for_c" msgid="151699780720639892">"ç"</string>
<string name="alternates_for_y" msgid="1722776806607271199">"ýÿ"</string>
<string name="tip_long_press" msgid="6101270866284343344">"Hold en tast nede for at se accenter (ø, ö osv.)"</string>
- <string name="tip_dismiss" msgid="7585579046862204381">"Tryk på tilbagetasten ↶ for når som helst at lukke for tastaturet"</string>
+ <string name="tip_dismiss" msgid="7585579046862204381">"Tryk på knappen Tilbage ↶ for når som helst at lukke for tastaturet"</string>
<string name="tip_access_symbols" msgid="6344098517525531652">"Få adgang til tal og symboler"</string>
<string name="tip_add_to_dictionary" msgid="1487293888469227817">"Tryk og hold på ordet længst til venstre for at føje det til ordbogen"</string>
<string name="touch_to_continue" msgid="7869803257948414531">"Berør dette tip for at fortsætte »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Berør her for at lukke dette tip og begynde at indtaste!"</string>
- <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Tastaturet åbnes, når du berører et tekstfelt"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Berør og hold en tast nede for at vise accenter"\n"(ø, ö, ô, ó osv.)"</b></string>
+ <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Tastaturet åbner når som helst, du berører et tekstfelt"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tryk på en tast, og hold den nede for a vise accenter"\n"(ø, ö, ô, ó osv.)"</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Skift til tal og symboler ved at røre denne tast"</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Gå tilbage til bogstaverne ved at berøre denne tast igen"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Berør og hold denne tast nede for at ændre indstillingerne for tastaturet, som f.eks. automatisk udfyldelse"</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Gå tilbage til bogstaver ved at berøre denne tast igen"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Tryk på denne tast, og hold den nede for at ændre tastaturindstillingerne, som f.eks. automatisk udfyldelse"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Prøv det!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Gå"</string>
<string name="label_next_key" msgid="362972844525672568">"Næste"</string>
@@ -112,9 +117,9 @@
<string name="auto_submit" msgid="9151008027068358518">"Send automatisk efter stemme"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"Tryk automatisk på enter, når du søger eller går til det næste felt."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Åbn tastaturet"\n</b></font><font size="3">\n</font>"Tryk på et hvilket som helst tekstfelt."</string>
- <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Luk tastaturet"\n</b></font><font size="3">\n</font>"Tryk på Tilbagetasten."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Tryk på og hold en tast nede for valgmuligheder"\n</b></font><font size="3">\n</font>"Få adgang til tegnsætning og accenter."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Indstillinger for tastatur"\n</b></font><font size="3">\n</font>"Tryk på og hold tasten "<b>"?123"</b>" nede."</string>
+ <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Luk tastaturet"\n</b></font><font size="3">\n</font>"Tryk på knappen Tilbage."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Tryk på en tast, og hold den nede for valgmuligheder"\n</b></font><font size="3">\n</font>"Få adgang til tegnsætning og accenter."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Tastaturindstillinger"\n</b></font><font size="3">\n</font>"Tryk på tasten "<b>"?123"</b>", og hold den nede."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Inputsprog"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Træk fingeren på mellemrumstasten for at skifte sprog"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tast igen for at gemme"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Ordbog er tilgængelig"</string>
</resources>
diff --git a/res/values-de/bools.xml b/java/res/values-de/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-de/bools.xml
+++ b/java/res/values-de/bools.xml
diff --git a/res/values-de/strings.xml b/java/res/values-de/strings.xml
index e203fb394..7d3d53c3c 100644
--- a/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android-Tastatur"</string>
@@ -31,7 +36,7 @@
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"Autom. vervollständigen"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"Textfeld vergrößern"</string>
<string name="prediction_landscape_summary" msgid="6736551095997839472">"Wortvorschläge in Querformat ausblenden"</string>
- <string name="auto_cap" msgid="1719746674854628252">"Autom. Groß-/Kleinschreibung"</string>
+ <string name="auto_cap" msgid="1719746674854628252">"Autom. Groß-/Kleinschr."</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"Sätze mit Großbuchstaben beginnen"</string>
<string name="auto_punctuate" msgid="7276672334264521751">"Autom. Zeichensetzung"</string>
<!-- no translation found for auto_punctuate_summary (6589441565817502132) -->
@@ -43,11 +48,11 @@
<string name="auto_complete" msgid="1103196318775486023">"Autom. vervollständigen"</string>
<string name="auto_complete_summary" msgid="6113149638718274624">"Leertaste und Interpunktion fügen autom. ein markiertes Wort ein"</string>
<string-array name="prediction_modes">
- <item msgid="4870266572388153286">"Keine"</item>
+ <item msgid="4870266572388153286">"Kein"</item>
<item msgid="1669461741568287396">"Standard"</item>
<item msgid="4894328801530136615">"Erweitert"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Gespeichert"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: gespeichert"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"ä"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"èéêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -64,11 +69,11 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Diesen Hinweis berühren, um fortzufahren »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Hier berühren, um diesen Hinweis zu schließen und mit dem Tippen zu beginnen!"</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Die Tastatur wird immer dann geöffnet, wenn Sie ein Textfeld berühren."</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Halten Sie eine Taste gedrückt, um Sonderzeichen anzuzeigen"\n"(ø, ö, ô, ó usw.)."</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Wechseln Sie zu Nummern und Symbolen, indem Sie diese Taste berühren."</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Gehen Sie zurück zu Buchstaben, indem Sie diese Taste erneut drücken."</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Halten Sie eine Taste gedrückt, um Akzente anzuzeigen"\n"(ø, ö, ô, ó usw.)."</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Wechseln Sie zu Ziffern und Symbolen, indem Sie diese Taste berühren."</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Durch erneutes Drücken dieser Taste gelangen Sie zurück zu den Buchstaben."</b></string>
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Halten Sie diese Taste gedrückt, um die Tastatureinstellungen, wie beispielsweise die automatische Vervollständigung, zu ändern."</b></string>
- <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Probieren Sie es!"</b></string>
+ <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Probieren Sie es aus!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Los"</string>
<string name="label_next_key" msgid="362972844525672568">"Weiter"</string>
<string name="label_done_key" msgid="2441578748772529288">"Fertig"</string>
@@ -112,8 +117,8 @@
<string name="auto_submit" msgid="9151008027068358518">"Nach Sprachaufnahme automatisch senden"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"Drücken Sie auf die Eingabetaste, wenn Sie einen Suchvorgang durchführen oder zum nächsten Feld wechseln."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Tastatur öffnen"\n</b></font><font size="3">\n</font>"Berühren Sie ein beliebiges Textfeld."</string>
- <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Tastatur schließen"\n</b></font><font size="3">\n</font>"Drücken Sie die Taste \"Zurück\"."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Eine Taste für Optionen berühren und gedrückt halten"\n</b></font><font size="3">\n</font>"Greifen Sie auf Satzzeichen und Akzente zu."</string>
+ <string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Tastatur schließen"\n</b></font><font size="3">\n</font>"Drücken Sie die Zurück-Taste."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Für Optionen eine Taste berühren und gedrückt halten"\n</b></font><font size="3">\n</font>"Greifen Sie auf Satzzeichen und Akzente zu."</string>
<string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Tastatureinstellungen"\n</b></font><font size="3">\n</font>"Berühren und halten Sie die Taste "<b>"?123"</b>" gedrückt."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Eingabesprachen"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Finger über die Leertaste bewegen, um die Sprache zu ändern"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Zum Speichern erneut tippen"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Wörterbuch verfügbar"</string>
</resources>
diff --git a/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 85c18dff4..c4a50771a 100644
--- a/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Πληκτρολόγιο Android"</string>
@@ -67,7 +72,7 @@
<string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Αγγίξτε και κρατήστε κάποιο πλήκτρο για να προβάλετε τους τονισμένους χαρακτήρες"\n"(ø, ö, ô, ó κ.τ.λ.)"</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Αλλαγή σε αριθμούς και σύμβολα με το πάτημα αυτού του πλήκτρου"</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Επιστρέψτε στα γράμματα αγγίζοντας ξανά αυτό το πλήκτρο"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Αγγίξτε &amp; κρατήστε πατημένο αυτό το πλήκτρο για να αλλάξετε τις ρυθμίσεις πληκτρολογίου, όπως η αυτόματη συμπλήρωση"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Αγγίξτε και κρατήστε πατημένο αυτό το πληκτρολόγιο για να αλλάξετε τις ρυθμίσεις πληκτρολογίου, όπως η αυτόματη συμπλήρωση"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Δοκιμάστε το!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Μετάβαση"</string>
<string name="label_next_key" msgid="362972844525672568">"Επόμενο"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Γλώσσες εισόδου"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Σύρετε το δάχτυλο στο πλήκτρο διαστήματος για να αλλάξετε γλώσσα"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Πατήστε ξανά για αποθήκευση"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Λεξικό διαθέσιμο"</string>
</resources>
diff --git a/res/values-en/bools.xml b/java/res/values-en/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-en/bools.xml
+++ b/java/res/values-en/bools.xml
diff --git a/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index 541e153b3..cd17dba31 100644
--- a/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Teclado de Android"</string>
@@ -67,7 +72,7 @@
<string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Toca y mantén presionada una tecla para ver los acentos"\n"(ø, ö, ô, ó, y así sucesivamente)."</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Cambia de números a símbolos tocando esta tecla."</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Vuelve a letras tocando esta tecla nuevamente."</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Toca &amp;amp y mantén presionada esta tecla para cambiar la configuración del teclado, como completar automáticamente."</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Toca y mantén presionada esta tecla para cambiar la configuración del teclado, como completar automáticamente."</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"¡Pruébalo!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Ir"</string>
<string name="label_next_key" msgid="362972844525672568">"Siguiente"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Deslizarse manualmente por la barra espaciadora para cambiar el idioma"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Presionar nuevamente para guardar"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Diccionario disponible"</string>
</resources>
diff --git a/res/values-es/bools.xml b/java/res/values-es/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-es/bools.xml
+++ b/java/res/values-es/bools.xml
diff --git a/res/values-es/strings.xml b/java/res/values-es/strings.xml
index fbc597ed2..fbe3ad347 100644
--- a/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -1,22 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Teclado de Android"</string>
- <string name="english_ime_settings" msgid="6661589557206947774">"Configuración del teclado de Android"</string>
+ <string name="english_ime_settings" msgid="6661589557206947774">"Ajustes del teclado de Android"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar al pulsar tecla"</string>
<string name="sound_on_keypress" msgid="6093592297198243644">"Sonido al pulsar tecla"</string>
<string name="hit_correction" msgid="4855351009261318389">"Corregir errores de escritura"</string>
@@ -26,7 +31,7 @@
<string name="auto_correction" msgid="7911639788808958255">"Sugerencias de palabras"</string>
<string name="auto_correction_summary" msgid="6881047311475758267">"Corregir automáticamente la palabra anterior"</string>
<string name="prediction" msgid="466220283138359837">"Sugerencias de palabras"</string>
- <string name="prediction_category" msgid="7027100625580696660">"Configuración de sugerencia de palabras"</string>
+ <string name="prediction_category" msgid="7027100625580696660">"Ajustes de sugerencia de palabras"</string>
<string name="prediction_summary" msgid="459788228830873110">"Habilitar Autocompletar al escribir"</string>
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"Autocompletar"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"Aumentar el tamaño del campo de texto"</string>
@@ -47,7 +52,7 @@
<item msgid="1669461741568287396">"Básico"</item>
<item msgid="4894328801530136615">"Avanzado"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Guardada"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"á"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"é"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -64,14 +69,14 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Toca esta sugerencia para continuar »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Toca aquí para cerrar la sugerencia y comenzar a escribir."</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"El teclado se abre cada vez que tocas un campo de texto"</b>"."</string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Mantén pulsada una tecla para ver los caracteres acentuados "\n"(ø, ö, ô, ó, etc.)"</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Toca esta tecla para cambiar al teclado de números y símbolos"</b>"."</string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Toca esta tecla de nuevo para volver a las letras"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Mantén pulsada esta tecla para cambiar la configuración del teclado como, por ejemplo, la opción de autocompletar"</b>"."</string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Mantén pulsada una tecla para ver los caracteres acentuados"\n"(ø, ö, ô, ó, etc.)."</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Cambiar a números y a símbolos tocando esta tecla"</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Volver a las letras tocando esta tecla de nuevo"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Mantén pulsada esta tecla para cambiar la configuración de teclado a, por ejemplo, autocompletar"</b>"."</string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"¡Pruébalo!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Ir"</string>
<string name="label_next_key" msgid="362972844525672568">"Sig."</string>
- <string name="label_done_key" msgid="2441578748772529288">"Hecho"</string>
+ <string name="label_done_key" msgid="2441578748772529288">"Listo"</string>
<string name="label_send_key" msgid="2815056534433717444">"Enviar"</string>
<string name="label_symbol_key" msgid="6175820506864489453">"?123"</string>
<string name="label_phone_key" msgid="4275497665515080551">"123"</string>
@@ -111,17 +116,18 @@
</string-array>
<string name="auto_submit" msgid="9151008027068358518">"Enviar automáticamente después de la introducción de voz"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"Pulsar Intro automáticamente al buscar o al pasar al siguiente campo"</string>
- <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Abrir el teclado"\n</b></font><font size="3">\n</font>"Pulsa cualquier campo de texto."</string>
+ <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Abrir el teclado"\n</b></font><font size="3">\n</font>"Toca cualquier campo de texto."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Cerrar el teclado"\n</b></font><font size="3">\n</font>"Pulsa la tecla \"Atrás\"."</string>
<string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Mantén pulsada una tecla para acceder a las opciones."\n</b></font><font size="3">\n</font>"Accede a los signos de puntuación y a los acentos."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Configuración del teclado"\n</b></font><font size="3">\n</font>"Mantén pulsada la tecla "<b>"?123"</b>"."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Ajustes del teclado"\n</b></font><font size="3">\n</font>"Mantén pulsada la tecla "<b>"?123"</b>"."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
<string name="popular_domain_3" msgid="8718639560809452028">".gov"</string>
<string name="popular_domain_4" msgid="35359437471311470">".edu"</string>
<string name="inputMethod" msgid="7854532062009028116">"Método de introducción de texto"</string>
- <string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
+ <string name="language_selection_title" msgid="1651299598555326750">"Idiomas"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Deslizar el dedo por la barra espaciadora para cambiar el idioma"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Volver a tocar para guardar"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible."</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/java/res/values-fr-rCA/strings.xml
index b56463ed9..b56463ed9 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/java/res/values-fr-rCA/strings.xml
diff --git a/res/values-fr/bools.xml b/java/res/values-fr/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-fr/bools.xml
+++ b/java/res/values-fr/bools.xml
diff --git a/res/values-fr/donottranslate.xml b/java/res/values-fr/donottranslate.xml
index b79df7b37..b79df7b37 100644
--- a/res/values-fr/donottranslate.xml
+++ b/java/res/values-fr/donottranslate.xml
diff --git a/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 085941415..2cabe40d9 100644
--- a/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Clavier Android"</string>
@@ -64,9 +69,9 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Touchez ce conseil pour continuer »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Touchez ici pour fermer ce conseil et commencer à saisir votre texte."</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Le clavier s\'affiche à chaque fois que vous touchez une zone de texte."</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Maintenez une touche enfoncée pour afficher les accents"\n"(ø, ö, ô, ó, etc.)"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Maintenez une touche enfoncée pour afficher les accents"\n"(ø, ö, ô, ó, etc.)"</b>"."</string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Appuyez sur cette touche pour basculer vers les chiffres et les symboles."</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Retourner au clavier en appuyant de nouveau sur cette touche"</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Appuyez de nouveau sur cette touche pour retourner aux lettres."</b></string>
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Maintenez cette touche enfoncée afin de modifier les paramètres du clavier, tels que la saisie semi-automatique."</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Essayez !"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"OK"</string>
@@ -113,7 +118,7 @@
<string name="auto_submit_summary" msgid="4961875269610384226">"Appuyez automatiquement sur Entrée pour effectuer une recherche ou accéder au champ suivant."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Ouvrir le clavier"\n</b></font><font size="3">\n</font>"Appuyez sur un champ de texte."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Fermer le clavier"\n</b></font><font size="3">\n</font>"Appuyez sur la touche Retour."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Appuyer sur une touche de manière prolongée pour accéder aux options"\n</b></font><font size="3">\n</font>"Accédez aux signes de ponctuation et aux accents."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Appuyez sur une touche de manière prolongée pour accéder aux options"\n</b></font><font size="3">\n</font>"Accédez aux signes de ponctuation et aux accents."</string>
<string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Paramètres du clavier"\n</b></font><font size="3">\n</font>"Appuyez sur la touche "<b>"?123"</b>" de manière prolongée."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Langues de saisie"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Faites glisser votre doigt sur la barre d\'espacement pour changer la langue."</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Appuyer de nouveau pour enregistrer"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
</resources>
diff --git a/res/values-it/bools.xml b/java/res/values-it/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-it/bools.xml
+++ b/java/res/values-it/bools.xml
diff --git a/res/values-it/donottranslate.xml b/java/res/values-it/donottranslate.xml
index 3e3f3ef2a..3e3f3ef2a 100644
--- a/res/values-it/donottranslate.xml
+++ b/java/res/values-it/donottranslate.xml
diff --git a/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 1135dd00a..3844aea8f 100644
--- a/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -1,24 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Tastiera Android"</string>
<string name="english_ime_settings" msgid="6661589557206947774">"Impostazioni tastiera Android"</string>
- <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibra se premi un tasto"</string>
- <string name="sound_on_keypress" msgid="6093592297198243644">"Suona se premi un tasto"</string>
+ <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibra alla pressione di un tasto"</string>
+ <string name="sound_on_keypress" msgid="6093592297198243644">"Suona alla pressione di un tasto"</string>
<string name="hit_correction" msgid="4855351009261318389">"Correggi errori di digitazione"</string>
<string name="hit_correction_summary" msgid="8761701873008070796">"Attiva la correzione degli errori di inserimento"</string>
<string name="hit_correction_land" msgid="2567691684825205448">"Errori di inserimento in visualizzazione orizzontale"</string>
@@ -64,11 +69,11 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Tocca questo suggerimento per continuare »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Tocca qui per chiudere questo suggerimento e iniziare a digitare."</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"La tastiera si apre ogni volta che tocchi un campo di testo"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tocca e tieni premuto un tasto per visualizzare le lettere con segni diacritici"\n"(ø, ö, ô, ó e così via)"</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Passa a numeri e simboli toccando questo tasto"</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Torna all\'alfabeto toccando di nuovo questo tasto"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Tocca e tieni premuto questo tasto per modificare le impostazioni della tastiera, come il completamento automatico"</b></string>
- <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Prova."</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tocca e tieni premuto un pulsante per visualizzare le lettere con segni diacritici"\n"(ø, ö, ô, ó e così via)"</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Passa a numeri e simboli toccando questo pulsante"</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Torna alle lettere toccando di nuovo questo pulsante"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Tocca e tieni premuto questo pulsante per modificare le impostazioni della tastiera, come il completamento automatico"</b></string>
+ <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Prova!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Vai"</string>
<string name="label_next_key" msgid="362972844525672568">"Avanti"</string>
<string name="label_done_key" msgid="2441578748772529288">"Fine"</string>
@@ -113,8 +118,8 @@
<string name="auto_submit_summary" msgid="4961875269610384226">"Premi automaticamente \"Invio\" durante una ricerca o un passaggio al campo successivo."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Apertura tastiera"\n</b></font><font size="3">\n</font>"Tocca qualsiasi campo di testo."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Chiusura tastiera"\n</b></font><font size="3">\n</font>"Premi il tasto Indietro."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Tocca e tieni premuto un tasto per le opzioni"\n</b></font><font size="3">\n</font>"Accesso a punteggiatura e accenti."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Impostazioni tastiera"\n</b></font><font size="3">\n</font>"Tocca e tieni premuto il tasto "<b>"?123"</b>"."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Tocca e tieni premuto un pulsante per le opzioni"\n</b></font><font size="3">\n</font>"Accesso a punteggiatura e accenti."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Impostazioni tastiera"\n</b></font><font size="3">\n</font>"Tocca e tieni premuto il pulsante "<b>"?123"</b>"."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Lingue comandi"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Scorri il dito sulla barra spaziatrice per cambiare la lingua"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tocca di nuovo per salvare"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Dizionario disponibile"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 9097bd936..7867684cb 100644
--- a/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Androidキーボード"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"入力言語"</string>
<string name="language_selection_summary" msgid="187110938289512256">"スペースバーで指をスライドさせて言語を変更する"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"←保存するにはもう一度タップ"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"辞書を利用できます"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 15000e655..350957939 100644
--- a/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android 키보드"</string>
@@ -30,7 +35,7 @@
<string name="prediction_summary" msgid="459788228830873110">"입력할 때 자동 완성 사용"</string>
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"자동 완성"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"입력란 크기 늘리기"</string>
- <string name="prediction_landscape_summary" msgid="6736551095997839472">"가로 보기에서 단어 추천 숨기기"</string>
+ <string name="prediction_landscape_summary" msgid="6736551095997839472">"가로 보기에서 추천 단어 숨기기"</string>
<string name="auto_cap" msgid="1719746674854628252">"자동 대문자화"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"문장의 첫 글자를 대문자로 표시"</string>
<string name="auto_punctuate" msgid="7276672334264521751">"자동 구두점 입력"</string>
@@ -47,7 +52,7 @@
<item msgid="1669461741568287396">"기본"</item>
<item msgid="4894328801530136615">"고급"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : 저장됨"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: 저장됨"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"àáâãäåæ"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"èéêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -59,16 +64,16 @@
<string name="alternates_for_y" msgid="1722776806607271199">"ýÿ"</string>
<string name="tip_long_press" msgid="6101270866284343344">"키를 길게 누르면 악센트(ø, ö 등)가 표시됩니다."</string>
<string name="tip_dismiss" msgid="7585579046862204381">"키보드를 닫으려면 언제든지 뒤로 키(↶)를 누르세요."</string>
- <string name="tip_access_symbols" msgid="6344098517525531652">"숫자 및 기호 액세스"</string>
+ <string name="tip_access_symbols" msgid="6344098517525531652">"숫자 및 기호 사용"</string>
<string name="tip_add_to_dictionary" msgid="1487293888469227817">"맨 왼쪽에 있는 단어를 길게 누르면 사전에 추가됩니다."</string>
<string name="touch_to_continue" msgid="7869803257948414531">"계속하려면 힌트를 터치하세요. »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"힌트를 닫고 입력을 시작하려면 여기를 터치하세요."</string>
- <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"입력란을 터치하면 키보드가 열립니다."</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"키를 길게 누르면 악센트"\n"(ø, ö, ô, ó 등)를 볼 수 있습니다."</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"이 키를 터치하면 숫자 및 기호 자판으로 변경됩니다."</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"이 키를 다시 터치하면 키보드가 표시됩니다."</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"자동 완성과 같은 키보드 설정을 변경하려면 이 키를 길게 누르세요."</b></string>
- <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"이제 직접 사용해 보세요!"</b></string>
+ <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"언제든지 입력란을 터치하면 키보드가 열립니다."</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"키를 길게 터치하면 악센트"\n"(ø, ö, ô, ó 등)가 표시됩니다."</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"이 키를 터치하면 숫자 및 기호 키보드로 전환됩니다."</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"이 키를 다시 터치하면 문자 키보드로 돌아갑니다."</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"자동 완성과 같은 키보드 설정을 변경하려면 이 키를 길게 터치하세요."</b></string>
+ <string name="tip_to_start_typing" msgid="7213843601369174313"><b>"이제 사용해 보세요."</b></string>
<string name="label_go_key" msgid="1635148082137219148">"이동"</string>
<string name="label_next_key" msgid="362972844525672568">"다음"</string>
<string name="label_done_key" msgid="2441578748772529288">"완료"</string>
@@ -94,7 +99,7 @@
<string name="voice_speech_timeout" msgid="8461817525075498795">"음성이 인식되지 않았습니다."</string>
<string name="voice_no_match" msgid="4285117547030179174">"일치하는 항목 없음"</string>
<string name="voice_not_installed" msgid="5552450909753842415">"음성 검색이 설치되지 않았습니다."</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"도움말:"</b>" 키보드를 스와이프하고 말하세요."</string>
+ <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"도움말:"</b>" 키보드 위로 손가락을 미끄러지듯 움직이고 나서 말하세요."</string>
<string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"도움말:"</b>" 다음 번에는 \'마침표\', \'쉼표\', \'물음표\'와 같은 구두점을 말해 보세요."</string>
<string name="cancel" msgid="6830980399865683324">"취소"</string>
<string name="ok" msgid="7898366843681727667">"확인"</string>
@@ -113,8 +118,8 @@
<string name="auto_submit_summary" msgid="4961875269610384226">"검색하거나 다음 입력란으로 이동할 때 자동으로 Enter 키를 누릅니다."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"키보드 열기"\n</b></font><font size="3">\n</font>"아무 텍스트 입력란이나 터치하세요."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"키보드 닫기"\n</b></font><font size="3">\n</font>"\'뒤로\' 키를 누르세요."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"키를 길게 터치하여 옵션 보기"\n</b></font><font size="3">\n</font>"문장 부호 및 악센트 기호에 액세스하세요."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"키보드 설정"\n</b></font><font size="3">\n</font><b>"?123"</b>" 키를 길게 터치하세요."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"키를 길게 눌러 옵션 보기"\n</b></font><font size="3">\n</font>"문장 부호 및 악센트 기호 입력창이 열립니다."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"키보드 설정"\n</b></font><font size="3">\n</font><b>"?123"</b>" 키를 길게 누르세요."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"입력 언어"</string>
<string name="language_selection_summary" msgid="187110938289512256">"손가락을 스페이스바에서 미끄러지듯 움직여 언어 변경"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 저장하려면 다시 누르세요."</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"사전 사용 가능"</string>
</resources>
diff --git a/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 43951552e..43951552e 100644
--- a/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
diff --git a/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index a7ddc7533..041d07eb3 100644
--- a/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Skjermtastatur"</string>
@@ -40,7 +45,7 @@
<string name="quick_fixes_summary" msgid="3405028402510332373">"Retter vanlige stavefeil"</string>
<string name="show_suggestions" msgid="507074425254289133">"Vis forslag"</string>
<string name="show_suggestions_summary" msgid="1989672863935759654">"Vis foreslåtte ord under skriving"</string>
- <string name="auto_complete" msgid="1103196318775486023">"Autokomplettering"</string>
+ <string name="auto_complete" msgid="1103196318775486023">"Autofullføring"</string>
<string name="auto_complete_summary" msgid="6113149638718274624">"Mellomrom og punktum setter automatisk inn valgt ord"</string>
<string-array name="prediction_modes">
<item msgid="4870266572388153286">"Ingen"</item>
@@ -105,8 +110,8 @@
<item msgid="7283103513488381103">"Av"</item>
</string-array>
<string-array name="voice_input_modes_summary">
- <item msgid="554248625705084903">"Mikronfon på hovedtastatur"</item>
- <item msgid="6907837061058876770">"Mikronfon på talltastatur"</item>
+ <item msgid="554248625705084903">"Mikrofon på hovedtastatur"</item>
+ <item msgid="6907837061058876770">"Mikrofon på talltastatur"</item>
<item msgid="3664304608587798036">"Talekommando er deaktivert"</item>
</string-array>
<string name="auto_submit" msgid="9151008027068358518">"Send inn automatisk etter tale"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Inndataspråk"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Dra fingeren på mellomromstasten for å endre språk"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Trykk på nytt for å lagre"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Ordbok tilgjengelig"</string>
</resources>
diff --git a/res/values-nl/bools.xml b/java/res/values-nl/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-nl/bools.xml
+++ b/java/res/values-nl/bools.xml
diff --git a/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 9a69c128e..00b197bf1 100644
--- a/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -1,23 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android-toetsenbord"</string>
<string name="english_ime_settings" msgid="6661589557206947774">"Instellingen voor Android-toetsenbord"</string>
- <string name="vibrate_on_keypress" msgid="5258079494276955460">"Trillen bij druk op een toets"</string>
+ <string name="vibrate_on_keypress" msgid="5258079494276955460">"Trillen bij druk op toets"</string>
<string name="sound_on_keypress" msgid="6093592297198243644">"Geluid bij druk op een toets"</string>
<string name="hit_correction" msgid="4855351009261318389">"Typefouten corrigeren"</string>
<string name="hit_correction_summary" msgid="8761701873008070796">"Foutcorrectie tijdens invoer inschakelen"</string>
@@ -31,7 +36,7 @@
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"Automatisch voltooien"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"Tekstveld vergroten"</string>
<string name="prediction_landscape_summary" msgid="6736551095997839472">"Woordsuggesties verbergen in liggende weergave"</string>
- <string name="auto_cap" msgid="1719746674854628252">"Automatisch hoofdlettergebruik"</string>
+ <string name="auto_cap" msgid="1719746674854628252">"Auto-hoofdlettergebruik"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"Hoofdletter gebruiken aan het begin van een zin"</string>
<string name="auto_punctuate" msgid="7276672334264521751">"Automatische interpunctie"</string>
<!-- no translation found for auto_punctuate_summary (6589441565817502132) -->
@@ -47,7 +52,7 @@
<item msgid="1669461741568287396">"Basis"</item>
<item msgid="4894328801530136615">"Geavanceerd"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Opgeslagen"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: opgeslagen"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"àáâãäåæ"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"èéêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -114,7 +119,7 @@
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Het toetsenbord openen"\n</b></font><font size="3">\n</font>"Raak een tekstveld aan."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Het toetsenbord sluiten"\n</b></font><font size="3">\n</font>"Druk op de terugtoets."</string>
<string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Een toets blijven aanraken voor opties"\n</b></font><font size="3">\n</font>"Toegang tot interpunctie en diakritische tekens."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Toetsenbordinstellingen"\n</b></font><font size="3">\n</font>"Blijf de toets "<b>"?123"</b>" aanraken."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Toetsenbordinstellingen"\n</b></font><font size="3">\n</font>"Blijf de toets \'"<b>"?123"</b>"\' aanraken."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Invoertalen"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Schuif uw vinger over de spatiebalk om de taal te wijzigen"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tik nogmaals om op te slaan"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Woordenboek beschikbaar"</string>
</resources>
diff --git a/res/values-pl/bools.xml b/java/res/values-pl/bools.xml
index 897f4b3db..897f4b3db 100644
--- a/res/values-pl/bools.xml
+++ b/java/res/values-pl/bools.xml
diff --git a/res/values-pl/donottranslate.xml b/java/res/values-pl/donottranslate.xml
index 196e73c1d..196e73c1d 100644
--- a/res/values-pl/donottranslate.xml
+++ b/java/res/values-pl/donottranslate.xml
diff --git a/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index a411cc213..0c72727ce 100644
--- a/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Klawiatura Android"</string>
@@ -23,14 +28,14 @@
<string name="hit_correction_summary" msgid="8761701873008070796">"Włącz poprawianie błędów wprowadzania"</string>
<string name="hit_correction_land" msgid="2567691684825205448">"Błędy wprowadzania w orientacji poziomej"</string>
<string name="hit_correction_land_summary" msgid="4076803842198368328">"Włącz poprawianie błędów wprowadzania"</string>
- <string name="auto_correction" msgid="7911639788808958255">"Propozycje słów"</string>
+ <string name="auto_correction" msgid="7911639788808958255">"Sugestie słów"</string>
<string name="auto_correction_summary" msgid="6881047311475758267">"Automatycznie poprawiaj poprzednie słowo"</string>
- <string name="prediction" msgid="466220283138359837">"Propozycje słów"</string>
+ <string name="prediction" msgid="466220283138359837">"Sugestie słów"</string>
<string name="prediction_category" msgid="7027100625580696660">"Ustawienia propozycji słów"</string>
<string name="prediction_summary" msgid="459788228830873110">"Włącz autouzupełnianie podczas wpisywania"</string>
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"Autouzupełnianie"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"Zwiększ rozmiar pola tekstowego"</string>
- <string name="prediction_landscape_summary" msgid="6736551095997839472">"Wyłącz propozycje słów w orientacji poziomej"</string>
+ <string name="prediction_landscape_summary" msgid="6736551095997839472">"Wyłącz sugestie słów w orientacji poziomej"</string>
<string name="auto_cap" msgid="1719746674854628252">"Wstawiaj wielkie litery"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"Zamieniaj na wielką pierwszą literę zdania"</string>
<string name="auto_punctuate" msgid="7276672334264521751">"Automatyczna interpunkcja"</string>
@@ -69,7 +74,7 @@
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Wróć do trybu liter, dotykając ponownie tego klawisza."</b></string>
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Dotknij i przytrzymaj ten klawisz, aby zmienić ustawienia klawiatury, takie jak autouzupełnianie."</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Wypróbuj!"</b></string>
- <string name="label_go_key" msgid="1635148082137219148">"Przejdź"</string>
+ <string name="label_go_key" msgid="1635148082137219148">"OK"</string>
<string name="label_next_key" msgid="362972844525672568">"Dalej"</string>
<string name="label_done_key" msgid="2441578748772529288">"Gotowe"</string>
<string name="label_send_key" msgid="2815056534433717444">"Wyślij"</string>
@@ -83,7 +88,7 @@
<string name="voice_warning_how_to_turn_off" msgid="5652369578498701761">"Aby wyłączyć wprowadzanie głosowe, przejdź do ustawień klawiatury."</string>
<string name="voice_hint_dialog_message" msgid="6892342981545727994">"Aby skorzystać z wprowadzania głosowego, naciśnij przycisk mikrofonu lub przesuń palcem po klawiaturze ekranowej."</string>
<string name="voice_listening" msgid="467518160751321844">"Mów teraz"</string>
- <string name="voice_working" msgid="6666937792815731889">"Działa"</string>
+ <string name="voice_working" msgid="6666937792815731889">"W toku"</string>
<!-- no translation found for voice_initializing (661962047129906646) -->
<skip />
<string name="voice_error" msgid="5140896300312186162">"Błąd. Spróbuj ponownie."</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Języki wprowadzania"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Przesuń palcem po spacji, aby zmienić język"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Dotknij ponownie, aby zapisać"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Słownik dostępny"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 399975d88..35a9cb715 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Teclado do Android"</string>
@@ -31,7 +36,7 @@
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"Conclusão automática"</string>
<string name="prediction_landscape" msgid="4874601565593216183">"Aumentar o tamanho do campo de texto"</string>
<string name="prediction_landscape_summary" msgid="6736551095997839472">"Ocultar sugestões de palavras na vista horizontal"</string>
- <string name="auto_cap" msgid="1719746674854628252">"Maiúsculas automáticas"</string>
+ <string name="auto_cap" msgid="1719746674854628252">"Letras maiúsculas automáticas"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"Colocar inicial maiúscula no início de uma frase"</string>
<string name="auto_punctuate" msgid="7276672334264521751">"Pontuação automática"</string>
<!-- no translation found for auto_punctuate_summary (6589441565817502132) -->
@@ -39,7 +44,7 @@
<string name="quick_fixes" msgid="5353213327680897927">"Correcções rápidas"</string>
<string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige os erros de escrita comuns"</string>
<string name="show_suggestions" msgid="507074425254289133">"Mostrar sugestões"</string>
- <string name="show_suggestions_summary" msgid="1989672863935759654">"Apresentar palavras sugeridas durante a escrita"</string>
+ <string name="show_suggestions_summary" msgid="1989672863935759654">"Apresentar sugestões de palavras ao escrever"</string>
<string name="auto_complete" msgid="1103196318775486023">"Conclusão automática"</string>
<string name="auto_complete_summary" msgid="6113149638718274624">"A barra de espaços e a pontuação inserem automaticamente uma palavra realçada"</string>
<string-array name="prediction_modes">
@@ -47,7 +52,7 @@
<item msgid="1669461741568287396">"Básico"</item>
<item msgid="4894328801530136615">"Avançados"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Guardada"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: guardada"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"àáâãäåæ"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"èéêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -64,10 +69,10 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Toque nesta sugestão para continuar »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Toque aqui para fechar esta sugestão e começar a escrever!"</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"O teclado abre quando tocar num campo de texto"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Toque e mantenha premida uma tecla para ver os acentos"\n"(ø, ö, ô, ó, etc.)"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Mantenha premida uma tecla para ver os acentos"\n"(ø, ö, ô, ó, etc.)"</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Mude para números e símbolos tocando nesta tecla"</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Regresse às letras tocando novamente nesta tecla"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Toque e mantenha premida esta tecla para alterar definições do teclado, como a conclusão automática."</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Mantenha premida esta tecla para alterar definições do teclado, tais como a conclusão automática"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Experimente!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"Ir"</string>
<string name="label_next_key" msgid="362972844525672568">"Seguinte"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Deslize o dedo pela barra de espaço para alterar o idioma"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Toque novamente para guardar"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 18ffdf011..235fd65ac 100644
--- a/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Teclado Android"</string>
@@ -63,8 +68,8 @@
<string name="tip_add_to_dictionary" msgid="1487293888469227817">"Pressione e segure a palavra mais à esquerda para adicioná-la ao dicionário"</string>
<string name="touch_to_continue" msgid="7869803257948414531">"Toque nesta dica para continuar »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Toque aqui para fechar esta dica e começar a digitar!"</string>
- <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"O teclado abre toda vez que você tocar em um arquivo de texto"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tocar e segurar a tecla para visualizar acentos"\n"(ø, ö, ô, ó e assim por diante)"</b></string>
+ <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"O teclado abre toda vez que você tocar em um campo de texto"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tocar e segurar uma tecla para visualizar acentos"\n"(ø, ö, ô, ó e assim por diante)"</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Alternar para números e símbolos tocando nessa tecla"</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Voltar às letras tocando novamente nessa tecla"</b></string>
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Tocar e segurar esta tecla para alterar as configurações do teclado, como a conclusão automática"</b></string>
@@ -113,7 +118,7 @@
<string name="auto_submit_summary" msgid="4961875269610384226">"Pressione Enter automaticamente ao pesquisar ou ir para o próximo campo."</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Abra o teclado"\n</b></font><font size="3">\n</font>"Toque em qualquer campo de texto."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Feche o teclado"\n</b></font><font size="3">\n</font>"Pressione a tecla Voltar."</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Toque e mantenha pressionada uma tecla para ver as opções"\n</b></font><font size="3">\n</font>"Acesse a pontuação e os acentos."</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Toque e mantenha pressionada uma tecla para ver as opções"\n</b></font><font size="3">\n</font>"Acesse a pontuação e as pronúncias."</string>
<string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Configurações de teclado"\n</b></font><font size="3">\n</font>"Toque e mantenha pressionada a tecla "<b>"?123"</b>"."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Deslize o dedo na barra de espaços para alterar o idioma"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Toque novamente para salvar"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index d4ebc6d60..e27402c7f 100644
--- a/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Клавиатура Android"</string>
@@ -33,7 +38,7 @@
<string name="prediction_landscape_summary" msgid="6736551095997839472">"Скрывать предложение слов в горизонтальной ориентации"</string>
<string name="auto_cap" msgid="1719746674854628252">"Автоподст. заглавных"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"Делать заглавной первую букву предложения"</string>
- <string name="auto_punctuate" msgid="7276672334264521751">"Автоматическая пунктуация"</string>
+ <string name="auto_punctuate" msgid="7276672334264521751">"Автопунктуация"</string>
<!-- no translation found for auto_punctuate_summary (6589441565817502132) -->
<skip />
<string name="quick_fixes" msgid="5353213327680897927">"Быстрое исправление"</string>
@@ -41,13 +46,13 @@
<string name="show_suggestions" msgid="507074425254289133">"Предлагать варианты"</string>
<string name="show_suggestions_summary" msgid="1989672863935759654">"Предлагать варианты слов во время ввода"</string>
<string name="auto_complete" msgid="1103196318775486023">"Автозавершение"</string>
- <string name="auto_complete_summary" msgid="6113149638718274624">"При нажатии пробела или знака препинания вставлять предложенное слово"</string>
+ <string name="auto_complete_summary" msgid="6113149638718274624">"При нажатии пробела вставлять предложенное слово"</string>
<string-array name="prediction_modes">
<item msgid="4870266572388153286">"Нет"</item>
<item msgid="1669461741568287396">"Основной"</item>
- <item msgid="4894328801530136615">"Расширенный"</item>
+ <item msgid="4894328801530136615">"Дополнительно"</item>
</string-array>
- <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : сохранено"</string>
+ <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: сохранено"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"àáâãäåæ"</string>
<string name="alternates_for_e" msgid="3900510936875547555">"èéêë"</string>
<string name="alternates_for_i" msgid="7097915268629342242">"ìíîï"</string>
@@ -64,12 +69,12 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Чтобы продолжить, нажмите на эту подсказку »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Нажмите здесь, чтобы закрыть подсказку и начать вводить текст."</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Клавиатура появляется автоматически при касании текстового поля"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Нажмите и удерживайте клавишу, чтобы появились спецсимволы "\n"(ø, ö, ô, ó и т. п.)"</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Чтобы переключаться между вводом цифр и символов, используйте эту клавишу"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Нажмите и удерживайте клавишу для отображения вариантов с диакритическими знаками "\n"(ø, ö, ô, ó и т. п.)"</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Для переключения между вводом цифр и символов используйте эту клавишу"</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Чтобы вернуться к буквенной клавиатуре, снова нажмите на эту клавишу"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Чтобы сменить настройки клавиатуры (такие как автозавершение), нажмите и удерживайте эту клавишу"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Чтобы изменить настройки клавиатуры (такие как автозавершение), нажмите и удерживайте эту клавишу"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"Попробуйте!"</b></string>
- <string name="label_go_key" msgid="1635148082137219148">"Перейти"</string>
+ <string name="label_go_key" msgid="1635148082137219148">"Поиск"</string>
<string name="label_next_key" msgid="362972844525672568">"Далее"</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Отправить"</string>
@@ -111,7 +116,7 @@
</string-array>
<string name="auto_submit" msgid="9151008027068358518">"Автоматически отправлять по окончании голосового ввода"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"Автоматически нажимать \"Ввод\" при поиске или переходе к следующему полю."</string>
- <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Откройте клавиатуру"\n</b></font><font size="3">\n</font>"Нажмите на любое текстовое поле."</string>
+ <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Открытие клавиатуры"\n</b></font><font size="3">\n</font>"Нажмите на любое текстовое поле."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Закрытие клавиатуры"\n</b></font><font size="3">\n</font>"Нажмите клавишу \"Назад\"."</string>
<string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Нажмите и удерживайте клавишу для вызова параметров"\n</b></font><font size="3">\n</font>"Доступ к пунктуационным и диакритическим знакам."</string>
<string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Настройки клавиатуры"\n</b></font><font size="3">\n</font>"Нажмите и удерживайте клавишу "<b>"?123"</b>"."</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Языки ввода"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Для изменения языка проведите пальцем по пробелу"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Нажмите повторно, чтобы сохранить"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Доступен словарь"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 2d07a076a..9c6c22159 100644
--- a/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Androids tangentbord"</string>
@@ -64,7 +69,7 @@
<string name="touch_to_continue" msgid="7869803257948414531">"Tryck på tipset för att fortsätta »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"Tryck här om du vill stänga tipset och börja skriva!"</string>
<string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"Tangentbordet öppnas när du trycker på ett textfält"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tryck och håll ned en tangent om du vill visa accenter"\n"(ø, ö, ô, ó och så vidare)"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"Tryck och håll nere en tangent om du vill visa accenter"\n"(ø, ö, ô, ó och så vidare)"</b></string>
<string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"Växla till siffror och symboler med den här tangenten"</b></string>
<string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"Återgå till bokstäver genom att trycka på tangenten en gång till"</b></string>
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"Tryck och håll ned tangenten om du vill ändra inställningarna för tangentbordet, till exempel Komplettera automatiskt"</b></string>
@@ -114,7 +119,7 @@
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"Öppna tangentbordet"\n</b></font><font size="3">\n</font>"Tryck på ett textfält."</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"Stäng tangentbordet"\n</b></font><font size="3">\n</font>"Tryck på Tillbaka."</string>
<string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"Tryck länge på en tangent om du vill se alternativ"\n</b></font><font size="3">\n</font>"Använda skiljetecken och accenter."</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Tangentbordsinställningar"\n</b></font><font size="3">\n</font>"Tryck länge på tangenten "<b>"?123"</b>"."</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"Tangentbordsinställningar"\n</b></font><font size="3">\n</font>"Tryck länge på tangenten"<b>"?123"</b>"."</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Inmatningsspråk"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Dra med fingret på blanksteg om du vill ändra språk"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Peka igen för att spara"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"En ordlista är tillgänglig"</string>
</resources>
diff --git a/res/values-tr/donottranslate.xml b/java/res/values-tr/donottranslate.xml
index 2154c16bb..2154c16bb 100644
--- a/res/values-tr/donottranslate.xml
+++ b/java/res/values-tr/donottranslate.xml
diff --git a/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index e150a5ee7..0fbdc7da3 100644
--- a/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android klavyesi"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"Giriş dilleri"</string>
<string name="language_selection_summary" msgid="187110938289512256">"Dili değiştirmek için parmağınızı boşluk çubuğu üzerinde kaydırın"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Kaydetmek için tekrar dokunun"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"Sözlük kullanılabilir"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index f3729914b..9c9b25708 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android 键盘"</string>
@@ -20,16 +25,16 @@
<string name="vibrate_on_keypress" msgid="5258079494276955460">"按键时振动"</string>
<string name="sound_on_keypress" msgid="6093592297198243644">"按键时播放音效"</string>
<string name="hit_correction" msgid="4855351009261318389">"纠正输入错误"</string>
- <string name="hit_correction_summary" msgid="8761701873008070796">"启用输入错误纠正"</string>
+ <string name="hit_correction_summary" msgid="8761701873008070796">"启用输入错误纠正功能"</string>
<string name="hit_correction_land" msgid="2567691684825205448">"横向输入错误"</string>
- <string name="hit_correction_land_summary" msgid="4076803842198368328">"启用输入错误纠正"</string>
+ <string name="hit_correction_land_summary" msgid="4076803842198368328">"启用输入错误纠正功能"</string>
<string name="auto_correction" msgid="7911639788808958255">"字词建议"</string>
- <string name="auto_correction_summary" msgid="6881047311475758267">"自动纠正之前的字词"</string>
+ <string name="auto_correction_summary" msgid="6881047311475758267">"自动纠正前面的字词"</string>
<string name="prediction" msgid="466220283138359837">"字词建议"</string>
<string name="prediction_category" msgid="7027100625580696660">"字词建议设置"</string>
<string name="prediction_summary" msgid="459788228830873110">"输入时启用自动填写功能"</string>
<string name="auto_complete_dialog_title" msgid="2172048590607201920">"自动完成"</string>
- <string name="prediction_landscape" msgid="4874601565593216183">"增加文本域的大小"</string>
+ <string name="prediction_landscape" msgid="4874601565593216183">"扩大文字字段"</string>
<string name="prediction_landscape_summary" msgid="6736551095997839472">"在横向视图中隐藏字词建议"</string>
<string name="auto_cap" msgid="1719746674854628252">"自动大写"</string>
<string name="auto_cap_summary" msgid="3260681697600786825">"句首字母大写"</string>
@@ -45,7 +50,7 @@
<string-array name="prediction_modes">
<item msgid="4870266572388153286">"无"</item>
<item msgid="1669461741568287396">"基本模式"</item>
- <item msgid="4894328801530136615">"高级模式"</item>
+ <item msgid="4894328801530136615">"高级"</item>
</string-array>
<string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>:已保存"</string>
<string name="alternates_for_a" msgid="2566516493365324765">"àáâãäåæ"</string>
@@ -63,11 +68,11 @@
<string name="tip_add_to_dictionary" msgid="1487293888469227817">"长按最左侧的字可将其添加到词典中"</string>
<string name="touch_to_continue" msgid="7869803257948414531">"轻触此提示继续 »"</string>
<string name="touch_to_finish" msgid="7990196086480585789">"轻触此处可关闭该提示,然后便可开始输入内容!"</string>
- <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"轻触文本字段即可打开键盘"</b></string>
- <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"按住某个键可看到重音符号"\n"(例如 ø、ö、ô、ó 等)"</b></string>
- <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"轻触该键可切换到数字和符号输入模式"</b></string>
- <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"再次轻触该键可返回字母输入模式"</b></string>
- <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"长按该键可更改键盘设置,例如自动填写"</b></string>
+ <string name="tip_to_open_keyboard" msgid="6821200275486950452"><b>"您可以随时通过触摸文字字段打开键盘"</b></string>
+ <string name="tip_to_view_accents" msgid="5433158573693308501"><b>"轻触并按住某个键可以查看重音符号"\n"(ø、ö、ô、ó 等)"</b></string>
+ <string name="tip_to_open_symbols" msgid="7345139325622444880"><b>"轻触该键即可切换到数字和符号键盘"</b></string>
+ <string name="tip_to_close_symbols" msgid="5227724217206927185"><b>"再次轻触该键即可返回字母键盘"</b></string>
+ <string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"触摸并按住该键可更改键盘设置,例如自动完成"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"试试吧!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"开始"</string>
<string name="label_next_key" msgid="362972844525672568">"下一步"</string>
@@ -111,10 +116,10 @@
</string-array>
<string name="auto_submit" msgid="9151008027068358518">"语音结束后自动提交"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"搜索或转到下一字段时自动按 Enter。"</string>
- <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"打开键盘"\n</b></font><font size="3">\n</font>"轻触任意文本字段。"</string>
+ <string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"打开键盘"\n</b></font><font size="3">\n</font>"触摸任意文本字段。"</string>
<string name="close_the_keyboard" msgid="6251022259044940103"><font size="17"><b>"关闭键盘"\n</b></font><font size="3">\n</font>"按“返回”键。"</string>
- <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"按住某个键可开启其他字符选项"\n</b></font><font size="3">\n</font>"访问标点和重音符号。"</string>
- <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"键盘设置"\n</b></font><font size="3">\n</font>"长按 "<b>"?123"</b>" 键。"</string>
+ <string name="touch_and_hold" msgid="6154166367273010534"><font size="17"><b>"触摸并按住选项键"\n</b></font><font size="3">\n</font>"进入标点/重音符号界面。"</string>
+ <string name="keyboard_settings" msgid="4585753477617374032"><font size="17"><b>"键盘设置"\n</b></font><font size="3">\n</font>"触摸并按住 "<b>"?123"</b>" 键。"</string>
<string name="popular_domain_0" msgid="3745279225122472969">".com"</string>
<string name="popular_domain_1" msgid="1370572248164278467">".net"</string>
<string name="popular_domain_2" msgid="3036812463748402878">".org"</string>
@@ -124,4 +129,5 @@
<string name="language_selection_title" msgid="1651299598555326750">"输入语言"</string>
<string name="language_selection_summary" msgid="187110938289512256">"在空格键上滑动手指可更改语言"</string>
<string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 再次点按即可保存"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"提供字典"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index c4efd00a6..4f83be405 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -1,18 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
- 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"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_name" msgid="7252517407088836577">"Android 鍵盤"</string>
@@ -70,7 +75,7 @@
<string name="tip_to_launch_settings" msgid="8402961128983196128"><b>"輕觸並按住此鍵即可變更鍵盤設定,例如自動完成"</b></string>
<string name="tip_to_start_typing" msgid="7213843601369174313"><b>"試試看!"</b></string>
<string name="label_go_key" msgid="1635148082137219148">"開始"</string>
- <string name="label_next_key" msgid="362972844525672568">"下一步"</string>
+ <string name="label_next_key" msgid="362972844525672568">"繼續"</string>
<string name="label_done_key" msgid="2441578748772529288">"完成"</string>
<string name="label_send_key" msgid="2815056534433717444">"傳送"</string>
<string name="label_symbol_key" msgid="6175820506864489453">"?123"</string>
@@ -98,14 +103,17 @@
<string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"提示:"</b>"下次可嘗試說出標點符號,例如「句號」、「逗號」或「問號」。"</string>
<string name="cancel" msgid="6830980399865683324">"取消"</string>
<string name="ok" msgid="7898366843681727667">"確定"</string>
- <!-- no translation found for voice_input (2466640768843347841) -->
- <skip />
- <!-- no translation found for voice_input_modes:0 (1349082139076086774) -->
- <!-- no translation found for voice_input_modes:1 (8529385602829095903) -->
- <!-- no translation found for voice_input_modes:2 (7283103513488381103) -->
- <!-- no translation found for voice_input_modes_summary:0 (554248625705084903) -->
- <!-- no translation found for voice_input_modes_summary:1 (6907837061058876770) -->
- <!-- no translation found for voice_input_modes_summary:2 (3664304608587798036) -->
+ <string name="voice_input" msgid="2466640768843347841">"語音輸入"</string>
+ <string-array name="voice_input_modes">
+ <item msgid="1349082139076086774">"於主鍵盤"</item>
+ <item msgid="8529385602829095903">"於符號鍵盤"</item>
+ <item msgid="7283103513488381103">"關閉"</item>
+ </string-array>
+ <string-array name="voice_input_modes_summary">
+ <item msgid="554248625705084903">"主鍵盤上的麥克風"</item>
+ <item msgid="6907837061058876770">"符號鍵盤上的麥克風"</item>
+ <item msgid="3664304608587798036">"已停用語音輸入"</item>
+ </string-array>
<string name="auto_submit" msgid="9151008027068358518">"說話後自動提交"</string>
<string name="auto_submit_summary" msgid="4961875269610384226">"搜尋或前往下一個欄位時自動按下輸入。"</string>
<string name="open_the_keyboard" msgid="2215920976029260466"><font size="17"><b>"開啟鍵盤"\n</b></font><font size="3">\n</font>"輕觸任何文字欄位。"</string>
@@ -118,10 +126,8 @@
<string name="popular_domain_3" msgid="8718639560809452028">".gov"</string>
<string name="popular_domain_4" msgid="35359437471311470">".edu"</string>
<string name="inputMethod" msgid="7854532062009028116">"輸入方式"</string>
- <!-- no translation found for language_selection_title (1651299598555326750) -->
- <skip />
- <!-- no translation found for language_selection_summary (187110938289512256) -->
- <skip />
- <!-- no translation found for hint_add_to_dictionary (8058519710062071085) -->
- <skip />
+ <string name="language_selection_title" msgid="1651299598555326750">"輸入語言"</string>
+ <string name="language_selection_summary" msgid="187110938289512256">"以手指在空白鍵上滑動可變更語言"</string>
+ <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 再次輕按可儲存"</string>
+ <string name="has_dictionary" msgid="6071847973466625007">"可使用字典"</string>
</resources>
diff --git a/res/values/bools.xml b/java/res/values/bools.xml
index ebe2f04e5..ebe2f04e5 100644
--- a/res/values/bools.xml
+++ b/java/res/values/bools.xml
diff --git a/res/values/colors.xml b/java/res/values/colors.xml
index c90d9f6af..c90d9f6af 100644
--- a/res/values/colors.xml
+++ b/java/res/values/colors.xml
diff --git a/res/values/dimens.xml b/java/res/values/dimens.xml
index 5b2095c0e..5b2095c0e 100644
--- a/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
diff --git a/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 87c28aeba..d5017353d 100644
--- a/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -34,4 +34,6 @@
<string name="alternates_for_z"></string>
<!-- Accented characters related to "l" -->
<string name="alternates_for_l"></string>
+ <!-- Accented characters related to "g" -->
+ <string name="alternates_for_g"></string>
</resources>
diff --git a/res/values/durations.xml b/java/res/values/durations.xml
index 92af68e39..92af68e39 100644
--- a/res/values/durations.xml
+++ b/java/res/values/durations.xml
diff --git a/res/values/keycodes.xml b/java/res/values/keycodes.xml
index 8156c0e07..8156c0e07 100644
--- a/res/values/keycodes.xml
+++ b/java/res/values/keycodes.xml
diff --git a/res/values/strings.xml b/java/res/values/strings.xml
index 9025ca0f6..35dd3e089 100644
--- a/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -319,4 +319,7 @@
<!-- Add to dictionary hint -->
<string name="hint_add_to_dictionary">\u2190 Tap again to save</string>
+
+ <!-- Inform the user that a particular language has an available dictionary -->
+ <string name="has_dictionary">Dictionary available</string>
</resources>
diff --git a/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml
index 4e57c6067..da833b2c4 100755
--- a/res/xml-de/kbd_qwerty.xml
+++ b/java/res/xml-de/kbd_qwerty.xml
@@ -120,11 +120,11 @@
<Key android:keyLabel="/" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
android:keyWidth="10%p"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
@@ -140,11 +140,11 @@
<Key android:keyLabel="\@"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
android:iconPreview="@drawable/sym_keyboard_feedback_return"
diff --git a/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml
index 1b20c0438..77076fd2f 100644
--- a/res/xml-fr/kbd_qwerty.xml
+++ b/java/res/xml-fr/kbd_qwerty.xml
@@ -122,11 +122,11 @@
<Key android:keyLabel="/" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
android:keyWidth="10%p"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
@@ -142,11 +142,11 @@
<Key android:keyLabel="\@"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
android:iconPreview="@drawable/sym_keyboard_feedback_return"
diff --git a/java/res/xml-iw/kbd_qwerty.xml b/java/res/xml-iw/kbd_qwerty.xml
new file mode 100755
index 000000000..3cec7cda4
--- /dev/null
+++ b/java/res/xml-iw/kbd_qwerty.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2010, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ android:keyWidth="10%p"
+ android:horizontalGap="0px"
+ android:verticalGap="0px"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:keyLabel="ק"
+ android:horizontalGap="5%p"
+ android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="ר"/>
+ <Key android:keyLabel="א"/>
+ <Key android:keyLabel="ט"/>
+ <Key android:keyLabel="ו"/>
+ <Key android:keyLabel="ן"/>
+ <Key android:keyLabel="ם"/>
+ <Key android:keyLabel="פ"/>
+ <Key android:codes="-5"
+ android:horizontalGap="1.25%p"
+ android:keyIcon="@drawable/sym_keyboard_delete"
+ android:keyWidth="13.75%p" android:keyEdgeFlags="right"
+ android:iconPreview="@drawable/sym_keyboard_feedback_delete"
+ android:isRepeatable="true"/>
+ </Row>
+
+ <Row>
+ <Key android:keyLabel="ש" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="ד"/>
+ <Key android:keyLabel="ג"/>
+ <Key android:keyLabel="כ"/>
+ <Key android:keyLabel="ע"/>
+ <Key android:keyLabel="י"/>
+ <Key android:keyLabel="ח"/>
+ <Key android:keyLabel="ל"/>
+ <Key android:keyLabel="ך"/>
+ <Key android:keyLabel="ף" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:keyLabel="ז" android:horizontalGap="5%p" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="ס"/>
+ <Key android:keyLabel="ב"/>
+ <Key android:keyLabel="ה"/>
+ <Key android:keyLabel="נ"/>
+ <Key android:keyLabel="מ"/>
+ <Key android:keyLabel="צ"/>
+ <Key android:keyLabel="ת"/>
+ <Key android:keyLabel="ץ" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_normal" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="/" android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="20%p" android:isRepeatable="true"/>
+ <Key android:keyLabel="@string/popular_domain_0"
+ android:keyOutputText="@string/popular_domain_0"
+ android:popupKeyboard="@xml/popup_domains"
+ android:keyWidth="20%p"/>
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="\@" android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="20%p" android:isRepeatable="true"/>
+ <Key android:keyLabel="@string/popular_domain_0"
+ android:keyOutputText="@string/popular_domain_0"
+ android:popupKeyboard="@xml/popup_domains"
+ android:keyWidth="20%p"/>
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:keyLabel=":-)" android:keyOutputText=":-) "
+ android:popupKeyboard="@xml/popup_smileys"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_globe"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="20%p" android:isRepeatable="true"/>
+ <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
+ android:iconPreview="@drawable/sym_keyboard_feedback_tab"
+ android:keyWidth="20%p"/>
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+</Keyboard>
+
diff --git a/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml
index 45d355b0f..cbb518f24 100755
--- a/res/xml-ru/kbd_qwerty.xml
+++ b/java/res/xml-ru/kbd_qwerty.xml
@@ -26,7 +26,7 @@
>
<Row>
- <Key android:keyLabel="й"
+ <Key android:keyLabel="й" android:keyWidth="8.75%p"
android:keyEdgeFlags="left"/>
<Key android:keyLabel="ц"/>
<Key android:keyLabel="у"/>
@@ -39,12 +39,12 @@
<Key android:keyLabel="ш"/>
<Key android:keyLabel="щ"/>
<Key android:keyLabel="з"/>
- <Key android:keyLabel="х"
+ <Key android:keyLabel="х" android:keyWidth="8.75%p"
android:keyEdgeFlags="right"/>
</Row>
<Row>
- <Key android:keyLabel="ф"
+ <Key android:keyLabel="ф" android:keyWidth="8.75%p"
android:keyEdgeFlags="left"/>
<Key android:keyLabel="ы"/>
<Key android:keyLabel="в"/>
@@ -55,7 +55,7 @@
<Key android:keyLabel="л"/>
<Key android:keyLabel="д"/>
<Key android:keyLabel="ж"/>
- <Key android:keyLabel="э"
+ <Key android:keyLabel="э" android:keyWidth="8.75%p"
android:keyEdgeFlags="right"/>
</Row>
@@ -104,11 +104,11 @@
<Key android:keyLabel="/" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
android:keyWidth="10%p"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
@@ -124,11 +124,11 @@
<Key android:keyLabel="\@" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
android:iconPreview="@drawable/sym_keyboard_feedback_return"
diff --git a/java/res/xml-sv/kbd_qwerty.xml b/java/res/xml-sv/kbd_qwerty.xml
new file mode 100644
index 000000000..d4ffa4d52
--- /dev/null
+++ b/java/res/xml-sv/kbd_qwerty.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!--
+ Swedish Keyboard Layout
+
+ Key positioning: Svensk standard SS 66 22 41
+ Foreign letters: Svenska skrivregler (2:a uppl.) §302
+ Local additions: ۧ
+-->
+
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+ android:keyWidth="9.09%p"
+ android:horizontalGap="0px"
+ android:verticalGap="0px"
+ android:keyHeight="@dimen/key_height"
+ >
+
+ <Row>
+ <Key android:codes="113" android:keyLabel="q"
+ android:keyWidth="8.75%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="119" android:keyLabel="w"/>
+ <Key android:codes="101" android:keyLabel="e"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="éèêëę€"/>
+ <Key android:codes="114" android:keyLabel="r"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ř"/>
+ <Key android:codes="116" android:keyLabel="t"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ťþ"/>
+ <Key android:codes="121" android:keyLabel="y"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ýÿü"/>
+ <Key android:codes="117" android:keyLabel="u"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="úùûū"/>
+ <Key android:codes="105" android:keyLabel="i"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="íìîï"/>
+ <Key android:codes="111" android:keyLabel="o"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="óòôõ"/>
+ <Key android:codes="112" android:keyLabel="p"/>
+ <Key android:keyLabel="å"
+ android:keyWidth="8.75%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row>
+ <Key android:codes="97" android:keyLabel="a"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="áàâąã"
+ android:keyWidth="8.75%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="115" android:keyLabel="s"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="śšşß"/>
+ <Key android:codes="100" android:keyLabel="d"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ðď"/>
+ <Key android:codes="102" android:keyLabel="f"/>
+ <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="104" android:keyLabel="h"/>
+ <Key android:codes="106" android:keyLabel="j"/>
+ <Key android:codes="107" android:keyLabel="k"/>
+ <Key android:codes="108" android:keyLabel="l"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ł"/>
+ <Key android:keyLabel="ö"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="øœ"/>
+ <Key android:keyLabel="ä"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="æ"
+ android:keyWidth="8.75%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyWidth="10%p">
+ <Key android:codes="-1" android:keyIcon="@drawable/sym_keyboard_shift"
+ android:keyWidth="15%p" android:isModifier="true"
+ android:iconPreview="@drawable/sym_keyboard_feedback_shift"
+ android:isSticky="true" android:keyEdgeFlags="left"/>
+ <Key android:codes="122" android:keyLabel="z"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="źžż"/>
+ <Key android:codes="120" android:keyLabel="x"/>
+ <Key android:codes="99" android:keyLabel="c"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="çćč"/>
+ <Key android:codes="118" android:keyLabel="v"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="w"/>
+ <Key android:codes="98" android:keyLabel="b"/>
+ <Key android:codes="110" android:keyLabel="n"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="ńñň"/>
+ <Key android:codes="109" android:keyLabel="m"/>
+ <Key android:codes="-5" android:keyIcon="@drawable/sym_keyboard_delete"
+ android:keyWidth="15%p" android:keyEdgeFlags="right"
+ android:iconPreview="@drawable/sym_keyboard_feedback_delete"
+ android:isRepeatable="true"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_normal" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
+ android:iconPreview="@drawable/sym_keyboard_feedback_mic"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_url" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="/" android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
+ android:keyOutputText="@string/popular_domain_0"
+ android:popupKeyboard="@xml/popup_domains"
+ android:keyWidth="20%p"/-->
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_email" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:keyLabel="\@"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
+ android:keyOutputText="@string/popular_domain_0"
+ android:popupKeyboard="@xml/popup_domains"
+ android:keyWidth="20%p"/-->
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_im" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
+ android:iconPreview="@drawable/sym_keyboard_feedback_mic"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <Key android:codes="46" android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
+ <Key android:keyLabel=":-)" android:keyOutputText=":-) "
+ android:popupKeyboard="@xml/popup_smileys"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+ <Row android:keyboardMode="@+id/mode_webentry" android:rowEdgeFlags="bottom">
+ <Key android:codes="-2" android:keyLabel="@string/label_symbol_key"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="_"
+ android:keyWidth="20%p" android:keyEdgeFlags="left"/>
+ <Key android:codes="@integer/key_f1" android:keyIcon="@drawable/sym_keyboard_mic"
+ android:iconPreview="@drawable/sym_keyboard_feedback_mic"
+ android:keyWidth="10%p"/>
+ <Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
+ android:iconPreview="@drawable/sym_keyboard_feedback_space"
+ android:keyWidth="20%p" android:isRepeatable="true"/>
+ <Key android:codes="9" android:keyIcon="@drawable/sym_keyboard_tab"
+ android:iconPreview="@drawable/sym_keyboard_feedback_tab"
+ android:keyWidth="20%p"/>
+ <Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
+ <Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
+ android:iconPreview="@drawable/sym_keyboard_feedback_return"
+ android:keyWidth="20%p" android:keyEdgeFlags="right"/>
+ </Row>
+
+</Keyboard>
diff --git a/res/xml/azerty.xml b/java/res/xml/azerty.xml
index 614aa4936..614aa4936 100644
--- a/res/xml/azerty.xml
+++ b/java/res/xml/azerty.xml
diff --git a/res/xml/kbd_alpha.xml b/java/res/xml/kbd_alpha.xml
index 4e8af3399..4e8af3399 100644
--- a/res/xml/kbd_alpha.xml
+++ b/java/res/xml/kbd_alpha.xml
diff --git a/res/xml/kbd_extension.xml b/java/res/xml/kbd_extension.xml
index c64f666d0..c64f666d0 100755
--- a/res/xml/kbd_extension.xml
+++ b/java/res/xml/kbd_extension.xml
diff --git a/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml
index d2bcdac52..d2bcdac52 100755
--- a/res/xml/kbd_phone.xml
+++ b/java/res/xml/kbd_phone.xml
diff --git a/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml
index 9604664fa..9604664fa 100755
--- a/res/xml/kbd_phone_symbols.xml
+++ b/java/res/xml/kbd_phone_symbols.xml
diff --git a/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml
index aca46930f..aca46930f 100644
--- a/res/xml/kbd_popup_template.xml
+++ b/java/res/xml/kbd_popup_template.xml
diff --git a/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml
index 4aa476136..7cb18b04e 100755
--- a/res/xml/kbd_qwerty.xml
+++ b/java/res/xml/kbd_qwerty.xml
@@ -70,7 +70,10 @@
android:popupKeyboard="@xml/kbd_popup_template"
android:popupCharacters="@string/alternates_for_d"/>
<Key android:codes="102" android:keyLabel="f"/>
- <Key android:codes="103" android:keyLabel="g"/>
+ <Key android:codes="103" android:keyLabel="g"
+ android:popupKeyboard="@xml/kbd_popup_template"
+ android:popupCharacters="@string/alternates_for_g"
+ />
<Key android:codes="104" android:keyLabel="h"/>
<Key android:codes="106" android:keyLabel="j"/>
<Key android:codes="107" android:keyLabel="k"/>
@@ -132,11 +135,11 @@
<Key android:keyLabel="/" android:keyWidth="10%p"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"
android:keyWidth="10%p"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
@@ -152,11 +155,11 @@
<Key android:keyLabel="\@"/>
<Key android:codes="32" android:keyIcon="@drawable/sym_keyboard_space"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
- android:keyWidth="20%p" android:isRepeatable="true"/>
- <Key android:keyLabel="@string/popular_domain_0"
+ android:keyWidth="40%p" android:isRepeatable="true"/>
+ <!--Key android:keyLabel="@string/popular_domain_0"
android:keyOutputText="@string/popular_domain_0"
android:popupKeyboard="@xml/popup_domains"
- android:keyWidth="20%p"/>
+ android:keyWidth="20%p"/-->
<Key android:keyLabel="." android:popupKeyboard="@xml/popup_punctuation"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return"
android:iconPreview="@drawable/sym_keyboard_feedback_return"
diff --git a/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml
index 067932b3f..ab5792fd1 100755
--- a/res/xml/kbd_symbols.xml
+++ b/java/res/xml/kbd_symbols.xml
@@ -77,7 +77,7 @@
/>
<Key android:codes="45" android:keyLabel="-"
android:popupKeyboard="@xml/kbd_popup_template"
- android:popupCharacters="–—"
+ android:popupCharacters="_–—"
/>
<Key android:keyLabel="+"
android:popupKeyboard="@xml/kbd_popup_template"
@@ -131,7 +131,9 @@
android:keyWidth="40%p"
android:iconPreview="@drawable/sym_keyboard_feedback_space"
android:isRepeatable="true"/>
- <Key android:keyLabel="." android:keyWidth="10%p" />
+ <Key android:codes="46" android:keyLabel="."
+ android:popupKeyboard="@xml/popup_punctuation"
+ android:keyWidth="10%p"/>
<Key android:codes="10" android:keyIcon="@drawable/sym_keyboard_return" android:keyWidth="20%p" android:keyEdgeFlags="right"
android:iconPreview="@drawable/sym_keyboard_feedback_return"
/>
diff --git a/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml
index 09b5c3f9d..09b5c3f9d 100755
--- a/res/xml/kbd_symbols_shift.xml
+++ b/java/res/xml/kbd_symbols_shift.xml
diff --git a/res/xml/language_prefs.xml b/java/res/xml/language_prefs.xml
index b7a4c07db..b7a4c07db 100644
--- a/res/xml/language_prefs.xml
+++ b/java/res/xml/language_prefs.xml
diff --git a/res/xml/method.xml b/java/res/xml/method.xml
index 195691b7b..195691b7b 100644
--- a/res/xml/method.xml
+++ b/java/res/xml/method.xml
diff --git a/res/xml/popup_domains.xml b/java/res/xml/popup_domains.xml
index b733fe24f..b733fe24f 100644
--- a/res/xml/popup_domains.xml
+++ b/java/res/xml/popup_domains.xml
diff --git a/res/xml/popup_punctuation.xml b/java/res/xml/popup_punctuation.xml
index 518e3f1f2..a29fb520d 100644
--- a/res/xml/popup_punctuation.xml
+++ b/java/res/xml/popup_punctuation.xml
@@ -26,8 +26,8 @@
>
<Row android:rowEdgeFlags="top">
- <Key android:keyLabel=";" android:keyEdgeFlags="left" />
- <Key android:keyLabel="," />
+ <Key android:keyLabel=":" android:keyEdgeFlags="left" />
+ <Key android:keyLabel="/" />
<Key android:keyLabel="&amp;" />
<Key android:keyLabel="(" />
<Key android:keyLabel=")" />
@@ -35,12 +35,12 @@
<Key android:keyLabel="+" android:keyEdgeFlags="right" />
</Row>
<Row android:rowEdgeFlags="bottom">
- <Key android:codes="58" android:keyLabel=":" android:keyEdgeFlags="left" />
- <Key android:codes="47" android:keyLabel="/" />
- <Key android:codes="64" android:keyLabel="\@" />
- <Key android:codes="39" android:keyLabel="\'" />
- <Key android:codes="34" android:keyLabel="&quot;" />
- <Key android:codes="63" android:keyLabel="\?" />
- <Key android:codes="33" android:keyLabel="!" android:keyEdgeFlags="right" />
+ <Key android:keyLabel=";" android:keyEdgeFlags="left" />
+ <Key android:keyLabel="," />
+ <Key android:keyLabel="\@" />
+ <Key android:keyLabel="\'" />
+ <Key android:keyLabel="&quot;" />
+ <Key android:keyLabel="\?" />
+ <Key android:keyLabel="!" android:keyEdgeFlags="right" />
</Row>
</Keyboard>
diff --git a/res/xml/popup_smileys.xml b/java/res/xml/popup_smileys.xml
index 5663fefc8..5663fefc8 100644
--- a/res/xml/popup_smileys.xml
+++ b/java/res/xml/popup_smileys.xml
diff --git a/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 29c43cba5..535b63f3b 100644
--- a/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -50,9 +50,7 @@
android:title="@string/language_selection_title"
android:summary="@string/language_selection_summary">
<intent
- android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.inputmethod.latin"
- android:targetClass="com.android.inputmethod.latin.InputLanguageSelection" />
+ android:action="com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION"/>
</PreferenceScreen>
<PreferenceCategory
diff --git a/src/com/android/inputmethod/latin/AutoDictionary.java b/java/src/com/android/inputmethod/latin/AutoDictionary.java
index 3d76dc301..93f1985ca 100644
--- a/src/com/android/inputmethod/latin/AutoDictionary.java
+++ b/java/src/com/android/inputmethod/latin/AutoDictionary.java
@@ -17,6 +17,8 @@
package com.android.inputmethod.latin;
import java.util.HashMap;
+import java.util.Set;
+import java.util.Map.Entry;
import android.content.ContentValues;
import android.content.Context;
@@ -24,8 +26,8 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
+import android.os.AsyncTask;
import android.provider.BaseColumns;
-import android.provider.UserDictionary.Words;
import android.util.Log;
/**
@@ -51,6 +53,9 @@ public class AutoDictionary extends ExpandableDictionary {
// Locale for which this auto dictionary is storing words
private String mLocale;
+ private HashMap<String,Integer> mPendingWrites = new HashMap<String,Integer>();
+ private final Object mPendingWritesLock = new Object();
+
private static final String DATABASE_NAME = "auto_dict.db";
private static final int DATABASE_VERSION = 1;
@@ -78,13 +83,15 @@ public class AutoDictionary extends ExpandableDictionary {
sDictProjectionMap.put(COLUMN_LOCALE, COLUMN_LOCALE);
}
- private DatabaseHelper mOpenHelper;
+ private static DatabaseHelper mOpenHelper = null;
public AutoDictionary(Context context, LatinIME ime, String locale) {
super(context);
mIme = ime;
mLocale = locale;
- mOpenHelper = new DatabaseHelper(getContext());
+ if (mOpenHelper == null) {
+ mOpenHelper = new DatabaseHelper(getContext());
+ }
if (mLocale != null && mLocale.length() > 1) {
loadDictionary();
}
@@ -96,28 +103,38 @@ public class AutoDictionary extends ExpandableDictionary {
return frequency >= VALIDITY_THRESHOLD;
}
+ @Override
public void close() {
- mOpenHelper.close();
+ flushPendingWrites();
+ // Don't close the database as locale changes will require it to be reopened anyway
+ // Also, the database is written to somewhat frequently, so it needs to be kept alive
+ // throughout the life of the process.
+ // mOpenHelper.close();
+ super.close();
}
- private void loadDictionary() {
+ @Override
+ public void loadDictionaryAsync() {
// Load the words that correspond to the current input locale
Cursor cursor = query(COLUMN_LOCALE + "=?", new String[] { mLocale });
- if (cursor.moveToFirst()) {
- int wordIndex = cursor.getColumnIndex(COLUMN_WORD);
- int frequencyIndex = cursor.getColumnIndex(COLUMN_FREQUENCY);
- while (!cursor.isAfterLast()) {
- String word = cursor.getString(wordIndex);
- int frequency = cursor.getInt(frequencyIndex);
- // Safeguard against adding really long words. Stack may overflow due
- // to recursive lookup
- if (word.length() < getMaxWordLength()) {
- super.addWord(word, frequency);
+ try {
+ if (cursor.moveToFirst()) {
+ int wordIndex = cursor.getColumnIndex(COLUMN_WORD);
+ int frequencyIndex = cursor.getColumnIndex(COLUMN_FREQUENCY);
+ while (!cursor.isAfterLast()) {
+ String word = cursor.getString(wordIndex);
+ int frequency = cursor.getInt(frequencyIndex);
+ // Safeguard against adding really long words. Stack may overflow due
+ // to recursive lookup
+ if (word.length() < getMaxWordLength()) {
+ super.addWord(word, frequency);
+ }
+ cursor.moveToNext();
}
- cursor.moveToNext();
}
+ } finally {
+ cursor.close();
}
- cursor.close();
}
@Override
@@ -132,14 +149,29 @@ public class AutoDictionary extends ExpandableDictionary {
int freq = getWordFrequency(word);
freq = freq < 0 ? addFrequency : freq + addFrequency;
super.addWord(word, freq);
+
if (freq >= PROMOTION_THRESHOLD) {
mIme.promoteToUserDictionary(word, FREQUENCY_FOR_AUTO_ADD);
- // Delete the word (for input locale) from the auto dictionary db, as it
- // is now in the user dictionary provider.
- delete(COLUMN_WORD + "=? AND " + COLUMN_LOCALE + "=?",
- new String[] { word, mLocale });
- } else {
- update(word, freq, mLocale);
+ freq = 0;
+ }
+
+ synchronized (mPendingWritesLock) {
+ // Write a null frequency if it is to be deleted from the db
+ mPendingWrites.put(word, freq == 0 ? null : new Integer(freq));
+ }
+ }
+
+ /**
+ * Schedules a background thread to write any pending words to the database.
+ */
+ public void flushPendingWrites() {
+ synchronized (mPendingWritesLock) {
+ // Nothing pending? Return
+ if (mPendingWrites.isEmpty()) return;
+ // Create a background thread to write the pending entries
+ new UpdateDbTask(getContext(), mOpenHelper, mPendingWrites, mLocale).execute();
+ // Create a new map for writing new entries into while the old one is written to db
+ mPendingWrites = new HashMap<String, Integer>();
}
}
@@ -183,35 +215,45 @@ public class AutoDictionary extends ExpandableDictionary {
return c;
}
- private boolean insert(ContentValues values) {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- long rowId = db.insert(AUTODICT_TABLE_NAME, Words.WORD, values);
- if (rowId > 0) {
- return true;
- }
- return false;
- }
+ /**
+ * Async task to write pending words to the database so that it stays in sync with
+ * the in-memory trie.
+ */
+ private static class UpdateDbTask extends AsyncTask<Void, Void, Void> {
+ private final HashMap<String, Integer> mMap;
+ private final DatabaseHelper mDbHelper;
+ private final String mLocale;
- private int delete(String where, String[] whereArgs) {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- int count = db.delete(AUTODICT_TABLE_NAME, where, whereArgs);
- return count;
- }
+ public UpdateDbTask(Context context, DatabaseHelper openHelper,
+ HashMap<String, Integer> pendingWrites, String locale) {
+ mMap = pendingWrites;
+ mLocale = locale;
+ mDbHelper = openHelper;
+ }
- private int update(String word, int frequency, String locale) {
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- long count = db.delete(AUTODICT_TABLE_NAME, COLUMN_WORD + "=? AND " + COLUMN_LOCALE + "=?",
- new String[] { word, locale });
- count = db.insert(AUTODICT_TABLE_NAME, null,
- getContentValues(word, frequency, locale));
- return (int) count;
- }
+ @Override
+ protected Void doInBackground(Void... v) {
+ SQLiteDatabase db = mDbHelper.getWritableDatabase();
+ // Write all the entries to the db
+ Set<Entry<String,Integer>> mEntries = mMap.entrySet();
+ for (Entry<String,Integer> entry : mEntries) {
+ Integer freq = entry.getValue();
+ db.delete(AUTODICT_TABLE_NAME, COLUMN_WORD + "=? AND " + COLUMN_LOCALE + "=?",
+ new String[] { entry.getKey(), mLocale });
+ if (freq != null) {
+ db.insert(AUTODICT_TABLE_NAME, null,
+ getContentValues(entry.getKey(), freq, mLocale));
+ }
+ }
+ return null;
+ }
- private ContentValues getContentValues(String word, int frequency, String locale) {
- ContentValues values = new ContentValues(4);
- values.put(COLUMN_WORD, word);
- values.put(COLUMN_FREQUENCY, frequency);
- values.put(COLUMN_LOCALE, locale);
- return values;
+ private ContentValues getContentValues(String word, int frequency, String locale) {
+ ContentValues values = new ContentValues(4);
+ values.put(COLUMN_WORD, word);
+ values.put(COLUMN_FREQUENCY, frequency);
+ values.put(COLUMN_LOCALE, locale);
+ return values;
+ }
}
}
diff --git a/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index ec467c88d..4901b210b 100644
--- a/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -16,6 +16,11 @@
package com.android.inputmethod.latin;
+import java.io.InputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.Channels;
import java.util.Arrays;
import android.content.Context;
@@ -27,6 +32,7 @@ import android.util.Log;
*/
public class BinaryDictionary extends Dictionary {
+ private static final String TAG = "BinaryDictionary";
public static final int MAX_WORD_LENGTH = 48;
private static final int MAX_ALTERNATIVES = 16;
private static final int MAX_WORDS = 16;
@@ -35,10 +41,13 @@ public class BinaryDictionary extends Dictionary {
private static final boolean ENABLE_MISSED_CHARACTERS = true;
private int mNativeDict;
- private int mDictLength; // This value is set from native code, don't change the name!!!!
+ private int mDictLength;
private int[] mInputCodes = new int[MAX_WORD_LENGTH * MAX_ALTERNATIVES];
private char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS];
private int[] mFrequencies = new int[MAX_WORDS];
+ // Keep a reference to the native dict direct buffer in Java to avoid
+ // unexpected deallocation of the direct buffer.
+ private ByteBuffer mNativeDictDirectBuffer;
static {
try {
@@ -59,8 +68,7 @@ public class BinaryDictionary extends Dictionary {
}
}
- private native int openNative(AssetManager am, String resourcePath, int typedLetterMultiplier,
- int fullWordMultiplier);
+ private native int openNative(ByteBuffer bb, int typedLetterMultiplier, int fullWordMultiplier);
private native void closeNative(int dict);
private native boolean isValidWordNative(int nativeData, char[] word, int wordLength);
private native int getSuggestionsNative(int dict, int[] inputCodes, int codesSize,
@@ -69,9 +77,28 @@ public class BinaryDictionary extends Dictionary {
int[] nextLettersFrequencies, int nextLettersSize);
private final void loadDictionary(Context context, int resId) {
- AssetManager am = context.getResources().getAssets();
- String assetName = context.getResources().getString(resId);
- mNativeDict = openNative(am, assetName, TYPED_LETTER_MULTIPLIER, FULL_WORD_FREQ_MULTIPLIER);
+ InputStream is = context.getResources().openRawResource(resId);
+ try {
+ int avail = is.available();
+ mNativeDictDirectBuffer =
+ ByteBuffer.allocateDirect(avail).order(ByteOrder.nativeOrder());
+ int got = Channels.newChannel(is).read(mNativeDictDirectBuffer);
+ if (got != avail) {
+ Log.e(TAG, "Read " + got + " bytes, expected " + avail);
+ } else {
+ mNativeDict = openNative(mNativeDictDirectBuffer,
+ TYPED_LETTER_MULTIPLIER, FULL_WORD_FREQ_MULTIPLIER);
+ mDictLength = avail;
+ }
+ } catch (IOException e) {
+ Log.w(TAG, "No available size for binary dictionary");
+ } finally {
+ try {
+ is.close();
+ } catch (IOException e) {
+ Log.w(TAG, "Failed to close input stream");
+ }
+ }
}
@Override
@@ -138,7 +165,6 @@ public class BinaryDictionary extends Dictionary {
@Override
public synchronized void close() {
if (mNativeDict != 0) {
- System.err.println("Closing BinaryDictionary");
closeNative(mNativeDict);
mNativeDict = 0;
}
diff --git a/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 0c0373b3b..3a199bbaf 100755
--- a/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/CandidateViewContainer.java b/java/src/com/android/inputmethod/latin/CandidateViewContainer.java
index e13f2738c..e0cb8c3b0 100644
--- a/src/com/android/inputmethod/latin/CandidateViewContainer.java
+++ b/java/src/com/android/inputmethod/latin/CandidateViewContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/ContactsDictionary.java b/java/src/com/android/inputmethod/latin/ContactsDictionary.java
index f53ebf3f5..15edb706a 100644
--- a/src/com/android/inputmethod/latin/ContactsDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsDictionary.java
@@ -35,15 +35,8 @@ public class ContactsDictionary extends ExpandableDictionary {
private ContentObserver mObserver;
- private boolean mRequiresReload;
-
private long mLastLoadedContacts;
- private boolean mUpdatingContacts;
-
- // Use this lock before touching mUpdatingContacts & mRequiresDownload
- private Object mUpdatingLock = new Object();
-
public ContactsDictionary(Context context) {
super(context);
// Perform a managed query. The Activity will handle closing and requerying the cursor
@@ -53,15 +46,10 @@ public class ContactsDictionary extends ExpandableDictionary {
cres.registerContentObserver(Contacts.CONTENT_URI, true, mObserver = new ContentObserver(null) {
@Override
public void onChange(boolean self) {
- synchronized (mUpdatingLock) {
- mRequiresReload = true;
- }
+ setRequiresReload(true);
}
});
-
- synchronized (mUpdatingLock) {
- loadDictionaryAsyncLocked();
- }
+ loadDictionary();
}
public synchronized void close() {
@@ -69,41 +57,26 @@ public class ContactsDictionary extends ExpandableDictionary {
getContext().getContentResolver().unregisterContentObserver(mObserver);
mObserver = null;
}
+ super.close();
}
- private synchronized void loadDictionaryAsyncLocked() {
+ @Override
+ public void startDictionaryLoadingTaskLocked() {
long now = SystemClock.uptimeMillis();
if (mLastLoadedContacts == 0
|| now - mLastLoadedContacts > 30 * 60 * 1000 /* 30 minutes */) {
- if (!mUpdatingContacts) {
- mUpdatingContacts = true;
- mRequiresReload = false;
- new LoadContactsTask().execute();
- }
- }
- }
-
- @Override
- public synchronized void getWords(final WordComposer codes, final WordCallback callback,
- int[] nextLettersFrequencies) {
- synchronized (mUpdatingLock) {
- // If we need to update, start off a background task
- if (mRequiresReload) loadDictionaryAsyncLocked();
- // Currently updating contacts, don't return any results.
- if (mUpdatingContacts) return;
+ super.startDictionaryLoadingTaskLocked();
}
- super.getWords(codes, callback, nextLettersFrequencies);
}
@Override
- public synchronized boolean isValidWord(CharSequence word) {
- synchronized (mUpdatingLock) {
- // If we need to update, start off a background task
- if (mRequiresReload) loadDictionaryAsyncLocked();
- if (mUpdatingContacts) return false;
+ public void loadDictionaryAsync() {
+ Cursor cursor = getContext().getContentResolver()
+ .query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
+ if (cursor != null) {
+ addWords(cursor);
}
-
- return super.isValidWord(word);
+ mLastLoadedContacts = SystemClock.uptimeMillis();
}
private void addWords(Cursor cursor) {
@@ -150,27 +123,5 @@ public class ContactsDictionary extends ExpandableDictionary {
}
cursor.close();
}
-
- private class LoadContactsTask extends AsyncTask<Void, Void, Void> {
- @Override
- protected Void doInBackground(Void... v) {
- Cursor cursor = getContext().getContentResolver()
- .query(Contacts.CONTENT_URI, PROJECTION, null, null, null);
- if (cursor != null) {
- addWords(cursor);
- }
- mLastLoadedContacts = SystemClock.uptimeMillis();
- return null;
- }
- @Override
- protected void onPostExecute(Void result) {
- // TODO Auto-generated method stub
- synchronized (mUpdatingLock) {
- mUpdatingContacts = false;
- }
- super.onPostExecute(result);
- }
-
- }
}
diff --git a/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index b656d04dc..e7b526663 100644
--- a/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 648f577ca..46bc41c42 100644
--- a/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -16,7 +16,11 @@
package com.android.inputmethod.latin;
+import com.android.inputmethod.latin.Dictionary.WordCallback;
+
import android.content.Context;
+import android.os.AsyncTask;
+import android.os.SystemClock;
/**
* Base class for an in-memory dictionary that can grow dynamically and can
@@ -32,6 +36,13 @@ public class ExpandableDictionary extends Dictionary {
public static final int MAX_WORD_LENGTH = 32;
private static final char QUOTE = '\'';
+ private boolean mRequiresReload;
+
+ private boolean mUpdatingDictionary;
+
+ // Use this lock before touching mUpdatingDictionary & mRequiresDownload
+ private Object mUpdatingLock = new Object();
+
static class Node {
char code;
int frequency;
@@ -70,6 +81,34 @@ public class ExpandableDictionary extends Dictionary {
mCodes = new int[MAX_WORD_LENGTH][];
}
+ public void loadDictionary() {
+ synchronized (mUpdatingLock) {
+ startDictionaryLoadingTaskLocked();
+ }
+ }
+
+ public void startDictionaryLoadingTaskLocked() {
+ if (!mUpdatingDictionary) {
+ mUpdatingDictionary = true;
+ mRequiresReload = false;
+ new LoadDictionaryTask().execute();
+ }
+ }
+
+ public void setRequiresReload(boolean reload) {
+ synchronized (mUpdatingLock) {
+ mRequiresReload = reload;
+ }
+ }
+
+ public boolean getRequiresReload() {
+ return mRequiresReload;
+ }
+
+ /** Override to load your dictionary here, on a background thread. */
+ public void loadDictionaryAsync() {
+ }
+
Context getContext() {
return mContext;
}
@@ -119,6 +158,13 @@ public class ExpandableDictionary extends Dictionary {
@Override
public void getWords(final WordComposer codes, final WordCallback callback,
int[] nextLettersFrequencies) {
+ synchronized (mUpdatingLock) {
+ // If we need to update, start off a background task
+ if (mRequiresReload) startDictionaryLoadingTaskLocked();
+ // Currently updating contacts, don't return any results.
+ if (mUpdatingDictionary) return;
+ }
+
mInputLength = codes.size();
mNextLettersFrequencies = nextLettersFrequencies;
if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
@@ -135,6 +181,11 @@ public class ExpandableDictionary extends Dictionary {
@Override
public synchronized boolean isValidWord(CharSequence word) {
+ synchronized (mUpdatingLock) {
+ // If we need to update, start off a background task
+ if (mRequiresReload) startDictionaryLoadingTaskLocked();
+ if (mUpdatingDictionary) return false;
+ }
final int freq = getWordFrequencyRec(mRoots, word, 0, word.length());
return freq > -1;
}
@@ -248,7 +299,7 @@ public class ExpandableDictionary extends Dictionary {
if (currentChar == lowerC || currentChar == c) {
word[depth] = c;
- if (codeSize == depth + 1) {
+ if (codeSize == inputIndex + 1) {
if (terminal) {
if (INCLUDE_TYPED_WORD_IF_VALID
|| !same(word, depth + 1, codes.getTypedWord())) {
@@ -277,6 +328,24 @@ public class ExpandableDictionary extends Dictionary {
mRoots = new NodeArray();
}
+ private class LoadDictionaryTask extends AsyncTask<Void, Void, Void> {
+ @Override
+ protected Void doInBackground(Void... v) {
+ loadDictionaryAsync();
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ // TODO Auto-generated method stub
+ synchronized (mUpdatingLock) {
+ mUpdatingDictionary = false;
+ }
+ super.onPostExecute(result);
+ }
+
+ }
+
static char toLowerCase(char c) {
if (c < BASE_CHARS.length) {
c = BASE_CHARS[c];
diff --git a/src/com/android/inputmethod/latin/Hints.java b/java/src/com/android/inputmethod/latin/Hints.java
index 689c8d852..689c8d852 100644
--- a/src/com/android/inputmethod/latin/Hints.java
+++ b/java/src/com/android/inputmethod/latin/Hints.java
diff --git a/src/com/android/inputmethod/latin/InputLanguageSelection.java b/java/src/com/android/inputmethod/latin/InputLanguageSelection.java
index 73298e33c..b5a11010b 100644
--- a/src/com/android/inputmethod/latin/InputLanguageSelection.java
+++ b/java/src/com/android/inputmethod/latin/InputLanguageSelection.java
@@ -23,6 +23,8 @@ import java.util.Locale;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.PreferenceActivity;
@@ -34,6 +36,9 @@ public class InputLanguageSelection extends PreferenceActivity {
private String mSelectedLanguages;
private ArrayList<Loc> mAvailableLanguages = new ArrayList<Loc>();
+ private static final String[] BLACKLIST_LANGUAGES = {
+ "ko", "ja", "zh", "el"
+ };
private static class Loc implements Comparable {
static Collator sCollator = Collator.getInstance();
@@ -72,6 +77,9 @@ public class InputLanguageSelection extends PreferenceActivity {
pref.setTitle(LanguageSwitcher.toTitleCase(locale.getDisplayName(locale)));
boolean checked = isLocaleIn(locale, languageList);
pref.setChecked(checked);
+ if (hasDictionary(locale)) {
+ pref.setSummary(R.string.has_dictionary);
+ }
parent.addPreference(pref);
}
}
@@ -89,6 +97,25 @@ public class InputLanguageSelection extends PreferenceActivity {
return false;
}
+ private boolean hasDictionary(Locale locale) {
+ Resources res = getResources();
+ Configuration conf = res.getConfiguration();
+ Locale saveLocale = conf.locale;
+ boolean haveDictionary = false;
+ conf.locale = locale;
+ res.updateConfiguration(conf, res.getDisplayMetrics());
+ BinaryDictionary bd = new BinaryDictionary(this, R.raw.main);
+ // Is the dictionary larger than a placeholder? Arbitrarily chose a lower limit of
+ // 4000-5000 words, whereas the LARGE_DICTIONARY is about 20000+ words.
+ if (bd.getSize() > Suggest.LARGE_DICTIONARY_THRESHOLD / 4) {
+ haveDictionary = true;
+ }
+ bd.close();
+ conf.locale = saveLocale;
+ res.updateConfiguration(conf, res.getDisplayMetrics());
+ return haveDictionary;
+ }
+
private String get5Code(Locale locale) {
String country = locale.getCountry();
return locale.getLanguage()
@@ -137,6 +164,9 @@ public class InputLanguageSelection extends PreferenceActivity {
String country = s.substring(3, 5);
Locale l = new Locale(language, country);
+ // Exclude languages that are not relevant to LatinIME
+ if (arrayContains(BLACKLIST_LANGUAGES, language)) continue;
+
if (finalSize == 0) {
preprocess[finalSize++] =
new Loc(LanguageSwitcher.toTitleCase(l.getDisplayName(l)), l);
@@ -167,4 +197,11 @@ public class InputLanguageSelection extends PreferenceActivity {
}
return uniqueLocales;
}
+
+ private boolean arrayContains(String[] array, String value) {
+ for (int i = 0; i < array.length; i++) {
+ if (array[i].equalsIgnoreCase(value)) return true;
+ }
+ return false;
+ }
}
diff --git a/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 4322997e8..1a196448f 100644
--- a/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -147,8 +147,7 @@ public class KeyboardSwitcher {
public boolean equals(KeyboardId other) {
return other.mXml == this.mXml
&& other.mKeyboardMode == this.mKeyboardMode
- && other.mEnableShiftLock == this.mEnableShiftLock
- && other.mHasVoice == this.mHasVoice;
+ && other.mEnableShiftLock == this.mEnableShiftLock;
}
public int hashCode() {
diff --git a/src/com/android/inputmethod/latin/LanguageSwitcher.java b/java/src/com/android/inputmethod/latin/LanguageSwitcher.java
index 12045125f..12045125f 100644
--- a/src/com/android/inputmethod/latin/LanguageSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/LanguageSwitcher.java
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 4c81b33b1..d0baed52a 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1,6 +1,6 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
- *
+ * Copyright (C) 2008 The Android Open Source Project
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
@@ -39,7 +39,7 @@ import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.preference.PreferenceManager;
-import android.speech.RecognitionManager;
+import android.speech.SpeechRecognizer;
import android.text.AutoText;
import android.text.ClipboardManager;
import android.text.TextUtils;
@@ -50,6 +50,8 @@ import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewParent;
+import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.CompletionInfo;
@@ -156,13 +158,14 @@ public class LatinIME extends InputMethodService
private UserDictionary mUserDictionary;
private ContactsDictionary mContactsDictionary;
- private ExpandableDictionary mAutoDictionary;
+ private AutoDictionary mAutoDictionary;
private Hints mHints;
Resources mResources;
- private String mLocale;
+ private String mInputLocale;
+ private String mSystemLocale;
private LanguageSwitcher mLanguageSwitcher;
private StringBuilder mComposing = new StringBuilder();
@@ -221,6 +224,10 @@ public class LatinIME extends InputMethodService
private VoiceInput mVoiceInput;
private VoiceResults mVoiceResults = new VoiceResults();
private long mSwipeTriggerTimeMillis;
+ private boolean mConfigurationChanging;
+
+ // Keeps track of most recently inserted text (multi-character key) for reverting
+ private CharSequence mEnteredText;
// For each word, a list of potential replacements, usually from voice.
private Map<String, List<CharSequence>> mWordToSuggestions =
@@ -230,6 +237,7 @@ public class LatinIME extends InputMethodService
List<String> candidates;
Map<String, List<CharSequence>> alternatives;
}
+
private boolean mRefreshKeyboardRequired;
Handler mHandler = new Handler() {
@@ -274,7 +282,7 @@ public class LatinIME extends InputMethodService
mLanguageSwitcher.loadLocales(prefs);
mKeyboardSwitcher = new KeyboardSwitcher(this, this);
mKeyboardSwitcher.setLanguageSwitcher(mLanguageSwitcher);
- boolean enableMultipleLanguages = mLanguageSwitcher.getLocaleCount() > 0;
+ mSystemLocale = conf.locale.toString();
String inputLanguage = mLanguageSwitcher.getInputLanguage();
if (inputLanguage == null) {
inputLanguage = conf.locale.toString();
@@ -303,7 +311,7 @@ public class LatinIME extends InputMethodService
}
private void initSuggest(String locale) {
- mLocale = locale;
+ mInputLocale = locale;
Resources orig = getResources();
Configuration conf = orig.getConfiguration();
@@ -318,14 +326,14 @@ public class LatinIME extends InputMethodService
mSuggest = new Suggest(this, R.raw.main);
updateAutoTextEnabled(saveLocale);
if (mUserDictionary != null) mUserDictionary.close();
- mUserDictionary = new UserDictionary(this, mLocale);
+ mUserDictionary = new UserDictionary(this, mInputLocale);
if (mContactsDictionary == null) {
mContactsDictionary = new ContactsDictionary(this);
}
if (mAutoDictionary != null) {
mAutoDictionary.close();
}
- mAutoDictionary = new AutoDictionary(this, this, mLocale);
+ mAutoDictionary = new AutoDictionary(this, this, mInputLocale);
mSuggest.setUserDictionary(mUserDictionary);
mSuggest.setContactsDictionary(mContactsDictionary);
mSuggest.setAutoDictionary(mAutoDictionary);
@@ -351,10 +359,12 @@ public class LatinIME extends InputMethodService
@Override
public void onConfigurationChanged(Configuration conf) {
// If the system locale changes and is different from the saved
- // locale (mLocale), then reload the input locale list from the
+ // locale (mSystemLocale), then reload the input locale list from the
// latin ime settings (shared prefs) and reset the input locale
// to the first one.
- if (!TextUtils.equals(conf.locale.toString(), mLocale)) {
+ final String systemLocale = conf.locale.toString();
+ if (!TextUtils.equals(systemLocale, mSystemLocale)) {
+ mSystemLocale = systemLocale;
if (mLanguageSwitcher != null) {
mLanguageSwitcher.loadLocales(
PreferenceManager.getDefaultSharedPreferences(this));
@@ -371,7 +381,12 @@ public class LatinIME extends InputMethodService
mOrientation = conf.orientation;
reloadKeyboards();
}
+ mConfigurationChanging = true;
super.onConfigurationChanged(conf);
+ if (mRecognizing) {
+ switchToRecognitionStatusView();
+ }
+ mConfigurationChanging = false;
}
@Override
@@ -388,21 +403,6 @@ public class LatinIME extends InputMethodService
}
@Override
- public void onInitializeInterface() {
- // Create a new view associated with voice input if the old
- // view is stuck in another layout (e.g. if switching from
- // portrait to landscape while speaking)
- // NOTE: This must be done here because for some reason
- // onCreateInputView isn't called after an orientation change while
- // speech rec is in progress.
- if (mVoiceInput != null && mVoiceInput.getView().getParent() != null) {
- mVoiceInput.newView();
- }
-
- super.onInitializeInterface();
- }
-
- @Override
public View onCreateCandidatesView() {
mKeyboardSwitcher.makeKeyboards(true);
mCandidateViewContainer = (CandidateViewContainer) getLayoutInflater().inflate(
@@ -455,6 +455,8 @@ public class LatinIME extends InputMethodService
mCompletions = null;
mCapsLock = false;
mEmailText = false;
+ mEnteredText = null;
+
switch (attribute.inputType & EditorInfo.TYPE_MASK_CLASS) {
case EditorInfo.TYPE_CLASS_NUMBER:
case EditorInfo.TYPE_CLASS_DATETIME:
@@ -534,6 +536,7 @@ public class LatinIME extends InputMethodService
mDeleteCount = 0;
mJustAddedAutoSpace = false;
loadSettings();
+ updateShiftKeyState(attribute);
setCandidatesViewShown(false);
setSuggestions(null, false, false, false);
@@ -553,20 +556,18 @@ public class LatinIME extends InputMethodService
public void onFinishInput() {
super.onFinishInput();
- if (VOICE_INSTALLED && mAfterVoiceInput) {
- mVoiceInput.logInputEnded();
- }
-
- if (VOICE_INSTALLED) {
+ if (VOICE_INSTALLED && !mConfigurationChanging) {
+ if (mAfterVoiceInput) {
+ mVoiceInput.flushAllTextModificationCounters();
+ mVoiceInput.logInputEnded();
+ }
mVoiceInput.flushLogs();
+ mVoiceInput.cancel();
}
-
if (mInputView != null) {
mInputView.closing();
}
- if (VOICE_INSTALLED && mRecognizing) {
- mVoiceInput.cancel();
- }
+ if (mAutoDictionary != null) mAutoDictionary.flushPendingWrites();
}
@Override
@@ -574,8 +575,6 @@ public class LatinIME extends InputMethodService
super.onUpdateExtractedText(token, text);
InputConnection ic = getCurrentInputConnection();
if (!mImmediatelyAfterVoiceInput && mAfterVoiceInput && ic != null) {
- mVoiceInput.logTextModified();
-
if (mHints.showPunctuationHintIfNecessary(ic)) {
mVoiceInput.logPunctuationHintDisplayed();
}
@@ -599,6 +598,11 @@ public class LatinIME extends InputMethodService
+ ", ce=" + candidatesEnd);
}
+ if (mAfterVoiceInput) {
+ mVoiceInput.setCursorPos(newSelEnd);
+ mVoiceInput.setSelectionSpan(newSelEnd - newSelStart);
+ }
+
mSuggestionShouldReplaceCurrentWord = false;
// If the current selection in the text view changes, we should
// clear whatever candidate text we have.
@@ -653,23 +657,21 @@ public class LatinIME extends InputMethodService
@Override
public void hideWindow() {
- if (mAfterVoiceInput) mVoiceInput.logInputEnded();
if (TRACE) Debug.stopMethodTracing();
if (mOptionsDialog != null && mOptionsDialog.isShowing()) {
mOptionsDialog.dismiss();
mOptionsDialog = null;
}
- if (mVoiceWarningDialog != null && mVoiceWarningDialog.isShowing()) {
- mVoiceInput.logKeyboardWarningDialogDismissed();
- mVoiceWarningDialog.dismiss();
- mVoiceWarningDialog = null;
- }
- if (mTutorial != null) {
- mTutorial.close();
- mTutorial = null;
- }
- if (VOICE_INSTALLED & mRecognizing) {
- mVoiceInput.cancel();
+ if (!mConfigurationChanging) {
+ if (mAfterVoiceInput) mVoiceInput.logInputEnded();
+ if (mVoiceWarningDialog != null && mVoiceWarningDialog.isShowing()) {
+ mVoiceInput.logKeyboardWarningDialogDismissed();
+ mVoiceWarningDialog.dismiss();
+ mVoiceWarningDialog = null;
+ }
+ if (VOICE_INSTALLED & mRecognizing) {
+ mVoiceInput.cancel();
+ }
}
super.hideWindow();
TextEntryState.endSession();
@@ -706,7 +708,8 @@ public class LatinIME extends InputMethodService
public void setCandidatesViewShown(boolean shown) {
// TODO: Remove this if we support candidates with hard keyboard
if (onEvaluateInputViewShown()) {
- super.setCandidatesViewShown(shown);
+ // Show the candidates view only if input view is showing
+ super.setCandidatesViewShown(shown && mInputView != null && mInputView.isShown());
}
}
@@ -983,6 +986,8 @@ public class LatinIME extends InputMethodService
if (mKeyboardSwitcher.onKey(primaryCode)) {
changeKeyboardMode();
}
+ // Reset after any single keystroke
+ mEnteredText = null;
}
public void onText(CharSequence text) {
@@ -1001,16 +1006,32 @@ public class LatinIME extends InputMethodService
updateShiftKeyState(getCurrentInputEditorInfo());
mJustRevertedSeparator = null;
mJustAddedAutoSpace = false;
+ mEnteredText = text;
}
private void handleBackspace() {
if (VOICE_INSTALLED && mVoiceInputHighlighted) {
+ mVoiceInput.incrementTextModificationDeleteCount(
+ mVoiceResults.candidates.get(0).toString().length());
revertVoiceInput();
return;
}
boolean deleteChar = false;
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
+
+ if (mAfterVoiceInput) {
+ // Don't log delete if the user is pressing delete at
+ // the beginning of the text box (hence not deleting anything)
+ if (mVoiceInput.getCursorPos() > 0) {
+ // If anything was selected before the delete was pressed, increment the
+ // delete count by the length of the selection
+ int deleteLen = mVoiceInput.getSelectionSpan() > 0 ?
+ mVoiceInput.getSelectionSpan() : 1;
+ mVoiceInput.incrementTextModificationDeleteCount(deleteLen);
+ }
+ }
+
if (mPredicting) {
final int length = mComposing.length();
if (length > 0) {
@@ -1032,6 +1053,8 @@ public class LatinIME extends InputMethodService
if (TextEntryState.getState() == TextEntryState.STATE_UNDO_COMMIT) {
revertLastWord(deleteChar);
return;
+ } else if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
+ ic.deleteSurroundingText(mEnteredText.length(), 0);
} else if (deleteChar) {
sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
if (mDeleteCount > DELETE_ACCELERATE_AT) {
@@ -1056,6 +1079,12 @@ public class LatinIME extends InputMethodService
if (VOICE_INSTALLED && mVoiceInputHighlighted) {
commitVoiceInput();
}
+
+ if (mAfterVoiceInput) {
+ // Assume input length is 1. This assumption fails for smiley face insertions.
+ mVoiceInput.incrementTextModificationInsertCount(1);
+ }
+
if (isAlphabet(primaryCode) && isPredictionOn() && !isCursorTouchingWord()) {
if (!mPredicting) {
mPredicting = true;
@@ -1099,6 +1128,12 @@ public class LatinIME extends InputMethodService
if (VOICE_INSTALLED && mVoiceInputHighlighted) {
commitVoiceInput();
}
+
+ if (mAfterVoiceInput){
+ // Assume input length is 1. This assumption fails for smiley face insertions.
+ mVoiceInput.incrementTextModificationInsertPunctuationCount(1);
+ }
+
boolean pickedDefault = false;
// Handle separator
InputConnection ic = getCurrentInputConnection();
@@ -1210,12 +1245,21 @@ public class LatinIME extends InputMethodService
}
private void switchToRecognitionStatusView() {
- mHandler.post(new Runnable() {
- public void run() {
- mRecognizing = true;
- setInputView(mVoiceInput.getView());
- updateInputViewShown();
- }});
+ final boolean configChanged = mConfigurationChanging;
+ mHandler.post(new Runnable() {
+ public void run() {
+ mRecognizing = true;
+ View v = mVoiceInput.getView();
+ ViewParent p = v.getParent();
+ if (p != null && p instanceof ViewGroup) {
+ ((ViewGroup)v.getParent()).removeView(v);
+ }
+ setInputView(v);
+ updateInputViewShown();
+ if (configChanged) {
+ mVoiceInput.onConfigurationChanged();
+ }
+ }});
}
private void startListening(boolean swipe) {
@@ -1343,7 +1387,7 @@ public class LatinIME extends InputMethodService
String bestResult = nBest.get(0).toString();
- mVoiceInput.logVoiceInputDelivered();
+ mVoiceInput.logVoiceInputDelivered(bestResult.length());
mHints.registerVoiceResult(bestResult);
@@ -1404,7 +1448,7 @@ public class LatinIME extends InputMethodService
((LatinKeyboard) mInputView.getKeyboard()).setPreferredLetters(nextLettersFrequencies);
- boolean correctionAvailable = mSuggest.hasMinimalCorrection();
+ boolean correctionAvailable = !mInputTypeNoAutoCorrect && mSuggest.hasMinimalCorrection();
//|| mCorrectionMode == mSuggest.CORRECTION_FULL;
CharSequence typedWord = mWord.getTypedWord();
// If we're in basic correct
@@ -1435,7 +1479,7 @@ public class LatinIME extends InputMethodService
mHandler.removeMessages(MSG_UPDATE_SUGGESTIONS);
updateSuggestions();
}
- if (mBestWord != null) {
+ if (mBestWord != null && mBestWord.length() > 0) {
TextEntryState.acceptedDefault(mWord.getTypedWord(), mBestWord);
mJustAccepted = true;
pickSuggestion(mBestWord);
@@ -1447,6 +1491,12 @@ public class LatinIME extends InputMethodService
public void pickSuggestionManually(int index, CharSequence suggestion) {
if (mAfterVoiceInput && mShowingVoiceSuggestions) mVoiceInput.logNBestChoose(index);
+ if (mAfterVoiceInput && !mShowingVoiceSuggestions) {
+ mVoiceInput.flushAllTextModificationCounters();
+ // send this intent AFTER logging any prior aggregated edits.
+ mVoiceInput.logTextModifiedByChooseSuggestion(suggestion.length());
+ }
+
InputConnection ic = getCurrentInputConnection();
if (ic != null) {
ic.beginBatchEdit();
@@ -1479,7 +1529,9 @@ public class LatinIME extends InputMethodService
mJustAccepted = true;
pickSuggestion(suggestion);
// Add the word to the auto dictionary if it's not a known word
- checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
+ if (index == 0) {
+ checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
+ }
TextEntryState.acceptedSuggestion(mComposing.toString(), suggestion);
// Follow it with a space
if (mAutoSpace) {
@@ -1525,8 +1577,13 @@ public class LatinIME extends InputMethodService
}
private void checkAddToDictionary(CharSequence suggestion, int frequencyDelta) {
+ // Only auto-add to dictionary if auto-correct is ON. Otherwise we'll be
+ // adding words in situations where the user or application really didn't
+ // want corrections enabled or learned.
+ if (!(mCorrectionMode == Suggest.CORRECTION_FULL)) return;
if (mAutoDictionary.isValidWord(suggestion)
- || !mSuggest.isValidWord(suggestion.toString().toLowerCase())) {
+ || (!mSuggest.isValidWord(suggestion.toString())
+ && !mSuggest.isValidWord(suggestion.toString().toLowerCase()))) {
mAutoDictionary.addWord(suggestion.toString(), frequencyDelta);
}
}
@@ -1547,6 +1604,11 @@ public class LatinIME extends InputMethodService
return false;
}
+ private boolean sameAsTextBeforeCursor(InputConnection ic, CharSequence text) {
+ CharSequence beforeText = ic.getTextBeforeCursor(text.length(), 0);
+ return TextUtils.equals(text, beforeText);
+ }
+
public void revertLastWord(boolean deleteChar) {
final int length = mComposing.length();
if (!mPredicting && length > 0) {
@@ -1678,7 +1740,7 @@ public class LatinIME extends InputMethodService
return ENABLE_VOICE_BUTTON && fieldCanDoVoice(fieldContext)
&& !(attribute != null && attribute.privateImeOptions != null
&& attribute.privateImeOptions.equals(IME_OPTION_NO_MICROPHONE))
- && RecognitionManager.isRecognitionAvailable(this);
+ && SpeechRecognizer.isRecognitionAvailable(this);
}
// receive ringer mode changes to detect silent mode
@@ -1736,7 +1798,7 @@ public class LatinIME extends InputMethodService
return;
}
if (mInputView != null) {
- mInputView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
+ mInputView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP,
HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
}
@@ -1785,7 +1847,8 @@ public class LatinIME extends InputMethodService
private void updateAutoTextEnabled(Locale systemLocale) {
if (mSuggest == null) return;
- boolean different = !systemLocale.getLanguage().equalsIgnoreCase(mLocale.substring(0, 2));
+ boolean different =
+ !systemLocale.getLanguage().equalsIgnoreCase(mInputLocale.substring(0, 2));
mSuggest.setAutoTextEnabled(!different && mQuickFixes);
}
@@ -1824,7 +1887,7 @@ public class LatinIME extends InputMethodService
ArrayList<String> voiceInputSupportedLocales =
newArrayList(supportedLocalesString.split("\\s+"));
- mLocaleSupportedForVoiceInput = voiceInputSupportedLocales.contains(mLocale);
+ mLocaleSupportedForVoiceInput = voiceInputSupportedLocales.contains(mInputLocale);
mShowSuggestions = sp.getBoolean(PREF_SHOW_SUGGESTIONS, true);
diff --git a/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java b/java/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java
index b6a800ebd..568b31d04 100644
--- a/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java
+++ b/java/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -16,13 +16,13 @@
package com.android.inputmethod.latin;
-import android.backup.BackupHelperAgent;
-import android.backup.SharedPreferencesBackupHelper;
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.SharedPreferencesBackupHelper;
/**
* Backs up the Latin IME shared preferences.
*/
-public class LatinIMEBackupAgent extends BackupHelperAgent {
+public class LatinIMEBackupAgent extends BackupAgentHelper {
public void onCreate() {
addHelper("shared_pref", new SharedPreferencesBackupHelper(this,
diff --git a/src/com/android/inputmethod/latin/LatinIMESettings.java b/java/src/com/android/inputmethod/latin/LatinIMESettings.java
index 82f5d54b3..21b967420 100644
--- a/src/com/android/inputmethod/latin/LatinIMESettings.java
+++ b/java/src/com/android/inputmethod/latin/LatinIMESettings.java
@@ -1,6 +1,6 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
- *
+ * Copyright (C) 2008 The Android Open Source Project
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
@@ -21,7 +21,7 @@ import java.util.Locale;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.backup.BackupManager;
+import android.app.backup.BackupManager;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
@@ -31,7 +31,7 @@ import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.Preference.OnPreferenceClickListener;
-import android.speech.RecognitionManager;
+import android.speech.SpeechRecognizer;
import android.text.AutoText;
import android.util.Log;
@@ -88,7 +88,7 @@ public class LatinIMESettings extends PreferenceActivity
.removePreference(mQuickFixes);
}
if (!LatinIME.VOICE_INSTALLED
- || !RecognitionManager.isRecognitionAvailable(this)) {
+ || !SpeechRecognizer.isRecognitionAvailable(this)) {
getPreferenceScreen().removePreference(mVoicePreference);
} else {
updateVoiceModeSummary();
diff --git a/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
index 58e1dc767..32cd8a45f 100644
--- a/src/com/android/inputmethod/latin/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
index 2686a93c6..74fc475e6 100644
--- a/src/com/android/inputmethod/latin/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -23,6 +23,7 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
+import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
import android.inputmethodservice.Keyboard.Key;
import android.os.Handler;
import android.os.Message;
@@ -43,10 +44,27 @@ public class LatinKeyboardView extends KeyboardView {
private Keyboard mPhoneKeyboard;
+ /** Whether the extension of this keyboard is visible */
private boolean mExtensionVisible;
+ /** The view that is shown as an extension of this keyboard view */
private LatinKeyboardView mExtension;
+ /** The popup window that contains the extension of this keyboard */
private PopupWindow mExtensionPopup;
+ /** Whether this view is an extension of another keyboard */
+ private boolean mIsExtensionType;
private boolean mFirstEvent;
+ /** Whether we've started dropping move events because we found a big jump */
+ private boolean mDroppingEvents;
+ /**
+ * Whether multi-touch disambiguation needs to be disabled for any reason. There are 2 reasons
+ * for this to happen - (1) if a real multi-touch event has occured and (2) we've opened an
+ * extension keyboard.
+ */
+ private boolean mDisableDisambiguation;
+ /** The distance threshold at which we start treating the touch session as a multi-touch */
+ private int mJumpThresholdSquare = Integer.MAX_VALUE;
+ /** The y coordinate of the last row */
+ private int mLastRowY;
public LatinKeyboardView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -61,6 +79,17 @@ public class LatinKeyboardView extends KeyboardView {
}
@Override
+ public void setKeyboard(Keyboard k) {
+ super.setKeyboard(k);
+ // One-seventh of the keyboard width seems like a reasonable threshold
+ mJumpThresholdSquare = k.getMinWidth() / 7;
+ mJumpThresholdSquare *= mJumpThresholdSquare;
+ // Assuming there are 4 rows, this is the coordinate of the last row
+ mLastRowY = (k.getHeight() * 3) / 4;
+ setKeyboardLocal(k);
+ }
+
+ @Override
protected boolean onLongPress(Key key) {
if (key.codes[0] == Keyboard.KEYCODE_MODE_CHANGE) {
getOnKeyboardActionListener().onKey(KEYCODE_OPTIONS, null);
@@ -78,6 +107,83 @@ public class LatinKeyboardView extends KeyboardView {
}
}
+ /**
+ * This function checks to see if we need to handle any sudden jumps in the pointer location
+ * that could be due to a multi-touch being treated as a move by the firmware or hardware.
+ * Once a sudden jump is detected, all subsequent move events are discarded
+ * until an UP is received.<P>
+ * When a sudden jump is detected, an UP event is simulated at the last position and when
+ * the sudden moves subside, a DOWN event is simulated for the second key.
+ * @param me the motion event
+ * @return true if the event was consumed, so that it doesn't continue to be handled by
+ * KeyboardView.
+ */
+ private boolean handleSuddenJump(MotionEvent me) {
+ final int action = me.getAction();
+ final int x = (int) me.getX();
+ final int y = (int) me.getY();
+ boolean result = false;
+
+ // Real multi-touch event? Stop looking for sudden jumps
+ if (me.getPointerCount() > 1) {
+ mDisableDisambiguation = true;
+ }
+ if (mDisableDisambiguation) {
+ // If UP, reset the multi-touch flag
+ if (action == MotionEvent.ACTION_UP) mDisableDisambiguation = false;
+ return false;
+ }
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ // Reset the "session"
+ mDroppingEvents = false;
+ mDisableDisambiguation = false;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ // Is this a big jump?
+ final int distanceSquare = (mLastX - x) * (mLastX - x) + (mLastY - y) * (mLastY - y);
+ // Check the distance and also if the move is not entirely within the bottom row
+ // If it's only in the bottom row, it might be an intentional slide gesture
+ // for language switching
+ if (distanceSquare > mJumpThresholdSquare
+ && (mLastY < mLastRowY || y < mLastRowY)) {
+ // If we're not yet dropping events, start dropping and send an UP event
+ if (!mDroppingEvents) {
+ mDroppingEvents = true;
+ // Send an up event
+ MotionEvent translated = MotionEvent.obtain(me.getEventTime(), me.getEventTime(),
+ MotionEvent.ACTION_UP,
+ mLastX, mLastY, me.getMetaState());
+ super.onTouchEvent(translated);
+ translated.recycle();
+ }
+ result = true;
+ } else if (mDroppingEvents) {
+ // If moves are small and we're already dropping events, continue dropping
+ result = true;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ if (mDroppingEvents) {
+ // Send a down event first, as we dropped a bunch of sudden jumps and assume that
+ // the user is releasing the touch on the second key.
+ MotionEvent translated = MotionEvent.obtain(me.getEventTime(), me.getEventTime(),
+ MotionEvent.ACTION_DOWN,
+ x, y, me.getMetaState());
+ super.onTouchEvent(translated);
+ translated.recycle();
+ mDroppingEvents = false;
+ // Let the up event get processed as well, result = false
+ }
+ break;
+ }
+ // Track the previous coordinate
+ mLastX = x;
+ mLastY = y;
+ return result;
+ }
+
@Override
public boolean onTouchEvent(MotionEvent me) {
LatinKeyboard keyboard = (LatinKeyboard) getKeyboard();
@@ -86,6 +192,12 @@ public class LatinKeyboardView extends KeyboardView {
mLastY = (int) me.getY();
invalidate();
}
+
+ // If an extension keyboard is visible or this is an extension keyboard, don't look
+ // for sudden jumps. Otherwise, if there was a sudden jump, return without processing the
+ // actual motion event.
+ if (!mExtensionVisible && !mIsExtensionType
+ && handleSuddenJump(me)) return true;
// Reset any bounding box controls in the keyboard
if (me.getAction() == MotionEvent.ACTION_DOWN) {
keyboard.keyReleased();
@@ -107,7 +219,9 @@ public class LatinKeyboardView extends KeyboardView {
if (keyboard.getExtension() == 0) {
return super.onTouchEvent(me);
}
- if (me.getY() < 0) {
+ // If the motion event is above the keyboard and it's not an UP event coming
+ // even before the first MOVE event into the extension area
+ if (me.getY() < 0 && (mExtensionVisible || me.getAction() != MotionEvent.ACTION_UP)) {
if (mExtensionVisible) {
int action = me.getAction();
if (mFirstEvent) action = MotionEvent.ACTION_DOWN;
@@ -139,6 +253,8 @@ public class LatinKeyboardView extends KeyboardView {
} else {
mFirstEvent = true;
}
+ // Stop processing multi-touch errors
+ mDisableDisambiguation = true;
}
return true;
}
@@ -157,7 +273,15 @@ public class LatinKeyboardView extends KeyboardView {
}
}
+ private void setExtensionType(boolean isExtensionType) {
+ mIsExtensionType = isExtensionType;
+ }
+
private boolean openExtension() {
+ // If the current keyboard is not visible, don't show the popup
+ if (!isShown()) {
+ return false;
+ }
if (((LatinKeyboard) getKeyboard()).getExtension() == 0) return false;
makePopupWindow();
mExtensionVisible = true;
@@ -172,7 +296,9 @@ public class LatinKeyboardView extends KeyboardView {
LayoutInflater li = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mExtension = (LatinKeyboardView) li.inflate(R.layout.input_trans, null);
- mExtension.setOnKeyboardActionListener((LatinIME) getContext());
+ mExtension.setExtensionType(true);
+ mExtension.setOnKeyboardActionListener(
+ new ExtensionKeyboardListener(getOnKeyboardActionListener()));
mExtension.setPopupParent(this);
mExtension.setPopupOffset(0, -windowLocation[1]);
Keyboard keyboard;
@@ -181,6 +307,7 @@ public class LatinKeyboardView extends KeyboardView {
mExtensionPopup.setContentView(mExtension);
mExtensionPopup.setWidth(getWidth());
mExtensionPopup.setHeight(keyboard.getHeight());
+ mExtensionPopup.setAnimationStyle(-1);
getLocationInWindow(windowLocation);
// TODO: Fix the "- 30".
mExtension.setPopupOffset(0, -windowLocation[1] - 30);
@@ -201,11 +328,42 @@ public class LatinKeyboardView extends KeyboardView {
}
private void closeExtension() {
- mExtension.setVisibility(INVISIBLE);
mExtension.closing();
+ mExtension.setVisibility(INVISIBLE);
mExtensionVisible = false;
}
+ private static class ExtensionKeyboardListener implements OnKeyboardActionListener {
+ private OnKeyboardActionListener mTarget;
+ ExtensionKeyboardListener(OnKeyboardActionListener target) {
+ mTarget = target;
+ }
+ public void onKey(int primaryCode, int[] keyCodes) {
+ mTarget.onKey(primaryCode, keyCodes);
+ }
+ public void onPress(int primaryCode) {
+ mTarget.onPress(primaryCode);
+ }
+ public void onRelease(int primaryCode) {
+ mTarget.onRelease(primaryCode);
+ }
+ public void onText(CharSequence text) {
+ mTarget.onText(text);
+ }
+ public void swipeDown() {
+ // Don't pass through
+ }
+ public void swipeLeft() {
+ // Don't pass through
+ }
+ public void swipeRight() {
+ // Don't pass through
+ }
+ public void swipeUp() {
+ // Don't pass through
+ }
+ }
+
/**************************** INSTRUMENTATION *******************************/
static final boolean DEBUG_AUTO_PLAY = false;
@@ -224,9 +382,7 @@ public class LatinKeyboardView extends KeyboardView {
private int mLastY;
private Paint mPaint;
- @Override
- public void setKeyboard(Keyboard k) {
- super.setKeyboard(k);
+ private void setKeyboardLocal(Keyboard k) {
if (DEBUG_AUTO_PLAY) {
findKeys();
if (mHandler2 == null) {
diff --git a/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 712b9cf37..a70bea003 100755
--- a/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -39,7 +39,7 @@ public class Suggest implements Dictionary.WordCallback {
public static final int CORRECTION_BASIC = 1;
public static final int CORRECTION_FULL = 2;
- private static final int LARGE_DICTIONARY_THRESHOLD = 200 * 1000;
+ static final int LARGE_DICTIONARY_THRESHOLD = 200 * 1000;
private BinaryDictionary mMainDict;
@@ -346,11 +346,10 @@ public class Suggest implements Dictionary.WordCallback {
if (word == null || word.length() == 0) {
return false;
}
- return (mCorrectionMode == CORRECTION_FULL && mMainDict.isValidWord(word))
- || (mCorrectionMode > CORRECTION_NONE &&
- ((mUserDictionary != null && mUserDictionary.isValidWord(word)))
- || (mAutoDictionary != null && mAutoDictionary.isValidWord(word))
- || (mContactsDictionary != null && mContactsDictionary.isValidWord(word)));
+ return mMainDict.isValidWord(word)
+ || (mUserDictionary != null && mUserDictionary.isValidWord(word))
+ || (mAutoDictionary != null && mAutoDictionary.isValidWord(word))
+ || (mContactsDictionary != null && mContactsDictionary.isValidWord(word));
}
private void collectGarbage() {
diff --git a/src/com/android/inputmethod/latin/TextEntryState.java b/java/src/com/android/inputmethod/latin/TextEntryState.java
index c5e8ad9a1..d056ceb16 100644
--- a/src/com/android/inputmethod/latin/TextEntryState.java
+++ b/java/src/com/android/inputmethod/latin/TextEntryState.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/Tutorial.java b/java/src/com/android/inputmethod/latin/Tutorial.java
index 03d4858c4..a8123317b 100644
--- a/src/com/android/inputmethod/latin/Tutorial.java
+++ b/java/src/com/android/inputmethod/latin/Tutorial.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
diff --git a/src/com/android/inputmethod/latin/UserDictionary.java b/java/src/com/android/inputmethod/latin/UserDictionary.java
index 4b98eacce..e8ca33af3 100644
--- a/src/com/android/inputmethod/latin/UserDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserDictionary.java
@@ -16,16 +16,11 @@
package com.android.inputmethod.latin;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
-import android.net.Uri;
import android.provider.UserDictionary.Words;
public class UserDictionary extends ExpandableDictionary {
@@ -40,8 +35,6 @@ public class UserDictionary extends ExpandableDictionary {
private static final int INDEX_FREQUENCY = 2;
private ContentObserver mObserver;
-
- private boolean mRequiresReload;
private String mLocale;
public UserDictionary(Context context, String locale) {
@@ -54,26 +47,27 @@ public class UserDictionary extends ExpandableDictionary {
cres.registerContentObserver(Words.CONTENT_URI, true, mObserver = new ContentObserver(null) {
@Override
public void onChange(boolean self) {
- mRequiresReload = true;
+ setRequiresReload(true);
}
});
loadDictionary();
}
-
+
public synchronized void close() {
if (mObserver != null) {
getContext().getContentResolver().unregisterContentObserver(mObserver);
mObserver = null;
}
+ super.close();
}
-
- private synchronized void loadDictionary() {
+
+ @Override
+ public void loadDictionaryAsync() {
Cursor cursor = getContext().getContentResolver()
.query(Words.CONTENT_URI, PROJECTION, "(locale IS NULL) or (locale=?)",
new String[] { mLocale }, null);
addWords(cursor);
- mRequiresReload = false;
}
/**
@@ -86,7 +80,8 @@ public class UserDictionary extends ExpandableDictionary {
*/
@Override
public synchronized void addWord(String word, int frequency) {
- if (mRequiresReload) loadDictionary();
+ // Force load the dictionary here synchronously
+ if (getRequiresReload()) loadDictionaryAsync();
// Safeguard against adding long words. Can cause stack overflow.
if (word.length() >= getMaxWordLength()) return;
@@ -101,19 +96,17 @@ public class UserDictionary extends ExpandableDictionary {
getContext().getContentResolver().insert(Words.CONTENT_URI, values);
// In case the above does a synchronous callback of the change observer
- mRequiresReload = false;
+ setRequiresReload(false);
}
@Override
public synchronized void getWords(final WordComposer codes, final WordCallback callback,
int[] nextLettersFrequencies) {
- if (mRequiresReload) loadDictionary();
super.getWords(codes, callback, nextLettersFrequencies);
}
@Override
public synchronized boolean isValidWord(CharSequence word) {
- if (mRequiresReload) loadDictionary();
return super.isValidWord(word);
}
diff --git a/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index e97cb24ba..19f714ae7 100644
--- a/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2009 Google Inc.
+ * Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
@@ -84,11 +84,27 @@ public class WordComposer {
*/
public void add(int primaryCode, int[] codes) {
mTypedWord.append((char) primaryCode);
+ correctPrimaryJuxtapos(primaryCode, codes);
mCodes.add(codes);
if (Character.isUpperCase((char) primaryCode)) mCapsCount++;
}
/**
+ * Swaps the first and second values in the codes array if the primary code is not the first
+ * value in the array but the second. This happens when the preferred key is not the key that
+ * the user released the finger on.
+ * @param primaryCode the preferred character
+ * @param codes array of codes based on distance from touch point
+ */
+ private void correctPrimaryJuxtapos(int primaryCode, int[] codes) {
+ if (codes.length < 2) return;
+ if (codes[0] > 0 && codes[1] > 0 && codes[0] != primaryCode && codes[1] == primaryCode) {
+ codes[1] = codes[0];
+ codes[0] = primaryCode;
+ }
+ }
+
+ /**
* Delete the last keystroke as a result of hitting backspace.
*/
public void deleteLast() {
diff --git a/src/com/android/inputmethod/voice/EditingUtil.java b/java/src/com/android/inputmethod/voice/EditingUtil.java
index 6316d8ccf..6316d8ccf 100644
--- a/src/com/android/inputmethod/voice/EditingUtil.java
+++ b/java/src/com/android/inputmethod/voice/EditingUtil.java
diff --git a/src/com/android/inputmethod/voice/FieldContext.java b/java/src/com/android/inputmethod/voice/FieldContext.java
index 5fbacfb6c..5fbacfb6c 100644
--- a/src/com/android/inputmethod/voice/FieldContext.java
+++ b/java/src/com/android/inputmethod/voice/FieldContext.java
diff --git a/src/com/android/inputmethod/voice/LatinIMEWithVoice.java b/java/src/com/android/inputmethod/voice/LatinIMEWithVoice.java
index ccbf5b6bc..ccbf5b6bc 100644
--- a/src/com/android/inputmethod/voice/LatinIMEWithVoice.java
+++ b/java/src/com/android/inputmethod/voice/LatinIMEWithVoice.java
diff --git a/src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java b/java/src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java
index 13a58e14d..13a58e14d 100644
--- a/src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java
+++ b/java/src/com/android/inputmethod/voice/LatinIMEWithVoiceSettings.java
diff --git a/src/com/android/inputmethod/voice/RecognitionView.java b/java/src/com/android/inputmethod/voice/RecognitionView.java
index 5d4a0e0e1..7cec0b04a 100644
--- a/src/com/android/inputmethod/voice/RecognitionView.java
+++ b/java/src/com/android/inputmethod/voice/RecognitionView.java
@@ -16,7 +16,12 @@
package com.android.inputmethod.voice;
-import com.android.inputmethod.latin.R;
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.ShortBuffer;
+import java.util.ArrayList;
+import java.util.List;
import android.content.ContentResolver;
import android.content.Context;
@@ -35,14 +40,10 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.ImageView;
+import android.widget.ProgressBar;
import android.widget.TextView;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.ShortBuffer;
-import java.util.ArrayList;
-import java.util.List;
+import com.android.inputmethod.latin.R;
/**
* The user interface for the "Speak now" and "working" states.
@@ -103,7 +104,6 @@ public class RecognitionView {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.recognition_status, null);
-
ContentResolver cr = context.getContentResolver();
mMinMicrophoneLevel = SettingsUtil.getSettingsFloat(
cr, SettingsUtil.LATIN_IME_MIN_MICROPHONE_LEVEL, 15.f);
@@ -139,6 +139,18 @@ public class RecognitionView {
return mView;
}
+ public void restoreState() {
+ mUiHandler.post(new Runnable() {
+ public void run() {
+ // Restart the spinner
+ if (mState == State.WORKING) {
+ ((ProgressBar)mProgress).setIndeterminate(false);
+ ((ProgressBar)mProgress).setIndeterminate(true);
+ }
+ }
+ });
+ }
+
public void showInitializing() {
mUiHandler.post(new Runnable() {
public void run() {
@@ -262,12 +274,11 @@ public class RecognitionView {
final int count = (endIndex - startIndex) / numSamplePerWave;
final float deltaX = 1.0f * w / count;
- int yMax = h / 2 - 10;
+ int yMax = h / 2 - 8;
Path path = new Path();
c.translate(0, yMax);
float x = 0;
path.moveTo(x, 0);
- yMax -= 10;
for (int i = 0; i < count; i++) {
final int avabs = getAverageAbs(waveBuffer, startIndex, i , numSamplePerWave);
int sign = ( (i & 01) == 0) ? -1 : 1;
@@ -285,8 +296,8 @@ public class RecognitionView {
mImage.setImageBitmap(b);
mImage.setVisibility(View.VISIBLE);
MarginLayoutParams mProgressParams = (MarginLayoutParams)mProgress.getLayoutParams();
- mProgressParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
- -h / 2 - 18, mContext.getResources().getDisplayMetrics());
+ mProgressParams.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,
+ -h , mContext.getResources().getDisplayMetrics());
// Tweak the padding manually to fill out the whole view horizontally.
// TODO: Do this in the xml layout instead.
diff --git a/src/com/android/inputmethod/voice/SettingsUtil.java b/java/src/com/android/inputmethod/voice/SettingsUtil.java
index abf52047f..abf52047f 100644
--- a/src/com/android/inputmethod/voice/SettingsUtil.java
+++ b/java/src/com/android/inputmethod/voice/SettingsUtil.java
diff --git a/src/com/android/inputmethod/voice/VoiceInput.java b/java/src/com/android/inputmethod/voice/VoiceInput.java
index a2e210536..ac06ab50d 100644
--- a/src/com/android/inputmethod/voice/VoiceInput.java
+++ b/java/src/com/android/inputmethod/voice/VoiceInput.java
@@ -26,7 +26,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.speech.RecognitionListener;
-import android.speech.RecognitionManager;
+import android.speech.SpeechRecognizer;
import android.speech.RecognizerIntent;
import android.util.Log;
import android.view.View;
@@ -94,6 +94,12 @@ public class VoiceInput implements OnClickListener {
public static final int WORKING = 2;
public static final int ERROR = 3;
+ private int mAfterVoiceInputDeleteCount = 0;
+ private int mAfterVoiceInputInsertCount = 0;
+ private int mAfterVoiceInputInsertPunctuationCount = 0;
+ private int mAfterVoiceInputCursorPos = 0;
+ private int mAfterVoiceInputSelectionSpan = 0;
+
private int mState = DEFAULT;
private final static int MSG_CLOSE_ERROR_DIALOG = 1;
@@ -128,7 +134,7 @@ public class VoiceInput implements OnClickListener {
public void onCancelVoice();
}
- private RecognitionManager mRecognitionManager;
+ private SpeechRecognizer mSpeechRecognizer;
private RecognitionListener mRecognitionListener;
private RecognitionView mRecognitionView;
private UiListener mUiListener;
@@ -141,8 +147,8 @@ public class VoiceInput implements OnClickListener {
public VoiceInput(Context context, UiListener uiHandler) {
mLogger = VoiceInputLogger.getLogger(context);
mRecognitionListener = new ImeRecognitionListener();
- mRecognitionManager = RecognitionManager.createRecognitionManager(context);
- mRecognitionManager.setRecognitionListener(mRecognitionListener);
+ mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(context);
+ mSpeechRecognizer.setRecognitionListener(mRecognitionListener);
mUiListener = uiHandler;
mContext = context;
newView();
@@ -161,6 +167,95 @@ public class VoiceInput implements OnClickListener {
mBlacklist.addApp("com.android.setupwizard");
}
+ public void setCursorPos(int pos) {
+ mAfterVoiceInputCursorPos = pos;
+ }
+
+ public int getCursorPos() {
+ return mAfterVoiceInputCursorPos;
+ }
+
+ public void setSelectionSpan(int span) {
+ mAfterVoiceInputSelectionSpan = span;
+ }
+
+ public int getSelectionSpan() {
+ return mAfterVoiceInputSelectionSpan;
+ }
+
+ public void incrementTextModificationDeleteCount(int count){
+ mAfterVoiceInputDeleteCount += count;
+ // Send up intents for other text modification types
+ if (mAfterVoiceInputInsertCount > 0) {
+ logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
+ mAfterVoiceInputInsertCount = 0;
+ }
+ if (mAfterVoiceInputInsertPunctuationCount > 0) {
+ logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
+ mAfterVoiceInputInsertPunctuationCount = 0;
+ }
+
+ }
+
+ public void incrementTextModificationInsertCount(int count){
+ mAfterVoiceInputInsertCount += count;
+ if (mAfterVoiceInputSelectionSpan > 0) {
+ // If text was highlighted before inserting the char, count this as
+ // a delete.
+ mAfterVoiceInputDeleteCount += mAfterVoiceInputSelectionSpan;
+ }
+ // Send up intents for other text modification types
+ if (mAfterVoiceInputDeleteCount > 0) {
+ logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
+ mAfterVoiceInputDeleteCount = 0;
+ }
+ if (mAfterVoiceInputInsertPunctuationCount > 0) {
+ logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
+ mAfterVoiceInputInsertPunctuationCount = 0;
+ }
+ }
+
+ public void incrementTextModificationInsertPunctuationCount(int count){
+ mAfterVoiceInputInsertPunctuationCount += 1;
+ if (mAfterVoiceInputSelectionSpan > 0) {
+ // If text was highlighted before inserting the char, count this as
+ // a delete.
+ mAfterVoiceInputDeleteCount += mAfterVoiceInputSelectionSpan;
+ }
+ // Send up intents for aggregated non-punctuation insertions
+ if (mAfterVoiceInputDeleteCount > 0) {
+ logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
+ mAfterVoiceInputDeleteCount = 0;
+ }
+ if (mAfterVoiceInputInsertCount > 0) {
+ logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
+ mAfterVoiceInputInsertCount = 0;
+ }
+ }
+
+ public void flushAllTextModificationCounters() {
+ if (mAfterVoiceInputInsertCount > 0) {
+ logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
+ mAfterVoiceInputInsertCount = 0;
+ }
+ if (mAfterVoiceInputDeleteCount > 0) {
+ logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
+ mAfterVoiceInputDeleteCount = 0;
+ }
+ if (mAfterVoiceInputInsertPunctuationCount > 0) {
+ logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
+ mAfterVoiceInputInsertPunctuationCount = 0;
+ }
+ }
+
+ /**
+ * The configuration of the IME changed and may have caused the views to be layed out
+ * again. Restore the state of the recognition view.
+ */
+ public void onConfigurationChanged() {
+ mRecognitionView.restoreState();
+ }
+
/**
* @return true if field is blacklisted for voice
*/
@@ -239,7 +334,7 @@ public class VoiceInput implements OnClickListener {
EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,
null /* rely on endpointer default */);
- mRecognitionManager.startListening(intent);
+ mSpeechRecognizer.startListening(intent);
}
/**
@@ -262,7 +357,7 @@ public class VoiceInput implements OnClickListener {
}
public void destroy() {
- mRecognitionManager.destroy();
+ mSpeechRecognizer.destroy();
}
/**
@@ -294,8 +389,20 @@ public class VoiceInput implements OnClickListener {
}
}
- public void logTextModified() {
- mLogger.textModified();
+ public void logTextModifiedByTypingInsertion(int length) {
+ mLogger.textModifiedByTypingInsertion(length);
+ }
+
+ public void logTextModifiedByTypingInsertionPunctuation(int length) {
+ mLogger.textModifiedByTypingInsertionPunctuation(length);
+ }
+
+ public void logTextModifiedByTypingDeletion(int length) {
+ mLogger.textModifiedByTypingDeletion(length);
+ }
+
+ public void logTextModifiedByChooseSuggestion(int length) {
+ mLogger.textModifiedByChooseSuggestion(length);
}
public void logKeyboardWarningDialogShown() {
@@ -322,8 +429,8 @@ public class VoiceInput implements OnClickListener {
mLogger.punctuationHintDisplayed();
}
- public void logVoiceInputDelivered() {
- mLogger.voiceInputDelivered();
+ public void logVoiceInputDelivered(int length) {
+ mLogger.voiceInputDelivered(length);
}
public void logNBestChoose(int index) {
@@ -377,7 +484,7 @@ public class VoiceInput implements OnClickListener {
// Remove all pending tasks (e.g., timers to cancel voice input)
mHandler.removeMessages(MSG_CLOSE_ERROR_DIALOG);
- mRecognitionManager.cancel();
+ mSpeechRecognizer.cancel();
mUiListener.onCancelVoice();
mRecognitionView.finish();
}
@@ -385,20 +492,20 @@ public class VoiceInput implements OnClickListener {
private int getErrorStringId(int errorType, boolean endpointed) {
switch (errorType) {
// We use CLIENT_ERROR to signify that voice search is not available on the device.
- case RecognitionManager.ERROR_CLIENT:
+ case SpeechRecognizer.ERROR_CLIENT:
return R.string.voice_not_installed;
- case RecognitionManager.ERROR_NETWORK:
+ case SpeechRecognizer.ERROR_NETWORK:
return R.string.voice_network_error;
- case RecognitionManager.ERROR_NETWORK_TIMEOUT:
+ case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
return endpointed ?
R.string.voice_network_error : R.string.voice_too_much_speech;
- case RecognitionManager.ERROR_AUDIO:
+ case SpeechRecognizer.ERROR_AUDIO:
return R.string.voice_audio_error;
- case RecognitionManager.ERROR_SERVER:
+ case SpeechRecognizer.ERROR_SERVER:
return R.string.voice_server_error;
- case RecognitionManager.ERROR_SPEECH_TIMEOUT:
+ case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
return R.string.voice_speech_timeout;
- case RecognitionManager.ERROR_NO_MATCH:
+ case SpeechRecognizer.ERROR_NO_MATCH:
return R.string.voice_no_match;
default: return R.string.voice_error;
}
@@ -455,7 +562,7 @@ public class VoiceInput implements OnClickListener {
public void onResults(Bundle resultsBundle) {
List<String> results = resultsBundle
- .getStringArrayList(RecognitionManager.RESULTS_RECOGNITION);
+ .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
mState = DEFAULT;
final Map<String, List<CharSequence>> alternatives =
diff --git a/src/com/android/inputmethod/voice/VoiceInputLogger.java b/java/src/com/android/inputmethod/voice/VoiceInputLogger.java
index 659033340..9d3a92037 100644
--- a/src/com/android/inputmethod/voice/VoiceInputLogger.java
+++ b/java/src/com/android/inputmethod/voice/VoiceInputLogger.java
@@ -147,12 +147,43 @@ public class VoiceInputLogger {
mContext.sendBroadcast(i);
}
- public void voiceInputDelivered() {
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED));
+ public void voiceInputDelivered(int length) {
+ Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
+ mContext.sendBroadcast(i);
+ }
+
+ public void textModifiedByTypingInsertion(int length) {
+ Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
+ LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_INSERTION);
+ mContext.sendBroadcast(i);
+ }
+
+ public void textModifiedByTypingInsertionPunctuation(int length) {
+ Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
+ LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_INSERTION_PUNCTUATION);
+ mContext.sendBroadcast(i);
+ }
+
+ public void textModifiedByTypingDeletion(int length) {
+ Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
+ LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_DELETION);
+
+ mContext.sendBroadcast(i);
}
- public void textModified() {
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED));
+ public void textModifiedByChooseSuggestion(int length) {
+ Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
+ i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
+ LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION);
+ mContext.sendBroadcast(i);
}
public void nBestChoose(int index) {
diff --git a/src/com/android/inputmethod/voice/WaveformImage.java b/java/src/com/android/inputmethod/voice/WaveformImage.java
index 08d87c8f3..08d87c8f3 100644
--- a/src/com/android/inputmethod/voice/WaveformImage.java
+++ b/java/src/com/android/inputmethod/voice/WaveformImage.java
diff --git a/src/com/android/inputmethod/voice/Whitelist.java b/java/src/com/android/inputmethod/voice/Whitelist.java
index 167b688ca..167b688ca 100644
--- a/src/com/android/inputmethod/voice/Whitelist.java
+++ b/java/src/com/android/inputmethod/voice/Whitelist.java
diff --git a/src/com/google/android/voicesearch/LatinIMEWithVoice.java b/java/src/com/google/android/voicesearch/LatinIMEWithVoice.java
index 8a339d14a..8a339d14a 100644
--- a/src/com/google/android/voicesearch/LatinIMEWithVoice.java
+++ b/java/src/com/google/android/voicesearch/LatinIMEWithVoice.java
diff --git a/src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java b/java/src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java
index a53cebfd9..a53cebfd9 100644
--- a/src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java
+++ b/java/src/com/google/android/voicesearch/LatinIMEWithVoiceSettings.java
diff --git a/dictionary/Android.mk b/native/Android.mk
index 9ba9f75ec..952448435 100644
--- a/dictionary/Android.mk
+++ b/native/Android.mk
@@ -5,22 +5,14 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
LOCAL_SRC_FILES := \
jni/com_android_inputmethod_latin_BinaryDictionary.cpp \
- src/dictionary.cpp
+ src/dictionary.cpp \
+ src/char_utils.cpp
LOCAL_C_INCLUDES += \
- external/icu4c/common \
$(JNI_H_INCLUDE)
-LOCAL_LDLIBS := -lm
-
LOCAL_PRELINK_MODULE := false
-LOCAL_SHARED_LIBRARIES := \
- libandroid_runtime \
- libcutils \
- libutils \
- libicuuc
-
LOCAL_MODULE := libjni_latinime
LOCAL_MODULE_TAGS := user
diff --git a/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index d068f3faf..bb45cb538 100644
--- a/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -15,31 +15,18 @@
** limitations under the License.
*/
-#define LOG_TAG "BinaryDictionary"
-#include "utils/Log.h"
-
#include <stdio.h>
#include <assert.h>
#include <unistd.h>
#include <fcntl.h>
-#include <nativehelper/jni.h>
-#include "utils/AssetManager.h"
-#include "utils/Asset.h"
-
+#include <jni.h>
#include "dictionary.h"
// ----------------------------------------------------------------------------
using namespace latinime;
-using namespace android;
-
-static jfieldID sDescriptorField;
-static jfieldID sAssetManagerNativeField;
-static jmethodID sAddWordMethod;
-static jfieldID sDictLength;
-
//
// helper function to throw an exception
//
@@ -54,35 +41,15 @@ static void throwException(JNIEnv *env, const char* ex, const char* fmt, int dat
}
static jint latinime_BinaryDictionary_open
- (JNIEnv *env, jobject object, jobject assetManager, jstring resourceString,
+ (JNIEnv *env, jobject object, jobject dictDirectBuffer,
jint typedLetterMultiplier, jint fullWordMultiplier)
{
- // Get the native file descriptor from the FileDescriptor object
- AssetManager *am = (AssetManager*) env->GetIntField(assetManager, sAssetManagerNativeField);
- if (!am) {
- LOGE("DICT: Couldn't get AssetManager native peer\n");
- return 0;
- }
- const char *resourcePath = env->GetStringUTFChars(resourceString, NULL);
-
- Asset *dictAsset = am->openNonAsset(resourcePath, Asset::ACCESS_BUFFER);
- if (dictAsset == NULL) {
- LOGE("DICT: Couldn't get asset %s\n", resourcePath);
- env->ReleaseStringUTFChars(resourceString, resourcePath);
- return 0;
- }
-
- void *dict = (void*) dictAsset->getBuffer(false);
+ void *dict = env->GetDirectBufferAddress(dictDirectBuffer);
if (dict == NULL) {
- LOGE("DICT: Dictionary buffer is null\n");
- env->ReleaseStringUTFChars(resourceString, resourcePath);
+ fprintf(stderr, "DICT: Dictionary buffer is null\n");
return 0;
}
Dictionary *dictionary = new Dictionary(dict, typedLetterMultiplier, fullWordMultiplier);
- dictionary->setAsset(dictAsset);
- env->SetIntField(object, sDictLength, (jint) dictAsset->getLength());
-
- env->ReleaseStringUTFChars(resourceString, resourcePath);
return (jint) dictionary;
}
@@ -131,14 +98,13 @@ static void latinime_BinaryDictionary_close
(JNIEnv *env, jobject object, jint dict)
{
Dictionary *dictionary = (Dictionary*) dict;
- ((Asset*) dictionary->getAsset())->close();
delete (Dictionary*) dict;
}
// ----------------------------------------------------------------------------
static JNINativeMethod gMethods[] = {
- {"openNative", "(Landroid/content/res/AssetManager;Ljava/lang/String;II)I",
+ {"openNative", "(Ljava/nio/ByteBuffer;II)I",
(void*)latinime_BinaryDictionary_open},
{"closeNative", "(I)V", (void*)latinime_BinaryDictionary_close},
{"getSuggestionsNative", "(I[II[C[IIIII[II)I", (void*)latinime_BinaryDictionary_getSuggestions},
@@ -167,30 +133,6 @@ static int registerNativeMethods(JNIEnv* env, const char* className,
static int registerNatives(JNIEnv *env)
{
const char* const kClassPathName = "com/android/inputmethod/latin/BinaryDictionary";
- jclass clazz;
-
- clazz = env->FindClass("java/io/FileDescriptor");
- if (clazz == NULL) {
- LOGE("Can't find %s", "java/io/FileDescriptor");
- return -1;
- }
- sDescriptorField = env->GetFieldID(clazz, "descriptor", "I");
-
- clazz = env->FindClass("android/content/res/AssetManager");
- if (clazz == NULL) {
- LOGE("Can't find %s", "java/io/FileDescriptor");
- return -1;
- }
- sAssetManagerNativeField = env->GetFieldID(clazz, "mObject", "I");
-
- // Get the field pointer for the dictionary length
- clazz = env->FindClass(kClassPathName);
- if (clazz == NULL) {
- LOGE("Can't find %s", kClassPathName);
- return -1;
- }
- sDictLength = env->GetFieldID(clazz, "mDictLength", "I");
-
return registerNativeMethods(env,
kClassPathName, gMethods, sizeof(gMethods) / sizeof(gMethods[0]));
}
diff --git a/dictionary/src/basechars.h b/native/src/basechars.h
index 5a4406606..5a4406606 100644
--- a/dictionary/src/basechars.h
+++ b/native/src/basechars.h
diff --git a/native/src/char_utils.cpp b/native/src/char_utils.cpp
new file mode 100644
index 000000000..a31a0632c
--- /dev/null
+++ b/native/src/char_utils.cpp
@@ -0,0 +1,899 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+
+namespace latinime {
+
+struct LatinCapitalSmallPair {
+ unsigned short capital;
+ unsigned short small;
+};
+
+// Generated from http://unicode.org/Public/UNIDATA/UnicodeData.txt
+//
+// 1. Run the following code. Bascially taken from
+// Dictionary::toLowerCase(unsigned short c) in dictionary.cpp.
+// Then, get the list of chars where cc != ccc.
+//
+// unsigned short c, cc, ccc, ccc2;
+// for (c = 0; c < 0xFFFF ; c++) {
+// if (c < sizeof(BASE_CHARS) / sizeof(BASE_CHARS[0])) {
+// cc = BASE_CHARS[c];
+// } else {
+// cc = c;
+// }
+//
+// // tolower
+// int isBase = 0;
+// if (cc >='A' && cc <= 'Z') {
+// ccc = (cc | 0x20);
+// ccc2 = ccc;
+// isBase = 1;
+// } else if (cc > 0x7F) {
+// ccc = u_tolower(cc);
+// ccc2 = latin_tolower(cc);
+// } else {
+// ccc = cc;
+// ccc2 = ccc;
+// }
+// if (!isBase && cc != ccc) {
+// wprintf(L" 0x%04X => 0x%04X => 0x%04X %lc => %lc => %lc \n",
+// c, cc, ccc, c, cc, ccc);
+// //assert(ccc == ccc2);
+// }
+// }
+//
+// Initially, started with an empty latin_tolower() as below.
+//
+// unsigned short latin_tolower(unsigned short c) {
+// return c;
+// }
+//
+//
+// 2. Process the list obtained by 1 by the following perl script and apply
+// 'sort -u' as well. Get the SORTED_CHAR_MAP[].
+// Note that '$1' in the perl script is 'cc' in the above C code.
+//
+// while(<>) {
+// / 0x\w* => 0x(\w*) =/;
+// open(HDL, "grep -iw ^" . $1 . " UnicodeData.txt | ");
+// $line = <HDL>;
+// chomp $line;
+// @cols = split(/;/, $line);
+// print " { 0x$1, 0x$cols[13] }, // $cols[1]\n";
+// }
+//
+//
+// 3. Update the latin_tolower() function above with SORTED_CHAR_MAP. Enable
+// the assert(ccc == ccc2) above and confirm the function exits successfully.
+//
+static const struct LatinCapitalSmallPair SORTED_CHAR_MAP[] = {
+ { 0x00C4, 0x00E4 }, // LATIN CAPITAL LETTER A WITH DIAERESIS
+ { 0x00C5, 0x00E5 }, // LATIN CAPITAL LETTER A WITH RING ABOVE
+ { 0x00C6, 0x00E6 }, // LATIN CAPITAL LETTER AE
+ { 0x00D0, 0x00F0 }, // LATIN CAPITAL LETTER ETH
+ { 0x00D5, 0x00F5 }, // LATIN CAPITAL LETTER O WITH TILDE
+ { 0x00D6, 0x00F6 }, // LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x00D8, 0x00F8 }, // LATIN CAPITAL LETTER O WITH STROKE
+ { 0x00DC, 0x00FC }, // LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x00DE, 0x00FE }, // LATIN CAPITAL LETTER THORN
+ { 0x0110, 0x0111 }, // LATIN CAPITAL LETTER D WITH STROKE
+ { 0x0126, 0x0127 }, // LATIN CAPITAL LETTER H WITH STROKE
+ { 0x0141, 0x0142 }, // LATIN CAPITAL LETTER L WITH STROKE
+ { 0x014A, 0x014B }, // LATIN CAPITAL LETTER ENG
+ { 0x0152, 0x0153 }, // LATIN CAPITAL LIGATURE OE
+ { 0x0166, 0x0167 }, // LATIN CAPITAL LETTER T WITH STROKE
+ { 0x0181, 0x0253 }, // LATIN CAPITAL LETTER B WITH HOOK
+ { 0x0182, 0x0183 }, // LATIN CAPITAL LETTER B WITH TOPBAR
+ { 0x0184, 0x0185 }, // LATIN CAPITAL LETTER TONE SIX
+ { 0x0186, 0x0254 }, // LATIN CAPITAL LETTER OPEN O
+ { 0x0187, 0x0188 }, // LATIN CAPITAL LETTER C WITH HOOK
+ { 0x0189, 0x0256 }, // LATIN CAPITAL LETTER AFRICAN D
+ { 0x018A, 0x0257 }, // LATIN CAPITAL LETTER D WITH HOOK
+ { 0x018B, 0x018C }, // LATIN CAPITAL LETTER D WITH TOPBAR
+ { 0x018E, 0x01DD }, // LATIN CAPITAL LETTER REVERSED E
+ { 0x018F, 0x0259 }, // LATIN CAPITAL LETTER SCHWA
+ { 0x0190, 0x025B }, // LATIN CAPITAL LETTER OPEN E
+ { 0x0191, 0x0192 }, // LATIN CAPITAL LETTER F WITH HOOK
+ { 0x0193, 0x0260 }, // LATIN CAPITAL LETTER G WITH HOOK
+ { 0x0194, 0x0263 }, // LATIN CAPITAL LETTER GAMMA
+ { 0x0196, 0x0269 }, // LATIN CAPITAL LETTER IOTA
+ { 0x0197, 0x0268 }, // LATIN CAPITAL LETTER I WITH STROKE
+ { 0x0198, 0x0199 }, // LATIN CAPITAL LETTER K WITH HOOK
+ { 0x019C, 0x026F }, // LATIN CAPITAL LETTER TURNED M
+ { 0x019D, 0x0272 }, // LATIN CAPITAL LETTER N WITH LEFT HOOK
+ { 0x019F, 0x0275 }, // LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+ { 0x01A2, 0x01A3 }, // LATIN CAPITAL LETTER OI
+ { 0x01A4, 0x01A5 }, // LATIN CAPITAL LETTER P WITH HOOK
+ { 0x01A6, 0x0280 }, // LATIN LETTER YR
+ { 0x01A7, 0x01A8 }, // LATIN CAPITAL LETTER TONE TWO
+ { 0x01A9, 0x0283 }, // LATIN CAPITAL LETTER ESH
+ { 0x01AC, 0x01AD }, // LATIN CAPITAL LETTER T WITH HOOK
+ { 0x01AE, 0x0288 }, // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+ { 0x01B1, 0x028A }, // LATIN CAPITAL LETTER UPSILON
+ { 0x01B2, 0x028B }, // LATIN CAPITAL LETTER V WITH HOOK
+ { 0x01B3, 0x01B4 }, // LATIN CAPITAL LETTER Y WITH HOOK
+ { 0x01B5, 0x01B6 }, // LATIN CAPITAL LETTER Z WITH STROKE
+ { 0x01B7, 0x0292 }, // LATIN CAPITAL LETTER EZH
+ { 0x01B8, 0x01B9 }, // LATIN CAPITAL LETTER EZH REVERSED
+ { 0x01BC, 0x01BD }, // LATIN CAPITAL LETTER TONE FIVE
+ { 0x01E4, 0x01E5 }, // LATIN CAPITAL LETTER G WITH STROKE
+ { 0x01EA, 0x01EB }, // LATIN CAPITAL LETTER O WITH OGONEK
+ { 0x01F6, 0x0195 }, // LATIN CAPITAL LETTER HWAIR
+ { 0x01F7, 0x01BF }, // LATIN CAPITAL LETTER WYNN
+ { 0x021C, 0x021D }, // LATIN CAPITAL LETTER YOGH
+ { 0x0220, 0x019E }, // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+ { 0x0222, 0x0223 }, // LATIN CAPITAL LETTER OU
+ { 0x0224, 0x0225 }, // LATIN CAPITAL LETTER Z WITH HOOK
+ { 0x0226, 0x0227 }, // LATIN CAPITAL LETTER A WITH DOT ABOVE
+ { 0x022E, 0x022F }, // LATIN CAPITAL LETTER O WITH DOT ABOVE
+ { 0x023A, 0x2C65 }, // LATIN CAPITAL LETTER A WITH STROKE
+ { 0x023B, 0x023C }, // LATIN CAPITAL LETTER C WITH STROKE
+ { 0x023D, 0x019A }, // LATIN CAPITAL LETTER L WITH BAR
+ { 0x023E, 0x2C66 }, // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+ { 0x0241, 0x0242 }, // LATIN CAPITAL LETTER GLOTTAL STOP
+ { 0x0243, 0x0180 }, // LATIN CAPITAL LETTER B WITH STROKE
+ { 0x0244, 0x0289 }, // LATIN CAPITAL LETTER U BAR
+ { 0x0245, 0x028C }, // LATIN CAPITAL LETTER TURNED V
+ { 0x0246, 0x0247 }, // LATIN CAPITAL LETTER E WITH STROKE
+ { 0x0248, 0x0249 }, // LATIN CAPITAL LETTER J WITH STROKE
+ { 0x024A, 0x024B }, // LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+ { 0x024C, 0x024D }, // LATIN CAPITAL LETTER R WITH STROKE
+ { 0x024E, 0x024F }, // LATIN CAPITAL LETTER Y WITH STROKE
+ { 0x0370, 0x0371 }, // GREEK CAPITAL LETTER HETA
+ { 0x0372, 0x0373 }, // GREEK CAPITAL LETTER ARCHAIC SAMPI
+ { 0x0376, 0x0377 }, // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+ { 0x0391, 0x03B1 }, // GREEK CAPITAL LETTER ALPHA
+ { 0x0392, 0x03B2 }, // GREEK CAPITAL LETTER BETA
+ { 0x0393, 0x03B3 }, // GREEK CAPITAL LETTER GAMMA
+ { 0x0394, 0x03B4 }, // GREEK CAPITAL LETTER DELTA
+ { 0x0395, 0x03B5 }, // GREEK CAPITAL LETTER EPSILON
+ { 0x0396, 0x03B6 }, // GREEK CAPITAL LETTER ZETA
+ { 0x0397, 0x03B7 }, // GREEK CAPITAL LETTER ETA
+ { 0x0398, 0x03B8 }, // GREEK CAPITAL LETTER THETA
+ { 0x0399, 0x03B9 }, // GREEK CAPITAL LETTER IOTA
+ { 0x039A, 0x03BA }, // GREEK CAPITAL LETTER KAPPA
+ { 0x039B, 0x03BB }, // GREEK CAPITAL LETTER LAMDA
+ { 0x039C, 0x03BC }, // GREEK CAPITAL LETTER MU
+ { 0x039D, 0x03BD }, // GREEK CAPITAL LETTER NU
+ { 0x039E, 0x03BE }, // GREEK CAPITAL LETTER XI
+ { 0x039F, 0x03BF }, // GREEK CAPITAL LETTER OMICRON
+ { 0x03A0, 0x03C0 }, // GREEK CAPITAL LETTER PI
+ { 0x03A1, 0x03C1 }, // GREEK CAPITAL LETTER RHO
+ { 0x03A3, 0x03C3 }, // GREEK CAPITAL LETTER SIGMA
+ { 0x03A4, 0x03C4 }, // GREEK CAPITAL LETTER TAU
+ { 0x03A5, 0x03C5 }, // GREEK CAPITAL LETTER UPSILON
+ { 0x03A6, 0x03C6 }, // GREEK CAPITAL LETTER PHI
+ { 0x03A7, 0x03C7 }, // GREEK CAPITAL LETTER CHI
+ { 0x03A8, 0x03C8 }, // GREEK CAPITAL LETTER PSI
+ { 0x03A9, 0x03C9 }, // GREEK CAPITAL LETTER OMEGA
+ { 0x03CF, 0x03D7 }, // GREEK CAPITAL KAI SYMBOL
+ { 0x03D8, 0x03D9 }, // GREEK LETTER ARCHAIC KOPPA
+ { 0x03DA, 0x03DB }, // GREEK LETTER STIGMA
+ { 0x03DC, 0x03DD }, // GREEK LETTER DIGAMMA
+ { 0x03DE, 0x03DF }, // GREEK LETTER KOPPA
+ { 0x03E0, 0x03E1 }, // GREEK LETTER SAMPI
+ { 0x03E2, 0x03E3 }, // COPTIC CAPITAL LETTER SHEI
+ { 0x03E4, 0x03E5 }, // COPTIC CAPITAL LETTER FEI
+ { 0x03E6, 0x03E7 }, // COPTIC CAPITAL LETTER KHEI
+ { 0x03E8, 0x03E9 }, // COPTIC CAPITAL LETTER HORI
+ { 0x03EA, 0x03EB }, // COPTIC CAPITAL LETTER GANGIA
+ { 0x03EC, 0x03ED }, // COPTIC CAPITAL LETTER SHIMA
+ { 0x03EE, 0x03EF }, // COPTIC CAPITAL LETTER DEI
+ { 0x03F7, 0x03F8 }, // GREEK CAPITAL LETTER SHO
+ { 0x03FA, 0x03FB }, // GREEK CAPITAL LETTER SAN
+ { 0x03FD, 0x037B }, // GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+ { 0x03FE, 0x037C }, // GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+ { 0x03FF, 0x037D }, // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ { 0x0402, 0x0452 }, // CYRILLIC CAPITAL LETTER DJE
+ { 0x0404, 0x0454 }, // CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ { 0x0405, 0x0455 }, // CYRILLIC CAPITAL LETTER DZE
+ { 0x0406, 0x0456 }, // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ { 0x0408, 0x0458 }, // CYRILLIC CAPITAL LETTER JE
+ { 0x0409, 0x0459 }, // CYRILLIC CAPITAL LETTER LJE
+ { 0x040A, 0x045A }, // CYRILLIC CAPITAL LETTER NJE
+ { 0x040B, 0x045B }, // CYRILLIC CAPITAL LETTER TSHE
+ { 0x040F, 0x045F }, // CYRILLIC CAPITAL LETTER DZHE
+ { 0x0410, 0x0430 }, // CYRILLIC CAPITAL LETTER A
+ { 0x0411, 0x0431 }, // CYRILLIC CAPITAL LETTER BE
+ { 0x0412, 0x0432 }, // CYRILLIC CAPITAL LETTER VE
+ { 0x0413, 0x0433 }, // CYRILLIC CAPITAL LETTER GHE
+ { 0x0414, 0x0434 }, // CYRILLIC CAPITAL LETTER DE
+ { 0x0415, 0x0435 }, // CYRILLIC CAPITAL LETTER IE
+ { 0x0416, 0x0436 }, // CYRILLIC CAPITAL LETTER ZHE
+ { 0x0417, 0x0437 }, // CYRILLIC CAPITAL LETTER ZE
+ { 0x0418, 0x0438 }, // CYRILLIC CAPITAL LETTER I
+ { 0x041A, 0x043A }, // CYRILLIC CAPITAL LETTER KA
+ { 0x041B, 0x043B }, // CYRILLIC CAPITAL LETTER EL
+ { 0x041C, 0x043C }, // CYRILLIC CAPITAL LETTER EM
+ { 0x041D, 0x043D }, // CYRILLIC CAPITAL LETTER EN
+ { 0x041E, 0x043E }, // CYRILLIC CAPITAL LETTER O
+ { 0x041F, 0x043F }, // CYRILLIC CAPITAL LETTER PE
+ { 0x0420, 0x0440 }, // CYRILLIC CAPITAL LETTER ER
+ { 0x0421, 0x0441 }, // CYRILLIC CAPITAL LETTER ES
+ { 0x0422, 0x0442 }, // CYRILLIC CAPITAL LETTER TE
+ { 0x0423, 0x0443 }, // CYRILLIC CAPITAL LETTER U
+ { 0x0424, 0x0444 }, // CYRILLIC CAPITAL LETTER EF
+ { 0x0425, 0x0445 }, // CYRILLIC CAPITAL LETTER HA
+ { 0x0426, 0x0446 }, // CYRILLIC CAPITAL LETTER TSE
+ { 0x0427, 0x0447 }, // CYRILLIC CAPITAL LETTER CHE
+ { 0x0428, 0x0448 }, // CYRILLIC CAPITAL LETTER SHA
+ { 0x0429, 0x0449 }, // CYRILLIC CAPITAL LETTER SHCHA
+ { 0x042A, 0x044A }, // CYRILLIC CAPITAL LETTER HARD SIGN
+ { 0x042B, 0x044B }, // CYRILLIC CAPITAL LETTER YERU
+ { 0x042C, 0x044C }, // CYRILLIC CAPITAL LETTER SOFT SIGN
+ { 0x042D, 0x044D }, // CYRILLIC CAPITAL LETTER E
+ { 0x042E, 0x044E }, // CYRILLIC CAPITAL LETTER YU
+ { 0x042F, 0x044F }, // CYRILLIC CAPITAL LETTER YA
+ { 0x0460, 0x0461 }, // CYRILLIC CAPITAL LETTER OMEGA
+ { 0x0462, 0x0463 }, // CYRILLIC CAPITAL LETTER YAT
+ { 0x0464, 0x0465 }, // CYRILLIC CAPITAL LETTER IOTIFIED E
+ { 0x0466, 0x0467 }, // CYRILLIC CAPITAL LETTER LITTLE YUS
+ { 0x0468, 0x0469 }, // CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+ { 0x046A, 0x046B }, // CYRILLIC CAPITAL LETTER BIG YUS
+ { 0x046C, 0x046D }, // CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+ { 0x046E, 0x046F }, // CYRILLIC CAPITAL LETTER KSI
+ { 0x0470, 0x0471 }, // CYRILLIC CAPITAL LETTER PSI
+ { 0x0472, 0x0473 }, // CYRILLIC CAPITAL LETTER FITA
+ { 0x0474, 0x0475 }, // CYRILLIC CAPITAL LETTER IZHITSA
+ { 0x0478, 0x0479 }, // CYRILLIC CAPITAL LETTER UK
+ { 0x047A, 0x047B }, // CYRILLIC CAPITAL LETTER ROUND OMEGA
+ { 0x047C, 0x047D }, // CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+ { 0x047E, 0x047F }, // CYRILLIC CAPITAL LETTER OT
+ { 0x0480, 0x0481 }, // CYRILLIC CAPITAL LETTER KOPPA
+ { 0x048A, 0x048B }, // CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+ { 0x048C, 0x048D }, // CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+ { 0x048E, 0x048F }, // CYRILLIC CAPITAL LETTER ER WITH TICK
+ { 0x0490, 0x0491 }, // CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ { 0x0492, 0x0493 }, // CYRILLIC CAPITAL LETTER GHE WITH STROKE
+ { 0x0494, 0x0495 }, // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+ { 0x0496, 0x0497 }, // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+ { 0x0498, 0x0499 }, // CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+ { 0x049A, 0x049B }, // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+ { 0x049C, 0x049D }, // CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+ { 0x049E, 0x049F }, // CYRILLIC CAPITAL LETTER KA WITH STROKE
+ { 0x04A0, 0x04A1 }, // CYRILLIC CAPITAL LETTER BASHKIR KA
+ { 0x04A2, 0x04A3 }, // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+ { 0x04A4, 0x04A5 }, // CYRILLIC CAPITAL LIGATURE EN GHE
+ { 0x04A6, 0x04A7 }, // CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+ { 0x04A8, 0x04A9 }, // CYRILLIC CAPITAL LETTER ABKHASIAN HA
+ { 0x04AA, 0x04AB }, // CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+ { 0x04AC, 0x04AD }, // CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+ { 0x04AE, 0x04AF }, // CYRILLIC CAPITAL LETTER STRAIGHT U
+ { 0x04B0, 0x04B1 }, // CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+ { 0x04B2, 0x04B3 }, // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+ { 0x04B4, 0x04B5 }, // CYRILLIC CAPITAL LIGATURE TE TSE
+ { 0x04B6, 0x04B7 }, // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+ { 0x04B8, 0x04B9 }, // CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+ { 0x04BA, 0x04BB }, // CYRILLIC CAPITAL LETTER SHHA
+ { 0x04BC, 0x04BD }, // CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+ { 0x04BE, 0x04BF }, // CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+ { 0x04C0, 0x04CF }, // CYRILLIC LETTER PALOCHKA
+ { 0x04C3, 0x04C4 }, // CYRILLIC CAPITAL LETTER KA WITH HOOK
+ { 0x04C5, 0x04C6 }, // CYRILLIC CAPITAL LETTER EL WITH TAIL
+ { 0x04C7, 0x04C8 }, // CYRILLIC CAPITAL LETTER EN WITH HOOK
+ { 0x04C9, 0x04CA }, // CYRILLIC CAPITAL LETTER EN WITH TAIL
+ { 0x04CB, 0x04CC }, // CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+ { 0x04CD, 0x04CE }, // CYRILLIC CAPITAL LETTER EM WITH TAIL
+ { 0x04D4, 0x04D5 }, // CYRILLIC CAPITAL LIGATURE A IE
+ { 0x04D8, 0x04D9 }, // CYRILLIC CAPITAL LETTER SCHWA
+ { 0x04E0, 0x04E1 }, // CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+ { 0x04E8, 0x04E9 }, // CYRILLIC CAPITAL LETTER BARRED O
+ { 0x04F6, 0x04F7 }, // CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+ { 0x04FA, 0x04FB }, // CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+ { 0x04FC, 0x04FD }, // CYRILLIC CAPITAL LETTER HA WITH HOOK
+ { 0x04FE, 0x04FF }, // CYRILLIC CAPITAL LETTER HA WITH STROKE
+ { 0x0500, 0x0501 }, // CYRILLIC CAPITAL LETTER KOMI DE
+ { 0x0502, 0x0503 }, // CYRILLIC CAPITAL LETTER KOMI DJE
+ { 0x0504, 0x0505 }, // CYRILLIC CAPITAL LETTER KOMI ZJE
+ { 0x0506, 0x0507 }, // CYRILLIC CAPITAL LETTER KOMI DZJE
+ { 0x0508, 0x0509 }, // CYRILLIC CAPITAL LETTER KOMI LJE
+ { 0x050A, 0x050B }, // CYRILLIC CAPITAL LETTER KOMI NJE
+ { 0x050C, 0x050D }, // CYRILLIC CAPITAL LETTER KOMI SJE
+ { 0x050E, 0x050F }, // CYRILLIC CAPITAL LETTER KOMI TJE
+ { 0x0510, 0x0511 }, // CYRILLIC CAPITAL LETTER REVERSED ZE
+ { 0x0512, 0x0513 }, // CYRILLIC CAPITAL LETTER EL WITH HOOK
+ { 0x0514, 0x0515 }, // CYRILLIC CAPITAL LETTER LHA
+ { 0x0516, 0x0517 }, // CYRILLIC CAPITAL LETTER RHA
+ { 0x0518, 0x0519 }, // CYRILLIC CAPITAL LETTER YAE
+ { 0x051A, 0x051B }, // CYRILLIC CAPITAL LETTER QA
+ { 0x051C, 0x051D }, // CYRILLIC CAPITAL LETTER WE
+ { 0x051E, 0x051F }, // CYRILLIC CAPITAL LETTER ALEUT KA
+ { 0x0520, 0x0521 }, // CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+ { 0x0522, 0x0523 }, // CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+ { 0x0524, 0x0525 }, // CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+ { 0x0531, 0x0561 }, // ARMENIAN CAPITAL LETTER AYB
+ { 0x0532, 0x0562 }, // ARMENIAN CAPITAL LETTER BEN
+ { 0x0533, 0x0563 }, // ARMENIAN CAPITAL LETTER GIM
+ { 0x0534, 0x0564 }, // ARMENIAN CAPITAL LETTER DA
+ { 0x0535, 0x0565 }, // ARMENIAN CAPITAL LETTER ECH
+ { 0x0536, 0x0566 }, // ARMENIAN CAPITAL LETTER ZA
+ { 0x0537, 0x0567 }, // ARMENIAN CAPITAL LETTER EH
+ { 0x0538, 0x0568 }, // ARMENIAN CAPITAL LETTER ET
+ { 0x0539, 0x0569 }, // ARMENIAN CAPITAL LETTER TO
+ { 0x053A, 0x056A }, // ARMENIAN CAPITAL LETTER ZHE
+ { 0x053B, 0x056B }, // ARMENIAN CAPITAL LETTER INI
+ { 0x053C, 0x056C }, // ARMENIAN CAPITAL LETTER LIWN
+ { 0x053D, 0x056D }, // ARMENIAN CAPITAL LETTER XEH
+ { 0x053E, 0x056E }, // ARMENIAN CAPITAL LETTER CA
+ { 0x053F, 0x056F }, // ARMENIAN CAPITAL LETTER KEN
+ { 0x0540, 0x0570 }, // ARMENIAN CAPITAL LETTER HO
+ { 0x0541, 0x0571 }, // ARMENIAN CAPITAL LETTER JA
+ { 0x0542, 0x0572 }, // ARMENIAN CAPITAL LETTER GHAD
+ { 0x0543, 0x0573 }, // ARMENIAN CAPITAL LETTER CHEH
+ { 0x0544, 0x0574 }, // ARMENIAN CAPITAL LETTER MEN
+ { 0x0545, 0x0575 }, // ARMENIAN CAPITAL LETTER YI
+ { 0x0546, 0x0576 }, // ARMENIAN CAPITAL LETTER NOW
+ { 0x0547, 0x0577 }, // ARMENIAN CAPITAL LETTER SHA
+ { 0x0548, 0x0578 }, // ARMENIAN CAPITAL LETTER VO
+ { 0x0549, 0x0579 }, // ARMENIAN CAPITAL LETTER CHA
+ { 0x054A, 0x057A }, // ARMENIAN CAPITAL LETTER PEH
+ { 0x054B, 0x057B }, // ARMENIAN CAPITAL LETTER JHEH
+ { 0x054C, 0x057C }, // ARMENIAN CAPITAL LETTER RA
+ { 0x054D, 0x057D }, // ARMENIAN CAPITAL LETTER SEH
+ { 0x054E, 0x057E }, // ARMENIAN CAPITAL LETTER VEW
+ { 0x054F, 0x057F }, // ARMENIAN CAPITAL LETTER TIWN
+ { 0x0550, 0x0580 }, // ARMENIAN CAPITAL LETTER REH
+ { 0x0551, 0x0581 }, // ARMENIAN CAPITAL LETTER CO
+ { 0x0552, 0x0582 }, // ARMENIAN CAPITAL LETTER YIWN
+ { 0x0553, 0x0583 }, // ARMENIAN CAPITAL LETTER PIWR
+ { 0x0554, 0x0584 }, // ARMENIAN CAPITAL LETTER KEH
+ { 0x0555, 0x0585 }, // ARMENIAN CAPITAL LETTER OH
+ { 0x0556, 0x0586 }, // ARMENIAN CAPITAL LETTER FEH
+ { 0x10A0, 0x2D00 }, // GEORGIAN CAPITAL LETTER AN
+ { 0x10A1, 0x2D01 }, // GEORGIAN CAPITAL LETTER BAN
+ { 0x10A2, 0x2D02 }, // GEORGIAN CAPITAL LETTER GAN
+ { 0x10A3, 0x2D03 }, // GEORGIAN CAPITAL LETTER DON
+ { 0x10A4, 0x2D04 }, // GEORGIAN CAPITAL LETTER EN
+ { 0x10A5, 0x2D05 }, // GEORGIAN CAPITAL LETTER VIN
+ { 0x10A6, 0x2D06 }, // GEORGIAN CAPITAL LETTER ZEN
+ { 0x10A7, 0x2D07 }, // GEORGIAN CAPITAL LETTER TAN
+ { 0x10A8, 0x2D08 }, // GEORGIAN CAPITAL LETTER IN
+ { 0x10A9, 0x2D09 }, // GEORGIAN CAPITAL LETTER KAN
+ { 0x10AA, 0x2D0A }, // GEORGIAN CAPITAL LETTER LAS
+ { 0x10AB, 0x2D0B }, // GEORGIAN CAPITAL LETTER MAN
+ { 0x10AC, 0x2D0C }, // GEORGIAN CAPITAL LETTER NAR
+ { 0x10AD, 0x2D0D }, // GEORGIAN CAPITAL LETTER ON
+ { 0x10AE, 0x2D0E }, // GEORGIAN CAPITAL LETTER PAR
+ { 0x10AF, 0x2D0F }, // GEORGIAN CAPITAL LETTER ZHAR
+ { 0x10B0, 0x2D10 }, // GEORGIAN CAPITAL LETTER RAE
+ { 0x10B1, 0x2D11 }, // GEORGIAN CAPITAL LETTER SAN
+ { 0x10B2, 0x2D12 }, // GEORGIAN CAPITAL LETTER TAR
+ { 0x10B3, 0x2D13 }, // GEORGIAN CAPITAL LETTER UN
+ { 0x10B4, 0x2D14 }, // GEORGIAN CAPITAL LETTER PHAR
+ { 0x10B5, 0x2D15 }, // GEORGIAN CAPITAL LETTER KHAR
+ { 0x10B6, 0x2D16 }, // GEORGIAN CAPITAL LETTER GHAN
+ { 0x10B7, 0x2D17 }, // GEORGIAN CAPITAL LETTER QAR
+ { 0x10B8, 0x2D18 }, // GEORGIAN CAPITAL LETTER SHIN
+ { 0x10B9, 0x2D19 }, // GEORGIAN CAPITAL LETTER CHIN
+ { 0x10BA, 0x2D1A }, // GEORGIAN CAPITAL LETTER CAN
+ { 0x10BB, 0x2D1B }, // GEORGIAN CAPITAL LETTER JIL
+ { 0x10BC, 0x2D1C }, // GEORGIAN CAPITAL LETTER CIL
+ { 0x10BD, 0x2D1D }, // GEORGIAN CAPITAL LETTER CHAR
+ { 0x10BE, 0x2D1E }, // GEORGIAN CAPITAL LETTER XAN
+ { 0x10BF, 0x2D1F }, // GEORGIAN CAPITAL LETTER JHAN
+ { 0x10C0, 0x2D20 }, // GEORGIAN CAPITAL LETTER HAE
+ { 0x10C1, 0x2D21 }, // GEORGIAN CAPITAL LETTER HE
+ { 0x10C2, 0x2D22 }, // GEORGIAN CAPITAL LETTER HIE
+ { 0x10C3, 0x2D23 }, // GEORGIAN CAPITAL LETTER WE
+ { 0x10C4, 0x2D24 }, // GEORGIAN CAPITAL LETTER HAR
+ { 0x10C5, 0x2D25 }, // GEORGIAN CAPITAL LETTER HOE
+ { 0x1E00, 0x1E01 }, // LATIN CAPITAL LETTER A WITH RING BELOW
+ { 0x1E02, 0x1E03 }, // LATIN CAPITAL LETTER B WITH DOT ABOVE
+ { 0x1E04, 0x1E05 }, // LATIN CAPITAL LETTER B WITH DOT BELOW
+ { 0x1E06, 0x1E07 }, // LATIN CAPITAL LETTER B WITH LINE BELOW
+ { 0x1E08, 0x1E09 }, // LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+ { 0x1E0A, 0x1E0B }, // LATIN CAPITAL LETTER D WITH DOT ABOVE
+ { 0x1E0C, 0x1E0D }, // LATIN CAPITAL LETTER D WITH DOT BELOW
+ { 0x1E0E, 0x1E0F }, // LATIN CAPITAL LETTER D WITH LINE BELOW
+ { 0x1E10, 0x1E11 }, // LATIN CAPITAL LETTER D WITH CEDILLA
+ { 0x1E12, 0x1E13 }, // LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+ { 0x1E14, 0x1E15 }, // LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+ { 0x1E16, 0x1E17 }, // LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+ { 0x1E18, 0x1E19 }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+ { 0x1E1A, 0x1E1B }, // LATIN CAPITAL LETTER E WITH TILDE BELOW
+ { 0x1E1C, 0x1E1D }, // LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+ { 0x1E1E, 0x1E1F }, // LATIN CAPITAL LETTER F WITH DOT ABOVE
+ { 0x1E20, 0x1E21 }, // LATIN CAPITAL LETTER G WITH MACRON
+ { 0x1E22, 0x1E23 }, // LATIN CAPITAL LETTER H WITH DOT ABOVE
+ { 0x1E24, 0x1E25 }, // LATIN CAPITAL LETTER H WITH DOT BELOW
+ { 0x1E26, 0x1E27 }, // LATIN CAPITAL LETTER H WITH DIAERESIS
+ { 0x1E28, 0x1E29 }, // LATIN CAPITAL LETTER H WITH CEDILLA
+ { 0x1E2A, 0x1E2B }, // LATIN CAPITAL LETTER H WITH BREVE BELOW
+ { 0x1E2C, 0x1E2D }, // LATIN CAPITAL LETTER I WITH TILDE BELOW
+ { 0x1E2E, 0x1E2F }, // LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+ { 0x1E30, 0x1E31 }, // LATIN CAPITAL LETTER K WITH ACUTE
+ { 0x1E32, 0x1E33 }, // LATIN CAPITAL LETTER K WITH DOT BELOW
+ { 0x1E34, 0x1E35 }, // LATIN CAPITAL LETTER K WITH LINE BELOW
+ { 0x1E36, 0x1E37 }, // LATIN CAPITAL LETTER L WITH DOT BELOW
+ { 0x1E38, 0x1E39 }, // LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+ { 0x1E3A, 0x1E3B }, // LATIN CAPITAL LETTER L WITH LINE BELOW
+ { 0x1E3C, 0x1E3D }, // LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+ { 0x1E3E, 0x1E3F }, // LATIN CAPITAL LETTER M WITH ACUTE
+ { 0x1E40, 0x1E41 }, // LATIN CAPITAL LETTER M WITH DOT ABOVE
+ { 0x1E42, 0x1E43 }, // LATIN CAPITAL LETTER M WITH DOT BELOW
+ { 0x1E44, 0x1E45 }, // LATIN CAPITAL LETTER N WITH DOT ABOVE
+ { 0x1E46, 0x1E47 }, // LATIN CAPITAL LETTER N WITH DOT BELOW
+ { 0x1E48, 0x1E49 }, // LATIN CAPITAL LETTER N WITH LINE BELOW
+ { 0x1E4A, 0x1E4B }, // LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+ { 0x1E4C, 0x1E4D }, // LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+ { 0x1E4E, 0x1E4F }, // LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+ { 0x1E50, 0x1E51 }, // LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+ { 0x1E52, 0x1E53 }, // LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+ { 0x1E54, 0x1E55 }, // LATIN CAPITAL LETTER P WITH ACUTE
+ { 0x1E56, 0x1E57 }, // LATIN CAPITAL LETTER P WITH DOT ABOVE
+ { 0x1E58, 0x1E59 }, // LATIN CAPITAL LETTER R WITH DOT ABOVE
+ { 0x1E5A, 0x1E5B }, // LATIN CAPITAL LETTER R WITH DOT BELOW
+ { 0x1E5C, 0x1E5D }, // LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+ { 0x1E5E, 0x1E5F }, // LATIN CAPITAL LETTER R WITH LINE BELOW
+ { 0x1E60, 0x1E61 }, // LATIN CAPITAL LETTER S WITH DOT ABOVE
+ { 0x1E62, 0x1E63 }, // LATIN CAPITAL LETTER S WITH DOT BELOW
+ { 0x1E64, 0x1E65 }, // LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+ { 0x1E66, 0x1E67 }, // LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+ { 0x1E68, 0x1E69 }, // LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+ { 0x1E6A, 0x1E6B }, // LATIN CAPITAL LETTER T WITH DOT ABOVE
+ { 0x1E6C, 0x1E6D }, // LATIN CAPITAL LETTER T WITH DOT BELOW
+ { 0x1E6E, 0x1E6F }, // LATIN CAPITAL LETTER T WITH LINE BELOW
+ { 0x1E70, 0x1E71 }, // LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+ { 0x1E72, 0x1E73 }, // LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+ { 0x1E74, 0x1E75 }, // LATIN CAPITAL LETTER U WITH TILDE BELOW
+ { 0x1E76, 0x1E77 }, // LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+ { 0x1E78, 0x1E79 }, // LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+ { 0x1E7A, 0x1E7B }, // LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+ { 0x1E7C, 0x1E7D }, // LATIN CAPITAL LETTER V WITH TILDE
+ { 0x1E7E, 0x1E7F }, // LATIN CAPITAL LETTER V WITH DOT BELOW
+ { 0x1E80, 0x1E81 }, // LATIN CAPITAL LETTER W WITH GRAVE
+ { 0x1E82, 0x1E83 }, // LATIN CAPITAL LETTER W WITH ACUTE
+ { 0x1E84, 0x1E85 }, // LATIN CAPITAL LETTER W WITH DIAERESIS
+ { 0x1E86, 0x1E87 }, // LATIN CAPITAL LETTER W WITH DOT ABOVE
+ { 0x1E88, 0x1E89 }, // LATIN CAPITAL LETTER W WITH DOT BELOW
+ { 0x1E8A, 0x1E8B }, // LATIN CAPITAL LETTER X WITH DOT ABOVE
+ { 0x1E8C, 0x1E8D }, // LATIN CAPITAL LETTER X WITH DIAERESIS
+ { 0x1E8E, 0x1E8F }, // LATIN CAPITAL LETTER Y WITH DOT ABOVE
+ { 0x1E90, 0x1E91 }, // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ { 0x1E92, 0x1E93 }, // LATIN CAPITAL LETTER Z WITH DOT BELOW
+ { 0x1E94, 0x1E95 }, // LATIN CAPITAL LETTER Z WITH LINE BELOW
+ { 0x1E9E, 0x00DF }, // LATIN CAPITAL LETTER SHARP S
+ { 0x1EA0, 0x1EA1 }, // LATIN CAPITAL LETTER A WITH DOT BELOW
+ { 0x1EA2, 0x1EA3 }, // LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ { 0x1EA4, 0x1EA5 }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+ { 0x1EA6, 0x1EA7 }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+ { 0x1EA8, 0x1EA9 }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EAA, 0x1EAB }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+ { 0x1EAC, 0x1EAD }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EAE, 0x1EAF }, // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+ { 0x1EB0, 0x1EB1 }, // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+ { 0x1EB2, 0x1EB3 }, // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+ { 0x1EB4, 0x1EB5 }, // LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+ { 0x1EB6, 0x1EB7 }, // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+ { 0x1EB8, 0x1EB9 }, // LATIN CAPITAL LETTER E WITH DOT BELOW
+ { 0x1EBA, 0x1EBB }, // LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ { 0x1EBC, 0x1EBD }, // LATIN CAPITAL LETTER E WITH TILDE
+ { 0x1EBE, 0x1EBF }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+ { 0x1EC0, 0x1EC1 }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+ { 0x1EC2, 0x1EC3 }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EC4, 0x1EC5 }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+ { 0x1EC6, 0x1EC7 }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EC8, 0x1EC9 }, // LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ { 0x1ECA, 0x1ECB }, // LATIN CAPITAL LETTER I WITH DOT BELOW
+ { 0x1ECC, 0x1ECD }, // LATIN CAPITAL LETTER O WITH DOT BELOW
+ { 0x1ECE, 0x1ECF }, // LATIN CAPITAL LETTER O WITH HOOK ABOVE
+ { 0x1ED0, 0x1ED1 }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+ { 0x1ED2, 0x1ED3 }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+ { 0x1ED4, 0x1ED5 }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1ED6, 0x1ED7 }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+ { 0x1ED8, 0x1ED9 }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EDA, 0x1EDB }, // LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+ { 0x1EDC, 0x1EDD }, // LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+ { 0x1EDE, 0x1EDF }, // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+ { 0x1EE0, 0x1EE1 }, // LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ { 0x1EE2, 0x1EE3 }, // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+ { 0x1EE4, 0x1EE5 }, // LATIN CAPITAL LETTER U WITH DOT BELOW
+ { 0x1EE6, 0x1EE7 }, // LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ { 0x1EE8, 0x1EE9 }, // LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+ { 0x1EEA, 0x1EEB }, // LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+ { 0x1EEC, 0x1EED }, // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+ { 0x1EEE, 0x1EEF }, // LATIN CAPITAL LETTER U WITH HORN AND TILDE
+ { 0x1EF0, 0x1EF1 }, // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+ { 0x1EF2, 0x1EF3 }, // LATIN CAPITAL LETTER Y WITH GRAVE
+ { 0x1EF4, 0x1EF5 }, // LATIN CAPITAL LETTER Y WITH DOT BELOW
+ { 0x1EF6, 0x1EF7 }, // LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+ { 0x1EF8, 0x1EF9 }, // LATIN CAPITAL LETTER Y WITH TILDE
+ { 0x1EFA, 0x1EFB }, // LATIN CAPITAL LETTER MIDDLE-WELSH LL
+ { 0x1EFC, 0x1EFD }, // LATIN CAPITAL LETTER MIDDLE-WELSH V
+ { 0x1EFE, 0x1EFF }, // LATIN CAPITAL LETTER Y WITH LOOP
+ { 0x1F08, 0x1F00 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI
+ { 0x1F09, 0x1F01 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA
+ { 0x1F0A, 0x1F02 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+ { 0x1F0B, 0x1F03 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+ { 0x1F0C, 0x1F04 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+ { 0x1F0D, 0x1F05 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+ { 0x1F0E, 0x1F06 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ { 0x1F0F, 0x1F07 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ { 0x1F18, 0x1F10 }, // GREEK CAPITAL LETTER EPSILON WITH PSILI
+ { 0x1F19, 0x1F11 }, // GREEK CAPITAL LETTER EPSILON WITH DASIA
+ { 0x1F1A, 0x1F12 }, // GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+ { 0x1F1B, 0x1F13 }, // GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+ { 0x1F1C, 0x1F14 }, // GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+ { 0x1F1D, 0x1F15 }, // GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ { 0x1F28, 0x1F20 }, // GREEK CAPITAL LETTER ETA WITH PSILI
+ { 0x1F29, 0x1F21 }, // GREEK CAPITAL LETTER ETA WITH DASIA
+ { 0x1F2A, 0x1F22 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+ { 0x1F2B, 0x1F23 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+ { 0x1F2C, 0x1F24 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+ { 0x1F2D, 0x1F25 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+ { 0x1F2E, 0x1F26 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+ { 0x1F2F, 0x1F27 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ { 0x1F38, 0x1F30 }, // GREEK CAPITAL LETTER IOTA WITH PSILI
+ { 0x1F39, 0x1F31 }, // GREEK CAPITAL LETTER IOTA WITH DASIA
+ { 0x1F3A, 0x1F32 }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+ { 0x1F3B, 0x1F33 }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+ { 0x1F3C, 0x1F34 }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+ { 0x1F3D, 0x1F35 }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+ { 0x1F3E, 0x1F36 }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+ { 0x1F3F, 0x1F37 }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+ { 0x1F48, 0x1F40 }, // GREEK CAPITAL LETTER OMICRON WITH PSILI
+ { 0x1F49, 0x1F41 }, // GREEK CAPITAL LETTER OMICRON WITH DASIA
+ { 0x1F4A, 0x1F42 }, // GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+ { 0x1F4B, 0x1F43 }, // GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+ { 0x1F4C, 0x1F44 }, // GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+ { 0x1F4D, 0x1F45 }, // GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ { 0x1F59, 0x1F51 }, // GREEK CAPITAL LETTER UPSILON WITH DASIA
+ { 0x1F5B, 0x1F53 }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ { 0x1F5D, 0x1F55 }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ { 0x1F5F, 0x1F57 }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ { 0x1F68, 0x1F60 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI
+ { 0x1F69, 0x1F61 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA
+ { 0x1F6A, 0x1F62 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+ { 0x1F6B, 0x1F63 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+ { 0x1F6C, 0x1F64 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+ { 0x1F6D, 0x1F65 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+ { 0x1F6E, 0x1F66 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ { 0x1F6F, 0x1F67 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ { 0x1F88, 0x1F80 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1F89, 0x1F81 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1F8A, 0x1F82 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1F8B, 0x1F83 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1F8C, 0x1F84 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1F8D, 0x1F85 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1F8E, 0x1F86 }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F8F, 0x1F87 }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F98, 0x1F90 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1F99, 0x1F91 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1F9A, 0x1F92 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1F9B, 0x1F93 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1F9C, 0x1F94 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1F9D, 0x1F95 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1F9E, 0x1F96 }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F9F, 0x1F97 }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FA8, 0x1FA0 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1FA9, 0x1FA1 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1FAA, 0x1FA2 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1FAB, 0x1FA3 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1FAC, 0x1FA4 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1FAD, 0x1FA5 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1FAE, 0x1FA6 }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FAF, 0x1FA7 }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FB8, 0x1FB0 }, // GREEK CAPITAL LETTER ALPHA WITH VRACHY
+ { 0x1FB9, 0x1FB1 }, // GREEK CAPITAL LETTER ALPHA WITH MACRON
+ { 0x1FBA, 0x1F70 }, // GREEK CAPITAL LETTER ALPHA WITH VARIA
+ { 0x1FBB, 0x1F71 }, // GREEK CAPITAL LETTER ALPHA WITH OXIA
+ { 0x1FBC, 0x1FB3 }, // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ { 0x1FC8, 0x1F72 }, // GREEK CAPITAL LETTER EPSILON WITH VARIA
+ { 0x1FC9, 0x1F73 }, // GREEK CAPITAL LETTER EPSILON WITH OXIA
+ { 0x1FCA, 0x1F74 }, // GREEK CAPITAL LETTER ETA WITH VARIA
+ { 0x1FCB, 0x1F75 }, // GREEK CAPITAL LETTER ETA WITH OXIA
+ { 0x1FCC, 0x1FC3 }, // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ { 0x1FD8, 0x1FD0 }, // GREEK CAPITAL LETTER IOTA WITH VRACHY
+ { 0x1FD9, 0x1FD1 }, // GREEK CAPITAL LETTER IOTA WITH MACRON
+ { 0x1FDA, 0x1F76 }, // GREEK CAPITAL LETTER IOTA WITH VARIA
+ { 0x1FDB, 0x1F77 }, // GREEK CAPITAL LETTER IOTA WITH OXIA
+ { 0x1FE8, 0x1FE0 }, // GREEK CAPITAL LETTER UPSILON WITH VRACHY
+ { 0x1FE9, 0x1FE1 }, // GREEK CAPITAL LETTER UPSILON WITH MACRON
+ { 0x1FEA, 0x1F7A }, // GREEK CAPITAL LETTER UPSILON WITH VARIA
+ { 0x1FEB, 0x1F7B }, // GREEK CAPITAL LETTER UPSILON WITH OXIA
+ { 0x1FEC, 0x1FE5 }, // GREEK CAPITAL LETTER RHO WITH DASIA
+ { 0x1FF8, 0x1F78 }, // GREEK CAPITAL LETTER OMICRON WITH VARIA
+ { 0x1FF9, 0x1F79 }, // GREEK CAPITAL LETTER OMICRON WITH OXIA
+ { 0x1FFA, 0x1F7C }, // GREEK CAPITAL LETTER OMEGA WITH VARIA
+ { 0x1FFB, 0x1F7D }, // GREEK CAPITAL LETTER OMEGA WITH OXIA
+ { 0x1FFC, 0x1FF3 }, // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ { 0x2126, 0x03C9 }, // OHM SIGN
+ { 0x212A, 0x006B }, // KELVIN SIGN
+ { 0x212B, 0x00E5 }, // ANGSTROM SIGN
+ { 0x2132, 0x214E }, // TURNED CAPITAL F
+ { 0x2160, 0x2170 }, // ROMAN NUMERAL ONE
+ { 0x2161, 0x2171 }, // ROMAN NUMERAL TWO
+ { 0x2162, 0x2172 }, // ROMAN NUMERAL THREE
+ { 0x2163, 0x2173 }, // ROMAN NUMERAL FOUR
+ { 0x2164, 0x2174 }, // ROMAN NUMERAL FIVE
+ { 0x2165, 0x2175 }, // ROMAN NUMERAL SIX
+ { 0x2166, 0x2176 }, // ROMAN NUMERAL SEVEN
+ { 0x2167, 0x2177 }, // ROMAN NUMERAL EIGHT
+ { 0x2168, 0x2178 }, // ROMAN NUMERAL NINE
+ { 0x2169, 0x2179 }, // ROMAN NUMERAL TEN
+ { 0x216A, 0x217A }, // ROMAN NUMERAL ELEVEN
+ { 0x216B, 0x217B }, // ROMAN NUMERAL TWELVE
+ { 0x216C, 0x217C }, // ROMAN NUMERAL FIFTY
+ { 0x216D, 0x217D }, // ROMAN NUMERAL ONE HUNDRED
+ { 0x216E, 0x217E }, // ROMAN NUMERAL FIVE HUNDRED
+ { 0x216F, 0x217F }, // ROMAN NUMERAL ONE THOUSAND
+ { 0x2183, 0x2184 }, // ROMAN NUMERAL REVERSED ONE HUNDRED
+ { 0x24B6, 0x24D0 }, // CIRCLED LATIN CAPITAL LETTER A
+ { 0x24B7, 0x24D1 }, // CIRCLED LATIN CAPITAL LETTER B
+ { 0x24B8, 0x24D2 }, // CIRCLED LATIN CAPITAL LETTER C
+ { 0x24B9, 0x24D3 }, // CIRCLED LATIN CAPITAL LETTER D
+ { 0x24BA, 0x24D4 }, // CIRCLED LATIN CAPITAL LETTER E
+ { 0x24BB, 0x24D5 }, // CIRCLED LATIN CAPITAL LETTER F
+ { 0x24BC, 0x24D6 }, // CIRCLED LATIN CAPITAL LETTER G
+ { 0x24BD, 0x24D7 }, // CIRCLED LATIN CAPITAL LETTER H
+ { 0x24BE, 0x24D8 }, // CIRCLED LATIN CAPITAL LETTER I
+ { 0x24BF, 0x24D9 }, // CIRCLED LATIN CAPITAL LETTER J
+ { 0x24C0, 0x24DA }, // CIRCLED LATIN CAPITAL LETTER K
+ { 0x24C1, 0x24DB }, // CIRCLED LATIN CAPITAL LETTER L
+ { 0x24C2, 0x24DC }, // CIRCLED LATIN CAPITAL LETTER M
+ { 0x24C3, 0x24DD }, // CIRCLED LATIN CAPITAL LETTER N
+ { 0x24C4, 0x24DE }, // CIRCLED LATIN CAPITAL LETTER O
+ { 0x24C5, 0x24DF }, // CIRCLED LATIN CAPITAL LETTER P
+ { 0x24C6, 0x24E0 }, // CIRCLED LATIN CAPITAL LETTER Q
+ { 0x24C7, 0x24E1 }, // CIRCLED LATIN CAPITAL LETTER R
+ { 0x24C8, 0x24E2 }, // CIRCLED LATIN CAPITAL LETTER S
+ { 0x24C9, 0x24E3 }, // CIRCLED LATIN CAPITAL LETTER T
+ { 0x24CA, 0x24E4 }, // CIRCLED LATIN CAPITAL LETTER U
+ { 0x24CB, 0x24E5 }, // CIRCLED LATIN CAPITAL LETTER V
+ { 0x24CC, 0x24E6 }, // CIRCLED LATIN CAPITAL LETTER W
+ { 0x24CD, 0x24E7 }, // CIRCLED LATIN CAPITAL LETTER X
+ { 0x24CE, 0x24E8 }, // CIRCLED LATIN CAPITAL LETTER Y
+ { 0x24CF, 0x24E9 }, // CIRCLED LATIN CAPITAL LETTER Z
+ { 0x2C00, 0x2C30 }, // GLAGOLITIC CAPITAL LETTER AZU
+ { 0x2C01, 0x2C31 }, // GLAGOLITIC CAPITAL LETTER BUKY
+ { 0x2C02, 0x2C32 }, // GLAGOLITIC CAPITAL LETTER VEDE
+ { 0x2C03, 0x2C33 }, // GLAGOLITIC CAPITAL LETTER GLAGOLI
+ { 0x2C04, 0x2C34 }, // GLAGOLITIC CAPITAL LETTER DOBRO
+ { 0x2C05, 0x2C35 }, // GLAGOLITIC CAPITAL LETTER YESTU
+ { 0x2C06, 0x2C36 }, // GLAGOLITIC CAPITAL LETTER ZHIVETE
+ { 0x2C07, 0x2C37 }, // GLAGOLITIC CAPITAL LETTER DZELO
+ { 0x2C08, 0x2C38 }, // GLAGOLITIC CAPITAL LETTER ZEMLJA
+ { 0x2C09, 0x2C39 }, // GLAGOLITIC CAPITAL LETTER IZHE
+ { 0x2C0A, 0x2C3A }, // GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+ { 0x2C0B, 0x2C3B }, // GLAGOLITIC CAPITAL LETTER I
+ { 0x2C0C, 0x2C3C }, // GLAGOLITIC CAPITAL LETTER DJERVI
+ { 0x2C0D, 0x2C3D }, // GLAGOLITIC CAPITAL LETTER KAKO
+ { 0x2C0E, 0x2C3E }, // GLAGOLITIC CAPITAL LETTER LJUDIJE
+ { 0x2C0F, 0x2C3F }, // GLAGOLITIC CAPITAL LETTER MYSLITE
+ { 0x2C10, 0x2C40 }, // GLAGOLITIC CAPITAL LETTER NASHI
+ { 0x2C11, 0x2C41 }, // GLAGOLITIC CAPITAL LETTER ONU
+ { 0x2C12, 0x2C42 }, // GLAGOLITIC CAPITAL LETTER POKOJI
+ { 0x2C13, 0x2C43 }, // GLAGOLITIC CAPITAL LETTER RITSI
+ { 0x2C14, 0x2C44 }, // GLAGOLITIC CAPITAL LETTER SLOVO
+ { 0x2C15, 0x2C45 }, // GLAGOLITIC CAPITAL LETTER TVRIDO
+ { 0x2C16, 0x2C46 }, // GLAGOLITIC CAPITAL LETTER UKU
+ { 0x2C17, 0x2C47 }, // GLAGOLITIC CAPITAL LETTER FRITU
+ { 0x2C18, 0x2C48 }, // GLAGOLITIC CAPITAL LETTER HERU
+ { 0x2C19, 0x2C49 }, // GLAGOLITIC CAPITAL LETTER OTU
+ { 0x2C1A, 0x2C4A }, // GLAGOLITIC CAPITAL LETTER PE
+ { 0x2C1B, 0x2C4B }, // GLAGOLITIC CAPITAL LETTER SHTA
+ { 0x2C1C, 0x2C4C }, // GLAGOLITIC CAPITAL LETTER TSI
+ { 0x2C1D, 0x2C4D }, // GLAGOLITIC CAPITAL LETTER CHRIVI
+ { 0x2C1E, 0x2C4E }, // GLAGOLITIC CAPITAL LETTER SHA
+ { 0x2C1F, 0x2C4F }, // GLAGOLITIC CAPITAL LETTER YERU
+ { 0x2C20, 0x2C50 }, // GLAGOLITIC CAPITAL LETTER YERI
+ { 0x2C21, 0x2C51 }, // GLAGOLITIC CAPITAL LETTER YATI
+ { 0x2C22, 0x2C52 }, // GLAGOLITIC CAPITAL LETTER SPIDERY HA
+ { 0x2C23, 0x2C53 }, // GLAGOLITIC CAPITAL LETTER YU
+ { 0x2C24, 0x2C54 }, // GLAGOLITIC CAPITAL LETTER SMALL YUS
+ { 0x2C25, 0x2C55 }, // GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+ { 0x2C26, 0x2C56 }, // GLAGOLITIC CAPITAL LETTER YO
+ { 0x2C27, 0x2C57 }, // GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+ { 0x2C28, 0x2C58 }, // GLAGOLITIC CAPITAL LETTER BIG YUS
+ { 0x2C29, 0x2C59 }, // GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+ { 0x2C2A, 0x2C5A }, // GLAGOLITIC CAPITAL LETTER FITA
+ { 0x2C2B, 0x2C5B }, // GLAGOLITIC CAPITAL LETTER IZHITSA
+ { 0x2C2C, 0x2C5C }, // GLAGOLITIC CAPITAL LETTER SHTAPIC
+ { 0x2C2D, 0x2C5D }, // GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+ { 0x2C2E, 0x2C5E }, // GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+ { 0x2C60, 0x2C61 }, // LATIN CAPITAL LETTER L WITH DOUBLE BAR
+ { 0x2C62, 0x026B }, // LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+ { 0x2C63, 0x1D7D }, // LATIN CAPITAL LETTER P WITH STROKE
+ { 0x2C64, 0x027D }, // LATIN CAPITAL LETTER R WITH TAIL
+ { 0x2C67, 0x2C68 }, // LATIN CAPITAL LETTER H WITH DESCENDER
+ { 0x2C69, 0x2C6A }, // LATIN CAPITAL LETTER K WITH DESCENDER
+ { 0x2C6B, 0x2C6C }, // LATIN CAPITAL LETTER Z WITH DESCENDER
+ { 0x2C6D, 0x0251 }, // LATIN CAPITAL LETTER ALPHA
+ { 0x2C6E, 0x0271 }, // LATIN CAPITAL LETTER M WITH HOOK
+ { 0x2C6F, 0x0250 }, // LATIN CAPITAL LETTER TURNED A
+ { 0x2C70, 0x0252 }, // LATIN CAPITAL LETTER TURNED ALPHA
+ { 0x2C72, 0x2C73 }, // LATIN CAPITAL LETTER W WITH HOOK
+ { 0x2C75, 0x2C76 }, // LATIN CAPITAL LETTER HALF H
+ { 0x2C7E, 0x023F }, // LATIN CAPITAL LETTER S WITH SWASH TAIL
+ { 0x2C7F, 0x0240 }, // LATIN CAPITAL LETTER Z WITH SWASH TAIL
+ { 0x2C80, 0x2C81 }, // COPTIC CAPITAL LETTER ALFA
+ { 0x2C82, 0x2C83 }, // COPTIC CAPITAL LETTER VIDA
+ { 0x2C84, 0x2C85 }, // COPTIC CAPITAL LETTER GAMMA
+ { 0x2C86, 0x2C87 }, // COPTIC CAPITAL LETTER DALDA
+ { 0x2C88, 0x2C89 }, // COPTIC CAPITAL LETTER EIE
+ { 0x2C8A, 0x2C8B }, // COPTIC CAPITAL LETTER SOU
+ { 0x2C8C, 0x2C8D }, // COPTIC CAPITAL LETTER ZATA
+ { 0x2C8E, 0x2C8F }, // COPTIC CAPITAL LETTER HATE
+ { 0x2C90, 0x2C91 }, // COPTIC CAPITAL LETTER THETHE
+ { 0x2C92, 0x2C93 }, // COPTIC CAPITAL LETTER IAUDA
+ { 0x2C94, 0x2C95 }, // COPTIC CAPITAL LETTER KAPA
+ { 0x2C96, 0x2C97 }, // COPTIC CAPITAL LETTER LAULA
+ { 0x2C98, 0x2C99 }, // COPTIC CAPITAL LETTER MI
+ { 0x2C9A, 0x2C9B }, // COPTIC CAPITAL LETTER NI
+ { 0x2C9C, 0x2C9D }, // COPTIC CAPITAL LETTER KSI
+ { 0x2C9E, 0x2C9F }, // COPTIC CAPITAL LETTER O
+ { 0x2CA0, 0x2CA1 }, // COPTIC CAPITAL LETTER PI
+ { 0x2CA2, 0x2CA3 }, // COPTIC CAPITAL LETTER RO
+ { 0x2CA4, 0x2CA5 }, // COPTIC CAPITAL LETTER SIMA
+ { 0x2CA6, 0x2CA7 }, // COPTIC CAPITAL LETTER TAU
+ { 0x2CA8, 0x2CA9 }, // COPTIC CAPITAL LETTER UA
+ { 0x2CAA, 0x2CAB }, // COPTIC CAPITAL LETTER FI
+ { 0x2CAC, 0x2CAD }, // COPTIC CAPITAL LETTER KHI
+ { 0x2CAE, 0x2CAF }, // COPTIC CAPITAL LETTER PSI
+ { 0x2CB0, 0x2CB1 }, // COPTIC CAPITAL LETTER OOU
+ { 0x2CB2, 0x2CB3 }, // COPTIC CAPITAL LETTER DIALECT-P ALEF
+ { 0x2CB4, 0x2CB5 }, // COPTIC CAPITAL LETTER OLD COPTIC AIN
+ { 0x2CB6, 0x2CB7 }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+ { 0x2CB8, 0x2CB9 }, // COPTIC CAPITAL LETTER DIALECT-P KAPA
+ { 0x2CBA, 0x2CBB }, // COPTIC CAPITAL LETTER DIALECT-P NI
+ { 0x2CBC, 0x2CBD }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+ { 0x2CBE, 0x2CBF }, // COPTIC CAPITAL LETTER OLD COPTIC OOU
+ { 0x2CC0, 0x2CC1 }, // COPTIC CAPITAL LETTER SAMPI
+ { 0x2CC2, 0x2CC3 }, // COPTIC CAPITAL LETTER CROSSED SHEI
+ { 0x2CC4, 0x2CC5 }, // COPTIC CAPITAL LETTER OLD COPTIC SHEI
+ { 0x2CC6, 0x2CC7 }, // COPTIC CAPITAL LETTER OLD COPTIC ESH
+ { 0x2CC8, 0x2CC9 }, // COPTIC CAPITAL LETTER AKHMIMIC KHEI
+ { 0x2CCA, 0x2CCB }, // COPTIC CAPITAL LETTER DIALECT-P HORI
+ { 0x2CCC, 0x2CCD }, // COPTIC CAPITAL LETTER OLD COPTIC HORI
+ { 0x2CCE, 0x2CCF }, // COPTIC CAPITAL LETTER OLD COPTIC HA
+ { 0x2CD0, 0x2CD1 }, // COPTIC CAPITAL LETTER L-SHAPED HA
+ { 0x2CD2, 0x2CD3 }, // COPTIC CAPITAL LETTER OLD COPTIC HEI
+ { 0x2CD4, 0x2CD5 }, // COPTIC CAPITAL LETTER OLD COPTIC HAT
+ { 0x2CD6, 0x2CD7 }, // COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+ { 0x2CD8, 0x2CD9 }, // COPTIC CAPITAL LETTER OLD COPTIC DJA
+ { 0x2CDA, 0x2CDB }, // COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+ { 0x2CDC, 0x2CDD }, // COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+ { 0x2CDE, 0x2CDF }, // COPTIC CAPITAL LETTER OLD NUBIAN NGI
+ { 0x2CE0, 0x2CE1 }, // COPTIC CAPITAL LETTER OLD NUBIAN NYI
+ { 0x2CE2, 0x2CE3 }, // COPTIC CAPITAL LETTER OLD NUBIAN WAU
+ { 0x2CEB, 0x2CEC }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+ { 0x2CED, 0x2CEE }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+ { 0xA640, 0xA641 }, // CYRILLIC CAPITAL LETTER ZEMLYA
+ { 0xA642, 0xA643 }, // CYRILLIC CAPITAL LETTER DZELO
+ { 0xA644, 0xA645 }, // CYRILLIC CAPITAL LETTER REVERSED DZE
+ { 0xA646, 0xA647 }, // CYRILLIC CAPITAL LETTER IOTA
+ { 0xA648, 0xA649 }, // CYRILLIC CAPITAL LETTER DJERV
+ { 0xA64A, 0xA64B }, // CYRILLIC CAPITAL LETTER MONOGRAPH UK
+ { 0xA64C, 0xA64D }, // CYRILLIC CAPITAL LETTER BROAD OMEGA
+ { 0xA64E, 0xA64F }, // CYRILLIC CAPITAL LETTER NEUTRAL YER
+ { 0xA650, 0xA651 }, // CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+ { 0xA652, 0xA653 }, // CYRILLIC CAPITAL LETTER IOTIFIED YAT
+ { 0xA654, 0xA655 }, // CYRILLIC CAPITAL LETTER REVERSED YU
+ { 0xA656, 0xA657 }, // CYRILLIC CAPITAL LETTER IOTIFIED A
+ { 0xA658, 0xA659 }, // CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+ { 0xA65A, 0xA65B }, // CYRILLIC CAPITAL LETTER BLENDED YUS
+ { 0xA65C, 0xA65D }, // CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+ { 0xA65E, 0xA65F }, // CYRILLIC CAPITAL LETTER YN
+ { 0xA662, 0xA663 }, // CYRILLIC CAPITAL LETTER SOFT DE
+ { 0xA664, 0xA665 }, // CYRILLIC CAPITAL LETTER SOFT EL
+ { 0xA666, 0xA667 }, // CYRILLIC CAPITAL LETTER SOFT EM
+ { 0xA668, 0xA669 }, // CYRILLIC CAPITAL LETTER MONOCULAR O
+ { 0xA66A, 0xA66B }, // CYRILLIC CAPITAL LETTER BINOCULAR O
+ { 0xA66C, 0xA66D }, // CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+ { 0xA680, 0xA681 }, // CYRILLIC CAPITAL LETTER DWE
+ { 0xA682, 0xA683 }, // CYRILLIC CAPITAL LETTER DZWE
+ { 0xA684, 0xA685 }, // CYRILLIC CAPITAL LETTER ZHWE
+ { 0xA686, 0xA687 }, // CYRILLIC CAPITAL LETTER CCHE
+ { 0xA688, 0xA689 }, // CYRILLIC CAPITAL LETTER DZZE
+ { 0xA68A, 0xA68B }, // CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+ { 0xA68C, 0xA68D }, // CYRILLIC CAPITAL LETTER TWE
+ { 0xA68E, 0xA68F }, // CYRILLIC CAPITAL LETTER TSWE
+ { 0xA690, 0xA691 }, // CYRILLIC CAPITAL LETTER TSSE
+ { 0xA692, 0xA693 }, // CYRILLIC CAPITAL LETTER TCHE
+ { 0xA694, 0xA695 }, // CYRILLIC CAPITAL LETTER HWE
+ { 0xA696, 0xA697 }, // CYRILLIC CAPITAL LETTER SHWE
+ { 0xA722, 0xA723 }, // LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+ { 0xA724, 0xA725 }, // LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+ { 0xA726, 0xA727 }, // LATIN CAPITAL LETTER HENG
+ { 0xA728, 0xA729 }, // LATIN CAPITAL LETTER TZ
+ { 0xA72A, 0xA72B }, // LATIN CAPITAL LETTER TRESILLO
+ { 0xA72C, 0xA72D }, // LATIN CAPITAL LETTER CUATRILLO
+ { 0xA72E, 0xA72F }, // LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+ { 0xA732, 0xA733 }, // LATIN CAPITAL LETTER AA
+ { 0xA734, 0xA735 }, // LATIN CAPITAL LETTER AO
+ { 0xA736, 0xA737 }, // LATIN CAPITAL LETTER AU
+ { 0xA738, 0xA739 }, // LATIN CAPITAL LETTER AV
+ { 0xA73A, 0xA73B }, // LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+ { 0xA73C, 0xA73D }, // LATIN CAPITAL LETTER AY
+ { 0xA73E, 0xA73F }, // LATIN CAPITAL LETTER REVERSED C WITH DOT
+ { 0xA740, 0xA741 }, // LATIN CAPITAL LETTER K WITH STROKE
+ { 0xA742, 0xA743 }, // LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+ { 0xA744, 0xA745 }, // LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+ { 0xA746, 0xA747 }, // LATIN CAPITAL LETTER BROKEN L
+ { 0xA748, 0xA749 }, // LATIN CAPITAL LETTER L WITH HIGH STROKE
+ { 0xA74A, 0xA74B }, // LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+ { 0xA74C, 0xA74D }, // LATIN CAPITAL LETTER O WITH LOOP
+ { 0xA74E, 0xA74F }, // LATIN CAPITAL LETTER OO
+ { 0xA750, 0xA751 }, // LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+ { 0xA752, 0xA753 }, // LATIN CAPITAL LETTER P WITH FLOURISH
+ { 0xA754, 0xA755 }, // LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+ { 0xA756, 0xA757 }, // LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+ { 0xA758, 0xA759 }, // LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+ { 0xA75A, 0xA75B }, // LATIN CAPITAL LETTER R ROTUNDA
+ { 0xA75C, 0xA75D }, // LATIN CAPITAL LETTER RUM ROTUNDA
+ { 0xA75E, 0xA75F }, // LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+ { 0xA760, 0xA761 }, // LATIN CAPITAL LETTER VY
+ { 0xA762, 0xA763 }, // LATIN CAPITAL LETTER VISIGOTHIC Z
+ { 0xA764, 0xA765 }, // LATIN CAPITAL LETTER THORN WITH STROKE
+ { 0xA766, 0xA767 }, // LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+ { 0xA768, 0xA769 }, // LATIN CAPITAL LETTER VEND
+ { 0xA76A, 0xA76B }, // LATIN CAPITAL LETTER ET
+ { 0xA76C, 0xA76D }, // LATIN CAPITAL LETTER IS
+ { 0xA76E, 0xA76F }, // LATIN CAPITAL LETTER CON
+ { 0xA779, 0xA77A }, // LATIN CAPITAL LETTER INSULAR D
+ { 0xA77B, 0xA77C }, // LATIN CAPITAL LETTER INSULAR F
+ { 0xA77D, 0x1D79 }, // LATIN CAPITAL LETTER INSULAR G
+ { 0xA77E, 0xA77F }, // LATIN CAPITAL LETTER TURNED INSULAR G
+ { 0xA780, 0xA781 }, // LATIN CAPITAL LETTER TURNED L
+ { 0xA782, 0xA783 }, // LATIN CAPITAL LETTER INSULAR R
+ { 0xA784, 0xA785 }, // LATIN CAPITAL LETTER INSULAR S
+ { 0xA786, 0xA787 }, // LATIN CAPITAL LETTER INSULAR T
+ { 0xA78B, 0xA78C }, // LATIN CAPITAL LETTER SALTILLO
+ { 0xFF21, 0xFF41 }, // FULLWIDTH LATIN CAPITAL LETTER A
+ { 0xFF22, 0xFF42 }, // FULLWIDTH LATIN CAPITAL LETTER B
+ { 0xFF23, 0xFF43 }, // FULLWIDTH LATIN CAPITAL LETTER C
+ { 0xFF24, 0xFF44 }, // FULLWIDTH LATIN CAPITAL LETTER D
+ { 0xFF25, 0xFF45 }, // FULLWIDTH LATIN CAPITAL LETTER E
+ { 0xFF26, 0xFF46 }, // FULLWIDTH LATIN CAPITAL LETTER F
+ { 0xFF27, 0xFF47 }, // FULLWIDTH LATIN CAPITAL LETTER G
+ { 0xFF28, 0xFF48 }, // FULLWIDTH LATIN CAPITAL LETTER H
+ { 0xFF29, 0xFF49 }, // FULLWIDTH LATIN CAPITAL LETTER I
+ { 0xFF2A, 0xFF4A }, // FULLWIDTH LATIN CAPITAL LETTER J
+ { 0xFF2B, 0xFF4B }, // FULLWIDTH LATIN CAPITAL LETTER K
+ { 0xFF2C, 0xFF4C }, // FULLWIDTH LATIN CAPITAL LETTER L
+ { 0xFF2D, 0xFF4D }, // FULLWIDTH LATIN CAPITAL LETTER M
+ { 0xFF2E, 0xFF4E }, // FULLWIDTH LATIN CAPITAL LETTER N
+ { 0xFF2F, 0xFF4F }, // FULLWIDTH LATIN CAPITAL LETTER O
+ { 0xFF30, 0xFF50 }, // FULLWIDTH LATIN CAPITAL LETTER P
+ { 0xFF31, 0xFF51 }, // FULLWIDTH LATIN CAPITAL LETTER Q
+ { 0xFF32, 0xFF52 }, // FULLWIDTH LATIN CAPITAL LETTER R
+ { 0xFF33, 0xFF53 }, // FULLWIDTH LATIN CAPITAL LETTER S
+ { 0xFF34, 0xFF54 }, // FULLWIDTH LATIN CAPITAL LETTER T
+ { 0xFF35, 0xFF55 }, // FULLWIDTH LATIN CAPITAL LETTER U
+ { 0xFF36, 0xFF56 }, // FULLWIDTH LATIN CAPITAL LETTER V
+ { 0xFF37, 0xFF57 }, // FULLWIDTH LATIN CAPITAL LETTER W
+ { 0xFF38, 0xFF58 }, // FULLWIDTH LATIN CAPITAL LETTER X
+ { 0xFF39, 0xFF59 }, // FULLWIDTH LATIN CAPITAL LETTER Y
+ { 0xFF3A, 0xFF5A } // FULLWIDTH LATIN CAPITAL LETTER Z
+};
+
+static int compare_pair_capital(const void *a, const void *b) {
+ return (int)(*(unsigned short *)a)
+ - (int)((struct LatinCapitalSmallPair*)b)->capital;
+}
+
+unsigned short latin_tolower(unsigned short c) {
+ struct LatinCapitalSmallPair *p =
+ (struct LatinCapitalSmallPair *)bsearch(&c, SORTED_CHAR_MAP,
+ sizeof(SORTED_CHAR_MAP) / sizeof(SORTED_CHAR_MAP[0]),
+ sizeof(SORTED_CHAR_MAP[0]),
+ compare_pair_capital);
+ return p ? p->small : c;
+}
+
+} // namespace latinime
diff --git a/native/src/char_utils.h b/native/src/char_utils.h
new file mode 100644
index 000000000..921ecb4a5
--- /dev/null
+++ b/native/src/char_utils.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LATINIME_CHAR_UTILS_H
+#define LATINIME_CHAR_UTILS_H
+
+namespace latinime {
+
+unsigned short latin_tolower(unsigned short c);
+
+}; // namespace latinime
+
+#endif // LATINIME_CHAR_UTILS_H
diff --git a/dictionary/src/dictionary.cpp b/native/src/dictionary.cpp
index 6e6f44182..e75beb5b7 100644
--- a/dictionary/src/dictionary.cpp
+++ b/native/src/dictionary.cpp
@@ -19,19 +19,12 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <string.h>
-#include <cutils/log.h>
-
-#include <unicode/uchar.h>
-
-//#define USE_ASSET_MANAGER
-
-#ifdef USE_ASSET_MANAGER
-#include <utils/AssetManager.h>
-#include <utils/Asset.h>
-#endif
+//#include <cutils/log.h>
+#define LOGI
#include "dictionary.h"
#include "basechars.h"
+#include "char_utils.h"
#define DEBUG_DICT 0
@@ -176,7 +169,7 @@ Dictionary::toLowerCase(unsigned short c) {
if (c >='A' && c <= 'Z') {
c |= 32;
} else if (c > 127) {
- c = u_tolower(c);
+ c = latin_tolower(c);
}
return c;
}
diff --git a/dictionary/src/dictionary.h b/native/src/dictionary.h
index 3749f3d88..3749f3d88 100644
--- a/dictionary/src/dictionary.h
+++ b/native/src/dictionary.h