aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/res/values-af/strings.xml8
-rw-r--r--java/res/values-am/strings.xml10
-rw-r--r--java/res/values-ar/strings.xml16
-rw-r--r--java/res/values-be/strings.xml16
-rw-r--r--java/res/values-bg/strings.xml16
-rw-r--r--java/res/values-ca/strings.xml16
-rw-r--r--java/res/values-cs/strings.xml16
-rw-r--r--java/res/values-da/strings.xml16
-rw-r--r--java/res/values-de/strings.xml16
-rw-r--r--java/res/values-el/strings.xml8
-rw-r--r--java/res/values-en-rGB/strings.xml16
-rw-r--r--java/res/values-es-rUS/strings.xml8
-rw-r--r--java/res/values-es/strings.xml8
-rw-r--r--java/res/values-et/strings.xml16
-rw-r--r--java/res/values-fa/strings.xml16
-rw-r--r--java/res/values-fi/strings.xml16
-rw-r--r--java/res/values-fr/strings.xml16
-rw-r--r--java/res/values-hi/strings.xml16
-rw-r--r--java/res/values-hr/strings.xml16
-rw-r--r--java/res/values-hu/strings.xml16
-rw-r--r--java/res/values-in/strings.xml16
-rw-r--r--java/res/values-it/strings.xml16
-rw-r--r--java/res/values-iw/strings.xml16
-rw-r--r--java/res/values-ja/strings.xml16
-rw-r--r--java/res/values-ko/strings.xml16
-rw-r--r--java/res/values-lt/strings.xml16
-rw-r--r--java/res/values-lv/strings.xml16
-rw-r--r--java/res/values-ms/strings.xml16
-rw-r--r--java/res/values-nb/strings.xml16
-rw-r--r--java/res/values-nl/strings.xml16
-rw-r--r--java/res/values-pl/strings.xml8
-rw-r--r--java/res/values-pt-rPT/strings.xml16
-rw-r--r--java/res/values-pt/strings.xml16
-rw-r--r--java/res/values-rm/strings.xml16
-rw-r--r--java/res/values-ro/strings.xml16
-rw-r--r--java/res/values-ru/strings.xml16
-rw-r--r--java/res/values-sk/strings.xml16
-rw-r--r--java/res/values-sl/strings.xml16
-rw-r--r--java/res/values-sr/strings.xml16
-rw-r--r--java/res/values-sv/strings.xml16
-rw-r--r--java/res/values-sw/strings.xml16
-rw-r--r--java/res/values-th/strings.xml16
-rw-r--r--java/res/values-tl/strings.xml16
-rw-r--r--java/res/values-tr/strings.xml16
-rw-r--r--java/res/values-uk/strings.xml16
-rw-r--r--java/res/values-vi/strings.xml16
-rw-r--r--java/res/values-zh-rCN/strings.xml16
-rw-r--r--java/res/values-zh-rTW/strings.xml16
-rw-r--r--java/res/values-zu/strings.xml16
-rw-r--r--java/res/values/attrs.xml41
-rw-r--r--java/res/values/donottranslate.xml24
-rw-r--r--java/res/values/keyboard-icons-black.xml6
-rw-r--r--java/res/values/keyboard-icons-ics.xml6
-rw-r--r--java/res/values/keyboard-icons-white.xml6
-rw-r--r--java/res/xml-sw600dp/kbd_10_10_7_symbols.xml (renamed from java/res/xml-sw600dp/kbd_azerty_symbols.xml)0
-rw-r--r--java/res/xml-sw600dp/kbd_10_10_7_symbols_shift.xml (renamed from java/res/xml-sw600dp/kbd_azerty_symbols_shift.xml)0
-rw-r--r--java/res/xml-sw600dp/key_apostrophe.xml (renamed from java/res/xml-sw600dp/keys_apostrophe_dash.xml)23
-rw-r--r--java/res/xml-sw600dp/key_colemak_semicolon.xml (renamed from java/res/xml-sw600dp/kbd_hebrew_symbols.xml)11
-rw-r--r--java/res/xml-sw600dp/key_dash.xml (renamed from java/res/xml-sw600dp/kbd_spanish_symbols.xml)21
-rw-r--r--java/res/xml-sw600dp/key_f1.xml45
-rw-r--r--java/res/xml-sw600dp/key_question_exclamation.xml (renamed from java/res/xml-sw768dp/keys_apostrophe_dash.xml)23
-rw-r--r--java/res/xml-sw600dp/key_shortcut.xml2
-rw-r--r--java/res/xml-sw600dp/key_space.xml66
-rw-r--r--java/res/xml-sw600dp/key_styles_common.xml52
-rw-r--r--java/res/xml-sw600dp/keys_comma_period.xml10
-rw-r--r--java/res/xml-sw600dp/keys_dvorak_123.xml40
-rw-r--r--java/res/xml-sw600dp/row_dvorak4.xml46
-rw-r--r--java/res/xml-sw600dp/row_qwerty4.xml47
-rw-r--r--java/res/xml-sw600dp/row_symbols4.xml (renamed from java/res/xml-sw600dp/rows_symbols4.xml)10
-rw-r--r--java/res/xml-sw600dp/row_symbols_shift4.xml (renamed from java/res/xml-sw600dp/rows_symbols_shift4.xml)8
-rw-r--r--java/res/xml-sw600dp/rowkeys_dvorak3.xml47
-rw-r--r--java/res/xml-sw600dp/rowkeys_symbols2.xml8
-rw-r--r--java/res/xml-sw600dp/rowkeys_symbols3.xml12
-rw-r--r--java/res/xml-sw600dp/rowkeys_symbols_shift1.xml2
-rw-r--r--java/res/xml-sw600dp/rows_10_10_7_symbols.xml2
-rw-r--r--java/res/xml-sw600dp/rows_10_10_7_symbols_shift.xml2
-rw-r--r--java/res/xml-sw600dp/rows_colemak.xml65
-rw-r--r--java/res/xml-sw600dp/rows_dvorak.xml63
-rw-r--r--java/res/xml-sw600dp/rows_hebrew.xml4
-rw-r--r--java/res/xml-sw600dp/rows_number_normal.xml2
-rw-r--r--java/res/xml-sw600dp/rows_symbols.xml2
-rw-r--r--java/res/xml-sw600dp/rows_symbols_shift.xml2
-rw-r--r--java/res/xml-sw768dp/key_shortcut.xml (renamed from java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml)16
-rw-r--r--java/res/xml-sw768dp/key_space.xml45
-rw-r--r--java/res/xml-sw768dp/key_styles_common.xml45
-rw-r--r--java/res/xml-sw768dp/keys_f1f2.xml71
-rw-r--r--java/res/xml-sw768dp/row_dvorak4.xml43
-rw-r--r--java/res/xml-sw768dp/row_qwerty4.xml87
-rw-r--r--java/res/xml-sw768dp/row_symbols4.xml (renamed from java/res/xml-sw768dp/rows_symbols4.xml)10
-rw-r--r--java/res/xml-sw768dp/row_symbols_shift4.xml (renamed from java/res/xml-sw768dp/rows_symbols_shift4.xml)8
-rw-r--r--java/res/xml-sw768dp/rows_10_10_7_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml2
-rw-r--r--java/res/xml-sw768dp/rows_colemak.xml71
-rw-r--r--java/res/xml-sw768dp/rows_dvorak.xml69
-rw-r--r--java/res/xml-sw768dp/rows_hebrew.xml4
-rw-r--r--java/res/xml-sw768dp/rows_number_normal.xml2
-rw-r--r--java/res/xml-sw768dp/rows_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_symbols_shift.xml2
-rw-r--r--java/res/xml-sw768dp/rows_thai_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_thai_symbols_shift.xml2
-rw-r--r--java/res/xml/kbd_10_10_7_symbols.xml (renamed from java/res/xml/kbd_azerty_symbols.xml)0
-rw-r--r--java/res/xml/kbd_10_10_7_symbols_shift.xml (renamed from java/res/xml/kbd_azerty_symbols_shift.xml)0
-rw-r--r--java/res/xml/kbd_colemak.xml (renamed from java/res/xml/kbd_spanish_symbols.xml)2
-rw-r--r--java/res/xml/kbd_dvorak.xml (renamed from java/res/xml/kbd_hebrew_symbols.xml)2
-rw-r--r--java/res/xml/kbd_hebrew_symbols_shift.xml26
-rw-r--r--java/res/xml/kbd_spanish_symbols_shift.xml26
-rw-r--r--java/res/xml/key_azerty_quote.xml2
-rw-r--r--java/res/xml/key_colemak_semicolon.xml41
-rw-r--r--java/res/xml/key_f1.xml54
-rw-r--r--java/res/xml/key_space.xml66
-rw-r--r--java/res/xml/key_styles_common.xml56
-rw-r--r--java/res/xml/key_styles_currency.xml6
-rw-r--r--java/res/xml/key_styles_currency_dollar.xml2
-rw-r--r--java/res/xml/key_styles_enter.xml28
-rw-r--r--java/res/xml/key_styles_number.xml10
-rw-r--r--java/res/xml/keyboard_layout_set_azerty.xml4
-rw-r--r--java/res/xml/keyboard_layout_set_colemak.xml42
-rw-r--r--java/res/xml/keyboard_layout_set_dvorak.xml42
-rw-r--r--java/res/xml/keyboard_layout_set_hebrew.xml4
-rw-r--r--java/res/xml/keyboard_layout_set_spanish.xml4
-rw-r--r--java/res/xml/keys_dvorak_123.xml60
-rw-r--r--java/res/xml/keys_less_greater.xml4
-rw-r--r--java/res/xml/keys_parentheses.xml4
-rw-r--r--java/res/xml/row_dvorak4.xml89
-rw-r--r--java/res/xml/row_qwerty4.xml73
-rw-r--r--java/res/xml/row_symbols4.xml (renamed from java/res/xml/rows_symbols4.xml)9
-rw-r--r--java/res/xml/row_symbols_shift4.xml (renamed from java/res/xml/rows_symbols_shift4.xml)5
-rw-r--r--java/res/xml/rowkeys_azerty1.xml18
-rw-r--r--java/res/xml/rowkeys_azerty2.xml14
-rw-r--r--java/res/xml/rowkeys_azerty3.xml8
-rw-r--r--java/res/xml/rowkeys_colemak1.xml66
-rw-r--r--java/res/xml/rowkeys_colemak2.xml54
-rw-r--r--java/res/xml/rowkeys_colemak3.xml (renamed from java/res/xml-sw600dp/kbd_spanish_symbols_shift.xml)24
-rw-r--r--java/res/xml/rowkeys_dvorak1.xml57
-rw-r--r--java/res/xml/rowkeys_dvorak2.xml54
-rw-r--r--java/res/xml/rowkeys_dvorak3.xml42
-rw-r--r--java/res/xml/rowkeys_east_slavic1.xml10
-rw-r--r--java/res/xml/rowkeys_east_slavic2.xml6
-rw-r--r--java/res/xml/rowkeys_east_slavic3.xml4
-rw-r--r--java/res/xml/rowkeys_georgian1.xml20
-rw-r--r--java/res/xml/rowkeys_georgian2.xml54
-rw-r--r--java/res/xml/rowkeys_georgian3.xml42
-rw-r--r--java/res/xml/rowkeys_nordic1.xml2
-rw-r--r--java/res/xml/rowkeys_nordic2.xml8
-rw-r--r--java/res/xml/rowkeys_qwerty1.xml16
-rw-r--r--java/res/xml/rowkeys_qwerty2.xml16
-rw-r--r--java/res/xml/rowkeys_qwerty3.xml8
-rw-r--r--java/res/xml/rowkeys_qwertz1.xml16
-rw-r--r--java/res/xml/rowkeys_qwertz3.xml8
-rw-r--r--java/res/xml/rowkeys_south_slavic1.xml6
-rw-r--r--java/res/xml/rowkeys_south_slavic2.xml2
-rw-r--r--java/res/xml/rowkeys_south_slavic3.xml4
-rw-r--r--java/res/xml/rowkeys_symbols1.xml60
-rw-r--r--java/res/xml/rowkeys_symbols2.xml8
-rw-r--r--java/res/xml/rowkeys_symbols3.xml12
-rw-r--r--java/res/xml/rowkeys_symbols_shift1.xml2
-rw-r--r--java/res/xml/rows_colemak.xml56
-rw-r--r--java/res/xml/rows_dvorak.xml56
-rw-r--r--java/res/xml/rows_number_normal.xml2
-rw-r--r--java/res/xml/rows_symbols.xml2
-rw-r--r--java/res/xml/rows_symbols_shift.xml2
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java6
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java76
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java17
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java63
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java34
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java79
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java27
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java (renamed from java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java)785
-rw-r--r--java/src/com/android/inputmethod/latin/AdditionalSubtype.java22
-rw-r--r--java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java19
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java20
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java71
-rw-r--r--java/src/com/android/inputmethod/latin/EditingUtils.java99
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java31
-rw-r--r--java/src/com/android/inputmethod/latin/ResearchLogger.java267
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeLocale.java49
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java188
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java97
-rw-r--r--tests/res/values/donottranslate.xml12
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java218
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java408
-rw-r--r--tests/src/com/android/inputmethod/latin/InputTestsBase.java26
-rw-r--r--tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java20
-rw-r--r--tools/makelabel/etc/manifest.txt1
-rw-r--r--tools/maketext/Android.mk (renamed from tools/makelabel/Android.mk)2
-rw-r--r--tools/maketext/etc/Android.mk (renamed from tools/makelabel/etc/Android.mk)2
-rwxr-xr-xtools/maketext/etc/maketext (renamed from tools/makelabel/etc/makelabel)2
-rw-r--r--tools/maketext/etc/manifest.txt1
-rw-r--r--tools/maketext/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl (renamed from tools/makelabel/res/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.tmpl)68
-rw-r--r--tools/maketext/res/values-ar/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-ar/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-be/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-be/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-ca/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-ca/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-cs/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-cs/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-da/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-da/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-de/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-de/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-en/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-en/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-es/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-es/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-et/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-et/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-fa/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-fa/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-fi/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-fi/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-fr/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-fr/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-hi/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-hi/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-hr/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-hr/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-hu/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-hu/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-is/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-is/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-it/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-it/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-iw/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-iw/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-ky/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-ky/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-lt/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-lt/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-lv/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-lv/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-mk/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-mk/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-nb/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-nb/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-nl/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-nl/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-pl/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-pl/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-pt/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-pt/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-rm/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-rm/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-ro/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-ro/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-ru/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-ru/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-sk/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-sk/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-sl/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-sl/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-sr/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-sr/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-sv/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-sv/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-tr/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-tr/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-uk/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-uk/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-vi/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-vi/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values-zz/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values-zz/donottranslate-more-keys.xml)0
-rw-r--r--tools/maketext/res/values/donottranslate-more-keys.xml (renamed from tools/makelabel/res/values/donottranslate-more-keys.xml)63
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/ArrayInitializerFormatter.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/ArrayInitializerFormatter.java)2
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/JarUtils.java)2
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/LabelText.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/LabelMaker.java)6
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/MoreKeysResources.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/MoreKeysResources.java)36
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/StringResource.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResource.java)2
-rw-r--r--tools/maketext/src/com/android/inputmethod/latin/maketext/StringResourceMap.java (renamed from tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResourceMap.java)5
237 files changed, 4100 insertions, 2085 deletions
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index ce9d784bf..3325f0b65 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -118,7 +118,15 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Sleutelbordtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engels (VK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"Geen taal nie"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Geen taal (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"Gepasmaakte invoerstyle"</string>
+ <string name="add_style" msgid="6163126614514489951">"Voeg styl by"</string>
+ <string name="add" msgid="8299699805688017798">"Voeg by"</string>
+ <string name="remove" msgid="4486081658752944606">"Verwyder"</string>
+ <string name="save" msgid="7646738597196767214">"Stoor"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"Taal"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"Uitleg"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Bruikbaarheidstudie-modus"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Sleuteldruk se vibrasie-tydsduurinstellings"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Sleuteldruk se klankvolume-instellings"</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 2d898aac6..391784a45 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -118,8 +118,16 @@
<string name="keyboard_layout" msgid="8451164783510487501">"የቁልፍ ሰሌዳ ገጽታ"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"እንግሊዘኛ (የታላቋ ብሪታንያ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"እንግሊዘኛ (ዩ.ኤስ)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"ምንም ቋንቋ"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"ቋንቋ አልባ (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"የተበጁ የግቤት ስታይሎች"</string>
+ <string name="add_style" msgid="6163126614514489951">"ስታይል አክል"</string>
+ <string name="add" msgid="8299699805688017798">"አክል"</string>
+ <string name="remove" msgid="4486081658752944606">"አስወግድ"</string>
+ <string name="save" msgid="7646738597196767214">"አስቀምጥ"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"ቋንቋ"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"አቀማመጥ"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"የተገልጋይነት ጥናት ሁነታ"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"ቁልፍ ተጫን በቅንጅቶች ወቅት ንዝረት"</string>
- <string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"ቁልፍ ተጫን የድምጽ መጠን ቅንጅቶች"</string>
+ <string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"ቁልፍ ተጫን የድምጽ መጠን ቅንብሮች"</string>
</resources>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 5e76d01ed..ced4ea284 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"مظهر لوحة المفاتيح"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"الإنجليزية (المملكة المتحدة)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"الإنجليزية (الولايات المتحدة)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"بدون لغة (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"وضع سهولة الاستخدام"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"إعدادات مدة اهتزاز الضغط على المفاتيح"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"إعدادات مستوى صوت الضغط على المفاتيح"</string>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index 7a2ce94f3..c218edacf 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тэма клавіятуры"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Англійская (ЗК)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Англійская (ЗША)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Мова не выбрана (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Рэжым даследвання выкарыстальнасці"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Налады працягласцi вiбрацыi пры нацiску"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Налады гучнасцi пры нацiску"</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 9783a8cf0..e2ea926cc 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тема на клавиатурата"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"английски (Великобритания)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"английски (САЩ)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Без език („QWERTY“)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за изучаване на използваемостта"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Настройки за продължителност на вибрирането при натискане на клавиш"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Настройки за силата на звука при натискане на клавиш"</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 68715fca7..91f715b88 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclat"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglès (Regne Unit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglès (EUA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Cap idioma (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'estudi d\'usabilitat"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Configuració de la durada de les vibracions per pulsació de tecla"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Configuració del volum de so de pulsació de tecla"</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 17073d249..ab00c4e6b 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Motiv klávesnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angličtina (Spojené království)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angličtina (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Žádný jazyk (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim studie použitelnosti"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Nastavení trvání vibrace při stisku klávesy"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Nastavení hlasitosti zvuku při stisknutí klávesy"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index cd5266017..953ce5564 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannien)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ingen sprog (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tilstand for brugsstudie"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Indstillinger for varighed af vibration ved tastetryk"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Indstillinger for lydstyrke ved tastetryk"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 399069e96..522af6e2e 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturdesign"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Englisch (Großbritannien)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Englisch (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Keine Sprache (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus der Studie zur Benutzerfreundlichkeit"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Einstellungen für Vibrationsdauer bei Tastendruck"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Einstellungen für Tonlautstärke bei Tastendruck"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 7552a2865..49c37c42d 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -118,7 +118,15 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Θέμα πληκτρολογίου"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Αγγλικά (Η.Β.)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Αγγλικά (Η.Π.Α)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"Καμία γλώσσα"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Καμία γλώσσα (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"Προσαρμοσ. στυλ εισαγ."</string>
+ <string name="add_style" msgid="6163126614514489951">"Προσθήκη στυλ"</string>
+ <string name="add" msgid="8299699805688017798">"Προσθήκη"</string>
+ <string name="remove" msgid="4486081658752944606">"Κατάργηση"</string>
+ <string name="save" msgid="7646738597196767214">"Αποθήκευση"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"Γλώσσα"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"Διάταξη"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Λειτουργία μελέτης χρηστικότητας"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Ρυθμίσεις διάρκειας δόνησης κατά το πάτημα πλήκτρων"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Ρυθμίσεις έντασης ήχου κατά το πάτημα πλήκτρων"</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index ef86365f1..b27089e8a 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Keyboard theme"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"English (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"English (US)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"No language (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Usability study mode"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Key-press vibration duration settings"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Key-press sound volume settings"</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index c1f9223c6..20fbf3546 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -118,7 +118,15 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglés (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglés (EE.UU.)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"Ningún idioma"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ningún idioma (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"Estilos entrada pers."</string>
+ <string name="add_style" msgid="6163126614514489951">"Agr. estilo"</string>
+ <string name="add" msgid="8299699805688017798">"Agregar"</string>
+ <string name="remove" msgid="4486081658752944606">"Eliminar"</string>
+ <string name="save" msgid="7646738597196767214">"Guardar"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"Idioma"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"Diseño"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudio de usabilidad"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Configuración de la duración de vibraciones al presionar las teclas"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Configuración del volumen de sonio al presionar las teclas"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 222cd532a..2e32a4140 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -118,7 +118,15 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema de teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"inglés (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"inglés (EE.UU.)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"Ningún idioma"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ningún idioma (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"Estilos entrada personalizados"</string>
+ <string name="add_style" msgid="6163126614514489951">"Añadir estilo"</string>
+ <string name="add" msgid="8299699805688017798">"Añadir"</string>
+ <string name="remove" msgid="4486081658752944606">"Eliminar"</string>
+ <string name="save" msgid="7646738597196767214">"Guardar"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"Idioma"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"Diseño"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudio de usabilidad"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Ajustes de duración de vibración al pulsar tecla"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Volumen de sonido al pulsar tecla"</string>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index cb21b4c9c..449e76cfd 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Klaviatuuri teema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglise (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglise (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Keel puudub (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kasutatavuse uurimisrežiim"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Klahvivajutuse vibratsiooni kestuse seaded"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Klahvivajutuse helitugevuse seaded"</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 9f9dde328..554e1bf5b 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -122,7 +122,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"طرح زمینه صفحه کلید"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"انگیسی (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"انگیسی (US)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"هیچ کدام از زبانها (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"حالت بررسی قابلیت استفاده"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"تنظیمات مدت زمان لرزش فشار کلید"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"تنظیمات میزان صدای فشار کلید"</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index f37247a4f..e11353102 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Näppäimistöteema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"englanti (Iso-Britannia)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"englanti (Yhdysvallat)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ei kieltä (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Käytettävyystutkimustila"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Näppäimenpainalluksen värinän kestoasetukset"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Näppäimenpainalluksen äänenvoimakkuusasetukset"</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 96aadfb25..fc26597f3 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Thème du clavier"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglais (Royaume-Uni)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglais (États-Unis)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Pas de langue (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'étude de l\'utilisabilité"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Durée de vibration à chaque pression"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Volume sonore à chaque pression"</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index a502a8f9a..528982039 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"कीबोर्ड थीम"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेज़ी (यूके)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेज़ी (यूएस)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"कोई भाषा नहीं (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"उपयोगिता अध्ययन मोड"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"कुंजी-स्‍पर्श कंपन अवधि सेटिंग"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"कुंजी-स्‍पर्श ध्‍वनि वॉल्‍यूम सेटिंग"</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 093b22ea0..c0fbd812c 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engleski (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engleski (SAD)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nema jezika (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način studije upotrebljivosti"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Postavke trajanja vibracije kod pritiska tipke"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Postavke glasnoće zvuka kod pritiska tipke"</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index a414821a6..c001eb528 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Billentyűzettéma"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angol (brit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angol (amerikai)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nincs nyelv (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Használhatósági teszt"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Gombnyomás rezgési időtartamának beállításai"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Gombnyomás hangerejének beállításai"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 9b27268d8..b5d97adea 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema keyboard"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inggris (Inggris)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inggris (AS)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Tanpa bahasa (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus studi daya guna"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Setelan durasi getaran saat tombol ditekan"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Setelan volume suara saat tombol ditekan"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index a8923be0a..66428883b 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema della tastiera"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglese (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglese (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nessuna lingua (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modalità Studio sull\'usabilità"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Impostazioni durata vibrazione alla pressione di un tasto"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Impostazioni volume audio alla pressione di un tasto"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 569f71d40..f08c03f28 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"עיצוב מקלדת"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"אנגלית (בריטניה)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"אנגלית (ארה\"ב)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"אין שפה (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"מצב מחקר שימושיות"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"הגדרות משך רטט בלחיצה על מקש"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"הגדרות עוצמת קול בלחיצה על מקש"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 8c20b46ad..34f235884 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"キーボードのテーマ"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英語(英国)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英語(米国)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"言語設定なし(QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"使いやすさの研究モード"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"キー操作バイブの振動時間の設定"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"キー操作音の音量設定"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index f9524cc68..15744c9be 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"키보드 테마"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"영어(영국)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"영어(미국)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"언어가 없음(QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"가용성 연구 모드"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"키를 누를 때 진동 시간 설정"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"키를 누를 때 효과음 설정"</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index b08d059f0..43a3f6c64 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Klaviatūros tema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglų k. (JK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglų k. (JAV)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nėra kalbos (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tinkamumo tyrimo režimas"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Vibracijos paspaudus mygtuką trukmės nustatymai"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Garso paspaudus mygtuką garsumo nustatymai"</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index c8023404f..7f5ee14cb 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tastatūras motīvs"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Angļu valoda (Lielbritānija)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Angļu valoda (ASV)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nav valodas (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Lietojamības izpētes režīms"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Taustiņu nospiešanas vibrācijas ilguma iestatījumi"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Taustiņu nospiešanas skaņas skaļuma iestatījumi"</string>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 95f9706f9..d131ba8f4 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema papan kekunci"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Bahasa Inggeris (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Bahasa Inggeris (AS)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Tiada bahasa (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mod kajian kebolehgunaan"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Tetapan tempoh getaran tekan kekunci"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Tetapan kelantangan bunyi tekanan kekunci"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 28e4e9798..96a9f7c96 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannia)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ingen språk (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Nyttighetsmodus"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Innstillinger for vibrasjonsvarighet ved tastetrykk"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Innstillinger for lydstyrke ved tastetrykk"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 7ba51bc7e..476562c37 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Toetsenbordthema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engels (GB)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Geen taal (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus voor gebruiksvriendelijkheidsonderzoek"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Instellingen voor trillingsduur bij druk op een toets"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Instellingen voor geluidsvolume bij druk op een toets"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 49f751813..8983dea71 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -118,7 +118,15 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Motyw klawiatury"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Angielska (Wielka Brytania)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Angielska (Stany Zjednoczone)"</string>
+ <string name="subtype_no_language" msgid="141420857808801746">"Brak języka"</string>
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Brak języka (QWERTY)"</string>
+ <string name="custom_input_styles_title" msgid="8429952441821251512">"Style niestandardowe"</string>
+ <string name="add_style" msgid="6163126614514489951">"Dodaj styl"</string>
+ <string name="add" msgid="8299699805688017798">"Dodaj"</string>
+ <string name="remove" msgid="4486081658752944606">"Usuń"</string>
+ <string name="save" msgid="7646738597196767214">"Zapisz"</string>
+ <string name="subtype_locale" msgid="8576443440738143764">"Język"</string>
+ <string name="keyboard_layout_set" msgid="4309233698194565609">"Układ"</string>
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tryb badania przydatności"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Czas trwania wibracji przy naciśnięciu"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Głośność dźwięku przy naciśnięciu"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 037ceb915..6ebf932c6 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglês (RU)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglês (EUA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nenhum idioma (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo da capacidade de utilização"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Definições de duração da vibração ao premir as teclas"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Definições de volume de som ao premir as teclas"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 196988845..3c31ab219 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglês (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglês (EUA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nenhum idioma (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo de utilização"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Configurações de duração da vibração ao tocar a tecla"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Configurações do volume ao tocar a tecla"</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 02de4c4f5..e589e8bff 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -201,8 +201,24 @@
<skip />
<!-- no translation found for subtype_en_US (6160452336634534239) -->
<skip />
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
<skip />
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
<skip />
<!-- no translation found for prefs_keypress_vibration_duration_settings (1829950405285211668) -->
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 80a65585d..8dead1713 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Temă pentru tastatură"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engleză (Marea Britanie)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engleză (S.U.A.)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Nicio limbă (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modul Studiu privind utilizarea"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Setări pentru durata vibrării la apăsarea tastei"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Setări pentru volumul sunetului la apăsarea tastei"</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 6345ed891..00bdabba0 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тема клавиатуры"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"английский (Великобритания)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"английский (США)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Язык не указан (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим проверки удобства использования"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Настройки вибросигнала при нажатии клавиш"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Настройки громкости звука при нажатии клавиш"</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 57bc3a0f4..eba3efa7d 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Motív klávesnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglická klávesnica (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglická klávesnica (US)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Žiadny jazyk (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim štúdie použiteľnosti"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Nastavenia trvania vibrovania pri stlačení klávesu"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Nastavenia hlasitosti zvuku pri stlačení klávesu"</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 890877fb3..6d2dc0713 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angleščina (Združeno kraljestvo)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angleščina (ZDA)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Ni jezika (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način za preučevanje uporabnosti"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Nastavitve za trajanje vibriranja ob pritisku tipke"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Nastavitve za glasnost zvoka ob pritisku tipke"</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index f21abd272..6fa75aeb7 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тема тастатуре"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"енглески (УК)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"енглески (САД)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Нема језика (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за студију могућности коришћења"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Подешавања трајања вибрације при притиску на тастере"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Подешавања јачине звука при притиску на тастере"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 918fa42c1..302ded480 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tangentbordstema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelskt (brittiskt)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelskt (amerikanskt)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Inget språk (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Läge för studie av användbarhet"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Inställningar för vibrationslängd vid knapptryck"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Volyminställningar för knappljud"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 39ecc02f7..8739edb3d 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Maandhari ya kibodi"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Kiingereza cha (Uingereza)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Kiingereza cha (Marekani)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Hakuna lugha (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modi ya uchunguzi wa utumizi"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Bonyeza mipangilio ya kipindi cha mtetemo"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Bonyeza mipangilio ya nguvu za sauti"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 87838ad36..13c513aea 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"ชุดรูปแบบแป้นพิมพ์"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"อังกฤษ (สหราชอาณาจักร)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"อังกฤษ (อเมริกัน)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"ไม่มีภาษา (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"โหมดศึกษาประโยชน์ในการใช้งาน"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"การตั้งค่าระยะเวลาการสั่นเมื่อกดแป้นพิมพ์"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"การตั้งค่าระดับเสียงเมื่อกดแป้นพิมพ์"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 2bf661f3d..381cf1b69 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Tema ng keyboard"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Ingles (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Ingles (Estados Unidos)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Walang wika (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Study mode ng pagiging kapaki-pakinabang"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Mga setting ng tagal ng vibration ng keypress"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Mga setting ng volume ng tunog ng keypress"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index abca6324c..cbe4622a7 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Klavye teması"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"İngilizce (BK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"İngilizce (ABD)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Dil yok (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kullanılabilirlik çalışması modu"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Tuşa basma titreşim süresi ayarları"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Tuşa basma ses düzeyi ayarları"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 1bc2ca791..33e1d4098 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Тема клавіатури"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Англійська (Великобританія)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Англійська (США)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Немає мови (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим вивчення зручності у використанні"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Налаштування тривалості вібрації під час натискання клавіші"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Налаштування гучності звуку під час натискання клавіші"</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 362882e67..fd4364f74 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Chủ đề bàn phím"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Tiếng Anh (Anh)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Tiếng Anh (Mỹ)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Không có ngôn ngữ (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Chế độ nghiên cứu tính khả dụng"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Cài đặt thời gian rung khi nhấn phím"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Cài đặt âm lượng khi nhấn phím"</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 73cec6e51..9a468d546 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"键盘主题"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英语(英国)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英语(美国)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"无语言(QWERTY 键盘)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"可用性研究模式"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"按键振动持续时间设置"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"按键音量设置"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index d91abf940..eafd43ac9 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"鍵盤主題"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英文 (英式)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英文 (美式)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"無語言 (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"使用性研究模式"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"按鍵震動持續時間設定"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"按鍵音量設定"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 973b2e56f..47ddc0c6f 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -118,7 +118,23 @@
<string name="keyboard_layout" msgid="8451164783510487501">"Indikimba yekhibhodi"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"i-English(UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"i-English (US)"</string>
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
<string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Akunalimi (QWERTY)"</string>
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
<string name="prefs_usability_study_mode" msgid="1261130555134595254">"Imodi yesitadi yokusebenziseka"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="1829950405285211668">"Izilungiselelo ze-keypress vibration duraton"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="5875933757082305040">"Izilungiselelo zevolumu yomsindo wekeypress"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 4ec184334..c78013f73 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -209,20 +209,21 @@
<attr name="verticalGap" format="dimension|fraction" />
<!-- More keys keyboard layout template -->
<attr name="moreKeysTemplate" format="reference" />
- <!-- Icon set for key top and key preview. -->
+ <!-- Icon set for key top and key preview.
+ These should be aligned with KeyboardIconsSet.NAMES_AND_ATTR_IDS[] -->
<attr name="iconShiftKey" format="reference" />
<attr name="iconDeleteKey" format="reference" />
<attr name="iconSettingsKey" format="reference" />
<attr name="iconSpaceKey" format="reference" />
- <attr name="iconReturnKey" format="reference" />
+ <attr name="iconEnterKey" format="reference" />
<attr name="iconSearchKey" format="reference" />
<attr name="iconTabKey" format="reference" />
<attr name="iconShortcutKey" format="reference" />
<attr name="iconShortcutForLabel" format="reference" />
<attr name="iconSpaceKeyForNumberLayout" format="reference" />
<attr name="iconShiftKeyShifted" format="reference" />
- <attr name="iconDisabledShortcutKey" format="reference" />
- <attr name="iconPreviewTabKey" format="reference" />
+ <attr name="iconShortcutKeyDisabled" format="reference" />
+ <attr name="iconTabKeyPreview" format="reference" />
<attr name="iconLanguageSwitchKey" format="reference" />
<attr name="iconZwnjKey" format="reference" />
<attr name="iconZwjKey" format="reference" />
@@ -301,37 +302,11 @@
<flag name="disableAdditionalMoreKeys" value="0x80000000" />
</attr>
<!-- The icon to display on the key instead of the label. -->
- <!-- TODO: Use string format !icon/name. -->
- <attr name="keyIcon" format="enum">
- <!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
- <enum name="iconUndefined" value="0" />
- <enum name="iconShiftKey" value="1" />
- <enum name="iconDeleteKey" value="2" />
- <enum name="iconSettingsKey" value="3" />
- <enum name="iconSpaceKey" value="4" />
- <enum name="iconReturnKey" value="5" />
- <enum name="iconSearchKey" value="6" />
- <enum name="iconTabKey" value="7" />
- <enum name="iconShortcutKey" value="8" />
- <enum name="iconShortcutForLabel" value="9" />
- <enum name="iconSpaceKeyForNumberLayout" value="10" />
- <enum name="iconShiftKeyShifted" value="11" />
- <enum name="iconLanguageSwitchKey" value="14" />
- <enum name="iconZwnjKey" value="15" />
- <enum name="iconZwjKey" value="16" />
- </attr>
+ <attr name="keyIcon" format="string" />
<!-- The icon for disabled key -->
- <!-- TODO: Use string format !icon/name. -->
- <attr name="keyIconDisabled" format="enum">
- <!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
- <enum name="iconDisabledShortcutKey" value="12" />
- </attr>
+ <attr name="keyIconDisabled" format="string" />
<!-- The icon to show in the popup preview. -->
- <!-- TODO: Use string format !icon/name. -->
- <attr name="keyIconPreview" format="enum">
- <!-- This should be aligned with the KeyboardIconsSet.ICON_* -->
- <enum name="iconPreviewTabKey" value="13" />
- </attr>
+ <attr name="keyIconPreview" format="string" />
<!-- The key style to specify a set of key attributes defined by <key_style/> -->
<attr name="keyStyle" format="string" />
<!-- Visual insets -->
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 892c72aec..37f073675 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -146,12 +146,30 @@
<!-- Generic subtype label -->
<string name="subtype_generic">%s</string>
- <!-- Description for generic QWERTY keyboard subtype -->
+
+ <!-- Predefined keyboard layouts for additional subtype -->
+ <string-array name="predefined_layouts">
+ <item>qwerty</item>
+ <item>qwertz</item>
+ <item>azerty</item>
+ <item>dvorak</item>
+ <item>colemak</item>
+ </string-array>
+ <!-- Predefined keyboard layout display names -->
+ <string-array name="predefined_layout_display_names">
+ <item>QWERTY</item>
+ <item>QWERTZ</item>
+ <item>AZERTY</item>
+ <item>Dvorak</item>
+ <item>Colemak</item>
+ </string-array>
+ <!-- Description for generic subtype that has predefined layout.
+ The string resource name must be "subtype_generic_<layout name>". -->
<string name="subtype_generic_qwerty">%s (QWERTY)</string>
- <!-- Description for generic QWERTZ keyboard subtype -->
<string name="subtype_generic_qwertz">%s (QWERTZ)</string>
- <!-- Description for generic AZERTY keyboard subtype -->
<string name="subtype_generic_azerty">%s (AZERTY)</string>
+ <string name="subtype_generic_dvorak">%s (Dvorak)</string>
+ <string name="subtype_generic_colemak">%s (Colemak)</string>
<!-- dictionary pack package name /settings activity (for shared prefs and settings) -->
<string name="dictionary_pack_package_name">com.google.android.inputmethod.latin.dictionarypack</string>
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
index 1ff597a49..e9c5733b5 100644
--- a/java/res/values/keyboard-icons-black.xml
+++ b/java/res/values/keyboard-icons-black.xml
@@ -25,15 +25,15 @@
<item name="iconDeleteKey">@drawable/sym_bkeyboard_delete</item>
<item name="iconSettingsKey">@drawable/sym_bkeyboard_settings</item>
<item name="iconSpaceKey">@drawable/sym_bkeyboard_space</item>
- <item name="iconReturnKey">@drawable/sym_bkeyboard_return</item>
+ <item name="iconEnterKey">@drawable/sym_bkeyboard_return</item>
<item name="iconSearchKey">@drawable/sym_bkeyboard_search</item>
<item name="iconTabKey">@drawable/sym_bkeyboard_tab</item>
<item name="iconShortcutKey">@drawable/sym_bkeyboard_mic</item>
<item name="iconShortcutForLabel">@drawable/sym_bkeyboard_label_mic</item>
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_bkeyboard_space</item>
<item name="iconShiftKeyShifted">@drawable/sym_bkeyboard_shift_locked</item>
- <item name="iconDisabledShortcutKey">@drawable/sym_bkeyboard_voice_off</item>
- <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
+ <item name="iconShortcutKeyDisabled">@drawable/sym_bkeyboard_voice_off</item>
+ <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
<!-- TODO: Needs dedicated black theme globe icon -->
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
<!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons -->
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
index 0774d57ac..8eba196de 100644
--- a/java/res/values/keyboard-icons-ics.xml
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -24,15 +24,15 @@
<item name="iconDeleteKey">@drawable/sym_keyboard_delete_holo</item>
<item name="iconSettingsKey">@drawable/sym_keyboard_settings_holo</item>
<item name="iconSpaceKey">@null</item>
- <item name="iconReturnKey">@drawable/sym_keyboard_return_holo</item>
+ <item name="iconEnterKey">@drawable/sym_keyboard_return_holo</item>
<item name="iconSearchKey">@drawable/sym_keyboard_search_holo</item>
<item name="iconTabKey">@drawable/sym_keyboard_tab_holo</item>
<item name="iconShortcutKey">@drawable/sym_keyboard_voice_holo</item>
<item name="iconShortcutForLabel">@drawable/sym_keyboard_label_mic_holo</item>
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space_holo</item>
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked_holo</item>
- <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item>
- <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
+ <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_holo</item>
+ <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item>
<item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item>
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
index 5798786f8..e52099867 100644
--- a/java/res/values/keyboard-icons-white.xml
+++ b/java/res/values/keyboard-icons-white.xml
@@ -21,7 +21,7 @@
<item name="iconDeleteKey">@drawable/sym_keyboard_delete</item>
<item name="iconSettingsKey">@drawable/sym_keyboard_settings</item>
<item name="iconSpaceKey">@drawable/sym_keyboard_space</item>
- <item name="iconReturnKey">@drawable/sym_keyboard_return</item>
+ <item name="iconEnterKey">@drawable/sym_keyboard_return</item>ZZ
<item name="iconSearchKey">@drawable/sym_keyboard_search</item>
<item name="iconTabKey">@drawable/sym_keyboard_tab</item>
<item name="iconShortcutKey">@drawable/sym_keyboard_mic</item>
@@ -29,8 +29,8 @@
<item name="iconSpaceKeyForNumberLayout">@drawable/sym_keyboard_space</item>
<item name="iconShiftKeyShifted">@drawable/sym_keyboard_shift_locked</item>
<!-- TODO: Needs non-holo disabled shortcut icon drawable -->
- <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item>
- <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
+ <item name="iconShortcutKeyDisabled">@drawable/sym_keyboard_voice_off_holo</item>
+ <item name="iconTabKeyPreview">@drawable/sym_keyboard_feedback_tab</item>
<item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
<!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons -->
<item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item>
diff --git a/java/res/xml-sw600dp/kbd_azerty_symbols.xml b/java/res/xml-sw600dp/kbd_10_10_7_symbols.xml
index 66254dea0..66254dea0 100644
--- a/java/res/xml-sw600dp/kbd_azerty_symbols.xml
+++ b/java/res/xml-sw600dp/kbd_10_10_7_symbols.xml
diff --git a/java/res/xml-sw600dp/kbd_azerty_symbols_shift.xml b/java/res/xml-sw600dp/kbd_10_10_7_symbols_shift.xml
index 3c5ed5e09..3c5ed5e09 100644
--- a/java/res/xml-sw600dp/kbd_azerty_symbols_shift.xml
+++ b/java/res/xml-sw600dp/kbd_10_10_7_symbols_shift.xml
diff --git a/java/res/xml-sw600dp/keys_apostrophe_dash.xml b/java/res/xml-sw600dp/key_apostrophe.xml
index faaae50c9..7da4b6223 100644
--- a/java/res/xml-sw600dp/keys_apostrophe_dash.xml
+++ b/java/res/xml-sw600dp/key_apostrophe.xml
@@ -2,7 +2,7 @@
<!--
/*
**
-** Copyright 2011, The Android Open Source Project
+** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -39,24 +39,9 @@
</case>
<default>
<Key
- latin:keyLabel="!label/keylabel_for_apostrophe"
- latin:keyHintLabel="!label/keyhintlabel_for_apostrophe"
- latin:moreKeys="!label/more_keys_for_apostrophe"
- latin:keyStyle="hasShiftedLetterHintStyle" />
- </default>
- </switch>
- <switch>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyLabel="_" />
- </case>
- <default>
- <Key
- latin:keyLabel="!label/keylabel_for_dash"
- latin:keyHintLabel="!label/keyhintlabel_for_dash"
- latin:moreKeys="!label/more_keys_for_dash"
+ latin:keyLabel="!text/keylabel_for_apostrophe"
+ latin:keyHintLabel="!text/keyhintlabel_for_apostrophe"
+ latin:moreKeys="!text/more_keys_for_apostrophe"
latin:keyStyle="hasShiftedLetterHintStyle" />
</default>
</switch>
diff --git a/java/res/xml-sw600dp/kbd_hebrew_symbols.xml b/java/res/xml-sw600dp/key_colemak_semicolon.xml
index 66254dea0..a5a6e9526 100644
--- a/java/res/xml-sw600dp/kbd_hebrew_symbols.xml
+++ b/java/res/xml-sw600dp/key_colemak_semicolon.xml
@@ -18,9 +18,12 @@
*/
-->
-<Keyboard
+<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
- <include
- latin:keyboardLayout="@xml/rows_10_10_7_symbols" />
-</Keyboard>
+ <Key
+ latin:keyLabel=":"
+ latin:keyHintLabel=";"
+ latin:moreKeys=";"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+</merge>
diff --git a/java/res/xml-sw600dp/kbd_spanish_symbols.xml b/java/res/xml-sw600dp/key_dash.xml
index 66254dea0..a7c3727da 100644
--- a/java/res/xml-sw600dp/kbd_spanish_symbols.xml
+++ b/java/res/xml-sw600dp/key_dash.xml
@@ -18,9 +18,22 @@
*/
-->
-<Keyboard
+<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
- <include
- latin:keyboardLayout="@xml/rows_10_10_7_symbols" />
-</Keyboard>
+ <switch>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyLabel="_" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel="!text/keylabel_for_dash"
+ latin:keyHintLabel="!text/keyhintlabel_for_dash"
+ latin:moreKeys="!text/more_keys_for_dash"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw600dp/key_f1.xml b/java/res/xml-sw600dp/key_f1.xml
new file mode 100644
index 000000000..e477d3758
--- /dev/null
+++ b/java/res/xml-sw600dp/key_f1.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <switch>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyStyle="comKeyStyle" />
+ </case>
+ <case
+ latin:mode="url"
+ >
+ <Key
+ latin:keyStyle="comKeyStyle" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel="/"
+ latin:keyHintLabel="\@"
+ latin:moreKeys="\@"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw768dp/keys_apostrophe_dash.xml b/java/res/xml-sw600dp/key_question_exclamation.xml
index faaae50c9..f1495de49 100644
--- a/java/res/xml-sw768dp/keys_apostrophe_dash.xml
+++ b/java/res/xml-sw600dp/key_question_exclamation.xml
@@ -2,7 +2,7 @@
<!--
/*
**
-** Copyright 2011, The Android Open Source Project
+** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -39,24 +39,9 @@
</case>
<default>
<Key
- latin:keyLabel="!label/keylabel_for_apostrophe"
- latin:keyHintLabel="!label/keyhintlabel_for_apostrophe"
- latin:moreKeys="!label/more_keys_for_apostrophe"
- latin:keyStyle="hasShiftedLetterHintStyle" />
- </default>
- </switch>
- <switch>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyLabel="_" />
- </case>
- <default>
- <Key
- latin:keyLabel="!label/keylabel_for_dash"
- latin:keyHintLabel="!label/keyhintlabel_for_dash"
- latin:moreKeys="!label/more_keys_for_dash"
+ latin:keyLabel="\?"
+ latin:keyHintLabel="!"
+ latin:moreKeys="!"
latin:keyStyle="hasShiftedLetterHintStyle" />
</default>
</switch>
diff --git a/java/res/xml-sw600dp/key_shortcut.xml b/java/res/xml-sw600dp/key_shortcut.xml
index 2114c67bd..f8cbdf6b6 100644
--- a/java/res/xml-sw600dp/key_shortcut.xml
+++ b/java/res/xml-sw600dp/key_shortcut.xml
@@ -29,7 +29,7 @@
<Key
latin:keyStyle="shortcutKeyStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/settings_as_more_key"
+ latin:moreKeys="!text/settings_as_more_key"
latin:keyWidth="fillBoth" />
</case>
<case
diff --git a/java/res/xml-sw600dp/key_space.xml b/java/res/xml-sw600dp/key_space.xml
new file mode 100644
index 000000000..4670142cc
--- /dev/null
+++ b/java/res/xml-sw600dp/key_space.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Spacer
+ latin:keyWidth="0dp"
+ latin:keyXPos="30.750%p" />
+ <switch>
+ <case
+ latin:languageCode="fa"
+ latin:languageSwitchKeyEnabled="true"
+ >
+ <Key
+ latin:keyStyle="languageSwitchKeyStyle" />
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="21.950%p" />
+ <Key
+ latin:keyStyle="zwnjKeyStyle" />
+ </case>
+ <case
+ latin:languageCode="fa"
+ latin:languageSwitchKeyEnabled="false"
+ >
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="30.850%p" />
+ <Key
+ latin:keyStyle="zwnjKeyStyle" />
+ </case>
+ <case
+ latin:languageSwitchKeyEnabled="true"
+ >
+ <Key
+ latin:keyStyle="languageSwitchKeyStyle" />
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="30.850%p" />
+ </case>
+ <!-- languageSwitchKeyEnabled="false" -->
+ <default>
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="39.750%p" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index e0676e890..bf392a33c 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -43,7 +43,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</case>
@@ -53,7 +53,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
</case>
@@ -61,7 +61,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKey"
+ latin:keyIcon="!icon/shift_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</default>
@@ -69,7 +69,7 @@
<key-style
latin:styleName="deleteKeyStyle"
latin:code="!code/key_delete"
- latin:keyIcon="iconDeleteKey"
+ latin:keyIcon="!icon/delete_key"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
<include
@@ -83,8 +83,8 @@
<key-style
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
- latin:keyIcon="iconZwnjKey"
- latin:moreKeys="!icon/zwjKey|&#x200D;"
+ latin:keyIcon="!icon/zwnj_key"
+ latin:moreKeys="!icon/zwj_key|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview" />
<key-style
@@ -92,19 +92,24 @@
latin:keyLabel=":-)"
latin:keyOutputText=":-) "
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/more_keys_for_smiley" />
+ latin:moreKeys="!text/more_keys_for_smiley" />
<key-style
latin:styleName="shortcutKeyStyle"
latin:code="!code/key_shortcut"
- latin:keyIcon="iconShortcutKey"
- latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
+ latin:keyIcon="!icon/shortcut_key"
+ latin:keyIconDisabled="!icon/shortcut_key_disabled"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<key-style
+ latin:styleName="languageSwitchKeyStyle"
+ latin:code="!code/key_language_switch"
+ latin:keyIcon="!icon/language_switch_key"
+ latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
+ latin:altCode="!code/key_space" />
+ <key-style
latin:styleName="settingsKeyStyle"
latin:code="!code/key_settings"
- latin:keyIcon="iconSettingsKey"
+ latin:keyIcon="!icon/settings_key"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<switch>
@@ -115,51 +120,48 @@
<key-style
latin:styleName="tabKeyStyle"
latin:code="!code/key_action_previous"
- latin:keyIcon="iconTabKey"
- latin:keyIconPreview="iconPreviewTabKey"
+ latin:keyIcon="!icon/tab_key"
+ latin:keyIconPreview="!icon/tab_key_preview"
latin:backgroundType="functional" />
</case>
<default>
<key-style
latin:styleName="tabKeyStyle"
latin:code="!code/key_tab"
- latin:keyIcon="iconTabKey"
- latin:keyIconPreview="iconPreviewTabKey"
+ latin:keyIcon="!icon/tab_key"
+ latin:keyIconPreview="!icon/tab_key_preview"
latin:backgroundType="functional" />
</default>
</switch>
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_alpha_key"
+ latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_more_symbol_for_tablet_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="comKeyStyle"
- latin:keyLabel="!label/keylabel_for_popular_domain"
+ latin:keyLabel="!text/keylabel_for_popular_domain"
latin:keyLabelFlags="fontNormal|hasPopupHint|preserveCase"
- latin:keyOutputText="!label/keylabel_for_popular_domain"
- latin:moreKeys="!label/more_keys_for_popular_domain" />
+ latin:keyOutputText="!text/keylabel_for_popular_domain"
+ latin:moreKeys="!text/more_keys_for_popular_domain" />
</merge>
diff --git a/java/res/xml-sw600dp/keys_comma_period.xml b/java/res/xml-sw600dp/keys_comma_period.xml
index 4a83cc817..752f75b5f 100644
--- a/java/res/xml-sw600dp/keys_comma_period.xml
+++ b/java/res/xml-sw600dp/keys_comma_period.xml
@@ -32,14 +32,14 @@
</case>
<default>
<Key
- latin:keyLabel="!label/keylabel_for_tablet_comma"
- latin:keyHintLabel="!label/keyhintlabel_for_tablet_comma"
- latin:moreKeys="!label/more_keys_for_tablet_comma"
+ latin:keyLabel="!text/keylabel_for_tablet_comma"
+ latin:keyHintLabel="!text/keyhintlabel_for_tablet_comma"
+ latin:moreKeys="!text/more_keys_for_tablet_comma"
latin:keyStyle="hasShiftedLetterHintStyle" />
<Key
latin:keyLabel="."
- latin:keyHintLabel="!label/keyhintlabel_for_tablet_period"
- latin:moreKeys="!label/more_keys_for_tablet_period"
+ latin:keyHintLabel="!text/keyhintlabel_for_tablet_period"
+ latin:moreKeys="!text/more_keys_for_tablet_period"
latin:keyStyle="hasShiftedLetterHintStyle" />
</default>
</switch>
diff --git a/java/res/xml-sw600dp/keys_dvorak_123.xml b/java/res/xml-sw600dp/keys_dvorak_123.xml
new file mode 100644
index 000000000..635ea0476
--- /dev/null
+++ b/java/res/xml-sw600dp/keys_dvorak_123.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="\'"
+ latin:keyHintLabel="&quot;"
+ latin:moreKeys="!"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ <Key
+ latin:keyLabel=","
+ latin:keyHintLabel="&lt;"
+ latin:moreKeys="\?"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ <Key
+ latin:keyLabel="."
+ latin:keyHintLabel="&gt;"
+ latin:keyLabelFlags="hasPopupHint|preserveCase"
+ latin:moreKeys="!text/more_keys_for_punctuation"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+</merge>
diff --git a/java/res/xml-sw600dp/row_dvorak4.xml b/java/res/xml-sw600dp/row_dvorak4.xml
new file mode 100644
index 000000000..7d365883a
--- /dev/null
+++ b/java/res/xml-sw600dp/row_dvorak4.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Row
+ latin:keyWidth="8.9%p"
+ >
+ <Key
+ latin:keyStyle="toSymbolKeyStyle"
+ latin:keyWidth="13.0%p" />
+ <Key
+ latin:keyStyle="tabKeyStyle" />
+ <include
+ latin:keyboardLayout="@xml/key_f1" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
+ <include
+ latin:keyboardLayout="@xml/key_question_exclamation" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
+ <Spacer
+ latin:keyXPos="-10.00%p"
+ latin:keyWidth="0%p" />
+ <include
+ latin:keyboardLayout="@xml/key_shortcut" />
+ </Row>
+</merge>
diff --git a/java/res/xml-sw600dp/row_qwerty4.xml b/java/res/xml-sw600dp/row_qwerty4.xml
index eec35b078..95b328b38 100644
--- a/java/res/xml-sw600dp/row_qwerty4.xml
+++ b/java/res/xml-sw600dp/row_qwerty4.xml
@@ -29,45 +29,10 @@
latin:keyWidth="13.0%p" />
<Key
latin:keyStyle="tabKeyStyle" />
- <switch>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyStyle="comKeyStyle" />
- </case>
- <case
- latin:mode="url"
- >
- <Key
- latin:keyStyle="comKeyStyle" />
- </case>
- <default>
- <Key
- latin:keyLabel="/"
- latin:keyHintLabel="\@"
- latin:moreKeys="\@"
- latin:keyStyle="hasShiftedLetterHintStyle" />
- </default>
- </switch>
- <switch>
- <case
- latin:languageCode="fa"
- >
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="30.750%p"
- latin:keyWidth="30.850%p" />
- <Key
- latin:keyStyle="zwnjKeyStyle" />
- </case>
- <default>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="30.750%p"
- latin:keyWidth="39.750%p" />
- </default>
- </switch>
+ <include
+ latin:keyboardLayout="@xml/key_f1" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<switch>
<case
latin:languageCode="iw"
@@ -78,7 +43,9 @@
<!-- not languageCode="iw" -->
<default>
<include
- latin:keyboardLayout="@xml/keys_apostrophe_dash" />
+ latin:keyboardLayout="@xml/key_apostrophe" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
</default>
</switch>
<Spacer
diff --git a/java/res/xml-sw600dp/rows_symbols4.xml b/java/res/xml-sw600dp/row_symbols4.xml
index afa2652ea..9b6daab36 100644
--- a/java/res/xml-sw600dp/rows_symbols4.xml
+++ b/java/res/xml-sw600dp/row_symbols4.xml
@@ -19,7 +19,7 @@
-->
<merge
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Row
latin:keyWidth="8.9%p"
@@ -31,13 +31,11 @@
latin:keyStyle="tabKeyStyle" />
<Key
latin:keyLabel="\@" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="30.750%p"
- latin:keyWidth="39.750%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<Key
latin:keyLabel="&quot;"
- latin:moreKeys="!label/more_keys_for_tablet_double_quote" />
+ latin:moreKeys="!text/more_keys_for_tablet_double_quote" />
<Key
latin:keyLabel="_" />
<Spacer
diff --git a/java/res/xml-sw600dp/rows_symbols_shift4.xml b/java/res/xml-sw600dp/row_symbols_shift4.xml
index 4381bce6d..7823561eb 100644
--- a/java/res/xml-sw600dp/rows_symbols_shift4.xml
+++ b/java/res/xml-sw600dp/row_symbols_shift4.xml
@@ -19,7 +19,7 @@
-->
<merge
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Row
latin:keyWidth="8.9%p"
@@ -29,10 +29,8 @@
latin:keyWidth="13.0%p" />
<Key
latin:keyStyle="tabKeyStyle" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="30.750%p"
- latin:keyWidth="39.750%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<Spacer
latin:keyXPos="-10.00%p"
latin:keyWidth="0%p" />
diff --git a/java/res/xml-sw600dp/rowkeys_dvorak3.xml b/java/res/xml-sw600dp/rowkeys_dvorak3.xml
new file mode 100644
index 000000000..2148bb2c7
--- /dev/null
+++ b/java/res/xml-sw600dp/rowkeys_dvorak3.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="q" />
+ <Key
+ latin:keyLabel="j"
+ latin:moreKeys="!text/more_keys_for_j" />
+ <Key
+ latin:keyLabel="k"
+ latin:moreKeys="!text/more_keys_for_k" />
+ <Key
+ latin:keyLabel="x" />
+ <Key
+ latin:keyLabel="b" />
+ <Key
+ latin:keyLabel="m" />
+ <Key
+ latin:keyLabel="w"
+ latin:moreKeys="!text/more_keys_for_w" />
+ <Key
+ latin:keyLabel="v"
+ latin:moreKeys="!text/more_keys_for_v" />
+ <Key
+ latin:keyLabel="z"
+ latin:moreKeys="!text/more_keys_for_z" />
+</merge>
diff --git a/java/res/xml-sw600dp/rowkeys_symbols2.xml b/java/res/xml-sw600dp/rowkeys_symbols2.xml
index fd774168f..6fe86240c 100644
--- a/java/res/xml-sw600dp/rowkeys_symbols2.xml
+++ b/java/res/xml-sw600dp/rowkeys_symbols2.xml
@@ -26,13 +26,13 @@
<Key
latin:keyStyle="currencyKeyStyle" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_percent"
- latin:moreKeys="!label/more_keys_for_symbols_percent" />
+ latin:keyLabel="!text/keylabel_for_symbols_percent"
+ latin:moreKeys="!text/more_keys_for_symbols_percent" />
<Key
latin:keyLabel="&amp;" />
<Key
latin:keyLabel="*"
- latin:moreKeys="!label/more_keys_for_star" />
+ latin:moreKeys="!text/more_keys_for_star" />
<!-- U+2013: "–" EN DASH
U+2014: "—" EM DASH -->
<Key
@@ -40,7 +40,7 @@
latin:moreKeys="_,&#x2013;,&#x2014;" />
<Key
latin:keyLabel="+"
- latin:moreKeys="!label/more_keys_for_plus" />
+ latin:moreKeys="!text/more_keys_for_plus" />
<include
latin:keyboardLayout="@xml/keys_parentheses" />
</merge>
diff --git a/java/res/xml-sw600dp/rowkeys_symbols3.xml b/java/res/xml-sw600dp/rowkeys_symbols3.xml
index 536ac05a2..4eb9618cf 100644
--- a/java/res/xml-sw600dp/rowkeys_symbols3.xml
+++ b/java/res/xml-sw600dp/rowkeys_symbols3.xml
@@ -41,11 +41,11 @@
</default>
</switch>
<Key
- latin:keyLabel="!label/keylabel_for_symbols_semicolon"
- latin:moreKeys="!label/more_keys_for_symbols_semicolon" />
+ latin:keyLabel="!text/keylabel_for_symbols_semicolon"
+ latin:moreKeys="!text/more_keys_for_symbols_semicolon" />
<Key
- latin:keyLabel="!label/keylabel_for_comma"
- latin:moreKeys="!label/more_keys_for_comma" />
+ latin:keyLabel="!text/keylabel_for_comma"
+ latin:moreKeys="!text/more_keys_for_comma" />
<Key
latin:keyLabel="." />
<!-- U+00A1: "¡" INVERTED EXCLAMATION MARK -->
@@ -53,6 +53,6 @@
latin:keyLabel="!"
latin:moreKeys="&#x00A1;" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_question"
- latin:moreKeys="!label/more_keys_for_symbols_question" />
+ latin:keyLabel="!text/keylabel_for_symbols_question"
+ latin:moreKeys="!text/more_keys_for_symbols_question" />
</merge>
diff --git a/java/res/xml-sw600dp/rowkeys_symbols_shift1.xml b/java/res/xml-sw600dp/rowkeys_symbols_shift1.xml
index 914a4499b..3549fdda4 100644
--- a/java/res/xml-sw600dp/rowkeys_symbols_shift1.xml
+++ b/java/res/xml-sw600dp/rowkeys_symbols_shift1.xml
@@ -30,7 +30,7 @@
<!-- U+2022: "•" BULLET -->
<Key
latin:keyLabel="&#x2022;"
- latin:moreKeys="!label/more_keys_for_bullet" />
+ latin:moreKeys="!text/more_keys_for_bullet" />
<!-- U+221A: "√" SQUARE ROOT -->
<Key
latin:keyLabel="&#x221A;" />
diff --git a/java/res/xml-sw600dp/rows_10_10_7_symbols.xml b/java/res/xml-sw600dp/rows_10_10_7_symbols.xml
index bdb1aa0ee..fe9f2fb5f 100644
--- a/java/res/xml-sw600dp/rows_10_10_7_symbols.xml
+++ b/java/res/xml-sw600dp/rows_10_10_7_symbols.xml
@@ -58,5 +58,5 @@
latin:keyWidth="fillRight" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml-sw600dp/rows_10_10_7_symbols_shift.xml b/java/res/xml-sw600dp/rows_10_10_7_symbols_shift.xml
index 101493423..9df112153 100644
--- a/java/res/xml-sw600dp/rows_10_10_7_symbols_shift.xml
+++ b/java/res/xml-sw600dp/rows_10_10_7_symbols_shift.xml
@@ -54,5 +54,5 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift3" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/res/xml-sw600dp/rows_colemak.xml b/java/res/xml-sw600dp/rows_colemak.xml
new file mode 100644
index 000000000..6c88e6517
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_colemak.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak1"
+ latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
+ <include
+ latin:keyboardLayout="@xml/key_colemak_semicolon" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak2"
+ latin:keyXPos="4.5%p" />
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="10.0%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak3" />
+ <include
+ latin:keyboardLayout="@xml/keys_comma_period" />
+ <include
+ latin:keyboardLayout="@xml/key_smiley"
+ latin:keyXPos="-8.5%p"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml-sw600dp/rows_dvorak.xml b/java/res/xml-sw600dp/rows_dvorak.xml
new file mode 100644
index 000000000..aec4a5cf5
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_dvorak.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/keys_dvorak_123" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak1"
+ latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak2"
+ latin:keyXPos="4.5%p" />
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.5%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="10.0%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak3" />
+ <include
+ latin:keyboardLayout="@xml/key_smiley"
+ latin:keyXPos="-8.5%p"
+ latin:keyWidth="fillRight" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_dvorak4" />
+</merge>
diff --git a/java/res/xml-sw600dp/rows_hebrew.xml b/java/res/xml-sw600dp/rows_hebrew.xml
index a60da3a2b..d6861e8e4 100644
--- a/java/res/xml-sw600dp/rows_hebrew.xml
+++ b/java/res/xml-sw600dp/rows_hebrew.xml
@@ -27,7 +27,9 @@
latin:keyWidth="8.5%p"
>
<include
- latin:keyboardLayout="@xml/keys_apostrophe_dash" />
+ latin:keyboardLayout="@xml/key_apostrophe" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
<include
latin:keyboardLayout="@xml/rowkeys_hebrew1" />
<Key
diff --git a/java/res/xml-sw600dp/rows_number_normal.xml b/java/res/xml-sw600dp/rows_number_normal.xml
index 00fda2899..3fda2aa13 100644
--- a/java/res/xml-sw600dp/rows_number_normal.xml
+++ b/java/res/xml-sw600dp/rows_number_normal.xml
@@ -70,7 +70,7 @@
<Key
latin:keyLabel=","
latin:keyLabelFlags="hasPopupHint"
- latin:moreKeys="!label/more_keys_for_am_pm"
+ latin:moreKeys="!text/more_keys_for_am_pm"
latin:keyStyle="numKeyStyle"
latin:keyWidth="9.25%p" />
</case>
diff --git a/java/res/xml-sw600dp/rows_symbols.xml b/java/res/xml-sw600dp/rows_symbols.xml
index ea9b30245..ada22dff6 100644
--- a/java/res/xml-sw600dp/rows_symbols.xml
+++ b/java/res/xml-sw600dp/rows_symbols.xml
@@ -58,5 +58,5 @@
latin:keyWidth="fillRight" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml-sw600dp/rows_symbols_shift.xml b/java/res/xml-sw600dp/rows_symbols_shift.xml
index cc66f9676..0750670d6 100644
--- a/java/res/xml-sw600dp/rows_symbols_shift.xml
+++ b/java/res/xml-sw600dp/rows_symbols_shift.xml
@@ -54,5 +54,5 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift3" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml b/java/res/xml-sw768dp/key_shortcut.xml
index 3c5ed5e09..1e367a9d3 100644
--- a/java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml
+++ b/java/res/xml-sw768dp/key_shortcut.xml
@@ -18,9 +18,17 @@
*/
-->
-<Keyboard
+<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
- <include
- latin:keyboardLayout="@xml/rows_10_10_7_symbols_shift" />
-</Keyboard>
+ <switch>
+ <case
+ latin:shortcutKeyEnabled="true"
+ >
+ <Key
+ latin:keyStyle="shortcutKeyStyle"
+ latin:keyXPos="-8.047%p"
+ latin:keyWidth="fillRight" />
+ </case>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw768dp/key_space.xml b/java/res/xml-sw768dp/key_space.xml
new file mode 100644
index 000000000..f4d048006
--- /dev/null
+++ b/java/res/xml-sw768dp/key_space.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Spacer
+ latin:keyWidth="0dp"
+ latin:keyXPos="31.250%p" />
+ <switch>
+ <case
+ latin:languageCode="fa"
+ >
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="29.453%p" />
+ <!-- U+200C: "" ZERO WIDTH NON-JOINER
+ U+200D: "" ZERO WIDTH JOINER -->
+ <Key
+ latin:keyStyle="zwnjKeyStyle" />
+ </case>
+ <default>
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="37.500%p" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index c3e2fd93d..6cb160b6a 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -42,7 +42,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</case>
@@ -52,7 +52,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
</case>
@@ -60,7 +60,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKey"
+ latin:keyIcon="!icon/shift_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</default>
@@ -68,7 +68,7 @@
<key-style
latin:styleName="deleteKeyStyle"
latin:code="!code/key_delete"
- latin:keyIcon="iconDeleteKey"
+ latin:keyIcon="!icon/delete_key"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
<include
@@ -82,8 +82,8 @@
<key-style
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
- latin:keyIcon="iconZwnjKey"
- latin:moreKeys="!icon/zwjKey|&#x200D;"
+ latin:keyIcon="!icon/zwnj_key"
+ latin:moreKeys="!icon/zwj_key|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview" />
<key-style
@@ -91,19 +91,18 @@
latin:keyLabel=":-)"
latin:keyOutputText=":-) "
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/more_keys_for_smiley" />
+ latin:moreKeys="!text/more_keys_for_smiley" />
<key-style
latin:styleName="shortcutKeyStyle"
latin:code="!code/key_shortcut"
- latin:keyIcon="iconShortcutKey"
- latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
+ latin:keyIcon="!icon/shortcut_key"
+ latin:keyIconDisabled="!icon/shortcut_key_disabled"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<key-style
latin:styleName="settingsKeyStyle"
latin:code="!code/key_settings"
- latin:keyIcon="iconSettingsKey"
+ latin:keyIcon="!icon/settings_key"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:backgroundType="functional" />
<switch>
@@ -114,7 +113,7 @@
<key-style
latin:styleName="tabKeyStyle"
latin:code="!code/key_action_previous"
- latin:keyLabel="!label/label_tab_key"
+ latin:keyLabel="!text/label_tab_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:backgroundType="functional" />
</case>
@@ -122,7 +121,7 @@
<key-style
latin:styleName="tabKeyStyle"
latin:code="!code/key_tab"
- latin:keyLabel="!label/label_tab_key"
+ latin:keyLabel="!text/label_tab_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:backgroundType="functional" />
</default>
@@ -130,35 +129,35 @@
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_alpha_key"
+ latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_more_symbol_for_tablet_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
+ latin:keyLabelFlags="fontNormal"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="comKeyStyle"
- latin:keyLabel="!label/keylabel_for_popular_domain"
+ latin:keyLabel="!text/keylabel_for_popular_domain"
latin:keyLabelFlags="fontNormal|hasPopupHint|preserveCase"
- latin:keyOutputText="!label/keylabel_for_popular_domain"
- latin:moreKeys="!label/more_keys_for_popular_domain" />
+ latin:keyOutputText="!text/keylabel_for_popular_domain"
+ latin:moreKeys="!text/more_keys_for_popular_domain" />
</merge>
diff --git a/java/res/xml-sw768dp/keys_f1f2.xml b/java/res/xml-sw768dp/keys_f1f2.xml
new file mode 100644
index 000000000..569703572
--- /dev/null
+++ b/java/res/xml-sw768dp/keys_f1f2.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <switch>
+ <case
+ latin:mode="url"
+ >
+ <Key
+ latin:keyStyle="comKeyStyle"
+ latin:keyWidth="16.084%p" />
+ </case>
+ <default>
+ <switch>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyStyle="comKeyStyle" />
+ </case>
+ <case
+ latin:imeAction="actionSearch"
+ >
+ <Key
+ latin:keyLabel=":"
+ latin:keyHintLabel="+"
+ latin:moreKeys="+"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ </case>
+ <default>
+ <Key
+ latin:keyStyle="smileyKeyStyle" />
+ </default>
+ </switch>
+ <switch>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyLabel="\@" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel="/"
+ latin:keyHintLabel="\@"
+ latin:moreKeys="\@"
+ latin:keyStyle="hasShiftedLetterHintStyle" />
+ </default>
+ </switch>
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml-sw768dp/row_dvorak4.xml b/java/res/xml-sw768dp/row_dvorak4.xml
new file mode 100644
index 000000000..f95661feb
--- /dev/null
+++ b/java/res/xml-sw768dp/row_dvorak4.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Row
+ latin:keyWidth="8.047%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/key_settings" />
+ <Spacer
+ latin:keyXPos="15.157%p"
+ latin:keyWidth="0%p" />
+ <include
+ latin:keyboardLayout="@xml/keys_f1f2" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
+ <include
+ latin:keyboardLayout="@xml/key_question_exclamation" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
+ <include
+ latin:keyboardLayout="@xml/key_shortcut" />
+ </Row>
+</merge>
diff --git a/java/res/xml-sw768dp/row_qwerty4.xml b/java/res/xml-sw768dp/row_qwerty4.xml
index 90da21ba3..a1011c85d 100644
--- a/java/res/xml-sw768dp/row_qwerty4.xml
+++ b/java/res/xml-sw768dp/row_qwerty4.xml
@@ -29,73 +29,10 @@
<Spacer
latin:keyXPos="15.157%p"
latin:keyWidth="0%p" />
- <switch>
- <case
- latin:mode="url"
- >
- <Key
- latin:keyStyle="comKeyStyle"
- latin:keyWidth="16.084%p" />
- </case>
- <default>
- <switch>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyStyle="comKeyStyle" />
- </case>
- <case
- latin:imeAction="actionSearch"
- >
- <Key
- latin:keyLabel=":"
- latin:keyHintLabel="+"
- latin:moreKeys="+"
- latin:keyStyle="hasShiftedLetterHintStyle" />
- </case>
- <default>
- <Key
- latin:keyStyle="smileyKeyStyle" />
- </default>
- </switch>
- <switch>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyLabel="\@" />
- </case>
- <default>
- <Key
- latin:keyLabel="/"
- latin:keyHintLabel="\@"
- latin:moreKeys="\@"
- latin:keyStyle="hasShiftedLetterHintStyle" />
- </default>
- </switch>
- </default>
- </switch>
- <switch>
- <case
- latin:languageCode="fa"
- >
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="31.250%p"
- latin:keyWidth="29.453%p" />
- <!-- U+200C: "" ZERO WIDTH NON-JOINER
- U+200D: "" ZERO WIDTH JOINER -->
- <Key
- latin:keyStyle="zwnjKeyStyle" />
- </case>
- <default>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="31.250%p"
- latin:keyWidth="37.500%p" />
- </default>
- </switch>
+ <include
+ latin:keyboardLayout="@xml/keys_f1f2" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<switch>
<case
latin:languageCode="iw"
@@ -105,18 +42,12 @@
</case>
<default>
<include
- latin:keyboardLayout="@xml/keys_apostrophe_dash" />
+ latin:keyboardLayout="@xml/key_apostrophe" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
</default>
</switch>
- <switch>
- <case
- latin:shortcutKeyEnabled="true"
- >
- <Key
- latin:keyStyle="shortcutKeyStyle"
- latin:keyXPos="-8.047%p"
- latin:keyWidth="fillRight" />
- </case>
- </switch>
+ <include
+ latin:keyboardLayout="@xml/key_shortcut" />
</Row>
</merge>
diff --git a/java/res/xml-sw768dp/rows_symbols4.xml b/java/res/xml-sw768dp/row_symbols4.xml
index dd1647b95..29845aae0 100644
--- a/java/res/xml-sw768dp/rows_symbols4.xml
+++ b/java/res/xml-sw768dp/row_symbols4.xml
@@ -19,7 +19,7 @@
-->
<merge
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Row
latin:keyWidth="8.047%p"
@@ -31,13 +31,11 @@
latin:keyXPos="15.157%p" />
<Key
latin:keyLabel="\@" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="31.250%p"
- latin:keyWidth="37.500%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<Key
latin:keyLabel="&quot;"
- latin:moreKeys="!label/more_keys_for_tablet_double_quote" />
+ latin:moreKeys="!text/more_keys_for_tablet_double_quote" />
<Key
latin:keyLabel="_" />
<switch>
diff --git a/java/res/xml-sw768dp/rows_symbols_shift4.xml b/java/res/xml-sw768dp/row_symbols_shift4.xml
index 8e0071f63..6828fdb78 100644
--- a/java/res/xml-sw768dp/rows_symbols_shift4.xml
+++ b/java/res/xml-sw768dp/row_symbols_shift4.xml
@@ -19,17 +19,15 @@
-->
<merge
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Row
latin:keyWidth="8.047%p"
>
<include
latin:keyboardLayout="@xml/key_settings" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyXPos="31.250%p"
- latin:keyWidth="37.500%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<switch>
<case
latin:shortcutKeyEnabled="true"
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
index 1d61d999b..44f096422 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
@@ -65,5 +65,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
index d22f8331d..bea0d9c18 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
@@ -65,5 +65,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/res/xml-sw768dp/rows_colemak.xml b/java/res/xml-sw768dp/rows_colemak.xml
new file mode 100644
index 000000000..e00448032
--- /dev/null
+++ b/java/res/xml-sw768dp/rows_colemak.xml
@@ -0,0 +1,71 @@
+<?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.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="8.282%p"
+ >
+ <Key
+ latin:keyStyle="tabKeyStyle"
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak1"
+ latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
+ <include
+ latin:keyboardLayout="@xml/key_colemak_semicolon" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.125%p"
+ >
+ <Key
+ latin:keyStyle="toSymbolKeyStyle"
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="10.167%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak2" />
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.047%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="13.829%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak3" />
+ <include
+ latin:keyboardLayout="@xml/keys_comma_period" />
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml-sw768dp/rows_dvorak.xml b/java/res/xml-sw768dp/rows_dvorak.xml
new file mode 100644
index 000000000..91d0f1bce
--- /dev/null
+++ b/java/res/xml-sw768dp/rows_dvorak.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="8.282%p"
+ >
+ <Key
+ latin:keyStyle="tabKeyStyle"
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
+ <include
+ latin:keyboardLayout="@xml/keys_dvorak_123" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak1"
+ latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.125%p"
+ >
+ <Key
+ latin:keyStyle="toSymbolKeyStyle"
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="10.167%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak2" />
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <Row
+ latin:keyWidth="8.047%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="13.829%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak3" />
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_dvorak4" />
+</merge>
diff --git a/java/res/xml-sw768dp/rows_hebrew.xml b/java/res/xml-sw768dp/rows_hebrew.xml
index 476071a5e..e70f45071 100644
--- a/java/res/xml-sw768dp/rows_hebrew.xml
+++ b/java/res/xml-sw768dp/rows_hebrew.xml
@@ -31,7 +31,9 @@
latin:keyLabelFlags="alignLeft"
latin:keyWidth="7.969%p" />
<include
- latin:keyboardLayout="@xml/keys_apostrophe_dash" />
+ latin:keyboardLayout="@xml/key_apostrophe" />
+ <include
+ latin:keyboardLayout="@xml/key_dash" />
<include
latin:keyboardLayout="@xml/rowkeys_hebrew1" />
<Key
diff --git a/java/res/xml-sw768dp/rows_number_normal.xml b/java/res/xml-sw768dp/rows_number_normal.xml
index f868cbb8b..0d75a37d2 100644
--- a/java/res/xml-sw768dp/rows_number_normal.xml
+++ b/java/res/xml-sw768dp/rows_number_normal.xml
@@ -72,7 +72,7 @@
<Key
latin:keyLabel=","
latin:keyLabelFlags="hasPopupHint"
- latin:moreKeys="!label/more_keys_for_am_pm"
+ latin:moreKeys="!text/more_keys_for_am_pm"
latin:keyStyle="numKeyStyle"
latin:keyWidth="8.047%p" />
</case>
diff --git a/java/res/xml-sw768dp/rows_symbols.xml b/java/res/xml-sw768dp/rows_symbols.xml
index ed2df18d7..fcc624f2a 100644
--- a/java/res/xml-sw768dp/rows_symbols.xml
+++ b/java/res/xml-sw768dp/rows_symbols.xml
@@ -65,5 +65,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml-sw768dp/rows_symbols_shift.xml b/java/res/xml-sw768dp/rows_symbols_shift.xml
index 30e1df0bf..1d13bb1e9 100644
--- a/java/res/xml-sw768dp/rows_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_symbols_shift.xml
@@ -65,5 +65,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/res/xml-sw768dp/rows_thai_symbols.xml b/java/res/xml-sw768dp/rows_thai_symbols.xml
index 20f22bc5b..b3f60f5e6 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols.xml
@@ -72,5 +72,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
index 467dd19ad..573e0e37a 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
@@ -72,5 +72,5 @@
latin:keyWidth="fillBoth" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/res/xml/kbd_azerty_symbols.xml b/java/res/xml/kbd_10_10_7_symbols.xml
index 7e075df48..7e075df48 100644
--- a/java/res/xml/kbd_azerty_symbols.xml
+++ b/java/res/xml/kbd_10_10_7_symbols.xml
diff --git a/java/res/xml/kbd_azerty_symbols_shift.xml b/java/res/xml/kbd_10_10_7_symbols_shift.xml
index 25db3c84d..25db3c84d 100644
--- a/java/res/xml/kbd_azerty_symbols_shift.xml
+++ b/java/res/xml/kbd_10_10_7_symbols_shift.xml
diff --git a/java/res/xml/kbd_spanish_symbols.xml b/java/res/xml/kbd_colemak.xml
index 7e075df48..ee1d5e86e 100644
--- a/java/res/xml/kbd_spanish_symbols.xml
+++ b/java/res/xml/kbd_colemak.xml
@@ -22,5 +22,5 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<include
- latin:keyboardLayout="@xml/rows_symbols" />
+ latin:keyboardLayout="@xml/rows_colemak" />
</Keyboard>
diff --git a/java/res/xml/kbd_hebrew_symbols.xml b/java/res/xml/kbd_dvorak.xml
index 7e075df48..27c6a5084 100644
--- a/java/res/xml/kbd_hebrew_symbols.xml
+++ b/java/res/xml/kbd_dvorak.xml
@@ -22,5 +22,5 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<include
- latin:keyboardLayout="@xml/rows_symbols" />
+ latin:keyboardLayout="@xml/rows_dvorak" />
</Keyboard>
diff --git a/java/res/xml/kbd_hebrew_symbols_shift.xml b/java/res/xml/kbd_hebrew_symbols_shift.xml
deleted file mode 100644
index 25db3c84d..000000000
--- a/java/res/xml/kbd_hebrew_symbols_shift.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<Keyboard
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
->
- <include
- latin:keyboardLayout="@xml/rows_symbols_shift" />
-</Keyboard>
diff --git a/java/res/xml/kbd_spanish_symbols_shift.xml b/java/res/xml/kbd_spanish_symbols_shift.xml
deleted file mode 100644
index 25db3c84d..000000000
--- a/java/res/xml/kbd_spanish_symbols_shift.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<Keyboard
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
->
- <include
- latin:keyboardLayout="@xml/rows_symbols_shift" />
-</Keyboard>
diff --git a/java/res/xml/key_azerty_quote.xml b/java/res/xml/key_azerty_quote.xml
index b8c51d30f..65789ea69 100644
--- a/java/res/xml/key_azerty_quote.xml
+++ b/java/res/xml/key_azerty_quote.xml
@@ -31,7 +31,7 @@
<default>
<Key
latin:keyLabel="\'"
- latin:moreKeys="!label/more_keys_for_single_quote" />
+ latin:moreKeys="!text/more_keys_for_single_quote" />
</default>
</switch>
</merge>
diff --git a/java/res/xml/key_colemak_semicolon.xml b/java/res/xml/key_colemak_semicolon.xml
new file mode 100644
index 000000000..307b4ebca
--- /dev/null
+++ b/java/res/xml/key_colemak_semicolon.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <switch>
+ <case
+ latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLockShifted"
+ >
+ <Key
+ latin:keyLabel=";"
+ latin:keyHintLabel="0"
+ latin:additionalMoreKeys="0" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel=":"
+ latin:keyHintLabel="0"
+ latin:additionalMoreKeys="0"
+ latin:moreKeys=";" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml/key_f1.xml b/java/res/xml/key_f1.xml
new file mode 100644
index 000000000..455f9ef59
--- /dev/null
+++ b/java/res/xml/key_f1.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <switch>
+ <case
+ latin:mode="url"
+ >
+ <Key
+ latin:keyLabel="/"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyLabel="\@"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <case
+ latin:hasShortcutKey="true"
+ >
+ <Key
+ latin:keyStyle="shortcutKeyStyle" />
+ </case>
+ <!-- latin:hasShortcutKey="false" -->
+ <default>
+ <Key
+ latin:keyLabel="!text/keylabel_for_comma"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:additionalMoreKeys="!text/more_keys_for_comma"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml/key_space.xml b/java/res/xml/key_space.xml
new file mode 100644
index 000000000..c47407dc7
--- /dev/null
+++ b/java/res/xml/key_space.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Spacer
+ latin:keyWidth="0dp"
+ latin:keyXPos="25%p" />
+ <switch>
+ <case
+ latin:languageCode="fa"
+ latin:languageSwitchKeyEnabled="true"
+ >
+ <Key
+ latin:keyStyle="languageSwitchKeyStyle" />
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="30%p" />
+ <Key
+ latin:keyStyle="zwnjKeyStyle" />
+ </case>
+ <case
+ latin:languageCode="fa"
+ latin:languageSwitchKeyEnabled="false"
+ >
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="40%p" />
+ <Key
+ latin:keyStyle="zwnjKeyStyle" />
+ </case>
+ <case
+ latin:languageSwitchKeyEnabled="true"
+ >
+ <Key
+ latin:keyStyle="languageSwitchKeyStyle" />
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="40%p" />
+ </case>
+ <!-- languageSwitchKeyEnabled="false" -->
+ <default>
+ <Key
+ latin:keyStyle="spaceKeyStyle"
+ latin:keyWidth="50%p" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index ec011d08b..4341b7903 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -34,8 +34,8 @@
<default>
<key-style
latin:styleName="f1MoreKeysStyle"
- latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/settings_as_more_key"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:moreKeys="!text/settings_as_more_key"
latin:backgroundType="functional" />
</default>
</switch>
@@ -47,7 +47,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</case>
@@ -57,7 +57,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKeyShifted"
+ latin:keyIcon="!icon/shift_key_shifted"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOn" />
</case>
@@ -65,7 +65,7 @@
<key-style
latin:styleName="shiftKeyStyle"
latin:code="!code/key_shift"
- latin:keyIcon="iconShiftKey"
+ latin:keyIcon="!icon/shift_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="stickyOff" />
</default>
@@ -73,7 +73,7 @@
<key-style
latin:styleName="deleteKeyStyle"
latin:code="!code/key_delete"
- latin:keyIcon="iconDeleteKey"
+ latin:keyIcon="!icon/delete_key"
latin:keyActionFlags="isRepeatable|noKeyPreview"
latin:backgroundType="functional" />
<include
@@ -98,7 +98,7 @@
latin:keyLabel=":-)"
latin:keyOutputText=":-) "
latin:keyLabelFlags="hasPopupHint"
- latin:moreKeys="!label/more_keys_for_smiley"
+ latin:moreKeys="!text/more_keys_for_smiley"
latin:backgroundType="functional" />
</case>
</switch>
@@ -112,40 +112,39 @@
<key-style
latin:styleName="zwnjKeyStyle"
latin:code="0x200C"
- latin:keyIcon="iconZwnjKey"
- latin:moreKeys="!icon/zwjKey|&#x200D;"
+ latin:keyIcon="!icon/zwnj_key"
+ latin:moreKeys="!icon/zwj_key|&#x200D;"
latin:keyLabelFlags="hasPopupHint"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="shortcutKeyStyle"
latin:code="!code/key_shortcut"
- latin:keyIcon="iconShortcutKey"
- latin:keyIconDisabled="iconDisabledShortcutKey"
- latin:keyLabelFlags="preserveCase"
+ latin:keyIcon="!icon/shortcut_key"
+ latin:keyIconDisabled="!icon/shortcut_key_disabled"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping"
latin:altCode="!code/key_space"
latin:parentStyle="f1MoreKeysStyle" />
<key-style
latin:styleName="languageSwitchKeyStyle"
latin:code="!code/key_language_switch"
- latin:keyIcon="iconLanguageSwitchKey"
+ latin:keyIcon="!icon/language_switch_key"
latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
latin:altCode="!code/key_space"
latin:backgroundType="functional" />
<key-style
latin:styleName="tabKeyStyle"
latin:code="!code/key_tab"
- latin:keyIcon="iconTabKey"
- latin:keyIconPreview="iconPreviewTabKey"
+ latin:keyIcon="!icon/tab_key"
+ latin:keyIconPreview="!icon/tab_key_preview"
latin:backgroundType="functional" />
<!-- Note: This key style is not for functional tab key. This is used for the tab key which is
laid out as normal letter key. -->
<key-style
latin:styleName="nonSpecialBackgroundTabKeyStyle"
latin:code="!code/key_tab"
- latin:keyIcon="iconTabKey"
- latin:keyIconPreview="iconPreviewTabKey" />
+ latin:keyIcon="!icon/tab_key"
+ latin:keyIconPreview="!icon/tab_key_preview" />
<switch>
<!-- When this qwerty keyboard has no shortcut keys but shortcut key is enabled, then symbol
keyboard will have a shortcut key. That means we should use
@@ -157,9 +156,9 @@
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyIcon="iconShortcutForLabel"
- latin:keyLabel="!label/label_to_symbol_with_microphone_key"
- latin:keyLabelFlags="withIconRight|preserveCase"
+ latin:keyIcon="!icon/shortcut_for_label"
+ latin:keyLabel="!text/label_to_symbol_with_microphone_key"
+ latin:keyLabelFlags="withIconRight"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
</case>
@@ -167,8 +166,7 @@
<key-style
latin:styleName="toSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
</default>
@@ -176,29 +174,27 @@
<key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_alpha_key"
+ latin:keyLabel="!text/label_to_alpha_key"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_more_symbol_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_more_symbol_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!label/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
+ latin:keyLabel="!text/label_to_symbol_key"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
latin:styleName="punctuationKeyStyle"
latin:keyLabel="."
- latin:keyHintLabel="!label/keyhintlabel_for_punctuation"
- latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/more_keys_for_punctuation"
+ latin:keyHintLabel="!text/keyhintlabel_for_punctuation"
+ latin:keyLabelFlags="hasPopupHint"
+ latin:moreKeys="!text/more_keys_for_punctuation"
latin:backgroundType="functional" />
</merge>
diff --git a/java/res/xml/key_styles_currency.xml b/java/res/xml/key_styles_currency.xml
index 6057d5bd7..d5c6a87b9 100644
--- a/java/res/xml/key_styles_currency.xml
+++ b/java/res/xml/key_styles_currency.xml
@@ -86,7 +86,7 @@
<key-style
latin:styleName="currencyKeyStyle"
latin:keyLabel="&#x20AA;"
- latin:moreKeys="!label/more_keys_for_currency_general" />
+ latin:moreKeys="!text/more_keys_for_currency_general" />
<key-style
latin:styleName="moreCurrency1KeyStyle"
latin:keyLabel="&#x00A3;" />
@@ -112,7 +112,7 @@
<key-style
latin:styleName="currencyKeyStyle"
latin:keyLabel="&#xFDFC;"
- latin:moreKeys="!label/more_keys_for_currency_general" />
+ latin:moreKeys="!text/more_keys_for_currency_general" />
<key-style
latin:styleName="moreCurrency1KeyStyle"
latin:keyLabel="£" />
@@ -138,7 +138,7 @@
<key-style
latin:styleName="currencyKeyStyle"
latin:keyLabel="&#x00A3;"
- latin:moreKeys="!label/more_keys_for_currency_pound" />
+ latin:moreKeys="!text/more_keys_for_currency_pound" />
<key-style
latin:styleName="moreCurrency1KeyStyle"
latin:keyLabel="&#x20AC;" />
diff --git a/java/res/xml/key_styles_currency_dollar.xml b/java/res/xml/key_styles_currency_dollar.xml
index 704970a56..674a3966d 100644
--- a/java/res/xml/key_styles_currency_dollar.xml
+++ b/java/res/xml/key_styles_currency_dollar.xml
@@ -26,7 +26,7 @@
<key-style
latin:styleName="currencyKeyStyle"
latin:keyLabel="$"
- latin:moreKeys="!label/more_keys_for_currency_dollar" />
+ latin:moreKeys="!text/more_keys_for_currency_dollar" />
<key-style
latin:styleName="moreCurrency1KeyStyle"
latin:keyLabel="&#x00A3;" />
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index f4c7ad46b..be5be1bf9 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -30,7 +30,7 @@
<key-style
latin:styleName="navigateMoreKeysStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/action_previous_as_more_key" />
+ latin:moreKeys="!text/action_previous_as_more_key" />
</case>
<case
latin:imeAction="actionNext"
@@ -46,7 +46,7 @@
<key-style
latin:styleName="navigateMoreKeysStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/action_next_as_more_key" />
+ latin:moreKeys="!text/action_next_as_more_key" />
</case>
<case
latin:imeAction="actionPrevious"
@@ -63,7 +63,7 @@
<key-style
latin:styleName="navigateMoreKeysStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!label/action_previous_as_more_key,!label/action_next_as_more_key" />
+ latin:moreKeys="!fixedColumnOrder!2,!needsDividers!,!text/action_previous_as_more_key,!text/action_next_as_more_key" />
</case>
<case
latin:navigateNext="true"
@@ -72,7 +72,7 @@
<key-style
latin:styleName="navigateMoreKeysStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/action_next_as_more_key" />
+ latin:moreKeys="!text/action_next_as_more_key" />
</case>
<case
latin:navigateNext="false"
@@ -81,7 +81,7 @@
<key-style
latin:styleName="navigateMoreKeysStyle"
latin:keyLabelFlags="hasPopupHint|preserveCase"
- latin:moreKeys="!label/action_previous_as_more_key" />
+ latin:moreKeys="!text/action_previous_as_more_key" />
</case>
<!-- naviagteNext="false" and navigatePrevious="false" -->
<default>
@@ -93,15 +93,15 @@
<key-style
latin:styleName="defaultEnterKeyStyle"
latin:code="!code/key_enter"
- latin:keyIcon="iconReturnKey"
- latin:keyLabelFlags="autoXScale|preserveCase|followKeyLabelRatio"
+ latin:keyIcon="!icon/enter_key"
+ latin:keyLabelFlags="autoXScale|followKeyLabelRatio"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional"
latin:parentStyle="navigateMoreKeysStyle" />
<key-style
latin:styleName="defaultActionKeyStyle"
latin:code="!code/key_action_enter"
- latin:keyIcon="iconUndefined"
+ latin:keyIcon="!icon/undefined"
latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
<switch>
@@ -119,7 +119,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyLabel="!label/label_go_key"
+ latin:keyLabel="!text/label_go_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
@@ -127,7 +127,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyLabel="!label/label_next_key"
+ latin:keyLabel="!text/label_next_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
@@ -135,7 +135,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyLabel="!label/label_previous_key"
+ latin:keyLabel="!text/label_previous_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
@@ -143,7 +143,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyLabel="!label/label_done_key"
+ latin:keyLabel="!text/label_done_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
@@ -151,7 +151,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyLabel="!label/label_send_key"
+ latin:keyLabel="!text/label_send_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
@@ -159,7 +159,7 @@
>
<key-style
latin:styleName="enterKeyStyle"
- latin:keyIcon="iconSearchKey"
+ latin:keyIcon="!icon/search_key"
latin:parentStyle="defaultActionKeyStyle" />
</case>
<case
diff --git a/java/res/xml/key_styles_number.xml b/java/res/xml/key_styles_number.xml
index 16cfa8492..b8301bc49 100644
--- a/java/res/xml/key_styles_number.xml
+++ b/java/res/xml/key_styles_number.xml
@@ -100,25 +100,25 @@
<key-style
latin:styleName="numPhoneToSymbolKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_phone_symbols_key"
+ latin:keyLabel="!text/label_to_phone_symbols_key"
latin:parentStyle="numModeKeyStyle" />
<key-style
latin:styleName="numPhoneToNumericKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!label/label_to_phone_numeric_key"
+ latin:keyLabel="!text/label_to_phone_numeric_key"
latin:parentStyle="numModeKeyStyle" />
<!-- U+002C: "," COMMA -->
<key-style
latin:styleName="numPauseKeyStyle"
latin:code="0x002C"
- latin:keyLabel="!label/label_pause_key"
+ latin:keyLabel="!text/label_pause_key"
latin:keyLabelFlags="followKeyHintLabelRatio|autoXScale"
latin:parentStyle="numKeyBaseStyle" />
<!-- U+003B: ";" SEMICOLON -->
<key-style
latin:styleName="numWaitKeyStyle"
latin:code="0x003B"
- latin:keyLabel="!label/label_wait_key"
+ latin:keyLabel="!text/label_wait_key"
latin:keyLabelFlags="followKeyHintLabelRatio|autoXScale"
latin:parentStyle="numKeyBaseStyle" />
<key-style
@@ -128,7 +128,7 @@
<key-style
latin:styleName="numSpaceKeyStyle"
latin:code="!code/key_space"
- latin:keyIcon="iconSpaceKeyForNumberLayout"
+ latin:keyIcon="!icon/space_key_for_number_layout"
latin:keyActionFlags="enableLongPress"
latin:parentStyle="numKeyBaseStyle" />
</merge>
diff --git a/java/res/xml/keyboard_layout_set_azerty.xml b/java/res/xml/keyboard_layout_set_azerty.xml
index d4df6676c..4d144edbc 100644
--- a/java/res/xml/keyboard_layout_set_azerty.xml
+++ b/java/res/xml/keyboard_layout_set_azerty.xml
@@ -26,10 +26,10 @@
latin:enableProximityCharsCorrection="true" />
<Element
latin:elementName="symbols"
- latin:elementKeyboard="@xml/kbd_azerty_symbols" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols" />
<Element
latin:elementName="symbolsShifted"
- latin:elementKeyboard="@xml/kbd_azerty_symbols_shift" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols_shift" />
<Element
latin:elementName="phone"
latin:elementKeyboard="@xml/kbd_phone" />
diff --git a/java/res/xml/keyboard_layout_set_colemak.xml b/java/res/xml/keyboard_layout_set_colemak.xml
new file mode 100644
index 000000000..c18f13225
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_colemak.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<KeyboardLayoutSet
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+ <Element
+ latin:elementName="alphabet"
+ latin:elementKeyboard="@xml/kbd_colemak"
+ latin:enableProximityCharsCorrection="true" />
+ <Element
+ latin:elementName="symbols"
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols" />
+ <Element
+ latin:elementName="symbolsShifted"
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols_shift" />
+ <Element
+ latin:elementName="phone"
+ latin:elementKeyboard="@xml/kbd_phone" />
+ <Element
+ latin:elementName="phoneSymbols"
+ latin:elementKeyboard="@xml/kbd_phone_symbols" />
+ <Element
+ latin:elementName="number"
+ latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/keyboard_layout_set_dvorak.xml b/java/res/xml/keyboard_layout_set_dvorak.xml
new file mode 100644
index 000000000..eb8e0c539
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_dvorak.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<KeyboardLayoutSet
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+ <Element
+ latin:elementName="alphabet"
+ latin:elementKeyboard="@xml/kbd_dvorak"
+ latin:enableProximityCharsCorrection="true" />
+ <Element
+ latin:elementName="symbols"
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols" />
+ <Element
+ latin:elementName="symbolsShifted"
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols_shift" />
+ <Element
+ latin:elementName="phone"
+ latin:elementKeyboard="@xml/kbd_phone" />
+ <Element
+ latin:elementName="phoneSymbols"
+ latin:elementKeyboard="@xml/kbd_phone_symbols" />
+ <Element
+ latin:elementName="number"
+ latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/keyboard_layout_set_hebrew.xml b/java/res/xml/keyboard_layout_set_hebrew.xml
index d0f12f3ee..212816dfe 100644
--- a/java/res/xml/keyboard_layout_set_hebrew.xml
+++ b/java/res/xml/keyboard_layout_set_hebrew.xml
@@ -26,10 +26,10 @@
latin:enableProximityCharsCorrection="true" />
<Element
latin:elementName="symbols"
- latin:elementKeyboard="@xml/kbd_hebrew_symbols" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols" />
<Element
latin:elementName="symbolsShifted"
- latin:elementKeyboard="@xml/kbd_hebrew_symbols_shift" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols_shift" />
<Element
latin:elementName="phone"
latin:elementKeyboard="@xml/kbd_phone" />
diff --git a/java/res/xml/keyboard_layout_set_spanish.xml b/java/res/xml/keyboard_layout_set_spanish.xml
index 0ef712b76..57cef5234 100644
--- a/java/res/xml/keyboard_layout_set_spanish.xml
+++ b/java/res/xml/keyboard_layout_set_spanish.xml
@@ -26,10 +26,10 @@
latin:enableProximityCharsCorrection="true" />
<Element
latin:elementName="symbols"
- latin:elementKeyboard="@xml/kbd_spanish_symbols" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols" />
<Element
latin:elementName="symbolsShifted"
- latin:elementKeyboard="@xml/kbd_spanish_symbols_shift" />
+ latin:elementKeyboard="@xml/kbd_10_10_7_symbols_shift" />
<Element
latin:elementName="phone"
latin:elementKeyboard="@xml/kbd_phone" />
diff --git a/java/res/xml/keys_dvorak_123.xml b/java/res/xml/keys_dvorak_123.xml
new file mode 100644
index 000000000..0de2dd628
--- /dev/null
+++ b/java/res/xml/keys_dvorak_123.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <switch>
+ <case
+ latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
+ >
+ <Key
+ latin:keyLabel="&quot;"
+ latin:keyHintLabel="1"
+ latin:additionalMoreKeys="1" />
+ <Key
+ latin:keyLabel="&lt;"
+ latin:keyHintLabel="2"
+ latin:additionalMoreKeys="2" />
+ <Key
+ latin:keyLabel="&gt;"
+ latin:keyHintLabel="3"
+ latin:additionalMoreKeys="3" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel="\'"
+ latin:keyHintLabel="1"
+ latin:additionalMoreKeys="1"
+ latin:moreKeys="!" />
+ <Key
+ latin:keyLabel=","
+ latin:keyHintLabel="2"
+ latin:additionalMoreKeys="2"
+ latin:moreKeys="\?" />
+ <Key
+ latin:keyLabel="."
+ latin:keyHintLabel="3"
+ latin:additionalMoreKeys="3"
+ latin:keyLabelFlags="hasPopupHint|preserveCase"
+ latin:moreKeys="!text/more_keys_for_punctuation,%" />
+ </default>
+ </switch>
+</merge>
diff --git a/java/res/xml/keys_less_greater.xml b/java/res/xml/keys_less_greater.xml
index 7c154cb0d..4584e5c96 100644
--- a/java/res/xml/keys_less_greater.xml
+++ b/java/res/xml/keys_less_greater.xml
@@ -24,9 +24,9 @@
<Key
latin:keyLabel="&lt;"
latin:code="!code/key_less_than"
- latin:moreKeys="!label/more_keys_for_less_than" />
+ latin:moreKeys="!text/more_keys_for_less_than" />
<Key
latin:keyLabel="&gt;"
latin:code="!code/key_greater_than"
- latin:moreKeys="!label/more_keys_for_greater_than" />
+ latin:moreKeys="!text/more_keys_for_greater_than" />
</merge>
diff --git a/java/res/xml/keys_parentheses.xml b/java/res/xml/keys_parentheses.xml
index 17d72859c..25e89c930 100644
--- a/java/res/xml/keys_parentheses.xml
+++ b/java/res/xml/keys_parentheses.xml
@@ -24,9 +24,9 @@
<Key
latin:keyLabel="("
latin:code="!code/key_left_parenthesis"
- latin:moreKeys="!label/more_keys_for_left_parenthesis" />
+ latin:moreKeys="!text/more_keys_for_left_parenthesis" />
<Key
latin:keyLabel=")"
latin:code="!code/key_right_parenthesis"
- latin:moreKeys="!label/more_keys_for_right_parenthesis" />
+ latin:moreKeys="!text/more_keys_for_right_parenthesis" />
</merge>
diff --git a/java/res/xml/row_dvorak4.xml b/java/res/xml/row_dvorak4.xml
new file mode 100644
index 000000000..7b9a59cde
--- /dev/null
+++ b/java/res/xml/row_dvorak4.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <Key
+ latin:keyStyle="toSymbolKeyStyle"
+ latin:keyWidth="15%p" />
+ <switch>
+ <case
+ latin:mode="url"
+ >
+ <Key
+ latin:keyLabel="/"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <case
+ latin:mode="email"
+ >
+ <Key
+ latin:keyLabel="\@"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <case
+ latin:hasShortcutKey="true"
+ latin:keyboardLayoutSetElement="alphabet"
+ >
+ <Key
+ latin:keyLabel="q"
+ latin:backgroundType="normal"
+ latin:additionalMoreKeys="!text/shortcut_as_more_key"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <case
+ latin:hasShortcutKey="true"
+ >
+ <Key
+ latin:keyLabel="Q"
+ latin:backgroundType="normal"
+ latin:additionalMoreKeys="!text/shortcut_as_more_key"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <!-- latin:hasShortcutKey="false" -->
+ <case
+ latin:keyboardLayoutSetElement="alphabet"
+ >
+ <Key
+ latin:keyLabel="q"
+ latin:backgroundType="normal"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </case>
+ <default>
+ <Key
+ latin:keyLabel="Q"
+ latin:backgroundType="normal"
+ latin:keyStyle="f1MoreKeysStyle" />
+ </default>
+ </switch>
+ <include
+ latin:keyboardLayout="@xml/key_space" />
+ <Key
+ latin:keyLabel="z"
+ latin:moreKeys="!text/more_keys_for_z" />
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillRight" />
+ </Row>
+</merge>
diff --git a/java/res/xml/row_qwerty4.xml b/java/res/xml/row_qwerty4.xml
index c08518079..361a2c3ef 100644
--- a/java/res/xml/row_qwerty4.xml
+++ b/java/res/xml/row_qwerty4.xml
@@ -27,75 +27,10 @@
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyWidth="15%p" />
- <switch>
- <case
- latin:mode="url"
- >
- <Key
- latin:keyLabel="/"
- latin:keyStyle="f1MoreKeysStyle" />
- </case>
- <case
- latin:mode="email"
- >
- <Key
- latin:keyLabel="\@"
- latin:keyStyle="f1MoreKeysStyle" />
- </case>
- <case
- latin:hasShortcutKey="true"
- >
- <Key
- latin:keyStyle="shortcutKeyStyle" />
- </case>
- <!-- latin:hasShortcutKey="false" -->
- <default>
- <Key
- latin:keyLabel="!label/keylabel_for_comma"
- latin:keyLabelFlags="hasPopupHint"
- latin:additionalMoreKeys="!label/more_keys_for_comma"
- latin:keyStyle="f1MoreKeysStyle" />
- </default>
- </switch>
- <switch>
- <case
- latin:languageCode="fa"
- latin:languageSwitchKeyEnabled="true"
- >
- <Key
- latin:keyStyle="languageSwitchKeyStyle" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="30%p" />
- <Key
- latin:keyStyle="zwnjKeyStyle" />
- </case>
- <case
- latin:languageCode="fa"
- latin:languageSwitchKeyEnabled="false"
- >
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="40%p" />
- <Key
- latin:keyStyle="zwnjKeyStyle" />
- </case>
- <case
- latin:languageSwitchKeyEnabled="true"
- >
- <Key
- latin:keyStyle="languageSwitchKeyStyle" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="40%p" />
- </case>
- <!-- languageSwitchKeyEnabled="false" -->
- <default>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="50%p" />
- </default>
- </switch>
+ <include
+ latin:keyboardLayout="@xml/key_f1" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<Key
latin:keyStyle="punctuationKeyStyle" />
<Key
diff --git a/java/res/xml/rows_symbols4.xml b/java/res/xml/row_symbols4.xml
index de7e043e8..a92d55a76 100644
--- a/java/res/xml/rows_symbols4.xml
+++ b/java/res/xml/row_symbols4.xml
@@ -37,15 +37,14 @@
<!-- latin:hasShortcutKey="false" -->
<default>
<Key
- latin:keyLabel="!label/keylabel_for_comma"
+ latin:keyLabel="!text/keylabel_for_comma"
latin:keyLabelFlags="hasPopupHint"
- latin:additionalMoreKeys="!label/more_keys_for_comma"
+ latin:additionalMoreKeys="!text/more_keys_for_comma"
latin:keyStyle="f1MoreKeysStyle" />
</default>
</switch>
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="50%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<Key
latin:keyStyle="punctuationKeyStyle" />
<Key
diff --git a/java/res/xml/rows_symbols_shift4.xml b/java/res/xml/row_symbols_shift4.xml
index 28b6ab8dc..6608b7795 100644
--- a/java/res/xml/rows_symbols_shift4.xml
+++ b/java/res/xml/row_symbols_shift4.xml
@@ -35,9 +35,8 @@
<Key
latin:keyLabel="&#x201E;"
latin:backgroundType="functional" />
- <Key
- latin:keyStyle="spaceKeyStyle"
- latin:keyWidth="50%p" />
+ <include
+ latin:keyboardLayout="@xml/key_space" />
<!-- U+2026: "…" HORIZONTAL ELLIPSIS -->
<Key
latin:keyLabel="&#x2026;"
diff --git a/java/res/xml/rowkeys_azerty1.xml b/java/res/xml/rowkeys_azerty1.xml
index 50a0162de..42b27463f 100644
--- a/java/res/xml/rowkeys_azerty1.xml
+++ b/java/res/xml/rowkeys_azerty1.xml
@@ -25,47 +25,47 @@
latin:keyLabel="a"
latin:keyHintLabel="1"
latin:additionalMoreKeys="1"
- latin:moreKeys="!label/more_keys_for_a" />
+ latin:moreKeys="!text/more_keys_for_a" />
<Key
latin:keyLabel="z"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2"
- latin:moreKeys="!label/more_keys_for_z" />
+ latin:moreKeys="!text/more_keys_for_z" />
<Key
latin:keyLabel="e"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3"
- latin:moreKeys="!label/more_keys_for_e" />
+ latin:moreKeys="!text/more_keys_for_e" />
<Key
latin:keyLabel="r"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4"
- latin:moreKeys="!label/more_keys_for_r" />
+ latin:moreKeys="!text/more_keys_for_r" />
<Key
latin:keyLabel="t"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5"
- latin:moreKeys="!label/more_keys_for_t" />
+ latin:moreKeys="!text/more_keys_for_t" />
<Key
latin:keyLabel="y"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6"
- latin:moreKeys="!label/more_keys_for_y" />
+ latin:moreKeys="!text/more_keys_for_y" />
<Key
latin:keyLabel="u"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7"
- latin:moreKeys="!label/more_keys_for_u" />
+ latin:moreKeys="!text/more_keys_for_u" />
<Key
latin:keyLabel="i"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8"
- latin:moreKeys="!label/more_keys_for_i" />
+ latin:moreKeys="!text/more_keys_for_i" />
<Key
latin:keyLabel="o"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9"
- latin:moreKeys="!label/more_keys_for_o" />
+ latin:moreKeys="!text/more_keys_for_o" />
<Key
latin:keyLabel="p"
latin:keyHintLabel="0"
diff --git a/java/res/xml/rowkeys_azerty2.xml b/java/res/xml/rowkeys_azerty2.xml
index f453c2432..2eee214e5 100644
--- a/java/res/xml/rowkeys_azerty2.xml
+++ b/java/res/xml/rowkeys_azerty2.xml
@@ -25,27 +25,27 @@
latin:keyLabel="q" />
<Key
latin:keyLabel="s"
- latin:moreKeys="!label/more_keys_for_s" />
+ latin:moreKeys="!text/more_keys_for_s" />
<Key
latin:keyLabel="d"
- latin:moreKeys="!label/more_keys_for_d" />
+ latin:moreKeys="!text/more_keys_for_d" />
<Key
latin:keyLabel="f" />
<Key
latin:keyLabel="g"
- latin:moreKeys="!label/more_keys_for_g" />
+ latin:moreKeys="!text/more_keys_for_g" />
<Key
latin:keyLabel="h"
- latin:moreKeys="!label/more_keys_for_h" />
+ latin:moreKeys="!text/more_keys_for_h" />
<Key
latin:keyLabel="j"
- latin:moreKeys="!label/more_keys_for_j" />
+ latin:moreKeys="!text/more_keys_for_j" />
<Key
latin:keyLabel="k"
- latin:moreKeys="!label/more_keys_for_k" />
+ latin:moreKeys="!text/more_keys_for_k" />
<Key
latin:keyLabel="l"
- latin:moreKeys="!label/more_keys_for_l" />
+ latin:moreKeys="!text/more_keys_for_l" />
<Key
latin:keyLabel="m" />
</merge>
diff --git a/java/res/xml/rowkeys_azerty3.xml b/java/res/xml/rowkeys_azerty3.xml
index 35e9b195f..9f4c608f8 100644
--- a/java/res/xml/rowkeys_azerty3.xml
+++ b/java/res/xml/rowkeys_azerty3.xml
@@ -23,20 +23,20 @@
>
<Key
latin:keyLabel="w"
- latin:moreKeys="!label/more_keys_for_w" />
+ latin:moreKeys="!text/more_keys_for_w" />
<Key
latin:keyLabel="x" />
<Key
latin:keyLabel="c"
- latin:moreKeys="!label/more_keys_for_c" />
+ latin:moreKeys="!text/more_keys_for_c" />
<Key
latin:keyLabel="v"
- latin:moreKeys="!label/more_keys_for_v" />
+ latin:moreKeys="!text/more_keys_for_v" />
<Key
latin:keyLabel="b" />
<Key
latin:keyLabel="n"
- latin:moreKeys="!label/more_keys_for_n" />
+ latin:moreKeys="!text/more_keys_for_n" />
<include
latin:keyboardLayout="@xml/key_azerty_quote" />
</merge>
diff --git a/java/res/xml/rowkeys_colemak1.xml b/java/res/xml/rowkeys_colemak1.xml
new file mode 100644
index 000000000..f1c30756b
--- /dev/null
+++ b/java/res/xml/rowkeys_colemak1.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="q"
+ latin:keyHintLabel="1"
+ latin:additionalMoreKeys="1" />
+ <Key
+ latin:keyLabel="w"
+ latin:keyHintLabel="2"
+ latin:additionalMoreKeys="2"
+ latin:moreKeys="!text/more_keys_for_w" />
+ <Key
+ latin:keyLabel="f"
+ latin:keyHintLabel="3"
+ latin:additionalMoreKeys="3" />
+ <Key
+ latin:keyLabel="p"
+ latin:keyHintLabel="4"
+ latin:additionalMoreKeys="4" />
+ <Key
+ latin:keyLabel="g"
+ latin:keyHintLabel="5"
+ latin:additionalMoreKeys="5"
+ latin:moreKeys="!text/more_keys_for_g" />
+ <Key
+ latin:keyLabel="j"
+ latin:keyHintLabel="6"
+ latin:additionalMoreKeys="6"
+ latin:moreKeys="!text/more_keys_for_j" />
+ <Key
+ latin:keyLabel="l"
+ latin:keyHintLabel="7"
+ latin:additionalMoreKeys="7"
+ latin:moreKeys="!text/more_keys_for_l" />
+ <Key
+ latin:keyLabel="u"
+ latin:keyHintLabel="8"
+ latin:additionalMoreKeys="8"
+ latin:moreKeys="!text/more_keys_for_u" />
+ <Key
+ latin:keyLabel="y"
+ latin:keyHintLabel="9"
+ latin:additionalMoreKeys="9"
+ latin:moreKeys="!text/more_keys_for_y" />
+</merge>
diff --git a/java/res/xml/rowkeys_colemak2.xml b/java/res/xml/rowkeys_colemak2.xml
new file mode 100644
index 000000000..f73d7e95f
--- /dev/null
+++ b/java/res/xml/rowkeys_colemak2.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="a"
+ latin:moreKeys="!text/more_keys_for_a" />
+ <Key
+ latin:keyLabel="r"
+ latin:moreKeys="!text/more_keys_for_r" />
+ <Key
+ latin:keyLabel="s"
+ latin:moreKeys="!text/more_keys_for_s" />
+ <Key
+ latin:keyLabel="t"
+ latin:moreKeys="!text/more_keys_for_t" />
+ <Key
+ latin:keyLabel="d"
+ latin:moreKeys="!text/more_keys_for_d" />
+ <Key
+ latin:keyLabel="h"
+ latin:moreKeys="!text/more_keys_for_h" />
+ <Key
+ latin:keyLabel="n"
+ latin:moreKeys="!text/more_keys_for_n" />
+ <Key
+ latin:keyLabel="e"
+ latin:moreKeys="!text/more_keys_for_e" />
+ <Key
+ latin:keyLabel="i"
+ latin:moreKeys="!text/more_keys_for_i" />
+ <Key
+ latin:keyLabel="o"
+ latin:moreKeys="!text/more_keys_for_o" />
+</merge>
diff --git a/java/res/xml-sw600dp/kbd_spanish_symbols_shift.xml b/java/res/xml/rowkeys_colemak3.xml
index 3c5ed5e09..f0f915142 100644
--- a/java/res/xml-sw600dp/kbd_spanish_symbols_shift.xml
+++ b/java/res/xml/rowkeys_colemak3.xml
@@ -18,9 +18,25 @@
*/
-->
-<Keyboard
+<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
- <include
- latin:keyboardLayout="@xml/rows_10_10_7_symbols_shift" />
-</Keyboard>
+ <Key
+ latin:keyLabel="z"
+ latin:moreKeys="!text/more_keys_for_z" />
+ <Key
+ latin:keyLabel="x" />
+ <Key
+ latin:keyLabel="c"
+ latin:moreKeys="!text/more_keys_for_c" />
+ <Key
+ latin:keyLabel="v"
+ latin:moreKeys="!text/more_keys_for_v" />
+ <Key
+ latin:keyLabel="b" />
+ <Key
+ latin:keyLabel="k"
+ latin:moreKeys="!text/more_keys_for_k" />
+ <Key
+ latin:keyLabel="m" />
+</merge>
diff --git a/java/res/xml/rowkeys_dvorak1.xml b/java/res/xml/rowkeys_dvorak1.xml
new file mode 100644
index 000000000..7e0eb6e71
--- /dev/null
+++ b/java/res/xml/rowkeys_dvorak1.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="p"
+ latin:keyHintLabel="4"
+ latin:additionalMoreKeys="4" />
+ <Key
+ latin:keyLabel="y"
+ latin:keyHintLabel="5"
+ latin:additionalMoreKeys="5"
+ latin:moreKeys="!text/more_keys_for_y" />
+ <Key
+ latin:keyLabel="f"
+ latin:keyHintLabel="6"
+ latin:additionalMoreKeys="6" />
+ <Key
+ latin:keyLabel="g"
+ latin:keyHintLabel="7"
+ latin:additionalMoreKeys="7"
+ latin:moreKeys="!text/more_keys_for_g" />
+ <Key
+ latin:keyLabel="c"
+ latin:keyHintLabel="8"
+ latin:additionalMoreKeys="8"
+ latin:moreKeys="!text/more_keys_for_c" />
+ <Key
+ latin:keyLabel="r"
+ latin:keyHintLabel="9"
+ latin:additionalMoreKeys="9"
+ latin:moreKeys="!text/more_keys_for_r" />
+ <Key
+ latin:keyLabel="l"
+ latin:keyHintLabel="0"
+ latin:additionalMoreKeys="0"
+ latin:moreKeys="!text/more_keys_for_l" />
+</merge>
diff --git a/java/res/xml/rowkeys_dvorak2.xml b/java/res/xml/rowkeys_dvorak2.xml
new file mode 100644
index 000000000..943e3f549
--- /dev/null
+++ b/java/res/xml/rowkeys_dvorak2.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="a"
+ latin:moreKeys="!text/more_keys_for_a" />
+ <Key
+ latin:keyLabel="o"
+ latin:moreKeys="!text/more_keys_for_o" />
+ <Key
+ latin:keyLabel="e"
+ latin:moreKeys="!text/more_keys_for_e" />
+ <Key
+ latin:keyLabel="u"
+ latin:moreKeys="!text/more_keys_for_u" />
+ <Key
+ latin:keyLabel="i"
+ latin:moreKeys="!text/more_keys_for_i" />
+ <Key
+ latin:keyLabel="d"
+ latin:moreKeys="!text/more_keys_for_d" />
+ <Key
+ latin:keyLabel="h"
+ latin:moreKeys="!text/more_keys_for_h" />
+ <Key
+ latin:keyLabel="t"
+ latin:moreKeys="!text/more_keys_for_t" />
+ <Key
+ latin:keyLabel="n"
+ latin:moreKeys="!text/more_keys_for_n" />
+ <Key
+ latin:keyLabel="s"
+ latin:moreKeys="!text/more_keys_for_s" />
+</merge>
diff --git a/java/res/xml/rowkeys_dvorak3.xml b/java/res/xml/rowkeys_dvorak3.xml
new file mode 100644
index 000000000..b035f41cd
--- /dev/null
+++ b/java/res/xml/rowkeys_dvorak3.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <Key
+ latin:keyLabel="j"
+ latin:moreKeys="!text/more_keys_for_j" />
+ <Key
+ latin:keyLabel="k"
+ latin:moreKeys="!text/more_keys_for_k" />
+ <Key
+ latin:keyLabel="x" />
+ <Key
+ latin:keyLabel="b" />
+ <Key
+ latin:keyLabel="m" />
+ <Key
+ latin:keyLabel="w"
+ latin:moreKeys="!text/more_keys_for_w" />
+ <Key
+ latin:keyLabel="v"
+ latin:moreKeys="!text/more_keys_for_v" />
+</merge>
diff --git a/java/res/xml/rowkeys_east_slavic1.xml b/java/res/xml/rowkeys_east_slavic1.xml
index dd83c0250..00cb6a973 100644
--- a/java/res/xml/rowkeys_east_slavic1.xml
+++ b/java/res/xml/rowkeys_east_slavic1.xml
@@ -36,7 +36,7 @@
latin:keyLabel="&#x0443;"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3"
- latin:moreKeys="!label/more_keys_for_cyrillic_u" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_u" />
<!-- U+043A: "к" CYRILLIC SMALL LETTER KA -->
<Key
latin:keyLabel="&#x043A;"
@@ -47,13 +47,13 @@
latin:keyLabel="&#x0435;"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5"
- latin:moreKeys="!label/more_keys_for_cyrillic_ye" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_ye" />
<!-- U+043D: "н" CYRILLIC SMALL LETTER EN -->
<Key
latin:keyLabel="&#x043D;"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6"
- latin:moreKeys="!label/more_keys_for_cyrillic_en" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_en" />
<!-- U+0433: "г" CYRILLIC SMALL LETTER GHE -->
<Key
latin:keyLabel="&#x0433;"
@@ -65,7 +65,7 @@
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<Key
- latin:keyLabel="!label/keylabel_for_east_slavic_row1_9"
+ latin:keyLabel="!text/keylabel_for_east_slavic_row1_9"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<!-- U+0437: "з" CYRILLIC SMALL LETTER ZE -->
@@ -76,5 +76,5 @@
<!-- U+0445: "х" CYRILLIC SMALL LETTER HA -->
<Key
latin:keyLabel="&#x0445;"
- latin:moreKeys="!label/more_keys_for_cyrillic_ha" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_ha" />
</merge>
diff --git a/java/res/xml/rowkeys_east_slavic2.xml b/java/res/xml/rowkeys_east_slavic2.xml
index 75d7d939d..c635af2d9 100644
--- a/java/res/xml/rowkeys_east_slavic2.xml
+++ b/java/res/xml/rowkeys_east_slavic2.xml
@@ -25,8 +25,8 @@
<Key
latin:keyLabel="&#x0444;" />
<Key
- latin:keyLabel="!label/keylabel_for_east_slavic_row2_1"
- latin:moreKeys="!label/more_keys_for_east_slavic_row2_1" />
+ latin:keyLabel="!text/keylabel_for_east_slavic_row2_1"
+ latin:moreKeys="!text/more_keys_for_east_slavic_row2_1" />
<!-- U+0432: "в" CYRILLIC SMALL LETTER VE -->
<Key
latin:keyLabel="&#x0432;" />
@@ -42,7 +42,7 @@
<!-- U+043E: "о" CYRILLIC SMALL LETTER O -->
<Key
latin:keyLabel="&#x043E;"
- latin:moreKeys="!label/more_keys_for_cyrillic_o" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_o" />
<!-- U+043B: "л" CYRILLIC SMALL LETTER EL -->
<Key
latin:keyLabel="&#x043B;" />
diff --git a/java/res/xml/rowkeys_east_slavic3.xml b/java/res/xml/rowkeys_east_slavic3.xml
index a05e92d44..c3a171b49 100644
--- a/java/res/xml/rowkeys_east_slavic3.xml
+++ b/java/res/xml/rowkeys_east_slavic3.xml
@@ -34,14 +34,14 @@
<Key
latin:keyLabel="&#x043C;" />
<Key
- latin:keyLabel="!label/keylabel_for_east_slavic_row3_5" />
+ latin:keyLabel="!text/keylabel_for_east_slavic_row3_5" />
<!-- U+0442: "т" CYRILLIC SMALL LETTER TE -->
<Key
latin:keyLabel="&#x0442;" />
<!-- U+044C: "ь" CYRILLIC SMALL LETTER SOFT SIGN -->
<Key
latin:keyLabel="&#x044C;"
- latin:moreKeys="!label/more_keys_for_cyrillic_soft_sign" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_soft_sign" />
<!-- U+0431: "б" CYRILLIC SMALL LETTER BE -->
<Key
latin:keyLabel="&#x0431;" />
diff --git a/java/res/xml/rowkeys_georgian1.xml b/java/res/xml/rowkeys_georgian1.xml
index fcdf3fa58..d31a4c79c 100644
--- a/java/res/xml/rowkeys_georgian1.xml
+++ b/java/res/xml/rowkeys_georgian1.xml
@@ -27,55 +27,45 @@
>
<Key
latin:keyLabel="Q"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="1"
latin:additionalMoreKeys="1" />
<!-- U+10ED: "ჭ" GEORGIAN LETTER CHAR -->
<Key
latin:keyLabel="&#x10ED;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2" />
<Key
latin:keyLabel="E"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3" />
<!-- U+10E6: "ღ" GEORGIAN LETTER GHAN -->
<Key
latin:keyLabel="&#x10E6;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4" />
<!-- U+10D7: "თ" GEORGIAN LETTER TAN -->
<Key
latin:keyLabel="&#x10D7;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<Key
latin:keyLabel="Y"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<Key
latin:keyLabel="U"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7" />
<Key
latin:keyLabel="I"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<Key
latin:keyLabel="O"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<Key
latin:keyLabel="P"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="0"
latin:additionalMoreKeys="0" />
</case>
@@ -83,13 +73,11 @@
<!-- U+10E5: "ქ" GEORGIAN LETTER GHAN -->
<Key
latin:keyLabel="&#x10E5;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="1"
latin:additionalMoreKeys="1" />
<!-- U+10EC: "წ" GEORGIAN LETTER CIL -->
<Key
latin:keyLabel="&#x10EC;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2" />
<!-- U+10D4: "ე" GEORGIAN LETTER EN
@@ -97,19 +85,16 @@
<Key
latin:keyLabel="&#x10D4;"
latin:moreKeys="&#x10F1;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3" />
<!-- U+10E0: "რ" GEORGIAN LETTER RAE -->
<Key
latin:keyLabel="&#x10E0;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4" />
<!-- U+10E2: "ტ" GEORGIAN LETTER TAR -->
<Key
latin:keyLabel="&#x10E2;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<!-- U+10E7: "ყ" GEORGIAN LETTER QAR
@@ -117,13 +102,11 @@
<Key
latin:keyLabel="&#x10E7;"
latin:moreKeys="&#x10F8;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<!-- U+10E3: "უ" GEORGIAN LETTER UN -->
<Key
latin:keyLabel="&#x10E3;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7" />
<!-- U+10D8: "ი" GEORGIAN LETTER IN
@@ -131,19 +114,16 @@
<Key
latin:keyLabel="&#x10D8;"
latin:moreKeys="&#x10F2;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<!-- U+10DD: "ო" GEORGIAN LETTER ON -->
<Key
latin:keyLabel="&#x10DD;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<!-- U+10DE: "პ" GEORGIAN LETTER PAR -->
<Key
latin:keyLabel="&#x10DE;"
- latin:keyLabelFlags="preserveCase"
latin:keyHintLabel="0"
latin:additionalMoreKeys="0" />
</default>
diff --git a/java/res/xml/rowkeys_georgian2.xml b/java/res/xml/rowkeys_georgian2.xml
index 5673b9002..cdccda31f 100644
--- a/java/res/xml/rowkeys_georgian2.xml
+++ b/java/res/xml/rowkeys_georgian2.xml
@@ -26,82 +26,64 @@
latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
>
<Key
- latin:keyLabel="A"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="A" />
<!-- U+10E8: "შ" GEORGIAN LETTER SHIN -->
<Key
- latin:keyLabel="&#x10E8;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E8;" />
<Key
- latin:keyLabel="D"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="D" />
<Key
- latin:keyLabel="F"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="F" />
<Key
- latin:keyLabel="G"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="G" />
<Key
- latin:keyLabel="H"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="H" />
<!-- U+10DF: "ჟ" GEORGIAN LETTER ZHAR -->
<Key
- latin:keyLabel="&#x10DF;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DF;" />
<Key
- latin:keyLabel="K"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="K" />
<Key
- latin:keyLabel="L"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="L" />
</case>
<default>
<!-- U+10D0: "ა" GEORGIAN LETTER AN
U+10FA: "ჺ" GEORGIAN LETTER AIN -->
<Key
latin:keyLabel="&#x10D0;"
- latin:moreKeys="&#x10FA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10FA;" />
<!-- U+10E1: "ს" GEORGIAN LETTER SAN -->
<Key
- latin:keyLabel="&#x10E1;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E1;" />
<!-- U+10D3: "დ" GEORGIAN LETTER DON -->
<Key
- latin:keyLabel="&#x10D3;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D3;" />
<!-- U+10E4: "ფ" GEORGIAN LETTER PHAR
U+10F6: "ჶ" GEORGIAN LETTER FI -->
<Key
latin:keyLabel="&#x10E4;"
- latin:moreKeys="&#x10F6;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F6;" />
<!-- U+10D2: "გ" GEORGIAN LETTER GAN
U+10F9: "ჹ" GEORGIAN LETTER TURNED GAN -->
<Key
latin:keyLabel="&#x10D2;"
- latin:moreKeys="&#x10F9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F9;" />
<!-- U+10F0: "ჰ" GEORGIAN LETTER HAE
U+10F5: "ჵ" GEORGIAN LETTER HOE -->
<Key
latin:keyLabel="&#x10F0;"
- latin:moreKeys="&#x10F5;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F5;" />
<!-- U+10EF: "ჯ" GEORGIAN LETTER JHAN
U+10F7: "ჷ" GEORGIAN LETTER YN -->
<Key
latin:keyLabel="&#x10EF;"
- latin:moreKeys="&#x10F7;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F7;" />
<!-- U+10D9: "კ" GEORGIAN LETTER KAN -->
<Key
- latin:keyLabel="&#x10D9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D9;" />
<!-- U+10DA: "ლ" GEORGIAN LETTER LAS -->
<Key
- latin:keyLabel="&#x10DA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DA;" />
</default>
</switch>
</merge>
diff --git a/java/res/xml/rowkeys_georgian3.xml b/java/res/xml/rowkeys_georgian3.xml
index 1c0f45bef..a3714586f 100644
--- a/java/res/xml/rowkeys_georgian3.xml
+++ b/java/res/xml/rowkeys_georgian3.xml
@@ -27,63 +27,49 @@
>
<!-- U+10EB: "ძ" GEORGIAN LETTER JIL -->
<Key
- latin:keyLabel="&#x10EB;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10EB;" />
<Key
- latin:keyLabel="X"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="X" />
<!-- U+10E9: "ჩ" GEORGIAN LETTER CHIN -->
<Key
- latin:keyLabel="&#x10E9;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10E9;" />
<Key
- latin:keyLabel="V"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="V" />
<Key
- latin:keyLabel="B"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="B" />
<Key
- latin:keyLabel="N"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="N" />
<Key
- latin:keyLabel="M"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="M" />
</case>
<default>
<!-- U+10D6: "ზ" GEORGIAN LETTER ZEN -->
<Key
- latin:keyLabel="&#x10D6;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D6;" />
<!-- U+10EE: "ხ" GEORGIAN LETTER XAN
U+10F4: "ჴ" GEORGIAN LETTER HAR -->
<Key
latin:keyLabel="&#x10EE;"
- latin:moreKeys="&#x10F4;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F4;" />
<!-- U+10EA: "ც" GEORGIAN LETTER CAN -->
<Key
- latin:keyLabel="&#x10EA;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10EA;" />
<!-- U+10D5: "ვ" GEORGIAN LETTER VIN
U+10F3: "ჳ" GEORGIAN LETTER WE -->
<Key
latin:keyLabel="&#x10D5;"
- latin:moreKeys="&#x10F3;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10F3;" />
<!-- U+10D1: "ბ" GEORGIAN LETTER BAN -->
<Key
- latin:keyLabel="&#x10D1;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10D1;" />
<!-- U+10DC: "ნ" GEORGIAN LETTER NAR
U+10FC: "ჼ" MODIFIER LETTER GEORGIAN NAR -->
<Key
latin:keyLabel="&#x10DC;"
- latin:moreKeys="&#x10FC;"
- latin:keyLabelFlags="preserveCase" />
+ latin:moreKeys="&#x10FC;" />
<!-- U+10DB: "მ" GEORGIAN LETTER MAN -->
<Key
- latin:keyLabel="&#x10DB;"
- latin:keyLabelFlags="preserveCase" />
+ latin:keyLabel="&#x10DB;" />
</default>
</switch>
</merge>
diff --git a/java/res/xml/rowkeys_nordic1.xml b/java/res/xml/rowkeys_nordic1.xml
index ff29369d7..72ac86b2e 100644
--- a/java/res/xml/rowkeys_nordic1.xml
+++ b/java/res/xml/rowkeys_nordic1.xml
@@ -24,5 +24,5 @@
<include
latin:keyboardLayout="@xml/rowkeys_qwerty1" />
<Key
- latin:keyLabel="!label/keylabel_for_nordic_row1_11" />
+ latin:keyLabel="!text/keylabel_for_nordic_row1_11" />
</merge>
diff --git a/java/res/xml/rowkeys_nordic2.xml b/java/res/xml/rowkeys_nordic2.xml
index 52bb2f18f..836214abf 100644
--- a/java/res/xml/rowkeys_nordic2.xml
+++ b/java/res/xml/rowkeys_nordic2.xml
@@ -24,9 +24,9 @@
<include
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
- latin:keyLabel="!label/keylabel_for_nordic_row2_10"
- latin:moreKeys="!label/more_keys_for_nordic_row2_10" />
+ latin:keyLabel="!text/keylabel_for_nordic_row2_10"
+ latin:moreKeys="!text/more_keys_for_nordic_row2_10" />
<Key
- latin:keyLabel="!label/keylabel_for_nordic_row2_11"
- latin:moreKeys="!label/more_keys_for_nordic_row2_11" />
+ latin:keyLabel="!text/keylabel_for_nordic_row2_11"
+ latin:moreKeys="!text/more_keys_for_nordic_row2_11" />
</merge>
diff --git a/java/res/xml/rowkeys_qwerty1.xml b/java/res/xml/rowkeys_qwerty1.xml
index 8fb60db74..84d613460 100644
--- a/java/res/xml/rowkeys_qwerty1.xml
+++ b/java/res/xml/rowkeys_qwerty1.xml
@@ -29,42 +29,42 @@
latin:keyLabel="w"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2"
- latin:moreKeys="!label/more_keys_for_w" />
+ latin:moreKeys="!text/more_keys_for_w" />
<Key
latin:keyLabel="e"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3"
- latin:moreKeys="!label/more_keys_for_e" />
+ latin:moreKeys="!text/more_keys_for_e" />
<Key
latin:keyLabel="r"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4"
- latin:moreKeys="!label/more_keys_for_r" />
+ latin:moreKeys="!text/more_keys_for_r" />
<Key
latin:keyLabel="t"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5"
- latin:moreKeys="!label/more_keys_for_t" />
+ latin:moreKeys="!text/more_keys_for_t" />
<Key
latin:keyLabel="y"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6"
- latin:moreKeys="!label/more_keys_for_y" />
+ latin:moreKeys="!text/more_keys_for_y" />
<Key
latin:keyLabel="u"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7"
- latin:moreKeys="!label/more_keys_for_u" />
+ latin:moreKeys="!text/more_keys_for_u" />
<Key
latin:keyLabel="i"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8"
- latin:moreKeys="!label/more_keys_for_i" />
+ latin:moreKeys="!text/more_keys_for_i" />
<Key
latin:keyLabel="o"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9"
- latin:moreKeys="!label/more_keys_for_o" />
+ latin:moreKeys="!text/more_keys_for_o" />
<Key
latin:keyLabel="p"
latin:keyHintLabel="0"
diff --git a/java/res/xml/rowkeys_qwerty2.xml b/java/res/xml/rowkeys_qwerty2.xml
index a29f331bc..d9777d920 100644
--- a/java/res/xml/rowkeys_qwerty2.xml
+++ b/java/res/xml/rowkeys_qwerty2.xml
@@ -23,28 +23,28 @@
>
<Key
latin:keyLabel="a"
- latin:moreKeys="!label/more_keys_for_a" />
+ latin:moreKeys="!text/more_keys_for_a" />
<Key
latin:keyLabel="s"
- latin:moreKeys="!label/more_keys_for_s" />
+ latin:moreKeys="!text/more_keys_for_s" />
<Key
latin:keyLabel="d"
- latin:moreKeys="!label/more_keys_for_d" />
+ latin:moreKeys="!text/more_keys_for_d" />
<Key
latin:keyLabel="f" />
<Key
latin:keyLabel="g"
- latin:moreKeys="!label/more_keys_for_g" />
+ latin:moreKeys="!text/more_keys_for_g" />
<Key
latin:keyLabel="h"
- latin:moreKeys="!label/more_keys_for_h" />
+ latin:moreKeys="!text/more_keys_for_h" />
<Key
latin:keyLabel="j"
- latin:moreKeys="!label/more_keys_for_j" />
+ latin:moreKeys="!text/more_keys_for_j" />
<Key
latin:keyLabel="k"
- latin:moreKeys="!label/more_keys_for_k" />
+ latin:moreKeys="!text/more_keys_for_k" />
<Key
latin:keyLabel="l"
- latin:moreKeys="!label/more_keys_for_l" />
+ latin:moreKeys="!text/more_keys_for_l" />
</merge>
diff --git a/java/res/xml/rowkeys_qwerty3.xml b/java/res/xml/rowkeys_qwerty3.xml
index afe43f6e4..a74aeb842 100644
--- a/java/res/xml/rowkeys_qwerty3.xml
+++ b/java/res/xml/rowkeys_qwerty3.xml
@@ -23,20 +23,20 @@
>
<Key
latin:keyLabel="z"
- latin:moreKeys="!label/more_keys_for_z" />
+ latin:moreKeys="!text/more_keys_for_z" />
<Key
latin:keyLabel="x" />
<Key
latin:keyLabel="c"
- latin:moreKeys="!label/more_keys_for_c" />
+ latin:moreKeys="!text/more_keys_for_c" />
<Key
latin:keyLabel="v"
- latin:moreKeys="!label/more_keys_for_v" />
+ latin:moreKeys="!text/more_keys_for_v" />
<Key
latin:keyLabel="b" />
<Key
latin:keyLabel="n"
- latin:moreKeys="!label/more_keys_for_n" />
+ latin:moreKeys="!text/more_keys_for_n" />
<Key
latin:keyLabel="m" />
</merge>
diff --git a/java/res/xml/rowkeys_qwertz1.xml b/java/res/xml/rowkeys_qwertz1.xml
index 12788968a..d87f03ddc 100644
--- a/java/res/xml/rowkeys_qwertz1.xml
+++ b/java/res/xml/rowkeys_qwertz1.xml
@@ -29,42 +29,42 @@
latin:keyLabel="w"
latin:keyHintLabel="2"
latin:additionalMoreKeys="2"
- latin:moreKeys="!label/more_keys_for_w" />
+ latin:moreKeys="!text/more_keys_for_w" />
<Key
latin:keyLabel="e"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3"
- latin:moreKeys="!label/more_keys_for_e" />
+ latin:moreKeys="!text/more_keys_for_e" />
<Key
latin:keyLabel="r"
latin:keyHintLabel="4"
latin:additionalMoreKeys="4"
- latin:moreKeys="!label/more_keys_for_r" />
+ latin:moreKeys="!text/more_keys_for_r" />
<Key
latin:keyLabel="t"
latin:keyHintLabel="5"
latin:additionalMoreKeys="5"
- latin:moreKeys="!label/more_keys_for_t" />
+ latin:moreKeys="!text/more_keys_for_t" />
<Key
latin:keyLabel="z"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6"
- latin:moreKeys="!label/more_keys_for_z" />
+ latin:moreKeys="!text/more_keys_for_z" />
<Key
latin:keyLabel="u"
latin:keyHintLabel="7"
latin:additionalMoreKeys="7"
- latin:moreKeys="!label/more_keys_for_u" />
+ latin:moreKeys="!text/more_keys_for_u" />
<Key
latin:keyLabel="i"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8"
- latin:moreKeys="!label/more_keys_for_i" />
+ latin:moreKeys="!text/more_keys_for_i" />
<Key
latin:keyLabel="o"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9"
- latin:moreKeys="!label/more_keys_for_o" />
+ latin:moreKeys="!text/more_keys_for_o" />
<Key
latin:keyLabel="p"
latin:keyHintLabel="0"
diff --git a/java/res/xml/rowkeys_qwertz3.xml b/java/res/xml/rowkeys_qwertz3.xml
index e969665a5..9e39fe08e 100644
--- a/java/res/xml/rowkeys_qwertz3.xml
+++ b/java/res/xml/rowkeys_qwertz3.xml
@@ -23,20 +23,20 @@
>
<Key
latin:keyLabel="y"
- latin:moreKeys="!label/more_keys_for_y" />
+ latin:moreKeys="!text/more_keys_for_y" />
<Key
latin:keyLabel="x" />
<Key
latin:keyLabel="c"
- latin:moreKeys="!label/more_keys_for_c" />
+ latin:moreKeys="!text/more_keys_for_c" />
<Key
latin:keyLabel="v"
- latin:moreKeys="!label/more_keys_for_v" />
+ latin:moreKeys="!text/more_keys_for_v" />
<Key
latin:keyLabel="b" />
<Key
latin:keyLabel="n"
- latin:moreKeys="!label/more_keys_for_n" />
+ latin:moreKeys="!text/more_keys_for_n" />
<Key
latin:keyLabel="m" />
</merge>
diff --git a/java/res/xml/rowkeys_south_slavic1.xml b/java/res/xml/rowkeys_south_slavic1.xml
index 7c9a3bc92..6117d46f1 100644
--- a/java/res/xml/rowkeys_south_slavic1.xml
+++ b/java/res/xml/rowkeys_south_slavic1.xml
@@ -36,7 +36,7 @@
latin:keyLabel="&#x0435;"
latin:keyHintLabel="3"
latin:additionalMoreKeys="3"
- latin:moreKeys="!label/more_keys_for_cyrillic_ie" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_ie" />
<!-- U+0440: "р" CYRILLIC SMALL LETTER ER -->
<Key
latin:keyLabel="&#x0440;"
@@ -48,7 +48,7 @@
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<Key
- latin:keyLabel="!label/keylabel_for_south_slavic_row1_6"
+ latin:keyLabel="!text/keylabel_for_south_slavic_row1_6"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<!-- U+0443: "у" CYRILLIC SMALL LETTER U -->
@@ -61,7 +61,7 @@
latin:keyLabel="&#x0438;"
latin:keyHintLabel="8"
latin:additionalMoreKeys="8"
- latin:moreKeys="!label/more_keys_for_cyrillic_i" />
+ latin:moreKeys="!text/more_keys_for_cyrillic_i" />
<!-- U+043E: "о" CYRILLIC SMALL LETTER O -->
<Key
latin:keyLabel="&#x043E;"
diff --git a/java/res/xml/rowkeys_south_slavic2.xml b/java/res/xml/rowkeys_south_slavic2.xml
index e4892085d..88e894053 100644
--- a/java/res/xml/rowkeys_south_slavic2.xml
+++ b/java/res/xml/rowkeys_south_slavic2.xml
@@ -52,5 +52,5 @@
<Key
latin:keyLabel="&#x0447;" />
<Key
- latin:keyLabel="!label/keylabel_for_south_slavic_row2_11" />
+ latin:keyLabel="!text/keylabel_for_south_slavic_row2_11" />
</merge>
diff --git a/java/res/xml/rowkeys_south_slavic3.xml b/java/res/xml/rowkeys_south_slavic3.xml
index d668ddf39..b01550911 100644
--- a/java/res/xml/rowkeys_south_slavic3.xml
+++ b/java/res/xml/rowkeys_south_slavic3.xml
@@ -22,7 +22,7 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
- latin:keyLabel="!label/keylabel_for_south_slavic_row3_1" />
+ latin:keyLabel="!text/keylabel_for_south_slavic_row3_1" />
<!-- U+045F: "џ" CYRILLIC SMALL LETTER DZHE -->
<Key
latin:keyLabel="&#x045F;" />
@@ -42,7 +42,7 @@
<Key
latin:keyLabel="&#x043C;" />
<Key
- latin:keyLabel="!label/keylabel_for_south_slavic_row3_8" />
+ latin:keyLabel="!text/keylabel_for_south_slavic_row3_8" />
<!-- U+0436: "ж" CYRILLIC SMALL LETTER ZHE -->
<Key
latin:keyLabel="&#x0436;" />
diff --git a/java/res/xml/rowkeys_symbols1.xml b/java/res/xml/rowkeys_symbols1.xml
index f9f8bb16c..6e2f92dd9 100644
--- a/java/res/xml/rowkeys_symbols1.xml
+++ b/java/res/xml/rowkeys_symbols1.xml
@@ -22,43 +22,43 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
- latin:keyLabel="!label/keylabel_for_symbols_1"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_1"
- latin:moreKeys="!label/more_keys_for_symbols_1" />
+ latin:keyLabel="!text/keylabel_for_symbols_1"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_1"
+ latin:moreKeys="!text/more_keys_for_symbols_1" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_2"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_2"
- latin:moreKeys="!label/more_keys_for_symbols_2" />
+ latin:keyLabel="!text/keylabel_for_symbols_2"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_2"
+ latin:moreKeys="!text/more_keys_for_symbols_2" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_3"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_3"
- latin:moreKeys="!label/more_keys_for_symbols_3" />
+ latin:keyLabel="!text/keylabel_for_symbols_3"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_3"
+ latin:moreKeys="!text/more_keys_for_symbols_3" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_4"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_4"
- latin:moreKeys="!label/more_keys_for_symbols_4" />
+ latin:keyLabel="!text/keylabel_for_symbols_4"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_4"
+ latin:moreKeys="!text/more_keys_for_symbols_4" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_5"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_5"
- latin:moreKeys="!label/more_keys_for_symbols_5" />
+ latin:keyLabel="!text/keylabel_for_symbols_5"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_5"
+ latin:moreKeys="!text/more_keys_for_symbols_5" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_6"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_6"
- latin:moreKeys="!label/more_keys_for_symbols_6" />
+ latin:keyLabel="!text/keylabel_for_symbols_6"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_6"
+ latin:moreKeys="!text/more_keys_for_symbols_6" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_7"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_7"
- latin:moreKeys="!label/more_keys_for_symbols_7" />
+ latin:keyLabel="!text/keylabel_for_symbols_7"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_7"
+ latin:moreKeys="!text/more_keys_for_symbols_7" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_8"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_8"
- latin:moreKeys="!label/more_keys_for_symbols_8" />
+ latin:keyLabel="!text/keylabel_for_symbols_8"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_8"
+ latin:moreKeys="!text/more_keys_for_symbols_8" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_9"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_9"
- latin:moreKeys="!label/more_keys_for_symbols_9" />
+ latin:keyLabel="!text/keylabel_for_symbols_9"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_9"
+ latin:moreKeys="!text/more_keys_for_symbols_9" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_0"
- latin:additionalMoreKeys="!label/additional_more_keys_for_symbols_0"
- latin:moreKeys="!label/more_keys_for_symbols_0" />
+ latin:keyLabel="!text/keylabel_for_symbols_0"
+ latin:additionalMoreKeys="!text/additional_more_keys_for_symbols_0"
+ latin:moreKeys="!text/more_keys_for_symbols_0" />
</merge>
diff --git a/java/res/xml/rowkeys_symbols2.xml b/java/res/xml/rowkeys_symbols2.xml
index 47865a989..34b9aa2ee 100644
--- a/java/res/xml/rowkeys_symbols2.xml
+++ b/java/res/xml/rowkeys_symbols2.xml
@@ -28,13 +28,13 @@
<Key
latin:keyStyle="currencyKeyStyle" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_percent"
- latin:moreKeys="!label/more_keys_for_symbols_percent" />
+ latin:keyLabel="!text/keylabel_for_symbols_percent"
+ latin:moreKeys="!text/more_keys_for_symbols_percent" />
<Key
latin:keyLabel="&amp;" />
<Key
latin:keyLabel="*"
- latin:moreKeys="!label/more_keys_for_star" />
+ latin:moreKeys="!text/more_keys_for_star" />
<!-- U+2013: "–" EN DASH
U+2014: "—" EM DASH -->
<Key
@@ -42,7 +42,7 @@
latin:moreKeys="_,&#x2013;,&#x2014;" />
<Key
latin:keyLabel="+"
- latin:moreKeys="!label/more_keys_for_plus" />
+ latin:moreKeys="!text/more_keys_for_plus" />
<include
latin:keyboardLayout="@xml/keys_parentheses" />
</merge>
diff --git a/java/res/xml/rowkeys_symbols3.xml b/java/res/xml/rowkeys_symbols3.xml
index 4cef6b255..294e94d31 100644
--- a/java/res/xml/rowkeys_symbols3.xml
+++ b/java/res/xml/rowkeys_symbols3.xml
@@ -31,20 +31,20 @@
latin:moreKeys="&#x00A1;" />
<Key
latin:keyLabel="&quot;"
- latin:moreKeys="!label/more_keys_for_double_quote" />
+ latin:moreKeys="!text/more_keys_for_double_quote" />
<Key
latin:keyLabel="\'"
- latin:moreKeys="!label/more_keys_for_single_quote" />
+ latin:moreKeys="!text/more_keys_for_single_quote" />
<Key
latin:keyLabel=":" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_semicolon"
- latin:moreKeys="!label/more_keys_for_symbols_semicolon" />
+ latin:keyLabel="!text/keylabel_for_symbols_semicolon"
+ latin:moreKeys="!text/more_keys_for_symbols_semicolon" />
<Key
latin:keyLabel="/" />
<Key
- latin:keyLabel="!label/keylabel_for_symbols_question"
- latin:moreKeys="!label/more_keys_for_symbols_question" />
+ latin:keyLabel="!text/keylabel_for_symbols_question"
+ latin:moreKeys="!text/more_keys_for_symbols_question" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight"
diff --git a/java/res/xml/rowkeys_symbols_shift1.xml b/java/res/xml/rowkeys_symbols_shift1.xml
index af3e87e88..199e4494f 100644
--- a/java/res/xml/rowkeys_symbols_shift1.xml
+++ b/java/res/xml/rowkeys_symbols_shift1.xml
@@ -30,7 +30,7 @@
<!-- U+2022: "•" BULLET -->
<Key
latin:keyLabel="&#x2022;"
- latin:moreKeys="!label/more_keys_for_bullet" />
+ latin:moreKeys="!text/more_keys_for_bullet" />
<!-- U+221A: "√" SQUARE ROOT -->
<Key
latin:keyLabel="&#x221A;" />
diff --git a/java/res/xml/rows_colemak.xml b/java/res/xml/rows_colemak.xml
new file mode 100644
index 000000000..a1599650d
--- /dev/null
+++ b/java/res/xml/rows_colemak.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak1" />
+ <include
+ latin:keyboardLayout="@xml/key_colemak_semicolon" />
+ </Row>
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak2" />
+ </Row>
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="15%p"
+ latin:visualInsetsRight="1%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_colemak3" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight"
+ latin:visualInsetsLeft="1%p" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml/rows_dvorak.xml b/java/res/xml/rows_dvorak.xml
new file mode 100644
index 000000000..8e3d071b0
--- /dev/null
+++ b/java/res/xml/rows_dvorak.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/key_styles_common" />
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/keys_dvorak_123" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak1" />
+ </Row>
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak2" />
+ </Row>
+ <Row
+ latin:keyWidth="10%p"
+ >
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="15%p"
+ latin:visualInsetsRight="1%p" />
+ <include
+ latin:keyboardLayout="@xml/rowkeys_dvorak3" />
+ <Key
+ latin:keyStyle="deleteKeyStyle"
+ latin:keyWidth="fillRight"
+ latin:visualInsetsLeft="1%p" />
+ </Row>
+ <include
+ latin:keyboardLayout="@xml/row_dvorak4" />
+</merge>
diff --git a/java/res/xml/rows_number_normal.xml b/java/res/xml/rows_number_normal.xml
index 7015bb2d6..28bd7a1d2 100644
--- a/java/res/xml/rows_number_normal.xml
+++ b/java/res/xml/rows_number_normal.xml
@@ -61,7 +61,7 @@
<Key
latin:keyLabel="."
latin:keyLabelFlags="hasPopupHint"
- latin:moreKeys="!label/more_keys_for_am_pm"
+ latin:moreKeys="!text/more_keys_for_am_pm"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</case>
diff --git a/java/res/xml/rows_symbols.xml b/java/res/xml/rows_symbols.xml
index dcd8d59d8..2a73ffbf9 100644
--- a/java/res/xml/rows_symbols.xml
+++ b/java/res/xml/rows_symbols.xml
@@ -44,5 +44,5 @@
latin:keyboardLayout="@xml/rowkeys_symbols3" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols4" />
+ latin:keyboardLayout="@xml/row_symbols4" />
</merge>
diff --git a/java/res/xml/rows_symbols_shift.xml b/java/res/xml/rows_symbols_shift.xml
index 6205eeddd..0ab9715c1 100644
--- a/java/res/xml/rows_symbols_shift.xml
+++ b/java/res/xml/rows_symbols_shift.xml
@@ -44,5 +44,5 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift3" />
</Row>
<include
- latin:keyboardLayout="@xml/rows_symbols_shift4" />
+ latin:keyboardLayout="@xml/row_symbols_shift4" />
</merge>
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
index bb5890ad2..004ee4c22 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.accessibility;
import android.graphics.Rect;
import android.inputmethodservice.InputMethodService;
+import android.os.Bundle;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.support.v4.view.accessibility.AccessibilityNodeProviderCompat;
@@ -185,14 +186,15 @@ public class AccessibilityEntityProvider extends AccessibilityNodeProviderCompat
* the host View, with the given <code>virtualViewId</code> or the host View itself if
* <code>virtualViewId</code> equals to {@link View#NO_ID}.
*
- * @param action The action to perform.
* @param virtualViewId A client defined virtual view id.
+ * @param action The action to perform.
+ * @param arguments Optional arguments.
* @return True if the action was performed.
* @see #createAccessibilityNodeInfo(int)
* @see AccessibilityNodeInfoCompat
*/
@Override
- public boolean performAccessibilityAction(int action, int virtualViewId) {
+ public boolean performAction(int virtualViewId, int action, Bundle arguments) {
if (virtualViewId == View.NO_ID) {
// Perform the action on the host View.
switch (action) {
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 68858e5bf..0d78c39f2 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -16,6 +16,12 @@
package com.android.inputmethod.keyboard;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_OUTPUT_TEXT;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_SHIFT;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_UNSPECIFIED;
+import static com.android.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
+
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Rect;
@@ -170,11 +176,11 @@ public class Key {
mLabel = label;
mOutputText = outputText;
mCode = code;
- mEnabled = (code != Keyboard.CODE_UNSPECIFIED);
- mAltCode = Keyboard.CODE_UNSPECIFIED;
+ mEnabled = (code != CODE_UNSPECIFIED);
+ mAltCode = CODE_UNSPECIFIED;
mIconId = iconId;
- mDisabledIconId = KeyboardIconsSet.ICON_UNDEFINED;
- mPreviewIconId = KeyboardIconsSet.ICON_UNDEFINED;
+ mDisabledIconId = ICON_UNDEFINED;
+ mPreviewIconId = ICON_UNDEFINED;
// Horizontal gap is divided equally to both sides of the key.
mX = x + mHorizontalGap / 2;
mY = y;
@@ -208,9 +214,9 @@ public class Key {
if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) {
String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle);
style = keyStyles.getKeyStyle(styleName);
- if (style == null)
- throw new XmlParseUtils.ParseException(
- "Unknown key style: " + styleName, parser);
+ if (style == null) {
+ throw new XmlParseUtils.ParseException("Unknown key style: " + styleName, parser);
+ }
} else {
style = keyStyles.getEmptyKeyStyle();
}
@@ -235,12 +241,12 @@ public class Key {
R.styleable.Keyboard_Key_visualInsetsLeft, params.mBaseWidth, 0);
mVisualInsetsRight = (int) Keyboard.Builder.getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_visualInsetsRight, params.mBaseWidth, 0);
- mPreviewIconId = style.getInt(keyAttr,
- R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED);
- mIconId = style.getInt(keyAttr,
- R.styleable.Keyboard_Key_keyIcon, KeyboardIconsSet.ICON_UNDEFINED);
- mDisabledIconId = style.getInt(keyAttr,
- R.styleable.Keyboard_Key_keyIconDisabled, KeyboardIconsSet.ICON_UNDEFINED);
+ mIconId = KeySpecParser.getIconId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyIcon));
+ mDisabledIconId = KeySpecParser.getIconId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyIconDisabled));
+ mPreviewIconId = KeySpecParser.getIconId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyIconPreview));
mLabelFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags)
| row.getDefaultKeyLabelFlags();
@@ -272,8 +278,8 @@ public class Key {
if ((mLabelFlags & LABEL_FLAGS_DISABLE_ADDITIONAL_MORE_KEYS) != 0) {
additionalMoreKeys = null;
} else {
- additionalMoreKeys = style.getStringArray(
- keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys);
+ additionalMoreKeys = style.getStringArray(keyAttr,
+ R.styleable.Keyboard_Key_additionalMoreKeys);
}
moreKeys = KeySpecParser.insertAdditionalMoreKeys(moreKeys, additionalMoreKeys);
if (moreKeys != null) {
@@ -291,22 +297,21 @@ public class Key {
if ((mLabelFlags & LABEL_FLAGS_FROM_CUSTOM_ACTION_LABEL) != 0) {
mLabel = params.mId.mCustomActionLabel;
} else {
- mLabel = adjustCaseOfStringForKeyboardId(style.getString(
- keyAttr, R.styleable.Keyboard_Key_keyLabel), preserveCase, params.mId);
+ mLabel = adjustCaseOfStringForKeyboardId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyLabel), preserveCase, params.mId);
}
if ((mLabelFlags & LABEL_FLAGS_DISABLE_HINT_LABEL) != 0) {
mHintLabel = null;
} else {
- mHintLabel = adjustCaseOfStringForKeyboardId(style.getString(
- keyAttr, R.styleable.Keyboard_Key_keyHintLabel), preserveCase, params.mId);
+ mHintLabel = adjustCaseOfStringForKeyboardId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyHintLabel), preserveCase, params.mId);
}
- String outputText = adjustCaseOfStringForKeyboardId(style.getString(
- keyAttr, R.styleable.Keyboard_Key_keyOutputText), preserveCase, params.mId);
- final int code = KeySpecParser.parseCode(style.getString(
- keyAttr, R.styleable.Keyboard_Key_code),
- params.mCodesSet, Keyboard.CODE_UNSPECIFIED);
+ String outputText = adjustCaseOfStringForKeyboardId(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_keyOutputText), preserveCase, params.mId);
+ final int code = KeySpecParser.parseCode(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_code), params.mCodesSet, CODE_UNSPECIFIED);
// Choose the first letter of the label as primary code if not specified.
- if (code == Keyboard.CODE_UNSPECIFIED && TextUtils.isEmpty(outputText)
+ if (code == CODE_UNSPECIFIED && TextUtils.isEmpty(outputText)
&& !TextUtils.isEmpty(mLabel)) {
if (StringUtils.codePointCount(mLabel) == 1) {
// Use the first letter of the hint label if shiftedLetterActivated flag is
@@ -321,22 +326,21 @@ public class Key {
// In some locale and case, the character might be represented by multiple code
// points, such as upper case Eszett of German alphabet.
outputText = mLabel;
- mCode = Keyboard.CODE_OUTPUT_TEXT;
+ mCode = CODE_OUTPUT_TEXT;
}
- } else if (code == Keyboard.CODE_UNSPECIFIED && outputText != null) {
+ } else if (code == CODE_UNSPECIFIED && outputText != null) {
if (StringUtils.codePointCount(outputText) == 1) {
mCode = outputText.codePointAt(0);
outputText = null;
} else {
- mCode = Keyboard.CODE_OUTPUT_TEXT;
+ mCode = CODE_OUTPUT_TEXT;
}
} else {
mCode = adjustCaseOfCodeForKeyboardId(code, preserveCase, params.mId);
}
mOutputText = outputText;
- mAltCode = adjustCaseOfCodeForKeyboardId(KeySpecParser.parseCode(style.getString(
- keyAttr, R.styleable.Keyboard_Key_altCode),
- params.mCodesSet, Keyboard.CODE_UNSPECIFIED),
+ mAltCode = adjustCaseOfCodeForKeyboardId(KeySpecParser.parseCode(style.getString(keyAttr,
+ R.styleable.Keyboard_Key_altCode), params.mCodesSet, CODE_UNSPECIFIED),
preserveCase, params.mId);
mHashCode = computeHashCode(this);
@@ -353,7 +357,7 @@ public class Key {
final String text = new String(new int[] { code } , 0, 1);
final String casedText = adjustCaseOfStringForKeyboardId(text, preserveCase, id);
return StringUtils.codePointCount(casedText) == 1
- ? casedText.codePointAt(0) : Keyboard.CODE_UNSPECIFIED;
+ ? casedText.codePointAt(0) : CODE_UNSPECIFIED;
}
private static String adjustCaseOfStringForKeyboardId(String text, boolean preserveCase,
@@ -463,11 +467,11 @@ public class Key {
}
public boolean isShift() {
- return mCode == Keyboard.CODE_SHIFT;
+ return mCode == CODE_SHIFT;
}
public boolean isModifier() {
- return mCode == Keyboard.CODE_SHIFT || mCode == Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
+ return mCode == CODE_SHIFT || mCode == CODE_SWITCH_ALPHA_SYMBOL;
}
public boolean isRepeatable() {
@@ -586,7 +590,7 @@ public class Key {
}
public Drawable getPreviewIcon(KeyboardIconsSet iconSet) {
- return mPreviewIconId != KeyboardIconsSet.ICON_UNDEFINED
+ return mPreviewIconId != ICON_UNDEFINED
? iconSet.getIconDrawable(mPreviewIconId)
: iconSet.getIconDrawable(mIconId);
}
@@ -726,7 +730,7 @@ public class Key {
* This constructor is being used only for divider in more keys keyboard.
*/
protected Spacer(Keyboard.Params params, int x, int y, int width, int height) {
- super(params, null, null, KeyboardIconsSet.ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED,
+ super(params, null, null, ICON_UNDEFINED, CODE_UNSPECIFIED,
null, x, y, width, height, 0);
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index fca8f56c8..28855f561 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -30,7 +30,7 @@ import android.view.InflateException;
import com.android.inputmethod.keyboard.internal.KeyStyles;
import com.android.inputmethod.keyboard.internal.KeyboardCodesSet;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
-import com.android.inputmethod.keyboard.internal.KeyboardLabelsSet;
+import com.android.inputmethod.keyboard.internal.KeyboardTextsSet;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.LocaleUtils.RunInLocale;
import com.android.inputmethod.latin.R;
@@ -236,8 +236,8 @@ public class Keyboard {
public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<Key>();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
public final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
- public final KeyboardLabelsSet mLabelsSet = new KeyboardLabelsSet();
- public final KeyStyles mKeyStyles = new KeyStyles(mLabelsSet);
+ public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
+ public final KeyStyles mKeyStyles = new KeyStyles(mTextsSet);
public KeyboardLayoutSet.KeysCache mKeysCache;
@@ -313,8 +313,11 @@ public class Keyboard {
public void onAddKey(Key newKey) {
final Key key = (mKeysCache != null) ? mKeysCache.get(newKey) : newKey;
- mKeys.add(key);
- updateHistogram(key);
+ final boolean zeroWidthSpacer = key.isSpacer() && key.mWidth == 0;
+ if (!zeroWidthSpacer) {
+ mKeys.add(key);
+ updateHistogram(key);
+ }
if (key.mCode == Keyboard.CODE_SHIFT) {
mShiftKeys.add(key);
}
@@ -776,11 +779,11 @@ public class Keyboard {
params.mIconsSet.loadIcons(keyboardAttr);
final String language = params.mId.mLocale.getLanguage();
params.mCodesSet.setLanguage(language);
- params.mLabelsSet.setLanguage(language);
+ params.mTextsSet.setLanguage(language);
final RunInLocale<Void> job = new RunInLocale<Void>() {
@Override
protected Void job(Resources res) {
- params.mLabelsSet.loadStringResources(mContext);
+ params.mTextsSet.loadStringResources(mContext);
return null;
}
};
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index efb0d77ea..d50d096c6 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -467,6 +467,9 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
mSpaceIcon = (mSpaceKey != null) ? mSpaceKey.getIcon(keyboard.mIconsSet) : null;
final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
mSpacebarTextSize = keyHeight * mSpacebarTextRatio;
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.latinKeyboardView_setKeyboard(keyboard);
+ }
}
/**
diff --git a/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java b/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
index 392afca97..5712df1fc 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/AlphabetShiftState.java
@@ -18,9 +18,6 @@ package com.android.inputmethod.keyboard.internal;
import android.util.Log;
-import com.android.inputmethod.latin.ResearchLogger;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
public class AlphabetShiftState {
private static final String TAG = AlphabetShiftState.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -62,9 +59,6 @@ public class AlphabetShiftState {
}
if (DEBUG)
Log.d(TAG, "setShifted(" + newShiftState + "): " + toString(oldState) + " > " + this);
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.alphabetShiftState_setShifted(newShiftState, oldState, this);
- }
}
public void setShiftLocked(boolean newShiftLockState) {
@@ -84,9 +78,6 @@ public class AlphabetShiftState {
if (DEBUG)
Log.d(TAG, "setShiftLocked(" + newShiftLockState + "): " + toString(oldState)
+ " > " + this);
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.alphabetShiftState_setShiftLocked(newShiftLockState, oldState, this);
- }
}
public void setAutomaticShifted() {
@@ -94,9 +85,6 @@ public class AlphabetShiftState {
mState = AUTOMATIC_SHIFTED;
if (DEBUG)
Log.d(TAG, "setAutomaticShifted: " + toString(oldState) + " > " + this);
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.alphabetShiftState_setAutomaticShifted(oldState, this);
- }
}
public boolean isShiftedOrShiftLocked() {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
index 8261400b2..a44ddf182 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
@@ -30,8 +30,8 @@ import java.util.Arrays;
* The specification is comma separated texts each of which represents one "more key".
* The specification might have label or string resource reference in it. These references are
* expanded before parsing comma.
- * - Label reference should be a string representation of label (!label/label_name)
- * - String resource reference should be a string representation of resource (!label/resource_name)
+ * - Label reference should be a string representation of label (!text/label_name)
+ * - String resource reference should be a string representation of resource (!text/resource_name)
* Each "more key" specification is one of the following:
* - Label optionally followed by keyOutputText or code (keyLabel|keyOutputText).
* - Icon followed by keyOutputText or code (!icon/icon_name|!code/code_name)
@@ -51,7 +51,7 @@ public class KeySpecParser {
private static int COMMA = ',';
private static final char ESCAPE_CHAR = '\\';
private static final char LABEL_END = '|';
- private static final String PREFIX_LABEL = "!label/";
+ private static final String PREFIX_TEXT = "!text/";
private static final String PREFIX_ICON = "!icon/";
private static final String PREFIX_CODE = "!code/";
private static final String PREFIX_HEX = "0x";
@@ -76,20 +76,13 @@ public class KeySpecParser {
}
private static boolean hasIcon(String moreKeySpec) {
- if (moreKeySpec.startsWith(PREFIX_ICON)) {
- final int end = indexOfLabelEnd(moreKeySpec, 0);
- if (end > 0) {
- return true;
- }
- throw new KeySpecParserError("outputText or code not specified: " + moreKeySpec);
- }
- return false;
+ return moreKeySpec.regionMatches(true, 0, PREFIX_ICON, 0, PREFIX_ICON.length());
}
private static boolean hasCode(String moreKeySpec) {
final int end = indexOfLabelEnd(moreKeySpec, 0);
- if (end > 0 && end + 1 < moreKeySpec.length()
- && moreKeySpec.substring(end + 1).startsWith(PREFIX_CODE)) {
+ if (end > 0 && end + 1 < moreKeySpec.length() && moreKeySpec.regionMatches(
+ true, end + 1, PREFIX_CODE, 0, PREFIX_CODE.length())) {
return true;
}
return false;
@@ -210,19 +203,20 @@ public class KeySpecParser {
public static int parseCode(String text, KeyboardCodesSet codesSet, int defCode) {
if (text == null) return defCode;
- if (text.startsWith(PREFIX_CODE)) {
+ if (text.regionMatches(true, 0, PREFIX_CODE, 0, PREFIX_CODE.length())) {
return codesSet.getCode(text.substring(PREFIX_CODE.length()));
- } else if (text.startsWith(PREFIX_HEX)) {
+ } else if (text.regionMatches(true, 0, PREFIX_HEX, 0, PREFIX_HEX.length())) {
return Integer.parseInt(text.substring(PREFIX_HEX.length()), 16);
} else {
return Integer.parseInt(text);
}
}
- static int getIconId(String moreKeySpec) {
- if (hasIcon(moreKeySpec)) {
+ public static int getIconId(String moreKeySpec) {
+ if (moreKeySpec != null && hasIcon(moreKeySpec)) {
final int end = moreKeySpec.indexOf(LABEL_END, PREFIX_ICON.length());
- final String name = moreKeySpec.substring(PREFIX_ICON.length(), end);
+ final String name = (end < 0) ? moreKeySpec.substring(PREFIX_ICON.length())
+ : moreKeySpec.substring(PREFIX_ICON.length(), end);
return KeyboardIconsSet.getIconId(name);
}
return KeyboardIconsSet.ICON_UNDEFINED;
@@ -340,7 +334,7 @@ public class KeySpecParser {
}
}
- public static String resolveLabelReference(String rawText, KeyboardLabelsSet labelsSet) {
+ public static String resolveTextReference(String rawText, KeyboardTextsSet textsSet) {
int level = 0;
String text = rawText;
StringBuilder sb;
@@ -350,21 +344,23 @@ public class KeySpecParser {
throw new RuntimeException("too many @string/resource indirection: " + text);
}
+ final int prefixLen = PREFIX_TEXT.length();
final int size = text.length();
- if (size < PREFIX_LABEL.length()) {
+ if (size < prefixLen) {
return text;
}
sb = null;
for (int pos = 0; pos < size; pos++) {
final char c = text.charAt(pos);
- if (text.startsWith(PREFIX_LABEL, pos) && labelsSet != null) {
+ if (text.regionMatches(true, pos, PREFIX_TEXT, 0, prefixLen)
+ && textsSet != null) {
if (sb == null) {
sb = new StringBuilder(text.substring(0, pos));
}
- final int end = searchLabelNameEnd(text, pos + PREFIX_LABEL.length());
- final String name = text.substring(pos + PREFIX_LABEL.length(), end);
- sb.append(labelsSet.getLabel(name));
+ final int end = searchTextNameEnd(text, pos + prefixLen);
+ final String name = text.substring(pos + prefixLen, end);
+ sb.append(textsSet.getText(name));
pos = end - 1;
} else if (c == ESCAPE_CHAR) {
if (sb != null) {
@@ -385,12 +381,13 @@ public class KeySpecParser {
return text;
}
- private static int searchLabelNameEnd(String text, int start) {
+ private static int searchTextNameEnd(String text, int start) {
final int size = text.length();
for (int pos = start; pos < size; pos++) {
final char c = text.charAt(pos);
- // String resource name should be consisted of [a-z_0-9].
- if ((c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9')) {
+ // Label name should be consisted of [a-zA-Z_0-9].
+ if ((c >= 'a' && c <= 'z') || c == '_' || (c >= '0' && c <= '9')
+ || (c >= 'A' && c <= 'Z')) {
continue;
}
return pos;
@@ -398,8 +395,8 @@ public class KeySpecParser {
return size;
}
- public static String[] parseCsvString(String rawText, KeyboardLabelsSet labelsSet) {
- final String text = resolveLabelReference(rawText, labelsSet);
+ public static String[] parseCsvString(String rawText, KeyboardTextsSet textsSet) {
+ final String text = resolveTextReference(rawText, textsSet);
final int size = text.length();
if (size == 0) {
return null;
@@ -442,17 +439,19 @@ public class KeySpecParser {
if (moreKeys == null) {
return defaultValue;
}
+ final int keyLen = key.length();
boolean foundValue = false;
int value = defaultValue;
for (int i = 0; i < moreKeys.length; i++) {
final String moreKeySpec = moreKeys[i];
- if (moreKeySpec == null || !moreKeySpec.startsWith(key)) {
+ if (moreKeySpec == null || !moreKeySpec.regionMatches(true, 0, key, 0, keyLen)) {
continue;
}
moreKeys[i] = null;
try {
if (!foundValue) {
- value = Integer.parseInt(moreKeySpec.substring(key.length()));
+ value = Integer.parseInt(moreKeySpec.substring(keyLen));
+ foundValue = true;
}
} catch (NumberFormatException e) {
throw new RuntimeException(
@@ -469,7 +468,7 @@ public class KeySpecParser {
boolean value = false;
for (int i = 0; i < moreKeys.length; i++) {
final String moreKeySpec = moreKeys[i];
- if (moreKeySpec == null || !moreKeySpec.equals(key)) {
+ if (moreKeySpec == null || !moreKeySpec.equalsIgnoreCase(key)) {
continue;
}
moreKeys[i] = null;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index 8e0b21607..b32172ebe 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -35,19 +35,19 @@ public class KeyStyles {
private final HashMap<String, DeclaredKeyStyle> mStyles =
new HashMap<String, DeclaredKeyStyle>();
- private final KeyboardLabelsSet mLabelsSet;
+ private final KeyboardTextsSet mTextsSet;
private final KeyStyle mEmptyKeyStyle;
- public KeyStyles(KeyboardLabelsSet labelsSet) {
- mLabelsSet = labelsSet;
- mEmptyKeyStyle = new EmptyKeyStyle(labelsSet);
+ public KeyStyles(KeyboardTextsSet textsSet) {
+ mTextsSet = textsSet;
+ mEmptyKeyStyle = new EmptyKeyStyle(textsSet);
}
public static abstract class KeyStyle {
- protected final KeyboardLabelsSet mLabelsSet;
+ protected final KeyboardTextsSet mTextsSet;
- public KeyStyle(KeyboardLabelsSet labelsSet) {
- mLabelsSet = labelsSet;
+ public KeyStyle(KeyboardTextsSet textsSet) {
+ mTextsSet = textsSet;
}
public abstract String[] getStringArray(TypedArray a, int index);
@@ -57,22 +57,22 @@ public class KeyStyles {
protected String parseString(TypedArray a, int index) {
if (a.hasValue(index)) {
- return KeySpecParser.resolveLabelReference(a.getString(index), mLabelsSet);
+ return KeySpecParser.resolveTextReference(a.getString(index), mTextsSet);
}
return null;
}
protected String[] parseStringArray(TypedArray a, int index) {
if (a.hasValue(index)) {
- return KeySpecParser.parseCsvString(a.getString(index), mLabelsSet);
+ return KeySpecParser.parseCsvString(a.getString(index), mTextsSet);
}
return null;
}
}
private static class EmptyKeyStyle extends KeyStyle {
- public EmptyKeyStyle(KeyboardLabelsSet labelsSet) {
- super(labelsSet);
+ public EmptyKeyStyle(KeyboardTextsSet textsSet) {
+ super(textsSet);
}
@Override
@@ -99,8 +99,8 @@ public class KeyStyles {
private static class DeclaredKeyStyle extends KeyStyle {
private final HashMap<Integer, Object> mStyleAttributes = new HashMap<Integer, Object>();
- public DeclaredKeyStyle(KeyboardLabelsSet labelsSet) {
- super(labelsSet);
+ public DeclaredKeyStyle(KeyboardTextsSet textsSet) {
+ super(textsSet);
}
@Override
@@ -145,9 +145,9 @@ public class KeyStyles {
readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
readStringArray(keyAttr, R.styleable.Keyboard_Key_additionalMoreKeys);
readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags);
- readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon);
- readInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled);
- readInt(keyAttr, R.styleable.Keyboard_Key_keyIconPreview);
+ readString(keyAttr, R.styleable.Keyboard_Key_keyIcon);
+ readString(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled);
+ readString(keyAttr, R.styleable.Keyboard_Key_keyIconPreview);
readInt(keyAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn);
readInt(keyAttr, R.styleable.Keyboard_Key_backgroundType);
readFlag(keyAttr, R.styleable.Keyboard_Key_keyActionFlags);
@@ -195,7 +195,7 @@ public class KeyStyles {
}
}
- final DeclaredKeyStyle style = new DeclaredKeyStyle(mLabelsSet);
+ final DeclaredKeyStyle style = new DeclaredKeyStyle(mTextsSet);
if (keyStyleAttr.hasValue(R.styleable.Keyboard_KeyStyle_parentStyle)) {
final String parentStyle = keyStyleAttr.getString(
R.styleable.Keyboard_KeyStyle_parentStyle);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
index 736a96c56..c10a394c1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
@@ -33,7 +33,10 @@ public class KeyboardCodesSet {
}
public int getCode(final String name) {
- final Integer id = sNameToIdMap.get(name);
+ Integer id = sNameToIdMap.get(name);
+ if (id == null) {
+ id = sNameToIdMap.get(name.toLowerCase());
+ }
if (id == null) throw new RuntimeException("Unknown key code: " + name);
return mCodes[id];
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index ded89b1b8..a86a9577f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -28,46 +28,52 @@ import java.util.HashMap;
public class KeyboardIconsSet {
private static final String TAG = KeyboardIconsSet.class.getSimpleName();
- // The value should be aligned with the enum value of Key.keyIcon.
public static final int ICON_UNDEFINED = 0;
- private static final int NUM_ICONS = 16;
-
- private final Drawable[] mIcons = new Drawable[NUM_ICONS + 1];
+ private static final int ATTR_UNDEFINED = 0;
private static final HashMap<Integer, Integer> ATTR_ID_TO_ICON_ID
= new HashMap<Integer, Integer>();
- private static final HashMap<String, Integer> NAME_TO_ICON_ID = new HashMap<String, Integer>();
- private static final String[] ICON_NAMES = new String[NUM_ICONS + 1];
- private static final int ATTR_UNDEFINED = 0;
- static {
- // The key value should be aligned with the enum value of Key.keyIcon.
- addIconIdMap(0, "undefined", ATTR_UNDEFINED);
- addIconIdMap(1, "shiftKey", R.styleable.Keyboard_iconShiftKey);
- addIconIdMap(2, "deleteKey", R.styleable.Keyboard_iconDeleteKey);
- addIconIdMap(3, "settingsKey", R.styleable.Keyboard_iconSettingsKey);
- addIconIdMap(4, "spaceKey", R.styleable.Keyboard_iconSpaceKey);
- addIconIdMap(5, "returnKey", R.styleable.Keyboard_iconReturnKey);
- addIconIdMap(6, "searchKey", R.styleable.Keyboard_iconSearchKey);
- addIconIdMap(7, "tabKey", R.styleable.Keyboard_iconTabKey);
- addIconIdMap(8, "shortcutKey", R.styleable.Keyboard_iconShortcutKey);
- addIconIdMap(9, "shortcutForLabel", R.styleable.Keyboard_iconShortcutForLabel);
- addIconIdMap(10, "spaceKeyForNumberLayout",
- R.styleable.Keyboard_iconSpaceKeyForNumberLayout);
- addIconIdMap(11, "shiftKeyShifted", R.styleable.Keyboard_iconShiftKeyShifted);
- addIconIdMap(12, "disabledShortcurKey", R.styleable.Keyboard_iconDisabledShortcutKey);
- addIconIdMap(13, "previewTabKey", R.styleable.Keyboard_iconPreviewTabKey);
- addIconIdMap(14, "languageSwitchKey", R.styleable.Keyboard_iconLanguageSwitchKey);
- addIconIdMap(15, "zwnjKey", R.styleable.Keyboard_iconZwnjKey);
- addIconIdMap(16, "zwjKey", R.styleable.Keyboard_iconZwjKey);
- }
+ // Lower case icon name to icon id map.
+ private static final HashMap<String, Integer> sLowerCaseNameToIdsMap =
+ new HashMap<String, Integer>();
+
+ private static final Object[] NAMES_AND_ATTR_IDS = {
+ "undefined", ATTR_UNDEFINED,
+ "shift_key", R.styleable.Keyboard_iconShiftKey,
+ "delete_key", R.styleable.Keyboard_iconDeleteKey,
+ "settings_key", R.styleable.Keyboard_iconSettingsKey,
+ "space_key", R.styleable.Keyboard_iconSpaceKey,
+ "enter_key", R.styleable.Keyboard_iconEnterKey,
+ "search_key", R.styleable.Keyboard_iconSearchKey,
+ "tab_key", R.styleable.Keyboard_iconTabKey,
+ "shortcut_key", R.styleable.Keyboard_iconShortcutKey,
+ "shortcut_for_label", R.styleable.Keyboard_iconShortcutForLabel,
+ "space_key_for_number_layout", R.styleable.Keyboard_iconSpaceKeyForNumberLayout,
+ "shift_key_shifted", R.styleable.Keyboard_iconShiftKeyShifted,
+ "shortcut_key_disabled", R.styleable.Keyboard_iconShortcutKeyDisabled,
+ "tab_key_preview", R.styleable.Keyboard_iconTabKeyPreview,
+ "language_switch_key", R.styleable.Keyboard_iconLanguageSwitchKey,
+ "zwnj_key", R.styleable.Keyboard_iconZwnjKey,
+ "zwj_key", R.styleable.Keyboard_iconZwjKey,
+ };
+
+ private static int NUM_ICONS = NAMES_AND_ATTR_IDS.length / 2;
+ private static final String[] ICON_NAMES = new String[NUM_ICONS];
+ private final Drawable[] mIcons = new Drawable[NUM_ICONS];
- private static void addIconIdMap(int iconId, String name, int attrId) {
- if (attrId != ATTR_UNDEFINED) {
- ATTR_ID_TO_ICON_ID.put(attrId, iconId);
+ static {
+ int iconId = ICON_UNDEFINED;
+ for (int i = 0; i < NAMES_AND_ATTR_IDS.length; i += 2) {
+ final String name = (String)NAMES_AND_ATTR_IDS[i];
+ final Integer attrId = (Integer)NAMES_AND_ATTR_IDS[i + 1];
+ if (attrId != ATTR_UNDEFINED) {
+ ATTR_ID_TO_ICON_ID.put(attrId, iconId);
+ }
+ sLowerCaseNameToIdsMap.put(name, iconId);
+ ICON_NAMES[iconId] = name;
+ iconId++;
}
- NAME_TO_ICON_ID.put(name, iconId);
- ICON_NAMES[iconId] = name;
}
public void loadIcons(final TypedArray keyboardAttrs) {
@@ -93,8 +99,11 @@ public class KeyboardIconsSet {
return isValidIconId(iconId) ? ICON_NAMES[iconId] : "unknown<" + iconId + ">";
}
- public static int getIconId(final String name) {
- final Integer iconId = NAME_TO_ICON_ID.get(name);
+ static int getIconId(final String name) {
+ Integer iconId = sLowerCaseNameToIdsMap.get(name);
+ if (iconId == null) {
+ iconId = sLowerCaseNameToIdsMap.get(name.toLowerCase());
+ }
if (iconId != null) {
return iconId;
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 6949c9d12..2d80a798d 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -141,9 +141,6 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onSaveKeyboardState: saved=" + state + " " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_onSaveKeyboardState(this, state.toString());
- }
}
private void onRestoreKeyboardState() {
@@ -151,9 +148,6 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onRestoreKeyboardState: saved=" + state + " " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_onRestoreKeyboardState(this, state.toString());
- }
if (!state.mIsValid || state.mIsAlphabetMode) {
setAlphabetKeyboard();
} else {
@@ -186,9 +180,6 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setShifted: shiftMode=" + shiftModeToString(shiftMode) + " " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_setShifted(this, shiftModeToString(shiftMode));
- }
if (!mIsAlphabetMode) return;
final int prevShiftMode;
if (mAlphabetShiftState.isAutomaticShifted()) {
@@ -228,9 +219,6 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setShiftLocked: shiftLocked=" + shiftLocked + " " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_setShiftLocked(this, shiftLocked);
- }
if (!mIsAlphabetMode) return;
if (shiftLocked && (!mAlphabetShiftState.isShiftLocked()
|| mAlphabetShiftState.isShiftLockShifted())) {
@@ -246,9 +234,6 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "toggleAlphabetAndSymbols: " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_toggleAlphabetAndSymbols(this);
- }
if (mIsAlphabetMode) {
mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
if (mPrevSymbolsKeyboardWasShifted) {
@@ -280,9 +265,6 @@ public class KeyboardState {
Log.d(TAG, "setAlphabetKeyboard");
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_setAlphabetKeyboard();
- }
mSwitchActions.setAlphabetKeyboard();
mIsAlphabetMode = true;
mIsSymbolShifted = false;
@@ -294,9 +276,6 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setSymbolsKeyboard");
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_setSymbolsKeyboard();
- }
mSwitchActions.setSymbolsKeyboard();
mIsAlphabetMode = false;
mIsSymbolShifted = false;
@@ -309,9 +288,6 @@ public class KeyboardState {
if (DEBUG_ACTION) {
Log.d(TAG, "setSymbolsShiftedKeyboard");
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_setSymbolsShiftedKeyboard();
- }
mSwitchActions.setSymbolsShiftedKeyboard();
mIsAlphabetMode = false;
mIsSymbolShifted = true;
@@ -399,9 +375,6 @@ public class KeyboardState {
if (DEBUG_EVENT) {
Log.d(TAG, "onUpdateShiftState: autoCaps=" + autoCaps + " " + this);
}
- if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.keyboardState_onUpdateShiftState(this, autoCaps);
- }
updateAlphabetShiftState(autoCaps);
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 3ade2dda7..d0f27a9a8 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -25,22 +25,23 @@ import java.util.HashMap;
/**
* !!!!! DO NOT EDIT THIS FILE !!!!!
- * This file is generated by tools/makelabel.
+ * This file is generated by tools/maketext.
*/
-public final class KeyboardLabelsSet {
- // Language to labels map.
- private static final HashMap<String, String[]> sLocaleToLabelsMap =
+public final class KeyboardTextsSet {
+ // Language to texts map.
+ private static final HashMap<String, String[]> sLocaleToTextsMap =
new HashMap<String, String[]>();
- private static final HashMap<String, Integer> sNameToIdMap = new HashMap<String, Integer>();
+ private static final HashMap<String, Integer> sLowerCaseNameToIdsMap =
+ new HashMap<String, Integer>();
- private String[] mLabels;
- // Resource name to label map.
- private HashMap<String, String> mResourceNameToLabelsMap = new HashMap<String, String>();
+ private String[] mTexts;
+ // Resource name to text map.
+ private HashMap<String, String> mResourceNameToTextsMap = new HashMap<String, String>();
public void setLanguage(final String language) {
- mLabels = sLocaleToLabelsMap.get(language);
- if (mLabels == null) {
- mLabels = LANGUAGE_DEFAULT;
+ mTexts = sLocaleToTextsMap.get(language);
+ if (mTexts == null) {
+ mTexts = LANGUAGE_DEFAULT;
}
}
@@ -55,22 +56,31 @@ public final class KeyboardLabelsSet {
final String packageName = res.getResourcePackageName(referenceId);
for (final String resName : resourceNames) {
final int resId = res.getIdentifier(resName, "string", packageName);
- mResourceNameToLabelsMap.put(resName, res.getString(resId));
+ mResourceNameToTextsMap.put(resName, res.getString(resId));
}
}
- public String getLabel(final String name) {
- if (mResourceNameToLabelsMap.containsKey(name)) {
- return mResourceNameToLabelsMap.get(name);
+ public String getText(final String name) {
+ String lowerCaseName = null;
+ String text = mResourceNameToTextsMap.get(name);
+ if (text == null) {
+ lowerCaseName = name.toLowerCase();
+ text = mResourceNameToTextsMap.get(lowerCaseName);
+ }
+ if (text != null) {
+ return text;
+ }
+ Integer id = sLowerCaseNameToIdsMap.get(name);
+ if (id == null) {
+ id = sLowerCaseNameToIdsMap.get(lowerCaseName); // lowerCaseName != null
}
- final Integer id = sNameToIdMap.get(name);
if (id == null) throw new RuntimeException("Unknown label: " + name);
- final String label = (id < mLabels.length) ? mLabels[id] : null;
- return (label == null) ? LANGUAGE_DEFAULT[id] : label;
+ text = (id < mTexts.length) ? mTexts[id] : null;
+ return (text == null) ? LANGUAGE_DEFAULT[id] : text;
}
private static final String[] RESOURCE_NAMES = {
- // These labels' name should be aligned with the @string/<name> in values/strings.xml.
+ // These texts' name should be aligned with the @string/<name> in values/strings.xml.
// Labels for action.
"label_go_key",
// "label_search_key",
@@ -138,80 +148,81 @@ public final class KeyboardLabelsSet {
/* 48 */ "more_keys_for_smiley",
/* 49 */ "more_keys_for_punctuation",
/* 50 */ "keyhintlabel_for_punctuation",
- /* 51 */ "keylabel_for_popular_domain",
- /* 52 */ "more_keys_for_popular_domain",
- /* 53 */ "keylabel_for_symbols_1",
- /* 54 */ "keylabel_for_symbols_2",
- /* 55 */ "keylabel_for_symbols_3",
- /* 56 */ "keylabel_for_symbols_4",
- /* 57 */ "keylabel_for_symbols_5",
- /* 58 */ "keylabel_for_symbols_6",
- /* 59 */ "keylabel_for_symbols_7",
- /* 60 */ "keylabel_for_symbols_8",
- /* 61 */ "keylabel_for_symbols_9",
- /* 62 */ "keylabel_for_symbols_0",
- /* 63 */ "additional_more_keys_for_symbols_1",
- /* 64 */ "additional_more_keys_for_symbols_2",
- /* 65 */ "additional_more_keys_for_symbols_3",
- /* 66 */ "additional_more_keys_for_symbols_4",
- /* 67 */ "additional_more_keys_for_symbols_5",
- /* 68 */ "additional_more_keys_for_symbols_6",
- /* 69 */ "additional_more_keys_for_symbols_7",
- /* 70 */ "additional_more_keys_for_symbols_8",
- /* 71 */ "additional_more_keys_for_symbols_9",
- /* 72 */ "additional_more_keys_for_symbols_0",
- /* 73 */ "more_keys_for_symbols_1",
- /* 74 */ "more_keys_for_symbols_2",
- /* 75 */ "more_keys_for_symbols_3",
- /* 76 */ "more_keys_for_symbols_4",
- /* 77 */ "more_keys_for_symbols_5",
- /* 78 */ "more_keys_for_symbols_6",
- /* 79 */ "more_keys_for_symbols_7",
- /* 80 */ "more_keys_for_symbols_8",
- /* 81 */ "more_keys_for_symbols_9",
- /* 82 */ "more_keys_for_symbols_0",
- /* 83 */ "more_keys_for_am_pm",
- /* 84 */ "settings_as_more_key",
- /* 85 */ "keylabel_for_comma",
- /* 86 */ "more_keys_for_comma",
- /* 87 */ "action_next_as_more_key",
- /* 88 */ "action_previous_as_more_key",
- /* 89 */ "keylabel_for_symbols_question",
- /* 90 */ "keylabel_for_symbols_semicolon",
- /* 91 */ "keylabel_for_symbols_percent",
- /* 92 */ "more_keys_for_symbols_question",
- /* 93 */ "more_keys_for_symbols_semicolon",
- /* 94 */ "more_keys_for_symbols_percent",
- /* 95 */ "keylabel_for_tablet_comma",
- /* 96 */ "keyhintlabel_for_tablet_comma",
- /* 97 */ "more_keys_for_tablet_comma",
- /* 98 */ "keyhintlabel_for_tablet_period",
- /* 99 */ "more_keys_for_tablet_period",
- /* 100 */ "keylabel_for_apostrophe",
- /* 101 */ "keylabel_for_dash",
- /* 102 */ "keyhintlabel_for_apostrophe",
- /* 103 */ "keyhintlabel_for_dash",
- /* 104 */ "more_keys_for_apostrophe",
- /* 105 */ "more_keys_for_dash",
- /* 106 */ "more_keys_for_bullet",
- /* 107 */ "more_keys_for_star",
- /* 108 */ "more_keys_for_plus",
- /* 109 */ "more_keys_for_left_parenthesis",
- /* 110 */ "more_keys_for_right_parenthesis",
- /* 111 */ "more_keys_for_less_than",
- /* 112 */ "more_keys_for_greater_than",
- /* 113 */ "label_to_more_symbol_key",
- /* 114 */ "label_to_more_symbol_for_tablet_key",
- /* 115 */ "label_tab_key",
- /* 116 */ "label_to_phone_numeric_key",
- /* 117 */ "label_to_phone_symbols_key",
- /* 118 */ "label_time_am",
- /* 119 */ "label_time_pm",
+ /* 51 */ "more_keys_for_star",
+ /* 52 */ "more_keys_for_plus",
+ /* 53 */ "more_keys_for_left_parenthesis",
+ /* 54 */ "more_keys_for_right_parenthesis",
+ /* 55 */ "more_keys_for_less_than",
+ /* 56 */ "more_keys_for_greater_than",
+ /* 57 */ "keylabel_for_popular_domain",
+ /* 58 */ "more_keys_for_popular_domain",
+ /* 59 */ "keylabel_for_symbols_1",
+ /* 60 */ "keylabel_for_symbols_2",
+ /* 61 */ "keylabel_for_symbols_3",
+ /* 62 */ "keylabel_for_symbols_4",
+ /* 63 */ "keylabel_for_symbols_5",
+ /* 64 */ "keylabel_for_symbols_6",
+ /* 65 */ "keylabel_for_symbols_7",
+ /* 66 */ "keylabel_for_symbols_8",
+ /* 67 */ "keylabel_for_symbols_9",
+ /* 68 */ "keylabel_for_symbols_0",
+ /* 69 */ "additional_more_keys_for_symbols_1",
+ /* 70 */ "additional_more_keys_for_symbols_2",
+ /* 71 */ "additional_more_keys_for_symbols_3",
+ /* 72 */ "additional_more_keys_for_symbols_4",
+ /* 73 */ "additional_more_keys_for_symbols_5",
+ /* 74 */ "additional_more_keys_for_symbols_6",
+ /* 75 */ "additional_more_keys_for_symbols_7",
+ /* 76 */ "additional_more_keys_for_symbols_8",
+ /* 77 */ "additional_more_keys_for_symbols_9",
+ /* 78 */ "additional_more_keys_for_symbols_0",
+ /* 79 */ "more_keys_for_symbols_1",
+ /* 80 */ "more_keys_for_symbols_2",
+ /* 81 */ "more_keys_for_symbols_3",
+ /* 82 */ "more_keys_for_symbols_4",
+ /* 83 */ "more_keys_for_symbols_5",
+ /* 84 */ "more_keys_for_symbols_6",
+ /* 85 */ "more_keys_for_symbols_7",
+ /* 86 */ "more_keys_for_symbols_8",
+ /* 87 */ "more_keys_for_symbols_9",
+ /* 88 */ "more_keys_for_symbols_0",
+ /* 89 */ "keylabel_for_comma",
+ /* 90 */ "more_keys_for_comma",
+ /* 91 */ "keylabel_for_symbols_question",
+ /* 92 */ "keylabel_for_symbols_semicolon",
+ /* 93 */ "keylabel_for_symbols_percent",
+ /* 94 */ "more_keys_for_symbols_question",
+ /* 95 */ "more_keys_for_symbols_semicolon",
+ /* 96 */ "more_keys_for_symbols_percent",
+ /* 97 */ "keylabel_for_tablet_comma",
+ /* 98 */ "keyhintlabel_for_tablet_comma",
+ /* 99 */ "more_keys_for_tablet_comma",
+ /* 100 */ "keyhintlabel_for_tablet_period",
+ /* 101 */ "more_keys_for_tablet_period",
+ /* 102 */ "keylabel_for_apostrophe",
+ /* 103 */ "keylabel_for_dash",
+ /* 104 */ "keyhintlabel_for_apostrophe",
+ /* 105 */ "keyhintlabel_for_dash",
+ /* 106 */ "more_keys_for_apostrophe",
+ /* 107 */ "more_keys_for_dash",
+ /* 108 */ "more_keys_for_bullet",
+ /* 109 */ "more_keys_for_am_pm",
+ /* 110 */ "settings_as_more_key",
+ /* 111 */ "shortcut_as_more_key",
+ /* 112 */ "action_next_as_more_key",
+ /* 113 */ "action_previous_as_more_key",
+ /* 114 */ "label_to_more_symbol_key",
+ /* 115 */ "label_to_more_symbol_for_tablet_key",
+ /* 116 */ "label_tab_key",
+ /* 117 */ "label_to_phone_numeric_key",
+ /* 118 */ "label_to_phone_symbols_key",
+ /* 119 */ "label_time_am",
+ /* 120 */ "label_time_pm",
};
private static final String EMPTY = "";
- /* Default labels */
+ /* Default texts */
private static final String[] LANGUAGE_DEFAULT = {
/* 0~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
@@ -220,9 +231,11 @@ public final class KeyboardLabelsSet {
EMPTY, EMPTY,
/* ~40 */
/* 41 */ "!fixedColumnOrder!4,\u2018,\u2019,\u201A,\u201B",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;</string>
/* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
// U+00A2: "¢" CENT SIGN
// U+00A3: "£" POUND SIGN
@@ -236,120 +249,122 @@ public final class KeyboardLabelsSet {
/* 48 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
/* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
/* 50 */ EMPTY,
- /* 51 */ ".com",
+ // U+2020: "†" DAGGER
+ // U+2021: "‡" DOUBLE DAGGER
+ // U+2605: "★" BLACK STAR
+ /* 51 */ "\u2020,\u2021,\u2605",
+ // U+00B1: "±" PLUS-MINUS SIGN
+ /* 52 */ "\u00B1",
+ // The all letters need to be mirrored are found at
+ // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
+ /* 53 */ "!fixedColumnOrder!3,<,{,[",
+ /* 54 */ "!fixedColumnOrder!3,>,},]",
+ // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ // U+2264: "≤" LESS-THAN OR EQUAL TO
+ // U+2265: "≥" GREATER-THAN EQUAL TO
+ // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // The following characters don't need BIDI mirroring.
+ // U+2018: "‘" LEFT SINGLE QUOTATION MARK
+ // U+2019: "’" RIGHT SINGLE QUOTATION MARK
+ // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ // U+201C: "“" LEFT DOUBLE QUOTATION MARK
+ // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ /* 55 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
+ /* 57 */ ".com",
// popular web domains for the locale - most popular, displayed on the keyboard
- /* 52 */ "!hasLabels!,.net,.org,.gov,.edu",
- /* 53 */ "1",
- /* 54 */ "2",
- /* 55 */ "3",
- /* 56 */ "4",
- /* 57 */ "5",
- /* 58 */ "6",
- /* 59 */ "7",
- /* 60 */ "8",
- /* 61 */ "9",
- /* 62 */ "0",
- /* 63~ */
+ /* 58 */ "!hasLabels!,.net,.org,.gov,.edu",
+ /* 59 */ "1",
+ /* 60 */ "2",
+ /* 61 */ "3",
+ /* 62 */ "4",
+ /* 63 */ "5",
+ /* 64 */ "6",
+ /* 65 */ "7",
+ /* 66 */ "8",
+ /* 67 */ "9",
+ /* 68 */ "0",
+ /* 69~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~72 */
+ /* ~78 */
// U+00B9: "¹" SUPERSCRIPT ONE
// U+00BD: "½" VULGAR FRACTION ONE HALF
// U+2153: "⅓" VULGAR FRACTION ONE THIRD
// U+00BC: "¼" VULGAR FRACTION ONE QUARTER
// U+215B: "⅛" VULGAR FRACTION ONE EIGHTH
- /* 73 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
+ /* 79 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
// U+00B2: "²" SUPERSCRIPT TWO
// U+2154: "⅔" VULGAR FRACTION TWO THIRDS
- /* 74 */ "\u00B2,\u2154",
+ /* 80 */ "\u00B2,\u2154",
// U+00B3: "³" SUPERSCRIPT THREE
// U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
// U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
- /* 75 */ "\u00B3,\u00BE,\u215C",
+ /* 81 */ "\u00B3,\u00BE,\u215C",
// U+2074: "⁴" SUPERSCRIPT FOUR
- /* 76 */ "\u2074",
+ /* 82 */ "\u2074",
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
- /* 77 */ "\u215D",
- /* 78 */ EMPTY,
+ /* 83 */ "\u215D",
+ /* 84 */ EMPTY,
// U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
- /* 79 */ "\u215E",
- /* 80 */ EMPTY,
- /* 81 */ EMPTY,
+ /* 85 */ "\u215E",
+ /* 86 */ EMPTY,
+ /* 87 */ EMPTY,
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
// U+2205: "∅" EMPTY SET
- /* 82 */ "\u207F,\u2205",
- /* 83 */ "!fixedColumnOrder!2,!hasLabels!,!label/label_time_am,!label/label_time_pm",
- /* 84 */ "!icon/settingsKey|!code/key_settings",
- /* 85 */ ",",
- /* 86 */ EMPTY,
- /* 87 */ "!hasLabels!,!label/label_next_key|!code/key_action_next",
- /* 88 */ "!hasLabels!,!label/label_previous_key|!code/key_action_previous",
- /* 89 */ "?",
- /* 90 */ ";",
- /* 91 */ "%",
+ /* 88 */ "\u207F,\u2205",
+ /* 89 */ ",",
+ /* 90 */ EMPTY,
+ /* 91 */ "?",
+ /* 92 */ ";",
+ /* 93 */ "%",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 92 */ "\u00BF",
- /* 93 */ EMPTY,
+ /* 94 */ "\u00BF",
+ /* 95 */ EMPTY,
// U+2030: "‰" PER MILLE SIGN
- /* 94 */ "\u2030",
- /* 95 */ ",",
- /* 96 */ "!",
- /* 97 */ "!",
- /* 98 */ "?",
- /* 99 */ "?",
- /* 100 */ "\'",
- /* 101 */ "-",
- /* 102 */ "\"",
- /* 103 */ "_",
+ /* 96 */ "\u2030",
+ /* 97 */ ",",
+ /* 98 */ "!",
+ /* 99 */ "!",
+ /* 100 */ "?",
+ /* 101 */ "?",
+ /* 102 */ "\'",
+ /* 103 */ "-",
/* 104 */ "\"",
/* 105 */ "_",
+ /* 106 */ "\"",
+ /* 107 */ "_",
// U+266A: "♪" EIGHTH NOTE
// U+2665: "♥" BLACK HEART SUIT
// U+2660: "♠" BLACK SPADE SUIT
// U+2666: "♦" BLACK DIAMOND SUIT
// U+2663: "♣" BLACK CLUB SUIT
- /* 106 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
- // U+2020: "†" DAGGER
- // U+2021: "‡" DOUBLE DAGGER
- // U+2605: "★" BLACK STAR
- /* 107 */ "\u2020,\u2021,\u2605",
- // U+00B1: "±" PLUS-MINUS SIGN
- /* 108 */ "\u00B1",
- // The all letters need to be mirrored are found at
- // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
- /* 109 */ "!fixedColumnOrder!3,<,{,[",
- /* 110 */ "!fixedColumnOrder!3,>,},]",
- // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- // U+2264: "≤" LESS-THAN OR EQUAL TO
- // U+2265: "≥" GREATER-THAN EQUAL TO
- // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- // The following characters don't need BIDI mirroring.
- // U+2018: "‘" LEFT SINGLE QUOTATION MARK
- // U+2019: "’" RIGHT SINGLE QUOTATION MARK
- // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
- // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
- // U+201C: "“" LEFT DOUBLE QUOTATION MARK
- // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
- // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 111 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
- /* 112 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
+ /* 108 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
+ /* 109 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
+ /* 110 */ "!icon/settings_key|!code/key_settings",
+ /* 111 */ "!icon/shortcut_key|!code/key_shortcut",
+ /* 112 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
+ /* 113 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
// Label for "switch to more symbol" modifier key. Must be short to fit on key!
- /* 113 */ "= \\ <",
+ /* 114 */ "= \\ <",
// Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key!
- /* 114 */ "~ \\ {",
+ /* 115 */ "~ \\ {",
// Label for "Tab" key. Must be short to fit on key!
- /* 115 */ "Tab",
+ /* 116 */ "Tab",
// Label for "switch to phone numeric" key. Must be short to fit on key!
- /* 116 */ "123",
- // Label for "switch to phone symbols" key. Must be short to fit on key! U+FF0A: "*" FULLWIDTH ASTERISK
+ /* 117 */ "123",
+ // Label for "switch to phone symbols" key. Must be short to fit on key!
+ // U+FF0A: "*" FULLWIDTH ASTERISK
// U+FF03: "#" FULLWIDTH NUMBER SIGN
- /* 117 */ "\uFF0A\uFF03",
+ /* 118 */ "\uFF0A\uFF03",
// Key label for "ante meridiem"
- /* 118 */ "AM",
+ /* 119 */ "AM",
// Key label for "post meridiem"
- /* 119 */ "PM",
+ /* 120 */ "PM",
};
/* Language ar: Arabic */
@@ -359,132 +374,141 @@ public final class KeyboardLabelsSet {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
/* ~41 */
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
/* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
/* 44~ */
null, null, null, null, null,
/* ~48 */
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
- // U+061B: "؛" ARABIC SEMICOLON U+0650: "ِ" ARABIC KASRA
+ // U+061B: "؛" ARABIC SEMICOLON
+ // U+0650: "ِ" ARABIC KASRA
// U+064E: "َ" ARABIC FATHA
// U+064D: "ٍ" ARABIC KASRATAN
// U+064B: "ً" ARABIC FATHATAN
// U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
// U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
// U+0655: "ٕ" ARABIC HAMZA BELOW
- // U+0654: "ٔ" ARABIC HAMZA ABOVE U+064F: "ُ" ARABIC DAMMA
+ // U+0654: "ٔ" ARABIC HAMZA ABOVE
+ // U+064F: "ُ" ARABIC DAMMA
// U+064C: "ٌ" ARABIC DAMMATAN
// U+0651: "ّ" ARABIC SHADDA
// U+0652: "ْ" ARABIC SUKUN
// U+0653: "ٓ" ARABIC MADDAH ABOVE
- // U+0640: "ـ" ARABIC TATWEEL In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
+ // U+0640: "ـ" ARABIC TATWEEL
+ // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
/* 49 */ "!fixedColumnOrder!8,\",\',-,:,!,\u061F,\u060C,\u061B,\u0650,\u064E,\u064D,\u064B,\u0656,\u0670,\u0655,\u0654,\u064F,\u064C,\u0651,\u0652,\u0653,\u0640\u0640\u0640|\u0640,/",
/* 50 */ "\u064B",
- /* 51 */ null,
+ // U+2605: "★" BLACK STAR
+ // U+066D: "٭" ARABIC FIVE POINTED STAR
+ /* 51 */ "\u2605,\u066D",
/* 52 */ null,
+ // The all letters need to be mirrored are found at
+ // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
+ // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
+ // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
+ // TODO: DroidSansArabic lacks the glyph of U+FD3E ORNATE LEFT PARENTHESIS
+ // TODO: DroidSansArabic lacks the glyph of U+FD3F ORNATE RIGHT PARENTHESIS
+ /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ // U+2264: "≤" LESS-THAN OR EQUAL TO
+ // U+2265: "≥" GREATER-THAN EQUAL TO
+ // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ // The following characters don't need BIDI mirroring.
+ // U+2018: "‘" LEFT SINGLE QUOTATION MARK
+ // U+2019: "’" RIGHT SINGLE QUOTATION MARK
+ // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ // U+201C: "“" LEFT DOUBLE QUOTATION MARK
+ // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 57 */ null,
+ /* 58 */ null,
// U+0661: "١" ARABIC-INDIC DIGIT ONE
- /* 53 */ "\u0661",
+ /* 59 */ "\u0661",
// U+0662: "٢" ARABIC-INDIC DIGIT TWO
- /* 54 */ "\u0662",
+ /* 60 */ "\u0662",
// U+0663: "٣" ARABIC-INDIC DIGIT THREE
- /* 55 */ "\u0663",
+ /* 61 */ "\u0663",
// U+0664: "٤" ARABIC-INDIC DIGIT FOUR
- /* 56 */ "\u0664",
+ /* 62 */ "\u0664",
// U+0665: "٥" ARABIC-INDIC DIGIT FIVE
- /* 57 */ "\u0665",
+ /* 63 */ "\u0665",
// U+0666: "٦" ARABIC-INDIC DIGIT SIX
- /* 58 */ "\u0666",
+ /* 64 */ "\u0666",
// U+0667: "٧" ARABIC-INDIC DIGIT SEVEN
- /* 59 */ "\u0667",
+ /* 65 */ "\u0667",
// U+0668: "٨" ARABIC-INDIC DIGIT EIGHT
- /* 60 */ "\u0668",
+ /* 66 */ "\u0668",
// U+0669: "٩" ARABIC-INDIC DIGIT NINE
- /* 61 */ "\u0669",
+ /* 67 */ "\u0669",
// U+0660: "٠" ARABIC-INDIC DIGIT ZERO
- /* 62 */ "\u0660",
- /* 63 */ "1",
- /* 64 */ "2",
- /* 65 */ "3",
- /* 66 */ "4",
- /* 67 */ "5",
- /* 68 */ "6",
- /* 69 */ "7",
- /* 70 */ "8",
- /* 71 */ "9",
+ /* 68 */ "\u0660",
+ /* 69 */ "1",
+ /* 70 */ "2",
+ /* 71 */ "3",
+ /* 72 */ "4",
+ /* 73 */ "5",
+ /* 74 */ "6",
+ /* 75 */ "7",
+ /* 76 */ "8",
+ /* 77 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 72 */ "0,\u066B,\u066C",
- /* 73~ */
- null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~84 */
+ /* 78 */ "0,\u066B,\u066C",
+ /* 79~ */
+ null, null, null, null, null, null, null, null, null, null,
+ /* ~88 */
// U+060C: "،" ARABIC COMMA
- /* 85 */ "\u060C",
- /* 86 */ "\\,",
- /* 87 */ null,
- /* 88 */ null,
- /* 89 */ "\u061F",
- /* 90 */ "\u061B",
+ /* 89 */ "\u060C",
+ /* 90 */ "\\,",
+ /* 91 */ "\u061F",
+ /* 92 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 91 */ "\u066A",
- /* 92 */ "?",
- /* 93 */ ";",
+ /* 93 */ "\u066A",
+ /* 94 */ "?",
+ /* 95 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 94 */ "%,\u2030",
- /* 95~ */
+ /* 96 */ "%,\u2030",
+ /* 97~ */
null, null, null, null, null,
- /* ~99 */
+ /* ~101 */
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
- /* 100 */ "\u060C",
- /* 101 */ ".",
- /* 102 */ "\u061F",
- /* 103 */ "\u064B",
- /* 104 */ "\u061F,\u061B,!,:,-,/,\',\"",
+ /* 102 */ "\u060C",
+ /* 103 */ ".",
+ /* 104 */ "\u061F",
+ /* 105 */ "\u064B",
+ /* 106 */ "\u061F,\u061B,!,:,-,/,\',\"",
// U+0651: "ّ" ARABIC SHADDA
// U+0652: "ْ" ARABIC SUKUN
// U+064C: "ٌ" ARABIC DAMMATAN
// U+0653: "ٓ" ARABIC MADDAH ABOVE
- // U+064F: "ُ" ARABIC DAMMA U+0650: "ِ" ARABIC KASRA
+ // U+064F: "ُ" ARABIC DAMMA
+ // U+0650: "ِ" ARABIC KASRA
// U+064E: "َ" ARABIC FATHA
// U+064B: "ً" ARABIC FATHATAN
// U+0640: "ـ" ARABIC TATWEEL
- // U+064D: "ٍ" ARABIC KASRATAN U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
+ // U+064D: "ٍ" ARABIC KASRATAN
+ // U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
// U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
// U+0654: "ٔ" ARABIC HAMZA ABOVE
- // U+0655: "ٕ" ARABIC HAMZA BELOW In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
- /* 105 */ "\u0651,\u0652,\u064C,\u0653,\u064F,\u0650,\u064E,\u064B,\u0640\u0640\u0640|\u0640,\u064D,\u0654,\u0656,\u0655,\u0670",
+ // U+0655: "ٕ" ARABIC HAMZA BELOW
+ // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
+ /* 107 */ "\u0651,\u0652,\u064C,\u0653,\u064F,\u0650,\u064E,\u064B,\u0640\u0640\u0640|\u0640,\u064D,\u0654,\u0656,\u0655,\u0670",
// U+266A: "♪" EIGHTH NOTE
- /* 106 */ "\u266A",
- // U+2605: "★" BLACK STAR
- // U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 107 */ "\u2605,\u066D",
- /* 108 */ null,
- // The all letters need to be mirrored are found at
- // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
- // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS TODO: DroidSansArabic lacks the glyph of U+FD3E ORNATE LEFT PARENTHESIS TODO: DroidSansArabic lacks the glyph of U+FD3F ORNATE RIGHT PARENTHESIS
- /* 109 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 110 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
- // U+2264: "≤" LESS-THAN OR EQUAL TO
- // U+2265: "≥" GREATER-THAN EQUAL TO
- // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- // The following characters don't need BIDI mirroring.
- // U+2018: "‘" LEFT SINGLE QUOTATION MARK
- // U+2019: "’" RIGHT SINGLE QUOTATION MARK
- // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
- // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
- // U+201C: "“" LEFT DOUBLE QUOTATION MARK
- // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
- // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 111 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
- /* 112 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 108 */ "\u266A",
};
/* Language be: Belarusian */
@@ -954,134 +978,143 @@ public final class KeyboardLabelsSet {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
/* ~41 */
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
/* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
/* 44~ */
null, null, null, null, null,
/* ~48 */
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
- // U+061B: "؛" ARABIC SEMICOLON U+0650: "ِ" ARABIC KASRA
+ // U+061B: "؛" ARABIC SEMICOLON
+ // U+0650: "ِ" ARABIC KASRA
// U+064E: "َ" ARABIC FATHA
// U+064D: "ٍ" ARABIC KASRATAN
// U+064B: "ً" ARABIC FATHATAN
// U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
// U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
// U+0655: "ٕ" ARABIC HAMZA BELOW
- // U+0654: "ٔ" ARABIC HAMZA ABOVE U+064F: "ُ" ARABIC DAMMA
+ // U+0654: "ٔ" ARABIC HAMZA ABOVE
+ // U+064F: "ُ" ARABIC DAMMA
// U+064C: "ٌ" ARABIC DAMMATAN
// U+0651: "ّ" ARABIC SHADDA
// U+0652: "ْ" ARABIC SUKUN
// U+0653: "ٓ" ARABIC MADDAH ABOVE
- // U+0640: "ـ" ARABIC TATWEEL In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
+ // U+0640: "ـ" ARABIC TATWEEL
+ // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
/* 49 */ "!fixedColumnOrder!8,\",\',-,:,!,\u061F,\u060C,\u061B,\u0650,\u064E,\u064D,\u064B,\u0656,\u0670,\u0655,\u0654,\u064F,\u064C,\u0651,\u0652,\u0653,\u0640\u0640\u0640|\u0640,/",
/* 50 */ "\u064B",
- /* 51 */ null,
+ // U+2605: "★" BLACK STAR
+ // U+066D: "٭" ARABIC FIVE POINTED STAR
+ /* 51 */ "\u2605,\u066D",
/* 52 */ null,
+ // The all letters need to be mirrored are found at
+ // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
+ // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
+ // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
+ // TODO: DroidSansArabic lacks the glyph of U+FD3E ORNATE LEFT PARENTHESIS
+ // TODO: DroidSansArabic lacks the glyph of U+FD3F ORNATE RIGHT PARENTHESIS
+ /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ // U+2264: "≤" LESS-THAN OR EQUAL TO
+ // U+2265: "≥" GREATER-THAN EQUAL TO
+ // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ // The following characters don't need BIDI mirroring.
+ // U+2018: "‘" LEFT SINGLE QUOTATION MARK
+ // U+2019: "’" RIGHT SINGLE QUOTATION MARK
+ // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ // U+201C: "“" LEFT DOUBLE QUOTATION MARK
+ // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 57 */ null,
+ /* 58 */ null,
// U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
- /* 53 */ "\u06F1",
+ /* 59 */ "\u06F1",
// U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
- /* 54 */ "\u06F2",
+ /* 60 */ "\u06F2",
// U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE
- /* 55 */ "\u06F3",
+ /* 61 */ "\u06F3",
// U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR
- /* 56 */ "\u06F4",
+ /* 62 */ "\u06F4",
// U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE
- /* 57 */ "\u06F5",
+ /* 63 */ "\u06F5",
// U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX
- /* 58 */ "\u06F6",
+ /* 64 */ "\u06F6",
// U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN
- /* 59 */ "\u06F7",
+ /* 65 */ "\u06F7",
// U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT
- /* 60 */ "\u06F8",
+ /* 66 */ "\u06F8",
// U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE
- /* 61 */ "\u06F9",
+ /* 67 */ "\u06F9",
// U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
- /* 62 */ "\u06F0",
- /* 63 */ "1",
- /* 64 */ "2",
- /* 65 */ "3",
- /* 66 */ "4",
- /* 67 */ "5",
- /* 68 */ "6",
- /* 69 */ "7",
- /* 70 */ "8",
- /* 71 */ "9",
+ /* 68 */ "\u06F0",
+ /* 69 */ "1",
+ /* 70 */ "2",
+ /* 71 */ "3",
+ /* 72 */ "4",
+ /* 73 */ "5",
+ /* 74 */ "6",
+ /* 75 */ "7",
+ /* 76 */ "8",
+ /* 77 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 72 */ "0,\u066B,\u066C",
- /* 73~ */
- null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~84 */
+ /* 78 */ "0,\u066B,\u066C",
+ /* 79~ */
+ null, null, null, null, null, null, null, null, null, null,
+ /* ~88 */
// U+060C: "،" ARABIC COMMA
- /* 85 */ "\u060C",
- /* 86 */ "\\,",
- /* 87 */ null,
- /* 88 */ null,
- /* 89 */ "\u061F",
- /* 90 */ "\u061B",
+ /* 89 */ "\u060C",
+ /* 90 */ "\\,",
+ /* 91 */ "\u061F",
+ /* 92 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 91 */ "\u066A",
- /* 92 */ "?",
- /* 93 */ ";",
+ /* 93 */ "\u066A",
+ /* 94 */ "?",
+ /* 95 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 94 */ "%,\u2030",
+ /* 96 */ "%,\u2030",
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
- /* 95 */ "\u060C",
- /* 96 */ "!",
- /* 97 */ "!,\\,",
- /* 98 */ "\u061F",
- /* 99 */ "\u061F,?",
- /* 100~ */
+ /* 97 */ "\u060C",
+ /* 98 */ "!",
+ /* 99 */ "!,\\,",
+ /* 100 */ "\u061F",
+ /* 101 */ "\u061F,?",
+ /* 102~ */
null, null, null,
- /* ~102 */
- /* 103 */ "\u064B",
- /* 104 */ "\u061F,\u061B,!,:,-,/,\',\"",
+ /* ~104 */
+ /* 105 */ "\u064B",
+ /* 106 */ "\u061F,\u061B,!,:,-,/,\',\"",
// U+0651: "ّ" ARABIC SHADDA
// U+0652: "ْ" ARABIC SUKUN
// U+064C: "ٌ" ARABIC DAMMATAN
// U+0653: "ٓ" ARABIC MADDAH ABOVE
- // U+064F: "ُ" ARABIC DAMMA U+0650: "ِ" ARABIC KASRA
+ // U+064F: "ُ" ARABIC DAMMA
+ // U+0650: "ِ" ARABIC KASRA
// U+064E: "َ" ARABIC FATHA
// U+064B: "ً" ARABIC FATHATAN
// U+0640: "ـ" ARABIC TATWEEL
- // U+064D: "ٍ" ARABIC KASRATAN U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
+ // U+064D: "ٍ" ARABIC KASRATAN
+ // U+0670: "ٰ" ARABIC LETTER SUPERSCRIPT ALEF
// U+0656: "ٖ" ARABIC SUBSCRIPT ALEF
// U+0654: "ٔ" ARABIC HAMZA ABOVE
- // U+0655: "ٕ" ARABIC HAMZA BELOW In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
- /* 105 */ "\u0651,\u0652,\u064C,\u0653,\u064F,\u0650,\u064E,\u064B,\u0640\u0640\u0640|\u0640,\u064D,\u0654,\u0656,\u0655,_,\u0670",
+ // U+0655: "ٕ" ARABIC HAMZA BELOW
+ // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
+ /* 107 */ "\u0651,\u0652,\u064C,\u0653,\u064F,\u0650,\u064E,\u064B,\u0640\u0640\u0640|\u0640,\u064D,\u0654,\u0656,\u0655,_,\u0670",
// U+266A: "♪" EIGHTH NOTE
- /* 106 */ "\u266A",
- // U+2605: "★" BLACK STAR
- // U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 107 */ "\u2605,\u066D",
- /* 108 */ null,
- // The all letters need to be mirrored are found at
- // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
- // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS TODO: DroidSansArabic lacks the glyph of U+FD3E ORNATE LEFT PARENTHESIS TODO: DroidSansArabic lacks the glyph of U+FD3F ORNATE RIGHT PARENTHESIS
- /* 109 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 110 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
- // U+2264: "≤" LESS-THAN OR EQUAL TO
- // U+2265: "≥" GREATER-THAN EQUAL TO
- // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- // The following characters don't need BIDI mirroring.
- // U+2018: "‘" LEFT SINGLE QUOTATION MARK
- // U+2019: "’" RIGHT SINGLE QUOTATION MARK
- // U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
- // U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
- // U+201C: "“" LEFT DOUBLE QUOTATION MARK
- // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
- // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 111 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
- /* 112 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 108 */ "\u266A",
};
/* Language fi: Finnish */
@@ -1190,38 +1223,38 @@ public final class KeyboardLabelsSet {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null,
- /* ~52 */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~58 */
// U+0967: "१" DEVANAGARI DIGIT ONE
- /* 53 */ "\u0967",
+ /* 59 */ "\u0967",
// U+0968: "२" DEVANAGARI DIGIT TWO
- /* 54 */ "\u0968",
+ /* 60 */ "\u0968",
// U+0969: "३" DEVANAGARI DIGIT THREE
- /* 55 */ "\u0969",
+ /* 61 */ "\u0969",
// U+096A: "४" DEVANAGARI DIGIT FOUR
- /* 56 */ "\u096A",
+ /* 62 */ "\u096A",
// U+096B: "५" DEVANAGARI DIGIT FIVE
- /* 57 */ "\u096B",
+ /* 63 */ "\u096B",
// U+096C: "६" DEVANAGARI DIGIT SIX
- /* 58 */ "\u096C",
+ /* 64 */ "\u096C",
// U+096D: "७" DEVANAGARI DIGIT SEVEN
- /* 59 */ "\u096D",
+ /* 65 */ "\u096D",
// U+096E: "८" DEVANAGARI DIGIT EIGHT
- /* 60 */ "\u096E",
+ /* 66 */ "\u096E",
// U+096F: "९" DEVANAGARI DIGIT NINE
- /* 61 */ "\u096F",
+ /* 67 */ "\u096F",
// U+0966: "०" DEVANAGARI DIGIT ZERO
- /* 62 */ "\u0966",
- /* 63 */ "1",
- /* 64 */ "2",
- /* 65 */ "3",
- /* 66 */ "4",
- /* 67 */ "5",
- /* 68 */ "6",
- /* 69 */ "7",
- /* 70 */ "8",
- /* 71 */ "9",
- /* 72 */ "0",
+ /* 68 */ "\u0966",
+ /* 69 */ "1",
+ /* 70 */ "2",
+ /* 71 */ "3",
+ /* 72 */ "4",
+ /* 73 */ "5",
+ /* 74 */ "6",
+ /* 75 */ "7",
+ /* 76 */ "8",
+ /* 77 */ "9",
+ /* 78 */ "0",
};
/* Language hr: Croatian */
@@ -1411,26 +1444,24 @@ public final class KeyboardLabelsSet {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
/* ~41 */
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
/* 42 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
/* 44~ */
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null,
- /* ~106 */
+ null, null, null, null, null, null, null,
+ /* ~50 */
// U+2605: "★" BLACK STAR
- /* 107 */ "\u2605",
+ /* 51 */ "\u2605",
// U+00B1: "±" PLUS-MINUS SIGN
// U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
- /* 108 */ "\u00B1,\uFB29",
+ /* 52 */ "\u00B1,\uFB29",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
- /* 109 */ "!fixedColumnOrder!3,<|>,{|},[|]",
- /* 110 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
+ /* 53 */ "!fixedColumnOrder!3,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
// U+2264: "≤" LESS-THAN OR EQUAL TO
// U+2265: "≥" GREATER-THAN EQUAL TO
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -1446,8 +1477,8 @@ public final class KeyboardLabelsSet {
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 111 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
- /* 112 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
};
/* Language ky: Kirghiz */
@@ -1682,9 +1713,12 @@ public final class KeyboardLabelsSet {
// U+201C: "“" LEFT DOUBLE QUOTATION MARK
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
+ // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
/* 42 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
};
@@ -2100,9 +2134,12 @@ public final class KeyboardLabelsSet {
// U+201C: "“" LEFT DOUBLE QUOTATION MARK
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
+ // U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
/* 42 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
- // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+ // TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
+ // <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
/* 43 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
};
@@ -2421,7 +2458,7 @@ public final class KeyboardLabelsSet {
/* 19 */ "\u0175",
};
- private static final Object[] LANGUAGES_AND_LABELS = {
+ private static final Object[] LANGUAGES_AND_TEXTS = {
"DEFAULT", LANGUAGE_DEFAULT, /* default */
"ar", LANGUAGE_ar, /* Arabic */
"be", LANGUAGE_be, /* Belarusian */
@@ -2465,13 +2502,13 @@ public final class KeyboardLabelsSet {
static {
int id = 0;
for (final String name : NAMES) {
- sNameToIdMap.put(name, id++);
+ sLowerCaseNameToIdsMap.put(name, id++);
}
- for (int i = 0; i < LANGUAGES_AND_LABELS.length; i += 2) {
- final String language = (String)LANGUAGES_AND_LABELS[i];
- final String[] labels = (String[])LANGUAGES_AND_LABELS[i + 1];
- sLocaleToLabelsMap.put(language, labels);
+ for (int i = 0; i < LANGUAGES_AND_TEXTS.length; i += 2) {
+ final String language = (String)LANGUAGES_AND_TEXTS[i];
+ final String[] texts = (String[])LANGUAGES_AND_TEXTS[i + 1];
+ sLocaleToTextsMap.put(language, texts);
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
index 28cec56e6..458d9ee14 100644
--- a/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
+++ b/java/src/com/android/inputmethod/latin/AdditionalSubtype.java
@@ -22,27 +22,8 @@ import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOAR
import android.view.inputmethod.InputMethodSubtype;
-import java.util.HashMap;
public class AdditionalSubtype {
- public static final String QWERTY = "qwerty";
- public static final String QWERTZ = "qwertz";
- public static final String AZERTY = "azerty";
- public static final String[] PREDEFINED_KEYBOARD_LAYOUT_SET = {
- QWERTY,
- QWERTZ,
- AZERTY
- };
-
- // Keyboard layout to subtype name resource id map.
- private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
- new HashMap<String, Integer>();
-
- static {
- sKeyboardLayoutToNameIdsMap.put(QWERTY, R.string.subtype_generic_qwerty);
- sKeyboardLayoutToNameIdsMap.put(QWERTZ, R.string.subtype_generic_qwertz);
- sKeyboardLayoutToNameIdsMap.put(AZERTY, R.string.subtype_generic_azerty);
- }
private AdditionalSubtype() {
// This utility class is not publicly instantiable.
@@ -60,7 +41,8 @@ public class AdditionalSubtype {
final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName;
final String filteredExtraValue = StringUtils.appendToCsvIfNotExists(
IS_ADDITIONAL_SUBTYPE, extraValue);
- Integer nameId = sKeyboardLayoutToNameIdsMap.get(keyboardLayoutSetName);
+ Integer nameId = SubtypeLocale.getSubtypeNameIdFromKeyboardLayoutName(
+ keyboardLayoutSetName);
if (nameId == null) nameId = R.string.subtype_generic;
return new InputMethodSubtype(nameId, R.drawable.ic_subtype_keyboard,
localeString, KEYBOARD_MODE,
diff --git a/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java b/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
index 7a22c9742..613c20304 100644
--- a/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
+++ b/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
@@ -109,18 +109,15 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
}
static class KeyboardLayoutSetItem extends Pair<String, String> {
- public KeyboardLayoutSetItem(String keyboardLayoutSetName) {
- super(keyboardLayoutSetName, getDisplayName(keyboardLayoutSetName));
+ public KeyboardLayoutSetItem(InputMethodSubtype subtype) {
+ super(SubtypeLocale.getKeyboardLayoutSetName(subtype),
+ SubtypeLocale.getKeyboardLayoutSetDisplayName(subtype));
}
@Override
public String toString() {
return second;
}
-
- private static String getDisplayName(String keyboardLayoutSetName) {
- return keyboardLayoutSetName.toUpperCase();
- }
}
static class KeyboardLayoutSetAdapter extends ArrayAdapter<KeyboardLayoutSetItem> {
@@ -129,8 +126,11 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// TODO: Should filter out already existing combinations of locale and layout.
- for (final String layout : AdditionalSubtype.PREDEFINED_KEYBOARD_LAYOUT_SET) {
- add(new KeyboardLayoutSetItem(layout));
+ for (final String layout : SubtypeLocale.getPredefinedKeyboardLayoutSet()) {
+ // This is a dummy subtype with NO_LANGUAGE, only for display.
+ final InputMethodSubtype subtype = AdditionalSubtype.createAdditionalSubtype(
+ SubtypeLocale.NO_LANGUAGE, layout, null);
+ add(new KeyboardLayoutSetItem(subtype));
}
}
}
@@ -196,8 +196,7 @@ public class AdditionalSubtypeSettings extends PreferenceFragment {
.setNegativeButton(R.string.remove, this);
final SubtypeLocaleItem localeItem = SubtypeLocaleAdapter.createItem(
context, mSubtype.getLocale());
- final KeyboardLayoutSetItem layoutItem = new KeyboardLayoutSetItem(
- SubtypeLocale.getKeyboardLayoutSetName(mSubtype));
+ final KeyboardLayoutSetItem layoutItem = new KeyboardLayoutSetItem(mSubtype);
setSpinnerPosition(mSubtypeLocaleSpinner, localeItem);
setSpinnerPosition(mKeyboardLayoutSetSpinner, layoutItem);
}
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index e4d081b56..a4670daf2 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -49,7 +49,10 @@ public class BinaryDictionaryFileDumper {
*/
private static final int FILE_READ_BUFFER_SIZE = 1024;
// TODO: make the following data common with the native code
- private static final byte[] MAGIC_NUMBER = new byte[] { 0x78, (byte)0xB1 };
+ private static final byte[] MAGIC_NUMBER_VERSION_1 =
+ new byte[] { (byte)0x78, (byte)0xB1, (byte)0x00, (byte)0x00 };
+ private static final byte[] MAGIC_NUMBER_VERSION_2 =
+ new byte[] { (byte)0x9B, (byte)0xC1, (byte)0x3A, (byte)0xFE };
private static final String DICTIONARY_PROJECTION[] = { "id" };
@@ -268,15 +271,18 @@ public class BinaryDictionaryFileDumper {
private static void checkMagicAndCopyFileTo(final BufferedInputStream input,
final FileOutputStream output) throws FileNotFoundException, IOException {
// Check the magic number
- final byte[] magicNumberBuffer = new byte[MAGIC_NUMBER.length];
- final int readMagicNumberSize = input.read(magicNumberBuffer, 0, MAGIC_NUMBER.length);
- if (readMagicNumberSize < MAGIC_NUMBER.length) {
+ final int length = MAGIC_NUMBER_VERSION_2.length;
+ final byte[] magicNumberBuffer = new byte[length];
+ final int readMagicNumberSize = input.read(magicNumberBuffer, 0, length);
+ if (readMagicNumberSize < length) {
throw new IOException("Less bytes to read than the magic number length");
}
- if (!Arrays.equals(MAGIC_NUMBER, magicNumberBuffer)) {
- throw new IOException("Wrong magic number for downloaded file");
+ if (!Arrays.equals(MAGIC_NUMBER_VERSION_2, magicNumberBuffer)) {
+ if (!Arrays.equals(MAGIC_NUMBER_VERSION_1, magicNumberBuffer)) {
+ throw new IOException("Wrong magic number for downloaded file");
+ }
}
- output.write(MAGIC_NUMBER);
+ output.write(magicNumberBuffer);
// Actually copy the file
final byte[] buffer = new byte[FILE_READ_BUFFER_SIZE];
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 072dec9d1..5acd62904 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -24,6 +24,7 @@ import android.util.Log;
import java.io.File;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Locale;
/**
@@ -46,6 +47,10 @@ class BinaryDictionaryGetter {
*/
private static final String COMMON_PREFERENCES_NAME = "LatinImeDictPrefs";
+ // Name of the category for the main dictionary
+ private static final String MAIN_DICTIONARY_CATEGORY = "main";
+ public static final String ID_CATEGORY_SEPARATOR = ":";
+
// Prevents this from being instantiated
private BinaryDictionaryGetter() {}
@@ -206,7 +211,40 @@ class BinaryDictionaryGetter {
}
/**
- * Returns the list of cached files for a specific locale.
+ * Returns the category for a given file name.
+ *
+ * This parses the file name, extracts the category, and returns it. See
+ * {@link #getMainDictId(Locale)} and {@link #isMainWordListId(String)}.
+ * @return The category as a string or null if it can't be found in the file name.
+ */
+ private static String getCategoryFromFileName(final String fileName) {
+ final String id = getWordListIdFromFileName(fileName);
+ final String[] idArray = id.split(ID_CATEGORY_SEPARATOR);
+ if (2 != idArray.length) return null;
+ return idArray[0];
+ }
+
+ /**
+ * Utility class for the {@link #getCachedWordLists} method
+ */
+ private static class FileAndMatchLevel {
+ final File mFile;
+ final int mMatchLevel;
+ public FileAndMatchLevel(final File file, final int matchLevel) {
+ mFile = file;
+ mMatchLevel = matchLevel;
+ }
+ }
+
+ /**
+ * Returns the list of cached files for a specific locale, one for each category.
+ *
+ * This will return exactly one file for each word list category that matches
+ * the passed locale. If several files match the locale for any given category,
+ * this returns the file with the closest match to the locale. For example, if
+ * the passed word list is en_US, and for a category we have an en and an en_US
+ * word list available, we'll return only the en_US one.
+ * Thus, the list will contain as many files as there are categories.
*
* @param locale the locale to find the dictionary files for, as a string.
* @param context the context on which to open the files upon.
@@ -216,21 +254,32 @@ class BinaryDictionaryGetter {
final Context context) {
final File[] directoryList = getCachedDirectoryList(context);
if (null == directoryList) return EMPTY_FILE_ARRAY;
- final ArrayList<File> cacheFiles = new ArrayList<File>();
+ final HashMap<String, FileAndMatchLevel> cacheFiles =
+ new HashMap<String, FileAndMatchLevel>();
for (File directory : directoryList) {
if (!directory.isDirectory()) continue;
final String dirLocale = getWordListIdFromFileName(directory.getName());
- if (LocaleUtils.isMatch(LocaleUtils.getMatchLevel(dirLocale, locale))) {
+ final int matchLevel = LocaleUtils.getMatchLevel(dirLocale, locale);
+ if (LocaleUtils.isMatch(matchLevel)) {
final File[] wordLists = directory.listFiles();
if (null != wordLists) {
for (File wordList : wordLists) {
- cacheFiles.add(wordList);
+ final String category = getCategoryFromFileName(wordList.getName());
+ final FileAndMatchLevel currentBestMatch = cacheFiles.get(category);
+ if (null == currentBestMatch || currentBestMatch.mMatchLevel < matchLevel) {
+ cacheFiles.put(category, new FileAndMatchLevel(wordList, matchLevel));
+ }
}
}
}
}
if (cacheFiles.isEmpty()) return EMPTY_FILE_ARRAY;
- return cacheFiles.toArray(EMPTY_FILE_ARRAY);
+ final File[] result = new File[cacheFiles.size()];
+ int index = 0;
+ for (final FileAndMatchLevel entry : cacheFiles.values()) {
+ result[index++] = entry.mFile;
+ }
+ return result;
}
/**
@@ -245,7 +294,13 @@ class BinaryDictionaryGetter {
// This works because we don't include by default different dictionaries for
// different countries. This actually needs to return the id that we would
// like to use for word lists included in resources, and the following is okay.
- return locale.getLanguage().toString();
+ return MAIN_DICTIONARY_CATEGORY + ID_CATEGORY_SEPARATOR + locale.getLanguage().toString();
+ }
+
+ private static boolean isMainWordListId(final String id) {
+ final String[] idArray = id.split(ID_CATEGORY_SEPARATOR);
+ if (2 != idArray.length) return false;
+ return MAIN_DICTIONARY_CATEGORY.equals(idArray[0]);
}
/**
@@ -270,9 +325,7 @@ class BinaryDictionaryGetter {
BinaryDictionaryFileDumper.cacheWordListsFromContentProvider(locale, context,
hasDefaultWordList);
final File[] cachedWordLists = getCachedWordLists(locale.toString(), context);
-
final String mainDictId = getMainDictId(locale);
-
final DictPackSettings dictPackSettings = new DictPackSettings(context);
boolean foundMainDict = false;
@@ -280,7 +333,7 @@ class BinaryDictionaryGetter {
// cachedWordLists may not be null, see doc for getCachedDictionaryList
for (final File f : cachedWordLists) {
final String wordListId = getWordListIdFromFileName(f.getName());
- if (wordListId.equals(mainDictId)) {
+ if (isMainWordListId(wordListId)) {
foundMainDict = true;
}
if (!dictPackSettings.isWordListActive(wordListId)) continue;
diff --git a/java/src/com/android/inputmethod/latin/EditingUtils.java b/java/src/com/android/inputmethod/latin/EditingUtils.java
index b3f613bae..7d673175e 100644
--- a/java/src/com/android/inputmethod/latin/EditingUtils.java
+++ b/java/src/com/android/inputmethod/latin/EditingUtils.java
@@ -16,7 +16,6 @@
package com.android.inputmethod.latin;
-import android.text.TextUtils;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
@@ -37,30 +36,6 @@ public class EditingUtils {
// Unintentional empty constructor for singleton.
}
- /**
- * Append newText to the text field represented by connection.
- * The new text becomes selected.
- */
- public static void appendText(InputConnection connection, String newText) {
- if (connection == null) {
- return;
- }
-
- // Commit the composing text
- connection.finishComposingText();
-
- // Add a space if the field already has text.
- String text = newText;
- CharSequence charBeforeCursor = connection.getTextBeforeCursor(1, 0);
- if (charBeforeCursor != null
- && !charBeforeCursor.equals(" ")
- && (charBeforeCursor.length() > 0)) {
- text = " " + text;
- }
-
- connection.setComposingText(text, 1);
- }
-
private static int getCursorPosition(InputConnection connection) {
if (null == connection) return INVALID_CURSOR_POSITION;
ExtractedText extracted = connection.getExtractedText(
@@ -146,7 +121,6 @@ public class EditingUtils {
private static final Pattern spaceRegex = Pattern.compile("\\s+");
-
public static CharSequence getPreviousWord(InputConnection connection,
String sentenceSeperators) {
//TODO: Should fix this. This could be slow!
@@ -205,77 +179,4 @@ public class EditingUtils {
return w[w.length - 1];
}
-
- public static class SelectedWord {
- public final int mStart;
- public final int mEnd;
- public final CharSequence mWord;
-
- public SelectedWord(int start, int end, CharSequence word) {
- mStart = start;
- mEnd = end;
- mWord = word;
- }
- }
-
- /**
- * Takes a character sequence with a single character and checks if the character occurs
- * in a list of word separators or is empty.
- * @param singleChar A CharSequence with null, zero or one character
- * @param wordSeparators A String containing the word separators
- * @return true if the character is at a word boundary, false otherwise
- */
- private static boolean isWordBoundary(CharSequence singleChar, String wordSeparators) {
- return TextUtils.isEmpty(singleChar) || wordSeparators.contains(singleChar);
- }
-
- /**
- * Checks if the cursor is inside a word or the current selection is a whole word.
- * @param ic the InputConnection for accessing the text field
- * @param selStart the start position of the selection within the text field
- * @param selEnd the end position of the selection within the text field. This could be
- * the same as selStart, if there's no selection.
- * @param wordSeparators the word separator characters for the current language
- * @return an object containing the text and coordinates of the selected/touching word,
- * null if the selection/cursor is not marking a whole word.
- */
- public static SelectedWord getWordAtCursorOrSelection(final InputConnection ic,
- int selStart, int selEnd, String wordSeparators) {
- if (selStart == selEnd) {
- // There is just a cursor, so get the word at the cursor
- // getWordRangeAtCursor returns null if the connection is null
- final EditingUtils.Range range = getWordRangeAtCursor(ic, wordSeparators);
- if (range != null && !TextUtils.isEmpty(range.mWord)) {
- return new SelectedWord(selStart - range.mCharsBefore, selEnd + range.mCharsAfter,
- range.mWord);
- }
- } else {
- if (null == ic) return null;
- // Is the previous character empty or a word separator? If not, return null.
- final CharSequence charsBefore = ic.getTextBeforeCursor(1, 0);
- if (!isWordBoundary(charsBefore, wordSeparators)) {
- return null;
- }
-
- // Is the next character empty or a word separator? If not, return null.
- final CharSequence charsAfter = ic.getTextAfterCursor(1, 0);
- if (!isWordBoundary(charsAfter, wordSeparators)) {
- return null;
- }
-
- // Extract the selection alone
- final CharSequence touching = ic.getSelectedText(0);
- if (TextUtils.isEmpty(touching)) return null;
- // Is any part of the selection a separator? If so, return null.
- final int length = touching.length();
- for (int i = 0; i < length; i++) {
- if (wordSeparators.contains(touching.subSequence(i, i + 1))) {
- return null;
- }
- }
- // Prepare the selected word
- return new SelectedWord(selStart, selEnd, touching);
- }
- return null;
- }
}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 31c832c31..e1978fca1 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -154,6 +154,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private final SubtypeSwitcher mSubtypeSwitcher;
private boolean mShouldSwitchToLastSubtype = true;
+ private boolean mIsMainDictionaryAvailable;
private UserDictionary mUserDictionary;
private UserHistoryDictionary mUserHistoryDictionary;
private boolean mIsUserDictionaryAvailable;
@@ -449,14 +450,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
return new SettingsValues(mPrefs, LatinIME.this);
}
};
- mSettingsValues = job.runInLocale(mResources, mSubtypeSwitcher.getInputLocale());
+ mSettingsValues = job.runInLocale(mResources, mSubtypeSwitcher.getCurrentSubtypeLocale());
mFeedbackManager = new AudioAndHapticFeedbackManager(this, mSettingsValues);
resetContactsDictionary(null == mSuggest ? null : mSuggest.getContactsDictionary());
}
private void initSuggest() {
- final String localeStr = mSubtypeSwitcher.getInputLocaleStr();
- final Locale keyboardLocale = mSubtypeSwitcher.getInputLocale();
+ final Locale subtypeLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();
+ final String localeStr = subtypeLocale.toString();
final Dictionary oldContactsDictionary;
if (mSuggest != null) {
@@ -465,11 +466,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} else {
oldContactsDictionary = null;
}
- mSuggest = new Suggest(this, keyboardLocale);
+ mSuggest = new Suggest(this, subtypeLocale);
if (mSettingsValues.mAutoCorrectEnabled) {
mSuggest.setAutoCorrectionThreshold(mSettingsValues.mAutoCorrectionThreshold);
}
+ mIsMainDictionaryAvailable = DictionaryFactory.isDictionaryAvailable(this, subtypeLocale);
+
mUserDictionary = new UserDictionary(this, localeStr);
mSuggest.setUserDictionary(mUserDictionary);
mIsUserDictionaryAvailable = mUserDictionary.isEnabled();
@@ -511,7 +514,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} else {
if (USE_BINARY_CONTACTS_DICTIONARY) {
dictionaryToUse = new ContactsBinaryDictionary(this, Suggest.DIC_CONTACTS,
- mSubtypeSwitcher.getInputLocale());
+ mSubtypeSwitcher.getCurrentSubtypeLocale());
} else {
dictionaryToUse = new ContactsDictionary(this, Suggest.DIC_CONTACTS);
}
@@ -523,7 +526,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
/* package private */ void resetSuggestMainDict() {
- mSuggest.resetMainDict(this, mSubtypeSwitcher.getInputLocale());
+ final Locale subtypeLocale = mSubtypeSwitcher.getCurrentSubtypeLocale();
+ mSuggest.resetMainDict(this, subtypeLocale);
+ mIsMainDictionaryAvailable = DictionaryFactory.isDictionaryAvailable(this, subtypeLocale);
}
@Override
@@ -603,7 +608,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@Override
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype) {
- SubtypeSwitcher.getInstance().updateSubtype(subtype);
+ mSubtypeSwitcher.updateSubtype(subtype);
}
private void onStartInputInternal(EditorInfo editorInfo, boolean restarting) {
@@ -629,7 +634,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
editorInfo.inputType, editorInfo.imeOptions));
}
if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.latinIME_onStartInputViewInternal(editorInfo);
+ ResearchLogger.latinIME_onStartInputViewInternal(editorInfo, mPrefs);
}
if (InputAttributes.inPrivateImeOptions(null, NO_MICROPHONE_COMPAT, editorInfo)) {
Log.w(TAG, "Deprecated private IME option specified: "
@@ -1843,6 +1848,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mExpectingUpdateSelection = true;
commitChosenWord(suggestion, LastComposedWord.COMMIT_TYPE_MANUAL_PICK,
LastComposedWord.NOT_A_SEPARATOR);
+ // Don't allow cancellation of manual pick
+ mLastComposedWord.deactivate();
// Add the word to the user history dictionary
addToUserHistoryDictionary(suggestion);
mSpaceState = SPACE_STATE_PHANTOM;
@@ -1894,7 +1901,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (mSettingsValues.mEnableSuggestionSpanInsertion) {
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
- this, bestWord, suggestedWords, mSubtypeSwitcher.isDictionaryAvailable()),
+ this, bestWord, suggestedWords, mIsMainDictionaryAvailable),
1);
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.latinIME_commitText(bestWord);
@@ -1972,7 +1979,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
final String secondWord;
if (mWordComposer.isAutoCapitalized() && !mWordComposer.isMostlyCaps()) {
- secondWord = suggestion.toString().toLowerCase(mSubtypeSwitcher.getInputLocale());
+ secondWord = suggestion.toString().toLowerCase(
+ mSubtypeSwitcher.getCurrentSubtypeLocale());
} else {
secondWord = suggestion.toString();
}
@@ -2300,8 +2308,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
private void showOptionDialogInternal(AlertDialog dialog) {
- final IBinder windowToken = KeyboardSwitcher.getInstance().getKeyboardView()
- .getWindowToken();
+ final IBinder windowToken = mKeyboardSwitcher.getKeyboardView().getWindowToken();
if (windowToken == null) return;
dialog.setCancelable(true);
diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java
index 7072dda23..566af7061 100644
--- a/java/src/com/android/inputmethod/latin/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java
@@ -18,10 +18,12 @@ package com.android.inputmethod.latin;
import android.content.SharedPreferences;
import android.inputmethodservice.InputMethodService;
+import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;
import android.os.SystemClock;
+import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.MotionEvent;
@@ -31,7 +33,6 @@ import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.internal.AlphabetShiftState;
import com.android.inputmethod.keyboard.internal.KeyboardState;
import com.android.inputmethod.latin.define.ProductionFlag;
@@ -45,6 +46,7 @@ import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
+import java.util.Map;
/**
* Logs the use of the LatinIME keyboard.
@@ -68,7 +70,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
* Isolates management of files. This variable should never be null, but can be changed
* to support testing.
*/
- private LogFileManager mLogFileManager;
+ /* package */ LogFileManager mLogFileManager;
/**
* Manages the file(s) that stores the logs.
@@ -93,63 +95,53 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mIms = ims;
}
- public synchronized boolean createLogFile() {
- try {
- return createLogFile(DEFAULT_FILENAME);
- } catch (IOException e) {
- e.printStackTrace();
- Log.w(TAG, e);
- return false;
- }
+ public synchronized void createLogFile() throws IOException {
+ createLogFile(DEFAULT_FILENAME);
}
- public synchronized boolean createLogFile(final SharedPreferences prefs) {
- try {
- final String filename =
- prefs.getString(RESEARCH_LOG_FILENAME_KEY, DEFAULT_FILENAME);
- return createLogFile(filename);
- } catch (IOException e) {
- Log.w(TAG, e);
- e.printStackTrace();
- }
- return false;
+ public synchronized void createLogFile(final SharedPreferences prefs)
+ throws IOException {
+ final String filename =
+ prefs.getString(RESEARCH_LOG_FILENAME_KEY, DEFAULT_FILENAME);
+ createLogFile(filename);
}
- public synchronized boolean createLogFile(final String filename)
+ public synchronized void createLogFile(final String filename)
throws IOException {
if (mIms == null) {
- Log.w(TAG, "InputMethodService is not configured. Logging is off.");
- return false;
+ final String msg = "InputMethodService is not configured. Logging is off.";
+ Log.w(TAG, msg);
+ throw new IOException(msg);
}
final File filesDir = mIms.getFilesDir();
if (filesDir == null || !filesDir.exists()) {
- Log.w(TAG, "Storage directory does not exist. Logging is off.");
- return false;
+ final String msg = "Storage directory does not exist. Logging is off.";
+ Log.w(TAG, msg);
+ throw new IOException(msg);
}
close();
final File file = new File(filesDir, filename);
mFile = file;
- file.setReadable(false, false);
boolean append = true;
if (file.exists() && file.lastModified() + LOGFILE_PURGE_INTERVAL <
System.currentTimeMillis()) {
append = false;
}
mPrintWriter = new PrintWriter(new BufferedWriter(new FileWriter(file, append)), true);
- return true;
}
public synchronized boolean append(final String s) {
- final PrintWriter printWriter = mPrintWriter;
- if (printWriter == null) {
+ PrintWriter printWriter = mPrintWriter;
+ if (printWriter == null || !mFile.exists()) {
if (DEBUG) {
Log.w(TAG, "PrintWriter is null... attempting to create default log file");
}
- if (!createLogFile()) {
- if (DEBUG) {
- Log.w(TAG, "Failed to create log file. Not logging.");
- return false;
- }
+ try {
+ createLogFile();
+ printWriter = mPrintWriter;
+ } catch (IOException e) {
+ Log.w(TAG, "Failed to create log file. Not logging.");
+ return false;
}
}
printWriter.print(s);
@@ -161,9 +153,15 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
if (mPrintWriter != null) {
mPrintWriter.close();
mPrintWriter = null;
+ if (DEBUG) {
+ Log.d(TAG, "logfile closed");
+ }
}
if (mFile != null) {
mFile.delete();
+ if (DEBUG) {
+ Log.d(TAG, "logfile deleted");
+ }
mFile = null;
}
}
@@ -173,6 +171,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mPrintWriter.close();
mPrintWriter = null;
mFile = null;
+ if (DEBUG) {
+ Log.d(TAG, "logfile closed");
+ }
}
}
@@ -240,12 +241,16 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
sInstance.initInternal(ims, prefs);
}
- public void initInternal(final InputMethodService ims, final SharedPreferences prefs) {
+ /* package */ void initInternal(final InputMethodService ims, final SharedPreferences prefs) {
mIms = ims;
final LogFileManager logFileManager = mLogFileManager;
if (logFileManager != null) {
logFileManager.init(ims);
- logFileManager.createLogFile(prefs);
+ try {
+ logFileManager.createLogFile(prefs);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
if (prefs != null) {
sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
@@ -254,19 +259,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
/**
- * Change to a different logFileManager.
- *
- * @throws IllegalArgumentException if logFileManager is null
- */
- void setLogFileManager(final LogFileManager manager) {
- if (manager == null) {
- throw new IllegalArgumentException("warning: trying to set null logFileManager");
- } else {
- mLogFileManager = manager;
- }
- }
-
- /**
* Represents a category of logging events that share the same subfield structure.
*/
private static enum LogGroup {
@@ -334,26 +326,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
public static class UnsLogGroup {
private static final boolean DEFAULT_ENABLED = true;
- private static final boolean ALPHABETSHIFTSTATE_SETSHIFTED_ENABLED = DEFAULT_ENABLED;
- private static final boolean ALPHABETSHIFTSTATE_SETSHIFTLOCKED_ENABLED = DEFAULT_ENABLED;
- private static final boolean ALPHABETSHIFTSTATE_SETAUTOMATICSHIFTED_ENABLED
- = DEFAULT_ENABLED;
private static final boolean KEYBOARDSTATE_ONCANCELINPUT_ENABLED = DEFAULT_ENABLED;
private static final boolean KEYBOARDSTATE_ONCODEINPUT_ENABLED = DEFAULT_ENABLED;
private static final boolean KEYBOARDSTATE_ONLONGPRESSTIMEOUT_ENABLED = DEFAULT_ENABLED;
private static final boolean KEYBOARDSTATE_ONPRESSKEY_ENABLED = DEFAULT_ENABLED;
private static final boolean KEYBOARDSTATE_ONRELEASEKEY_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_ONRESTOREKEYBOARDSTATE_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_ONSAVEKEYBOARDSTATE_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_ONUPDATESHIFTSTATE_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_SETALPHABETKEYBOARD_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_SETSHIFTED_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_SETSHIFTLOCKED_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_SETSYMBOLSKEYBOARD_ENABLED = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_SETSYMBOLSSHIFTEDKEYBOARD_ENABLED
- = DEFAULT_ENABLED;
- private static final boolean KEYBOARDSTATE_TOGGLEALPHABETANDSYMBOLS_ENABLED
- = DEFAULT_ENABLED;
private static final boolean LATINIME_COMMITCURRENTAUTOCORRECTION_ENABLED = DEFAULT_ENABLED;
private static final boolean LATINIME_COMMITTEXT_ENABLED = DEFAULT_ENABLED;
private static final boolean LATINIME_DELETESURROUNDINGTEXT_ENABLED = DEFAULT_ENABLED;
@@ -377,6 +354,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private static final boolean LATINKEYBOARDVIEW_ONLONGPRESS_ENABLED = DEFAULT_ENABLED;
private static final boolean LATINKEYBOARDVIEW_ONPROCESSMOTIONEVENT_ENABLED
= DEFAULT_ENABLED;
+ private static final boolean LATINKEYBOARDVIEW_SETKEYBOARD_ENABLED = DEFAULT_ENABLED;
private static final boolean POINTERTRACKER_CALLLISTENERONCANCELINPUT_ENABLED
= DEFAULT_ENABLED;
private static final boolean POINTERTRACKER_CALLLISTENERONCODEINPUT_ENABLED
@@ -413,12 +391,21 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
if (DEBUG) {
Log.d(TAG, "Write: " + '[' + logGroup.mLogString + ']' + log);
}
- if (mLogFileManager.append(builder.toString())) {
+ final String s = builder.toString();
+ if (mLogFileManager.append(s)) {
// success
} else {
if (DEBUG) {
Log.w(TAG, "Unable to write to log.");
}
+ // perhaps logfile was deleted. try to recreate and relog.
+ try {
+ mLogFileManager.createLogFile(PreferenceManager
+ .getDefaultSharedPreferences(mIms));
+ mLogFileManager.append(s);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
}
});
@@ -448,32 +435,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
}
- public static void alphabetShiftState_setShifted(final boolean newShiftState,
- final int oldState, final AlphabetShiftState alphabetShiftState) {
- if (UnsLogGroup.ALPHABETSHIFTSTATE_SETSHIFTED_ENABLED) {
- final String s = "setShifted(" + newShiftState + "): " + oldState
- + " > " + alphabetShiftState;
- logUnstructured("AlphabetShiftState_setShifted", s);
- }
- }
-
- public static void alphabetShiftState_setShiftLocked(final boolean newShiftLockState,
- final int oldState, final AlphabetShiftState alphabetShiftState) {
- if (UnsLogGroup.ALPHABETSHIFTSTATE_SETSHIFTLOCKED_ENABLED) {
- final String s = "setShiftLocked(" + newShiftLockState + "): "
- + oldState + " > " + alphabetShiftState;
- logUnstructured("AlphabetShiftState_setShiftLocked", s);
- }
- }
-
- public static void alphabetShiftState_setAutomaticShifted(final int oldState,
- final AlphabetShiftState alphabetShiftState) {
- if (UnsLogGroup.ALPHABETSHIFTSTATE_SETAUTOMATICSHIFTED_ENABLED) {
- final String s = "setAutomaticShifted: " + oldState + " > " + alphabetShiftState;
- logUnstructured("AlphabetShiftState_setAutomaticShifted", s);
- }
- }
-
public static void keyboardState_onCancelInput(final boolean isSinglePointer,
final KeyboardState keyboardState) {
if (UnsLogGroup.KEYBOARDSTATE_ONCANCELINPUT_ENABLED) {
@@ -520,76 +481,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- public static void keyboardState_onRestoreKeyboardState(final KeyboardState keyboardState,
- final String savedKeyboardState) {
- if (UnsLogGroup.KEYBOARDSTATE_ONRESTOREKEYBOARDSTATE_ENABLED) {
- final String s = "onRestoreKeyboardState: saved=" + savedKeyboardState + " "
- + keyboardState;
- logUnstructured("KeyboardState_onRestoreKeyboardState", s);
- }
- }
-
- public static void keyboardState_onSaveKeyboardState(final KeyboardState keyboardState,
- final String savedKeyboardState) {
- if (UnsLogGroup.KEYBOARDSTATE_ONSAVEKEYBOARDSTATE_ENABLED) {
- final String s = "onSaveKeyboardState: saved=" + savedKeyboardState + " "
- + keyboardState;
- logUnstructured("KeyboardState_onSaveKeyboardState", s);
- }
- }
-
- public static void keyboardState_onUpdateShiftState(final KeyboardState keyboardState,
- final boolean autoCaps) {
- if (UnsLogGroup.KEYBOARDSTATE_ONUPDATESHIFTSTATE_ENABLED) {
- final String s = "onUpdateShiftState: autoCaps=" + autoCaps + " " + keyboardState;
- logUnstructured("KeyboardState_onUpdateShiftState", s);
- }
- }
-
- public static void keyboardState_setAlphabetKeyboard() {
- if (UnsLogGroup.KEYBOARDSTATE_SETALPHABETKEYBOARD_ENABLED) {
- final String s = "setAlphabetKeyboard";
- logUnstructured("KeyboardState_setAlphabetKeyboard", s);
- }
- }
-
- public static void keyboardState_setShifted(final KeyboardState keyboardState,
- final String shiftMode) {
- if (UnsLogGroup.KEYBOARDSTATE_SETSHIFTED_ENABLED) {
- final String s = "setShifted: shiftMode=" + shiftMode + " " + keyboardState;
- logUnstructured("KeyboardState_setShifted", s);
- }
- }
-
- public static void keyboardState_setShiftLocked(final KeyboardState keyboardState,
- final boolean shiftLocked) {
- if (UnsLogGroup.KEYBOARDSTATE_SETSHIFTLOCKED_ENABLED) {
- final String s = "setShiftLocked: shiftLocked=" + shiftLocked + " " + keyboardState;
- logUnstructured("KeyboardState_setShiftLocked", s);
- }
- }
-
- public static void keyboardState_setSymbolsKeyboard() {
- if (UnsLogGroup.KEYBOARDSTATE_SETSYMBOLSKEYBOARD_ENABLED) {
- final String s = "setSymbolsKeyboard";
- logUnstructured("KeyboardState_setSymbolsKeyboard", s);
- }
- }
-
- public static void keyboardState_setSymbolsShiftedKeyboard() {
- if (UnsLogGroup.KEYBOARDSTATE_SETSYMBOLSSHIFTEDKEYBOARD_ENABLED) {
- final String s = "setSymbolsShiftedKeyboard";
- logUnstructured("KeyboardState_setSymbolsShiftedKeyboard", s);
- }
- }
-
- public static void keyboardState_toggleAlphabetAndSymbols(final KeyboardState keyboardState) {
- if (UnsLogGroup.KEYBOARDSTATE_TOGGLEALPHABETANDSYMBOLS_ENABLED) {
- final String s = "toggleAlphabetAndSymbols: " + keyboardState;
- logUnstructured("KeyboardState_toggleAlphabetAndSymbols", s);
- }
- }
-
public static void latinIME_commitCurrentAutoCorrection(final String typedWord,
final String autoCorrection) {
if (UnsLogGroup.LATINIME_COMMITCURRENTAUTOCORRECTION_ENABLED) {
@@ -637,14 +528,22 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- public static void latinIME_onStartInputViewInternal(final EditorInfo editorInfo) {
+ public static void latinIME_onStartInputViewInternal(final EditorInfo editorInfo,
+ final SharedPreferences prefs) {
if (UnsLogGroup.LATINIME_ONSTARTINPUTVIEWINTERNAL_ENABLED) {
final StringBuilder builder = new StringBuilder();
builder.append("onStartInputView: editorInfo:");
- builder.append("inputType=");
- builder.append(editorInfo.inputType);
- builder.append("imeOptions=");
- builder.append(editorInfo.imeOptions);
+ builder.append("\tinputType=");
+ builder.append(Integer.toHexString(editorInfo.inputType));
+ builder.append("\timeOptions=");
+ builder.append(Integer.toHexString(editorInfo.imeOptions));
+ builder.append("\tdisplay="); builder.append(Build.DISPLAY);
+ builder.append("\tmodel="); builder.append(Build.MODEL);
+ for (Map.Entry<String,?> entry : prefs.getAll().entrySet()) {
+ builder.append("\t" + entry.getKey());
+ Object value = entry.getValue();
+ builder.append("=" + ((value == null) ? "<null>" : value.toString()));
+ }
logUnstructured("LatinIME_onStartInputViewInternal", builder.toString());
}
}
@@ -745,6 +644,42 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
+ public static void latinKeyboardView_setKeyboard(final Keyboard keyboard) {
+ if (UnsLogGroup.LATINKEYBOARDVIEW_SETKEYBOARD_ENABLED) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("id=");
+ builder.append(keyboard.mId);
+ builder.append("\tw=");
+ builder.append(keyboard.mOccupiedWidth);
+ builder.append("\th=");
+ builder.append(keyboard.mOccupiedHeight);
+ builder.append("\tkeys=[");
+ boolean first = true;
+ for (Key key : keyboard.mKeys) {
+ if (first) {
+ first = false;
+ } else {
+ builder.append(",");
+ }
+ builder.append("{code:");
+ builder.append(key.mCode);
+ builder.append(",altCode:");
+ builder.append(key.mAltCode);
+ builder.append(",x:");
+ builder.append(key.mX);
+ builder.append(",y:");
+ builder.append(key.mY);
+ builder.append(",w:");
+ builder.append(key.mWidth);
+ builder.append(",h:");
+ builder.append(key.mHeight);
+ builder.append("}");
+ }
+ builder.append("]");
+ logUnstructured("LatinKeyboardView_setKeyboard", builder.toString());
+ }
+ }
+
public static void latinIME_revertCommit(final String originallyTypedWord) {
if (UnsLogGroup.LATINIME_REVERTCOMMIT_ENABLED) {
logUnstructured("LatinIME_revertCommit", originallyTypedWord);
diff --git a/java/src/com/android/inputmethod/latin/SubtypeLocale.java b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
index fc6193287..33ad23a60 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeLocale.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
@@ -27,10 +27,23 @@ import java.util.Locale;
public class SubtypeLocale {
private static final String TAG = SubtypeLocale.class.getSimpleName();
+ // This class must be located in the same package as LatinIME.java.
+ private static final String RESOURCE_PACKAGE_NAME =
+ DictionaryFactory.class.getPackage().getName();
// Special language code to represent "no language".
public static final String NO_LANGUAGE = "zz";
+ public static final String QWERTY = "qwerty";
+
+ private static String[] sPredefinedKeyboardLayoutSet;
+ // Keyboard layout to its display name map.
+ private static final HashMap<String, String> sKeyboardKayoutToDisplayNameMap =
+ new HashMap<String, String>();
+ // Keyboard layout to subtype name resource id map.
+ private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
+ new HashMap<String, Integer>();
+ private static final String SUBTYPE_RESOURCE_GENERIC_NAME_PREFIX = "string/subtype_generic_";
// Exceptional locales to display name map.
private static final HashMap<String, String> sExceptionalDisplayNamesMap =
new HashMap<String, String>();
@@ -41,13 +54,36 @@ public class SubtypeLocale {
public static void init(Context context) {
final Resources res = context.getResources();
- final String[] locales = res.getStringArray(R.array.subtype_locale_exception_keys);
- final String[] displayNames = res.getStringArray(R.array.subtype_locale_exception_values);
- for (int i = 0; i < locales.length; i++) {
- sExceptionalDisplayNamesMap.put(locales[i], displayNames[i]);
+
+ final String[] predefinedLayoutSet = res.getStringArray(R.array.predefined_layouts);
+ sPredefinedKeyboardLayoutSet = predefinedLayoutSet;
+ final String[] layoutDisplayNames = res.getStringArray(
+ R.array.predefined_layout_display_names);
+ for (int i = 0; i < predefinedLayoutSet.length; i++) {
+ final String layoutName = predefinedLayoutSet[i];
+ sKeyboardKayoutToDisplayNameMap.put(layoutName, layoutDisplayNames[i]);
+ final String resourceName = SUBTYPE_RESOURCE_GENERIC_NAME_PREFIX + layoutName;
+ final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME);
+ sKeyboardLayoutToNameIdsMap.put(layoutName, resId);
+ }
+
+ final String[] exceptionalLocales = res.getStringArray(
+ R.array.subtype_locale_exception_keys);
+ final String[] exceptionalDisplayNames = res.getStringArray(
+ R.array.subtype_locale_exception_values);
+ for (int i = 0; i < exceptionalLocales.length; i++) {
+ sExceptionalDisplayNamesMap.put(exceptionalLocales[i], exceptionalDisplayNames[i]);
}
}
+ public static String[] getPredefinedKeyboardLayoutSet() {
+ return sPredefinedKeyboardLayoutSet;
+ }
+
+ public static int getSubtypeNameIdFromKeyboardLayoutName(String keyboardLayoutName) {
+ return sKeyboardLayoutToNameIdsMap.get(keyboardLayoutName);
+ }
+
// Get InputMethodSubtype's display name in its locale.
// isAdditionalSubtype (T=true, F=false)
// locale layout | Short Middle Full
@@ -115,7 +151,8 @@ public class SubtypeLocale {
}
public static String getKeyboardLayoutSetDisplayName(InputMethodSubtype subtype) {
- return getKeyboardLayoutSetName(subtype).toUpperCase();
+ final String layoutName = getKeyboardLayoutSetName(subtype);
+ return sKeyboardKayoutToDisplayNameMap.get(layoutName);
}
public static String getKeyboardLayoutSetName(InputMethodSubtype subtype) {
@@ -125,7 +162,7 @@ public class SubtypeLocale {
if (keyboardLayoutSet == null) {
android.util.Log.w(TAG, "KeyboardLayoutSet not found, use QWERTY: " +
"locale=" + subtype.getLocale() + " extraValue=" + subtype.getExtraValue());
- return AdditionalSubtype.QWERTY;
+ return QWERTY;
}
return keyboardLayoutSet;
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 1a9f373a1..804287309 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -16,19 +16,16 @@
package com.android.inputmethod.latin;
-import static com.android.inputmethod.latin.Constants.Subtype.KEYBOARD_MODE;
import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.REQ_NETWORK_CONNECTIVITY;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.IBinder;
-import android.text.TextUtils;
import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -36,7 +33,6 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -45,37 +41,42 @@ public class SubtypeSwitcher {
private static boolean DBG = LatinImeLogger.sDBG;
private static final String TAG = SubtypeSwitcher.class.getSimpleName();
- private static final char LOCALE_SEPARATOR = '_';
- private final TextUtils.SimpleStringSplitter mLocaleSplitter =
- new TextUtils.SimpleStringSplitter(LOCALE_SEPARATOR);
-
private static final SubtypeSwitcher sInstance = new SubtypeSwitcher();
private /* final */ LatinIME mService;
private /* final */ InputMethodManager mImm;
private /* final */ Resources mResources;
private /* final */ ConnectivityManager mConnectivityManager;
- private final ArrayList<InputMethodSubtype> mEnabledKeyboardSubtypesOfCurrentInputMethod =
- new ArrayList<InputMethodSubtype>();
- private final ArrayList<String> mEnabledLanguagesOfCurrentInputMethod = new ArrayList<String>();
/*-----------------------------------------------------------*/
// Variants which should be changed only by reload functions.
- private boolean mNeedsToDisplayLanguage;
- private boolean mIsDictionaryAvailable;
- private boolean mIsSystemLanguageSameAsInputLanguage;
+ private NeedsToDisplayLanguage mNeedsToDisplayLanguage = new NeedsToDisplayLanguage();
private InputMethodInfo mShortcutInputMethodInfo;
private InputMethodSubtype mShortcutSubtype;
- private List<InputMethodSubtype> mAllEnabledSubtypesOfCurrentInputMethod;
private InputMethodSubtype mNoLanguageSubtype;
// Note: This variable is always non-null after {@link #initialize(LatinIME)}.
private InputMethodSubtype mCurrentSubtype;
- private Locale mSystemLocale;
- private Locale mInputLocale;
- private String mInputLocaleStr;
+ private Locale mCurrentSystemLocale;
/*-----------------------------------------------------------*/
private boolean mIsNetworkConnected;
+ static class NeedsToDisplayLanguage {
+ private int mEnabledSubtypeCount;
+ private boolean mIsSystemLanguageSameAsInputLanguage;
+
+ public boolean getValue() {
+ return mEnabledSubtypeCount >= 2 || !mIsSystemLanguageSameAsInputLanguage;
+ }
+
+ public void updateEnabledSubtypeCount(int count) {
+ mEnabledSubtypeCount = count;
+ }
+
+ public void updateIsSystemLanguageSameAsInputLanguage(boolean isSame) {
+ mIsSystemLanguageSameAsInputLanguage = isSame;
+ }
+ }
+
public static SubtypeSwitcher getInstance() {
return sInstance;
}
@@ -96,15 +97,10 @@ public class SubtypeSwitcher {
mImm = ImfUtils.getInputMethodManager(service);
mConnectivityManager = (ConnectivityManager) service.getSystemService(
Context.CONNECTIVITY_SERVICE);
- mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
- mEnabledLanguagesOfCurrentInputMethod.clear();
- mSystemLocale = null;
- mInputLocale = null;
- mInputLocaleStr = null;
+ mCurrentSystemLocale = mResources.getConfiguration().locale;
mCurrentSubtype = mImm.getCurrentInputMethodSubtype();
- mAllEnabledSubtypesOfCurrentInputMethod = null;
mNoLanguageSubtype = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- service, SubtypeLocale.NO_LANGUAGE, AdditionalSubtype.QWERTY);
+ service, SubtypeLocale.NO_LANGUAGE, SubtypeLocale.QWERTY);
final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
mIsNetworkConnected = (info != null && info.isConnected());
@@ -113,7 +109,7 @@ public class SubtypeSwitcher {
// Update all parameters stored in SubtypeSwitcher.
// Only configuration changed event is allowed to call this because this is heavy.
private void updateAllParameters() {
- mSystemLocale = mResources.getConfiguration().locale;
+ mCurrentSystemLocale = mResources.getConfiguration().locale;
updateSubtype(mImm.getCurrentInputMethodSubtype());
updateParametersOnStartInputView();
}
@@ -127,31 +123,20 @@ public class SubtypeSwitcher {
// Reload enabledSubtypes from the framework.
private void updateEnabledSubtypes() {
- final String currentMode = mCurrentSubtype.getMode();
+ final InputMethodSubtype currentSubtype = mCurrentSubtype;
boolean foundCurrentSubtypeBecameDisabled = true;
- mAllEnabledSubtypesOfCurrentInputMethod = mImm.getEnabledInputMethodSubtypeList(
- null, true);
- mEnabledLanguagesOfCurrentInputMethod.clear();
- mEnabledKeyboardSubtypesOfCurrentInputMethod.clear();
- for (InputMethodSubtype ims : mAllEnabledSubtypesOfCurrentInputMethod) {
- final String locale = ims.getLocale();
- final String mode = ims.getMode();
- mLocaleSplitter.setString(locale);
- if (mLocaleSplitter.hasNext()) {
- mEnabledLanguagesOfCurrentInputMethod.add(mLocaleSplitter.next());
- }
- if (locale.equals(mInputLocaleStr) && mode.equals(currentMode)) {
+ final List<InputMethodSubtype> enabledSubtypesOfThisIme =
+ mImm.getEnabledInputMethodSubtypeList(null, true);
+ for (InputMethodSubtype ims : enabledSubtypesOfThisIme) {
+ if (ims.equals(currentSubtype)) {
foundCurrentSubtypeBecameDisabled = false;
}
- if (KEYBOARD_MODE.equals(ims.getMode())) {
- mEnabledKeyboardSubtypesOfCurrentInputMethod.add(ims);
- }
}
- mNeedsToDisplayLanguage = !(getEnabledKeyboardLocaleCount() <= 1
- && mIsSystemLanguageSameAsInputLanguage);
+ mNeedsToDisplayLanguage.updateEnabledSubtypeCount(enabledSubtypesOfThisIme.size());
if (foundCurrentSubtypeBecameDisabled) {
if (DBG) {
- Log.w(TAG, "Current subtype: " + mInputLocaleStr + ", " + currentMode);
+ Log.w(TAG, "Last subtype: "
+ + currentSubtype.getLocale() + "/" + currentSubtype.getExtraValue());
Log.w(TAG, "Last subtype was disabled. Update to the current one.");
}
updateSubtype(mImm.getCurrentInputMethodSubtype());
@@ -192,70 +177,20 @@ public class SubtypeSwitcher {
// Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
public void updateSubtype(InputMethodSubtype newSubtype) {
- final String newLocale = newSubtype.getLocale();
- final String newMode = newSubtype.getMode();
- final String oldMode = mCurrentSubtype.getMode();
if (DBG) {
- Log.w(TAG, "Update subtype to:" + newLocale + "," + newMode
- + ", from: " + mInputLocaleStr + ", " + oldMode);
+ Log.w(TAG, "onCurrentInputMethodSubtypeChanged: to: "
+ + newSubtype.getLocale() + "/" + newSubtype.getExtraValue() + ", from: "
+ + mCurrentSubtype.getLocale() + "/" + mCurrentSubtype.getExtraValue());
}
- boolean languageChanged = false;
- if (!newLocale.equals(mInputLocaleStr)) {
- if (mInputLocaleStr != null) {
- languageChanged = true;
- }
- updateInputLocale(newLocale);
- }
- boolean modeChanged = false;
- if (!newMode.equals(oldMode)) {
- if (oldMode != null) {
- modeChanged = true;
- }
- }
- mCurrentSubtype = newSubtype;
+ if (newSubtype.equals(mCurrentSubtype)) return;
- if (KEYBOARD_MODE.equals(mCurrentSubtype.getMode())) {
- if (modeChanged || languageChanged) {
- updateShortcutIME();
- mService.onRefreshKeyboard();
- }
- } else {
- final String packageName = mService.getPackageName();
- int version = -1;
- try {
- version = mService.getPackageManager().getPackageInfo(
- packageName, 0).versionCode;
- } catch (NameNotFoundException e) {
- }
- Log.w(TAG, "Unknown subtype mode: " + newMode + "," + version + ", " + packageName
- + ". IME is already changed to other IME.");
- Log.w(TAG, "Subtype mode:" + newSubtype.getMode());
- Log.w(TAG, "Subtype locale:" + newSubtype.getLocale());
- Log.w(TAG, "Subtype extra value:" + newSubtype.getExtraValue());
- Log.w(TAG, "Subtype is auxiliary:" + newSubtype.isAuxiliary());
- }
- }
+ final Locale newLocale = SubtypeLocale.getSubtypeLocale(newSubtype);
+ mNeedsToDisplayLanguage.updateIsSystemLanguageSameAsInputLanguage(
+ mCurrentSystemLocale.equals(newLocale));
- // Update the current input locale from Locale string.
- private void updateInputLocale(String inputLocaleStr) {
- // example: inputLocaleStr = "en_US" "en" ""
- // "en_US" --> language: en & country: US
- // "en" --> language: en
- // "" --> the system locale
- if (!TextUtils.isEmpty(inputLocaleStr)) {
- mInputLocale = LocaleUtils.constructLocaleFromString(inputLocaleStr);
- mInputLocaleStr = inputLocaleStr;
- } else {
- mInputLocale = mSystemLocale;
- String country = mSystemLocale.getCountry();
- mInputLocaleStr = mSystemLocale.getLanguage()
- + (TextUtils.isEmpty(country) ? "" : "_" + mSystemLocale.getLanguage());
- }
- mIsSystemLanguageSameAsInputLanguage = getSystemLocale().getLanguage().equalsIgnoreCase(
- getInputLocale().getLanguage());
- mNeedsToDisplayLanguage = !(getEnabledKeyboardLocaleCount() <= 1
- && mIsSystemLanguageSameAsInputLanguage);
- mIsDictionaryAvailable = DictionaryFactory.isDictionaryAvailable(mService, mInputLocale);
+ mCurrentSubtype = newSubtype;
+ updateShortcutIME();
+ mService.onRefreshKeyboard();
}
////////////////////////////
@@ -323,62 +258,31 @@ public class SubtypeSwitcher {
}
//////////////////////////////////
- // Language Switching functions //
+ // Subtype Switching functions //
//////////////////////////////////
- public int getEnabledKeyboardLocaleCount() {
- return mEnabledKeyboardSubtypesOfCurrentInputMethod.size();
- }
-
public boolean needsToDisplayLanguage(Locale keyboardLocale) {
if (keyboardLocale.toString().equals(SubtypeLocale.NO_LANGUAGE)) {
return true;
}
- if (!keyboardLocale.equals(mInputLocale)) {
+ if (!keyboardLocale.equals(getCurrentSubtypeLocale())) {
return false;
}
- return mNeedsToDisplayLanguage;
- }
-
- public Locale getInputLocale() {
- return mInputLocale;
- }
-
- public String getInputLocaleStr() {
- return mInputLocaleStr;
- }
-
- public String[] getEnabledLanguages() {
- int enabledLanguageCount = mEnabledLanguagesOfCurrentInputMethod.size();
- // Workaround for explicitly specifying the voice language
- if (enabledLanguageCount == 1) {
- mEnabledLanguagesOfCurrentInputMethod.add(mEnabledLanguagesOfCurrentInputMethod
- .get(0));
- ++enabledLanguageCount;
- }
- return mEnabledLanguagesOfCurrentInputMethod.toArray(new String[enabledLanguageCount]);
+ return mNeedsToDisplayLanguage.getValue();
}
- public Locale getSystemLocale() {
- return mSystemLocale;
- }
-
- public boolean isSystemLanguageSameAsInputLanguage() {
- return mIsSystemLanguageSameAsInputLanguage;
+ public Locale getCurrentSubtypeLocale() {
+ return SubtypeLocale.getSubtypeLocale(mCurrentSubtype);
}
public void onConfigurationChanged(Configuration conf) {
final Locale systemLocale = conf.locale;
// If system configuration was changed, update all parameters.
- if (!TextUtils.equals(systemLocale.toString(), mSystemLocale.toString())) {
+ if (!systemLocale.equals(mCurrentSystemLocale)) {
updateAllParameters();
}
}
- public boolean isDictionaryAvailable() {
- return mIsDictionaryAvailable;
- }
-
public InputMethodSubtype getCurrentSubtype() {
return mCurrentSubtype;
}
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index d22332116..97df98e34 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -21,6 +21,7 @@ import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions
import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
+import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
@@ -272,6 +273,29 @@ public class BinaryDictInputOutput {
}
/**
+ * Writes a string with our character format to a ByteArrayOutputStream.
+ *
+ * This will also write the terminator byte.
+ *
+ * @param buffer the ByteArrayOutputStream to write to.
+ * @param word the string to write.
+ */
+ private static void writeString(ByteArrayOutputStream buffer, final String word) {
+ final int length = word.length();
+ for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
+ final int codePoint = word.codePointAt(i);
+ if (1 == getCharSize(codePoint)) {
+ buffer.write((byte) codePoint);
+ } else {
+ buffer.write((byte) (0xFF & (codePoint >> 16)));
+ buffer.write((byte) (0xFF & (codePoint >> 8)));
+ buffer.write((byte) (0xFF & codePoint));
+ }
+ }
+ buffer.write(GROUP_CHARACTERS_TERMINATOR);
+ }
+
+ /**
* Reads a string from a RandomAccessFile. This is the converse of the above method.
*/
private static String readString(final RandomAccessFile source) throws IOException {
@@ -894,15 +918,11 @@ public class BinaryDictInputOutput {
final FusionDictionary dict, final int version)
throws IOException, UnsupportedFormatException {
- // Addresses are limited to 3 bytes, so we'll just make a 16MB buffer. Since addresses
- // can be relative to each node, the structure itself is not limited to 16MB at all, but
- // I doubt this will ever be shot. If it is, deciding the order of the nodes becomes
- // a quite complicated problem, because though the dictionary itself does not have a
- // size limit, each node must still be within 16MB of all its children and parents.
- // As long as this is ensured, the dictionary file may grow to any size.
- // Anyway, to make a dictionary bigger than 16MB just increase the size of this buffer.
- final byte[] buffer = new byte[1 << 24];
- int index = 0;
+ // Addresses are limited to 3 bytes, but since addresses can be relative to each node, the
+ // structure itself is not limited to 16MB. However, if it is over 16MB deciding the order
+ // of the nodes becomes a quite complicated problem, because though the dictionary itself
+ // does not have a size limit, each node must still be within 16MB of all its children and
+ // parents. As long as this is ensured, the dictionary file may grow to any size.
if (version < MINIMUM_SUPPORTED_VERSION || version > MAXIMUM_SUPPORTED_VERSION) {
throw new UnsupportedFormatException("Requested file format version " + version
@@ -910,47 +930,54 @@ public class BinaryDictInputOutput {
+ MINIMUM_SUPPORTED_VERSION + " through " + MAXIMUM_SUPPORTED_VERSION);
}
+ ByteArrayOutputStream headerBuffer = new ByteArrayOutputStream(256);
+
// The magic number in big-endian order.
if (version >= FIRST_VERSION_WITH_HEADER_SIZE) {
// Magic number for version 2+.
- buffer[index++] = (byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 24));
- buffer[index++] = (byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 16));
- buffer[index++] = (byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 8));
- buffer[index++] = (byte) (0xFF & VERSION_2_MAGIC_NUMBER);
+ headerBuffer.write((byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 24)));
+ headerBuffer.write((byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 16)));
+ headerBuffer.write((byte) (0xFF & (VERSION_2_MAGIC_NUMBER >> 8)));
+ headerBuffer.write((byte) (0xFF & VERSION_2_MAGIC_NUMBER));
// Dictionary version.
- buffer[index++] = (byte) (0xFF & (version >> 8));
- buffer[index++] = (byte) (0xFF & version);
+ headerBuffer.write((byte) (0xFF & (version >> 8)));
+ headerBuffer.write((byte) (0xFF & version));
} else {
// Magic number for version 1.
- buffer[index++] = (byte) (0xFF & (VERSION_1_MAGIC_NUMBER >> 8));
- buffer[index++] = (byte) (0xFF & VERSION_1_MAGIC_NUMBER);
+ headerBuffer.write((byte) (0xFF & (VERSION_1_MAGIC_NUMBER >> 8)));
+ headerBuffer.write((byte) (0xFF & VERSION_1_MAGIC_NUMBER));
// Dictionary version.
- buffer[index++] = (byte) (0xFF & version);
+ headerBuffer.write((byte) (0xFF & version));
}
// Options flags
final int options = makeOptionsValue(dict.mOptions);
- buffer[index++] = (byte) (0xFF & (options >> 8));
- buffer[index++] = (byte) (0xFF & options);
+ headerBuffer.write((byte) (0xFF & (options >> 8)));
+ headerBuffer.write((byte) (0xFF & options));
if (version >= FIRST_VERSION_WITH_HEADER_SIZE) {
- final int headerSizeOffset = index;
- index += 4; // Size of the header size
-
+ final int headerSizeOffset = headerBuffer.size();
+ // Placeholder to be written later with header size.
+ for (int i = 0; i < 4; ++i) {
+ headerBuffer.write(0);
+ }
// Write out the options.
for (final String key : dict.mOptions.mAttributes.keySet()) {
final String value = dict.mOptions.mAttributes.get(key);
- index += CharEncoding.writeString(buffer, index, key);
- index += CharEncoding.writeString(buffer, index, value);
+ CharEncoding.writeString(headerBuffer, key);
+ CharEncoding.writeString(headerBuffer, value);
}
-
+ final int size = headerBuffer.size();
+ final byte[] bytes = headerBuffer.toByteArray();
// Write out the header size.
- buffer[headerSizeOffset] = (byte) (0xFF & (index >> 24));
- buffer[headerSizeOffset + 1] = (byte) (0xFF & (index >> 16));
- buffer[headerSizeOffset + 2] = (byte) (0xFF & (index >> 8));
- buffer[headerSizeOffset + 3] = (byte) (0xFF & (index >> 0));
+ bytes[headerSizeOffset] = (byte) (0xFF & (size >> 24));
+ bytes[headerSizeOffset + 1] = (byte) (0xFF & (size >> 16));
+ bytes[headerSizeOffset + 2] = (byte) (0xFF & (size >> 8));
+ bytes[headerSizeOffset + 3] = (byte) (0xFF & (size >> 0));
+ destination.write(bytes);
+ } else {
+ headerBuffer.writeTo(destination);
}
- destination.write(buffer, 0, index);
- index = 0;
+ headerBuffer.close();
// Leave the choice of the optimal node order to the flattenTree function.
MakedictLog.i("Flattening the tree...");
@@ -961,6 +988,12 @@ public class BinaryDictInputOutput {
MakedictLog.i("Checking array...");
checkFlatNodeArray(flatNodes);
+ // Create a buffer that matches the final dictionary size.
+ final Node lastNode = flatNodes.get(flatNodes.size() - 1);
+ final int bufferSize =(lastNode.mCachedAddress + lastNode.mCachedSize);
+ final byte[] buffer = new byte[bufferSize];
+ int index = 0;
+
MakedictLog.i("Writing file...");
int dataEndOffset = 0;
for (Node n : flatNodes) {
diff --git a/tests/res/values/donottranslate.xml b/tests/res/values/donottranslate.xml
index 42181ed92..3f7634a03 100644
--- a/tests/res/values/donottranslate.xml
+++ b/tests/res/values/donottranslate.xml
@@ -50,7 +50,13 @@
<string name="multiple_labels_with_escape_surrounded_by_spaces">" \\abc , d\\ef , gh\\i "</string>
<string name="multiple_labels_with_comma_and_escape">"ab\\\\,d\\\\\\,,g\\,i"</string>
<string name="multiple_labels_with_comma_and_escape_surrounded_by_spaces">" ab\\\\ , d\\\\\\, , g\\,i "</string>
- <string name="indirect_string">!label/multiple_chars</string>
- <string name="indirect_string_with_literal">x,!label/multiple_chars,y</string>
- <string name="infinite_indirection">infinite,!label/infinite_indirection,loop</string>
+ <string name="indirect_string">!text/multiple_chars</string>
+ <string name="indirect_string_with_literal">x,!text/multiple_chars,y</string>
+ <string name="indirect2_string">!text/indirect_string</string>
+ <string name="infinite_indirection">infinite,!text/infinite_indirection,loop</string>
+ <string name="upper_indirect_string">!TEXT/MULTIPLE_CHARS</string>
+ <string name="upper_indirect_string_with_literal">x,!TEXT/MULTIPLE_CHARS,y</string>
+ <string name="upper_indirect2_string">!TEXT/UPPER_INDIRECT_STRING</string>
+ <string name="upper_infinite_indirection">infinite,!TEXT/INFINITE_INDIRECTION,loop</string>
+ <string name="indirect_navigate_actions_as_more_key">!fixedColumnOrder!2,!text/action_previous_as_more_key,!text/action_next_as_more_key</string>
</resources>
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java
index d780352b7..19912c4e4 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java
@@ -17,7 +17,6 @@
package com.android.inputmethod.keyboard.internal;
import android.test.AndroidTestCase;
-import android.text.TextUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -25,16 +24,17 @@ import java.util.Arrays;
import java.util.Locale;
public class KeySpecParserCsvTests extends AndroidTestCase {
- private final KeyboardLabelsSet mLabelsSet = new KeyboardLabelsSet();
+ private final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
@Override
protected void setUp() throws Exception {
super.setUp();
- mLabelsSet.setLanguage(Locale.ENGLISH.getLanguage());
+ mTextsSet.setLanguage(Locale.ENGLISH.getLanguage());
+ mTextsSet.loadStringResources(getContext());
final String[] testResourceNames = getAllResourceIdNames(
com.android.inputmethod.latin.tests.R.string.class);
- mLabelsSet.loadStringResourcesInternal(getTestContext(),
+ mTextsSet.loadStringResourcesInternal(getTestContext(),
testResourceNames,
com.android.inputmethod.latin.tests.R.string.empty_string);
}
@@ -49,22 +49,30 @@ public class KeySpecParserCsvTests extends AndroidTestCase {
return names.toArray(new String[names.size()]);
}
- private void assertTextArray(String message, String value, String ... expected) {
- final String actual[] = KeySpecParser.parseCsvString(value, mLabelsSet);
- if (expected.length == 0) {
- assertNull(message + ": expected=null actual=" + Arrays.toString(actual),
- actual);
+ private static void assertArrayEquals(String message, Object[] expected, Object[] actual) {
+ if (expected == actual) {
return;
}
- assertEquals(message + ": expected=" + Arrays.toString(expected)
- + " actual=" + Arrays.toString(actual)
- + ": result length", expected.length, actual.length);
- for (int i = 0; i < actual.length; i++) {
- final boolean equals = TextUtils.equals(expected[i], actual[i]);
- assertTrue(format(message + ": result at " + i + ":", expected[i], actual[i]), equals);
+ if (expected == null || actual == null) {
+ assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+ return;
+ }
+ if (expected.length != actual.length) {
+ assertEquals(message + " [length]", Arrays.toString(expected), Arrays.toString(actual));
+ return;
+ }
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals(message + " [" + i + "]",
+ Arrays.toString(expected), Arrays.toString(actual));
}
}
+ private void assertTextArray(String message, String value, String ... expectedArray) {
+ final String[] actual = KeySpecParser.parseCsvString(value, mTextsSet);
+ final String[] expected = (expectedArray.length == 0) ? null : expectedArray;
+ assertArrayEquals(message, expected, actual);
+ }
+
private void assertError(String message, String value, String ... expected) {
try {
assertTextArray(message, value, expected);
@@ -114,9 +122,10 @@ public class KeySpecParserCsvTests extends AndroidTestCase {
"ab" + SURROGATE1 + "cd",
"ab" + SURROGATE1 + "cd");
- assertTextArray("Incomplete resource reference 1", "label", "label");
- assertTextArray("Incomplete resource reference 2", "!label", "!label");
- assertTextArray("Incomplete resource reference 3", "label/", "label/");
+ assertTextArray("Incomplete resource reference 1", "text", "text");
+ assertTextArray("Incomplete resource reference 2", "!text", "!text");
+ assertTextArray("Incomplete RESOURCE REFERENCE 2", "!TEXT", "!TEXT");
+ assertTextArray("Incomplete resource reference 3", "text/", "text/");
assertTextArray("Incomplete resource reference 4", "!" + SURROGATE2, "!" + SURROGATE2);
}
@@ -148,9 +157,11 @@ public class KeySpecParserCsvTests extends AndroidTestCase {
assertTextArray("Escaped surrogate with escape",
PAIR1 + "\\\\" + PAIR2, PAIR1 + "\\\\" + PAIR2);
- assertTextArray("Escaped !label", "\\!label", "\\!label");
- assertTextArray("Escaped !label/", "\\!label/", "\\!label/");
- assertTextArray("Escaped !label/", "\\!label/empty_string", "\\!label/empty_string");
+ assertTextArray("Escaped !text", "\\!text", "\\!text");
+ assertTextArray("Escaped !text/", "\\!text/", "\\!text/");
+ assertTextArray("Escaped !TEXT/", "\\!TEXT/", "\\!TEXT/");
+ assertTextArray("Escaped !text/name", "\\!text/empty_string", "\\!text/empty_string");
+ assertTextArray("Escaped !TEXT/NAME", "\\!TEXT/EMPTY_STRING", "\\!TEXT/EMPTY_STRING");
}
public void testParseCsvTextMulti() {
@@ -181,133 +192,206 @@ public class KeySpecParserCsvTests extends AndroidTestCase {
assertTextArray("Multiple labels with comma and escape surrounded by spaces",
" ab\\\\ , d\\\\\\, , g\\,i ", " ab\\\\ ", " d\\\\\\, ", " g\\,i ");
- assertTextArray("Multiple escaped !label", "\\!,\\!label/empty_string",
- "\\!", "\\!label/empty_string");
+ assertTextArray("Multiple escaped !text", "\\!,\\!text/empty_string",
+ "\\!", "\\!text/empty_string");
+ assertTextArray("Multiple escaped !TEXT", "\\!,\\!TEXT/EMPTY_STRING",
+ "\\!", "\\!TEXT/EMPTY_STRING");
}
public void testParseCsvResourceError() {
- assertError("Incomplete resource name", "!label/", "!label/");
- assertError("Non existing resource", "!label/non_existing");
+ assertError("Incomplete resource name", "!text/", "!text/");
+ assertError("Non existing resource", "!text/non_existing");
}
public void testParseCsvResourceZero() {
assertTextArray("Empty string",
- "!label/empty_string");
+ "!text/empty_string");
+ assertTextArray("EMPTY STRING",
+ "!TEXT/EMPTY_STRING");
}
public void testParseCsvResourceSingle() {
assertTextArray("Single char",
- "!label/single_char", "a");
+ "!text/single_char", "a");
+ assertTextArray("SINGLE CHAR",
+ "!TEXT/SINGLE_CHAR", "a");
assertTextArray("Space",
- "!label/space", " ");
+ "!text/space", " ");
assertTextArray("Single label",
- "!label/single_label", "abc");
+ "!text/single_label", "abc");
assertTextArray("Spaces",
- "!label/spaces", " ");
+ "!text/spaces", " ");
assertTextArray("Spaces in label",
- "!label/spaces_in_label", "a b c");
+ "!text/spaces_in_label", "a b c");
assertTextArray("Spaces at beginning of label",
- "!label/spaces_at_beginning_of_label", " abc");
+ "!text/spaces_at_beginning_of_label", " abc");
assertTextArray("Spaces at end of label",
- "!label/spaces_at_end_of_label", "abc ");
+ "!text/spaces_at_end_of_label", "abc ");
assertTextArray("label surrounded by spaces",
- "!label/label_surrounded_by_spaces", " abc ");
+ "!text/label_surrounded_by_spaces", " abc ");
assertTextArray("Escape and single char",
- "\\\\!label/single_char", "\\\\a");
+ "\\\\!text/single_char", "\\\\a");
+ assertTextArray("Escape and SINGLE CHAR",
+ "\\\\!TEXT/SINGLE_CHAR", "\\\\a");
}
public void testParseCsvResourceSingleEscaped() {
assertTextArray("Escaped char",
- "!label/escaped_char", "\\a");
+ "!text/escaped_char", "\\a");
assertTextArray("Escaped comma",
- "!label/escaped_comma", "\\,");
+ "!text/escaped_comma", "\\,");
assertTextArray("Escaped comma escape",
- "!label/escaped_comma_escape", "a\\,\\");
+ "!text/escaped_comma_escape", "a\\,\\");
assertTextArray("Escaped escape",
- "!label/escaped_escape", "\\\\");
+ "!text/escaped_escape", "\\\\");
assertTextArray("Escaped label",
- "!label/escaped_label", "a\\bc");
+ "!text/escaped_label", "a\\bc");
assertTextArray("Escaped label at beginning",
- "!label/escaped_label_at_beginning", "\\abc");
+ "!text/escaped_label_at_beginning", "\\abc");
assertTextArray("Escaped label at end",
- "!label/escaped_label_at_end", "abc\\");
+ "!text/escaped_label_at_end", "abc\\");
assertTextArray("Escaped label with comma",
- "!label/escaped_label_with_comma", "a\\,c");
+ "!text/escaped_label_with_comma", "a\\,c");
assertTextArray("Escaped label with comma at beginning",
- "!label/escaped_label_with_comma_at_beginning", "\\,bc");
+ "!text/escaped_label_with_comma_at_beginning", "\\,bc");
assertTextArray("Escaped label with comma at end",
- "!label/escaped_label_with_comma_at_end", "ab\\,");
+ "!text/escaped_label_with_comma_at_end", "ab\\,");
assertTextArray("Escaped label with successive",
- "!label/escaped_label_with_successive", "\\,\\\\bc");
+ "!text/escaped_label_with_successive", "\\,\\\\bc");
assertTextArray("Escaped label with escape",
- "!label/escaped_label_with_escape", "a\\\\c");
+ "!text/escaped_label_with_escape", "a\\\\c");
}
public void testParseCsvResourceMulti() {
assertTextArray("Multiple chars",
- "!label/multiple_chars", "a", "b", "c");
+ "!text/multiple_chars", "a", "b", "c");
+ assertTextArray("MULTIPLE CHARS",
+ "!TEXT/MULTIPLE_CHARS", "a", "b", "c");
assertTextArray("Multiple chars surrounded by spaces",
- "!label/multiple_chars_surrounded_by_spaces",
+ "!text/multiple_chars_surrounded_by_spaces",
" a ", " b ", " c ");
assertTextArray("Multiple labels",
- "!label/multiple_labels", "abc", "def", "ghi");
+ "!text/multiple_labels", "abc", "def", "ghi");
assertTextArray("Multiple labels surrounded by spaces",
- "!label/multiple_labels_surrounded_by_spaces", " abc ", " def ", " ghi ");
+ "!text/multiple_labels_surrounded_by_spaces", " abc ", " def ", " ghi ");
}
public void testParseCsvResourcetMultiEscaped() {
assertTextArray("Multiple chars with comma",
- "!label/multiple_chars_with_comma",
+ "!text/multiple_chars_with_comma",
"a", "\\,", "c");
assertTextArray("Multiple chars with comma surrounded by spaces",
- "!label/multiple_chars_with_comma_surrounded_by_spaces",
+ "!text/multiple_chars_with_comma_surrounded_by_spaces",
" a ", " \\, ", " c ");
assertTextArray("Multiple labels with escape",
- "!label/multiple_labels_with_escape",
+ "!text/multiple_labels_with_escape",
"\\abc", "d\\ef", "gh\\i");
assertTextArray("Multiple labels with escape surrounded by spaces",
- "!label/multiple_labels_with_escape_surrounded_by_spaces",
+ "!text/multiple_labels_with_escape_surrounded_by_spaces",
" \\abc ", " d\\ef ", " gh\\i ");
assertTextArray("Multiple labels with comma and escape",
- "!label/multiple_labels_with_comma_and_escape",
+ "!text/multiple_labels_with_comma_and_escape",
"ab\\\\", "d\\\\\\,", "g\\,i");
assertTextArray("Multiple labels with comma and escape surrounded by spaces",
- "!label/multiple_labels_with_comma_and_escape_surrounded_by_spaces",
+ "!text/multiple_labels_with_comma_and_escape_surrounded_by_spaces",
" ab\\\\ ", " d\\\\\\, ", " g\\,i ");
}
public void testParseMultipleResources() {
assertTextArray("Literals and resources",
- "1,!label/multiple_chars,z", "1", "a", "b", "c", "z");
+ "1,!text/multiple_chars,z", "1", "a", "b", "c", "z");
+ assertTextArray("Literals and RESOURCES",
+ "1,!TEXT/MULTIPLE_CHARS,z", "1", "a", "b", "c", "z");
assertTextArray("Literals and resources and escape at end",
- "\\1,!label/multiple_chars,z\\", "\\1", "a", "b", "c", "z\\");
+ "\\1,!text/multiple_chars,z\\", "\\1", "a", "b", "c", "z\\");
assertTextArray("Multiple single resource chars and labels",
- "!label/single_char,!label/single_label,!label/escaped_comma",
+ "!text/single_char,!text/single_label,!text/escaped_comma",
"a", "abc", "\\,");
assertTextArray("Multiple single resource chars and labels 2",
- "!label/single_char,!label/single_label,!label/escaped_comma_escape",
+ "!text/single_char,!text/single_label,!text/escaped_comma_escape",
+ "a", "abc", "a\\,\\");
+ assertTextArray("Multiple single RESOURCE chars and LABELS 2",
+ "!TEXT/SINGLE_CHAR,!TEXT/SINGLE_LABEL,!TEXT/ESCAPED_COMMA_ESCAPE",
"a", "abc", "a\\,\\");
assertTextArray("Multiple multiple resource chars and labels",
- "!label/multiple_chars,!label/multiple_labels,!label/multiple_chars_with_comma",
+ "!text/multiple_chars,!text/multiple_labels,!text/multiple_chars_with_comma",
"a", "b", "c", "abc", "def", "ghi", "a", "\\,", "c");
assertTextArray("Concatenated resources",
- "!label/multiple_chars!label/multiple_labels!label/multiple_chars_with_comma",
+ "!text/multiple_chars!text/multiple_labels!text/multiple_chars_with_comma",
"a", "b", "cabc", "def", "ghia", "\\,", "c");
assertTextArray("Concatenated resource and literal",
- "abc!label/multiple_labels",
+ "abc!text/multiple_labels",
"abcabc", "def", "ghi");
}
public void testParseIndirectReference() {
assertTextArray("Indirect",
- "!label/indirect_string", "a", "b", "c");
+ "!text/indirect_string", "a", "b", "c");
assertTextArray("Indirect with literal",
- "1,!label/indirect_string_with_literal,2", "1", "x", "a", "b", "c", "y", "2");
+ "1,!text/indirect_string_with_literal,2", "1", "x", "a", "b", "c", "y", "2");
+ assertTextArray("Indirect2",
+ "!text/indirect2_string", "a", "b", "c");
+
+ assertTextArray("INDIRECT",
+ "!TEXT/INDIRECT_STRING", "a", "b", "c");
+ assertTextArray("INDIRECT with literal",
+ "1,!TEXT/INDIRECT_STRING_WITH_LITERAL,2", "1", "x", "a", "b", "c", "y", "2");
+ assertTextArray("INDIRECT2",
+ "!TEXT/INDIRECT2_STRING", "a", "b", "c");
+
+ assertTextArray("Upper indirect",
+ "!text/upper_indirect_string", "a", "b", "c");
+ assertTextArray("Upper indirect with literal",
+ "1,!text/upper_indirect_string_with_literal,2", "1", "x", "a", "b", "c", "y", "2");
+ assertTextArray("Upper indirect2",
+ "!text/upper_indirect2_string", "a", "b", "c");
+
+ assertTextArray("UPPER INDIRECT",
+ "!TEXT/upper_INDIRECT_STRING", "a", "b", "c");
+ assertTextArray("Upper INDIRECT with literal",
+ "1,!TEXT/upper_INDIRECT_STRING_WITH_LITERAL,2", "1", "x", "a", "b", "c", "y", "2");
+ assertTextArray("Upper INDIRECT2",
+ "!TEXT/upper_INDIRECT2_STRING", "a", "b", "c");
}
public void testParseInfiniteIndirectReference() {
assertError("Infinite indirection",
- "1,!label/infinite_indirection,2", "1", "infinite", "<infinite>", "loop", "2");
+ "1,!text/infinite_indirection,2", "1", "infinite", "<infinite>", "loop", "2");
+ assertError("INFINITE INDIRECTION",
+ "1,!TEXT/INFINITE_INDIRECTION,2", "1", "infinite", "<infinite>", "loop", "2");
+
+ assertError("Upper infinite indirection",
+ "1,!text/upper_infinite_indirection,2",
+ "1", "infinite", "<infinite>", "loop", "2");
+ assertError("Upper INFINITE INDIRECTION",
+ "1,!TEXT/UPPER_INFINITE_INDIRECTION,2",
+ "1", "infinite", "<infinite>", "loop", "2");
+ }
+
+ public void testLabelReferece() {
+ assertTextArray("Label time am", "!text/label_time_am", "AM");
+ assertTextArray("LABEL TIME AM", "!TEXT/LABEL_TIME_AM", "AM");
+
+ assertTextArray("More keys for am pm", "!text/more_keys_for_am_pm",
+ "!fixedColumnOrder!2", "!hasLabels!", "AM", "PM");
+ assertTextArray("MORE KEYS FOR AM OM", "!TEXT/MORE_KEYS_FOR_AM_PM",
+ "!fixedColumnOrder!2", "!hasLabels!", "AM", "PM");
+
+ assertTextArray("Settings as more key", "!text/settings_as_more_key",
+ "!icon/settings_key|!code/key_settings");
+ assertTextArray("SETTINGS AS MORE KEY", "!TEXT/SETTINGS_AS_MORE_KEY",
+ "!icon/settings_key|!code/key_settings");
+
+ assertTextArray("Indirect naviagte actions as more key",
+ "!text/indirect_navigate_actions_as_more_key",
+ "!fixedColumnOrder!2",
+ "!hasLabels!", "Prev|!code/key_action_previous",
+ "!hasLabels!", "Next|!code/key_action_next");
+ assertTextArray("INDIRECT NAVIGATE ACTIONS AS MORE KEY",
+ "!TEXT/INDIRECT_NAVIGATE_ACTIONS_AS_MORE_KEY",
+ "!fixedColumnOrder!2",
+ "!hasLabels!", "Prev|!code/key_action_previous",
+ "!hasLabels!", "Next|!code/key_action_next");
}
}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
index f6a0c5604..f2a165678 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
@@ -16,6 +16,10 @@
package com.android.inputmethod.keyboard.internal;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_OUTPUT_TEXT;
+import static com.android.inputmethod.keyboard.Keyboard.CODE_UNSPECIFIED;
+import static com.android.inputmethod.keyboard.internal.KeyboardIconsSet.ICON_UNDEFINED;
+
import android.test.AndroidTestCase;
import com.android.inputmethod.keyboard.Keyboard;
@@ -26,36 +30,47 @@ import java.util.Locale;
public class KeySpecParserTests extends AndroidTestCase {
private final KeyboardCodesSet mCodesSet = new KeyboardCodesSet();
+ private final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
- private static final int ICON_UNDEFINED = KeyboardIconsSet.ICON_UNDEFINED;
-
- private static final String CODE_SETTINGS_NAME = "key_settings";
- private static final String ICON_SETTINGS_NAME = "settingsKey";
-
- private static final String CODE_SETTINGS = "!code/" + CODE_SETTINGS_NAME;
- private static final String ICON_SETTINGS = "!icon/" + ICON_SETTINGS_NAME;
+ private static final String CODE_SETTINGS = "!code/key_settings";
+ private static final String ICON_SETTINGS = "!icon/settings_key";
+ private static final String CODE_SETTINGS_UPPERCASE = CODE_SETTINGS.toUpperCase();
+ private static final String ICON_SETTINGS_UPPERCASE = ICON_SETTINGS.toUpperCase();
private static final String CODE_NON_EXISTING = "!code/non_existing";
private static final String ICON_NON_EXISTING = "!icon/non_existing";
private int mCodeSettings;
+ private int mCodeActionNext;
private int mSettingsIconId;
@Override
protected void setUp() throws Exception {
super.setUp();
- mCodesSet.setLanguage(Locale.ENGLISH.getLanguage());
- mCodeSettings = mCodesSet.getCode(CODE_SETTINGS_NAME);
- mSettingsIconId = KeyboardIconsSet.getIconId(ICON_SETTINGS_NAME);
+ final String language = Locale.ENGLISH.getLanguage();
+ mCodesSet.setLanguage(language);
+ mTextsSet.setLanguage(language);
+ mTextsSet.loadStringResources(getContext());
+
+ mCodeSettings = KeySpecParser.parseCode(
+ CODE_SETTINGS, mCodesSet, CODE_UNSPECIFIED);
+ mCodeActionNext = KeySpecParser.parseCode(
+ "!code/key_action_next", mCodesSet, CODE_UNSPECIFIED);
+ mSettingsIconId = KeySpecParser.getIconId(ICON_SETTINGS);
}
private void assertParser(String message, String moreKeySpec, String expectedLabel,
String expectedOutputText, int expectedIcon, int expectedCode) {
- final MoreKeySpec spec = new MoreKeySpec(moreKeySpec, mCodesSet);
- assertEquals(message + ": label:", expectedLabel, spec.mLabel);
- assertEquals(message + ": ouptputText:", expectedOutputText, spec.mOutputText);
- assertEquals(message + ": icon:", expectedIcon, spec.mIconId);
- assertEquals(message + ": codes value:", expectedCode, spec.mCode);
+ final String labelResolved = KeySpecParser.resolveTextReference(moreKeySpec, mTextsSet);
+ final MoreKeySpec spec = new MoreKeySpec(labelResolved, mCodesSet);
+ assertEquals(message + " [label]", expectedLabel, spec.mLabel);
+ assertEquals(message + " [ouptputText]", expectedOutputText, spec.mOutputText);
+ assertEquals(message + " [icon]",
+ KeyboardIconsSet.getIconName(expectedIcon),
+ KeyboardIconsSet.getIconName(spec.mIconId));
+ assertEquals(message + " [code]",
+ Keyboard.printableCode(expectedCode),
+ Keyboard.printableCode(spec.mCode));
}
private void assertParserError(String message, String moreKeySpec, String expectedLabel,
@@ -106,195 +121,253 @@ public class KeySpecParserTests extends AndroidTestCase {
assertParser("Single surrogate pair outputText", "G Clef|" + PAIR1,
"G Clef", null, ICON_UNDEFINED, CODE1);
assertParser("Single letter with outputText", "a|abc",
- "a", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "abc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with surrogate outputText", "a|" + SURROGATE1,
- "a", SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", SURROGATE1, ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single surrogate with outputText", PAIR3 + "|abc",
- PAIR3, "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ PAIR3, "abc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with escaped outputText", "a|a\\|c",
- "a", "a|c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "a|c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with escaped surrogate outputText",
"a|" + PAIR1 + "\\|" + PAIR2,
- "a", PAIR1 + "|" + PAIR2, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", PAIR1 + "|" + PAIR2, ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with comma outputText", "a|a,b",
- "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "a,b", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with escaped comma outputText", "a|a\\,b",
- "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "a,b", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with outputText starts with bang", "a|!bc",
- "a", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with surrogate outputText starts with bang", "a|!" + SURROGATE2,
- "a", "!" + SURROGATE2, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "!" + SURROGATE2, ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with outputText contains bang", "a|a!c",
- "a", "a!c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "a!c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single letter with escaped bang outputText", "a|\\!bc",
- "a", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Single escaped escape with single outputText", "\\\\|\\\\",
"\\", null, ICON_UNDEFINED, '\\');
assertParser("Single escaped bar with single outputText", "\\||\\|",
"|", null, ICON_UNDEFINED, '|');
assertParser("Single letter with code", "a|" + CODE_SETTINGS,
"a", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Single letter with CODE", "a|" + CODE_SETTINGS_UPPERCASE,
+ "a", null, ICON_UNDEFINED, mCodeSettings);
}
public void testLabel() {
assertParser("Simple label", "abc",
- "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "abc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Simple surrogate label", SURROGATE1,
- SURROGATE1, SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ SURROGATE1, SURROGATE1, ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped bar", "a\\|c",
- "a|c", "a|c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a|c", "a|c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Surrogate label with escaped bar", PAIR1 + "\\|" + PAIR2,
PAIR1 + "|" + PAIR2, PAIR1 + "|" + PAIR2,
- ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped escape", "a\\\\c",
- "a\\c", "a\\c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a\\c", "a\\c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with comma", "a,c",
- "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a,c", "a,c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped comma", "a\\,c",
- "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a,c", "a,c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label starts with bang", "!bc",
- "!bc", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "!bc", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Surrogate label starts with bang", "!" + SURROGATE1,
- "!" + SURROGATE1, "!" + SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "!" + SURROGATE1, "!" + SURROGATE1, ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label contains bang", "a!c",
- "a!c", "a!c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a!c", "a!c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped bang", "\\!bc",
- "!bc", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "!bc", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped letter", "\\abc",
- "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "abc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with outputText", "abc|def",
- "abc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with comma and outputText", "a,c|def",
- "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a,c", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Escaped comma label with outputText", "a\\,c|def",
- "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a,c", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Escaped label with outputText", "a\\|c|def",
- "a|c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a|c", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped bar outputText", "abc|d\\|f",
- "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "d|f", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Escaped escape label with outputText", "a\\\\|def",
- "a\\", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a\\", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label starts with bang and outputText", "!bc|def",
- "!bc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "!bc", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label contains bang label and outputText", "a!c|def",
- "a!c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a!c", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Escaped bang label with outputText", "\\!bc|def",
- "!bc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "!bc", "def", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with comma outputText", "abc|a,b",
- "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "a,b", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped comma outputText", "abc|a\\,b",
- "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "a,b", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with outputText starts with bang", "abc|!bc",
- "abc", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with outputText contains bang", "abc|a!c",
- "abc", "a!c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "a!c", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped bang outputText", "abc|\\!bc",
- "abc", "!bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "!bc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with escaped bar outputText", "abc|d\\|f",
- "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "abc", "d|f", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Escaped bar label with escaped bar outputText", "a\\|c|d\\|f",
- "a|c", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ "a|c", "d|f", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParser("Label with code", "abc|" + CODE_SETTINGS,
"abc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Label with CODE", "abc|" + CODE_SETTINGS_UPPERCASE,
+ "abc", null, ICON_UNDEFINED, mCodeSettings);
assertParser("Escaped label with code", "a\\|c|" + CODE_SETTINGS,
"a|c", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped label with CODE", "a\\|c|" + CODE_SETTINGS_UPPERCASE,
+ "a|c", null, ICON_UNDEFINED, mCodeSettings);
}
public void testIconAndCode() {
assertParser("Icon with outputText", ICON_SETTINGS + "|abc",
- null, "abc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ null, "abc", mSettingsIconId, CODE_OUTPUT_TEXT);
+ assertParser("ICON with outputText", ICON_SETTINGS_UPPERCASE + "|abc",
+ null, "abc", mSettingsIconId, CODE_OUTPUT_TEXT);
assertParser("Icon with outputText starts with bang", ICON_SETTINGS + "|!bc",
- null, "!bc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ null, "!bc", mSettingsIconId, CODE_OUTPUT_TEXT);
+ assertParser("ICON with outputText starts with bang", ICON_SETTINGS_UPPERCASE + "|!bc",
+ null, "!bc", mSettingsIconId, CODE_OUTPUT_TEXT);
assertParser("Icon with outputText contains bang", ICON_SETTINGS + "|a!c",
- null, "a!c", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ null, "a!c", mSettingsIconId, CODE_OUTPUT_TEXT);
+ assertParser("ICON with outputText contains bang", ICON_SETTINGS_UPPERCASE + "|a!c",
+ null, "a!c", mSettingsIconId, CODE_OUTPUT_TEXT);
assertParser("Icon with escaped bang outputText", ICON_SETTINGS + "|\\!bc",
- null, "!bc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ null, "!bc", mSettingsIconId, CODE_OUTPUT_TEXT);
+ assertParser("ICON with escaped bang outputText", ICON_SETTINGS_UPPERCASE + "|\\!bc",
+ null, "!bc", mSettingsIconId, CODE_OUTPUT_TEXT);
assertParser("Label starts with bang and code", "!bc|" + CODE_SETTINGS,
"!bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Label starts with bang and CODE", "!bc|" + CODE_SETTINGS_UPPERCASE,
+ "!bc", null, ICON_UNDEFINED, mCodeSettings);
assertParser("Label contains bang and code", "a!c|" + CODE_SETTINGS,
"a!c", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Label contains bang and CODE", "a!c|" + CODE_SETTINGS_UPPERCASE,
+ "a!c", null, ICON_UNDEFINED, mCodeSettings);
assertParser("Escaped bang label with code", "\\!bc|" + CODE_SETTINGS,
"!bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped bang label with CODE", "\\!bc|" + CODE_SETTINGS_UPPERCASE,
+ "!bc", null, ICON_UNDEFINED, mCodeSettings);
assertParser("Icon with code", ICON_SETTINGS + "|" + CODE_SETTINGS,
null, null, mSettingsIconId, mCodeSettings);
+ assertParser("ICON with CODE", ICON_SETTINGS_UPPERCASE + "|" + CODE_SETTINGS_UPPERCASE,
+ null, null, mSettingsIconId, mCodeSettings);
+ }
+
+ public void testResourceReference() {
+ assertParser("Settings as more key", "!text/settings_as_more_key",
+ null, null, mSettingsIconId, mCodeSettings);
+ assertParser("SETTINGS AS MORE KEY", "!TEXT/SETTINGS_AS_MORE_KEY",
+ null, null, mSettingsIconId, mCodeSettings);
+
+ assertParser("Action next as more key", "!text/label_next_key|!code/key_action_next",
+ "Next", null, ICON_UNDEFINED, mCodeActionNext);
+ assertParser("ACTION NEXT AS MORE KEY", "!TEXT/LABEL_NEXT_KEY|!CODE/KEY_ACTION_NEXT",
+ "Next", null, ICON_UNDEFINED, mCodeActionNext);
+
+ assertParser("Popular domain",
+ "!text/keylabel_for_popular_domain|!text/keylabel_for_popular_domain ",
+ ".com", ".com ", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
+ assertParser("POPULAR DOMAIN",
+ "!TEXT/KEYLABEL_FOR_POPULAR_DOMAIN|!TEXT/KEYLABEL_FOR_POPULAR_DOMAIN ",
+ ".com", ".com ", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
}
public void testFormatError() {
assertParserError("Empty spec", "", null,
- null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Empty label with outputText", "|a",
- null, "a", ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ null, "a", ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Empty label with code", "|" + CODE_SETTINGS,
null, null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Empty label with CODE", "|" + CODE_SETTINGS_UPPERCASE,
+ null, null, ICON_UNDEFINED, mCodeSettings);
assertParserError("Empty outputText with label", "a|",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ "a", null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Empty outputText with icon", ICON_SETTINGS + "|",
- null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
+ assertParserError("Empty outputText with ICON", ICON_SETTINGS_UPPERCASE + "|",
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
assertParserError("Empty icon and code", "|",
- null, null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ null, null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Icon without code", ICON_SETTINGS,
- null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
+ assertParserError("ICON without code", ICON_SETTINGS_UPPERCASE,
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
assertParserError("Non existing icon", ICON_NON_EXISTING + "|abc",
- null, "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ null, "abc", ICON_UNDEFINED, CODE_OUTPUT_TEXT);
assertParserError("Non existing code", "abc|" + CODE_NON_EXISTING,
- "abc", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ "abc", null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Third bar at end", "a|b|",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ "a", null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Multiple bar", "a|b|c",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ "a", null, ICON_UNDEFINED, CODE_UNSPECIFIED);
assertParserError("Multiple bar with label and code", "a|" + CODE_SETTINGS + "|c",
"a", null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Multiple bar with label and CODE", "a|" + CODE_SETTINGS_UPPERCASE + "|c",
+ "a", null, ICON_UNDEFINED, mCodeSettings);
assertParserError("Multiple bar with icon and outputText", ICON_SETTINGS + "|b|c",
- null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
+ assertParserError("Multiple bar with ICON and outputText", ICON_SETTINGS_UPPERCASE + "|b|c",
+ null, null, mSettingsIconId, CODE_UNSPECIFIED);
assertParserError("Multiple bar with icon and code",
ICON_SETTINGS + "|" + CODE_SETTINGS + "|c",
null, null, mSettingsIconId, mCodeSettings);
+ assertParserError("Multiple bar with ICON and CODE",
+ ICON_SETTINGS_UPPERCASE + "|" + CODE_SETTINGS_UPPERCASE + "|c",
+ null, null, mSettingsIconId, mCodeSettings);
}
- private static void assertMoreKeys(String message, String[] moreKeys,
- String[] additionalMoreKeys, String[] expected) {
- final String[] actual = KeySpecParser.insertAdditionalMoreKeys(
- moreKeys, additionalMoreKeys);
- if (expected == null && actual == null) {
+ private static void assertArrayEquals(String message, Object[] expected, Object[] actual) {
+ if (expected == actual) {
return;
}
if (expected == null || actual == null) {
assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
- } else {
- if (expected.length != actual.length) {
- assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
- }
- for (int i = 0; i < expected.length; i++) {
- if (!actual[i].equals(expected[i])) {
- assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
- }
- }
+ return;
+ }
+ if (expected.length != actual.length) {
+ assertEquals(message + " [length]", Arrays.toString(expected), Arrays.toString(actual));
+ return;
}
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals(message + " [" + i + "]",
+ Arrays.toString(expected), Arrays.toString(actual));
+ }
+ }
+
+ private static void assertInsertAdditionalMoreKeys(String message, String[] moreKeys,
+ String[] additionalMoreKeys, String[] expected) {
+ final String[] actual =
+ KeySpecParser.insertAdditionalMoreKeys( moreKeys, additionalMoreKeys);
+ assertArrayEquals(message, expected, actual);
}
public void testEmptyEntry() {
- assertMoreKeys("null more keys and null additons",
+ assertInsertAdditionalMoreKeys("null more keys and null additons",
null,
null,
null);
- assertMoreKeys("null more keys and empty additons",
+ assertInsertAdditionalMoreKeys("null more keys and empty additons",
null,
new String[0],
null);
- assertMoreKeys("empty more keys and null additons",
+ assertInsertAdditionalMoreKeys("empty more keys and null additons",
new String[0],
null,
null);
- assertMoreKeys("empty more keys and empty additons",
+ assertInsertAdditionalMoreKeys("empty more keys and empty additons",
new String[0],
new String[0],
null);
- assertMoreKeys("filter out empty more keys",
+ assertInsertAdditionalMoreKeys("filter out empty more keys",
new String[] { null, "a", "", "b", null },
null,
new String[] { "a", "b" });
- assertMoreKeys("filter out empty additons",
+ assertInsertAdditionalMoreKeys("filter out empty additons",
new String[] { "a", "%", "b", "%", "c", "%", "d" },
new String[] { null, "A", "", "B", null },
new String[] { "a", "A", "b", "B", "c", "d" });
@@ -302,188 +375,261 @@ public class KeySpecParserTests extends AndroidTestCase {
public void testInsertAdditionalMoreKeys() {
// Escaped marker.
- assertMoreKeys("escaped marker",
+ assertInsertAdditionalMoreKeys("escaped marker",
new String[] { "\\%", "%-)" },
new String[] { "1", "2" },
new String[] { "1", "2", "\\%", "%-)" });
// 0 more key.
- assertMoreKeys("null & null", null, null, null);
- assertMoreKeys("null & 1 additon",
+ assertInsertAdditionalMoreKeys("null & null", null, null, null);
+ assertInsertAdditionalMoreKeys("null & 1 additon",
null,
new String[] { "1" },
new String[] { "1" });
- assertMoreKeys("null & 2 additons",
+ assertInsertAdditionalMoreKeys("null & 2 additons",
null,
new String[] { "1", "2" },
new String[] { "1", "2" });
// 0 additional more key.
- assertMoreKeys("1 more key & null",
+ assertInsertAdditionalMoreKeys("1 more key & null",
new String[] { "A" },
null,
new String[] { "A" });
- assertMoreKeys("2 more keys & null",
+ assertInsertAdditionalMoreKeys("2 more keys & null",
new String[] { "A", "B" },
null,
new String[] { "A", "B" });
// No marker.
- assertMoreKeys("1 more key & 1 addtional & no marker",
+ assertInsertAdditionalMoreKeys("1 more key & 1 addtional & no marker",
new String[] { "A" },
new String[] { "1" },
new String[] { "1", "A" });
- assertMoreKeys("1 more key & 2 addtionals & no marker",
+ assertInsertAdditionalMoreKeys("1 more key & 2 addtionals & no marker",
new String[] { "A" },
new String[] { "1", "2" },
new String[] { "1", "2", "A" });
- assertMoreKeys("2 more keys & 1 addtional & no marker",
+ assertInsertAdditionalMoreKeys("2 more keys & 1 addtional & no marker",
new String[] { "A", "B" },
new String[] { "1" },
new String[] { "1", "A", "B" });
- assertMoreKeys("2 more keys & 2 addtionals & no marker",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 addtionals & no marker",
new String[] { "A", "B" },
new String[] { "1", "2" },
new String[] { "1", "2", "A", "B" });
// 1 marker.
- assertMoreKeys("1 more key & 1 additon & marker at head",
+ assertInsertAdditionalMoreKeys("1 more key & 1 additon & marker at head",
new String[] { "%", "A" },
new String[] { "1" },
new String[] { "1", "A" });
- assertMoreKeys("1 more key & 1 additon & marker at tail",
+ assertInsertAdditionalMoreKeys("1 more key & 1 additon & marker at tail",
new String[] { "A", "%" },
new String[] { "1" },
new String[] { "A", "1" });
- assertMoreKeys("2 more keys & 1 additon & marker at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 1 additon & marker at middle",
new String[] { "A", "%", "B" },
new String[] { "1" },
new String[] { "A", "1", "B" });
// 1 marker & excess additional more keys.
- assertMoreKeys("1 more key & 2 additons & marker at head",
+ assertInsertAdditionalMoreKeys("1 more key & 2 additons & marker at head",
new String[] { "%", "A", "B" },
new String[] { "1", "2" },
new String[] { "1", "A", "B", "2" });
- assertMoreKeys("1 more key & 2 additons & marker at tail",
+ assertInsertAdditionalMoreKeys("1 more key & 2 additons & marker at tail",
new String[] { "A", "B", "%" },
new String[] { "1", "2" },
new String[] { "A", "B", "1", "2" });
- assertMoreKeys("2 more keys & 2 additons & marker at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & marker at middle",
new String[] { "A", "%", "B" },
new String[] { "1", "2" },
new String[] { "A", "1", "B", "2" });
// 2 markers.
- assertMoreKeys("0 more key & 2 addtional & 2 markers",
+ assertInsertAdditionalMoreKeys("0 more key & 2 addtional & 2 markers",
new String[] { "%", "%" },
new String[] { "1", "2" },
new String[] { "1", "2" });
- assertMoreKeys("1 more key & 2 addtional & 2 markers at head",
+ assertInsertAdditionalMoreKeys("1 more key & 2 addtional & 2 markers at head",
new String[] { "%", "%", "A" },
new String[] { "1", "2" },
new String[] { "1", "2", "A" });
- assertMoreKeys("1 more key & 2 addtional & 2 markers at tail",
+ assertInsertAdditionalMoreKeys("1 more key & 2 addtional & 2 markers at tail",
new String[] { "A", "%", "%" },
new String[] { "1", "2" },
new String[] { "A", "1", "2" });
- assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
new String[] { "A", "%", "%", "B" },
new String[] { "1", "2" },
new String[] { "A", "1", "2", "B" });
- assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
new String[] { "%", "A", "%", "B" },
new String[] { "1", "2" },
new String[] { "1", "A", "2", "B" });
- assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
new String[] { "%", "A", "B", "%" },
new String[] { "1", "2" },
new String[] { "1", "A", "B", "2" });
- assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
new String[] { "A", "%", "B", "%" },
new String[] { "1", "2" },
new String[] { "A", "1", "B", "2" });
// 2 markers & excess additional more keys.
- assertMoreKeys("0 more key & 2 additons & 2 markers",
+ assertInsertAdditionalMoreKeys("0 more key & 2 additons & 2 markers",
new String[] { "%", "%" },
new String[] { "1", "2", "3" },
new String[] { "1", "2", "3" });
- assertMoreKeys("1 more key & 2 additons & 2 markers at head",
+ assertInsertAdditionalMoreKeys("1 more key & 2 additons & 2 markers at head",
new String[] { "%", "%", "A" },
new String[] { "1", "2", "3" },
new String[] { "1", "2", "A", "3" });
- assertMoreKeys("1 more key & 2 additons & 2 markers at tail",
+ assertInsertAdditionalMoreKeys("1 more key & 2 additons & 2 markers at tail",
new String[] { "A", "%", "%" },
new String[] { "1", "2", "3" },
new String[] { "A", "1", "2", "3" });
- assertMoreKeys("2 more keys & 2 additons & 2 markers at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at middle",
new String[] { "A", "%", "%", "B" },
new String[] { "1", "2", "3" },
new String[] { "A", "1", "2", "B", "3" });
- assertMoreKeys("2 more keys & 2 additons & 2 markers at head & middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at head & middle",
new String[] { "%", "A", "%", "B" },
new String[] { "1", "2", "3" },
new String[] { "1", "A", "2", "B", "3" });
- assertMoreKeys("2 more keys & 2 additons & 2 markers at head & tail",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at head & tail",
new String[] { "%", "A", "B", "%" },
new String[] { "1", "2", "3" },
new String[] { "1", "A", "B", "2", "3" });
- assertMoreKeys("2 more keys & 2 additons & 2 markers at middle & tail",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & 2 markers at middle & tail",
new String[] { "A", "%", "B", "%" },
new String[] { "1", "2", "3" },
new String[] { "A", "1", "B", "2", "3" });
// 0 addtional more key and excess markers.
- assertMoreKeys("0 more key & null & excess marker",
+ assertInsertAdditionalMoreKeys("0 more key & null & excess marker",
new String[] { "%" },
null,
null);
- assertMoreKeys("1 more key & null & excess marker at head",
+ assertInsertAdditionalMoreKeys("1 more key & null & excess marker at head",
new String[] { "%", "A" },
null,
new String[] { "A" });
- assertMoreKeys("1 more key & null & excess marker at tail",
+ assertInsertAdditionalMoreKeys("1 more key & null & excess marker at tail",
new String[] { "A", "%" },
null,
new String[] { "A" });
- assertMoreKeys("2 more keys & null & excess marker at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & null & excess marker at middle",
new String[] { "A", "%", "B" },
null,
new String[] { "A", "B" });
- assertMoreKeys("2 more keys & null & excess markers",
+ assertInsertAdditionalMoreKeys("2 more keys & null & excess markers",
new String[] { "%", "A", "%", "B", "%" },
null,
new String[] { "A", "B" });
// Excess markers.
- assertMoreKeys("0 more key & 1 additon & excess marker",
+ assertInsertAdditionalMoreKeys("0 more key & 1 additon & excess marker",
new String[] { "%", "%" },
new String[] { "1" },
new String[] { "1" });
- assertMoreKeys("1 more key & 1 additon & excess marker at head",
+ assertInsertAdditionalMoreKeys("1 more key & 1 additon & excess marker at head",
new String[] { "%", "%", "A" },
new String[] { "1" },
new String[] { "1", "A" });
- assertMoreKeys("1 more key & 1 additon & excess marker at tail",
+ assertInsertAdditionalMoreKeys("1 more key & 1 additon & excess marker at tail",
new String[] { "A", "%", "%" },
new String[] { "1" },
new String[] { "A", "1" });
- assertMoreKeys("2 more keys & 1 additon & excess marker at middle",
+ assertInsertAdditionalMoreKeys("2 more keys & 1 additon & excess marker at middle",
new String[] { "A", "%", "%", "B" },
new String[] { "1" },
new String[] { "A", "1", "B" });
- assertMoreKeys("2 more keys & 1 additon & excess markers",
+ assertInsertAdditionalMoreKeys("2 more keys & 1 additon & excess markers",
new String[] { "%", "A", "%", "B", "%" },
new String[] { "1" },
new String[] { "1", "A", "B" });
- assertMoreKeys("2 more keys & 2 additons & excess markers",
+ assertInsertAdditionalMoreKeys("2 more keys & 2 additons & excess markers",
new String[] { "%", "A", "%", "B", "%" },
new String[] { "1", "2" },
new String[] { "1", "A", "2", "B" });
- assertMoreKeys("2 more keys & 3 additons & excess markers",
+ assertInsertAdditionalMoreKeys("2 more keys & 3 additons & excess markers",
new String[] { "%", "A", "%", "%", "B", "%" },
new String[] { "1", "2", "3" },
new String[] { "1", "A", "2", "3", "B" });
}
+
+ private static final String HAS_LABEL = "!hasLabel!";
+ private static final String NEEDS_DIVIDER = "!needsDividers!";
+ private static final String AUTO_COLUMN_ORDER = "!autoColumnOrder!";
+ private static final String FIXED_COLUMN_ORDER = "!fixedColumnOrder!";
+
+ private static void assertGetBooleanValue(String message, String key, String[] moreKeys,
+ String[] expected, boolean expectedValue) {
+ final String[] actual = Arrays.copyOf(moreKeys, moreKeys.length);
+ final boolean actualValue = KeySpecParser.getBooleanValue(actual, key);
+ assertEquals(message + " [value]", expectedValue, actualValue);
+ assertArrayEquals(message, expected, actual);
+ }
+
+ public void testGetBooleanValue() {
+ assertGetBooleanValue("Has label", HAS_LABEL,
+ new String[] { HAS_LABEL, "a", "b", "c" },
+ new String[] { null, "a", "b", "c" }, true);
+ assertGetBooleanValue("HAS LABEL", HAS_LABEL,
+ new String[] { HAS_LABEL.toUpperCase(), "a", "b", "c" },
+ new String[] { null, "a", "b", "c" }, true);
+
+ assertGetBooleanValue("No has label", HAS_LABEL,
+ new String[] { "a", "b", "c" },
+ new String[] { "a", "b", "c" }, false);
+ assertGetBooleanValue("No has label with fixed clumn order", HAS_LABEL,
+ new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" },
+ new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" }, false);
+
+ assertGetBooleanValue("Multiple has label", HAS_LABEL,
+ new String[] {
+ "a", HAS_LABEL.toUpperCase(), "b", "c", HAS_LABEL, "d" },
+ new String[] {
+ "a", null, "b", "c", null, "d" }, true);
+ assertGetBooleanValue("Multiple has label with needs dividers", HAS_LABEL,
+ new String[] {
+ "a", HAS_LABEL, "b", NEEDS_DIVIDER, HAS_LABEL.toUpperCase(), "d" },
+ new String[] {
+ "a", null, "b", NEEDS_DIVIDER, null, "d" }, true);
+ }
+
+ private static void assertGetIntValue(String message, String key, int defaultValue,
+ String[] moreKeys, String[] expected, int expectedValue) {
+ final String[] actual = Arrays.copyOf(moreKeys, moreKeys.length);
+ final int actualValue = KeySpecParser.getIntValue(actual, key, defaultValue);
+ assertEquals(message + " [value]", expectedValue, actualValue);
+ assertArrayEquals(message, expected, actual);
+ }
+
+ public void testGetIntValue() {
+ assertGetIntValue("Fixed column order 3", FIXED_COLUMN_ORDER, -1,
+ new String[] { FIXED_COLUMN_ORDER + "3", "a", "b", "c" },
+ new String[] { null, "a", "b", "c" }, 3);
+ assertGetIntValue("FIXED COLUMN ORDER 3", FIXED_COLUMN_ORDER, -1,
+ new String[] { FIXED_COLUMN_ORDER.toUpperCase() + "3", "a", "b", "c" },
+ new String[] { null, "a", "b", "c" }, 3);
+
+ assertGetIntValue("No fixed column order", FIXED_COLUMN_ORDER, -1,
+ new String[] { "a", "b", "c" },
+ new String[] { "a", "b", "c" }, -1);
+ assertGetIntValue("No fixed column order with auto column order", FIXED_COLUMN_ORDER, -1,
+ new String[] { AUTO_COLUMN_ORDER + "5", "a", "b", "c" },
+ new String[] { AUTO_COLUMN_ORDER + "5", "a", "b", "c" }, -1);
+
+ assertGetIntValue("Multiple fixed column order 3,5", FIXED_COLUMN_ORDER, -1,
+ new String[] { FIXED_COLUMN_ORDER + "3", "a", FIXED_COLUMN_ORDER + "5", "b" },
+ new String[] { null, "a", null, "b" }, 3);
+ assertGetIntValue("Multiple fixed column order 5,3 with has label", FIXED_COLUMN_ORDER, -1,
+ new String[] {
+ FIXED_COLUMN_ORDER.toUpperCase() + "5", HAS_LABEL, "a",
+ FIXED_COLUMN_ORDER + "3", "b" },
+ new String[] { null, HAS_LABEL, "a", null, "b" }, 5);
+ }
}
diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
index 838effe2c..c73a931ea 100644
--- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java
@@ -107,31 +107,15 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
return setBooleanPreference(PREF_DEBUG_MODE, value, false);
}
- // overload this to configure preferences in a way specific to a subclass's tests
- protected void configurePreferences() {
- // please avoid changing preferences any more than is necessary, as an interruption
- // during a test will leave the user's preferences in a bad state.
- }
-
- // restore any preferences set in configurePreferences()
- protected void restorePreferences() {
- // undo any effects from configurePreferences()
- }
-
@Override
- protected void setUp() {
- try {
- super.setUp();
- } catch (Exception e) {
- e.printStackTrace();
- }
+ protected void setUp() throws Exception {
+ super.setUp();
mTextView = new TextView(getContext());
mTextView.setInputType(InputType.TYPE_CLASS_TEXT);
mTextView.setEnabled(true);
setupService();
mLatinIME = getService();
final boolean previousDebugSetting = setDebugMode(true);
- configurePreferences();
mLatinIME.onCreate();
setDebugMode(previousDebugSetting);
initSubtypeMap();
@@ -153,12 +137,6 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> {
changeLanguage("en_US");
}
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- restorePreferences();
- }
-
private void initSubtypeMap() {
final InputMethodManager imm = (InputMethodManager)mLatinIME.getSystemService(
Context.INPUT_METHOD_SERVICE);
diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
index b29477057..16b544169 100644
--- a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
+++ b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
@@ -116,17 +116,17 @@ public class SubtypeLocaleTests extends AndroidTestCase {
public void testSampleSubtypes() {
final Context context = getContext();
final InputMethodSubtype EN_US = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, Locale.US.toString(), AdditionalSubtype.QWERTY);
+ context, Locale.US.toString(), "qwerty");
final InputMethodSubtype EN_GB = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, Locale.UK.toString(), AdditionalSubtype.QWERTY);
+ context, Locale.UK.toString(), "qwerty");
final InputMethodSubtype FR = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, Locale.FRENCH.toString(), AdditionalSubtype.AZERTY);
+ context, Locale.FRENCH.toString(), "azerty");
final InputMethodSubtype FR_CA = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, Locale.CANADA_FRENCH.toString(), AdditionalSubtype.QWERTY);
+ context, Locale.CANADA_FRENCH.toString(), "qwerty");
final InputMethodSubtype DE = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, Locale.GERMAN.toString(), AdditionalSubtype.QWERTZ);
+ context, Locale.GERMAN.toString(), "qwertz");
final InputMethodSubtype ZZ = ImfUtils.findSubtypeByLocaleAndKeyboardLayoutSet(
- context, SubtypeLocale.NO_LANGUAGE, AdditionalSubtype.QWERTY);
+ context, SubtypeLocale.NO_LANGUAGE, "qwerty");
assertFalse(AdditionalSubtype.isAdditionalSubtype(EN_US));
assertFalse(AdditionalSubtype.isAdditionalSubtype(EN_GB));
@@ -166,13 +166,13 @@ public class SubtypeLocaleTests extends AndroidTestCase {
public void testAdditionalSubtype() {
final InputMethodSubtype DE_QWERTY = AdditionalSubtype.createAdditionalSubtype(
- Locale.GERMAN.toString(), AdditionalSubtype.QWERTY, null);
+ Locale.GERMAN.toString(), "qwerty", null);
final InputMethodSubtype FR_QWERTZ = AdditionalSubtype.createAdditionalSubtype(
- Locale.FRENCH.toString(), AdditionalSubtype.QWERTZ, null);
+ Locale.FRENCH.toString(), "qwertz", null);
final InputMethodSubtype US_AZERTY = AdditionalSubtype.createAdditionalSubtype(
- Locale.US.toString(), AdditionalSubtype.AZERTY, null);
+ Locale.US.toString(), "azerty", null);
final InputMethodSubtype ZZ_AZERTY = AdditionalSubtype.createAdditionalSubtype(
- SubtypeLocale.NO_LANGUAGE, AdditionalSubtype.AZERTY, null);
+ SubtypeLocale.NO_LANGUAGE, "azerty", null);
assertTrue(AdditionalSubtype.isAdditionalSubtype(FR_QWERTZ));
assertTrue(AdditionalSubtype.isAdditionalSubtype(DE_QWERTY));
diff --git a/tools/makelabel/etc/manifest.txt b/tools/makelabel/etc/manifest.txt
deleted file mode 100644
index 18bf0be09..000000000
--- a/tools/makelabel/etc/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-Class: com.android.inputmethod.latin.makelabel.LabelMaker
diff --git a/tools/makelabel/Android.mk b/tools/maketext/Android.mk
index 9fa865084..98731b718 100644
--- a/tools/makelabel/Android.mk
+++ b/tools/maketext/Android.mk
@@ -20,7 +20,7 @@ LOCAL_SRC_FILES += $(call all-java-files-under,src)
LOCAL_JAR_MANIFEST := etc/manifest.txt
LOCAL_JAVA_RESOURCE_DIRS := res
LOCAL_MODULE_TAGS := eng
-LOCAL_MODULE := makelabel
+LOCAL_MODULE := maketext
include $(BUILD_HOST_JAVA_LIBRARY)
include $(LOCAL_PATH)/etc/Android.mk
diff --git a/tools/makelabel/etc/Android.mk b/tools/maketext/etc/Android.mk
index 2d2e9a6ed..4fa194bcd 100644
--- a/tools/makelabel/etc/Android.mk
+++ b/tools/maketext/etc/Android.mk
@@ -17,5 +17,5 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
-LOCAL_PREBUILT_EXECUTABLES := makelabel
+LOCAL_PREBUILT_EXECUTABLES := maketext
include $(BUILD_HOST_PREBUILT)
diff --git a/tools/makelabel/etc/makelabel b/tools/maketext/etc/maketext
index 44a05b612..0edd36020 100755
--- a/tools/makelabel/etc/makelabel
+++ b/tools/maketext/etc/maketext
@@ -33,7 +33,7 @@ progdir=`pwd`
prog="${progdir}"/`basename "${prog}"`
cd "${oldwd}"
-jarfile=makelabel.jar
+jarfile=maketext.jar
frameworkdir="$progdir"
if [ ! -r "$frameworkdir/$jarfile" ]
then
diff --git a/tools/maketext/etc/manifest.txt b/tools/maketext/etc/manifest.txt
new file mode 100644
index 000000000..bfd1a52be
--- /dev/null
+++ b/tools/maketext/etc/manifest.txt
@@ -0,0 +1 @@
+Main-Class: com.android.inputmethod.latin.maketext.LabelText
diff --git a/tools/makelabel/res/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.tmpl b/tools/maketext/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
index 0e887e494..5a193388a 100644
--- a/tools/makelabel/res/com/android/inputmethod/keyboard/internal/KeyboardLabelsSet.tmpl
+++ b/tools/maketext/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
@@ -25,22 +25,23 @@ import java.util.HashMap;
/**
* !!!!! DO NOT EDIT THIS FILE !!!!!
- * This file is generated by tools/makelabel.
+ * This file is generated by tools/maketext.
*/
-public final class KeyboardLabelsSet {
- // Language to labels map.
- private static final HashMap<String, String[]> sLocaleToLabelsMap =
+public final class KeyboardTextsSet {
+ // Language to texts map.
+ private static final HashMap<String, String[]> sLocaleToTextsMap =
new HashMap<String, String[]>();
- private static final HashMap<String, Integer> sNameToIdMap = new HashMap<String, Integer>();
+ private static final HashMap<String, Integer> sLowerCaseNameToIdsMap =
+ new HashMap<String, Integer>();
- private String[] mLabels;
- // Resource name to label map.
- private HashMap<String, String> mResourceNameToLabelsMap = new HashMap<String, String>();
+ private String[] mTexts;
+ // Resource name to text map.
+ private HashMap<String, String> mResourceNameToTextsMap = new HashMap<String, String>();
public void setLanguage(final String language) {
- mLabels = sLocaleToLabelsMap.get(language);
- if (mLabels == null) {
- mLabels = LANGUAGE_DEFAULT;
+ mTexts = sLocaleToTextsMap.get(language);
+ if (mTexts == null) {
+ mTexts = LANGUAGE_DEFAULT;
}
}
@@ -55,22 +56,31 @@ public final class KeyboardLabelsSet {
final String packageName = res.getResourcePackageName(referenceId);
for (final String resName : resourceNames) {
final int resId = res.getIdentifier(resName, "string", packageName);
- mResourceNameToLabelsMap.put(resName, res.getString(resId));
+ mResourceNameToTextsMap.put(resName, res.getString(resId));
}
}
- public String getLabel(final String name) {
- if (mResourceNameToLabelsMap.containsKey(name)) {
- return mResourceNameToLabelsMap.get(name);
+ public String getText(final String name) {
+ String lowerCaseName = null;
+ String text = mResourceNameToTextsMap.get(name);
+ if (text == null) {
+ lowerCaseName = name.toLowerCase();
+ text = mResourceNameToTextsMap.get(lowerCaseName);
+ }
+ if (text != null) {
+ return text;
+ }
+ Integer id = sLowerCaseNameToIdsMap.get(name);
+ if (id == null) {
+ id = sLowerCaseNameToIdsMap.get(lowerCaseName); // lowerCaseName != null
}
- final Integer id = sNameToIdMap.get(name);
if (id == null) throw new RuntimeException("Unknown label: " + name);
- final String label = (id < mLabels.length) ? mLabels[id] : null;
- return (label == null) ? LANGUAGE_DEFAULT[id] : label;
+ text = (id < mTexts.length) ? mTexts[id] : null;
+ return (text == null) ? LANGUAGE_DEFAULT[id] : text;
}
private static final String[] RESOURCE_NAMES = {
- // These labels' name should be aligned with the @string/<name> in values/strings.xml.
+ // These texts' name should be aligned with the @string/<name> in values/strings.xml.
// Labels for action.
"label_go_key",
// "label_search_key",
@@ -92,26 +102,26 @@ public final class KeyboardLabelsSet {
private static final String EMPTY = "";
- /* Default labels */
+ /* Default texts */
private static final String[] LANGUAGE_DEFAULT = {
- /* @DEFAULT_LABELS@ */
+ /* @DEFAULT_TEXTS@ */
};
- /* @LABELS@ */
- private static final Object[] LANGUAGES_AND_LABELS = {
- /* @LANGUAGES_AND_LABELS@ */
+ /* @TEXTS@ */
+ private static final Object[] LANGUAGES_AND_TEXTS = {
+ /* @LANGUAGES_AND_TEXTS@ */
};
static {
int id = 0;
for (final String name : NAMES) {
- sNameToIdMap.put(name, id++);
+ sLowerCaseNameToIdsMap.put(name, id++);
}
- for (int i = 0; i < LANGUAGES_AND_LABELS.length; i += 2) {
- final String language = (String)LANGUAGES_AND_LABELS[i];
- final String[] labels = (String[])LANGUAGES_AND_LABELS[i + 1];
- sLocaleToLabelsMap.put(language, labels);
+ for (int i = 0; i < LANGUAGES_AND_TEXTS.length; i += 2) {
+ final String language = (String)LANGUAGES_AND_TEXTS[i];
+ final String[] texts = (String[])LANGUAGES_AND_TEXTS[i + 1];
+ sLocaleToTextsMap.put(language, texts);
}
}
}
diff --git a/tools/makelabel/res/values-ar/donottranslate-more-keys.xml b/tools/maketext/res/values-ar/donottranslate-more-keys.xml
index 402e17160..402e17160 100644
--- a/tools/makelabel/res/values-ar/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-ar/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-be/donottranslate-more-keys.xml b/tools/maketext/res/values-be/donottranslate-more-keys.xml
index 835553a1f..835553a1f 100644
--- a/tools/makelabel/res/values-be/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-be/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-ca/donottranslate-more-keys.xml b/tools/maketext/res/values-ca/donottranslate-more-keys.xml
index baa23bf9c..baa23bf9c 100644
--- a/tools/makelabel/res/values-ca/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-ca/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-cs/donottranslate-more-keys.xml b/tools/maketext/res/values-cs/donottranslate-more-keys.xml
index 9af6794df..9af6794df 100644
--- a/tools/makelabel/res/values-cs/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-cs/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-da/donottranslate-more-keys.xml b/tools/maketext/res/values-da/donottranslate-more-keys.xml
index acc0c534d..acc0c534d 100644
--- a/tools/makelabel/res/values-da/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-da/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-de/donottranslate-more-keys.xml b/tools/maketext/res/values-de/donottranslate-more-keys.xml
index 562e574eb..562e574eb 100644
--- a/tools/makelabel/res/values-de/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-de/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-en/donottranslate-more-keys.xml b/tools/maketext/res/values-en/donottranslate-more-keys.xml
index 969a5041b..969a5041b 100644
--- a/tools/makelabel/res/values-en/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-en/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-es/donottranslate-more-keys.xml b/tools/maketext/res/values-es/donottranslate-more-keys.xml
index f56b1d54f..f56b1d54f 100644
--- a/tools/makelabel/res/values-es/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-es/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-et/donottranslate-more-keys.xml b/tools/maketext/res/values-et/donottranslate-more-keys.xml
index 69cf654a6..69cf654a6 100644
--- a/tools/makelabel/res/values-et/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-et/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-fa/donottranslate-more-keys.xml b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
index 1da1c1889..1da1c1889 100644
--- a/tools/makelabel/res/values-fa/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-fa/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-fi/donottranslate-more-keys.xml b/tools/maketext/res/values-fi/donottranslate-more-keys.xml
index 25b785845..25b785845 100644
--- a/tools/makelabel/res/values-fi/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-fi/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-fr/donottranslate-more-keys.xml b/tools/maketext/res/values-fr/donottranslate-more-keys.xml
index 7b11a183d..7b11a183d 100644
--- a/tools/makelabel/res/values-fr/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-fr/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-hi/donottranslate-more-keys.xml b/tools/maketext/res/values-hi/donottranslate-more-keys.xml
index 19bcb9dda..19bcb9dda 100644
--- a/tools/makelabel/res/values-hi/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-hi/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-hr/donottranslate-more-keys.xml b/tools/maketext/res/values-hr/donottranslate-more-keys.xml
index 9b4005d0d..9b4005d0d 100644
--- a/tools/makelabel/res/values-hr/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-hr/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-hu/donottranslate-more-keys.xml b/tools/maketext/res/values-hu/donottranslate-more-keys.xml
index 48259104b..48259104b 100644
--- a/tools/makelabel/res/values-hu/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-hu/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-is/donottranslate-more-keys.xml b/tools/maketext/res/values-is/donottranslate-more-keys.xml
index 284aae930..284aae930 100644
--- a/tools/makelabel/res/values-is/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-is/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-it/donottranslate-more-keys.xml b/tools/maketext/res/values-it/donottranslate-more-keys.xml
index 17dd03108..17dd03108 100644
--- a/tools/makelabel/res/values-it/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-it/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-iw/donottranslate-more-keys.xml b/tools/maketext/res/values-iw/donottranslate-more-keys.xml
index ad209edde..ad209edde 100644
--- a/tools/makelabel/res/values-iw/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-iw/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-ky/donottranslate-more-keys.xml b/tools/maketext/res/values-ky/donottranslate-more-keys.xml
index fd90248b2..fd90248b2 100644
--- a/tools/makelabel/res/values-ky/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-ky/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-lt/donottranslate-more-keys.xml b/tools/maketext/res/values-lt/donottranslate-more-keys.xml
index 1491d954e..1491d954e 100644
--- a/tools/makelabel/res/values-lt/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-lt/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-lv/donottranslate-more-keys.xml b/tools/maketext/res/values-lv/donottranslate-more-keys.xml
index d0a44480a..d0a44480a 100644
--- a/tools/makelabel/res/values-lv/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-lv/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-mk/donottranslate-more-keys.xml b/tools/maketext/res/values-mk/donottranslate-more-keys.xml
index d0cccf61b..d0cccf61b 100644
--- a/tools/makelabel/res/values-mk/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-mk/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-nb/donottranslate-more-keys.xml b/tools/maketext/res/values-nb/donottranslate-more-keys.xml
index 49e6d5faf..49e6d5faf 100644
--- a/tools/makelabel/res/values-nb/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-nb/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-nl/donottranslate-more-keys.xml b/tools/maketext/res/values-nl/donottranslate-more-keys.xml
index 73768aff2..73768aff2 100644
--- a/tools/makelabel/res/values-nl/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-nl/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-pl/donottranslate-more-keys.xml b/tools/maketext/res/values-pl/donottranslate-more-keys.xml
index 0f8a59bd6..0f8a59bd6 100644
--- a/tools/makelabel/res/values-pl/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-pl/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-pt/donottranslate-more-keys.xml b/tools/maketext/res/values-pt/donottranslate-more-keys.xml
index 0c9065f27..0c9065f27 100644
--- a/tools/makelabel/res/values-pt/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-pt/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-rm/donottranslate-more-keys.xml b/tools/maketext/res/values-rm/donottranslate-more-keys.xml
index aa0d7f817..aa0d7f817 100644
--- a/tools/makelabel/res/values-rm/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-rm/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-ro/donottranslate-more-keys.xml b/tools/maketext/res/values-ro/donottranslate-more-keys.xml
index 44613cf85..44613cf85 100644
--- a/tools/makelabel/res/values-ro/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-ro/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-ru/donottranslate-more-keys.xml b/tools/maketext/res/values-ru/donottranslate-more-keys.xml
index 0bb57074c..0bb57074c 100644
--- a/tools/makelabel/res/values-ru/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-ru/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-sk/donottranslate-more-keys.xml b/tools/maketext/res/values-sk/donottranslate-more-keys.xml
index f6e1e8d72..f6e1e8d72 100644
--- a/tools/makelabel/res/values-sk/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-sk/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-sl/donottranslate-more-keys.xml b/tools/maketext/res/values-sl/donottranslate-more-keys.xml
index ccff2ac29..ccff2ac29 100644
--- a/tools/makelabel/res/values-sl/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-sl/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-sr/donottranslate-more-keys.xml b/tools/maketext/res/values-sr/donottranslate-more-keys.xml
index e85d3d7a2..e85d3d7a2 100644
--- a/tools/makelabel/res/values-sr/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-sr/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-sv/donottranslate-more-keys.xml b/tools/maketext/res/values-sv/donottranslate-more-keys.xml
index d479191f4..d479191f4 100644
--- a/tools/makelabel/res/values-sv/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-sv/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-tr/donottranslate-more-keys.xml b/tools/maketext/res/values-tr/donottranslate-more-keys.xml
index 1161811d4..1161811d4 100644
--- a/tools/makelabel/res/values-tr/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-tr/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-uk/donottranslate-more-keys.xml b/tools/maketext/res/values-uk/donottranslate-more-keys.xml
index 32397049a..32397049a 100644
--- a/tools/makelabel/res/values-uk/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-uk/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-vi/donottranslate-more-keys.xml b/tools/maketext/res/values-vi/donottranslate-more-keys.xml
index 6ef1c6bc5..6ef1c6bc5 100644
--- a/tools/makelabel/res/values-vi/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-vi/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values-zz/donottranslate-more-keys.xml b/tools/maketext/res/values-zz/donottranslate-more-keys.xml
index eb984a469..eb984a469 100644
--- a/tools/makelabel/res/values-zz/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values-zz/donottranslate-more-keys.xml
diff --git a/tools/makelabel/res/values/donottranslate-more-keys.xml b/tools/maketext/res/values/donottranslate-more-keys.xml
index 7878757f7..401613410 100644
--- a/tools/makelabel/res/values/donottranslate-more-keys.xml
+++ b/tools/maketext/res/values/donottranslate-more-keys.xml
@@ -78,6 +78,33 @@
<string name="more_keys_for_smiley">"!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ "</string>
<string name="more_keys_for_punctuation">"!fixedColumnOrder!8,\",\',#,-,:,!,\\,,\?,\@,&amp;,\\%,+,;,/,(,)"</string>
<string name="keyhintlabel_for_punctuation"></string>
+ <!-- U+2020: "†" DAGGER
+ U+2021: "‡" DOUBLE DAGGER
+ U+2605: "★" BLACK STAR -->
+ <string name="more_keys_for_star">&#x2020;,&#x2021;,&#x2605;</string>
+ <!-- U+00B1: "±" PLUS-MINUS SIGN -->
+ <string name="more_keys_for_plus">&#x00B1;</string>
+ <!-- The all letters need to be mirrored are found at
+ http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
+ <string name="more_keys_for_left_parenthesis">!fixedColumnOrder!3,&lt;,{,[</string>
+ <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,&gt;,},]</string>
+ <!-- U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ U+2264: "≤" LESS-THAN OR EQUAL TO
+ U+2265: "≥" GREATER-THAN EQUAL TO
+ U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ The following characters don't need BIDI mirroring.
+ U+2018: "‘" LEFT SINGLE QUOTATION MARK
+ U+2019: "’" RIGHT SINGLE QUOTATION MARK
+ U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ U+201C: "“" LEFT DOUBLE QUOTATION MARK
+ U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
+ <string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;,&#x2264;,&#x00AB;</string>
+ <string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;,&#x2265;,&#x00BB;</string>
<string name="keylabel_for_popular_domain">".com"</string>
<!-- popular web domains for the locale - most popular, displayed on the keyboard -->
<string name="more_keys_for_popular_domain">"!hasLabels!,.net,.org,.gov,.edu"</string>
@@ -126,12 +153,8 @@
<!-- U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
U+2205: "∅" EMPTY SET -->
<string name="more_keys_for_symbols_0">&#x207F;,&#x2205;</string>
- <string name="more_keys_for_am_pm">!fixedColumnOrder!2,!hasLabels!,\@string/label_time_am,\@string/label_time_pm</string>
- <string name="settings_as_more_key">!icon/settingsKey|!code/key_settings</string>
<string name="keylabel_for_comma">,</string>
<string name="more_keys_for_comma"></string>
- <string name="action_next_as_more_key">!hasLabels!,\@string/label_next_key|!code/key_action_next</string>
- <string name="action_previous_as_more_key">!hasLabels!,\@string/label_previous_key|!code/key_action_previous</string>
<string name="keylabel_for_symbols_question">\?</string>
<string name="keylabel_for_symbols_semicolon">;</string>
<string name="keylabel_for_symbols_percent">%</string>
@@ -157,33 +180,11 @@
U+2666: "♦" BLACK DIAMOND SUIT
U+2663: "♣" BLACK CLUB SUIT -->
<string name="more_keys_for_bullet">&#x266A;,&#x2665;,&#x2660;,&#x2666;,&#x2663;</string>
- <!-- U+2020: "†" DAGGER
- U+2021: "‡" DOUBLE DAGGER
- U+2605: "★" BLACK STAR -->
- <string name="more_keys_for_star">&#x2020;,&#x2021;,&#x2605;</string>
- <!-- U+00B1: "±" PLUS-MINUS SIGN -->
- <string name="more_keys_for_plus">&#x00B1;</string>
- <!-- The all letters need to be mirrored are found at
- http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt -->
- <string name="more_keys_for_left_parenthesis">!fixedColumnOrder!3,&lt;,{,[</string>
- <string name="more_keys_for_right_parenthesis">!fixedColumnOrder!3,&gt;,},]</string>
- <!-- U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
- U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
- U+2264: "≤" LESS-THAN OR EQUAL TO
- U+2265: "≥" GREATER-THAN EQUAL TO
- U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
- U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- The following characters don't need BIDI mirroring.
- U+2018: "‘" LEFT SINGLE QUOTATION MARK
- U+2019: "’" RIGHT SINGLE QUOTATION MARK
- U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
- U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
- U+201C: "“" LEFT DOUBLE QUOTATION MARK
- U+201D: "”" RIGHT DOUBLE QUOTATION MARK
- U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
- U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
- <string name="more_keys_for_less_than">!fixedColumnOrder!3,&#x2039;,&#x2264;,&#x00AB;</string>
- <string name="more_keys_for_greater_than">!fixedColumnOrder!3,&#x203A;,&#x2265;,&#x00BB;</string>
+ <string name="more_keys_for_am_pm">!fixedColumnOrder!2,!hasLabels!,\@string/label_time_am,\@string/label_time_pm</string>
+ <string name="settings_as_more_key">!icon/settings_key|!code/key_settings</string>
+ <string name="shortcut_as_more_key">!icon/shortcut_key|!code/key_shortcut</string>
+ <string name="action_next_as_more_key">!hasLabels!,\@string/label_next_key|!code/key_action_next</string>
+ <string name="action_previous_as_more_key">!hasLabels!,\@string/label_previous_key|!code/key_action_previous</string>
<!-- Label for "switch to more symbol" modifier key. Must be short to fit on key! -->
<string name="label_to_more_symbol_key">= \\ &lt;</string>
<!-- Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key! -->
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/ArrayInitializerFormatter.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/ArrayInitializerFormatter.java
index 0cf2991b0..3365c7273 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/ArrayInitializerFormatter.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/ArrayInitializerFormatter.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
import java.io.PrintStream;
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/JarUtils.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java
index b24b2ca30..366d73e20 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/JarUtils.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/JarUtils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
import java.io.IOException;
import java.io.InputStream;
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/LabelMaker.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/LabelText.java
index e02f80283..a5abcf1c1 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/LabelMaker.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/LabelText.java
@@ -14,14 +14,14 @@
* the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.jar.JarFile;
-public class LabelMaker {
+public class LabelText {
static class Options {
private static final String OPTION_JAVA = "-java";
@@ -58,7 +58,7 @@ public class LabelMaker {
public static void main(final String[] args) {
final Options options = new Options(args);
- final JarFile jar = JarUtils.getJarFile(LabelMaker.class.getClassLoader());
+ final JarFile jar = JarUtils.getJarFile(LabelText.class.getClassLoader());
final MoreKeysResources resources = new MoreKeysResources(jar);
resources.writeToJava(options.mJava);
}
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/MoreKeysResources.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/MoreKeysResources.java
index 1dfb8533f..a4835932b 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/MoreKeysResources.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/MoreKeysResources.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
import java.io.Closeable;
import java.io.File;
@@ -30,13 +30,13 @@ import java.util.Locale;
import java.util.jar.JarFile;
public class MoreKeysResources {
- private static final String LABEL_RESOURCE_NAME = "donottranslate-more-keys.xml";
+ private static final String TEXT_RESOURCE_NAME = "donottranslate-more-keys.xml";
- private static final String JAVA_TEMPLATE = "KeyboardLabelsSet.tmpl";
+ private static final String JAVA_TEMPLATE = "KeyboardTextsSet.tmpl";
private static final String MARK_NAMES = "@NAMES@";
- private static final String MARK_DEFAULT_LABELS = "@DEFAULT_LABELS@";
- private static final String MARK_LABELS = "@LABELS@";
- private static final String MARK_LANGUAGES_AND_LABELS = "@LANGUAGES_AND_LABELS@";
+ private static final String MARK_DEFAULT_TEXTS = "@DEFAULT_TEXTS@";
+ private static final String MARK_TEXTS = "@TEXTS@";
+ private static final String MARK_LANGUAGES_AND_TEXTS = "@LANGUAGES_AND_TEXTS@";
private static final String DEFAUT_LANGUAGE_NAME = "DEFAULT";
private static final String ARRAY_NAME_FOR_LANGUAGE = "LANGUAGE_%s";
private static final String EMPTY_STRING_VAR = "EMPTY";
@@ -53,7 +53,7 @@ public class MoreKeysResources {
public MoreKeysResources(final JarFile jar) {
mJar = jar;
- final ArrayList<String> resources = JarUtils.getNameListing(jar, LABEL_RESOURCE_NAME);
+ final ArrayList<String> resources = JarUtils.getNameListing(jar, TEXT_RESOURCE_NAME);
for (final String name : resources) {
final String dirName = name.substring(0, name.lastIndexOf('/'));
final int pos = dirName.lastIndexOf('/');
@@ -118,11 +118,11 @@ public class MoreKeysResources {
while ((line = in.readLine()) != null) {
if (line.contains(MARK_NAMES)) {
dumpNames(out);
- } else if (line.contains(MARK_DEFAULT_LABELS)) {
- dumpDefaultLabels(out);
- } else if (line.contains(MARK_LABELS)) {
- dumpLabels(out);
- } else if (line.contains(MARK_LANGUAGES_AND_LABELS)) {
+ } else if (line.contains(MARK_DEFAULT_TEXTS)) {
+ dumpDefaultTexts(out);
+ } else if (line.contains(MARK_TEXTS)) {
+ dumpTexts(out);
+ } else if (line.contains(MARK_LANGUAGES_AND_TEXTS)) {
dumpLanguageMap(out);
} else {
out.println(line);
@@ -140,12 +140,12 @@ public class MoreKeysResources {
}
}
- private void dumpDefaultLabels(final PrintStream out) {
+ private void dumpDefaultTexts(final PrintStream out) {
final StringResourceMap defaultResMap = mResourcesMap.get(DEFAUT_LANGUAGE_NAME);
- dumpLabelsInternal(out, defaultResMap, defaultResMap);
+ dumpTextsInternal(out, defaultResMap, defaultResMap);
}
- private void dumpLabels(final PrintStream out) {
+ private void dumpTexts(final PrintStream out) {
final StringResourceMap defaultResMap = mResourcesMap.get(DEFAUT_LANGUAGE_NAME);
final ArrayList<String> allLanguages = new ArrayList<String>();
allLanguages.addAll(mResourcesMap.keySet());
@@ -158,7 +158,7 @@ public class MoreKeysResources {
out.format(" private static final String[] " + ARRAY_NAME_FOR_LANGUAGE + " = {\n",
language);
final StringResourceMap resMap = mResourcesMap.get(language);
- dumpLabelsInternal(out, resMap, defaultResMap);
+ dumpTextsInternal(out, resMap, defaultResMap);
out.format(" };\n\n");
}
}
@@ -181,7 +181,7 @@ public class MoreKeysResources {
}
}
- private static void dumpLabelsInternal(final PrintStream out, final StringResourceMap resMap,
+ private static void dumpTextsInternal(final PrintStream out, final StringResourceMap resMap,
final StringResourceMap defaultResMap) {
final ArrayInitializerFormatter formatter =
new ArrayInitializerFormatter(out, 100, " ");
@@ -235,7 +235,7 @@ public class MoreKeysResources {
String t = text;
t = replaceAll(t, "\\?", "?");
t = replaceAll(t, "\\@", "@");
- t = replaceAll(t, "@string/", "!label/");
+ t = replaceAll(t, "@string/", "!text/");
return t;
}
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResource.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/StringResource.java
index 793483ce1..568a896a9 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResource.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/StringResource.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
public class StringResource {
public final String mName;
diff --git a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResourceMap.java b/tools/maketext/src/com/android/inputmethod/latin/maketext/StringResourceMap.java
index afb1aa7ac..6ceea5a37 100644
--- a/tools/makelabel/src/com/android/inputmethod/latin/makelabel/StringResourceMap.java
+++ b/tools/maketext/src/com/android/inputmethod/latin/maketext/StringResourceMap.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.inputmethod.latin.makelabel;
+package com.android.inputmethod.latin.maketext;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -92,6 +92,9 @@ public class StringResourceMap {
@Override
public void comment(char[] ch, int start, int length) {
mComment.append(ch, start, length);
+ if (ch[start + length - 1] != '\n') {
+ mComment.append('\n');
+ }
}
@Override