diff options
Diffstat (limited to 'java')
102 files changed, 531 insertions, 490 deletions
diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml index 88e867f09..97f2d891a 100644 --- a/java/AndroidManifest.xml +++ b/java/AndroidManifest.xml @@ -133,13 +133,6 @@ </intent-filter> </receiver> - <receiver android:name=".personalization.DictionaryDecayBroadcastReciever" - android:exported="false"> - <intent-filter> - <action android:name="com.android.inputmethod.latin.personalization.DICT_DECAY" /> - </intent-filter> - </receiver> - <receiver android:name=".DictionaryPackInstallBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.android.inputmethod.dictionarypack.aosp.UNKNOWN_CLIENT" /> diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml index e2a720611..e473f1da6 100644 --- a/java/res/values-af/strings-talkback-descriptions.xml +++ b/java/res/values-af/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Geen teks is ingevoer nie"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> korrigeer <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> voer outokorrigering uit"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Onbekende karakter"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Meer simbole"</string> diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml index d916d51bb..5d0800343 100644 --- a/java/res/values-am/strings-talkback-descriptions.xml +++ b/java/res/values-am/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"ምንም ፅሁፍ አልገባም"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>ን ወደ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> ያርመዋል"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> የራስ ሰር እርማት ያከናውናል"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"ያልታወቀ ቁምፊ"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"ቀይር"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"ተጨማሪ ምልክቶች"</string> diff --git a/java/res/values-ar/strings-talkback-descriptions.xml b/java/res/values-ar/strings-talkback-descriptions.xml index 7051a73f3..49c4259ac 100644 --- a/java/res/values-ar/strings-talkback-descriptions.xml +++ b/java/res/values-ar/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"لم يتم إدخال نص"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> لتصحيح <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> إلى <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> لإجراء التصحيح التلقائي"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"حرف غير معروف"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"المزيد من الرموز"</string> diff --git a/java/res/values-az-rAZ/strings-talkback-descriptions.xml b/java/res/values-az-rAZ/strings-talkback-descriptions.xml index aa3c4e37d..1af9e623a 100644 --- a/java/res/values-az-rAZ/strings-talkback-descriptions.xml +++ b/java/res/values-az-rAZ/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Mətn daxil edilməyib"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> sözünü <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> sözü ilə əvəzləyərək düzəldir"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> avto-korreksiyanı həyata keçirir"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Naməlum simvol"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Sürüşdürmə"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Daha çox simvol"</string> diff --git a/java/res/values-bg/strings-talkback-descriptions.xml b/java/res/values-bg/strings-talkback-descriptions.xml index e206d1bd3..d08f3d787 100644 --- a/java/res/values-bg/strings-talkback-descriptions.xml +++ b/java/res/values-bg/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Няма въведен текст"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"„<xliff:g id="KEY_NAME">%1$s</xliff:g>“ коригира „<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>“ на „<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>“"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"„<xliff:g id="KEY_NAME">%1$s</xliff:g>“ изпълнява автоматично коригиране"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Неизвестен знак"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Още символи"</string> diff --git a/java/res/values-bn-rBD/strings-talkback-descriptions.xml b/java/res/values-bn-rBD/strings-talkback-descriptions.xml index 2e54793b8..198a45840 100644 --- a/java/res/values-bn-rBD/strings-talkback-descriptions.xml +++ b/java/res/values-bn-rBD/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"কোনো পাঠ্য লেখা হয়নি"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> কী <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> কে <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> এ সংশোধন করছে"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> স্বত:সংশোধন করে"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"অজানা অক্ষর"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"শিফ্ট"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"আরো প্রতীক"</string> diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml index bc944d781..d96fcd37f 100644 --- a/java/res/values-ca/strings-talkback-descriptions.xml +++ b/java/res/values-ca/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"No s\'ha introduït cap text."</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corregeix <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> per <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa la correcció automàtica."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caràcter desconegut"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Maj"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Més símbols"</string> diff --git a/java/res/values-cs/strings-talkback-descriptions.xml b/java/res/values-cs/strings-talkback-descriptions.xml index a52a64517..55b00df0f 100644 --- a/java/res/values-cs/strings-talkback-descriptions.xml +++ b/java/res/values-cs/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Není zadán žádný text"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Klávesou <xliff:g id="KEY_NAME">%1$s</xliff:g> opravíte <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Klávesou <xliff:g id="KEY_NAME">%1$s</xliff:g> provedete automatickou opravu"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Neznámý znak"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Další symboly"</string> diff --git a/java/res/values-da/strings-talkback-descriptions.xml b/java/res/values-da/strings-talkback-descriptions.xml index 0241092af..f5fb521cc 100644 --- a/java/res/values-da/strings-talkback-descriptions.xml +++ b/java/res/values-da/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Der er ingen indtastet tekst"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> retter <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> til <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> udfører automatisk stavekontrol"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Ukendt tegn"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Flere symboler"</string> @@ -38,7 +40,7 @@ <string name="spoken_description_settings" msgid="7281251004003143204">"Indstillinger"</string> <string name="spoken_description_tab" msgid="8210782459446866716">"Fane"</string> <string name="spoken_description_space" msgid="5908716896642059145">"Mellemrum"</string> - <string name="spoken_description_mic" msgid="6153138783813452464">"Taleinput"</string> + <string name="spoken_description_mic" msgid="6153138783813452464">"Indtaling"</string> <string name="spoken_description_emoji" msgid="7990051553008088470">"Emoji"</string> <string name="spoken_description_return" msgid="3183692287397645708">"Return"</string> <string name="spoken_description_search" msgid="5099937658231911288">"Søgning"</string> diff --git a/java/res/values-de/strings-talkback-descriptions.xml b/java/res/values-de/strings-talkback-descriptions.xml index 3085afe22..386376ba8 100644 --- a/java/res/values-de/strings-talkback-descriptions.xml +++ b/java/res/values-de/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Kein Text eingegeben"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Mit <xliff:g id="KEY_NAME">%1$s</xliff:g> wird \"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>\" in \"<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>\" geändert."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Mit <xliff:g id="KEY_NAME">%1$s</xliff:g> erfolgt eine Autokorrektur."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Unbekanntes Zeichen"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Umschalttaste"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Weitere Symbole"</string> diff --git a/java/res/values-el/strings-talkback-descriptions.xml b/java/res/values-el/strings-talkback-descriptions.xml index 1300a9578..bff8e2a0a 100644 --- a/java/res/values-el/strings-talkback-descriptions.xml +++ b/java/res/values-el/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Δεν υπάρχει κείμενο"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> διορθώνει το <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> σε <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> εκτελεί αυτόματη διόρθωση"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Άγνωστος χαρακτήρας"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Περισσότερα σύμβολα"</string> diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml index aa805c946..78c290545 100644 --- a/java/res/values-en-rGB/strings-talkback-descriptions.xml +++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"No text entered"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrects <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> to <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"No suggestion"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"Unknown character"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string> diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml index aa805c946..78c290545 100644 --- a/java/res/values-en-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"No text entered"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrects <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> to <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"No suggestion"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"Unknown character"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string> diff --git a/java/res/values-es-rUS/strings-talkback-descriptions.xml b/java/res/values-es-rUS/strings-talkback-descriptions.xml index 3860a9916..924a79b87 100644 --- a/java/res/values-es-rUS/strings-talkback-descriptions.xml +++ b/java/res/values-es-rUS/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"No se ingresó texto."</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> por <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige automáticamente."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Carácter desconocido"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Mayúsculas"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Más símbolos"</string> diff --git a/java/res/values-es/strings-talkback-descriptions.xml b/java/res/values-es/strings-talkback-descriptions.xml index 0a5503633..025254f8e 100644 --- a/java/res/values-es/strings-talkback-descriptions.xml +++ b/java/res/values-es/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"No se ha introducido texto"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> a <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corregirá la palabra automáticamente"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Carácter desconocido"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Mayús"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Más símbolos"</string> diff --git a/java/res/values-et-rEE/strings-talkback-descriptions.xml b/java/res/values-et-rEE/strings-talkback-descriptions.xml index b94eabaac..ba15bad1d 100644 --- a/java/res/values-et-rEE/strings-talkback-descriptions.xml +++ b/java/res/values-et-rEE/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Teksti ei ole sisestatud"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> parandab sõna <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> järgmiselt: <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> teeb automaatse paranduse"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Tundmatu tähemärk"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Tõstuklahv"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Rohkem sümboleid"</string> diff --git a/java/res/values-eu-rES/strings-talkback-descriptions.xml b/java/res/values-eu-rES/strings-talkback-descriptions.xml index 72dfc565f..e4fd30a9f 100644 --- a/java/res/values-eu-rES/strings-talkback-descriptions.xml +++ b/java/res/values-eu-rES/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Ez da testurik idatzi"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> teklak \"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>\" hitza \"<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>\" bihurtzen du"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> teklak zuzenketa automatikoa egiten du"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Karaktere ezezaguna"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Maius"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Ikur gehiago"</string> diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml index 16b37f18b..7a11cff80 100644 --- a/java/res/values-fa/strings-talkback-descriptions.xml +++ b/java/res/values-fa/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"نوشتاری وارد نشده است"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>، <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> را به <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> تصحیح میکند"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> تصحیح خودکار را انجام میدهد"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"هیچ پیشنهادی وجود ندارد"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"نویسه نامشخص"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"نمادهای بیشتر"</string> diff --git a/java/res/values-fi/strings-talkback-descriptions.xml b/java/res/values-fi/strings-talkback-descriptions.xml index 3ac2904ac..3f6cb2c0b 100644 --- a/java/res/values-fi/strings-talkback-descriptions.xml +++ b/java/res/values-fi/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Ei kirjoitettua tekstiä"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> korjaa sanan <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> sanaksi <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> suorittaa automaattisen korjauksen"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Tuntematon merkki"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Vaihto"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Lisää symboleita"</string> diff --git a/java/res/values-fr-rCA/strings-talkback-descriptions.xml b/java/res/values-fr-rCA/strings-talkback-descriptions.xml index 84dcae7d1..a53d5e42b 100644 --- a/java/res/values-fr-rCA/strings-talkback-descriptions.xml +++ b/java/res/values-fr-rCA/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Aucun texte entré"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet de remplacer <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> par <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet d\'effectuer une correction automatique"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caractère inconnu"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Majuscule"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Autres symboles"</string> diff --git a/java/res/values-fr/strings-talkback-descriptions.xml b/java/res/values-fr/strings-talkback-descriptions.xml index 1c601292d..4e119ec7a 100644 --- a/java/res/values-fr/strings-talkback-descriptions.xml +++ b/java/res/values-fr/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Aucun texte saisi"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet de remplacer \"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>\" par \"<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>\"."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"La touche <xliff:g id="KEY_NAME">%1$s</xliff:g> permet d\'effectuer une correction automatique."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caractère inconnu."</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Maj"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Autres symboles"</string> diff --git a/java/res/values-gl-rES/strings-talkback-descriptions.xml b/java/res/values-gl-rES/strings-talkback-descriptions.xml index fddb85dc0..507615819 100644 --- a/java/res/values-gl-rES/strings-talkback-descriptions.xml +++ b/java/res/values-gl-rES/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Non se introduciu ningún texto"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrixe <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> por <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> leva a cabo a corrección automática"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Carácter descoñecido"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Maiús"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Máis símbolos"</string> diff --git a/java/res/values-hi/strings-talkback-descriptions.xml b/java/res/values-hi/strings-talkback-descriptions.xml index b3d876f28..0f2d2b9a5 100644 --- a/java/res/values-hi/strings-talkback-descriptions.xml +++ b/java/res/values-hi/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"कोई लेख नहीं डाला गया"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> को सुधार कर <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> करता है"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> स्वत: सुधार करता है"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"अज्ञात वर्ण"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"शिफ़्ट"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"और प्रतीक"</string> diff --git a/java/res/values-hr/strings-talkback-descriptions.xml b/java/res/values-hr/strings-talkback-descriptions.xml index 2a7a5796d..0fa7eb8d6 100644 --- a/java/res/values-hr/strings-talkback-descriptions.xml +++ b/java/res/values-hr/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nije unesen tekst"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ispravlja <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> u <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> vrši samoispravljanje"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Nepoznati znak"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Više simbola"</string> diff --git a/java/res/values-hu/strings-talkback-descriptions.xml b/java/res/values-hu/strings-talkback-descriptions.xml index 554cc9760..d6deab5af 100644 --- a/java/res/values-hu/strings-talkback-descriptions.xml +++ b/java/res/values-hu/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nincs szöveg megadva"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> billentyű – <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> szóra javítja a következőt: <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> billentyű automatikus javítást végez"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Ismeretlen karakter"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"További szimbólumok"</string> diff --git a/java/res/values-hy-rAM/strings-talkback-descriptions.xml b/java/res/values-hy-rAM/strings-talkback-descriptions.xml index 63128eaec..a1bcf1ad2 100644 --- a/java/res/values-hy-rAM/strings-talkback-descriptions.xml +++ b/java/res/values-hy-rAM/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Տեքստ չի մուտքագրվել"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>-ը շտկում է <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>-ը՝ դարձնելով <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ստեղնը ինքնաշտկում է կատարում"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Անհայտ տառանշան"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Հավելյալ նշաններ"</string> diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml index ef315732e..5779ba3b8 100644 --- a/java/res/values-in/strings-talkback-descriptions.xml +++ b/java/res/values-in/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Tidak ada teks yang dimasukkan"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> mengoreksi <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> menjadi <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan koreksi otomatis"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Karakter tak dikenal"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Simbol lainnya"</string> diff --git a/java/res/values-is-rIS/strings-talkback-descriptions.xml b/java/res/values-is-rIS/strings-talkback-descriptions.xml index a339fc0a6..b8b18eabb 100644 --- a/java/res/values-is-rIS/strings-talkback-descriptions.xml +++ b/java/res/values-is-rIS/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Engin texti sleginn inn"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> leiðréttir <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> yfir í <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> framkvæmir sjálfvirka leiðréttingu"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Óþekktur stafur"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Fleiri tákn"</string> diff --git a/java/res/values-it/strings-talkback-descriptions.xml b/java/res/values-it/strings-talkback-descriptions.xml index 54bef0839..b7626afed 100644 --- a/java/res/values-it/strings-talkback-descriptions.xml +++ b/java/res/values-it/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nessun testo inserito"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corregge <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> con <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> esegue la correzione automatica"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Carattere sconosciuto"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Maiusc"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Altri simboli"</string> diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml index 24cc1a609..6821b277b 100644 --- a/java/res/values-iw/strings-talkback-descriptions.xml +++ b/java/res/values-iw/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"לא הוזן טקסט"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> מתקן את <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ל-<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> מבצע תיקון אוטומטי"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"תו לא מוכר"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"סמלים נוספים"</string> diff --git a/java/res/values-ja/strings-talkback-descriptions.xml b/java/res/values-ja/strings-talkback-descriptions.xml index f3a23a82f..914f71b23 100644 --- a/java/res/values-ja/strings-talkback-descriptions.xml +++ b/java/res/values-ja/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"テキストが入力されていません"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>は<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>を<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>に修正します"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g>で自動修正が実行されます"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"不明な文字"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"記号拡張"</string> diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml index b0e13ee67..80de09322 100644 --- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml +++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"ტექსტი შეყვანილი არ არის"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> შეასწორებს <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>-ს <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>-ად"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ასრულებს ავტოკორექციას"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"უცნობი სიმბოლო"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"დამატებითი სიმბოლოები"</string> diff --git a/java/res/values-kk-rKZ/strings-talkback-descriptions.xml b/java/res/values-kk-rKZ/strings-talkback-descriptions.xml index 24361ca9e..60bfeb0a1 100644 --- a/java/res/values-kk-rKZ/strings-talkback-descriptions.xml +++ b/java/res/values-kk-rKZ/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Мәтін енгізілмеген"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> дегенді <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> деп түзетеді"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> автоматты түрде түзетуді орындайды"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Белгісіз таңба"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Қосымша таңбалар"</string> diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml index 29d3b959f..236eca541 100644 --- a/java/res/values-km-rKH/strings-talkback-descriptions.xml +++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"គ្មានអត្ថបទបានបញ្ចូល"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> កែ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ទៅជា <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> អនុវត្តការកែស្វ័យប្រវត្តិ"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"មិនស្គាល់តួអក្សរ"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"និមិត្តសញ្ញាច្រើនទៀត"</string> @@ -78,7 +80,7 @@ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"មិនស្គាល់សញ្ញាអារម្មណ៍"</string> <string name="spoken_emoticon_3A_2D_21_20" msgid="2410905667389534573">"មុខអផ្សុក"</string> <string name="spoken_emoticon_3A_2D_24_20" msgid="2481260475945560438">"មុខខ្មាសអៀន"</string> - <string name="spoken_emoticon_42_2D_29_20" msgid="1063205250387128068">"ពាក់វ៉ែនតា"</string> + <string name="spoken_emoticon_42_2D_29_20" msgid="1063205250387128068">"ពាក់វ៉ែនតា"</string> <string name="spoken_emoticon_3A_4F_20" msgid="532695091593447238">"មុខភ្ញាក់ផ្អើល"</string> <string name="spoken_emoticon_3A_2D_2A_20" msgid="5612342617244114291">"មុខថើប"</string> <string name="spoken_emoticon_3A_2D_5B_20" msgid="2223507987759905920">"មុខចងចិញ្ចើម"</string> diff --git a/java/res/values-kn-rIN/strings-talkback-descriptions.xml b/java/res/values-kn-rIN/strings-talkback-descriptions.xml index 203633627..eef8af372 100644 --- a/java/res/values-kn-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-kn-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"ಯಾವುದೇ ಪಠ್ಯವನ್ನು ನಮೂದಿಸಿಲ್ಲ"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ನಿಂದ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> ಆಗಿ <xliff:g id="KEY_NAME">%1$s</xliff:g> ಸರಿಪಡಿಸುತ್ತದೆ"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ಸ್ವಯಂ ತಿದ್ದುಪಡಿಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"ಅಪರಿಚಿತ ಅಕ್ಷರ"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"ಇನ್ನಷ್ಟು ಸಂಕೇತಗಳು"</string> diff --git a/java/res/values-ko/strings-talkback-descriptions.xml b/java/res/values-ko/strings-talkback-descriptions.xml index c699d2cc6..1638b62fd 100644 --- a/java/res/values-ko/strings-talkback-descriptions.xml +++ b/java/res/values-ko/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"입력한 텍스트 없음"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>을(를) 누르면 <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>을(를) <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>(으)로 수정합니다."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g>을(를) 누르면 자동 수정됩니다."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"알 수 없는 문자"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 키"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"기호 더보기"</string> diff --git a/java/res/values-ky-rKG/strings-talkback-descriptions.xml b/java/res/values-ky-rKG/strings-talkback-descriptions.xml index 20e4bc264..816658841 100644 --- a/java/res/values-ky-rKG/strings-talkback-descriptions.xml +++ b/java/res/values-ky-rKG/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст киргизилген жок"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> сөзүн <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> сөзүнө оңдойт"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> авто оңдойт"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Белгисиз белги"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Дагы символдор"</string> diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml index 18f0c380b..350998618 100644 --- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml +++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"ບໍ່ມີການໃສ່ຂໍ້ຄວາມ"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ແກ້ໄຂ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ເປັນ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ດຳເນີນການແກ້ໄຂອັດຕະໂນມັດ"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"ໂຕອັກສອນທີ່ບໍ່ຮູ້ຈັກ"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"ສັນຍາລັກເພີ່ມເຕີມ"</string> diff --git a/java/res/values-lt/strings-talkback-descriptions.xml b/java/res/values-lt/strings-talkback-descriptions.xml index 6e760d192..db79e7185 100644 --- a/java/res/values-lt/strings-talkback-descriptions.xml +++ b/java/res/values-lt/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nėra įvesto teksto"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> pataiso <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> į <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> atlieka automatinį taisymą"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Nežinomas simbolis"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Klavišas „Shift“"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Daugiau simbolių"</string> diff --git a/java/res/values-lv/strings-talkback-descriptions.xml b/java/res/values-lv/strings-talkback-descriptions.xml index e89ffa431..1242341a8 100644 --- a/java/res/values-lv/strings-talkback-descriptions.xml +++ b/java/res/values-lv/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Teksts nav ievadīts"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Nospiežot taustiņu <xliff:g id="KEY_NAME">%1$s</xliff:g>, “<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>” tiek labots uz “<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>”."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Taustiņam <xliff:g id="KEY_NAME">%1$s</xliff:g> ir automātiskas labošanas funkcija."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Nezināma rakstzīme"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Pārslēgšanas taustiņš"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Citi simboli"</string> diff --git a/java/res/values-mk-rMK/strings-talkback-descriptions.xml b/java/res/values-mk-rMK/strings-talkback-descriptions.xml index 0a612929e..36739a553 100644 --- a/java/res/values-mk-rMK/strings-talkback-descriptions.xml +++ b/java/res/values-mk-rMK/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Не е внесен текст"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> го поправи <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> со <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> врши автоматска корекција"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Непознат знак"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"копче Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Повеќе симболи"</string> diff --git a/java/res/values-ml-rIN/strings-talkback-descriptions.xml b/java/res/values-ml-rIN/strings-talkback-descriptions.xml index 3bed53786..175f9d252 100644 --- a/java/res/values-ml-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-ml-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"വാചകമൊന്നും നൽകിയിട്ടില്ല"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>, <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> എന്നത് <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> എന്നതായി തിരുത്തുന്നു"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> യാന്ത്രിക-തിരുത്തൽ നിർവഹിക്കുന്നു"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"അജ്ഞാത പ്രതീകം"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"കൂടുതൽ ചിഹ്നങ്ങൾ"</string> diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml index e943a8d30..f6e8bb17d 100644 --- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml +++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст оруулаагүй"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> нь <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>-г <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> руу залруулна"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> авто-залруулалт хийдэг"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Үл мэдэгдэх тэмдэгт"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Шифт"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Өөр тэмдэгтүүд"</string> diff --git a/java/res/values-mr-rIN/strings-talkback-descriptions.xml b/java/res/values-mr-rIN/strings-talkback-descriptions.xml index ad8a7472b..5660ead14 100644 --- a/java/res/values-mr-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-mr-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"मजकूर प्रविष्ट केला नाही"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ला <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> मध्ये सुधारणा करते"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> स्वयं-सुधारणा करते"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"अज्ञात वर्ण"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"अधिक चिन्हे"</string> diff --git a/java/res/values-ms-rMY/strings-talkback-descriptions.xml b/java/res/values-ms-rMY/strings-talkback-descriptions.xml index b09d3a7d6..ed4ff0d74 100644 --- a/java/res/values-ms-rMY/strings-talkback-descriptions.xml +++ b/java/res/values-ms-rMY/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Tiada teks dimasukkan"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> membetulkan <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> menjadi <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan auto pembetulan"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"Tiada cadangan"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"Aksara yang tidak diketahui"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Lagi simbol"</string> diff --git a/java/res/values-my-rMM/strings-talkback-descriptions.xml b/java/res/values-my-rMM/strings-talkback-descriptions.xml index a4f84a27a..47f00778a 100644 --- a/java/res/values-my-rMM/strings-talkback-descriptions.xml +++ b/java/res/values-my-rMM/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"စာမရိုက်ထည့်ထားပါ"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> မှ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> သို့ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> မှန်ကန်စေသည်"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> အလိုအလျောက် မှန်ကန်ခြင်း လုပ်ဆောင်သည်"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"မသိရ စာလုံး"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shiftခလုတ်"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"နောက်ထပ် သင်္ကေတများ"</string> @@ -79,7 +81,7 @@ <string name="spoken_emoticon_3A_2D_21_20" msgid="2410905667389534573">"စိတ်ကုန်နေသော မျက်နှာ"</string> <string name="spoken_emoticon_3A_2D_24_20" msgid="2481260475945560438">"ကသိကအောက် မျက်နှာ"</string> <string name="spoken_emoticon_42_2D_29_20" msgid="1063205250387128068">"နေကာမျက်မှန်တပ် မျက်နှာ"</string> - <string name="spoken_emoticon_3A_4F_20" msgid="532695091593447238">"အံ့အားသင့်နေသော မျက်နှာ"</string> + <string name="spoken_emoticon_3A_4F_20" msgid="532695091593447238">"အံ့အားသင့်နေသော မျက်နှာ"</string> <string name="spoken_emoticon_3A_2D_2A_20" msgid="5612342617244114291">"နမ်းနေသော မျက်နှာ"</string> <string name="spoken_emoticon_3A_2D_5B_20" msgid="2223507987759905920">"မှုန်ကုပ်ကုပ် မျက်နှာ"</string> <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"အစားထိုးစရာ စာလုံးများ ရှိနိုင်"</string> diff --git a/java/res/values-nb/strings-talkback-descriptions.xml b/java/res/values-nb/strings-talkback-descriptions.xml index 5bf0e76c8..f4fedb702 100644 --- a/java/res/values-nb/strings-talkback-descriptions.xml +++ b/java/res/values-nb/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Ingen tekst er skrevet inn"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> retter <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> til <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> utfører automatisk retting"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Ukjent tegn"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Flere symboler"</string> diff --git a/java/res/values-ne-rNP/strings-talkback-descriptions.xml b/java/res/values-ne-rNP/strings-talkback-descriptions.xml index de601284d..4177f7192 100644 --- a/java/res/values-ne-rNP/strings-talkback-descriptions.xml +++ b/java/res/values-ne-rNP/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"कुनै पाठ प्रविष्टि गरिएको छैन"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ले <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> लाई <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> मा सच्याउँछ"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ले स्वतः सच्याउने गर्छ"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"कुनै सुझाव छैन"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"अज्ञात वर्ण"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"सिफ्ट"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"थप प्रतीकहरु"</string> diff --git a/java/res/values-nl/strings-talkback-descriptions.xml b/java/res/values-nl/strings-talkback-descriptions.xml index 09929f019..7464ef8d4 100644 --- a/java/res/values-nl/strings-talkback-descriptions.xml +++ b/java/res/values-nl/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Geen tekst ingevoerd"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Met <xliff:g id="KEY_NAME">%1$s</xliff:g> wordt <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> gecorrigeerd naar <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Met <xliff:g id="KEY_NAME">%1$s</xliff:g> voert u automatische correctie uit"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Onbekend teken"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Meer symbolen"</string> diff --git a/java/res/values-pl/strings-talkback-descriptions.xml b/java/res/values-pl/strings-talkback-descriptions.xml index ac3019981..740c005b6 100644 --- a/java/res/values-pl/strings-talkback-descriptions.xml +++ b/java/res/values-pl/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nie wpisano tekstu"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> poprawia <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> wykonuje autokorektę"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Nieznany znak"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Więcej symboli"</string> diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml index 49a5fdcc4..bab8aef5f 100644 --- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml +++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nenhum texto digitado"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> para <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa a correção automática"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caráter desconhecido"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string> diff --git a/java/res/values-pt/strings-talkback-descriptions.xml b/java/res/values-pt/strings-talkback-descriptions.xml index 608e1b419..3a84087a0 100644 --- a/java/res/values-pt/strings-talkback-descriptions.xml +++ b/java/res/values-pt/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nenhum texto digitado"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> para <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> realiza correção automática"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caractere desconhecido"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string> diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml index 5151c5281..af89da6fa 100644 --- a/java/res/values-ro/strings-talkback-descriptions.xml +++ b/java/res/values-ro/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nu a fost introdus text"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corectează <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> cu <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> efectuează corectare automată"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Caracter necunoscut"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mai multe simboluri"</string> diff --git a/java/res/values-ru/strings-talkback-descriptions.xml b/java/res/values-ru/strings-talkback-descriptions.xml index 16ff2c920..e30dd90c2 100644 --- a/java/res/values-ru/strings-talkback-descriptions.xml +++ b/java/res/values-ru/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст не введен."</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"При нажатии клавиши <xliff:g id="KEY_NAME">%1$s</xliff:g> слово <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> будет исправлено на <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>."</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Клавиша <xliff:g id="KEY_NAME">%1$s</xliff:g> выполняет автоисправление."</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Неизвестный символ."</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Клавиша верхнего регистра."</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Дополнительные символы."</string> diff --git a/java/res/values-si-rLK/strings-talkback-descriptions.xml b/java/res/values-si-rLK/strings-talkback-descriptions.xml index 600e6ecba..fc74e556c 100644 --- a/java/res/values-si-rLK/strings-talkback-descriptions.xml +++ b/java/res/values-si-rLK/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"පෙළ ඇතුළු කර නැත"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> සිට <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> වෙත නිවැරදි කරයි"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ස්වයං-නිවැරදි කිරීම සිදු කරයි"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"නොදන්නා අකුර"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"ෂිෆ්ට්"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"තව සංකේත"</string> diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml index 6a4067f9c..09f835e96 100644 --- a/java/res/values-sk/strings-talkback-descriptions.xml +++ b/java/res/values-sk/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Nie je zadaný žiadny text"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Klávesom <xliff:g id="KEY_NAME">%1$s</xliff:g> opravíte slovo <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Klávesom <xliff:g id="KEY_NAME">%1$s</xliff:g> spustíte automatické opravy"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Neznámy znak"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Ďalšie symboly"</string> diff --git a/java/res/values-sl/strings-talkback-descriptions.xml b/java/res/values-sl/strings-talkback-descriptions.xml index 9390b331b..fb06fbe04 100644 --- a/java/res/values-sl/strings-talkback-descriptions.xml +++ b/java/res/values-sl/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Ni vnesenega besedila"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Tipka <xliff:g id="KEY_NAME">%1$s</xliff:g> popravi <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> v <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Tipka <xliff:g id="KEY_NAME">%1$s</xliff:g> izvede samopopravek"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Neznan znak"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Več simbolov"</string> diff --git a/java/res/values-sr/strings-talkback-descriptions.xml b/java/res/values-sr/strings-talkback-descriptions.xml index 89f1d637e..03b9ae64a 100644 --- a/java/res/values-sr/strings-talkback-descriptions.xml +++ b/java/res/values-sr/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст није унет"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> исправља <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> у <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> обавља аутоматско исправљање"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Непознати знак"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Још симбола"</string> diff --git a/java/res/values-sv/strings-talkback-descriptions.xml b/java/res/values-sv/strings-talkback-descriptions.xml index 058dd7ecf..949d0dfc4 100644 --- a/java/res/values-sv/strings-talkback-descriptions.xml +++ b/java/res/values-sv/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Ingen text har angetts"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Om du trycker på <xliff:g id="KEY_NAME">%1$s</xliff:g> rättas <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> till <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Om du trycker på <xliff:g id="KEY_NAME">%1$s</xliff:g> utförs autokorrigering"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Okänt tecken"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Skift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Fler symboler"</string> diff --git a/java/res/values-sw/strings-talkback-descriptions.xml b/java/res/values-sw/strings-talkback-descriptions.xml index 87632138a..674256789 100644 --- a/java/res/values-sw/strings-talkback-descriptions.xml +++ b/java/res/values-sw/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Hakuna maandishi yaliyoingizwa"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> hurekebisha <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> kuwa <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> hufanya marekebisho otomatiki"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Herufi isiyojulikana"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Alama zaidi"</string> diff --git a/java/res/values-ta-rIN/strings-talkback-descriptions.xml b/java/res/values-ta-rIN/strings-talkback-descriptions.xml index fffdef68d..26920be5d 100644 --- a/java/res/values-ta-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-ta-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"உரை எதுவும் உள்ளிடப்படவில்லை"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> இலிருந்து <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> ஆக <xliff:g id="KEY_NAME">%1$s</xliff:g> திருத்துகிறது"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> தன்னியக்க திருத்தத்தைச் செயல்படுத்துகிறது"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"அறியப்படாத எழுத்துக்குறி"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"ஷிஃப்டு"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"கூடுதல் குறியீடுகள்"</string> diff --git a/java/res/values-te-rIN/strings-talkback-descriptions.xml b/java/res/values-te-rIN/strings-talkback-descriptions.xml index b4281c93c..2781d1b66 100644 --- a/java/res/values-te-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-te-rIN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"వచనం ఏదీ నమోదు చేయబడలేదు"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>ని <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>గా సరి చేస్తుంది"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> స్వీయ-సవరణను అమలు చేస్తుంది"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"తెలియని అక్షరం"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"షిప్ట్"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"మరిన్ని గుర్తులు"</string> diff --git a/java/res/values-th/strings-talkback-descriptions.xml b/java/res/values-th/strings-talkback-descriptions.xml index 509df3f2f..f57091173 100644 --- a/java/res/values-th/strings-talkback-descriptions.xml +++ b/java/res/values-th/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"ไม่มีข้อความ"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> แก้ไข <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> เป็น <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ทำการแก้ไขอัตโนมัติ"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"ไม่มีคำแนะนำ"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"อักขระที่ไม่รู้จัก"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"สัญลักษณ์เพิ่มเติม"</string> diff --git a/java/res/values-tl/strings-talkback-descriptions.xml b/java/res/values-tl/strings-talkback-descriptions.xml index c70c48da0..5ff3695cd 100644 --- a/java/res/values-tl/strings-talkback-descriptions.xml +++ b/java/res/values-tl/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Walang tekstong inilagay"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"Itinatama ng <xliff:g id="KEY_NAME">%1$s</xliff:g> ang <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> sa <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Nagsasagawa ang <xliff:g id="KEY_NAME">%1$s</xliff:g> ng auto-correction"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Hindi alam na character"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Marami pang simbolo"</string> diff --git a/java/res/values-tr/strings-talkback-descriptions.xml b/java/res/values-tr/strings-talkback-descriptions.xml index 302fba57c..a505fb428 100644 --- a/java/res/values-tr/strings-talkback-descriptions.xml +++ b/java/res/values-tr/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Metin girilmedi"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>, <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> kelimesini <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> olarak düzeltir"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> otomatik düzeltme yapar"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Bilinmeyen karakter"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Üst karakter"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Diğer simgeler"</string> diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml index 4666e244e..c2c546b68 100644 --- a/java/res/values-uk/strings-talkback-descriptions.xml +++ b/java/res/values-uk/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст не введено"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> виправляє слово \"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>\" на \"<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>\""</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> автоматично виправляє"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Невідомий символ"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Більше символів"</string> diff --git a/java/res/values-ur-rPK/strings-talkback-descriptions.xml b/java/res/values-ur-rPK/strings-talkback-descriptions.xml index 7713564e7..393c125d3 100644 --- a/java/res/values-ur-rPK/strings-talkback-descriptions.xml +++ b/java/res/values-ur-rPK/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"کوئی متن درج نہیں کیا گیا"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> کو ٹھیک کر کے <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> کر دیتی ہے"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> خود کار اصلاح کو انجام دیتی ہے"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"نامعلوم حرف"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"مزید علامات"</string> diff --git a/java/res/values-uz-rUZ/strings-talkback-descriptions.xml b/java/res/values-uz-rUZ/strings-talkback-descriptions.xml index 705f548c5..3d2083665 100644 --- a/java/res/values-uz-rUZ/strings-talkback-descriptions.xml +++ b/java/res/values-uz-rUZ/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Hech qanday matn kiritilmadi"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> tugmasi bosilganda “<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>” so‘zi “<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>” so‘ziga o‘zgartiriladi"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> tugmasi avtomatik tuzatishni amalga oshiradi"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Noma’lum belgi"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Yuqori registr tugmasi"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Ko‘proq belgilar"</string> diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml index 190662485..4c3741463 100644 --- a/java/res/values-vi/strings-talkback-descriptions.xml +++ b/java/res/values-vi/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Không có ký tự nào được nhập"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> sửa <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> thành <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> tự động sửa"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"Ký tự không xác định"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Biểu tượng khác"</string> diff --git a/java/res/values-zh-rCN/strings-talkback-descriptions.xml b/java/res/values-zh-rCN/strings-talkback-descriptions.xml index 5d3712b13..11aa72a9e 100644 --- a/java/res/values-zh-rCN/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rCN/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"未输入文字"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"按<xliff:g id="KEY_NAME">%1$s</xliff:g>键可将<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>更正为<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按<xliff:g id="KEY_NAME">%1$s</xliff:g>键可进行自动更正"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"未知字符"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"更多符号"</string> diff --git a/java/res/values-zh-rHK/strings-talkback-descriptions.xml b/java/res/values-zh-rHK/strings-talkback-descriptions.xml index e29026822..1a2dcb09e 100644 --- a/java/res/values-zh-rHK/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rHK/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"未輸入文字"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"按「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可將「<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>」修正為「<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>」"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可自動修正"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"未知的字元"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 鍵"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"更多符號"</string> diff --git a/java/res/values-zh-rTW/strings-talkback-descriptions.xml b/java/res/values-zh-rTW/strings-talkback-descriptions.xml index 07f969f41..cd54b8e55 100644 --- a/java/res/values-zh-rTW/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rTW/strings-talkback-descriptions.xml @@ -25,6 +25,8 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"未輸入文字"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"按下「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可將「<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>」修正為「<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>」"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"按下「<xliff:g id="KEY_NAME">%1$s</xliff:g>」可執行自動修正"</string> + <!-- no translation found for spoken_empty_suggestion (4250215619373459752) --> + <skip /> <string name="spoken_description_unknown" msgid="5139930082759824442">"未知的字元"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"Shift 鍵"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"更多符號"</string> diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml index 3e736214d..067340565 100644 --- a/java/res/values-zu/strings-talkback-descriptions.xml +++ b/java/res/values-zu/strings-talkback-descriptions.xml @@ -25,6 +25,7 @@ <string name="spoken_no_text_entered" msgid="1711276837961785646">"Awukho umbhalo ofakiwe"</string> <string name="spoken_auto_correct" msgid="8989324692167993804">"I-<xliff:g id="KEY_NAME">%1$s</xliff:g> ilungisa i-<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> kube yi-<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string> <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"I-<xliff:g id="KEY_NAME">%1$s</xliff:g> yenza ukulungisa okuzenzakalelayo"</string> + <string name="spoken_empty_suggestion" msgid="4250215619373459752">"Asikho isiphakamiso"</string> <string name="spoken_description_unknown" msgid="5139930082759824442">"Uhlamvu olungaziwa"</string> <string name="spoken_description_shift" msgid="7209798151676638728">"U-Shift"</string> <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Amasimbuli amaningi"</string> diff --git a/java/res/values/strings-talkback-descriptions.xml b/java/res/values/strings-talkback-descriptions.xml index 36fa7b3b4..9644271c0 100644 --- a/java/res/values/strings-talkback-descriptions.xml +++ b/java/res/values/strings-talkback-descriptions.xml @@ -31,6 +31,9 @@ <!-- Spoken description used during obscured (e.g. password) entry to let the user know that auto-correction will be performed when a key is pressed. --> <string name="spoken_auto_correct_obscured"><xliff:g id="KEY_NAME" example="Space">%1$s</xliff:g> performs auto-correction</string> + <!-- Spoken description of a suggestion when nothing is specified and the field is blank. --> + <string name="spoken_empty_suggestion">No suggestion</string> + <!-- Spoken description for unknown keyboard keys. --> <string name="spoken_description_unknown">Unknown character</string> <!-- Spoken description for the "Shift" keyboard key when "Shift" is off. --> diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index 2e9c8ea1f..50aa4a782 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -39,11 +39,9 @@ <!-- Settings screen title for preferences [CHAR LIMIT=33]--> <string name="settings_screen_preferences">Preferences</string> <!-- Settings screen title for accounts and privacy preferences [CHAR LIMIT=33]--> - <string name="settings_screen_accounts">Accounts & privacy</string> + <string name="settings_screen_accounts">Accounts & Privacy</string> <!-- Settings screen title for appearance & layouts preferences [CHAR LIMIT=33] --> - <string name="settings_screen_appearance">Appearance & layouts</string> - <!-- Settings screen title for multilingual options [CHAR_LIMIT=33] --> - <string name="settings_screen_multilingual">Multilingual options</string> + <string name="settings_screen_appearance">Appearance & Layouts</string> <!-- Settings screen title for gesture typing preferences [CHAR_LIMIT=33] --> <string name="settings_screen_gesture">Gesture Typing</string> <!-- Settings screen title for text correction options [CHAR_LIMIT=33] --> @@ -56,17 +54,31 @@ <!-- Option for enabling or disabling the split keyboard layout. [CHAR LIMIT=65]--> <string name="enable_split_keyboard">Enable split keyboard</string> - <!-- TODO: Enable translation for user-visible strings --> - <string name="cloud_sync_title" translatable="false">Enable sync</string> - <string name="cloud_sync_summary" translatable="false">Sync your personal dictionary across devices</string> - <string name="cloud_sync_summary_disabled_signed_out" translatable="false">Select an account to enable sync</string> - <string name="sync_now_title" translatable="false">[DEBUG] Sync Now</string> - <string name="clear_sync_data_title" translatable="false">[DEBUG] Delete Google Keyboard cloud data</string> - <string name="clear_sync_data_summary" translable="false">Deletes your synced data from Google</string> - <string name="clear_sync_data_confirmation" translable="false">Your synced data will be deleted. Are you sure?</string> - <string name="clear_sync_data_ok" translable="false">Delete</string> - <string name="clear_sync_data_cancel" translable="false">Cancel</string> - + <!-- Option title for enabling cloud sync feature [CHAR LIMIT=33]--> + <string name="cloud_sync_title">Google Keyboard Sync</string> + <!-- Option summary when cloud sync feature is enabled [CHAR LIMIT=65] --> + <string name="cloud_sync_summary">Sync is turned on</string> + <!-- Option summary when cloud sync feature is disabled [CHAR LIMIT=65] --> + <string name="cloud_sync_summary_disabled">Sync your personal dictionary across devices</string> + <!-- Option title for starting the sync cycle now. [CHAR LIMIT=33]--> + <string name="sync_now_title">Sync Now</string> + <!-- Option title for letting user delete data from Google servers. [CHAR LIMIT=33] --> + <string name="clear_sync_data_title">Delete Keyboard Cloud data</string> + <!-- Option summary for letting user delete data from Google servers. [CHAR LIMIT=65] --> + <string name="clear_sync_data_summary">Deletes your synced data from Google</string> + <!-- Text for confirmation dialog box asking user to confirm deletion of cloud data. [CHAR LIMIT=65] --> + <string name="clear_sync_data_confirmation">Your synced data will be deleted from the cloud. Are you sure?</string> + <!-- Option to confirm deleting of user data from cloud [CHAR LIMIT=20] --> + <string name="clear_sync_data_ok">Delete</string> + <!-- Option to cancel the deletion of user data from cloud [CHAR LIMIT=20] --> + <string name="cloud_sync_cancel">Cancel</string> + <!-- Option to agree to terms and conditions for enabling cloud sync feature. --> + <string name="cloud_sync_opt_in_text">Your personal dictionary will be synced & backed up to + Google servers. The statistical information of word frequency may be collected to help + improve our products. The collection and usage of all the information will be compliant with + <a href="https://www.google.com/policies/privacy">Google\'s Privacy Policy</a>. + </string> + <!-- Option name for including other IMEs in the language switch list [CHAR LIMIT=30] --> <string name="include_other_imes_in_language_switch_list">Switch to other input methods</string> <!-- Option summary for including other IMEs in the language switch list [CHAR LIMIT=65] --> diff --git a/java/res/xml/prefs_screen_accounts.xml b/java/res/xml/prefs_screen_accounts.xml index 462488547..e4baf7984 100644 --- a/java/res/xml/prefs_screen_accounts.xml +++ b/java/res/xml/prefs_screen_accounts.xml @@ -36,21 +36,14 @@ android:persistent="true" android:disableDependentsState="false" /> - <!-- Title will be set programmatically to embed application name --> - <CheckBoxPreference - android:key="pref_enable_metrics_logging" - android:summary="@string/enable_metrics_logging_summary" - android:defaultValue="true" - android:persistent="true" /> - <!-- This preference (acts like a button) enables the user to initiate an one time sync. --> - <Preference android:key="pref_beanstalk" + <Preference android:key="pref_sync_now" android:persistent="false" android:title="@string/sync_now_title" android:dependency="pref_enable_cloud_sync" /> <!-- This preference (acts like a button) enables the user to clear data from the cloud. --> - <Preference android:key="pref_beanstalk_clear_data" + <Preference android:key="pref_clear_sync_data" android:persistent="false" android:title="@string/clear_sync_data_title" android:summary="@string/clear_sync_data_summary" diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java index 6b939cdfe..9ea1950f5 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java @@ -20,7 +20,7 @@ import android.content.Context; import android.util.Pair; import com.android.inputmethod.annotations.UsedForTesting; -import com.android.inputmethod.keyboard.KeyboardLayout; +import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.settings.SettingsValuesForSuggestion; import com.android.inputmethod.latin.utils.SuggestionResults; @@ -157,9 +157,9 @@ public interface DictionaryFacilitator { // TODO: Revise the way to fusion suggestion results. SuggestionResults getSuggestionResults(final ComposedData composedData, - final NgramContext ngramContext, final long proximityInfoHandle, + final NgramContext ngramContext, @Nonnull final Keyboard keyboard, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int sessionId, - final int inputStyle, final KeyboardLayout keyboardLayout); + final int inputStyle); boolean isValidSpellingWord(final String word); diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java index e96300020..763cfa26d 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorImpl.java @@ -22,7 +22,7 @@ import android.util.Log; import android.util.Pair; import com.android.inputmethod.annotations.UsedForTesting; -import com.android.inputmethod.keyboard.KeyboardLayout; +import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.ComposedData; @@ -668,12 +668,14 @@ public class DictionaryFacilitatorImpl implements DictionaryFacilitator { // TODO: Revise the way to fusion suggestion results. @Override public SuggestionResults getSuggestionResults(ComposedData composedData, - NgramContext ngramContext, long proximityInfoHandle, + NgramContext ngramContext, @Nonnull final Keyboard keyboard, SettingsValuesForSuggestion settingsValuesForSuggestion, int sessionId, - int inputStyle, KeyboardLayout keyboardLayout) { + int inputStyle) { + long proximityInfoHandle = keyboard.getProximityInfo().getNativeProximityInfo(); final DictionaryGroup[] dictionaryGroups = mDictionaryGroups; final SuggestionResults suggestionResults = new SuggestionResults( - SuggestedWords.MAX_SUGGESTIONS, ngramContext.isBeginningOfSentenceContext()); + SuggestedWords.MAX_SUGGESTIONS, ngramContext.isBeginningOfSentenceContext(), + false /* firstSuggestionExceedsConfidenceThreshold */); final float[] weightOfLangModelVsSpatialModel = new float[] { Dictionary.NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL }; for (final DictionaryGroup dictionaryGroup : dictionaryGroups) { diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorLruCache.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorLruCache.java index 1b3e9ca72..2a1ae3684 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorLruCache.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitatorLruCache.java @@ -41,7 +41,8 @@ public class DictionaryFacilitatorLruCache { public DictionaryFacilitatorLruCache(final Context context, final String dictionaryNamePrefix) { mContext = context; mDictionaryNamePrefix = dictionaryNamePrefix; - mDictionaryFacilitator = DictionaryFacilitatorProvider.getDictionaryFacilitator(); + mDictionaryFacilitator = DictionaryFacilitatorProvider.getDictionaryFacilitator( + true /* isNeededForSpellChecking */); } private static void waitForLoadingMainDictionary( diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java index 781ab06c5..49608d830 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java @@ -80,7 +80,7 @@ public final class DictionaryFactory { * @param context The context to contact the dictionary provider, if possible. * @param f A file address to the dictionary to kill. */ - private static void killDictionary(final Context context, final AssetFileAddress f) { + public static void killDictionary(final Context context, final AssetFileAddress f) { if (f.pointsToPhysicalFile()) { f.deleteUnderlyingFile(); // Warn the dictionary provider if the dictionary came from there. diff --git a/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java b/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java index 8116a4983..9b271116d 100644 --- a/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java +++ b/java/src/com/android/inputmethod/latin/EmojiAltPhysicalKeyDetector.java @@ -16,6 +16,7 @@ package com.android.inputmethod.latin; +import android.util.Log; import android.view.KeyEvent; import com.android.inputmethod.keyboard.KeyboardSwitcher; @@ -25,10 +26,18 @@ import com.android.inputmethod.latin.settings.Settings; * A class for detecting Emoji-Alt physical key. */ final class EmojiAltPhysicalKeyDetector { + private static final String TAG = "EmojiAltPhysicalKeyDetector"; + + private final RichInputConnection mRichInputConnection; + // True if the Alt key has been used as a modifier. In this case the Alt key up isn't // recognized as an emoji key. private boolean mAltHasBeenUsedAsAModifier; + public EmojiAltPhysicalKeyDetector(final RichInputConnection richInputConnection) { + mRichInputConnection = richInputConnection; + } + /** * Record a down key event. * @param keyEvent a down key event. @@ -62,9 +71,14 @@ final class EmojiAltPhysicalKeyDetector { if (!Settings.getInstance().getCurrent().mEnableEmojiAltPhysicalKey) { return; } - if (!mAltHasBeenUsedAsAModifier) { - onEmojiAltKeyDetected(); + if (mAltHasBeenUsedAsAModifier) { + return; + } + if (!mRichInputConnection.isConnected()) { + Log.w(TAG, "onKeyUp() : No connection to text view"); + return; } + onEmojiAltKeyDetected(); } private static void onEmojiAltKeyDetected() { diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 064d79b3c..b0fb91bec 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -259,7 +259,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { /** * Check whether GC is needed and run GC if required. */ - protected void runGCIfRequired(final boolean mindsBlockByGC) { + public void runGCIfRequired(final boolean mindsBlockByGC) { asyncExecuteTaskWithWriteLock(new Runnable() { @Override public void run() { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 550efa59f..76d4a4a8d 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -73,7 +73,6 @@ import com.android.inputmethod.latin.common.InputPointers; import com.android.inputmethod.latin.define.DebugFlags; import com.android.inputmethod.latin.define.ProductionFlags; import com.android.inputmethod.latin.inputlogic.InputLogic; -import com.android.inputmethod.latin.personalization.DictionaryDecayBroadcastReciever; import com.android.inputmethod.latin.personalization.PersonalizationHelper; import com.android.inputmethod.latin.settings.Settings; import com.android.inputmethod.latin.settings.SettingsActivity; @@ -127,7 +126,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final Settings mSettings; private final DictionaryFacilitator mDictionaryFacilitator = - DictionaryFacilitatorProvider.getDictionaryFacilitator(); + DictionaryFacilitatorProvider.getDictionaryFacilitator( + false /* isNeededForSpellChecking */); final InputLogic mInputLogic = new InputLogic(this /* LatinIME */, this /* SuggestionStripViewAccessor */, mDictionaryFacilitator); // We expect to have only one decoder in almost all cases, hence the default capacity of 1. @@ -143,7 +143,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen @UsedForTesting final KeyboardSwitcher mKeyboardSwitcher; private final SubtypeState mSubtypeState = new SubtypeState(); private final EmojiAltPhysicalKeyDetector mEmojiAltPhysicalKeyDetector = - new EmojiAltPhysicalKeyDetector(); + new EmojiAltPhysicalKeyDetector(mInputLogic.mConnection); private StatsUtilsManager mStatsUtilsManager; // Working variable for {@link #startShowingInputView()} and // {@link #onEvaluateInputViewShown()}. @@ -584,7 +584,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen dictDumpFilter.addAction(DictionaryDumpBroadcastReceiver.DICTIONARY_DUMP_INTENT_ACTION); registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter); - DictionaryDecayBroadcastReciever.setUpIntervalAlarmForDictionaryDecaying(this); StatsUtils.onCreate(mSettings.getCurrent(), mRichImm); } @@ -704,7 +703,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen unregisterReceiver(mDictionaryPackInstallReceiver); unregisterReceiver(mDictionaryDumpBroadcastReceiver); mStatsUtilsManager.onDestroy(this /* context */); - DictionaryDecayBroadcastReciever.cancelIntervalAlarmForDictionaryDecaying(this); super.onDestroy(); } @@ -1514,9 +1512,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen callback.onGetSuggestedWords(SuggestedWords.getEmptyInstance()); return; } - mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard.getProximityInfo(), - mKeyboardSwitcher.getKeyboardShiftMode(), inputStyle, sequenceNumber, callback, - keyboard.getKeyboardLayout()); + mInputLogic.getSuggestedWords(mSettings.getCurrent(), keyboard, + mKeyboardSwitcher.getKeyboardShiftMode(), inputStyle, sequenceNumber, callback); } @Override diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java index 0210d7e18..08e8fe346 100644 --- a/java/src/com/android/inputmethod/latin/RichInputConnection.java +++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java @@ -101,12 +101,17 @@ public final class RichInputConnection implements PrivateCommandPerformer { private final InputMethodService mParent; InputConnection mIC; int mNestLevel; + public RichInputConnection(final InputMethodService parent) { mParent = parent; mIC = null; mNestLevel = 0; } + public boolean isConnected() { + return mIC != null; + } + private void checkConsistencyForDebug() { final ExtractedTextRequest r = new ExtractedTextRequest(); r.hintMaxChars = 0; @@ -142,7 +147,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public void beginBatchEdit() { if (++mNestLevel == 1) { mIC = mParent.getCurrentInputConnection(); - if (null != mIC) { + if (isConnected()) { mIC.beginBatchEdit(); } } else { @@ -157,7 +162,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public void endBatchEdit() { if (mNestLevel <= 0) Log.e(TAG, "Batch edit not in progress!"); // TODO: exception instead - if (--mNestLevel == 0 && null != mIC) { + if (--mNestLevel == 0 && isConnected()) { mIC.endBatchEdit(); } if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); @@ -189,7 +194,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { Log.d(TAG, "Will try to retrieve text later."); return false; } - if (null != mIC && shouldFinishComposition) { + if (isConnected() && shouldFinishComposition) { mIC.finishComposingText(); } return true; @@ -205,8 +210,9 @@ public final class RichInputConnection implements PrivateCommandPerformer { mIC = mParent.getCurrentInputConnection(); // Call upon the inputconnection directly since our own method is using the cache, and // we want to refresh it. - final CharSequence textBeforeCursor = null == mIC ? null : - mIC.getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, 0); + final CharSequence textBeforeCursor = isConnected() + ? mIC.getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, 0) + : null; if (null == textBeforeCursor) { // For some reason the app thinks we are not connected to it. This looks like a // framework bug... Fall back to ground state and return false. @@ -235,7 +241,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { // it works, but it's wrong and should be fixed. mCommittedTextBeforeComposingText.append(mComposingText); mComposingText.setLength(0); - if (null != mIC) { + if (isConnected()) { mIC.finishComposingText(); } } @@ -256,7 +262,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mExpectedSelStart += text.length() - mComposingText.length(); mExpectedSelEnd = mExpectedSelStart; mComposingText.setLength(0); - if (null != mIC) { + if (isConnected()) { mTempObjectForCommitText.clear(); mTempObjectForCommitText.append(text); final CharacterStyle[] spans = mTempObjectForCommitText.getSpans( @@ -283,7 +289,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { } public CharSequence getSelectedText(final int flags) { - return (null == mIC) ? null : mIC.getSelectedText(flags); + return isConnected() ? mIC.getSelectedText(flags) : null; } public boolean canDeleteCharacters() { @@ -308,7 +314,9 @@ public final class RichInputConnection implements PrivateCommandPerformer { public int getCursorCapsMode(final int inputType, final SpacingAndPunctuations spacingAndPunctuations, final boolean hasSpaceBefore) { mIC = mParent.getCurrentInputConnection(); - if (null == mIC) return Constants.TextUtils.CAP_MODE_OFF; + if (!isConnected()) { + return Constants.TextUtils.CAP_MODE_OFF; + } if (!TextUtils.isEmpty(mComposingText)) { if (hasSpaceBefore) { // If we have some composing text and a space before, then we should have @@ -368,12 +376,12 @@ public final class RichInputConnection implements PrivateCommandPerformer { return s; } mIC = mParent.getCurrentInputConnection(); - return (null == mIC) ? null : mIC.getTextBeforeCursor(n, flags); + return isConnected() ? mIC.getTextBeforeCursor(n, flags) : null; } public CharSequence getTextAfterCursor(final int n, final int flags) { mIC = mParent.getCurrentInputConnection(); - return (null == mIC) ? null : mIC.getTextAfterCursor(n, flags); + return isConnected() ? mIC.getTextAfterCursor(n, flags) : null; } public void deleteSurroundingText(final int beforeLength, final int afterLength) { @@ -400,7 +408,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mExpectedSelEnd -= mExpectedSelStart; mExpectedSelStart = 0; } - if (null != mIC) { + if (isConnected()) { mIC.deleteSurroundingText(beforeLength, afterLength); } if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); @@ -408,7 +416,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public void performEditorAction(final int actionId) { mIC = mParent.getCurrentInputConnection(); - if (null != mIC) { + if (isConnected()) { mIC.performEditorAction(actionId); } } @@ -460,7 +468,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { break; } } - if (null != mIC) { + if (isConnected()) { mIC.sendKeyEvent(keyEvent); } } @@ -483,7 +491,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mCommittedTextBeforeComposingText.append( textBeforeCursor.subSequence(0, indexOfStartOfComposingText)); } - if (null != mIC) { + if (isConnected()) { mIC.setComposingRegion(start, end); } } @@ -497,7 +505,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mComposingText.append(text); // TODO: support values of newCursorPosition != 1. At this time, this is never called with // newCursorPosition != 1. - if (null != mIC) { + if (isConnected()) { mIC.setComposingText(text, newCursorPosition); } if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); @@ -522,7 +530,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { } mExpectedSelStart = start; mExpectedSelEnd = end; - if (null != mIC) { + if (isConnected()) { final boolean isIcValid = mIC.setSelection(start, end); if (!isIcValid) { return false; @@ -536,7 +544,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); // This has no effect on the text field and does not change its content. It only makes // TextView flash the text for a second based on indices contained in the argument. - if (null != mIC) { + if (isConnected()) { mIC.commitCorrection(correctionInfo); } if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); @@ -552,7 +560,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mExpectedSelStart += text.length() - mComposingText.length(); mExpectedSelEnd = mExpectedSelStart; mComposingText.setLength(0); - if (null != mIC) { + if (isConnected()) { mIC.commitCompletion(completionInfo); } if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug(); @@ -563,7 +571,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public NgramContext getNgramContextFromNthPreviousWord( final SpacingAndPunctuations spacingAndPunctuations, final int n) { mIC = mParent.getCurrentInputConnection(); - if (null == mIC) { + if (!isConnected()) { return NgramContext.EMPTY_PREV_WORDS_INFO; } final CharSequence prev = getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0); @@ -608,7 +616,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public TextRange getWordRangeAtCursor(final SpacingAndPunctuations spacingAndPunctuations, final int scriptId) { mIC = mParent.getCurrentInputConnection(); - if (mIC == null) { + if (!isConnected()) { return null; } final CharSequence before = mIC.getTextBeforeCursor(Constants.EDITOR_CONTENTS_CACHE_SIZE, @@ -824,7 +832,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { mIC = mParent.getCurrentInputConnection(); final CharSequence textBeforeCursor = getTextBeforeCursor( Constants.EDITOR_CONTENTS_CACHE_SIZE, 0); - final CharSequence selectedText = null == mIC ? null : mIC.getSelectedText(0 /* flags */); + final CharSequence selectedText = isConnected() ? mIC.getSelectedText(0 /* flags */) : null; if (null == textBeforeCursor || (!TextUtils.isEmpty(selectedText) && mExpectedSelEnd == mExpectedSelStart)) { // If textBeforeCursor is null, we have no idea what kind of text field we have or if @@ -863,7 +871,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { @Override public boolean performPrivateCommand(final String action, final Bundle data) { mIC = mParent.getCurrentInputConnection(); - if (mIC == null) { + if (!isConnected()) { return false; } return mIC.performPrivateCommand(action, data); @@ -923,7 +931,7 @@ public final class RichInputConnection implements PrivateCommandPerformer { public boolean requestCursorUpdates(final boolean enableMonitor, final boolean requestImmediateCallback) { mIC = mParent.getCurrentInputConnection(); - if (mIC == null) { + if (!isConnected()) { return false; } return InputConnectionCompatUtils.requestCursorUpdates( diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index 428956a7b..f4680fc88 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -18,8 +18,9 @@ package com.android.inputmethod.latin; import android.text.TextUtils; -import com.android.inputmethod.keyboard.KeyboardLayout; -import com.android.inputmethod.keyboard.ProximityInfo; +import static com.android.inputmethod.latin.define.DecoderSpecificConstants.SHOULD_AUTO_CORRECT_USING_NON_WHITE_LISTED_SUGGESTION; + +import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.common.Constants; import com.android.inputmethod.latin.common.StringUtils; @@ -95,19 +96,17 @@ public final class Suggest { } public void getSuggestedWords(final WordComposer wordComposer, - final NgramContext ngramContext, final ProximityInfo proximityInfo, + final NgramContext ngramContext, final Keyboard keyboard, final SettingsValuesForSuggestion settingsValuesForSuggestion, final boolean isCorrectionEnabled, final int inputStyle, final int sequenceNumber, - final OnGetSuggestedWordsCallback callback, - final KeyboardLayout keyboardLayout) { + final OnGetSuggestedWordsCallback callback) { if (wordComposer.isBatchMode()) { - getSuggestedWordsForBatchInput(wordComposer, ngramContext, proximityInfo, - settingsValuesForSuggestion, inputStyle, sequenceNumber, callback, - keyboardLayout); + getSuggestedWordsForBatchInput(wordComposer, ngramContext, keyboard, + settingsValuesForSuggestion, inputStyle, sequenceNumber, callback); } else { - getSuggestedWordsForNonBatchInput(wordComposer, ngramContext, proximityInfo, + getSuggestedWordsForNonBatchInput(wordComposer, ngramContext, keyboard, settingsValuesForSuggestion, inputStyle, isCorrectionEnabled, - sequenceNumber, callback, keyboardLayout); + sequenceNumber, callback); } } @@ -163,11 +162,10 @@ public final class Suggest { // Retrieves suggestions for non-batch input (typing, recorrection, predictions...) // and calls the callback function with the suggestions. private void getSuggestedWordsForNonBatchInput(final WordComposer wordComposer, - final NgramContext ngramContext, final ProximityInfo proximityInfo, + final NgramContext ngramContext, final Keyboard keyboard, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int inputStyleIfNotPrediction, final boolean isCorrectionEnabled, - final int sequenceNumber, final OnGetSuggestedWordsCallback callback, - final KeyboardLayout keyboardLayout) { + final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { final String typedWordString = wordComposer.getTypedWord(); final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(typedWordString); @@ -176,9 +174,8 @@ public final class Suggest { : typedWordString; final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults( - wordComposer.getComposedDataSnapshot(), ngramContext, - proximityInfo.getNativeProximityInfo(), settingsValuesForSuggestion, - SESSION_ID_TYPING, inputStyleIfNotPrediction, keyboardLayout); + wordComposer.getComposedDataSnapshot(), ngramContext, keyboard, + settingsValuesForSuggestion, SESSION_ID_TYPING, inputStyleIfNotPrediction); final Locale mostProbableLocale = mDictionaryFacilitator.getMostProbableLocale(); final ArrayList<SuggestedWordInfo> suggestionsContainer = getTransformedSuggestedWordInfoList(wordComposer, suggestionResults, @@ -213,7 +210,8 @@ public final class Suggest { } } - SuggestedWordInfo.removeDups(typedWordString, suggestionsContainer); + final int firstOcurrenceOfTypedWordInSuggestions = + SuggestedWordInfo.removeDups(typedWordString, suggestionsContainer); final SuggestedWordInfo whitelistedWordInfo = getWhitelistedWordInfoOrNull(suggestionsContainer); @@ -236,10 +234,11 @@ public final class Suggest { } final boolean resultsArePredictions = !wordComposer.isComposingWord(); - // We allow auto-correction if we have a whitelisted word, or if the word had more than - // one char and was not suggested. - final boolean allowsToBeAutoCorrected = (null != whitelistedWord) - || (consideredWord.length() > 1 && (null == sourceDictionaryOfRemovedWord)); + // We allow auto-correction if whitelisting is not required or the word is whitelisted, + // or if the word had more than one char and was not suggested. + final boolean allowsToBeAutoCorrected = + (SHOULD_AUTO_CORRECT_USING_NON_WHITE_LISTED_SUGGESTION || whitelistedWord != null) + || (consideredWord.length() > 1 && (sourceDictionaryOfRemovedWord == null)); final boolean hasAutoCorrection; // If correction is not enabled, we never auto-correct. This is for example for when @@ -275,7 +274,8 @@ public final class Suggest { hasAutoCorrection = false; } else { final SuggestedWordInfo firstSuggestion = suggestionResults.first(); - if (suggestionResults.mAutocorrectRecommendation) { + if (suggestionResults.mFirstSuggestionExceedsConfidenceThreshold + && firstOcurrenceOfTypedWordInSuggestions != 0) { hasAutoCorrection = true; } else if (!AutoCorrectionUtils.suggestionExceedsThreshold( firstSuggestion, consideredWord, mAutoCorrectionThreshold)) { @@ -316,12 +316,12 @@ public final class Suggest { } else { inputStyle = inputStyleIfNotPrediction; } + + final boolean isTypedWordValid = firstOcurrenceOfTypedWordInSuggestions > -1 + || (!resultsArePredictions && !allowsToBeAutoCorrected); callback.onGetSuggestedWords(new SuggestedWords(suggestionsList, suggestionResults.mRawSuggestions, typedWordInfo, - // TODO: this first argument is lying. If this is a whitelisted word which is an - // actual word, it says typedWordValid = false, which looks wrong. We should either - // rename the attribute or change the value. - !resultsArePredictions && !allowsToBeAutoCorrected /* typedWordValid */, + isTypedWordValid, hasAutoCorrection /* willAutoCorrect */, false /* isObsoleteSuggestions */, inputStyle, sequenceNumber)); } @@ -343,15 +343,13 @@ public final class Suggest { // Retrieves suggestions for the batch input // and calls the callback function with the suggestions. private void getSuggestedWordsForBatchInput(final WordComposer wordComposer, - final NgramContext ngramContext, final ProximityInfo proximityInfo, + final NgramContext ngramContext, final Keyboard keyboard, final SettingsValuesForSuggestion settingsValuesForSuggestion, final int inputStyle, final int sequenceNumber, - final OnGetSuggestedWordsCallback callback, - final KeyboardLayout keyboardLayout) { + final OnGetSuggestedWordsCallback callback) { final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults( - wordComposer.getComposedDataSnapshot(), ngramContext, - proximityInfo.getNativeProximityInfo(), settingsValuesForSuggestion, - SESSION_ID_GESTURE, inputStyle, keyboardLayout); + wordComposer.getComposedDataSnapshot(), ngramContext, keyboard, + settingsValuesForSuggestion, SESSION_ID_GESTURE, inputStyle); // For transforming words that don't come from a dictionary, because it's our best bet final Locale defaultLocale = mDictionaryFacilitator.getMostProbableLocale(); final ArrayList<SuggestedWordInfo> suggestionsContainer = diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java index 913b63a61..3816c0870 100644 --- a/java/src/com/android/inputmethod/latin/SuggestedWords.java +++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java @@ -17,6 +17,7 @@ package com.android.inputmethod.latin; import android.text.TextUtils; +import android.util.Log; import android.view.inputmethod.CompletionInfo; import com.android.inputmethod.annotations.UsedForTesting; @@ -375,31 +376,45 @@ public class SuggestedWords { return mWord + " (" + mDebugString + ")"; } - // This will always remove the higher index if a duplicate is found. - public static void removeDups(@Nullable final String typedWord, - @Nonnull ArrayList<SuggestedWordInfo> candidates) { + /** + * This will always remove the higher index if a duplicate is found. + * + * @return position of typed word in the candidate list + */ + public static int removeDups( + @Nullable final String typedWord, + @Nonnull final ArrayList<SuggestedWordInfo> candidates) { if (candidates.isEmpty()) { - return; + return -1; } + int firstOccurrenceOfWord = -1; if (!TextUtils.isEmpty(typedWord)) { - removeSuggestedWordInfoFromList(typedWord, candidates, -1 /* startIndexExclusive */); + firstOccurrenceOfWord = removeSuggestedWordInfoFromList( + typedWord, candidates, -1 /* startIndexExclusive */); } for (int i = 0; i < candidates.size(); ++i) { - removeSuggestedWordInfoFromList(candidates.get(i).mWord, candidates, - i /* startIndexExclusive */); + removeSuggestedWordInfoFromList( + candidates.get(i).mWord, candidates, i /* startIndexExclusive */); } + return firstOccurrenceOfWord; } - private static void removeSuggestedWordInfoFromList( - @Nonnull final String word, @Nonnull final ArrayList<SuggestedWordInfo> candidates, + private static int removeSuggestedWordInfoFromList( + @Nonnull final String word, + @Nonnull final ArrayList<SuggestedWordInfo> candidates, final int startIndexExclusive) { + int firstOccurrenceOfWord = -1; for (int i = startIndexExclusive + 1; i < candidates.size(); ++i) { final SuggestedWordInfo previous = candidates.get(i); if (word.equals(previous.mWord)) { + if (firstOccurrenceOfWord == -1) { + firstOccurrenceOfWord = i; + } candidates.remove(i); --i; } } + return firstOccurrenceOfWord; } } diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index 32ef1021d..8803edc88 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -232,31 +232,33 @@ public final class WordComposer { * @return true if the cursor is still inside the composing word, false otherwise. */ public boolean moveCursorByAndReturnIfInsideComposingWord(final int expectedMoveAmount) { - int actualMoveAmountWithinWord = 0; + int actualMoveAmount = 0; int cursorPos = mCursorPositionWithinWord; // TODO: Don't make that copy. We can do this directly from mTypedWordCache. final int[] codePoints = StringUtils.toCodePointArray(mTypedWordCache); if (expectedMoveAmount >= 0) { // Moving the cursor forward for the expected amount or until the end of the word has // been reached, whichever comes first. - while (actualMoveAmountWithinWord < expectedMoveAmount && cursorPos < mCodePointSize) { - actualMoveAmountWithinWord += Character.charCount(codePoints[cursorPos]); + while (actualMoveAmount < expectedMoveAmount && cursorPos < codePoints.length) { + actualMoveAmount += Character.charCount(codePoints[cursorPos]); ++cursorPos; } } else { // Moving the cursor backward for the expected amount or until the start of the word // has been reached, whichever comes first. - while (actualMoveAmountWithinWord > expectedMoveAmount && cursorPos > 0) { + while (actualMoveAmount > expectedMoveAmount && cursorPos > 0) { --cursorPos; - actualMoveAmountWithinWord -= Character.charCount(codePoints[cursorPos]); + actualMoveAmount -= Character.charCount(codePoints[cursorPos]); } } // If the actual and expected amounts differ, we crossed the start or the end of the word // so the result would not be inside the composing word. - if (actualMoveAmountWithinWord != expectedMoveAmount) return false; + if (actualMoveAmount != expectedMoveAmount) { + return false; + } mCursorPositionWithinWord = cursorPos; - mCombinerChain.applyProcessedEvent(mCombinerChain.processEvent(mEvents, - Event.createCursorMovedEvent(cursorPos))); + mCombinerChain.applyProcessedEvent(mCombinerChain.processEvent( + mEvents, Event.createCursorMovedEvent(cursorPos))); return true; } diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java index 57aa59190..3f1646beb 100644 --- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java @@ -32,9 +32,8 @@ import android.view.inputmethod.EditorInfo; import com.android.inputmethod.compat.SuggestionSpanUtils; import com.android.inputmethod.event.Event; import com.android.inputmethod.event.InputTransaction; -import com.android.inputmethod.keyboard.KeyboardLayout; +import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardSwitcher; -import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.Dictionary; import com.android.inputmethod.latin.DictionaryFacilitator; import com.android.inputmethod.latin.LastComposedWord; @@ -926,6 +925,7 @@ public final class InputLogic { if (tryPerformDoubleSpacePeriod(event, inputTransaction)) { mSpaceState = SpaceState.DOUBLE; inputTransaction.setRequiresUpdateSuggestions(); + StatsUtils.onDoubleSpacePeriod(); } else if (swapWeakSpace && trySwapSwapperAndSpace(event, inputTransaction)) { mSpaceState = SpaceState.SWAP_PUNCTUATION; mSuggestionStripViewAccessor.setNeutralSuggestionStrip(); @@ -2165,9 +2165,8 @@ public final class InputLogic { } public void getSuggestedWords(final SettingsValues settingsValues, - final ProximityInfo proximityInfo, final int keyboardShiftMode, final int inputStyle, - final int sequenceNumber, final OnGetSuggestedWordsCallback callback, - final KeyboardLayout keyboardLayout) { + final Keyboard keyboard, final int keyboardShiftMode, final int inputStyle, + final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { mWordComposer.adviseCapitalizedModeBeforeFetchingSuggestions( getActualCapsMode(settingsValues, keyboardShiftMode)); mSuggest.getSuggestedWords(mWordComposer, @@ -2177,11 +2176,11 @@ public final class InputLogic { // a word, it's whatever is *before* the half-committed word in the buffer, // hence 2; if we aren't, we should just skip whitespace if any, so 1. mWordComposer.isComposingWord() ? 2 : 1), - proximityInfo, + keyboard, new SettingsValuesForSuggestion(settingsValues.mBlockPotentiallyOffensive, settingsValues.mPhraseGestureEnabled), settingsValues.mAutoCorrectionEnabledPerUserSettings, - inputStyle, sequenceNumber, callback, keyboardLayout); + inputStyle, sequenceNumber, callback); } /** diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java index 1e9f8e47e..32a746d37 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java +++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java @@ -172,8 +172,8 @@ public final class FormatSpec { public static final int VERSION2 = 2; public static final int VERSION201 = 201; public static final int VERSION202 = 202; - // format version for Fava - public static final int VERSION300 = 300; + // format version for Fava Dictionaries. + public static final int VERSION_DELIGHT3 = 86736212; public static final int MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE = VERSION201; // Dictionary version used for testing. public static final int VERSION4_ONLY_FOR_TESTING = 399; @@ -182,7 +182,7 @@ public final class FormatSpec { public static final int VERSION4 = VERSION403; public static final int VERSION4_DEV = VERSION403; public static final int MINIMUM_SUPPORTED_STATIC_VERSION = VERSION202; - public static final int MAXIMUM_SUPPORTED_STATIC_VERSION = VERSION300; + public static final int MAXIMUM_SUPPORTED_STATIC_VERSION = VERSION_DELIGHT3; static final int MINIMUM_SUPPORTED_DYNAMIC_VERSION = VERSION4; static final int MAXIMUM_SUPPORTED_DYNAMIC_VERSION = VERSION4_DEV; diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java deleted file mode 100644 index 78b51d9f4..000000000 --- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.latin.personalization; - -import android.content.Context; - -import com.android.inputmethod.latin.Dictionary; -import com.android.inputmethod.latin.ExpandableBinaryDictionary; -import com.android.inputmethod.latin.makedict.DictionaryHeader; - -import java.io.File; -import java.util.Locale; -import java.util.Map; - -/** - * This class is a base class of a dictionary that supports decaying for the personalized language - * model. - */ -public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableBinaryDictionary { - private static final boolean DBG_DUMP_ON_CLOSE = false; - - /** Any pair being typed or picked */ - public static final int FREQUENCY_FOR_TYPED = 2; - - public static final int FREQUENCY_FOR_WORDS_IN_DICTS = FREQUENCY_FOR_TYPED; - public static final int FREQUENCY_FOR_WORDS_NOT_IN_DICTS = Dictionary.NOT_A_PROBABILITY; - - protected DecayingExpandableBinaryDictionaryBase(final Context context, - final String dictName, final Locale locale, final String dictionaryType, - final File dictFile) { - super(context, dictName, locale, dictionaryType, dictFile); - if (mLocale != null && mLocale.toString().length() > 1) { - reloadDictionaryIfRequired(); - } - } - - @Override - public void close() { - if (DBG_DUMP_ON_CLOSE) { - dumpAllWordsForDebug(); - } - // Flush pending writes. - asyncFlushBinaryDictionary(); - super.close(); - } - - @Override - protected Map<String, String> getHeaderAttributeMap() { - final Map<String, String> attributeMap = super.getHeaderAttributeMap(); - attributeMap.put(DictionaryHeader.USES_FORGETTING_CURVE_KEY, - DictionaryHeader.ATTRIBUTE_VALUE_TRUE); - attributeMap.put(DictionaryHeader.HAS_HISTORICAL_INFO_KEY, - DictionaryHeader.ATTRIBUTE_VALUE_TRUE); - return attributeMap; - } - - @Override - protected void loadInitialContentsLocked() { - // No initial contents. - } - - /* package */ void runGCIfRequired() { - runGCIfRequired(false /* mindsBlockByGC */); - } - - @Override - public boolean isValidWord(final String word) { - // Strings out of this dictionary should not be considered existing words. - return false; - } -} diff --git a/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java b/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java deleted file mode 100644 index 0c5e5d010..000000000 --- a/java/src/com/android/inputmethod/latin/personalization/DictionaryDecayBroadcastReciever.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * 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.latin.personalization; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import java.util.concurrent.TimeUnit; - -/** - * Broadcast receiver for periodically updating decaying dictionaries. - */ -public class DictionaryDecayBroadcastReciever extends BroadcastReceiver { - /** - * The root domain for the personalization. - */ - private static final String PERSONALIZATION_DOMAIN = - "com.android.inputmethod.latin.personalization"; - - /** - * The action of the intent to tell the time to decay dictionaries. - */ - private static final String DICTIONARY_DECAY_INTENT_ACTION = - PERSONALIZATION_DOMAIN + ".DICT_DECAY"; - - /** - * Interval to update for decaying dictionaries. - */ - static final long DICTIONARY_DECAY_INTERVAL_IN_MILLIS = TimeUnit.MINUTES.toMillis(60); - - private static PendingIntent getPendingIntentForDictionaryDecay(final Context context) { - final Intent updateIntent = new Intent(DICTIONARY_DECAY_INTENT_ACTION); - updateIntent.setClass(context, DictionaryDecayBroadcastReciever.class); - return PendingIntent.getBroadcast(context, 0 /* requestCode */, - updateIntent, PendingIntent.FLAG_CANCEL_CURRENT); - } - - /** - * Set up interval alarm for dynamic dictionaries. - */ - public static void setUpIntervalAlarmForDictionaryDecaying(final Context context) { - final AlarmManager alarmManager = - (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - if (null == alarmManager) { - return; - } - final long alarmTriggerTimeInMillis = - System.currentTimeMillis() + DICTIONARY_DECAY_INTERVAL_IN_MILLIS; - alarmManager.setInexactRepeating(AlarmManager.RTC, alarmTriggerTimeInMillis, - DICTIONARY_DECAY_INTERVAL_IN_MILLIS, getPendingIntentForDictionaryDecay(context)); - } - - /** - * Cancel interval alarm that has been set up. - */ - public static void cancelIntervalAlarmForDictionaryDecaying(final Context context) { - final AlarmManager alarmManager = - (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - if (null == alarmManager) { - return; - } - alarmManager.cancel(getPendingIntentForDictionaryDecay(context)); - } - - @Override - public void onReceive(final Context context, final Intent intent) { - final String action = intent.getAction(); - if (action.equals(DICTIONARY_DECAY_INTENT_ACTION)) { - PersonalizationHelper.runGCOnAllOpenedUserHistoryDictionaries(); - } - } -} diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java index 1c1cb4f95..298e46c0a 100644 --- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java +++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java @@ -26,7 +26,6 @@ import java.io.FilenameFilter; import java.lang.ref.SoftReference; import java.util.Locale; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -68,60 +67,28 @@ public class PersonalizationHelper { } } - private static int sCurrentTimestampForTesting = 0; - public static void currentTimeChangedForTesting(final int currentTimestamp) { - if (TimeUnit.MILLISECONDS.toSeconds( - DictionaryDecayBroadcastReciever.DICTIONARY_DECAY_INTERVAL_IN_MILLIS) - < currentTimestamp - sCurrentTimestampForTesting) { - runGCOnAllOpenedUserHistoryDictionaries(); - } - } - - public static void runGCOnAllOpenedUserHistoryDictionaries() { - runGCOnAllDictionariesIfRequired(sLangUserHistoryDictCache); - } - - private static <T extends DecayingExpandableBinaryDictionaryBase> - void runGCOnAllDictionariesIfRequired( - final ConcurrentHashMap<String, SoftReference<T>> dictionaryMap) { - for (final ConcurrentHashMap.Entry<String, SoftReference<T>> entry - : dictionaryMap.entrySet()) { - final DecayingExpandableBinaryDictionaryBase dict = entry.getValue().get(); - if (dict != null) { - dict.runGCIfRequired(); - } else { - dictionaryMap.remove(entry.getKey()); - } - } - } - public static void removeAllUserHistoryDictionaries(final Context context) { - removeAllDictionaries(context, sLangUserHistoryDictCache, - UserHistoryDictionary.NAME); - } - - private static <T extends DecayingExpandableBinaryDictionaryBase> void removeAllDictionaries( - final Context context, final ConcurrentHashMap<String, SoftReference<T>> dictionaryMap, - final String dictNamePrefix) { - synchronized (dictionaryMap) { - for (final ConcurrentHashMap.Entry<String, SoftReference<T>> entry - : dictionaryMap.entrySet()) { + synchronized (sLangUserHistoryDictCache) { + for (final ConcurrentHashMap.Entry<String, SoftReference<UserHistoryDictionary>> entry + : sLangUserHistoryDictCache.entrySet()) { if (entry.getValue() != null) { - final DecayingExpandableBinaryDictionaryBase dict = entry.getValue().get(); + final UserHistoryDictionary dict = entry.getValue().get(); if (dict != null) { dict.clear(); } } } - dictionaryMap.clear(); + sLangUserHistoryDictCache.clear(); final File filesDir = context.getFilesDir(); if (filesDir == null) { Log.e(TAG, "context.getFilesDir() returned null."); return; } - if (!FileUtils.deleteFilteredFiles(filesDir, new DictFilter(dictNamePrefix))) { - Log.e(TAG, "Cannot remove all existing dictionary files. filesDir: " - + filesDir.getAbsolutePath() + ", dictNamePrefix: " + dictNamePrefix); + final boolean filesDeleted = FileUtils.deleteFilteredFiles( + filesDir, new DictFilter(UserHistoryDictionary.NAME)); + if (!filesDeleted) { + Log.e(TAG, "Cannot remove dictionary files. filesDir: " + filesDir.getAbsolutePath() + + ", dictNamePrefix: " + UserHistoryDictionary.NAME); } } } diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java index b6286b203..54ee68d65 100644 --- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -25,9 +25,11 @@ import com.android.inputmethod.latin.ExpandableBinaryDictionary; import com.android.inputmethod.latin.NgramContext; import com.android.inputmethod.latin.define.DecoderSpecificConstants; import com.android.inputmethod.latin.define.ProductionFlags; +import com.android.inputmethod.latin.makedict.DictionaryHeader; import java.io.File; import java.util.Locale; +import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -37,17 +39,16 @@ import javax.annotation.Nullable; * auto-correction cancellation or manual picks. This allows the keyboard to adapt to the * typist over time. */ -public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBase { +public class UserHistoryDictionary extends ExpandableBinaryDictionary { static final String NAME = UserHistoryDictionary.class.getSimpleName(); // TODO: Make this constructor private UserHistoryDictionary(final Context context, final Locale locale, @Nullable final String account) { - super(context, - getUserHistoryDictName(NAME, locale, null /* dictFile */, account), - locale, - Dictionary.TYPE_USER_HISTORY, - null /* dictFile */); + super(context, getUserHistoryDictName(NAME, locale, null /* dictFile */, account), locale, Dictionary.TYPE_USER_HISTORY, null); + if (mLocale != null && mLocale.toString().length() > 1) { + reloadDictionaryIfRequired(); + } } /** @@ -103,4 +104,32 @@ public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBas userHistoryDictionary.updateEntriesForWord(ngramContext, word, isValid, 1 /* count */, timestamp); } + + @Override + public void close() { + // Flush pending writes. + asyncFlushBinaryDictionary(); + super.close(); + } + + @Override + protected Map<String, String> getHeaderAttributeMap() { + final Map<String, String> attributeMap = super.getHeaderAttributeMap(); + attributeMap.put(DictionaryHeader.USES_FORGETTING_CURVE_KEY, + DictionaryHeader.ATTRIBUTE_VALUE_TRUE); + attributeMap.put(DictionaryHeader.HAS_HISTORICAL_INFO_KEY, + DictionaryHeader.ATTRIBUTE_VALUE_TRUE); + return attributeMap; + } + + @Override + protected void loadInitialContentsLocked() { + // No initial contents. + } + + @Override + public boolean isValidWord(final String word) { + // Strings out of this dictionary should not be considered existing words. + return false; + } } diff --git a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java index 10d570cbf..394ecead6 100644 --- a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java +++ b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java @@ -23,8 +23,8 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; -import android.content.res.Resources; import android.os.Bundle; +import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.text.TextUtils; @@ -48,36 +48,50 @@ import javax.annotation.Nullable; * <li> Privacy preferences </li> */ public final class AccountsSettingsFragment extends SubScreenFragment { - private static final String PREF_SYNC_NOW = "pref_beanstalk"; - private static final String PREF_CLEAR_SYNC_DATA = "pref_beanstalk_clear_data"; + private static final String PREF_ENABLE_SYNC_NOW = "pref_enable_cloud_sync"; + private static final String PREF_SYNC_NOW = "pref_sync_now"; + private static final String PREF_CLEAR_SYNC_DATA = "pref_clear_sync_data"; static final String PREF_ACCCOUNT_SWITCHER = "account_switcher"; - private final DialogInterface.OnClickListener mAccountChangedListener = - new AccountChangedListener(); - private final Preference.OnPreferenceClickListener mSyncNowListener = new SyncNowListener(); - private final Preference.OnPreferenceClickListener mClearSyncDataListener = - new ClearSyncDataListener(); + /** + * Onclick listener for sync now pref. + */ + private final Preference.OnPreferenceClickListener mSyncNowListener = + new SyncNowListener(); + /** + * Onclick listener for delete sync pref. + */ + private final Preference.OnPreferenceClickListener mDeleteSyncDataListener = + new DeleteSyncDataListener(); + + /** + * Onclick listener for enable sync pref. + */ + private final Preference.OnPreferenceClickListener mEnableSyncClickListener = + new EnableSyncClickListener(); + + /** + * Enable sync checkbox pref. + */ + private CheckBoxPreference mEnableSyncPreference; + + /** + * Enable sync checkbox pref. + */ + private Preference mSyncNowPreference; + + /** + * Clear sync data pref. + */ + private Preference mClearSyncDataPreference; + @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.prefs_screen_accounts); - final Resources res = getResources(); - - if (ProductionFlags.IS_METRICS_LOGGING_SUPPORTED) { - final Preference enableMetricsLogging = - findPreference(Settings.PREF_ENABLE_METRICS_LOGGING); - if (enableMetricsLogging != null) { - final String enableMetricsLoggingTitle = res.getString( - R.string.enable_metrics_logging, getApplicationName()); - enableMetricsLogging.setTitle(enableMetricsLoggingTitle); - } - } else { - removePreference(Settings.PREF_ENABLE_METRICS_LOGGING); - } - if (!ProductionFlags.ENABLE_ACCOUNT_SIGN_IN) { removePreference(PREF_ACCCOUNT_SWITCHER); removePreference(PREF_ENABLE_CLOUD_SYNC); @@ -89,11 +103,14 @@ public final class AccountsSettingsFragment extends SubScreenFragment { removePreference(PREF_SYNC_NOW); removePreference(PREF_CLEAR_SYNC_DATA); } else { - final Preference syncNowPreference = findPreference(PREF_SYNC_NOW); - syncNowPreference.setOnPreferenceClickListener(mSyncNowListener); + mEnableSyncPreference = (CheckBoxPreference) findPreference(PREF_ENABLE_SYNC_NOW); + mEnableSyncPreference.setOnPreferenceClickListener(mEnableSyncClickListener); + + mSyncNowPreference = findPreference(PREF_SYNC_NOW); + mSyncNowPreference.setOnPreferenceClickListener(mSyncNowListener); - final Preference clearSyncDataPreference = findPreference(PREF_CLEAR_SYNC_DATA); - clearSyncDataPreference.setOnPreferenceClickListener(mClearSyncDataListener); + mClearSyncDataPreference = findPreference(PREF_CLEAR_SYNC_DATA); + mClearSyncDataPreference.setOnPreferenceClickListener(mDeleteSyncDataListener); } } @@ -106,15 +123,25 @@ public final class AccountsSettingsFragment extends SubScreenFragment { @Override public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { if (TextUtils.equals(key, PREF_ACCOUNT_NAME)) { - refreshAccountAndDependentPreferences( - prefs.getString(PREF_ACCOUNT_NAME, null)); + refreshAccountAndDependentPreferences(prefs.getString(PREF_ACCOUNT_NAME, null)); } else if (TextUtils.equals(key, PREF_ENABLE_CLOUD_SYNC)) { final boolean syncEnabled = prefs.getBoolean(PREF_ENABLE_CLOUD_SYNC, false); - AccountStateChangedListener.onSyncPreferenceChanged( - getSignedInAccountName(), syncEnabled); + mEnableSyncPreference = (CheckBoxPreference)findPreference(PREF_ENABLE_SYNC_NOW); + mEnableSyncPreference.setChecked(syncEnabled); + if (syncEnabled) { + mEnableSyncPreference.setSummary(R.string.cloud_sync_summary); + } else { + mEnableSyncPreference.setSummary(R.string.cloud_sync_summary_disabled); + } + AccountStateChangedListener.onSyncPreferenceChanged(getSignedInAccountName(), + syncEnabled); } } + /** + * Summarizes what account is being used and turns off dependent preferences if no account + * is currently selected. + */ private void refreshAccountAndDependentPreferences(@Nullable final String currentAccount) { if (!ProductionFlags.ENABLE_ACCOUNT_SIGN_IN) { return; @@ -122,61 +149,33 @@ public final class AccountsSettingsFragment extends SubScreenFragment { final Preference accountSwitcher = findPreference(PREF_ACCCOUNT_SWITCHER); if (currentAccount == null) { - // No account is currently selected. + // No account is currently selected; switch enable sync preference off. accountSwitcher.setSummary(getString(R.string.no_accounts_selected)); - // Disable the sync preference UI. - disableSyncPreference(); + mEnableSyncPreference.setChecked(false); } else { - // Set the currently selected account. + // Set the currently selected account as the summary text. accountSwitcher.setSummary(getString(R.string.account_selected, currentAccount)); - // Enable the sync preference UI. - enableSyncPreference(); } - // Set up onClick listener for the account picker preference. - final Context context = getActivity(); - final String[] accountsForLogin = LoginAccountUtils.getAccountsForLogin(context); + + // Set up on click listener for the account picker preference. accountSwitcher.setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(final Preference preference) { - if (accountsForLogin.length == 0) { - // TODO: Handle account addition. - Toast.makeText(getActivity(), getString(R.string.account_select_cancel), - Toast.LENGTH_SHORT).show(); - } else { - createAccountPicker(accountsForLogin, currentAccount).show(); + @Override + public boolean onPreferenceClick(final Preference preference) { + final String[] accountsForLogin = + LoginAccountUtils.getAccountsForLogin(getActivity()); + if (accountsForLogin.length == 0) { + // TODO: Handle account addition. + Toast.makeText(getActivity(), getString(R.string.account_select_cancel), + Toast.LENGTH_SHORT).show(); + } else { + createAccountPicker(accountsForLogin, currentAccount, + new AccountChangedListener(null)).show(); + } + return true; } - return true; - } }); } - /** - * Enables the Sync preference UI and updates its summary. - */ - private void enableSyncPreference() { - if (!ProductionFlags.ENABLE_USER_HISTORY_DICTIONARY_SYNC) { - return; - } - - final Preference syncPreference = findPreference(PREF_ENABLE_CLOUD_SYNC); - syncPreference.setEnabled(true); - syncPreference.setSummary(R.string.cloud_sync_summary); - } - - /** - * Disables the Sync preference UI and updates its summary to indicate - * the fact that an account needs to be selected for sync. - */ - private void disableSyncPreference() { - if (!ProductionFlags.ENABLE_USER_HISTORY_DICTIONARY_SYNC) { - return; - } - - final Preference syncPreference = findPreference(PREF_ENABLE_CLOUD_SYNC); - syncPreference.setEnabled(false); - syncPreference.setSummary(R.string.cloud_sync_summary_disabled_signed_out); - } - @Nullable String getSignedInAccountName() { return getSharedPreferences().getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, null); @@ -188,14 +187,19 @@ public final class AccountsSettingsFragment extends SubScreenFragment { /** * Creates an account picker dialog showing the given accounts in a list and selecting - * the selected account by default. - * The list of accounts must not be null/empty. + * the selected account by default. The list of accounts must not be null/empty. * * Package-private for testing. + * + * @param accounts list of accounts on the device. + * @param selectedAccount currently selected account + * @param positiveButtonClickListener listener that gets called when positive button is + * clicked */ @UsedForTesting AlertDialog createAccountPicker(final String[] accounts, - final String selectedAccount) { + final String selectedAccount, + final DialogInterface.OnClickListener positiveButtonClickListener) { if (accounts == null || accounts.length == 0) { throw new IllegalArgumentException("List of accounts must not be empty"); } @@ -216,10 +220,10 @@ public final class AccountsSettingsFragment extends SubScreenFragment { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setTitle(R.string.account_select_title) .setSingleChoiceItems(accounts, index, null) - .setPositiveButton(R.string.account_select_ok, mAccountChangedListener) + .setPositiveButton(R.string.account_select_ok, positiveButtonClickListener) .setNegativeButton(R.string.account_select_cancel, null); if (isSignedIn) { - builder.setNeutralButton(R.string.account_select_sign_out, mAccountChangedListener); + builder.setNeutralButton(R.string.account_select_sign_out, positiveButtonClickListener); } return builder.create(); } @@ -229,6 +233,15 @@ public final class AccountsSettingsFragment extends SubScreenFragment { * Persists/removes the account to/from shared preferences and sets up sync if required. */ class AccountChangedListener implements DialogInterface.OnClickListener { + /** + * Represents preference that should be changed based on account chosen. + */ + private CheckBoxPreference mDependentPreference; + + AccountChangedListener(final CheckBoxPreference dependentPreference) { + mDependentPreference = dependentPreference; + } + @Override public void onClick(final DialogInterface dialog, final int which) { final String oldAccount = getSignedInAccountName(); @@ -242,6 +255,9 @@ public final class AccountsSettingsFragment extends SubScreenFragment { .putString(PREF_ACCOUNT_NAME, newAccount) .apply(); AccountStateChangedListener.onAccountSignedIn(oldAccount, newAccount); + if (mDependentPreference != null) { + mDependentPreference.setChecked(true); + } break; case DialogInterface.BUTTON_NEUTRAL: // Signed out AccountStateChangedListener.onAccountSignedOut(oldAccount); @@ -268,7 +284,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment { /** * Listener that initiates the process of deleting user's data from the cloud. */ - class ClearSyncDataListener implements Preference.OnPreferenceClickListener { + class DeleteSyncDataListener implements Preference.OnPreferenceClickListener { @Override public boolean onPreferenceClick(final Preference preference) { final AlertDialog confirmationDialog = new AlertDialog.Builder(getActivity()) @@ -284,10 +300,49 @@ public final class AccountsSettingsFragment extends SubScreenFragment { } } }) - .setNegativeButton(R.string.clear_sync_data_cancel, null /* OnClickListener */) + .setNegativeButton(R.string.cloud_sync_cancel, null /* OnClickListener */) .create(); confirmationDialog.show(); return true; } } + + /** + * Listens to events when user clicks on "Enable sync" feature. + */ + class EnableSyncClickListener implements Preference.OnPreferenceClickListener { + @Override + public boolean onPreferenceClick(final Preference preference) { + final CheckBoxPreference syncPreference = (CheckBoxPreference) preference; + if (syncPreference.isChecked()) { + // Uncheck for now. + syncPreference.setChecked(false); + + // Show opt-in. + final AlertDialog optInDialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.cloud_sync_title) + .setMessage(R.string.cloud_sync_opt_in_text) + .setPositiveButton(R.string.account_select_ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(final DialogInterface dialog, + final int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + final Context context = getActivity(); + final String[] accountsForLogin = + LoginAccountUtils.getAccountsForLogin(context); + createAccountPicker(accountsForLogin, + getSignedInAccountName(), + new AccountChangedListener(syncPreference)) + .show(); + } + } + }) + .setNegativeButton(R.string.cloud_sync_cancel, null) + .create(); + optInDialog.show(); + } + return true; + } + } } diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index 9822c5725..f04f093f0 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -28,9 +28,7 @@ import android.util.Log; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardId; -import com.android.inputmethod.keyboard.KeyboardLayout; import com.android.inputmethod.keyboard.KeyboardLayoutSet; -import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.DictionaryFacilitator; import com.android.inputmethod.latin.DictionaryFacilitatorLruCache; import com.android.inputmethod.latin.NgramContext; @@ -48,6 +46,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Semaphore; +import javax.annotation.Nonnull; + /** * Service for spell checking, using LatinIME's dictionaries and mechanisms. */ @@ -193,7 +193,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService public SuggestionResults getSuggestionResults(final Locale locale, final ComposedData composedData, final NgramContext ngramContext, - final ProximityInfo proximityInfo, final KeyboardLayout keyboardLayout) { + @Nonnull final Keyboard keyboard) { Integer sessionId = null; mSemaphore.acquireUninterruptibly(); try { @@ -201,8 +201,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService DictionaryFacilitator dictionaryFacilitatorForLocale = mDictionaryFacilitatorCache.get(locale); return dictionaryFacilitatorForLocale.getSuggestionResults(composedData, ngramContext, - proximityInfo.getNativeProximityInfo(), mSettingsValuesForSuggestion, - sessionId, SuggestedWords.INPUT_STYLE_TYPING, keyboardLayout); + keyboard, mSettingsValuesForSuggestion, + sessionId, SuggestedWords.INPUT_STYLE_TYPING); } finally { if (sessionId != null) { mSessionIdPool.add(sessionId); diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java index 1c43a4b71..5c1915c6c 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java @@ -29,18 +29,11 @@ import android.view.textservice.TextInfo; import com.android.inputmethod.compat.SuggestionsInfoCompatUtils; import com.android.inputmethod.keyboard.Keyboard; -import com.android.inputmethod.keyboard.KeyboardLayout; -import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.NgramContext; -import com.android.inputmethod.latin.SuggestedWords; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.WordComposer; -import com.android.inputmethod.latin.common.ComposedData; import com.android.inputmethod.latin.common.Constants; -import com.android.inputmethod.latin.common.CoordinateUtils; -import com.android.inputmethod.latin.common.InputPointers; import com.android.inputmethod.latin.common.LocaleUtils; -import com.android.inputmethod.latin.common.ResizableIntArray; import com.android.inputmethod.latin.common.StringUtils; import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import com.android.inputmethod.latin.utils.ScriptUtils; @@ -272,26 +265,20 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session { false /* reportAsTypo */); } final Keyboard keyboard = mService.getKeyboardForLocale(mLocale); + if (null == keyboard) { + Log.d(TAG, "No keyboard for locale: " + mLocale); + // If there is no keyboard for this locale, don't do any spell-checking. + return AndroidSpellCheckerService.getNotInDictEmptySuggestions( + false /* reportAsTypo */); + } final WordComposer composer = new WordComposer(); final int[] codePoints = StringUtils.toCodePointArray(text); final int[] coordinates; - final ProximityInfo proximityInfo; - final KeyboardLayout keyboardLayout; - if (null == keyboard) { - coordinates = CoordinateUtils.newCoordinateArray(codePoints.length, - Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE); - proximityInfo = null; - keyboardLayout = null; - } else { - coordinates = keyboard.getCoordinates(codePoints); - proximityInfo = keyboard.getProximityInfo(); - keyboardLayout = keyboard.getKeyboardLayout(); - } + coordinates = keyboard.getCoordinates(codePoints); composer.setComposingWord(codePoints, coordinates); // TODO: Don't gather suggestions if the limit is <= 0 unless necessary final SuggestionResults suggestionResults = mService.getSuggestionResults( - mLocale, composer.getComposedDataSnapshot(), ngramContext, proximityInfo, - keyboardLayout); + mLocale, composer.getComposedDataSnapshot(), ngramContext, keyboard); final Result result = getResult(capitalizeType, mLocale, suggestionsLimit, mService.getRecommendedThreshold(), text, suggestionResults); isInDict = isInDictForAnyCapitalization(text, capitalizeType); diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java index a9d1207f1..d8926ffba 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java @@ -342,8 +342,11 @@ final class SuggestionStripLayoutHelper { * @param placerView the view where the debug info will be placed. * @return the start index of more suggestions. */ - public int layoutAndReturnStartIndexOfMoreSuggestions(final SuggestedWords suggestedWords, - final ViewGroup stripView, final ViewGroup placerView) { + public int layoutAndReturnStartIndexOfMoreSuggestions( + final Context context, + final SuggestedWords suggestedWords, + final ViewGroup stripView, + final ViewGroup placerView) { if (suggestedWords.isPunctuationSuggestions()) { return layoutPunctuationsAndReturnStartIndexOfMoreSuggestions( (PunctuationSuggestions)suggestedWords, stripView); @@ -362,7 +365,7 @@ final class SuggestionStripLayoutHelper { // by consolidating all slots in the strip. final int countInStrip = 1; mMoreSuggestionsAvailable = (wordCountToShow > countInStrip); - layoutWord(mCenterPositionInStrip, stripWidth - mPadding); + layoutWord(context, mCenterPositionInStrip, stripWidth - mPadding); stripView.addView(centerWordView); setLayoutWeight(centerWordView, 1.0f, ViewGroup.LayoutParams.MATCH_PARENT); if (SuggestionStripView.DBG) { @@ -385,7 +388,7 @@ final class SuggestionStripLayoutHelper { } final int width = getSuggestionWidth(positionInStrip, stripWidth); - final TextView wordView = layoutWord(positionInStrip, width); + final TextView wordView = layoutWord(context, positionInStrip, width); stripView.addView(wordView); setLayoutWeight(wordView, getSuggestionWeight(positionInStrip), ViewGroup.LayoutParams.MATCH_PARENT); @@ -414,7 +417,7 @@ final class SuggestionStripLayoutHelper { * @param width the maximum width for layout in pixels. * @return the {@link TextView} containing the suggested word appropriately formatted. */ - private TextView layoutWord(final int positionInStrip, final int width) { + private TextView layoutWord(final Context context, final int positionInStrip, final int width) { final TextView wordView = mWordViews.get(positionInStrip); final CharSequence word = wordView.getText(); if (positionInStrip == mCenterPositionInStrip && mMoreSuggestionsAvailable) { @@ -428,7 +431,10 @@ final class SuggestionStripLayoutHelper { } // {@link StyleSpan} in a content description may cause an issue of TTS/TalkBack. // Use a simple {@link String} to avoid the issue. - wordView.setContentDescription(TextUtils.isEmpty(word) ? null : word.toString()); + wordView.setContentDescription( + TextUtils.isEmpty(word) + ? context.getResources().getString(R.string.spoken_empty_suggestion) + : word.toString()); final CharSequence text = getEllipsizedTextWithSettingScaleX( word, width, wordView.getPaint()); final float scaleX = wordView.getTextScaleX(); diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java index 4b849496c..17525f650 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java @@ -146,6 +146,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) { final TextView word = new TextView(context, null, R.attr.suggestionWordStyle); + word.setContentDescription(getResources().getString(R.string.spoken_empty_suggestion)); word.setOnClickListener(this); word.setOnLongClickListener(this); mWordViews.add(word); @@ -200,7 +201,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick mStripVisibilityGroup.setLayoutDirection(isRtlLanguage); mSuggestedWords = suggestedWords; mStartIndexOfMoreSuggestions = mLayoutHelper.layoutAndReturnStartIndexOfMoreSuggestions( - mSuggestedWords, mSuggestionsStrip, this); + getContext(), mSuggestedWords, mSuggestionsStrip, this); mStripVisibilityGroup.showSuggestionsStrip(); } diff --git a/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java b/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java index 23ffde2a2..892b967c4 100644 --- a/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java @@ -21,7 +21,6 @@ import com.android.inputmethod.latin.BinaryDictionary; import com.android.inputmethod.latin.common.StringUtils; import com.android.inputmethod.latin.makedict.DictionaryHeader; import com.android.inputmethod.latin.makedict.UnsupportedFormatException; -import com.android.inputmethod.latin.personalization.PersonalizationHelper; import java.io.File; import java.io.IOException; @@ -123,8 +122,6 @@ public final class BinaryDictionaryUtils { */ @UsedForTesting public static int setCurrentTimeForTest(final int currentTime) { - final int currentNativeTimestamp = setCurrentTimeForTestNative(currentTime); - PersonalizationHelper.currentTimeChangedForTesting(currentNativeTimestamp); - return currentNativeTimestamp; + return setCurrentTimeForTestNative(currentTime); } } diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java index 293623cae..3ed6a021e 100644 --- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java @@ -153,7 +153,7 @@ public class DictionaryInfoUtils { } /** - * Reverse escaping done by replaceFileNameDangerousCharacters. + * Reverse escaping done by {@link #replaceFileNameDangerousCharacters(String)}. */ @Nonnull public static String getWordListIdFromFileName(@Nonnull final String fname) { diff --git a/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java b/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java index 10e3994b6..981355115 100644 --- a/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java +++ b/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java @@ -33,21 +33,18 @@ public final class SuggestionResults extends TreeSet<SuggestedWordInfo> { // TODO: Instead of a boolean , we may want to include the context of this suggestion results, // such as {@link NgramContext}. public final boolean mIsBeginningOfSentence; - public final boolean mAutocorrectRecommendation; + public final boolean mFirstSuggestionExceedsConfidenceThreshold; private final int mCapacity; - public SuggestionResults(final int capacity, final boolean isBeginningOfSentence) { - this(sSuggestedWordInfoComparator, capacity, isBeginningOfSentence, false); - } - public SuggestionResults(final int capacity, final boolean isBeginningOfSentence, - final boolean autocorrectRecommendation) { + final boolean firstSuggestionExceedsConfidenceThreshold) { this(sSuggestedWordInfoComparator, capacity, isBeginningOfSentence, - autocorrectRecommendation); + firstSuggestionExceedsConfidenceThreshold); } private SuggestionResults(final Comparator<SuggestedWordInfo> comparator, final int capacity, - final boolean isBeginningOfSentence, final boolean autocorrectRecommendation) { + final boolean isBeginningOfSentence, + final boolean firstSuggestionExceedsConfidenceThreshold) { super(comparator); mCapacity = capacity; if (ProductionFlags.INCLUDE_RAW_SUGGESTIONS) { @@ -56,7 +53,7 @@ public final class SuggestionResults extends TreeSet<SuggestedWordInfo> { mRawSuggestions = null; } mIsBeginningOfSentence = isBeginningOfSentence; - mAutocorrectRecommendation = autocorrectRecommendation; + mFirstSuggestionExceedsConfidenceThreshold = firstSuggestionExceedsConfidenceThreshold; } @Override |