aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/values-af/strings.xml11
-rw-r--r--java/res/values-am/strings.xml11
-rw-r--r--java/res/values-ar/strings.xml11
-rw-r--r--java/res/values-be/strings.xml11
-rw-r--r--java/res/values-bg/strings.xml13
-rw-r--r--java/res/values-ca/strings.xml11
-rw-r--r--java/res/values-cs/strings.xml11
-rw-r--r--java/res/values-da/strings.xml11
-rw-r--r--java/res/values-de/strings.xml11
-rw-r--r--java/res/values-el/strings.xml11
-rw-r--r--java/res/values-en-rGB/strings.xml11
-rw-r--r--java/res/values-es-rUS/strings.xml11
-rw-r--r--java/res/values-es/strings.xml11
-rw-r--r--java/res/values-et/strings.xml11
-rw-r--r--java/res/values-fa/strings.xml11
-rw-r--r--java/res/values-fi/strings.xml11
-rw-r--r--java/res/values-fr/strings.xml11
-rw-r--r--java/res/values-hi/strings.xml11
-rw-r--r--java/res/values-hr/strings.xml11
-rw-r--r--java/res/values-hu/strings.xml11
-rw-r--r--java/res/values-in/strings.xml11
-rw-r--r--java/res/values-it/strings.xml11
-rw-r--r--java/res/values-iw/strings.xml11
-rw-r--r--java/res/values-ja/strings.xml11
-rw-r--r--java/res/values-ko/strings.xml11
-rw-r--r--java/res/values-lt/strings.xml11
-rw-r--r--java/res/values-lv/strings.xml11
-rw-r--r--java/res/values-ms/strings.xml11
-rw-r--r--java/res/values-nb/strings.xml11
-rw-r--r--java/res/values-nl/strings.xml13
-rw-r--r--java/res/values-pl/strings.xml11
-rw-r--r--java/res/values-pt-rPT/strings.xml11
-rw-r--r--java/res/values-pt/strings.xml11
-rw-r--r--java/res/values-rm/strings.xml22
-rw-r--r--java/res/values-ro/strings.xml11
-rw-r--r--java/res/values-ru/strings.xml11
-rw-r--r--java/res/values-sk/strings.xml11
-rw-r--r--java/res/values-sl/strings.xml11
-rw-r--r--java/res/values-sr/strings.xml11
-rw-r--r--java/res/values-sv/strings.xml11
-rw-r--r--java/res/values-sw/strings.xml11
-rw-r--r--java/res/values-th/strings.xml11
-rw-r--r--java/res/values-tl/strings.xml11
-rw-r--r--java/res/values-tr/strings.xml11
-rw-r--r--java/res/values-uk/strings.xml13
-rw-r--r--java/res/values-vi/strings.xml11
-rw-r--r--java/res/values-zh-rCN/strings.xml11
-rw-r--r--java/res/values-zh-rTW/strings.xml11
-rw-r--r--java/res/values-zu/strings.xml11
-rw-r--r--java/res/values/strings.xml23
-rw-r--r--java/res/xml-sw600dp/keys_pcqwerty3_right2.xml24
-rw-r--r--java/res/xml-v16/key_hindi1_shift.xml32
-rw-r--r--java/res/xml-v16/key_hindi3_right.xml36
-rw-r--r--java/res/xml-v16/key_hindi3_shift_left.xml34
-rw-r--r--java/res/xml-v16/key_hindi3_shift_right.xml34
-rw-r--r--java/res/xml-v16/keys_hindi1_left5.xml75
-rw-r--r--java/res/xml-v16/keys_hindi2_left5.xml59
-rw-r--r--java/res/xml-v16/keys_hindi3_left2.xml36
-rw-r--r--java/res/xml/key_hindi1_shift.xml34
-rw-r--r--java/res/xml/key_hindi3_right.xml38
-rw-r--r--java/res/xml/key_hindi3_shift_left.xml36
-rw-r--r--java/res/xml/key_hindi3_shift_right.xml36
-rw-r--r--java/res/xml/keys_hindi1_left5.xml85
-rw-r--r--java/res/xml/keys_hindi2_left5.xml69
-rw-r--r--java/res/xml/keys_hindi3_left2.xml40
-rw-r--r--java/res/xml/keys_pcqwerty3_right2.xml14
-rw-r--r--java/res/xml/row_symbols_shift4.xml8
-rw-r--r--java/res/xml/rowkeys_hindi1.xml61
-rw-r--r--java/res/xml/rowkeys_hindi2.xml36
-rw-r--r--java/res/xml/rowkeys_hindi3.xml48
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java17
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java86
-rw-r--r--java/src/com/android/inputmethod/keyboard/Key.java41
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java980
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java26
-rw-r--r--java/src/com/android/inputmethod/latin/Settings.java9
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsFragment.java10
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsValues.java4
-rw-r--r--java/src/com/android/inputmethod/latin/StaticInnerHandlerWrapper.java14
-rw-r--r--java/src/com/android/inputmethod/latin/define/ProductionFlag.java1
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupActivity.java3
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLog.java58
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogger.java40
84 files changed, 2029 insertions, 686 deletions
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 4daf46568..dc6fdf262 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Lettermodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Foonmodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Foonsimbool-modus"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Sleutelbord versteek"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Wys <xliff:g id="MODE">%s</xliff:g>-sleutelbord"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum en tyd"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-pos"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"boodskappe"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"nommer"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"foon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teks"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"tyd"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Steminvoerinstellings"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Op hoofsleutelbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Op simbolesleutelbord"</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index d1fe341b9..1907dc962 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"የደብዳቤዎች ሁኔታ ላይ"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"የስልክ ሁኔታ ላይ"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"የስልክ ምልክቶች ሁኔታ ላይ"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"የቁልፍ ሰሌዳ ተደብቋል"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"የ<xliff:g id="MODE">%s</xliff:g> ቁልፍ ሰሌዳን በማሳየት ላይ"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"ቀን"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"ቀን እና ሰዓት"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"ኢሜይል"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"አላላክ"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"ቁጥር"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"ስልክ"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"ፅሁፍ"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ጊዜ"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"ዩ አር ኤል"</string>
<string name="voice_input" msgid="3583258583521397548">"የድምፅ ግቤት ቁልፍ"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"በዋናቁልፍ ሰሌዳ ላይ"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"በምልክቶች ቁልፍ ሰሌዳ ላይ"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index bca3c2aa3..1268f4395 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"وضع الأحرف"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"وضع الهاتف"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"وضع رموز الهاتف"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"لوحة المفاتيح مخفية"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"إظهار لوحة مفاتيح <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"التاريخ"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"التاريخ والوقت"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"البريد الإلكتروني"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"المراسلة"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"الرقم"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"الهاتف"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"النص"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"الوقت"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"عنوان URL"</string>
<string name="voice_input" msgid="3583258583521397548">"مفتاح الإدخال الصوتي"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"لوحة مفاتيح رئيسية"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"لوحة مفاتيح الرموز"</string>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index 56382e42e..6fc28e573 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Рэжым лiтар"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Рэжым тэлефона"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Рэжым тэлефонных знакаў"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Клавіятура схавана"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Паказана клавiятура ў рэжыме \" <xliff:g id="MODE">%s</xliff:g>\""</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"дата"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"дата i час"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"электронная пошта"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"абмен паведамленнямі"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"нумар"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"тэлефон"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"тэкст"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"час"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Ключ галасавога ўводу"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На асн. клавіятуры"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На сімв. клавіятуры"</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 3ffebea48..76bd2d15b 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим за букви"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим за телефон"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим за символи на телефона"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Клавиатурата е скрита"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Показва се клавиатурата за <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"дата"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"дата и час"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"имейл aдреси"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"съобщения"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"числа"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"телефонни номера"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"текст"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"часа"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL адреси"</string>
<string name="voice_input" msgid="3583258583521397548">"Клавиш за гласово въвеждане"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На осн. клавиатура"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На клав. на симв."</string>
@@ -130,7 +141,7 @@
<string name="subtype_with_layout_en_US" msgid="1362581347576714579">"английски (САЩ) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_with_layout_es_US" msgid="6261791057007890189">"испански (САЩ) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_no_language" msgid="141420857808801746">"Без език"</string>
- <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Без език („QWERTY“)"</string>
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"без език („QWERTY“)"</string>
<string name="subtype_no_language_qwertz" msgid="1177848172397202890">"Без език (QWERTZ)"</string>
<string name="subtype_no_language_azerty" msgid="8721460968141187394">"Без език (AZERTY)"</string>
<string name="subtype_no_language_dvorak" msgid="3122976737669823935">"Без език (Дворак)"</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 26527381f..ed883334c 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode de lletres"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode de telèfon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode de símbols de telèfon"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Teclat amagat"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Es mostra el teclat <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"data"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"data i hora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"correu electrònic"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"missatgeria"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"número"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telèfon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"hora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tecla d\'entrada de veu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Al teclat principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Al teclat de símbols"</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 7e12f06d8..b924dad60 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Režim písmen"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Režim telefonu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Režim telefonních symbolů"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klávesnice je skrytá"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Zobrazení klávesnice: <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum a čas"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"zprávy"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"čísla"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"čas"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"adresy URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Klávesa hlasového vstupu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na hlavní klávesnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klávesnici se symboly"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 3ea4aaaef..58ee41b1f 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bogstavtilstand"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefontilstand"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefonsymboltilstand"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastaturet er skjult"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Viser tastatur til <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"dato"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"Dato og klokkeslæt"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"beskeder"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"tal"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"klokkeslæt"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"Webadresse"</string>
<string name="voice_input" msgid="3583258583521397548">"Nøgle til stemmeinput"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På hovedtastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På symboltastatur"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index a50cdf0d0..ce620f0c3 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Buchstabenmodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonmodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefon-Symbolmodus"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastatur ausgeblendet"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Tastatur für <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"Datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"Datum &amp; Uhrzeit"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"E-Mail-Adresse"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"SMS/MMS"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"Zahl"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"Telefonnummer"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"Text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"Zeit"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Taste für Spracheingabe"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Auf Haupttastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Auf Symboltastatur"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 153dbbbf4..1294df031 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Λειτουργία γραμμάτων"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Λειτουργία τηλεφώνου"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Λειτουργία συμβόλων τηλεφώνου"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Απόκρυψη πληκτρολογίου"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Εμφάνιση πληκτρολογίου <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"ημερομηνία"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"ημερομηνία και ώρα"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"ανταλλαγή μηνυμάτων"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"αριθμός"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"τηλέφωνο"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"κείμενο"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ώρα"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"διεύθυνση URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Κλειδί φωνητικής εξόδου"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Στο κύριο πληκτρολ."</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Πληκτρ. συμβ. ενερ."</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 5fbbdf667..9e7d64f73 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Letters mode"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Phone mode"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Phone symbols mode"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Keyboard hidden"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Showing <xliff:g id="MODE">%s</xliff:g> keyboard"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"date"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"date and time"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"messaging"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"number"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"phone"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"time"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Voice input key"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"On main keyboard"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"On symbols keyboard"</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index 71841f805..7585b28e6 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo Letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo Teléfono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo Símbolos del teléfono"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Teclado oculto"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Mostrando teclado para <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"fecha"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"fecha y hora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"correo"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"Centro de Mensajes"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"número"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"teléfono"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"texto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"hora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tecla de entrada por voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"En el teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"En el teclado de símbolos"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 9b31884a2..42427fe5c 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de teléfono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de teléfono"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Teclado oculto"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Mostrando teclado <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"fecha"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"fecha y hora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"correo electrónico"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"mensajes"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"número"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"teléfono"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"texto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"hora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tecla de entrada de voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"En teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"En teclado de símbolos"</string>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index 3364abe5e..51eb47bcd 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Tähtede režiim"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonirežiim"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefoni sümbolite režiim"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klaviatuur on peidetud"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Näitab klaviatuuri režiimil <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"kuupäev"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"kuupäev ja kellaaeg"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-post"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"sõnumiside"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"number"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"aeg"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Häälesisendi klahv"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Peamisel klaviatuuril"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sümbol. klaviatuuril"</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 54ba41256..8f71f1912 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -112,6 +112,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"حالت حروف"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"حالت تلفن"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"حالت نمادهای تلفن"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"صفحه کلید پنهان شد"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"نمایش صفحه کلید <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"تاریخ"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"تاریخ و زمان"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"ایمیل"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"پیام‌رسانی"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"عدد"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"تلفن"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"نوشتار"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"زمان"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"نشانی اینترنتی"</string>
<string name="voice_input" msgid="3583258583521397548">"کلید ورودی صدا"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"در صفحه‌کلید اصلی"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"در صفحه‌کلید نمادها"</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 2d754023c..9fe8f1b0b 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Näppäimistötila"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Puhelintila"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Puhelinsymbolit-tila"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Näppäimistö on piilotettu"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Näytetään <xliff:g id="MODE">%s</xliff:g>-näppäimistö"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"päivämäärä"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"päivämäärä ja aika"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"sähköposti"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"viestit"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"numero"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"puhelin"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teksti"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"aika"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL-osoite"</string>
<string name="voice_input" msgid="3583258583521397548">"Ääniohjausavain"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Päänäppäimistössä"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Symbolinäppäimistössä"</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index f327f90f9..8b2287415 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode Lettres"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode Téléphone"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode Symboles du téléphone"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Clavier masqué"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Affichage du clavier <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"Date"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"Date et heure"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"Adresse e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"SMS/MMS"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"Chiffre"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"Numéro de téléphone"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"Texte"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"Heure"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Touche de saisie vocale"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Sur clavier principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sur clavier symboles"</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index e52143dc6..77081bd99 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"अक्षर मोड"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"फ़ोन मोड"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"फ़ोन प्रतीक मोड"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"कीबोर्ड छिपा हुआ है"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g> कीबोर्ड दिखाया जा रहा है"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"दिनांक"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"दिनांक और समय"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"ईमेल"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"संदेश सेवा"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"संख्या"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"फ़ोन"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"पाठ"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"समय"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"ध्‍वनि‍ इनपुट कुंजी"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"मुख्‍य कीबोर्ड पर"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"प्रतीक कीबोर्ड पर"</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 564d48f14..0710d307e 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Način pisanja slova"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonski način rada"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Način unosa telefonskih simbola"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tipkovnica je skrivena"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Način prikazane tipkovnice: <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum i vrijeme"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-pošta"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"slanje poruka"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"brojevi"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"vrijeme"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tipka za glasovni unos"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na glavnoj tipkovnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na tipkovnici simb."</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 047a31a6c..e9c7aa018 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"\"Betű\" mód"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"\"Telefon\" mód"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"\"Telefonos szimbólumok\" mód"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Billentyűzet elrejtve"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g> billentyűzet megjelenítve"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"dátum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"dátum és idő"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"üzenetváltás"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"szám"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"szöveg"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"idő"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Hangbeviteli gomb"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"A fő billentyűzeten"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Szimbólumoknál"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index ba9a7da4c..d5732545e 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode huruf"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode telepon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode simbol telepon"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Keyboard disembunyikan"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Menampilkan keyboard <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"tanggal"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"tanggal dan waktu"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"pesan"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"angka"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telepon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teks"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"waktu"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tombol masukan suara"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pada keyboard utama"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pada keyboard simbol"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 56acdf8ce..0a62f8ad4 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modalità lettere"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modalità telefono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modalità simboli telefono"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastiera nascosta"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Visualizzazione tastiera <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"data"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"data e ora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"messaggi"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"numero"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefono"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"testo"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tasto input vocale"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Su tastiera principale"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Su tastiera simboli"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 7c55ab569..33d9fc57e 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"מצב אותיות"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"מצב טלפון"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"מצב סמלי טלפון"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"המקלדת מוסתרת"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"מציג מקלדת <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"תאריך"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"תאריך ושעה"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"דוא\"ל"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"העברת הודעות"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"מספרים"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"מספרי טלפון"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"טקסט"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"זמן"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"כתובות אתרים"</string>
<string name="voice_input" msgid="3583258583521397548">"מקש קלט קולי"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"במקלדת הראשית"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"במקלדת סמלים"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 9328f0184..25b37a4b4 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"英数モード"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"電話モード"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"電話記号モード"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"キーボードは非表示です"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g>のキーボードを表示しています"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"日付"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"日時"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"メールアドレス"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"メッセージ"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"数値"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"電話番号"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"テキスト"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"時刻"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"音声入力キー"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"メインキーボード上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"記号キーボード上"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index f6086eed5..3b0228a88 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"문자 모드"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"다이얼 모드"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"전화 기호 모드"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"키보드 숨김"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g> 키보드 표시"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"날짜"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"날짜 및 시간"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"이메일"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"문자 메시지"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"숫자"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"전화번호"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"텍스트"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"시간"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"음성 입력 키"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"기본 키보드"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"기호 키보드"</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index a815003b2..9bfffbc52 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Raidžių režimas"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefono režimas"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefono simbolių režimas"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klaviatūra paslėpta"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Klaviatūra rodoma <xliff:g id="MODE">%s</xliff:g> režimu"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datos"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datos ir laiko"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"el. pašto"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"susirašinėjimo pranešimais"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"skaičių"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefonų numerių"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teksto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"laiko"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Įvesties balsu klavišas"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pagr. klaviatūroje"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Simbolių klaviatūr."</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 6a408cfce..5dcaa0100 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Burtu režīms"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Tālruņa režīms"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Tālruņa simbolu režīms"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastatūra ir paslēpta"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Tiek rādīts tastatūras režīms <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datums"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datums un laiks"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-pasts"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"ziņojumapmaiņa"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"cipari"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"tālrunis"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teksts"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"laiks"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Balss ievades atslēga"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Uz galv. tastatūras"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Uz simbolu tastat."</string>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 0d4ccf42d..4866fed8f 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mod huruf"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mod telefon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mod simbol telefon"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Papan kekunci tersembunyi"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Menunjukkan <xliff:g id="MODE">%s</xliff:g> papan kekunci"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"tarikh"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"tarikh dan masa"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mel"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"pemesejan"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"nombor"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teks"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"masa"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Kunci input suara"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Hidpkn kekunci utama"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pd ppn k’unci simbol"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index f0b3a4623..32793ef8c 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bokstavmodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Ringemodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Ringemodus med symboler"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastaturet er skjult"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Viser <xliff:g id="MODE">%s</xliff:g>-tastatur"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"dato"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"dato og klokkeslett"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-post"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"tekstmeldinger"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"tall"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"tid"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"Nettadresse"</string>
<string name="voice_input" msgid="3583258583521397548">"Tast for taleinndata"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På hovedtastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På talltastatur"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index dc3a9c3f4..4822617f4 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -108,11 +108,22 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Alfanumeriek toetsenbord"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Toetsenbord telefoon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefoonsymbolen"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Toetsenbord verborgen"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g> toetsenbord wordt weergegeven"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum en tijd"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"berichten"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"nummer"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefoon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"tijd"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Toets voor spraakinvoer"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Op hoofdtoetsenbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Op symbooltoetsenb."</string>
<string name="voice_input_modes_off" msgid="3745699748218082014">"Uitgeschakeld"</string>
- <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic op hoofdtoetsb."</string>
+ <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Microfoon op hoofdtoetsenbord"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic op symb.toetsb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Spraakinvoer is uit"</string>
<string name="configure_input_method" msgid="373356270290742459">"Invoermethoden configureren"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index de100bc86..7bb8b772f 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Tryb liter"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Tryb telefonu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Tryb symboli telefonu"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klawiatura ukryta"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Pokazuję klawiaturę w trybie <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"data"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"data i godzina"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"SMS"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"liczba"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"tekst"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"godzina"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Klawisz rozpoznawania mowy"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na klawiaturze głównej"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klawiaturze z symbolami"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 68a34574f..caa4019ba 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de telemóvel"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de telemóvel"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Teclado oculto"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"A mostrar teclado de <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"data"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"data e hora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"mensagens"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"números"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telemóvel"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"texto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"hora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URLs"</string>
<string name="voice_input" msgid="3583258583521397548">"Chave de entrada de voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"No teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"No teclado símbolos"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 00ab88ced..ed8cdec38 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de cartas"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de telefone"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de telefone"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Teclado oculto"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Mostrando teclado <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"data"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"data e hora"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"mensagens"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"número"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefone"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"texto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"hora"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Chave de entrada de texto por voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"No teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"No teclado de símb."</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 9eec7f883..5dad59fc2 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -187,6 +187,28 @@
<skip />
<!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
<skip />
+ <!-- no translation found for announce_keyboard_hidden (8718927835531429807) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_mode (4729081055438508321) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date (3137520166817128102) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date_time (339593358488851072) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_email (6216248078128294262) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_im (1137405089766557048) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_number (7991623440699957069) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_phone (6851627527401433229) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_text (6479436687899701619) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_time (4381856885582143277) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_url (1519819835514911218) -->
+ <skip />
<!-- no translation found for voice_input (3583258583521397548) -->
<skip />
<!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index c5a80e397..5fbcbe5a3 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modul Alfanumeric"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modul Telefon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modul Telefon cu simboluri"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tastatura este ascunsă"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Se afișează tastatura pentru <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"date"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"date și ore"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"adrese de e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"mesaje"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"numere"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefoane"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ore"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"adrese URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tastă pentru intrarea vocală"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pe tastat. princip."</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pe tastat. simbol."</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 13a567808..c21bbf918 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим ввода текста"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим набора номера"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим телефонных символов"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Клавиатура скрыта"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Включен режим <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"ввода даты"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"ввода даты и времени"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"ввода адреса электронной почты"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"ввода сообщения"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"ввода цифр"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"набора номера"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"ввода текста"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ввода времени"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"ввода URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Кнопка голосового ввода"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Значок на основной клавиатуре"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Значок на клавиатуре символов"</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 0b28bf193..aad236ee2 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Režim písmen"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Režim telefónu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Režim telefónnych symbolov"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klávesnica je skrytá"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Zobrazenie klávesnice v režime <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"dátum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"dátum a čas"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-mail"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"odosielanie správ"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"číslo"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefón"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"čas"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"Adresa URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Kľúč hlasového vstupu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na hlavnej klávesnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klávesnici so symbolmi"</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 50f3869d4..a93bf0a41 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Način črk"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Način telefona"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Način simbolov telefona"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tipkovnica je skrita"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Prikaz tipkovnice: <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum in ura"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-pošta"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"sporočila SMS"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"števila"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefonske številke"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"besedilo"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"ura"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Tipka za glasovni vnos"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na glavni tipkovnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na tipk. s simboli"</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 2d13db099..8450da15b 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим слова"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим телефона"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим симбола телефона"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Тастатура је сакривена"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Приказује се тастатура у режиму <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"датум"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"датум и време"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"адреса е-поште"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"размена порука"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"број"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"телефон"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"текст"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"време"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL адреса"</string>
<string name="voice_input" msgid="3583258583521397548">"Тастер за гласовни унос"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На главној тастатури"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На тастатури са симболима"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 608caad17..be278fa2d 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bokstavsläge"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonläge"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefonsymbolläge"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Tangentbordet är dolt"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Tangentbord för <xliff:g id="MODE">%s</xliff:g> visas"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"datum"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"datum och tid"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-post"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"sms"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"siffror"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefonnummer"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"text"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"klockslag"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"webbadresser"</string>
<string name="voice_input" msgid="3583258583521397548">"Röstinmatningsknapp"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På huvudtangentbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På symboltangentbord"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 104a5d42e..1fc92fb3e 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Hali ya barua"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Hali ya simu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Hali ya alama za simu"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Kibodi imefichwa"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Inaonyesha kibodi <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"tarehe"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"tarehe na wakati"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"barua pepe"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"inatuma ujumbe"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"nambari"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"simu"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"maandishi"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"wakati"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Kibao cha kuingizia sauti"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Kwenye kibodi kuu"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Kwenye kibodi ya ishara"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 1db5e91cd..84c4a0327 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"โหมดตัวอักษร"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"โหมดโทรศัพท์"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"โหมดสัญลักษณ์โทรศัพท์"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"ซ่อนแป้นพิมพ์แล้ว"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"กำลังแสดงแป้นพิมพ์ <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"วันที่"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"วันที่และเวลา"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"อีเมล"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"ข้อความ"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"หมายเลข"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"โทรศัพท์"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"ข้อความ"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"เวลา"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"แป้นการป้อนข้อมูลด้วยเสียง"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"บนแป้นพิมพ์หลัก"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"บนแป้นพิมพ์สัญลักษณ์"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index adf0a1982..e2a59a43b 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode ng mga titik"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode ng telepono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode ng mga simbolo ng telepono"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Nakatago ang keyboard"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Ipinapakita ang <xliff:g id="MODE">%s</xliff:g> keyboard"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"petsa"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"petsa at oras"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"pagmemensahe"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"numero"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telepono"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"teksto"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"oras"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Voice input key"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Sa pangunahing keyboard"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sa keyboard ng mga simbolo"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index fd80fea5b..c78d56b55 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Harf modu"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefon modu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefon sembolleri modu"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Klavye gizli"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"<xliff:g id="MODE">%s</xliff:g> klavyesi gösteriliyor"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"tarih"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"tarih ve saat"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"e-posta"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"mesajlaşma"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"rakam"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"telefon"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"metin"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"saat"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Ses girişi tuşu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Ana klavyede"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Simge klavyesinde"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 2e2fdfcff..2b92d03ec 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим букв і цифр"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим набору номера"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим набору символів"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Клавіатуру сховано"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Зараз клавіатура в такому режимі: <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"дата"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"дата й час"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"електронні адреси"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"повідомлення"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"цифри"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"номери телефонів"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"текст"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"час"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL-адреси"</string>
<string name="voice_input" msgid="3583258583521397548">"Ключ голосового вводу"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На основ. клавіатурі"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Символьна клавіатура"</string>
@@ -130,7 +141,7 @@
<string name="subtype_with_layout_en_US" msgid="1362581347576714579">"Англійська (США) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_with_layout_es_US" msgid="6261791057007890189">"іспанська (США) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_no_language" msgid="141420857808801746">"Мову не вибрано"</string>
- <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"Немає мови (QWERTY)"</string>
+ <string name="subtype_no_language_qwerty" msgid="2956121451616633133">"QWERTY-клавіатура"</string>
<string name="subtype_no_language_qwertz" msgid="1177848172397202890">"Без мови (QWERTZ)"</string>
<string name="subtype_no_language_azerty" msgid="8721460968141187394">"Без мови (AZERTY)"</string>
<string name="subtype_no_language_dvorak" msgid="3122976737669823935">"Без мови (Dvorak)"</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 6721980cf..2dcfb1941 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Chế độ chữ cái"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Chế độ điện thoại"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Chế độ biểu tượng điện thoại"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Bàn phím bị ẩn"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Hiển thị bàn phím <xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"ngày"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"ngày và giờ"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"email"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"nhắn tin"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"số"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"điện thoại"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"văn bản"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"giờ"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Khóa nhập giọng nói"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Trên bàn phím chính"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Trên bàn phím biểu tượng"</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index ebb6b9161..3e4777639 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"字母模式"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"电话模式"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"电话符号模式"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"键盘已隐藏"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"目前显示的是<xliff:g id="MODE">%s</xliff:g>键盘"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"日期"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"日期和时间"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"电子邮件"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"短信"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"数字"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"电话"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"文字"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"时间"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"网址"</string>
<string name="voice_input" msgid="3583258583521397548">"语音输入键"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"主键盘上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"符号键盘上"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 7d4ea72eb..ab6c66402 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"字母模式"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"撥號模式"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"撥號符號模式"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"鍵盤已隱藏"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"目前顯示的是<xliff:g id="MODE">%s</xliff:g>鍵盤"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"日期"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"日期和時間"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"電子郵件"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"簡訊"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"數字"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"電話"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"文字"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"時間"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"網址"</string>
<string name="voice_input" msgid="3583258583521397548">"語音輸入按鍵"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"主鍵盤上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"符號鍵盤上"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 29ed595b7..677588b4f 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -108,6 +108,17 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Imodi yezinhlamvu"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Imodi yefoni"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Imodi yezimpawu zefoni"</string>
+ <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Ikhibhodi ifihliwe"</string>
+ <string name="announce_keyboard_mode" msgid="4729081055438508321">"Kuboniswa ikhibhodi engu-<xliff:g id="MODE">%s</xliff:g>"</string>
+ <string name="keyboard_mode_date" msgid="3137520166817128102">"idethi"</string>
+ <string name="keyboard_mode_date_time" msgid="339593358488851072">"idethi nesikhathi"</string>
+ <string name="keyboard_mode_email" msgid="6216248078128294262">"i-imeyili"</string>
+ <string name="keyboard_mode_im" msgid="1137405089766557048">"imilayezo"</string>
+ <string name="keyboard_mode_number" msgid="7991623440699957069">"inombolo"</string>
+ <string name="keyboard_mode_phone" msgid="6851627527401433229">"ifoni"</string>
+ <string name="keyboard_mode_text" msgid="6479436687899701619">"umbhalo"</string>
+ <string name="keyboard_mode_time" msgid="4381856885582143277">"isikhathi"</string>
+ <string name="keyboard_mode_url" msgid="1519819835514911218">"I-URL"</string>
<string name="voice_input" msgid="3583258583521397548">"Inkinobho yokufaka izwi"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Kwikhibhodi eyisisekelo"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Ikhibhodi yezimpawu"</string>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 68fa8fd37..e89174b02 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -223,6 +223,29 @@
<!-- Spoken feedback after changing to the shifted phone dialer (symbols) keyboard. -->
<string name="spoken_description_mode_phone_shift">Phone symbols mode</string>
+ <!-- Spoken feedback when the keyboard is hidden. -->
+ <string name="announce_keyboard_hidden">Keyboard hidden</string>
+ <!-- Spoken feedback when the keyboard mode changes. -->
+ <string name="announce_keyboard_mode">Showing <xliff:g id="mode" example="email">%s</xliff:g> keyboard</string>
+ <!-- Description of the keyboard mode for entering dates. -->
+ <string name="keyboard_mode_date">date</string>
+ <!-- Description of the keyboard mode for entering dates and times. -->
+ <string name="keyboard_mode_date_time">date and time</string>
+ <!-- Description of the keyboard mode for entering email addresses. -->
+ <string name="keyboard_mode_email">email</string>
+ <!-- Description of the keyboard mode for entering text messages. -->
+ <string name="keyboard_mode_im">messaging</string>
+ <!-- Description of the keyboard mode for entering numbers. -->
+ <string name="keyboard_mode_number">number</string>
+ <!-- Description of the keyboard mode for entering phone numbers. -->
+ <string name="keyboard_mode_phone">phone</string>
+ <!-- Description of the keyboard mode for entering generic text. -->
+ <string name="keyboard_mode_text">text</string>
+ <!-- Description of the keyboard mode for entering times. -->
+ <string name="keyboard_mode_time">time</string>
+ <!-- Description of the keyboard mode for entering URLs. -->
+ <string name="keyboard_mode_url">URL</string>
+
<!-- Preferences item for enabling speech input -->
<string name="voice_input">Voice input key</string>
diff --git a/java/res/xml-sw600dp/keys_pcqwerty3_right2.xml b/java/res/xml-sw600dp/keys_pcqwerty3_right2.xml
index a0e5cbb92..0e3013afe 100644
--- a/java/res/xml-sw600dp/keys_pcqwerty3_right2.xml
+++ b/java/res/xml-sw600dp/keys_pcqwerty3_right2.xml
@@ -28,19 +28,9 @@
<Key
latin:keyLabel=";"
latin:moreKeys=":" />
- <!-- 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 -->
- <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
- moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x2018;,&#x2019;,&#x201A;,&#x201B;" -->
<Key
latin:keyLabel="\'"
- latin:moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x2018;,&#x2019;,&#x201A;,&#x201B;,&quot;" />
+ latin:moreKeys="!fixedColumnOrder!3,!text/double_quotes,!text/single_quotes" />
</case>
<default>
<Key
@@ -48,20 +38,10 @@
latin:keyHintLabel=":"
latin:moreKeys=":"
latin:keyStyle="hasShiftedLetterHintStyle" />
- <!-- 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 -->
- <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
- moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x2018;,&#x2019;,&#x201A;,&#x201B;" -->
<Key
latin:keyLabel="\'"
latin:keyHintLabel="&quot;"
- latin:moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x2018;,&#x2019;,&#x201A;,&#x201B;,&quot;"
+ latin:moreKeys="!fixedColumnOrder!4,!text/double_quotes,&quot;,!text/single_quotes"
latin:keyStyle="hasShiftedLetterHintStyle" />
</default>
</switch>
diff --git a/java/res/xml-v16/key_hindi1_shift.xml b/java/res/xml-v16/key_hindi1_shift.xml
new file mode 100644
index 000000000..19b964367
--- /dev/null
+++ b/java/res/xml-v16/key_hindi1_shift.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+0903: "ः" DEVANAGARI SIGN VISARGA -->
+ <Key
+ latin:keyLabel="&#x0903;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/key_hindi3_right.xml b/java/res/xml-v16/key_hindi3_right.xml
new file mode 100644
index 000000000..232810f98
--- /dev/null
+++ b/java/res/xml-v16/key_hindi3_right.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+093C: "़" DEVANAGARI SIGN NUKTA
+ U+097D: "ॽ" DEVANAGARI LETTER GLOTTAL STOP
+ U+0970: "॰" DEVANAGARI ABBREVIATION SIGN
+ U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
+ <Key
+ latin:keyLabel="&#x093C;"
+ latin:moreKeys="&#x097D;,&#x0970;,&#x093D;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/key_hindi3_shift_left.xml b/java/res/xml-v16/key_hindi3_shift_left.xml
new file mode 100644
index 000000000..1eb1768a1
--- /dev/null
+++ b/java/res/xml-v16/key_hindi3_shift_left.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+0901: "ँ" DEVANAGARI SIGN CANDRABINDU
+ U+0945: "ॅ" DEVANAGARI VOWEL SIGN CANDRA E -->
+ <Key
+ latin:keyLabel="&#x0901;"
+ latin:moreKeys="&#x0945;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/key_hindi3_shift_right.xml b/java/res/xml-v16/key_hindi3_shift_right.xml
new file mode 100644
index 000000000..0f26cb55c
--- /dev/null
+++ b/java/res/xml-v16/key_hindi3_shift_right.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+0943: "ृ" DEVANAGARI VOWEL SIGN VOCALIC R
+ U+0944: "ॄ" DEVANAGARI VOWEL SIGN VOCALIC RR -->
+ <Key
+ latin:keyLabel="&#x0943;"
+ latin:moreKeys="&#x0944;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/keys_hindi1_left5.xml b/java/res/xml-v16/keys_hindi1_left5.xml
new file mode 100644
index 000000000..e3ad299ff
--- /dev/null
+++ b/java/res/xml-v16/keys_hindi1_left5.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+094C: "ौ" DEVANAGARI VOWEL SIGN AU
+ U+094C/U+0902: "ौं" DEVANAGARI VOWEL SIGN AU/DEVANAGARI SIGN ANUSVARA
+ U+0967: "१" DEVANAGARI DIGIT ONE -->
+ <Key
+ latin:keyLabel="&#x094C;"
+ latin:moreKeys="&#x094C;&#x0902;,%"
+ latin:keyHintLabel="1"
+ latin:additionalMoreKeys="&#x0967;,1"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0948: "ै" DEVANAGARI VOWEL SIGN AI
+ U+0948/U+0902: "ैं" DEVANAGARI VOWEL SIGN AI/DEVANAGARI SIGN ANUSVARA
+ U+0968: "२" DEVANAGARI DIGIT TWO -->
+ <Key
+ latin:keyLabel="&#x0948;"
+ latin:moreKeys="&#x0948;&#x0902;,%"
+ latin:keyHintLabel="2"
+ latin:additionalMoreKeys="&#x0968;,2"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+093E: "ा" DEVANAGARI VOWEL SIGN AA
+ U+093E/U+0902: "ां" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN ANUSVARA
+ U+093E/U+0901: "ाँ" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN CANDRABINDU
+ U+0969: "३" DEVANAGARI DIGIT THREE -->
+ <Key
+ latin:keyLabel="&#x093E;"
+ latin:moreKeys="&#x093E;&#x0902;,&#x093E;&#x0901;,%"
+ latin:keyHintLabel="3"
+ latin:additionalMoreKeys="&#x0969;,3"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0940: "ी" DEVANAGARI VOWEL SIGN II
+ U+0940/U+0902: "ीं" DEVANAGARI VOWEL SIGN II/DEVANAGARI SIGN ANUSVARA
+ U+096A: "४" DEVANAGARI DIGIT FOUR -->
+ <Key
+ latin:keyLabel="&#x0940;"
+ latin:moreKeys="&#x0940;&#x0902;,%"
+ latin:keyHintLabel="4"
+ latin:additionalMoreKeys="&#x096A;,4"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0942: "ू" DEVANAGARI VOWEL SIGN UU
+ U+0942/U+0902: "ूं" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN ANUSVARA
+ U+0942/U+0901: "ूँ" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN CANDRABINDU
+ U+096B: "५" DEVANAGARI DIGIT FIVE -->
+ <Key
+ latin:keyLabel="&#x0942;"
+ latin:moreKeys="&#x0942;&#x0902;,&#x0942;&#x0901;,%"
+ latin:keyHintLabel="5"
+ latin:additionalMoreKeys="&#x096B;,5"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/keys_hindi2_left5.xml b/java/res/xml-v16/keys_hindi2_left5.xml
new file mode 100644
index 000000000..05c4f57e9
--- /dev/null
+++ b/java/res/xml-v16/keys_hindi2_left5.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+094B: "ो" DEVANAGARI VOWEL SIGN O
+ U+094B/U+0902: "қं" DEVANAGARI VOWEL SIGN O/DEVANAGARI SIGN ANUSVARA
+ U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O
+ U+094A: "ॊ" DEVANAGARI VOWEL SIGN SHORT O -->
+ <Key
+ latin:keyLabel="&#x094B;"
+ latin:moreKeys="&#x094B;&#x0902;,&#x0949;,&#x094A;"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0947: "े" DEVANAGARI VOWEL SIGN E
+ U+0947/U+0902: "ें" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x0947;"
+ latin:moreKeys="&#x0947;&#x0902;"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+094D: "्" DEVANAGARI SIGN VIRAMA -->
+ <Key
+ latin:keyLabel="&#x094D;"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+093F: "ि" DEVANAGARI VOWEL SIGN I
+ U+093F/U+0902: "िं" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x093F;"
+ latin:moreKeys="&#x093F;&#x0902;"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0941: "ु" DEVANAGARI VOWEL SIGN U
+ U+0941/U+0902: "ुं" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN ANUSVARA
+ U+0941/U+0901: "ुँ" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU -->
+ <Key
+ latin:keyLabel="&#x0941;"
+ latin:moreKeys="&#x0941;&#x0902;,&#x0941;&#x0901;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml-v16/keys_hindi3_left2.xml b/java/res/xml-v16/keys_hindi3_left2.xml
new file mode 100644
index 000000000..9474c1763
--- /dev/null
+++ b/java/res/xml-v16/keys_hindi3_left2.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O -->
+ <Key
+ latin:keyLabel="&#x0949;"
+ latin:keyLabelFlags="fontNormal" />
+ <!-- U+0902: "ं" DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x0902;"
+ latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml/key_hindi1_shift.xml b/java/res/xml/key_hindi1_shift.xml
new file mode 100644
index 000000000..0db5ae9af
--- /dev/null
+++ b/java/res/xml/key_hindi1_shift.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0903: "ः" DEVANAGARI SIGN VISARGA -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0903;"
+ latin:code="0x0903"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/key_hindi3_right.xml b/java/res/xml/key_hindi3_right.xml
new file mode 100644
index 000000000..5a97355f6
--- /dev/null
+++ b/java/res/xml/key_hindi3_right.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+093C: "़" DEVANAGARI SIGN NUKTA
+ U+097D: "ॽ" DEVANAGARI LETTER GLOTTAL STOP
+ U+0970: "॰" DEVANAGARI ABBREVIATION SIGN
+ U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x093C;"
+ latin:code="0x093C"
+ latin:moreKeys="&#x25CC;&#x097D;|&#x097D;,&#x25CC;&#x0970;|&#x0970;,&#x25CC;&#x093D;|&#x093D;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/key_hindi3_shift_left.xml b/java/res/xml/key_hindi3_shift_left.xml
new file mode 100644
index 000000000..c5e2f1386
--- /dev/null
+++ b/java/res/xml/key_hindi3_shift_left.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0901: "ँ" DEVANAGARI SIGN CANDRABINDU
+ U+0945: "ॅ" DEVANAGARI VOWEL SIGN CANDRA E -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0901;"
+ latin:code="0x0901"
+ latin:moreKeys="&#x25CC;&#x0945;|&#x0945;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/key_hindi3_shift_right.xml b/java/res/xml/key_hindi3_shift_right.xml
new file mode 100644
index 000000000..0da116ab8
--- /dev/null
+++ b/java/res/xml/key_hindi3_shift_right.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0943: "ृ" DEVANAGARI VOWEL SIGN VOCALIC R
+ U+0944: "ॄ" DEVANAGARI VOWEL SIGN VOCALIC RR -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0943;"
+ latin:code="0x0943"
+ latin:moreKeys="&#x25CC;&#x0944;|&#x0944;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/keys_hindi1_left5.xml b/java/res/xml/keys_hindi1_left5.xml
new file mode 100644
index 000000000..8757afeaf
--- /dev/null
+++ b/java/res/xml/keys_hindi1_left5.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+094C: "ौ" DEVANAGARI VOWEL SIGN AU
+ U+094C/U+0902: "ौं" DEVANAGARI VOWEL SIGN AU/DEVANAGARI SIGN ANUSVARA
+ U+0967: "१" DEVANAGARI DIGIT ONE -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x094C;"
+ latin:code="0x094C"
+ latin:moreKeys="&#x25CC;&#x094C;&#x0902;|&#x094C;&#x0902;,%"
+ latin:keyHintLabel="1"
+ latin:additionalMoreKeys="&#x0967;,1"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0948: "ै" DEVANAGARI VOWEL SIGN AI
+ U+0948/U+0902: "ैं" DEVANAGARI VOWEL SIGN AI/DEVANAGARI SIGN ANUSVARA
+ U+0968: "२" DEVANAGARI DIGIT TWO -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0948;"
+ latin:code="0x0948"
+ latin:moreKeys="&#x25CC;&#x0948;&#x0902;|&#x0948;&#x0902;,%"
+ latin:keyHintLabel="2"
+ latin:additionalMoreKeys="&#x0968;,2"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+093E: "ा" DEVANAGARI VOWEL SIGN AA
+ U+093E/U+0902: "ां" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN ANUSVARA
+ U+093E/U+0901: "ाँ" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN CANDRABINDU
+ U+0969: "३" DEVANAGARI DIGIT THREE -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x093E;"
+ latin:code="0x093E"
+ latin:moreKeys="&#x25CC;&#x093E;&#x0902;|&#x093E;&#x0902;,&#x25CC;&#x093E;&#x0901;|&#x093E;&#x0901;,%"
+ latin:keyHintLabel="3"
+ latin:additionalMoreKeys="&#x0969;,3"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0940: "ी" DEVANAGARI VOWEL SIGN II
+ U+0940/U+0902: "ीं" DEVANAGARI VOWEL SIGN II/DEVANAGARI SIGN ANUSVARA
+ U+096A: "४" DEVANAGARI DIGIT FOUR -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0940;"
+ latin:code="0x0940"
+ latin:moreKeys="&#x25CC;&#x0940;&#x0902;|&#x0940;&#x0902;,%"
+ latin:keyHintLabel="4"
+ latin:additionalMoreKeys="&#x096A;,4"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0942: "ू" DEVANAGARI VOWEL SIGN UU
+ U+0942/U+0902: "ूं" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN ANUSVARA
+ U+0942/U+0901: "ूँ" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN CANDRABINDU
+ U+096B: "५" DEVANAGARI DIGIT FIVE -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0942;"
+ latin:code="0x0942"
+ latin:moreKeys="&#x25CC;&#x0942;&#x0902;|&#x0942;&#x0902;,&#x25CC;&#x0942;&#x0901;|&#x0942;&#x0901;,%"
+ latin:keyHintLabel="5"
+ latin:additionalMoreKeys="&#x096B;,5"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/keys_hindi2_left5.xml b/java/res/xml/keys_hindi2_left5.xml
new file mode 100644
index 000000000..4c3a5e051
--- /dev/null
+++ b/java/res/xml/keys_hindi2_left5.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+094B: "ो" DEVANAGARI VOWEL SIGN O
+ U+094B/U+0902: "қं" DEVANAGARI VOWEL SIGN O/DEVANAGARI SIGN ANUSVARA
+ U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O
+ U+094A: "ॊ" DEVANAGARI VOWEL SIGN SHORT O -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x094B;"
+ latin:code="0x094B"
+ latin:moreKeys="&#x25CC;&#x094B;&#x0902;|&#x094B;&#x0902;,&#x25CC;&#x0949;,&#x094A;|&#x0949;,&#x094A;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0947: "े" DEVANAGARI VOWEL SIGN E
+ U+0947/U+0902: "ें" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0947;"
+ latin:code="0x0947"
+ latin:moreKeys="&#x25CC;&#x0947;&#x0902;|&#x0947;&#x0902;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+094D: "्" DEVANAGARI SIGN VIRAMA -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x094D;"
+ latin:code="0x094D"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+093F: "ि" DEVANAGARI VOWEL SIGN I
+ U+093F/U+0902: "िं" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x093F;&#x25CC;"
+ latin:code="0x093F"
+ latin:moreKeys="&#x093F;&#x25CC;&#x0902;|&#x093F;&#x0902;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0941: "ु" DEVANAGARI VOWEL SIGN U
+ U+0941/U+0902: "ुं" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN ANUSVARA
+ U+0941/U+0901: "ुँ" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0941;"
+ latin:code="0x0941"
+ latin:moreKeys="&#x25CC;&#x0941;&#x0902;|&#x0941;&#x0902;,&#x25CC;&#x0941;&#x0901;|&#x0941;&#x0901;"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/keys_hindi3_left2.xml b/java/res/xml/keys_hindi3_left2.xml
new file mode 100644
index 000000000..4f1ad16ef
--- /dev/null
+++ b/java/res/xml/keys_hindi3_left2.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<!-- The code point U+25CC for key label is needed because the font rendering system prior to
+ API version 16 can't automatically render dotted circle for incomplete combining letter
+ of Hindi. The files named res/xml/{key,keys}_hindi*.xml have this U+25CC hack, although the
+ counterpart files named res/xml-v16/{key,keys}_hindi*.xml don't have this hack. -->
+<merge
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0949;"
+ latin:code="0x0949"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+ <!-- U+25CC: "◌" DOTTED CIRCLE
+ U+0902: "ं" DEVANAGARI SIGN ANUSVARA -->
+ <Key
+ latin:keyLabel="&#x25CC;&#x0902;"
+ latin:code="0x0902"
+ latin:keyLabelFlags="fontNormal|followKeyLetterRatio" />
+</merge>
diff --git a/java/res/xml/keys_pcqwerty3_right2.xml b/java/res/xml/keys_pcqwerty3_right2.xml
index fd9d3b8b0..aa150afb3 100644
--- a/java/res/xml/keys_pcqwerty3_right2.xml
+++ b/java/res/xml/keys_pcqwerty3_right2.xml
@@ -30,25 +30,15 @@
latin:moreKeys=":" />
<Key
latin:keyLabel="\'"
- latin:moreKeys="&quot;" />
+ latin:moreKeys="!fixedColumnOrder!4,!text/double_quotes,&quot;,!text/single_quotes" />
</case>
<!-- keyboardLayoutSetElement="alphabet*Shifted|symbols*" -->
<default>
<Key
latin:keyLabel=":" />
- <!-- 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 -->
- <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
- moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x2018;,&#x2019;,&#x201A;,&#x201B;" -->
<Key
latin:keyLabel="&quot;"
- latin:moreKeys="!fixedColumnOrder!4,&#x201C;,&#x201D;,&#x2018;,&#x2019;,&#x201A;,&#x201B;" />
+ latin:moreKeys="!fixedColumnOrder!3,!text/double_quotes,!text/single_quotes" />
</default>
</switch>
</merge>
diff --git a/java/res/xml/row_symbols_shift4.xml b/java/res/xml/row_symbols_shift4.xml
index 1bfb5ecd1..99a685c45 100644
--- a/java/res/xml/row_symbols_shift4.xml
+++ b/java/res/xml/row_symbols_shift4.xml
@@ -27,13 +27,11 @@
<Key
latin:keyStyle="toAlphaKeyStyle"
latin:keyWidth="15%p" />
- <!-- 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. -->
- <!-- latin:keyLabelFlags="hasPopupHint" -->
- <!-- latin:moreKeys="&#x201F;" -->
- <!-- U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
+ <!-- U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ U+201E: "„" DOUBLE LOW-9 QUOTATION MARK -->
<Key
latin:keyLabel="&#x201E;"
+ latin:moreKeys="&#x201A;"
latin:backgroundType="functional" />
<include
latin:keyXPos="25%p"
diff --git a/java/res/xml/rowkeys_hindi1.xml b/java/res/xml/rowkeys_hindi1.xml
index 11208045c..a761a6c69 100644
--- a/java/res/xml/rowkeys_hindi1.xml
+++ b/java/res/xml/rowkeys_hindi1.xml
@@ -61,10 +61,11 @@
<Key
latin:keyLabel="&#x092D;"
latin:keyLabelFlags="fontNormal" />
- <!-- U+0903: "ः" DEVANAGARI SIGN VISARGA -->
- <Key
- latin:keyLabel="&#x0903;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/key_hindi1_shift" />
<!-- U+0918: "घ" DEVANAGARI LETTER GHA -->
<Key
latin:keyLabel="&#x0918;"
@@ -86,53 +87,11 @@
latin:keyLabelFlags="fontNormal" />
</case>
<default>
- <!-- U+094C: "ौ" DEVANAGARI VOWEL SIGN AU
- U+094C/U+0902: "ौं" DEVANAGARI VOWEL SIGN AU/DEVANAGARI SIGN ANUSVARA
- U+0967: "१" DEVANAGARI DIGIT ONE -->
- <Key
- latin:keyLabel="&#x094C;"
- latin:moreKeys="&#x094C;&#x0902;,%"
- latin:keyHintLabel="1"
- latin:additionalMoreKeys="&#x0967;,1"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0948: "ै" DEVANAGARI VOWEL SIGN AI
- U+0948/U+0902: "ैं" DEVANAGARI VOWEL SIGN AI/DEVANAGARI SIGN ANUSVARA
- U+0968: "२" DEVANAGARI DIGIT TWO -->
- <Key
- latin:keyLabel="&#x0948;"
- latin:moreKeys="&#x0948;&#x0902;,%"
- latin:keyHintLabel="2"
- latin:additionalMoreKeys="&#x0968;,2"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+093E: "ा" DEVANAGARI VOWEL SIGN AA
- U+093E/U+0902: "ां" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN ANUSVARA
- U+093E/U+0901: "ाँ" DEVANAGARI VOWEL SIGN AA/DEVANAGARI SIGN CANDRABINDU
- U+0969: "३" DEVANAGARI DIGIT THREE -->
- <Key
- latin:keyLabel="&#x093E;"
- latin:moreKeys="&#x093E;&#x0902;,&#x093E;&#x0901;,%"
- latin:keyHintLabel="3"
- latin:additionalMoreKeys="&#x0969;,3"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0940: "ी" DEVANAGARI VOWEL SIGN II
- U+0940/U+0902: "ीं" DEVANAGARI VOWEL SIGN II/DEVANAGARI SIGN ANUSVARA
- U+096A: "४" DEVANAGARI DIGIT FOUR -->
- <Key
- latin:keyLabel="&#x0940;"
- latin:moreKeys="&#x0940;&#x0902;,%"
- latin:keyHintLabel="4"
- latin:additionalMoreKeys="&#x096A;,4"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0942: "ू" DEVANAGARI VOWEL SIGN UU
- U+0942/U+0902: "ूं" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN ANUSVARA
- U+0942/U+0901: "ूँ" DEVANAGARI VOWEL SIGN UU/DEVANAGARI SIGN CANDRABINDU
- U+096B: "५" DEVANAGARI DIGIT FIVE -->
- <Key
- latin:keyLabel="&#x0942;"
- latin:moreKeys="&#x0942;&#x0902;,&#x0942;&#x0901;,%"
- latin:keyHintLabel="5"
- latin:additionalMoreKeys="&#x096B;,5"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/keys_hindi1_left5" />
<!-- U+092C: "ब" DEVANAGARI LETTER BA
U+092C/U+0952: "ब॒" DEVANAGARI LETTER BA/DEVANAGARI STRESS SIGN ANUDATTA -->
<Key
diff --git a/java/res/xml/rowkeys_hindi2.xml b/java/res/xml/rowkeys_hindi2.xml
index e7c67dbe7..9545b840f 100644
--- a/java/res/xml/rowkeys_hindi2.xml
+++ b/java/res/xml/rowkeys_hindi2.xml
@@ -96,37 +96,11 @@
latin:keyLabelFlags="fontNormal" />
</case>
<default>
- <!-- U+094B: "ो" DEVANAGARI VOWEL SIGN O
- U+094B/U+0902: "қं" DEVANAGARI VOWEL SIGN O/DEVANAGARI SIGN ANUSVARA
- U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O
- U+094A: "ॊ" DEVANAGARI VOWEL SIGN SHORT O -->
- <Key
- latin:keyLabel="&#x094B;"
- latin:moreKeys="&#x094B;&#x0902;,&#x0949;,&#x094A;"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0947: "े" DEVANAGARI VOWEL SIGN E
- U+0947/U+0902: "ें" DEVANAGARI VOWEL SIGN E/DEVANAGARI SIGN ANUSVARA -->
- <Key
- latin:keyLabel="&#x0947;"
- latin:moreKeys="&#x0947;&#x0902;"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+094D: "्" DEVANAGARI SIGN VIRAMA -->
- <Key
- latin:keyLabel="&#x094D;"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+093F: "ि" DEVANAGARI VOWEL SIGN I
- U+093F/U+0902: "िं" DEVANAGARI VOWEL SIGN I/DEVANAGARI SIGN ANUSVARA -->
- <Key
- latin:keyLabel="&#x093F;"
- latin:moreKeys="&#x093F;&#x0902;"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0941: "ु" DEVANAGARI VOWEL SIGN U
- U+0941/U+0902: "ुं" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN ANUSVARA
- U+0941/U+0901: "ुँ" DEVANAGARI VOWEL SIGN U/DEVANAGARI SIGN CANDRABINDU -->
- <Key
- latin:keyLabel="&#x0941;"
- latin:moreKeys="&#x0941;&#x0902;,&#x0941;&#x0901;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/keys_hindi2_left5" />
<!-- U+092A: "प" DEVANAGARI LETTER PA -->
<Key
latin:keyLabel="&#x092A;"
diff --git a/java/res/xml/rowkeys_hindi3.xml b/java/res/xml/rowkeys_hindi3.xml
index ebbff3e33..3014907ed 100644
--- a/java/res/xml/rowkeys_hindi3.xml
+++ b/java/res/xml/rowkeys_hindi3.xml
@@ -29,12 +29,11 @@
<Key
latin:keyLabel="&#x0911;"
latin:keyLabelFlags="fontNormal" />
- <!-- U+0901: "ँ" DEVANAGARI SIGN CANDRABINDU
- U+0945: "ॅ" DEVANAGARI VOWEL SIGN CANDRA E-->
- <Key
- latin:keyLabel="&#x0901;"
- latin:moreKeys="&#x0945;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/key_hindi3_shift_left" />
<!-- U+0923: "ण" DEVANAGARI LETTER NNA -->
<Key
latin:keyLabel="&#x0923;"
@@ -56,26 +55,22 @@
<Key
latin:keyLabel="&#x0937;"
latin:keyLabelFlags="fontNormal" />
- <!-- U+0943: "ृ" DEVANAGARI VOWEL SIGN VOCALIC R
- U+0944: "ॄ" DEVANAGARI VOWEL SIGN VOCALIC RR -->
- <Key
- latin:keyLabel="&#x0943;"
- latin:moreKeys="&#x0944;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/key_hindi3_shift_right" />
<!-- U+091E: "ञ" DEVANAGARI LETTER NYA -->
<Key
latin:keyLabel="&#x091E;"
latin:keyLabelFlags="fontNormal" />
</case>
<default>
- <!-- U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O -->
- <Key
- latin:keyLabel="&#x0949;"
- latin:keyLabelFlags="fontNormal" />
- <!-- U+0902: "ं" DEVANAGARI SIGN ANUSVARA -->
- <Key
- latin:keyLabel="&#x0902;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/keys_hindi3_left2" />
<!-- U+092E: "म" DEVANAGARI LETTER MA
U+0950: "ॐ" DEVANAGARI OM -->
<Key
@@ -111,14 +106,11 @@
latin:keyLabel="&#x092F;"
latin:moreKeys="&#x095F;"
latin:keyLabelFlags="fontNormal" />
- <!-- U+093C: "़" DEVANAGARI SIGN NUKTA
- U+097D: "ॽ" DEVANAGARI LETTER GLOTTAL STOP
- U+0970: "॰" DEVANAGARI ABBREVIATION SIGN
- U+093D: "ऽ" DEVANAGARI SIGN AVAGRAHA -->
- <Key
- latin:keyLabel="&#x093C;"
- latin:moreKeys="&#x097D;,&#x0970;,&#x093D;"
- latin:keyLabelFlags="fontNormal" />
+ <!-- Because the font rendering system prior to API version 16 can't automatically
+ render dotted circle for incomplete combining letter of Hindi, different set of
+ Key definitions are needed based on the API version. -->
+ <include
+ latin:keyboardLayout="@xml/key_hindi3_right" />
</default>
</switch>
</merge>
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index bf1cea9c3..ee52de1d1 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -80,16 +80,24 @@ public final class AccessibilityUtils {
}
/**
+ * Returns {@code true} if accessibility is enabled. Currently, this means
+ * that the kill switch is off and system accessibility is turned on.
+ *
+ * @return {@code true} if accessibility is enabled.
+ */
+ public boolean isAccessibilityEnabled() {
+ return ENABLE_ACCESSIBILITY && mAccessibilityManager.isEnabled();
+ }
+
+ /**
* Returns {@code true} if touch exploration is enabled. Currently, this
* means that the kill switch is off, the device supports touch exploration,
- * and a spoken feedback service is turned on.
+ * and system accessibility is turned on.
*
* @return {@code true} if touch exploration is enabled.
*/
public boolean isTouchExplorationEnabled() {
- return ENABLE_ACCESSIBILITY
- && mAccessibilityManager.isEnabled()
- && mAccessibilityManager.isTouchExplorationEnabled();
+ return isAccessibilityEnabled() && mAccessibilityManager.isTouchExplorationEnabled();
}
/**
@@ -113,6 +121,7 @@ public final class AccessibilityUtils {
*
* @return {@code true} if the device should obscure password characters.
*/
+ @SuppressWarnings("deprecation")
public boolean shouldObscureInput(final EditorInfo editorInfo) {
if (editorInfo == null) return false;
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index d05fd9eb5..e6b44120f 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -22,8 +22,11 @@ import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.util.SparseIntArray;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
@@ -35,6 +38,21 @@ import com.android.inputmethod.latin.R;
public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
private static final AccessibleKeyboardViewProxy sInstance = new AccessibleKeyboardViewProxy();
+ /** Map of keyboard modes to resource IDs. */
+ private static final SparseIntArray KEYBOARD_MODE_RES_IDS = new SparseIntArray();
+
+ static {
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_DATE, R.string.keyboard_mode_date);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_DATETIME, R.string.keyboard_mode_date_time);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_EMAIL, R.string.keyboard_mode_email);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_IM, R.string.keyboard_mode_im);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_NUMBER, R.string.keyboard_mode_number);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_PHONE, R.string.keyboard_mode_phone);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_TEXT, R.string.keyboard_mode_text);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_TIME, R.string.keyboard_mode_time);
+ KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_URL, R.string.keyboard_mode_url);
+ }
+
private InputMethodService mInputMethod;
private MainKeyboardView mView;
private AccessibilityEntityProvider mAccessibilityNodeProvider;
@@ -85,11 +103,75 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
mAccessibilityNodeProvider.setView(view);
}
+ /**
+ * Called when the keyboard layout changes.
+ * <p>
+ * <b>Note:</b> This method will be called even if accessibility is not
+ * enabled.
+ */
public void setKeyboard() {
- if (mAccessibilityNodeProvider == null) {
+ if (mAccessibilityNodeProvider != null) {
+ mAccessibilityNodeProvider.setKeyboard();
+ }
+
+ // Since this method is called even when accessibility is off, make sure
+ // to check the state before announcing anything.
+ if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
+ announceKeyboardMode();
+ }
+ }
+
+ /**
+ * Called when the keyboard is hidden and accessibility is enabled.
+ */
+ public void onHideWindow() {
+ announceKeyboardHidden();
+ }
+
+ /**
+ * Announces which type of keyboard is being displayed. If the keyboard type
+ * is unknown, no announcement is made.
+ */
+ private void announceKeyboardMode() {
+ final Keyboard keyboard = mView.getKeyboard();
+ final int resId = KEYBOARD_MODE_RES_IDS.get(keyboard.mId.mMode);
+ if (resId == 0) {
return;
}
- mAccessibilityNodeProvider.setKeyboard();
+
+ final Context context = mView.getContext();
+ final String keyboardMode = context.getString(resId);
+ final String text = context.getString(R.string.announce_keyboard_mode, keyboardMode);
+
+ sendWindowStateChanged(text);
+ }
+
+ /**
+ * Announces that the keyboard has been hidden.
+ */
+ private void announceKeyboardHidden() {
+ final Context context = mView.getContext();
+ final String text = context.getString(R.string.announce_keyboard_hidden);
+
+ sendWindowStateChanged(text);
+ }
+
+ /**
+ * Sends a window state change event with the specified text.
+ *
+ * @param text
+ */
+ private void sendWindowStateChanged(final String text) {
+ final AccessibilityEvent stateChange = AccessibilityEvent.obtain(
+ AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ mView.onInitializeAccessibilityEvent(stateChange);
+ stateChange.getText().add(text);
+ stateChange.setContentDescription(null);
+
+ final ViewParent parent = mView.getParent();
+ if (parent != null) {
+ parent.requestSendAccessibilityEvent(mView, stateChange);
+ }
}
/**
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 1e5af5154..d160038ad 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -519,11 +519,11 @@ public class Key implements Comparable<Key> {
// TODO: Handle "bold" here too?
if ((mLabelFlags & LABEL_FLAGS_FONT_NORMAL) != 0) {
return Typeface.DEFAULT;
- } else if ((mLabelFlags & LABEL_FLAGS_FONT_MONO_SPACE) != 0) {
+ }
+ if ((mLabelFlags & LABEL_FLAGS_FONT_MONO_SPACE) != 0) {
return Typeface.MONOSPACE;
- } else {
- return params.mTypeface;
}
+ return params.mTypeface;
}
public final int selectTextSize(final KeyDrawParams params) {
@@ -550,28 +550,51 @@ public class Key implements Comparable<Key> {
public final int selectHintTextSize(final KeyDrawParams params) {
if (hasHintLabel()) {
return params.mHintLabelSize;
- } else if (hasShiftedLetterHint()) {
+ }
+ if (hasShiftedLetterHint()) {
return params.mShiftedLetterHintSize;
- } else {
- return params.mHintLetterSize;
}
+ return params.mHintLetterSize;
}
public final int selectHintTextColor(final KeyDrawParams params) {
if (hasHintLabel()) {
return params.mHintLabelColor;
- } else if (hasShiftedLetterHint()) {
+ }
+ if (hasShiftedLetterHint()) {
return isShiftedLetterActivated() ? params.mShiftedLetterHintActivatedColor
: params.mShiftedLetterHintInactivatedColor;
- } else {
- return params.mHintLetterColor;
}
+ return params.mHintLetterColor;
}
public final int selectMoreKeyTextSize(final KeyDrawParams params) {
return hasLabelsInMoreKeys() ? params.mLabelSize : params.mLetterSize;
}
+ public final String getPreviewLabel() {
+ return isShiftedLetterActivated() ? mHintLabel : mLabel;
+ }
+
+ private boolean previewHasLetterSize() {
+ return (mLabelFlags & LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO) != 0
+ || StringUtils.codePointCount(getPreviewLabel()) == 1;
+ }
+
+ public final int selectPreviewTextSize(final KeyDrawParams params) {
+ if (previewHasLetterSize()) {
+ return params.mPreviewTextSize;
+ }
+ return params.mLetterSize;
+ }
+
+ public Typeface selectPreviewTypeface(final KeyDrawParams params) {
+ if (previewHasLetterSize()) {
+ return selectTypeface(params);
+ }
+ return Typeface.DEFAULT_BOLD;
+ }
+
public final boolean isAlignLeft() {
return (mLabelFlags & LABEL_FLAGS_ALIGN_LEFT) != 0;
}
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index bc27f8553..d37b69b00 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -811,18 +811,14 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
background.setState(KEY_PREVIEW_BACKGROUND_DEFAULT_STATE);
background.setAlpha(PREVIEW_ALPHA);
}
- final String label = key.isShiftedLetterActivated() ? key.mHintLabel : key.mLabel;
+ final String label = key.getPreviewLabel();
// What we show as preview should match what we show on a key top in onDraw().
if (label != null) {
// TODO Should take care of temporaryShiftLabel here.
previewText.setCompoundDrawables(null, null, null, null);
- if (StringUtils.codePointCount(label) > 1) {
- previewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, drawParams.mLetterSize);
- previewText.setTypeface(Typeface.DEFAULT_BOLD);
- } else {
- previewText.setTextSize(TypedValue.COMPLEX_UNIT_PX, drawParams.mPreviewTextSize);
- previewText.setTypeface(key.selectTypeface(drawParams));
- }
+ previewText.setTextSize(TypedValue.COMPLEX_UNIT_PX,
+ key.selectPreviewTextSize(drawParams));
+ previewText.setTypeface(key.selectPreviewTypeface(drawParams));
previewText.setText(label);
} else {
previewText.setCompoundDrawables(null, null, null,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 493093e95..d0b382e35 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -145,94 +145,110 @@ public final class KeyboardTextsSet {
/* 40 */ "more_keys_for_cyrillic_ie",
/* 41 */ "more_keys_for_cyrillic_i",
/* 42 */ "label_to_alpha_key",
- /* 43 */ "more_keys_for_single_quote",
- /* 44 */ "more_keys_for_double_quote",
- /* 45 */ "more_keys_for_tablet_double_quote",
- /* 46 */ "more_keys_for_currency_dollar",
- /* 47 */ "keylabel_for_currency_generic",
- /* 48 */ "more_keys_for_currency_generic",
- /* 49 */ "more_keys_for_punctuation",
- /* 50 */ "more_keys_for_star",
- /* 51 */ "more_keys_for_bullet",
- /* 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 */ "more_keys_for_arabic_diacritics",
- /* 58 */ "keyhintlabel_for_arabic_diacritics",
- /* 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 */ "label_to_symbol_key",
- /* 70 */ "label_to_symbol_with_microphone_key",
- /* 71 */ "additional_more_keys_for_symbols_1",
- /* 72 */ "additional_more_keys_for_symbols_2",
- /* 73 */ "additional_more_keys_for_symbols_3",
- /* 74 */ "additional_more_keys_for_symbols_4",
- /* 75 */ "additional_more_keys_for_symbols_5",
- /* 76 */ "additional_more_keys_for_symbols_6",
- /* 77 */ "additional_more_keys_for_symbols_7",
- /* 78 */ "additional_more_keys_for_symbols_8",
- /* 79 */ "additional_more_keys_for_symbols_9",
- /* 80 */ "additional_more_keys_for_symbols_0",
- /* 81 */ "more_keys_for_symbols_1",
- /* 82 */ "more_keys_for_symbols_2",
- /* 83 */ "more_keys_for_symbols_3",
- /* 84 */ "more_keys_for_symbols_4",
- /* 85 */ "more_keys_for_symbols_5",
- /* 86 */ "more_keys_for_symbols_6",
- /* 87 */ "more_keys_for_symbols_7",
- /* 88 */ "more_keys_for_symbols_8",
- /* 89 */ "more_keys_for_symbols_9",
- /* 90 */ "more_keys_for_symbols_0",
- /* 91 */ "keylabel_for_comma",
- /* 92 */ "more_keys_for_comma",
- /* 93 */ "keylabel_for_symbols_question",
- /* 94 */ "keylabel_for_symbols_semicolon",
- /* 95 */ "keylabel_for_symbols_percent",
- /* 96 */ "more_keys_for_symbols_exclamation",
- /* 97 */ "more_keys_for_symbols_question",
- /* 98 */ "more_keys_for_symbols_semicolon",
- /* 99 */ "more_keys_for_symbols_percent",
- /* 100 */ "keylabel_for_tablet_comma",
- /* 101 */ "keyhintlabel_for_tablet_comma",
- /* 102 */ "more_keys_for_tablet_comma",
- /* 103 */ "keyhintlabel_for_tablet_period",
- /* 104 */ "more_keys_for_tablet_period",
- /* 105 */ "keylabel_for_apostrophe",
- /* 106 */ "keyhintlabel_for_apostrophe",
- /* 107 */ "more_keys_for_apostrophe",
- /* 108 */ "more_keys_for_q",
- /* 109 */ "more_keys_for_x",
- /* 110 */ "keylabel_for_q",
- /* 111 */ "keylabel_for_w",
- /* 112 */ "keylabel_for_y",
- /* 113 */ "keylabel_for_x",
- /* 114 */ "keylabel_for_spanish_row2_10",
- /* 115 */ "more_keys_for_am_pm",
- /* 116 */ "settings_as_more_key",
- /* 117 */ "shortcut_as_more_key",
- /* 118 */ "action_next_as_more_key",
- /* 119 */ "action_previous_as_more_key",
- /* 120 */ "label_to_more_symbol_key",
- /* 121 */ "label_to_more_symbol_for_tablet_key",
- /* 122 */ "label_tab_key",
- /* 123 */ "label_to_phone_numeric_key",
- /* 124 */ "label_to_phone_symbols_key",
- /* 125 */ "label_time_am",
- /* 126 */ "label_time_pm",
- /* 127 */ "label_to_symbol_key_pcqwerty",
- /* 128 */ "keylabel_for_popular_domain",
- /* 129 */ "more_keys_for_popular_domain",
- /* 130 */ "more_keys_for_smiley",
+ /* 43 */ "single_quotes",
+ /* 44 */ "double_quotes",
+ /* 45 */ "single_angle_quotes",
+ /* 46 */ "double_angle_quotes",
+ /* 47 */ "more_keys_for_currency_dollar",
+ /* 48 */ "keylabel_for_currency_generic",
+ /* 49 */ "more_keys_for_currency_generic",
+ /* 50 */ "more_keys_for_punctuation",
+ /* 51 */ "more_keys_for_star",
+ /* 52 */ "more_keys_for_bullet",
+ /* 53 */ "more_keys_for_plus",
+ /* 54 */ "more_keys_for_left_parenthesis",
+ /* 55 */ "more_keys_for_right_parenthesis",
+ /* 56 */ "more_keys_for_less_than",
+ /* 57 */ "more_keys_for_greater_than",
+ /* 58 */ "more_keys_for_arabic_diacritics",
+ /* 59 */ "keyhintlabel_for_arabic_diacritics",
+ /* 60 */ "keylabel_for_symbols_1",
+ /* 61 */ "keylabel_for_symbols_2",
+ /* 62 */ "keylabel_for_symbols_3",
+ /* 63 */ "keylabel_for_symbols_4",
+ /* 64 */ "keylabel_for_symbols_5",
+ /* 65 */ "keylabel_for_symbols_6",
+ /* 66 */ "keylabel_for_symbols_7",
+ /* 67 */ "keylabel_for_symbols_8",
+ /* 68 */ "keylabel_for_symbols_9",
+ /* 69 */ "keylabel_for_symbols_0",
+ /* 70 */ "label_to_symbol_key",
+ /* 71 */ "label_to_symbol_with_microphone_key",
+ /* 72 */ "additional_more_keys_for_symbols_1",
+ /* 73 */ "additional_more_keys_for_symbols_2",
+ /* 74 */ "additional_more_keys_for_symbols_3",
+ /* 75 */ "additional_more_keys_for_symbols_4",
+ /* 76 */ "additional_more_keys_for_symbols_5",
+ /* 77 */ "additional_more_keys_for_symbols_6",
+ /* 78 */ "additional_more_keys_for_symbols_7",
+ /* 79 */ "additional_more_keys_for_symbols_8",
+ /* 80 */ "additional_more_keys_for_symbols_9",
+ /* 81 */ "additional_more_keys_for_symbols_0",
+ /* 82 */ "more_keys_for_symbols_1",
+ /* 83 */ "more_keys_for_symbols_2",
+ /* 84 */ "more_keys_for_symbols_3",
+ /* 85 */ "more_keys_for_symbols_4",
+ /* 86 */ "more_keys_for_symbols_5",
+ /* 87 */ "more_keys_for_symbols_6",
+ /* 88 */ "more_keys_for_symbols_7",
+ /* 89 */ "more_keys_for_symbols_8",
+ /* 90 */ "more_keys_for_symbols_9",
+ /* 91 */ "more_keys_for_symbols_0",
+ /* 92 */ "keylabel_for_comma",
+ /* 93 */ "more_keys_for_comma",
+ /* 94 */ "keylabel_for_symbols_question",
+ /* 95 */ "keylabel_for_symbols_semicolon",
+ /* 96 */ "keylabel_for_symbols_percent",
+ /* 97 */ "more_keys_for_symbols_exclamation",
+ /* 98 */ "more_keys_for_symbols_question",
+ /* 99 */ "more_keys_for_symbols_semicolon",
+ /* 100 */ "more_keys_for_symbols_percent",
+ /* 101 */ "keylabel_for_tablet_comma",
+ /* 102 */ "keyhintlabel_for_tablet_comma",
+ /* 103 */ "more_keys_for_tablet_comma",
+ /* 104 */ "keyhintlabel_for_tablet_period",
+ /* 105 */ "more_keys_for_tablet_period",
+ /* 106 */ "keylabel_for_apostrophe",
+ /* 107 */ "keyhintlabel_for_apostrophe",
+ /* 108 */ "more_keys_for_apostrophe",
+ /* 109 */ "more_keys_for_q",
+ /* 110 */ "more_keys_for_x",
+ /* 111 */ "keylabel_for_q",
+ /* 112 */ "keylabel_for_w",
+ /* 113 */ "keylabel_for_y",
+ /* 114 */ "keylabel_for_x",
+ /* 115 */ "keylabel_for_spanish_row2_10",
+ /* 116 */ "more_keys_for_am_pm",
+ /* 117 */ "settings_as_more_key",
+ /* 118 */ "shortcut_as_more_key",
+ /* 119 */ "action_next_as_more_key",
+ /* 120 */ "action_previous_as_more_key",
+ /* 121 */ "label_to_more_symbol_key",
+ /* 122 */ "label_to_more_symbol_for_tablet_key",
+ /* 123 */ "label_tab_key",
+ /* 124 */ "label_to_phone_numeric_key",
+ /* 125 */ "label_to_phone_symbols_key",
+ /* 126 */ "label_time_am",
+ /* 127 */ "label_time_pm",
+ /* 128 */ "label_to_symbol_key_pcqwerty",
+ /* 129 */ "keylabel_for_popular_domain",
+ /* 130 */ "more_keys_for_popular_domain",
+ /* 131 */ "more_keys_for_smiley",
+ /* 132 */ "single_laqm_raqm",
+ /* 133 */ "single_laqm_raqm_rtl",
+ /* 134 */ "single_raqm_laqm",
+ /* 135 */ "double_laqm_raqm",
+ /* 136 */ "double_laqm_raqm_rtl",
+ /* 137 */ "double_raqm_laqm",
+ /* 138 */ "single_lqm_rqm",
+ /* 139 */ "single_9qm_lqm",
+ /* 140 */ "single_9qm_rqm",
+ /* 141 */ "double_lqm_rqm",
+ /* 142 */ "double_9qm_lqm",
+ /* 143 */ "double_9qm_rqm",
+ /* 144 */ "more_keys_for_single_quote",
+ /* 145 */ "more_keys_for_double_quote",
+ /* 146 */ "more_keys_for_tablet_double_quote",
};
private static final String EMPTY = "";
@@ -247,155 +263,182 @@ public final class KeyboardTextsSet {
/* ~41 */
// Label for "switch to alphabetic" key.
/* 42 */ "ABC",
- /* 43 */ "!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>
- /* 44 */ "!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>
- /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 43 */ "!text/single_lqm_rqm",
+ /* 44 */ "!text/double_lqm_rqm",
+ /* 45 */ "!text/single_laqm_raqm",
+ /* 46 */ "!text/double_laqm_raqm",
// U+00A2: "¢" CENT SIGN
// U+00A3: "£" POUND SIGN
// U+20AC: "€" EURO SIGN
// U+00A5: "¥" YEN SIGN
// U+20B1: "₱" PESO SIGN
- /* 46 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
- /* 47 */ "$",
- /* 48 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
- /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
+ /* 47 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
+ /* 48 */ "$",
+ /* 49 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
+ /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
// U+2020: "†" DAGGER
// U+2021: "‡" DOUBLE DAGGER
// U+2605: "★" BLACK STAR
- /* 50 */ "\u2020,\u2021,\u2605",
+ /* 51 */ "\u2020,\u2021,\u2605",
// U+266A: "♪" EIGHTH NOTE
// U+2665: "♥" BLACK HEART SUIT
// U+2660: "♠" BLACK SPADE SUIT
// U+2666: "♦" BLACK DIAMOND SUIT
// U+2663: "♣" BLACK CLUB SUIT
- /* 51 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
+ /* 52 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
// U+00B1: "±" PLUS-MINUS SIGN
- /* 52 */ "\u00B1",
+ /* 53 */ "\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,>,},]",
+ /* 54 */ "!fixedColumnOrder!3,<,{,[",
+ /* 55 */ "!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 */ EMPTY,
+ /* 56 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
+ /* 57 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
/* 58 */ EMPTY,
- /* 59 */ "1",
- /* 60 */ "2",
- /* 61 */ "3",
- /* 62 */ "4",
- /* 63 */ "5",
- /* 64 */ "6",
- /* 65 */ "7",
- /* 66 */ "8",
- /* 67 */ "9",
- /* 68 */ "0",
+ /* 59 */ EMPTY,
+ /* 60 */ "1",
+ /* 61 */ "2",
+ /* 62 */ "3",
+ /* 63 */ "4",
+ /* 64 */ "5",
+ /* 65 */ "6",
+ /* 66 */ "7",
+ /* 67 */ "8",
+ /* 68 */ "9",
+ /* 69 */ "0",
// Label for "switch to symbols" key.
- /* 69 */ "?123",
+ /* 70 */ "?123",
// Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
// part because it'll be appended by the code.
- /* 70 */ "123",
- /* 71~ */
+ /* 71 */ "123",
+ /* 72~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~80 */
+ /* ~81 */
// 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
- /* 81 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
+ /* 82 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
// U+00B2: "²" SUPERSCRIPT TWO
// U+2154: "⅔" VULGAR FRACTION TWO THIRDS
- /* 82 */ "\u00B2,\u2154",
+ /* 83 */ "\u00B2,\u2154",
// U+00B3: "³" SUPERSCRIPT THREE
// U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
// U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
- /* 83 */ "\u00B3,\u00BE,\u215C",
+ /* 84 */ "\u00B3,\u00BE,\u215C",
// U+2074: "⁴" SUPERSCRIPT FOUR
- /* 84 */ "\u2074",
+ /* 85 */ "\u2074",
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
- /* 85 */ "\u215D",
- /* 86 */ EMPTY,
+ /* 86 */ "\u215D",
+ /* 87 */ EMPTY,
// U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
- /* 87 */ "\u215E",
- /* 88 */ EMPTY,
+ /* 88 */ "\u215E",
/* 89 */ EMPTY,
+ /* 90 */ EMPTY,
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
// U+2205: "∅" EMPTY SET
- /* 90 */ "\u207F,\u2205",
- /* 91 */ ",",
- /* 92 */ EMPTY,
- /* 93 */ "?",
- /* 94 */ ";",
- /* 95 */ "%",
+ /* 91 */ "\u207F,\u2205",
+ /* 92 */ ",",
+ /* 93 */ EMPTY,
+ /* 94 */ "?",
+ /* 95 */ ";",
+ /* 96 */ "%",
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* 96 */ "\u00A1",
+ /* 97 */ "\u00A1",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 97 */ "\u00BF",
- /* 98 */ EMPTY,
+ /* 98 */ "\u00BF",
+ /* 99 */ EMPTY,
// U+2030: "‰" PER MILLE SIGN
- /* 99 */ "\u2030",
- /* 100 */ ",",
- /* 101 */ "!",
+ /* 100 */ "\u2030",
+ /* 101 */ ",",
/* 102 */ "!",
- /* 103 */ "?",
+ /* 103 */ "!",
/* 104 */ "?",
- /* 105 */ "\'",
- /* 106 */ "\"",
+ /* 105 */ "?",
+ /* 106 */ "\'",
/* 107 */ "\"",
- /* 108 */ EMPTY,
+ /* 108 */ "\"",
/* 109 */ EMPTY,
- /* 110 */ "q",
- /* 111 */ "w",
- /* 112 */ "y",
- /* 113 */ "x",
+ /* 110 */ EMPTY,
+ /* 111 */ "q",
+ /* 112 */ "w",
+ /* 113 */ "y",
+ /* 114 */ "x",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* 114 */ "\u00F1",
- /* 115 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
- /* 116 */ "!icon/settings_key|!code/key_settings",
- /* 117 */ "!icon/shortcut_key|!code/key_shortcut",
- /* 118 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
- /* 119 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
+ /* 115 */ "\u00F1",
+ /* 116 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
+ /* 117 */ "!icon/settings_key|!code/key_settings",
+ /* 118 */ "!icon/shortcut_key|!code/key_shortcut",
+ /* 119 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
+ /* 120 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
// Label for "switch to more symbol" modifier key. Must be short to fit on key!
- /* 120 */ "= \\ <",
+ /* 121 */ "= \\ <",
// Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key!
- /* 121 */ "~ \\ {",
+ /* 122 */ "~ \\ {",
// Label for "Tab" key. Must be short to fit on key!
- /* 122 */ "Tab",
+ /* 123 */ "Tab",
// Label for "switch to phone numeric" key. Must be short to fit on key!
- /* 123 */ "123",
+ /* 124 */ "123",
// Label for "switch to phone symbols" key. Must be short to fit on key!
// U+FF0A: "*" FULLWIDTH ASTERISK
// U+FF03: "#" FULLWIDTH NUMBER SIGN
- /* 124 */ "\uFF0A\uFF03",
+ /* 125 */ "\uFF0A\uFF03",
// Key label for "ante meridiem"
- /* 125 */ "AM",
+ /* 126 */ "AM",
// Key label for "post meridiem"
- /* 126 */ "PM",
+ /* 127 */ "PM",
// Label for "switch to symbols" key on PC QWERTY layout
- /* 127 */ "Sym",
- /* 128 */ ".com",
+ /* 128 */ "Sym",
+ /* 129 */ ".com",
// popular web domains for the locale - most popular, displayed on the keyboard
- /* 129 */ "!hasLabels!,.net,.org,.gov,.edu",
- /* 130 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
+ /* 130 */ "!hasLabels!,.net,.org,.gov,.edu",
+ /* 131 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
+ // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ // 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+201C: "“" LEFT DOUBLE QUOTATION MARK
+ // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ // Abbreviations are:
+ // laqm: LEFT-POINTING ANGLE QUOTATION MARK
+ // raqm: RIGHT-POINTING ANGLE QUOTATION MARK
+ // rtl: Right-To-Left script order
+ // lqm: LEFT QUOTATION MARK
+ // rqm: RIGHT QUOTATION MARK
+ // 9qm: LOW-9 QUOTATION MARK
+ // The following each quotation mark pair consist of
+ // <opening quotation mark>, <closing quotation mark>
+ // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
+ /* 132 */ "\u2039,\u203A",
+ /* 133 */ "\u2039|\u203A,\u203A|\u2039",
+ /* 134 */ "\u203A,\u2039",
+ /* 135 */ "\u00AB,\u00BB",
+ /* 136 */ "\u00AB|\u00BB,\u00BB|\u00AB",
+ /* 137 */ "\u00BB,\u00AB",
+ // The following each quotation mark triplet consists of
+ // <another quotation mark>, <opening quotation mark>, <closing quotation mark>
+ // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
+ /* 138 */ "\u201A,\u2018,\u2019",
+ /* 139 */ "\u2019,\u201A,\u2018",
+ /* 140 */ "\u2018,\u201A,\u2019",
+ /* 141 */ "\u201E,\u201C,\u201D",
+ /* 142 */ "\u201D,\u201E,\u201C",
+ /* 143 */ "\u201C,\u201E,\u201D",
+ /* 144 */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes",
+ /* 145 */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes",
+ /* 146 */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes",
};
/* Language af: Afrikaans */
@@ -465,54 +508,36 @@ public final class KeyboardTextsSet {
// U+062C: "پ" ARABIC LETTER PEH
/* 42 */ "\u0623\u200C\u0628\u200C\u062C",
/* 43 */ null,
- // 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>
- /* 44 */ "!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>
- /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
- // U+00A2: "¢" CENT SIGN
- // U+00A3: "£" POUND SIGN
- // U+20AC: "€" EURO SIGN
- // U+00A5: "¥" YEN SIGN
- // U+20B1: "₱" PESO SIGN
- // U+FDFC: "﷼" RIAL SIGN
- /* 46 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1,\uFDFC",
- /* 47 */ null,
- /* 48 */ null,
+ /* 44 */ null,
+ /* 45 */ "!text/single_laqm_raqm_rtl",
+ /* 46 */ "!text/double_laqm_raqm_rtl",
+ /* 47~ */
+ null, null, null,
+ /* ~49 */
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
- /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
+ /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 50 */ "\u2605,\u066D",
+ /* 51 */ "\u2605,\u066D",
// U+266A: "♪" EIGHTH NOTE
- /* 51 */ "\u266A",
- /* 52 */ null,
+ /* 52 */ "\u266A",
+ /* 53 */ 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
- /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 55 */ "!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",
+ /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0654: "ٔ" ARABIC HAMZA ABOVE
// U+0652: "ْ" ARABIC SUKUN
@@ -529,70 +554,70 @@ public final class KeyboardTextsSet {
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
// Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
- /* 57 */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
- /* 58 */ "\u0651",
+ /* 58 */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
+ /* 59 */ "\u0651",
// U+0661: "١" ARABIC-INDIC DIGIT ONE
- /* 59 */ "\u0661",
+ /* 60 */ "\u0661",
// U+0662: "٢" ARABIC-INDIC DIGIT TWO
- /* 60 */ "\u0662",
+ /* 61 */ "\u0662",
// U+0663: "٣" ARABIC-INDIC DIGIT THREE
- /* 61 */ "\u0663",
+ /* 62 */ "\u0663",
// U+0664: "٤" ARABIC-INDIC DIGIT FOUR
- /* 62 */ "\u0664",
+ /* 63 */ "\u0664",
// U+0665: "٥" ARABIC-INDIC DIGIT FIVE
- /* 63 */ "\u0665",
+ /* 64 */ "\u0665",
// U+0666: "٦" ARABIC-INDIC DIGIT SIX
- /* 64 */ "\u0666",
+ /* 65 */ "\u0666",
// U+0667: "٧" ARABIC-INDIC DIGIT SEVEN
- /* 65 */ "\u0667",
+ /* 66 */ "\u0667",
// U+0668: "٨" ARABIC-INDIC DIGIT EIGHT
- /* 66 */ "\u0668",
+ /* 67 */ "\u0668",
// U+0669: "٩" ARABIC-INDIC DIGIT NINE
- /* 67 */ "\u0669",
+ /* 68 */ "\u0669",
// U+0660: "٠" ARABIC-INDIC DIGIT ZERO
- /* 68 */ "\u0660",
+ /* 69 */ "\u0660",
// Label for "switch to symbols" key.
// U+061F: "؟" ARABIC QUESTION MARK
- /* 69 */ "\u0663\u0662\u0661\u061F",
+ /* 70 */ "\u0663\u0662\u0661\u061F",
// Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
// part because it'll be appended by the code.
- /* 70 */ "\u0663\u0662\u0661",
- /* 71 */ "1",
- /* 72 */ "2",
- /* 73 */ "3",
- /* 74 */ "4",
- /* 75 */ "5",
- /* 76 */ "6",
- /* 77 */ "7",
- /* 78 */ "8",
- /* 79 */ "9",
+ /* 71 */ "\u0663\u0662\u0661",
+ /* 72 */ "1",
+ /* 73 */ "2",
+ /* 74 */ "3",
+ /* 75 */ "4",
+ /* 76 */ "5",
+ /* 77 */ "6",
+ /* 78 */ "7",
+ /* 79 */ "8",
+ /* 80 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 80 */ "0,\u066B,\u066C",
- /* 81~ */
+ /* 81 */ "0,\u066B,\u066C",
+ /* 82~ */
null, null, null, null, null, null, null, null, null, null,
- /* ~90 */
+ /* ~91 */
// U+060C: "،" ARABIC COMMA
- /* 91 */ "\u060C",
- /* 92 */ "\\,",
- /* 93 */ "\u061F",
- /* 94 */ "\u061B",
+ /* 92 */ "\u060C",
+ /* 93 */ "\\,",
+ /* 94 */ "\u061F",
+ /* 95 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 95 */ "\u066A",
- /* 96 */ null,
- /* 97 */ "?",
- /* 98 */ ";",
+ /* 96 */ "\u066A",
+ /* 97 */ null,
+ /* 98 */ "?",
+ /* 99 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 99 */ "\\%,\u2030",
- /* 100~ */
+ /* 100 */ "\\%,\u2030",
+ /* 101~ */
null, null, null, null, null,
- /* ~104 */
+ /* ~105 */
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
- /* 105 */ "\u060C",
- /* 106 */ "\u061F",
- /* 107 */ "\u061F,\u061B,!,:,-,/,\',\"",
+ /* 106 */ "\u060C",
+ /* 107 */ "\u061F",
+ /* 108 */ "\u061F,\u061B,!,:,-,/,\',\"",
};
/* Language be: Belarusian */
@@ -627,6 +652,8 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language bg: Bulgarian */
@@ -641,6 +668,9 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
+ /* 43 */ null,
+ // single_quotes of Bulgarian is default single_quotes_right_left.
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language ca: Catalan */
@@ -771,6 +801,14 @@ public final class KeyboardTextsSet {
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
/* 12 */ "\u017E,\u017A,\u017C",
+ /* 13~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language da: Danish */
@@ -832,6 +870,14 @@ public final class KeyboardTextsSet {
/* 23 */ "\u00E4",
// U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
/* 24 */ "\u00F6",
+ /* 25~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language de: German */
@@ -874,6 +920,15 @@ public final class KeyboardTextsSet {
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
// U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
/* 6 */ "\u00F1,\u0144",
+ /* 7~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language el: Greek */
@@ -1058,20 +1113,20 @@ public final class KeyboardTextsSet {
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,
- /* ~107 */
- /* 108 */ "q",
- /* 109 */ "x",
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~108 */
+ /* 109 */ "q",
+ /* 110 */ "x",
// U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
- /* 110 */ "\u015D",
+ /* 111 */ "\u015D",
// U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
- /* 111 */ "\u011D",
+ /* 112 */ "\u011D",
// U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
- /* 112 */ "\u016D",
+ /* 113 */ "\u016D",
// U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
- /* 113 */ "\u0109",
+ /* 114 */ "\u0109",
// U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
- /* 114 */ "\u0135",
+ /* 115 */ "\u0135",
};
/* Language es: Spanish */
@@ -1129,25 +1184,25 @@ public final class KeyboardTextsSet {
/* 8~ */
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,
- /* ~48 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~49 */
// U+00A1: "¡" INVERTED EXCLAMATION MARK
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 49 */ "!fixedColumnOrder!9,\u00A1,\",\',#,-,:,!,\\,,?,\u00BF,@,&,\\%,+,;,/,(,)",
- /* 50~ */
+ /* 50 */ "!fixedColumnOrder!9,\u00A1,\",\',#,-,:,!,\\,,?,\u00BF,@,&,\\%,+,;,/,(,)",
+ /* 51~ */
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,
- /* ~101 */
+ /* ~102 */
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* 102 */ "!,\u00A1",
- /* 103 */ null,
+ /* 103 */ "!,\u00A1",
+ /* 104 */ null,
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 104 */ "?,\u00BF",
- /* 105 */ "\"",
- /* 106 */ "\'",
+ /* 105 */ "?,\u00BF",
+ /* 106 */ "\"",
/* 107 */ "\'",
+ /* 108 */ "\'",
};
/* Language et: Estonian */
@@ -1248,6 +1303,12 @@ public final class KeyboardTextsSet {
/* 22 */ "\u00E4",
// U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
/* 23 */ "\u00F5",
+ /* 24~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language fa: Persian */
@@ -1264,55 +1325,36 @@ public final class KeyboardTextsSet {
// U+067E: "پ" ARABIC LETTER PEH
/* 42 */ "\u0627\u200C\u0628\u200C\u067E",
/* 43 */ null,
- // 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>
- /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\",\'",
- // 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>
- /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
- /* 46 */ null,
- // U+FDFC: "﷼" RIAL SIGN
- // U+060B: "؋" AFGHANI SIGN
- // U+00A2: "¢" CENT SIGN
- // U+00A3: "£" POUND SIGN
- // U+20AC: "€" EURO SIGN
- // U+00A5: "¥" YEN SIGN
- // U+20B1: "₱" PESO SIGN
- /* 47 */ "\uFDFC",
- /* 48 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1,\u060B",
+ /* 44 */ null,
+ /* 45 */ "!text/single_laqm_raqm_rtl",
+ /* 46 */ "!text/double_laqm_raqm_rtl",
+ /* 47~ */
+ null, null, null,
+ /* ~49 */
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
- /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
+ /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 50 */ "\u2605,\u066D",
+ /* 51 */ "\u2605,\u066D",
// U+266A: "♪" EIGHTH NOTE
- /* 51 */ "\u266A",
- /* 52 */ null,
+ /* 52 */ "\u266A",
+ /* 53 */ 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
- /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 55 */ "!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,<|>",
- /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
+ /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
+ /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0652: "ْ" ARABIC SUKUN
// U+0651: "ّ" ARABIC SHADDA
@@ -1329,74 +1371,74 @@ public final class KeyboardTextsSet {
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
// Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
- /* 57 */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
- /* 58 */ "\u064B",
+ /* 58 */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
+ /* 59 */ "\u064B",
// U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
- /* 59 */ "\u06F1",
+ /* 60 */ "\u06F1",
// U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
- /* 60 */ "\u06F2",
+ /* 61 */ "\u06F2",
// U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE
- /* 61 */ "\u06F3",
+ /* 62 */ "\u06F3",
// U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR
- /* 62 */ "\u06F4",
+ /* 63 */ "\u06F4",
// U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE
- /* 63 */ "\u06F5",
+ /* 64 */ "\u06F5",
// U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX
- /* 64 */ "\u06F6",
+ /* 65 */ "\u06F6",
// U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN
- /* 65 */ "\u06F7",
+ /* 66 */ "\u06F7",
// U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT
- /* 66 */ "\u06F8",
+ /* 67 */ "\u06F8",
// U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE
- /* 67 */ "\u06F9",
+ /* 68 */ "\u06F9",
// U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
- /* 68 */ "\u06F0",
+ /* 69 */ "\u06F0",
// Label for "switch to symbols" key.
// U+061F: "؟" ARABIC QUESTION MARK
- /* 69 */ "\u06F3\u06F2\u06F1\u061F",
+ /* 70 */ "\u06F3\u06F2\u06F1\u061F",
// Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
// part because it'll be appended by the code.
- /* 70 */ "\u06F3\u06F2\u06F1",
- /* 71 */ "1",
- /* 72 */ "2",
- /* 73 */ "3",
- /* 74 */ "4",
- /* 75 */ "5",
- /* 76 */ "6",
- /* 77 */ "7",
- /* 78 */ "8",
- /* 79 */ "9",
+ /* 71 */ "\u06F3\u06F2\u06F1",
+ /* 72 */ "1",
+ /* 73 */ "2",
+ /* 74 */ "3",
+ /* 75 */ "4",
+ /* 76 */ "5",
+ /* 77 */ "6",
+ /* 78 */ "7",
+ /* 79 */ "8",
+ /* 80 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 80 */ "0,\u066B,\u066C",
- /* 81~ */
+ /* 81 */ "0,\u066B,\u066C",
+ /* 82~ */
null, null, null, null, null, null, null, null, null, null,
- /* ~90 */
+ /* ~91 */
// U+060C: "،" ARABIC COMMA
- /* 91 */ "\u060C",
- /* 92 */ "\\,",
- /* 93 */ "\u061F",
- /* 94 */ "\u061B",
+ /* 92 */ "\u060C",
+ /* 93 */ "\\,",
+ /* 94 */ "\u061F",
+ /* 95 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 95 */ "\u066A",
- /* 96 */ null,
- /* 97 */ "?",
- /* 98 */ ";",
+ /* 96 */ "\u066A",
+ /* 97 */ null,
+ /* 98 */ "?",
+ /* 99 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 99 */ "\\%,\u2030",
+ /* 100 */ "\\%,\u2030",
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- /* 100 */ "\u060C",
- /* 101 */ "!",
- /* 102 */ "!,\\,",
- /* 103 */ "\u061F",
- /* 104 */ "\u061F,?",
- /* 105 */ "\u060C",
- /* 106 */ "\u061F",
- /* 107 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
+ /* 101 */ "\u060C",
+ /* 102 */ "!",
+ /* 103 */ "!,\\,",
+ /* 104 */ "\u061F",
+ /* 105 */ "\u061F,?",
+ /* 106 */ "\u060C",
+ /* 107 */ "\u061F",
+ /* 108 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
};
/* Language fi: Finnish */
@@ -1512,48 +1554,48 @@ public final class KeyboardTextsSet {
// U+0917: "ग" DEVANAGARI LETTER GA
/* 42 */ "\u0915\u0916\u0917",
/* 43~ */
- null, null, null, null,
- /* ~46 */
+ null, null, null, null, null,
+ /* ~47 */
// U+20B9: "₹" INDIAN RUPEE SIGN
- /* 47 */ "\u20B9",
- /* 48~ */
+ /* 48 */ "\u20B9",
+ /* 49~ */
null, null, null, null, null, null, null, null, null, null, null,
- /* ~58 */
+ /* ~59 */
// U+0967: "१" DEVANAGARI DIGIT ONE
- /* 59 */ "\u0967",
+ /* 60 */ "\u0967",
// U+0968: "२" DEVANAGARI DIGIT TWO
- /* 60 */ "\u0968",
+ /* 61 */ "\u0968",
// U+0969: "३" DEVANAGARI DIGIT THREE
- /* 61 */ "\u0969",
+ /* 62 */ "\u0969",
// U+096A: "४" DEVANAGARI DIGIT FOUR
- /* 62 */ "\u096A",
+ /* 63 */ "\u096A",
// U+096B: "५" DEVANAGARI DIGIT FIVE
- /* 63 */ "\u096B",
+ /* 64 */ "\u096B",
// U+096C: "६" DEVANAGARI DIGIT SIX
- /* 64 */ "\u096C",
+ /* 65 */ "\u096C",
// U+096D: "७" DEVANAGARI DIGIT SEVEN
- /* 65 */ "\u096D",
+ /* 66 */ "\u096D",
// U+096E: "८" DEVANAGARI DIGIT EIGHT
- /* 66 */ "\u096E",
+ /* 67 */ "\u096E",
// U+096F: "९" DEVANAGARI DIGIT NINE
- /* 67 */ "\u096F",
+ /* 68 */ "\u096F",
// U+0966: "०" DEVANAGARI DIGIT ZERO
- /* 68 */ "\u0966",
+ /* 69 */ "\u0966",
// Label for "switch to symbols" key.
- /* 69 */ "?\u0967\u0968\u0969",
+ /* 70 */ "?\u0967\u0968\u0969",
// Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
// part because it'll be appended by the code.
- /* 70 */ "\u0967\u0968\u0969",
- /* 71 */ "1",
- /* 72 */ "2",
- /* 73 */ "3",
- /* 74 */ "4",
- /* 75 */ "5",
- /* 76 */ "6",
- /* 77 */ "7",
- /* 78 */ "8",
- /* 79 */ "9",
- /* 80 */ "0",
+ /* 71 */ "\u0967\u0968\u0969",
+ /* 72 */ "1",
+ /* 73 */ "2",
+ /* 74 */ "3",
+ /* 75 */ "4",
+ /* 76 */ "5",
+ /* 77 */ "6",
+ /* 78 */ "7",
+ /* 79 */ "8",
+ /* 80 */ "9",
+ /* 81 */ "0",
};
/* Language hr: Croatian */
@@ -1581,6 +1623,14 @@ public final class KeyboardTextsSet {
// U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
// U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
/* 12 */ "\u017E,\u017A,\u017C",
+ /* 13~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language hu: Hungarian */
@@ -1626,6 +1676,15 @@ public final class KeyboardTextsSet {
// U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
// U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
/* 4 */ "\u00FA,\u00FC,\u0171,\u00FB,\u00F9,\u016B",
+ /* 5~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language is: Icelandic */
@@ -1689,6 +1748,12 @@ public final class KeyboardTextsSet {
/* 21 */ "\u00E6",
// U+00FE: "þ" LATIN SMALL LETTER THORN
/* 22 */ "\u00FE",
+ /* 23~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language it: Italian */
@@ -1748,45 +1813,38 @@ public final class KeyboardTextsSet {
// U+05D1: "ב" HEBREW LETTER BET
// U+05D2: "ג" HEBREW LETTER GIMEL
/* 42 */ "\u05D0\u05D1\u05D2",
- /* 43 */ null,
- // 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>
- /* 44 */ "!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>
- /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
- /* 46 */ null,
- // U+20AA: "₪" NEW SHEQEL SIGN
- /* 47 */ "\u20AA",
- /* 48 */ null,
- /* 49 */ null,
+ // 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+201C: "“" LEFT DOUBLE QUOTATION MARK
+ // U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ // U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ /* 43 */ "\u2018,\u2019,\u201A",
+ /* 44 */ "\u201C,\u201D,\u201E",
+ /* 45 */ "!text/single_laqm_raqm_rtl",
+ /* 46 */ "!text/double_laqm_raqm_rtl",
+ /* 47~ */
+ null, null, null, null,
+ /* ~50 */
// U+2605: "★" BLACK STAR
- /* 50 */ "\u2605",
- /* 51 */ null,
+ /* 51 */ "\u2605",
+ /* 52 */ null,
// U+00B1: "±" PLUS-MINUS SIGN
// U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
- /* 52 */ "\u00B1,\uFB29",
+ /* 53 */ "\u00B1,\uFB29",
// 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,>|<,}|{,]|[",
+ /* 54 */ "!fixedColumnOrder!3,<|>,{|},[|]",
+ /* 55 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
// 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",
+ /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
};
/* Language ka: Georgian */
@@ -1801,6 +1859,8 @@ public final class KeyboardTextsSet {
// U+10D1: "ბ" GEORGIAN LETTER BAN
// U+10D2: "გ" GEORGIAN LETTER GAN
/* 42 */ "\u10D0\u10D1\u10D2",
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language ky: Kirghiz */
@@ -1930,6 +1990,12 @@ public final class KeyboardTextsSet {
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
/* 15 */ "\u0123,\u011F",
+ /* 16~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language lv: Latvian */
@@ -2019,6 +2085,12 @@ public final class KeyboardTextsSet {
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
/* 15 */ "\u0123,\u011F",
+ /* 16~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language mk: Macedonian */
@@ -2045,21 +2117,8 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
- /* 43 */ null,
- // 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
- // 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>
- /* 44 */ "!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>
- /* 45 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language mn: Mongolian */
@@ -2075,10 +2134,10 @@ public final class KeyboardTextsSet {
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
/* 43~ */
- null, null, null, null,
- /* ~46 */
+ null, null, null, null, null,
+ /* ~47 */
// U+20AE: "₮" TUGRIK SIGN
- /* 47 */ "\u20AE",
+ /* 48 */ "\u20AE",
};
/* Language nb: Norwegian Bokmål */
@@ -2126,6 +2185,12 @@ public final class KeyboardTextsSet {
/* 23 */ "\u00F6",
// U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
/* 24 */ "\u00E4",
+ /* 25~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
};
/* Language nl: Dutch */
@@ -2177,6 +2242,13 @@ public final class KeyboardTextsSet {
/* 7 */ null,
// U+0133: "ij" LATIN SMALL LIGATURE IJ
/* 8 */ "\u0133",
+ /* 9~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
};
/* Language pl: Polish */
@@ -2231,6 +2303,12 @@ public final class KeyboardTextsSet {
/* 13 */ null,
// U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
/* 14 */ "\u0142",
+ /* 15~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
};
/* Language pt: Portuguese */
@@ -2330,6 +2408,13 @@ public final class KeyboardTextsSet {
/* ~10 */
// U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
/* 11 */ "\u021B",
+ /* 12~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_rqm",
+ /* 44 */ "!text/double_9qm_rqm",
};
/* Language ru: Russian */
@@ -2364,6 +2449,8 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
};
/* Language sk: Slovak */
@@ -2454,6 +2541,14 @@ public final class KeyboardTextsSet {
// U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
// U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
/* 15 */ "\u0123,\u011F",
+ /* 16~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language sl: Slovenian */
@@ -2474,6 +2569,14 @@ public final class KeyboardTextsSet {
/* 11 */ null,
// U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
/* 12 */ "\u017E",
+ /* 13~ */
+ 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,
+ /* ~42 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language sr: Serbian */
@@ -2519,21 +2622,10 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
- /* 43 */ null,
- // 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
- // 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>
- /* 44 */ "!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>
- /* 45 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language sv: Swedish */
@@ -2576,6 +2668,12 @@ public final class KeyboardTextsSet {
/* 23 */ "\u00F8",
// U+00E6: "æ" LATIN SMALL LETTER AE
/* 24 */ "\u00E6",
+ /* 25~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null,
+ /* ~44 */
+ /* 45 */ "!text/single_raqm_laqm",
+ /* 46 */ "!text/double_raqm_laqm",
};
/* Language sw: Swahili */
@@ -2642,10 +2740,10 @@ public final class KeyboardTextsSet {
// U+0E04: "ค" THAI CHARACTER KHO KHWAI
/* 42 */ "\u0E01\u0E02\u0E04",
/* 43~ */
- null, null, null, null,
- /* ~46 */
+ null, null, null, null, null,
+ /* ~47 */
// U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
- /* 47 */ "\u0E3F",
+ /* 48 */ "\u0E3F",
};
/* Language tl: Tagalog */
@@ -2780,11 +2878,13 @@ public final class KeyboardTextsSet {
// U+0411: "Б" CYRILLIC CAPITAL LETTER BE
// U+0412: "В" CYRILLIC CAPITAL LETTER VE
/* 42 */ "\u0410\u0411\u0412",
- /* 43~ */
- null, null, null, null,
- /* ~46 */
+ /* 43 */ "!text/single_9qm_lqm",
+ /* 44 */ "!text/double_9qm_lqm",
+ /* 45~ */
+ null, null, null,
+ /* ~47 */
// U+20B4: "₴" HRYVNIA SIGN
- /* 47 */ "\u20B4",
+ /* 48 */ "\u20B4",
};
/* Language vi: Vietnamese */
@@ -2869,10 +2969,10 @@ public final class KeyboardTextsSet {
/* 10~ */
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,
- /* ~46 */
+ null, null, null, null, null, null, null, null,
+ /* ~47 */
// U+20AB: "₫" DONG SIGN
- /* 47 */ "\u20AB",
+ /* 48 */ "\u20AB",
};
/* Language zu: Zulu */
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index af494c4f4..e7c64c695 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -958,6 +958,10 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
LatinImeLogger.commit();
mKeyboardSwitcher.onHideWindow();
+ if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
+ AccessibleKeyboardViewProxy.getInstance().onHideWindow();
+ }
+
if (TRACE) Debug.stopMethodTracing();
if (mOptionsDialog != null && mOptionsDialog.isShowing()) {
mOptionsDialog.dismiss();
@@ -1447,7 +1451,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
} else {
didAutoCorrect = false;
if (SPACE_STATE_PHANTOM == spaceState) {
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
if (mWordComposer.isComposingWord() && mWordComposer.isBatchMode()) {
Stats.onAutoCorrection(
"", mWordComposer.getTypedWord(), " ", mWordComposer);
@@ -1502,7 +1506,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
mHandler.cancelUpdateSuggestionStrip();
mConnection.beginBatchEdit();
if (mWordComposer.isComposingWord()) {
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
if (mWordComposer.isBatchMode()) {
Stats.onAutoCorrection("", mWordComposer.getTypedWord(), " ", mWordComposer);
}
@@ -1732,7 +1736,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
}
} else {
if (mLastComposedWord.canRevertCommit()) {
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Stats.onAutoCorrectionCancellation();
}
revertCommit();
@@ -1891,7 +1895,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
if (null != mSuggestionStripView) mSuggestionStripView.dismissAddToDictionaryHint();
}
mHandler.postUpdateSuggestionStrip();
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Utils.Stats.onNonSeparator((char)primaryCode, x, y);
}
}
@@ -1958,7 +1962,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// already displayed or not, so it's okay.
setPunctuationSuggestions();
}
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Utils.Stats.onSeparator((char)primaryCode, x, y);
}
@@ -2141,7 +2145,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
throw new RuntimeException("We have an auto-correction but the typed word "
+ "is empty? Impossible! I must commit suicide.");
}
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Stats.onAutoCorrection(typedWord, autoCorrection, separatorString, mWordComposer);
}
if (ProductionFlag.IS_EXPERIMENTAL) {
@@ -2240,7 +2244,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// If the suggestion is not in the dictionary, the hint should be shown.
&& !AutoCorrection.isValidWord(mSuggest.getUnigramDictionaries(), suggestion, true);
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Stats.onSeparator((char)Constants.CODE_SPACE,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
}
@@ -2364,7 +2368,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
mUserHistoryDictionary.cancelAddingUserHistory(previousWord, committedWord);
}
mConnection.commitText(originallyTypedWord + mLastComposedWord.mSeparatorString, 1);
- if (ProductionFlag.IS_INTERNAL) {
+ if (mSettings.isInternal()) {
Stats.onSeparator(mLastComposedWord.mSeparatorString,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
}
@@ -2498,12 +2502,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
launchSubActivity(SettingsActivity.class);
}
- // Called from debug code only
- public void launchDebugSettings() {
- handleClose();
- launchSubActivity(DebugSettingsActivity.class);
- }
-
public void launchKeyboardedDialogActivity(final Class<? extends Activity> activityClass) {
// Put the text in the attached EditText into a safe, saved state before switching to a
// new activity that will also use the soft keyboard.
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 435074bdb..4cbfa8ea1 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -70,6 +70,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_INPUT_LANGUAGE = "input_language";
public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
public static final String PREF_DEBUG_SETTINGS = "debug_settings";
+ public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal";
// This preference key is deprecated. Use {@link #PREF_SHOW_LANGUAGE_SWITCH_KEY} instead.
// This is being used only for the backward compatibility.
@@ -127,6 +128,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
return mSettingsValues;
}
+ public boolean isInternal() {
+ return mSettingsValues.mIsInternal;
+ }
+
// Accessed from the settings interface, hence public
public static boolean readKeypressSoundEnabled(final SharedPreferences prefs,
final Resources res) {
@@ -274,4 +279,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
}
return prefs.getBoolean(Settings.PREF_SHOW_SETUP_WIZARD_ICON, false);
}
+
+ public static boolean isInternal(final SharedPreferences prefs) {
+ return prefs.getBoolean(Settings.PREF_KEY_IS_INTERNAL, false);
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/SettingsFragment.java b/java/src/com/android/inputmethod/latin/SettingsFragment.java
index 4c90e485a..cc9f168d0 100644
--- a/java/src/com/android/inputmethod/latin/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/SettingsFragment.java
@@ -92,7 +92,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
final Preference debugSettings = findPreference(Settings.PREF_DEBUG_SETTINGS);
if (debugSettings != null) {
- if (ProductionFlag.IS_INTERNAL) {
+ if (Settings.isInternal(prefs)) {
final Intent debugSettingsIntent = new Intent(Intent.ACTION_MAIN);
debugSettingsIntent.setClassName(
context.getPackageName(), DebugSettingsActivity.class.getName());
@@ -156,10 +156,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
removePreference(Settings.PREF_GESTURE_SETTINGS, getPreferenceScreen());
}
- final CheckBoxPreference showSetupWizardIcon =
- (CheckBoxPreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
- showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, context));
-
setupKeyLongpressTimeoutSettings(prefs, res);
setupKeypressVibrationDurationSettings(prefs, res);
setupKeypressSoundVolumeSettings(prefs, res);
@@ -175,6 +171,10 @@ public final class SettingsFragment extends InputMethodSettingsFragment
} else {
getPreferenceScreen().removePreference(mVoicePreference);
}
+ final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
+ final CheckBoxPreference showSetupWizardIcon =
+ (CheckBoxPreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
+ showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, getActivity()));
updateShowCorrectionSuggestionsSummary();
updateKeyPreviewPopupDelaySummary();
updateCustomInputStylesSummary();
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index d05868029..f77a92885 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -76,6 +76,9 @@ public final class SettingsValues {
private final boolean mVoiceKeyEnabled;
private final boolean mVoiceKeyOnMain;
+ // Debug settings
+ public final boolean mIsInternal;
+
public SettingsValues(final SharedPreferences prefs, final Resources res,
final InputAttributes inputAttributes) {
// Get the resources
@@ -141,6 +144,7 @@ public final class SettingsValues {
Settings.PREF_SHOW_SUGGESTIONS_SETTING,
res.getString(R.string.prefs_suggestion_visibility_default_value));
mSuggestionVisibility = createSuggestionVisibility(res, showSuggestionsSetting);
+ mIsInternal = Settings.isInternal(prefs);
}
public boolean isApplicationSpecifiedCompletionsOn() {
diff --git a/java/src/com/android/inputmethod/latin/StaticInnerHandlerWrapper.java b/java/src/com/android/inputmethod/latin/StaticInnerHandlerWrapper.java
index 89d9ea844..e50af4d2d 100644
--- a/java/src/com/android/inputmethod/latin/StaticInnerHandlerWrapper.java
+++ b/java/src/com/android/inputmethod/latin/StaticInnerHandlerWrapper.java
@@ -22,17 +22,17 @@ import android.os.Looper;
import java.lang.ref.WeakReference;
public class StaticInnerHandlerWrapper<T> extends Handler {
- final private WeakReference<T> mOuterInstanceRef;
+ private final WeakReference<T> mOuterInstanceRef;
- public StaticInnerHandlerWrapper(T outerInstance) {
- super();
- if (outerInstance == null) throw new NullPointerException("outerInstance is null");
- mOuterInstanceRef = new WeakReference<T>(outerInstance);
+ public StaticInnerHandlerWrapper(final T outerInstance) {
+ this(outerInstance, Looper.myLooper());
}
- public StaticInnerHandlerWrapper(T outerInstance, Looper looper) {
+ public StaticInnerHandlerWrapper(final T outerInstance, final Looper looper) {
super(looper);
- if (outerInstance == null) throw new NullPointerException("outerInstance is null");
+ if (outerInstance == null) {
+ throw new NullPointerException("outerInstance is null");
+ }
mOuterInstanceRef = new WeakReference<T>(outerInstance);
}
diff --git a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
index fe9be16c6..3df0d044e 100644
--- a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
+++ b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
@@ -22,7 +22,6 @@ public final class ProductionFlag {
}
public static final boolean IS_EXPERIMENTAL = false;
- public static final boolean IS_INTERNAL = false;
// When false, IS_EXPERIMENTAL_DEBUG suggests that all guarded class-private DEBUG flags should
// be false, and any privacy controls should be enforced. IS_EXPERIMENTAL_DEBUG should be false
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupActivity.java b/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
index e009fbc39..7f66c6d3e 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
@@ -62,6 +62,9 @@ public final class SetupActivity extends Activity {
@Override
public void handleMessage(final Message msg) {
final SetupActivity setupActivity = getOuterInstance();
+ if (setupActivity == null) {
+ return;
+ }
switch (msg.what) {
case MSG_POLLING_IME_SETTINGS:
if (SetupActivity.isThisImeEnabled(setupActivity)) {
diff --git a/java/src/com/android/inputmethod/research/ResearchLog.java b/java/src/com/android/inputmethod/research/ResearchLog.java
index 9016e23b3..f7c5fd50e 100644
--- a/java/src/com/android/inputmethod/research/ResearchLog.java
+++ b/java/src/com/android/inputmethod/research/ResearchLog.java
@@ -20,11 +20,11 @@ import android.content.Context;
import android.util.JsonWriter;
import android.util.Log;
+import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.define.ProductionFlag;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
@@ -54,7 +54,6 @@ public class ResearchLog {
private static final String TAG = ResearchLog.class.getSimpleName();
private static final boolean DEBUG = false && ProductionFlag.IS_EXPERIMENTAL_DEBUG;
private static final long FLUSH_DELAY_IN_MS = 1000 * 5;
- private static final int ABORT_TIMEOUT_IN_MS = 1000 * 4;
/* package */ final ScheduledExecutorService mExecutor;
/* package */ final File mFile;
@@ -99,8 +98,10 @@ public class ResearchLog {
* output.
*
* See class comment for details about {@code JsonWriter} construction.
+ *
+ * @param onClosed run after the close() operation has completed asynchronously
*/
- public synchronized void close(final Runnable onClosed) {
+ private synchronized void close(final Runnable onClosed) {
mExecutor.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
@@ -131,15 +132,24 @@ public class ResearchLog {
mExecutor.shutdown();
}
- private boolean mIsAbortSuccessful;
+ /**
+ * Block until the research log has shut down and spooled out all output or {@code timeout}
+ * occurs.
+ *
+ * @param timeout time to wait for close in milliseconds
+ */
+ public void blockingClose(final long timeout) {
+ close(null);
+ awaitTermination(timeout, TimeUnit.MILLISECONDS);
+ }
/**
- * Waits for publication requests to finish, closes the {@link JsonWriter}, but then deletes the
- * backing file used for output.
+ * Waits for publication requests to finish, closes the JsonWriter, but then deletes the backing
+ * output file.
*
- * See class comment for details about {@code JsonWriter} construction.
+ * @param onAbort run after the abort() operation has completed asynchronously
*/
- public synchronized void abort() {
+ private synchronized void abort(final Runnable onAbort) {
mExecutor.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
@@ -151,7 +161,10 @@ public class ResearchLog {
}
} finally {
if (mFile != null) {
- mIsAbortSuccessful = mFile.delete();
+ mFile.delete();
+ }
+ if (onAbort != null) {
+ onAbort.run();
}
}
return null;
@@ -161,14 +174,25 @@ public class ResearchLog {
mExecutor.shutdown();
}
- public boolean blockingAbort() throws InterruptedException {
- abort();
- mExecutor.awaitTermination(ABORT_TIMEOUT_IN_MS, TimeUnit.MILLISECONDS);
- return mIsAbortSuccessful;
+ /**
+ * Block until the research log has aborted or {@code timeout} occurs.
+ *
+ * @param timeout time to wait for close in milliseconds
+ */
+ public void blockingAbort(final long timeout) {
+ abort(null);
+ awaitTermination(timeout, TimeUnit.MILLISECONDS);
}
- public void awaitTermination(int delay, TimeUnit timeUnit) throws InterruptedException {
- mExecutor.awaitTermination(delay, timeUnit);
+ @UsedForTesting
+ public void awaitTermination(final long delay, final TimeUnit timeUnit) {
+ try {
+ if (!mExecutor.awaitTermination(delay, timeUnit)) {
+ Log.e(TAG, "ResearchLog executor timed out while awaiting terminaion");
+ }
+ } catch (final InterruptedException e) {
+ Log.e(TAG, "ResearchLog executor interrupted while awaiting terminaion", e);
+ }
}
/* package */ synchronized void flush() {
@@ -214,10 +238,10 @@ public class ResearchLog {
return null;
}
});
- } catch (RejectedExecutionException e) {
+ } catch (final RejectedExecutionException e) {
// TODO: Add code to record loss of data, and report.
if (DEBUG) {
- Log.d(TAG, "ResearchLog.publish() rejecting scheduled execution");
+ Log.d(TAG, "ResearchLog.publish() rejecting scheduled execution", e);
}
}
}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index e705ddda1..11d1a5222 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -154,6 +154,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private static final int MAX_INPUTVIEW_LENGTH_TO_CAPTURE = 8192; // must be >=1
private static final String PREF_RESEARCH_SAVED_CHANNEL = "pref_research_saved_channel";
+ private static final long RESEARCHLOG_CLOSE_TIMEOUT_IN_MS = 5 * 1000;
+ private static final long RESEARCHLOG_ABORT_TIMEOUT_IN_MS = 5 * 1000;
+
private static final ResearchLogger sInstance = new ResearchLogger();
private static String sAccountType = null;
private static String sAllowedAccountDomain = null;
@@ -502,42 +505,29 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
commitCurrentLogUnit();
mMainLogBuffer.setIsStopping();
mMainLogBuffer.shiftAndPublishAll();
- mMainResearchLog.close(null /* callback */);
+ mMainResearchLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
mMainLogBuffer = null;
}
if (mFeedbackLogBuffer != null) {
- mFeedbackLog.close(null /* callback */);
+ mFeedbackLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
mFeedbackLogBuffer = null;
}
}
- public boolean abort() {
+ public void abort() {
if (DEBUG) {
Log.d(TAG, "abort called");
}
- boolean didAbortMainLog = false;
if (mMainLogBuffer != null) {
mMainLogBuffer.clear();
- try {
- didAbortMainLog = mMainResearchLog.blockingAbort();
- } catch (InterruptedException e) {
- // Don't know whether this succeeded or not. We assume not; this is reported
- // to the caller.
- }
+ mMainResearchLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
mMainLogBuffer = null;
}
- boolean didAbortFeedbackLog = false;
if (mFeedbackLogBuffer != null) {
mFeedbackLogBuffer.clear();
- try {
- didAbortFeedbackLog = mFeedbackLog.blockingAbort();
- } catch (InterruptedException e) {
- // Don't know whether this succeeded or not. We assume not; this is reported
- // to the caller.
- }
+ mFeedbackLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
mFeedbackLogBuffer = null;
}
- return didAbortMainLog && didAbortFeedbackLog;
}
private void restart() {
@@ -620,7 +610,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private void startRecordingInternal() {
if (mUserRecordingLog != null) {
- mUserRecordingLog.abort();
+ mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
}
mUserRecordingFile = createUserRecordingFile(mFilesDir);
mUserRecordingLog = new ResearchLog(mUserRecordingFile, mLatinIME);
@@ -658,7 +648,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private void cancelRecording() {
if (mUserRecordingLog != null) {
- mUserRecordingLog.abort();
+ mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
}
mUserRecordingLog = null;
mUserRecordingLogBuffer = null;
@@ -670,7 +660,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private void saveRecording() {
commitCurrentLogUnit();
publishLogBuffer(mUserRecordingLogBuffer, mUserRecordingLog, true);
- mUserRecordingLog.close(null);
+ mUserRecordingLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
mUserRecordingLog = null;
mUserRecordingLogBuffer = null;
@@ -782,12 +772,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
feedbackContents, accountName, recording);
mFeedbackLogBuffer.shiftIn(feedbackLogUnit);
publishLogBuffer(mFeedbackLogBuffer, mSavedFeedbackLog, true /* isIncludingPrivateData */);
- mSavedFeedbackLog.close(new Runnable() {
- @Override
- public void run() {
- uploadNow();
- }
- });
+ mSavedFeedbackLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
+ uploadNow();
if (isIncludingRecording && DEBUG_REPLAY_AFTER_FEEDBACK) {
final Handler handler = new Handler();