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/src/com/android/inputmethod/latin/DebugSettings.java2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java5
-rw-r--r--java/src/com/android/inputmethod/latin/LatinImeLogger.java4
-rw-r--r--java/src/com/android/inputmethod/latin/Utils.java3
-rw-r--r--java/src/com/android/inputmethod/latin/define/ProductionFlag.java2
-rw-r--r--java/src/com/android/inputmethod/research/LogUnit.java3
-rw-r--r--java/src/com/android/inputmethod/research/MainLogBuffer.java19
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLog.java98
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogger.java179
-rw-r--r--java/src/com/android/inputmethod/research/ResearchSettings.java61
-rw-r--r--java/src/com/android/inputmethod/research/Uploader.java180
-rw-r--r--java/src/com/android/inputmethod/research/UploaderService.java175
61 files changed, 426 insertions, 861 deletions
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index dc6fdf262..4daf46568 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -108,17 +108,6 @@
<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 1907dc962..d1fe341b9 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -108,17 +108,6 @@
<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 1268f4395..bca3c2aa3 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -108,17 +108,6 @@
<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 6fc28e573..56382e42e 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -108,17 +108,6 @@
<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 76bd2d15b..3ffebea48 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -108,17 +108,6 @@
<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>
@@ -141,7 +130,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 ed883334c..26527381f 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -108,17 +108,6 @@
<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 b924dad60..7e12f06d8 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -108,17 +108,6 @@
<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 58ee41b1f..3ea4aaaef 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -108,17 +108,6 @@
<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 ce620f0c3..a50cdf0d0 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -108,17 +108,6 @@
<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 1294df031..153dbbbf4 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -108,17 +108,6 @@
<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 9e7d64f73..5fbbdf667 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -108,17 +108,6 @@
<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 7585b28e6..71841f805 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -108,17 +108,6 @@
<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 42427fe5c..9b31884a2 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -108,17 +108,6 @@
<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 51eb47bcd..3364abe5e 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -108,17 +108,6 @@
<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 8f71f1912..54ba41256 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -112,17 +112,6 @@
<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 9fe8f1b0b..2d754023c 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -108,17 +108,6 @@
<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 8b2287415..f327f90f9 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -108,17 +108,6 @@
<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 77081bd99..e52143dc6 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -108,17 +108,6 @@
<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 0710d307e..564d48f14 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -108,17 +108,6 @@
<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 e9c7aa018..047a31a6c 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -108,17 +108,6 @@
<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 d5732545e..ba9a7da4c 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -108,17 +108,6 @@
<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 0a62f8ad4..56acdf8ce 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -108,17 +108,6 @@
<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 33d9fc57e..7c55ab569 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -108,17 +108,6 @@
<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 25b37a4b4..9328f0184 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -108,17 +108,6 @@
<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 3b0228a88..f6086eed5 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -108,17 +108,6 @@
<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 9bfffbc52..a815003b2 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -108,17 +108,6 @@
<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 5dcaa0100..6a408cfce 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -108,17 +108,6 @@
<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 4866fed8f..0d4ccf42d 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -108,17 +108,6 @@
<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 32793ef8c..f0b3a4623 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -108,17 +108,6 @@
<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 4822617f4..dc3a9c3f4 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -108,22 +108,11 @@
<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">"Microfoon op hoofdtoetsenbord"</string>
+ <string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic op hoofdtoetsb."</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 7bb8b772f..de100bc86 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -108,17 +108,6 @@
<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 caa4019ba..68a34574f 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -108,17 +108,6 @@
<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 ed8cdec38..00ab88ced 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -108,17 +108,6 @@
<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 5dad59fc2..9eec7f883 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -187,28 +187,6 @@
<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 5fbcbe5a3..c5a80e397 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -108,17 +108,6 @@
<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 c21bbf918..13a567808 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -108,17 +108,6 @@
<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 aad236ee2..0b28bf193 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -108,17 +108,6 @@
<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 a93bf0a41..50f3869d4 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -108,17 +108,6 @@
<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 8450da15b..2d13db099 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -108,17 +108,6 @@
<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 be278fa2d..608caad17 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -108,17 +108,6 @@
<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 1fc92fb3e..104a5d42e 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -108,17 +108,6 @@
<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 84c4a0327..1db5e91cd 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -108,17 +108,6 @@
<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 e2a59a43b..adf0a1982 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -108,17 +108,6 @@
<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 c78d56b55..fd80fea5b 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -108,17 +108,6 @@
<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 2b92d03ec..2e2fdfcff 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -108,17 +108,6 @@
<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>
@@ -141,7 +130,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 2dcfb1941..6721980cf 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -108,17 +108,6 @@
<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 3e4777639..ebb6b9161 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -108,17 +108,6 @@
<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 ab6c66402..7d4ea72eb 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -108,17 +108,6 @@
<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 677588b4f..29ed595b7 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -108,17 +108,6 @@
<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/src/com/android/inputmethod/latin/DebugSettings.java b/java/src/com/android/inputmethod/latin/DebugSettings.java
index 7df266ef2..c2aade64d 100644
--- a/java/src/com/android/inputmethod/latin/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/DebugSettings.java
@@ -57,7 +57,7 @@ public final class DebugSettings extends PreferenceFragment
if (usabilityStudyPref instanceof CheckBoxPreference) {
final CheckBoxPreference checkbox = (CheckBoxPreference)usabilityStudyPref;
checkbox.setChecked(prefs.getBoolean(PREF_USABILITY_STUDY_MODE,
- ResearchLogger.DEFAULT_USABILITY_STUDY_MODE));
+ LatinImeLogger.getUsabilityStudyMode(prefs)));
checkbox.setSummary(R.string.settings_warning_researcher_mode);
}
final Preference statisticsLoggingPref = findPreference(PREF_STATISTICS_LOGGING);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e3a53068a..e7c64c695 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -428,7 +428,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
initSuggest();
if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.getInstance().init(this, mKeyboardSwitcher);
+ ResearchLogger.getInstance().init(this, mKeyboardSwitcher, mSuggest);
}
mDisplayOrientation = getResources().getConfiguration().orientation;
@@ -563,6 +563,9 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
}
mSettings.onDestroy();
unregisterReceiver(mReceiver);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ ResearchLogger.getInstance().onDestroy();
+ }
// TODO: The experimental version is not supported by the Dictionary Pack Service yet.
if (!ProductionFlag.IS_EXPERIMENTAL) {
unregisterReceiver(mDictionaryPackInstallReceiver);
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index e4e8b94b2..3f2b0a3f4 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -37,6 +37,10 @@ public final class LatinImeLogger implements SharedPreferences.OnSharedPreferenc
public static void commit() {
}
+ public static boolean getUsabilityStudyMode(final SharedPreferences prefs) {
+ return false;
+ }
+
public static void onDestroy() {
}
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index acfcd5354..7a604dc6a 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -28,6 +28,7 @@ import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
+import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.io.BufferedReader;
@@ -77,6 +78,7 @@ public final class Utils {
private RingCharBuffer() {
// Intentional empty constructor for singleton.
}
+ @UsedForTesting
public static RingCharBuffer getInstance() {
return sRingCharBuffer;
}
@@ -93,6 +95,7 @@ public final class Utils {
return ret < 0 ? ret + BUFSIZE : ret;
}
// TODO: accept code points
+ @UsedForTesting
public void push(char c, int x, int y) {
if (!mEnabled) return;
mCharBuf[mEnd] = c;
diff --git a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
index 8e93eda39..3df0d044e 100644
--- a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
+++ b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
@@ -28,5 +28,5 @@ public final class ProductionFlag {
// for any released build.
public static final boolean IS_EXPERIMENTAL_DEBUG = false;
- public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = false;
+ public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = true;
}
diff --git a/java/src/com/android/inputmethod/research/LogUnit.java b/java/src/com/android/inputmethod/research/LogUnit.java
index e91976a03..839e2b7ba 100644
--- a/java/src/com/android/inputmethod/research/LogUnit.java
+++ b/java/src/com/android/inputmethod/research/LogUnit.java
@@ -16,7 +16,6 @@
package com.android.inputmethod.research;
-import android.content.SharedPreferences;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.JsonWriter;
@@ -45,7 +44,7 @@ import java.util.List;
* will not violate the user's privacy. Checks for this may include whether other LogUnits have
* been published recently, or whether the LogUnit contains numbers, etc.
*/
-/* package */ class LogUnit {
+public class LogUnit {
private static final String TAG = LogUnit.class.getSimpleName();
private static final boolean DEBUG = false && ProductionFlag.IS_EXPERIMENTAL_DEBUG;
diff --git a/java/src/com/android/inputmethod/research/MainLogBuffer.java b/java/src/com/android/inputmethod/research/MainLogBuffer.java
index 45b83dd76..9aa60f859 100644
--- a/java/src/com/android/inputmethod/research/MainLogBuffer.java
+++ b/java/src/com/android/inputmethod/research/MainLogBuffer.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.research;
import android.util.Log;
+import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.Suggest;
import com.android.inputmethod.latin.define.ProductionFlag;
@@ -64,7 +65,11 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// The size of the n-grams logged. E.g. N_GRAM_SIZE = 2 means to sample bigrams.
public static final int N_GRAM_SIZE = 2;
- private Suggest mSuggest;
+ // TODO: Remove dependence on Suggest, and pass in Dictionary as a parameter to an appropriate
+ // method.
+ private final Suggest mSuggest;
+ @UsedForTesting
+ private Dictionary mDictionaryForTesting;
private boolean mIsStopping = false;
/* package for test */ int mNumWordsBetweenNGrams;
@@ -73,17 +78,23 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// after a sample is taken.
/* package for test */ int mNumWordsUntilSafeToSample;
- public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore) {
+ public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore,
+ final Suggest suggest) {
super(N_GRAM_SIZE + wordsBetweenSamples);
mNumWordsBetweenNGrams = wordsBetweenSamples;
mNumWordsUntilSafeToSample = DEBUG ? 0 : numInitialWordsToIgnore;
+ mSuggest = suggest;
}
- public void setSuggest(final Suggest suggest) {
- mSuggest = suggest;
+ @UsedForTesting
+ /* package for test */ void setDictionaryForTesting(final Dictionary dictionary) {
+ mDictionaryForTesting = dictionary;
}
private Dictionary getDictionary() {
+ if (mDictionaryForTesting != null) {
+ return mDictionaryForTesting;
+ }
if (mSuggest == null || !mSuggest.hasMainDictionary()) return null;
return mSuggest.getMainDictionary();
}
diff --git a/java/src/com/android/inputmethod/research/ResearchLog.java b/java/src/com/android/inputmethod/research/ResearchLog.java
index 99d84938f..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;
@@ -38,16 +38,22 @@ import java.util.concurrent.TimeUnit;
/**
* Logs the use of the LatinIME keyboard.
*
- * This class logs operations on the IME keyboard, including what the user has typed.
- * Data is stored locally in a file in app-specific storage.
+ * This class logs operations on the IME keyboard, including what the user has typed. Data is
+ * written to a {@link JsonWriter}, which will write to a local file.
+ *
+ * The JsonWriter is created on-demand by calling {@link #getInitializedJsonWriterLocked}.
+ *
+ * This class uses an executor to perform file-writing operations on a separate thread. It also
+ * tries to avoid creating unnecessary files if there is nothing to write. It also handles
+ * flushing, making sure it happens, but not too frequently.
*
* This functionality is off by default. See {@link ProductionFlag#IS_EXPERIMENTAL}.
*/
public class ResearchLog {
+ // TODO: Automatically initialize the JsonWriter rather than requiring the caller to manage it.
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;
@@ -87,27 +93,30 @@ public class ResearchLog {
mContext = context;
}
- public synchronized void close(final Runnable onClosed) {
+ /**
+ * Waits for any publication requests to finish and closes the {@link JsonWriter} used for
+ * output.
+ *
+ * See class comment for details about {@code JsonWriter} construction.
+ *
+ * @param onClosed run after the close() operation has completed asynchronously
+ */
+ private synchronized void close(final Runnable onClosed) {
mExecutor.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
try {
if (mHasWrittenData) {
mJsonWriter.endArray();
- mJsonWriter.flush();
- mJsonWriter.close();
- if (DEBUG) {
- Log.d(TAG, "wrote log to " + mFile);
- }
mHasWrittenData = false;
- } else {
- if (DEBUG) {
- Log.d(TAG, "close() called, but no data, not outputting");
- }
+ }
+ mJsonWriter.flush();
+ mJsonWriter.close();
+ if (DEBUG) {
+ Log.d(TAG, "wrote log to " + mFile);
}
} catch (Exception e) {
- Log.d(TAG, "error when closing ResearchLog:");
- e.printStackTrace();
+ Log.d(TAG, "error when closing ResearchLog:", e);
} finally {
if (mFile != null && mFile.exists()) {
mFile.setWritable(false, false);
@@ -123,9 +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);
+ }
- public synchronized void abort() {
+ /**
+ * Waits for publication requests to finish, closes the JsonWriter, but then deletes the backing
+ * output file.
+ *
+ * @param onAbort run after the abort() operation has completed asynchronously
+ */
+ private synchronized void abort(final Runnable onAbort) {
mExecutor.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
@@ -137,7 +161,10 @@ public class ResearchLog {
}
} finally {
if (mFile != null) {
- mIsAbortSuccessful = mFile.delete();
+ mFile.delete();
+ }
+ if (onAbort != null) {
+ onAbort.run();
}
}
return null;
@@ -147,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() {
@@ -184,6 +222,12 @@ public class ResearchLog {
mFlushFuture = mExecutor.schedule(mFlushCallable, FLUSH_DELAY_IN_MS, TimeUnit.MILLISECONDS);
}
+ /**
+ * Queues up {@code logUnit} to be published in the background.
+ *
+ * @param logUnit the {@link LogUnit} to be published
+ * @param canIncludePrivateData whether private data in the LogUnit should be included
+ */
public synchronized void publish(final LogUnit logUnit, final boolean canIncludePrivateData) {
try {
mExecutor.submit(new Callable<Object>() {
@@ -194,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 25633d630..11d1a5222 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -122,11 +122,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// field holds a channel name, the developer does not have to re-enter it when using the
// feedback mechanism to generate multiple tests.
private static final boolean FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD = false;
- public static final boolean DEFAULT_USABILITY_STUDY_MODE = false;
/* package */ static boolean sIsLogging = false;
private static final int OUTPUT_FORMAT_VERSION = 5;
private static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
- private static final String PREF_RESEARCH_HAS_SEEN_SPLASH = "pref_research_has_seen_splash";
/* package */ static final String LOG_FILENAME_PREFIX = "researchLog";
private static final String LOG_FILENAME_SUFFIX = ".txt";
/* package */ static final String USER_RECORDING_FILENAME_PREFIX = "recording";
@@ -154,15 +152,16 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// constants related to specific log points
private static final String WHITESPACE_SEPARATORS = " \t\n\r";
private static final int MAX_INPUTVIEW_LENGTH_TO_CAPTURE = 8192; // must be >=1
- private static final String PREF_RESEARCH_LOGGER_UUID_STRING = "pref_research_logger_uuid";
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;
// to write to a different filename, e.g., for testing, set mFile before calling start()
/* package */ File mFilesDir;
- /* package */ String mUUIDString;
/* package */ ResearchLog mMainResearchLog;
// mFeedbackLog records all events for the session, private or not (excepting
// passwords). It is written to permanent storage only if the user explicitly commands
@@ -208,7 +207,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private Intent mUploadIntent;
private Intent mUploadNowIntent;
- private LogUnit mCurrentLogUnit = new LogUnit();
+ /* package for test */ LogUnit mCurrentLogUnit = new LogUnit();
// Gestured or tapped words may be committed after the gesture of the next word has started.
// To ensure that the gesture data of the next word is not associated with the previous word,
@@ -237,50 +236,44 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
return sInstance;
}
- public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher) {
+ public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher,
+ final Suggest suggest) {
assert latinIME != null;
- if (latinIME == null) {
- Log.w(TAG, "IMS is null; logging is off");
- } else {
- mFilesDir = latinIME.getFilesDir();
- if (mFilesDir == null || !mFilesDir.exists()) {
- Log.w(TAG, "IME storage directory does not exist.");
- }
- }
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(latinIME);
- if (prefs != null) {
- mUUIDString = getUUID(prefs);
- if (!prefs.contains(PREF_USABILITY_STUDY_MODE)) {
- Editor e = prefs.edit();
- e.putBoolean(PREF_USABILITY_STUDY_MODE, DEFAULT_USABILITY_STUDY_MODE);
- e.apply();
- }
- sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
- prefs.registerOnSharedPreferenceChangeListener(this);
-
- final long lastCleanupTime = prefs.getLong(PREF_LAST_CLEANUP_TIME, 0L);
- final long now = System.currentTimeMillis();
- if (lastCleanupTime + DURATION_BETWEEN_DIR_CLEANUP_IN_MS < now) {
- final long timeHorizon = now - MAX_LOGFILE_AGE_IN_MS;
- cleanupLoggingDir(mFilesDir, timeHorizon);
- Editor e = prefs.edit();
- e.putLong(PREF_LAST_CLEANUP_TIME, now);
- e.apply();
- }
+ mLatinIME = latinIME;
+ mFilesDir = latinIME.getFilesDir();
+ if (mFilesDir == null || !mFilesDir.exists()) {
+ Log.w(TAG, "IME storage directory does not exist. Cannot start logging.");
+ return;
}
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(latinIME);
+ mPrefs.registerOnSharedPreferenceChangeListener(this);
+
+ // Initialize fields from preferences
+ sIsLogging = ResearchSettings.readResearchLoggerEnabledFlag(mPrefs);
+
+ // Initialize fields from resources
final Resources res = latinIME.getResources();
sAccountType = res.getString(R.string.research_account_type);
sAllowedAccountDomain = res.getString(R.string.research_allowed_account_domain);
- mLatinIME = latinIME;
- mPrefs = prefs;
+
+ // Cleanup logging directory
+ // TODO: Move this and other file-related components to separate file.
+ final long lastCleanupTime = mPrefs.getLong(PREF_LAST_CLEANUP_TIME, 0L);
+ final long now = System.currentTimeMillis();
+ if (now - lastCleanupTime > DURATION_BETWEEN_DIR_CLEANUP_IN_MS) {
+ final long timeHorizon = now - MAX_LOGFILE_AGE_IN_MS;
+ cleanupLoggingDir(mFilesDir, timeHorizon);
+ mPrefs.edit().putLong(PREF_LAST_CLEANUP_TIME, now).apply();
+ }
+
+ // Initialize external services
mUploadIntent = new Intent(mLatinIME, UploaderService.class);
mUploadNowIntent = new Intent(mLatinIME, UploaderService.class);
mUploadNowIntent.putExtra(UploaderService.EXTRA_UPLOAD_UNCONDITIONALLY, true);
- mReplayer.setKeyboardSwitcher(keyboardSwitcher);
-
if (ProductionFlag.IS_EXPERIMENTAL) {
scheduleUploadingService(mLatinIME);
}
+ mReplayer.setKeyboardSwitcher(keyboardSwitcher);
}
/**
@@ -322,14 +315,16 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mMainKeyboardView = null;
}
- private boolean hasSeenSplash() {
- return mPrefs.getBoolean(PREF_RESEARCH_HAS_SEEN_SPLASH, false);
+ public void onDestroy() {
+ if (mPrefs != null) {
+ mPrefs.unregisterOnSharedPreferenceChangeListener(this);
+ }
}
private Dialog mSplashDialog = null;
private void maybeShowSplashScreen() {
- if (hasSeenSplash()) {
+ if (ResearchSettings.readHasSeenSplash(mPrefs)) {
return;
}
if (mSplashDialog != null && mSplashDialog.isShowing()) {
@@ -382,32 +377,23 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
public void onUserLoggingConsent() {
- setLoggingAllowed(true);
if (mPrefs == null) {
- return;
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
+ if (mPrefs == null) return;
}
- final Editor e = mPrefs.edit();
- e.putBoolean(PREF_RESEARCH_HAS_SEEN_SPLASH, true);
- e.apply();
+ sIsLogging = true;
+ ResearchSettings.writeResearchLoggerEnabledFlag(mPrefs, true);
+ ResearchSettings.writeHasSeenSplash(mPrefs, true);
restart();
}
- private void setLoggingAllowed(boolean enableLogging) {
- if (mPrefs == null) {
- return;
- }
- Editor e = mPrefs.edit();
- e.putBoolean(PREF_USABILITY_STUDY_MODE, enableLogging);
- e.apply();
- sIsLogging = enableLogging;
- }
-
private static int sLogFileCounter = 0;
private File createLogFile(final File filesDir) {
final StringBuilder sb = new StringBuilder();
sb.append(LOG_FILENAME_PREFIX).append('-');
- sb.append(mUUIDString).append('-');
+ final String uuid = ResearchSettings.readResearchLoggerUuid(mPrefs);
+ sb.append(uuid).append('-');
sb.append(TIMESTAMP_DATEFORMAT.format(new Date())).append('-');
// Sometimes logFiles are created within milliseconds of each other. Append a counter to
// separate these.
@@ -425,7 +411,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private File createUserRecordingFile(final File filesDir) {
final StringBuilder sb = new StringBuilder();
sb.append(USER_RECORDING_FILENAME_PREFIX).append('-');
- sb.append(mUUIDString).append('-');
+ final String uuid = ResearchSettings.readResearchLoggerUuid(mPrefs);
+ sb.append(uuid).append('-');
sb.append(TIMESTAMP_DATEFORMAT.format(new Date()));
sb.append(USER_RECORDING_FILENAME_SUFFIX);
return new File(filesDir, sb.toString());
@@ -467,14 +454,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// Log.w(TAG, "not in usability mode; not logging");
return;
}
- if (mFilesDir == null || !mFilesDir.exists()) {
- Log.w(TAG, "IME storage directory does not exist. Cannot start logging.");
- return;
- }
if (mMainLogBuffer == null) {
mMainResearchLog = new ResearchLog(createLogFile(mFilesDir), mLatinIME);
final int numWordsToIgnore = new Random().nextInt(NUMBER_OF_WORDS_BETWEEN_SAMPLES + 1);
- mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore) {
+ mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore,
+ mSuggest) {
@Override
protected void publish(final ArrayList<LogUnit> logUnits,
boolean canIncludePrivateData) {
@@ -497,7 +481,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
};
- mMainLogBuffer.setSuggest(mSuggest);
}
if (mFeedbackLogBuffer == null) {
resetFeedbackLogging();
@@ -522,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() {
@@ -574,7 +544,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
@Override
- public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
if (key == null || prefs == null) {
return;
}
@@ -596,7 +566,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
presentFeedbackDialog(latinIME);
}
- public void presentFeedbackDialog(LatinIME latinIME) {
+ public void presentFeedbackDialog(final LatinIME latinIME) {
if (isMakingUserRecording()) {
saveRecording();
}
@@ -640,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);
@@ -678,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;
@@ -690,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;
@@ -802,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();
@@ -828,9 +794,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
if (mPrefs == null) {
return;
}
- final Editor e = mPrefs.edit();
- e.putString(PREF_RESEARCH_SAVED_CHANNEL, channelName);
- e.apply();
+ mPrefs.edit().putString(PREF_RESEARCH_SAVED_CHANNEL, channelName).apply();
}
}
@@ -845,10 +809,13 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mInFeedbackDialog = false;
}
- public void initSuggest(Suggest suggest) {
+ public void initSuggest(final Suggest suggest) {
mSuggest = suggest;
+ // MainLogBuffer has out-of-date Suggest object. Need to close it down and create a new
+ // one.
if (mMainLogBuffer != null) {
- mMainLogBuffer.setSuggest(mSuggest);
+ stop();
+ start();
}
}
@@ -1137,18 +1104,6 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
- private static String getUUID(final SharedPreferences prefs) {
- String uuidString = prefs.getString(PREF_RESEARCH_LOGGER_UUID_STRING, null);
- if (null == uuidString) {
- UUID uuid = UUID.randomUUID();
- uuidString = uuid.toString();
- Editor editor = prefs.edit();
- editor.putString(PREF_RESEARCH_LOGGER_UUID_STRING, uuidString);
- editor.apply();
- }
- return uuidString;
- }
-
private String scrubWord(String word) {
final Dictionary dictionary = getDictionary();
if (dictionary == null) {
@@ -1195,9 +1150,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
0);
final Integer versionCode = packageInfo.versionCode;
final String versionName = packageInfo.versionName;
+ final String uuid = ResearchSettings.readResearchLoggerUuid(researchLogger.mPrefs);
researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL,
- researchLogger.mUUIDString, editorInfo.packageName,
- Integer.toHexString(editorInfo.inputType),
+ uuid, editorInfo.packageName, Integer.toHexString(editorInfo.inputType),
Integer.toHexString(editorInfo.imeOptions), editorInfo.fieldId,
Build.DISPLAY, Build.MODEL, prefs, versionCode, versionName,
OUTPUT_FORMAT_VERSION, IS_LOGGING_EVERYTHING,
diff --git a/java/src/com/android/inputmethod/research/ResearchSettings.java b/java/src/com/android/inputmethod/research/ResearchSettings.java
new file mode 100644
index 000000000..11e9ac77a
--- /dev/null
+++ b/java/src/com/android/inputmethod/research/ResearchSettings.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.inputmethod.research;
+
+import android.content.SharedPreferences;
+
+import java.util.UUID;
+
+public final class ResearchSettings {
+ public static final String PREF_RESEARCH_LOGGER_UUID = "pref_research_logger_uuid";
+ public static final String PREF_RESEARCH_LOGGER_ENABLED_FLAG =
+ "pref_research_logger_enabled_flag";
+ public static final String PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH =
+ "pref_research_logger_has_seen_splash";
+
+ private ResearchSettings() {
+ // Intentional empty constructor for singleton.
+ }
+
+ public static String readResearchLoggerUuid(final SharedPreferences prefs) {
+ if (prefs.contains(PREF_RESEARCH_LOGGER_UUID)) {
+ return prefs.getString(PREF_RESEARCH_LOGGER_UUID, null);
+ }
+ // Generate a random string as uuid if not yet set
+ final String newUuid = UUID.randomUUID().toString();
+ prefs.edit().putString(PREF_RESEARCH_LOGGER_UUID, newUuid).apply();
+ return newUuid;
+ }
+
+ public static boolean readResearchLoggerEnabledFlag(final SharedPreferences prefs) {
+ return prefs.getBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, false);
+ }
+
+ public static void writeResearchLoggerEnabledFlag(final SharedPreferences prefs,
+ final boolean isEnabled) {
+ prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, isEnabled).apply();
+ }
+
+ public static boolean readHasSeenSplash(final SharedPreferences prefs) {
+ return prefs.getBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, false);
+ }
+
+ public static void writeHasSeenSplash(final SharedPreferences prefs,
+ final boolean hasSeenSplash) {
+ prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, hasSeenSplash).apply();
+ }
+}
diff --git a/java/src/com/android/inputmethod/research/Uploader.java b/java/src/com/android/inputmethod/research/Uploader.java
new file mode 100644
index 000000000..df495a88d
--- /dev/null
+++ b/java/src/com/android/inputmethod/research/Uploader.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.inputmethod.research;
+
+import android.Manifest;
+import android.app.AlarmManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.BatteryManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.define.ProductionFlag;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Manages the uploading of ResearchLog files.
+ */
+public final class Uploader {
+ private static final String TAG = Uploader.class.getSimpleName();
+ private static final boolean DEBUG = false && ProductionFlag.IS_EXPERIMENTAL_DEBUG;
+ // Set IS_INHIBITING_AUTO_UPLOAD to true for local testing
+ private static final boolean IS_INHIBITING_AUTO_UPLOAD = false
+ && ProductionFlag.IS_EXPERIMENTAL_DEBUG; // Force false for non-debug builds
+ private static final int BUF_SIZE = 1024 * 8;
+
+ private final Context mContext;
+ private final File mFilesDir;
+ private final URL mUrl;
+
+ public Uploader(final Context context) {
+ mContext = context;
+ mFilesDir = context.getFilesDir();
+
+ final String urlString = context.getString(R.string.research_logger_upload_url);
+ if (TextUtils.isEmpty(urlString)) {
+ mUrl = null;
+ return;
+ }
+ URL url = null;
+ try {
+ url = new URL(urlString);
+ } catch (final MalformedURLException e) {
+ Log.e(TAG, "Bad URL for uploading", e);
+ }
+ mUrl = url;
+ }
+
+ public boolean isPossibleToUpload() {
+ return hasUploadingPermission() && mUrl != null && !IS_INHIBITING_AUTO_UPLOAD;
+ }
+
+ private boolean hasUploadingPermission() {
+ final PackageManager packageManager = mContext.getPackageManager();
+ return packageManager.checkPermission(Manifest.permission.INTERNET,
+ mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED;
+ }
+
+ public boolean isConvenientToUpload() {
+ return isExternallyPowered() && hasWifiConnection();
+ }
+
+ private boolean isExternallyPowered() {
+ final Intent intent = mContext.registerReceiver(null, new IntentFilter(
+ Intent.ACTION_BATTERY_CHANGED));
+ final int pluggedState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ return pluggedState == BatteryManager.BATTERY_PLUGGED_AC
+ || pluggedState == BatteryManager.BATTERY_PLUGGED_USB;
+ }
+
+ private boolean hasWifiConnection() {
+ final ConnectivityManager manager =
+ (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ final NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+ return wifiInfo.isConnected();
+ }
+
+ public void doUpload() {
+ if (mFilesDir == null) {
+ return;
+ }
+ final File[] files = mFilesDir.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(final File pathname) {
+ return pathname.getName().startsWith(ResearchLogger.LOG_FILENAME_PREFIX)
+ && !pathname.canWrite();
+ }
+ });
+ for (final File file : files) {
+ uploadFile(file);
+ }
+ }
+
+ private void uploadFile(final File file) {
+ if (DEBUG) {
+ Log.d(TAG, "attempting upload of " + file.getAbsolutePath());
+ }
+ final int contentLength = (int) file.length();
+ HttpURLConnection connection = null;
+ InputStream fileInputStream = null;
+ try {
+ fileInputStream = new FileInputStream(file);
+ connection = (HttpURLConnection) mUrl.openConnection();
+ connection.setRequestMethod("PUT");
+ connection.setDoOutput(true);
+ connection.setFixedLengthStreamingMode(contentLength);
+ final OutputStream outputStream = connection.getOutputStream();
+ uploadContents(fileInputStream, outputStream);
+ if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
+ Log.d(TAG, "upload failed: " + connection.getResponseCode());
+ final InputStream netInputStream = connection.getInputStream();
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(
+ netInputStream));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ Log.d(TAG, "| " + reader.readLine());
+ }
+ reader.close();
+ return;
+ }
+ file.delete();
+ if (DEBUG) {
+ Log.d(TAG, "upload successful");
+ }
+ } catch (final IOException e) {
+ Log.e(TAG, "Exception uploading file", e);
+ } finally {
+ if (fileInputStream != null) {
+ try {
+ fileInputStream.close();
+ } catch (final IOException e) {
+ Log.e(TAG, "Exception closing uploaded file", e);
+ }
+ }
+ if (connection != null) {
+ connection.disconnect();
+ }
+ }
+ }
+
+ private static void uploadContents(final InputStream is, final OutputStream os)
+ throws IOException {
+ // TODO: Switch to NIO.
+ final byte[] buf = new byte[BUF_SIZE];
+ int numBytesRead;
+ while ((numBytesRead = is.read(buf)) != -1) {
+ os.write(buf, 0, numBytesRead);
+ }
+ }
+}
diff --git a/java/src/com/android/inputmethod/research/UploaderService.java b/java/src/com/android/inputmethod/research/UploaderService.java
index 89c67fbb2..26b651056 100644
--- a/java/src/com/android/inputmethod/research/UploaderService.java
+++ b/java/src/com/android/inputmethod/research/UploaderService.java
@@ -16,189 +16,44 @@
package com.android.inputmethod.research;
-import android.Manifest;
import android.app.AlarmManager;
import android.app.IntentService;
-import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.BatteryManager;
import android.os.Bundle;
-import android.util.Log;
-import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.define.ProductionFlag;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-
+/**
+ * Service to invoke the uploader.
+ *
+ * Can be regularly invoked, invoked on boot, etc.
+ */
public final class UploaderService extends IntentService {
private static final String TAG = UploaderService.class.getSimpleName();
private static final boolean DEBUG = false && ProductionFlag.IS_EXPERIMENTAL_DEBUG;
- // Set IS_INHIBITING_AUTO_UPLOAD to true for local testing
- private static final boolean IS_INHIBITING_AUTO_UPLOAD = false
- && ProductionFlag.IS_EXPERIMENTAL_DEBUG; // Force false in production
public static final long RUN_INTERVAL = AlarmManager.INTERVAL_HOUR;
public static final String EXTRA_UPLOAD_UNCONDITIONALLY = UploaderService.class.getName()
+ ".extra.UPLOAD_UNCONDITIONALLY";
- private static final int BUF_SIZE = 1024 * 8;
protected static final int TIMEOUT_IN_MS = 1000 * 4;
- private boolean mCanUpload;
- private File mFilesDir;
- private URL mUrl;
-
public UploaderService() {
super("Research Uploader Service");
}
@Override
- public void onCreate() {
- super.onCreate();
-
- mCanUpload = false;
- mFilesDir = null;
- mUrl = null;
-
- final PackageManager packageManager = getPackageManager();
- final boolean hasPermission = packageManager.checkPermission(Manifest.permission.INTERNET,
- getPackageName()) == PackageManager.PERMISSION_GRANTED;
- if (!hasPermission) {
- return;
- }
-
- try {
- final String urlString = getString(R.string.research_logger_upload_url);
- if (urlString == null || urlString.equals("")) {
- return;
- }
- mFilesDir = getFilesDir();
- mUrl = new URL(urlString);
- mCanUpload = true;
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- if (!mCanUpload) {
- return;
- }
- boolean isUploadingUnconditionally = false;
- Bundle bundle = intent.getExtras();
- if (bundle != null && bundle.containsKey(EXTRA_UPLOAD_UNCONDITIONALLY)) {
- isUploadingUnconditionally = bundle.getBoolean(EXTRA_UPLOAD_UNCONDITIONALLY);
- }
- doUpload(isUploadingUnconditionally);
- }
-
- private boolean isExternallyPowered() {
- final Intent intent = registerReceiver(null, new IntentFilter(
- Intent.ACTION_BATTERY_CHANGED));
- final int pluggedState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
- return pluggedState == BatteryManager.BATTERY_PLUGGED_AC
- || pluggedState == BatteryManager.BATTERY_PLUGGED_USB;
- }
-
- private boolean hasWifiConnection() {
- final ConnectivityManager manager =
- (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- return wifiInfo.isConnected();
- }
-
- private void doUpload(final boolean isUploadingUnconditionally) {
- if (!isUploadingUnconditionally && (!isExternallyPowered() || !hasWifiConnection()
- || IS_INHIBITING_AUTO_UPLOAD)) {
- return;
- }
- if (mFilesDir == null) {
- return;
- }
- final File[] files = mFilesDir.listFiles(new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- return pathname.getName().startsWith(ResearchLogger.LOG_FILENAME_PREFIX)
- && !pathname.canWrite();
- }
- });
- boolean success = true;
- if (files.length == 0) {
- success = false;
- }
- for (final File file : files) {
- if (!uploadFile(file)) {
- success = false;
- }
+ protected void onHandleIntent(final Intent intent) {
+ final Uploader uploader = new Uploader(this);
+ if (!uploader.isPossibleToUpload()) return;
+ if (isUploadingUnconditionally(intent.getExtras()) || uploader.isConvenientToUpload()) {
+ uploader.doUpload();
}
}
- private boolean uploadFile(File file) {
- if (DEBUG) {
- Log.d(TAG, "attempting upload of " + file.getAbsolutePath());
- }
- boolean success = false;
- final int contentLength = (int) file.length();
- HttpURLConnection connection = null;
- InputStream fileInputStream = null;
- try {
- fileInputStream = new FileInputStream(file);
- connection = (HttpURLConnection) mUrl.openConnection();
- connection.setRequestMethod("PUT");
- connection.setDoOutput(true);
- connection.setFixedLengthStreamingMode(contentLength);
- final OutputStream os = connection.getOutputStream();
- final byte[] buf = new byte[BUF_SIZE];
- int numBytesRead;
- while ((numBytesRead = fileInputStream.read(buf)) != -1) {
- os.write(buf, 0, numBytesRead);
- if (DEBUG) {
- Log.d(TAG, new String(buf));
- }
- }
- if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
- Log.d(TAG, "upload failed: " + connection.getResponseCode());
- InputStream netInputStream = connection.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(netInputStream));
- String line;
- while ((line = reader.readLine()) != null) {
- Log.d(TAG, "| " + reader.readLine());
- }
- reader.close();
- return success;
- }
- file.delete();
- success = true;
- if (DEBUG) {
- Log.d(TAG, "upload successful");
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (fileInputStream != null) {
- try {
- fileInputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (connection != null) {
- connection.disconnect();
- }
+ private boolean isUploadingUnconditionally(final Bundle bundle) {
+ if (bundle == null) return false;
+ if (bundle.containsKey(EXTRA_UPLOAD_UNCONDITIONALLY)) {
+ return bundle.getBoolean(EXTRA_UPLOAD_UNCONDITIONALLY);
}
- return success;
+ return false;
}
}