aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-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
182 files changed, 3548 insertions, 1761 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) {