aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java9
-rw-r--r--java/res/values-af/strings.xml8
-rw-r--r--java/res/values-am/strings.xml8
-rw-r--r--java/res/values-ar/strings.xml4
-rw-r--r--java/res/values-az-rAZ/strings.xml8
-rw-r--r--java/res/values-bg/strings.xml8
-rw-r--r--java/res/values-bn-rBD/strings.xml8
-rw-r--r--java/res/values-ca/strings.xml8
-rw-r--r--java/res/values-cs/strings.xml8
-rw-r--r--java/res/values-da/strings.xml8
-rw-r--r--java/res/values-de/strings.xml8
-rw-r--r--java/res/values-el/strings.xml8
-rw-r--r--java/res/values-en-rGB/strings.xml4
-rw-r--r--java/res/values-en-rIN/strings.xml4
-rw-r--r--java/res/values-es-rUS/strings.xml8
-rw-r--r--java/res/values-es/strings.xml8
-rw-r--r--java/res/values-et-rEE/strings.xml8
-rw-r--r--java/res/values-eu-rES/strings.xml8
-rw-r--r--java/res/values-fa/strings.xml4
-rw-r--r--java/res/values-fi/strings.xml12
-rw-r--r--java/res/values-fr-rCA/strings.xml8
-rw-r--r--java/res/values-fr/strings.xml8
-rw-r--r--java/res/values-gl-rES/strings.xml12
-rw-r--r--java/res/values-hi/strings.xml12
-rw-r--r--java/res/values-hr/strings.xml8
-rw-r--r--java/res/values-hu/strings.xml8
-rw-r--r--java/res/values-hy-rAM/strings.xml8
-rw-r--r--java/res/values-in/strings.xml4
-rw-r--r--java/res/values-is-rIS/strings.xml8
-rw-r--r--java/res/values-it/strings.xml8
-rw-r--r--java/res/values-iw/strings.xml4
-rw-r--r--java/res/values-ja/strings.xml8
-rw-r--r--java/res/values-ka-rGE/strings.xml8
-rw-r--r--java/res/values-kk-rKZ/strings.xml8
-rw-r--r--java/res/values-km-rKH/strings.xml22
-rw-r--r--java/res/values-kn-rIN/strings.xml8
-rw-r--r--java/res/values-ko/strings.xml8
-rw-r--r--java/res/values-ky-rKG/strings.xml8
-rw-r--r--java/res/values-lo-rLA/strings.xml4
-rw-r--r--java/res/values-lt/strings.xml8
-rw-r--r--java/res/values-lv/strings.xml8
-rw-r--r--java/res/values-mk-rMK/strings.xml8
-rw-r--r--java/res/values-ml-rIN/strings.xml8
-rw-r--r--java/res/values-mn-rMN/strings.xml4
-rw-r--r--java/res/values-mr-rIN/strings.xml8
-rw-r--r--java/res/values-ms-rMY/strings.xml8
-rw-r--r--java/res/values-my-rMM/strings.xml20
-rw-r--r--java/res/values-nb/strings.xml8
-rw-r--r--java/res/values-ne-rNP/strings.xml4
-rw-r--r--java/res/values-nl/strings.xml8
-rw-r--r--java/res/values-pl/strings.xml8
-rw-r--r--java/res/values-pt-rPT/strings.xml8
-rw-r--r--java/res/values-pt/strings.xml8
-rw-r--r--java/res/values-ro/strings.xml8
-rw-r--r--java/res/values-ru/strings.xml8
-rw-r--r--java/res/values-si-rLK/strings.xml8
-rw-r--r--java/res/values-sk/strings.xml8
-rw-r--r--java/res/values-sl/strings.xml8
-rw-r--r--java/res/values-sr/strings.xml8
-rw-r--r--java/res/values-sv/strings.xml8
-rw-r--r--java/res/values-sw/strings.xml8
-rw-r--r--java/res/values-ta-rIN/strings.xml8
-rw-r--r--java/res/values-te-rIN/strings.xml8
-rw-r--r--java/res/values-th/strings.xml8
-rw-r--r--java/res/values-tl/strings.xml8
-rw-r--r--java/res/values-tr/strings.xml8
-rw-r--r--java/res/values-uk/strings.xml8
-rw-r--r--java/res/values-ur-rPK/strings.xml8
-rw-r--r--java/res/values-uz-rUZ/strings.xml8
-rw-r--r--java/res/values-vi/strings.xml8
-rw-r--r--java/res/values-zh-rCN/strings.xml8
-rw-r--r--java/res/values-zh-rHK/strings.xml8
-rw-r--r--java/res/values-zh-rTW/strings.xml8
-rw-r--r--java/res/values-zu/strings.xml4
-rw-r--r--java/res/values/strings.xml5
-rw-r--r--java/res/xml/prefs_screen_accounts.xml7
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java26
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java12
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java37
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java26
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodManager.java25
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java13
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java5
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java3
-rw-r--r--java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java38
-rw-r--r--java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java4
-rw-r--r--java/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtils.java (renamed from java/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelper.java)34
-rw-r--r--java/src/com/android/inputmethod/latin/utils/NetworkConnectivityUtils.java101
-rw-r--r--native/jni/NativeFileList.mk3
-rw-r--r--native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp5
-rw-r--r--native/jni/src/suggest/core/dictionary/dictionary.h1
-rw-r--r--native/jni/src/suggest/core/dictionary/error_type_utils.cpp15
-rw-r--r--native/jni/src/suggest/core/dictionary/error_type_utils.h5
-rw-r--r--native/jni/src/suggest/core/dictionary/property/word_property.cpp109
-rw-r--r--native/jni/src/suggest/core/dictionary/property/word_property.h7
-rw-r--r--native/jni/src/suggest/core/result/suggestions_output_utils.cpp7
-rw-r--r--native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp1
-rw-r--r--native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp6
-rw-r--r--native/jni/src/suggest/policyimpl/typing/typing_weighting.cpp10
-rw-r--r--native/jni/src/utils/jni_data_utils.cpp91
-rw-r--r--native/jni/src/utils/jni_data_utils.h7
-rw-r--r--tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java136
-rw-r--r--tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTestsHelper.java144
-rw-r--r--tests/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtilsTests.java (renamed from tests/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelperTests.java)24
104 files changed, 1148 insertions, 350 deletions
diff --git a/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java b/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java
index c0a599c6e..60d420fc3 100644
--- a/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java
+++ b/java-overridable/src/com/android/inputmethod/latin/accounts/AccountStateChangedListener.java
@@ -63,4 +63,13 @@ public class AccountStateChangedListener {
*/
public static void forceSync(@Nullable String account) {
}
+
+ /**
+ * Forces an immediate deletion of user's data.
+ * This should only be used for debugging purposes.
+ *
+ * @param account the account to use for sync.
+ */
+ public static void forceDelete(@Nullable String account) {
+ }
}
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index f8be8f1d3..cbee42a08 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Gevorderd"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktiveer verdeelde sleutelbord"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Skakel oor na die ander invoermetodes"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Taal-wisselsleutel dek ook ander invoermetodes"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Taal-wisselsleutel"</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 9beccdf18..8bc90f0d0 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"የላቀ"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"ገፅታ"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"የተከፈለ ቁልፍ ሰሌዳ አንቃ"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ወደ ሌሎች የግቤት ስልቶች ቀይር"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"የቋንቋ መቀየሪያ ቁልፍ ሌሎች የግቤት ስልቶችንም ይሸፍናል"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"የቋንቋ መቀየሪያ ቁልፍ"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index da414a66d..ec6b8a543 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"الإعدادات المتقدمة"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"المظهر"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"هل تريد تمكين لوحة المفاتيح المقسمة"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"‏لحذف بياناتك التي تمت مزامنتها من Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"سيتم حذف البيانات التي تمت مزامنتها. هل تريد ذلك بالتأكيد؟"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"حذف"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"إلغاء"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"التبديل إلى أسلوب إدخال آخر"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"يغطي مفتاح تبديل اللغات أساليب الإدخال الأخرى أيضًا"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"مفتاح تبديل اللغة"</string>
diff --git a/java/res/values-az-rAZ/strings.xml b/java/res/values-az-rAZ/strings.xml
index b1a192ce5..d88d9baea 100644
--- a/java/res/values-az-rAZ/strings.xml
+++ b/java/res/values-az-rAZ/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Qabaqcıl"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Klaviaturanı ayırmağa icazə verin"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Digər daxiletmə metodlarına keçin"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Dil keçid düyməsi başqa daxiletmə metodlarını da əhatə edir"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Dil keçidi düyməsi"</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 5d7e6b4b1..de56050fd 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Разширени"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Активиране на разделената клавиатура"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Други методи за въвеждане"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Клавишът за превкл. на езика обхваща и други методи за въвеждане"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Клавиш за превкл. на езика"</string>
diff --git a/java/res/values-bn-rBD/strings.xml b/java/res/values-bn-rBD/strings.xml
index f47e27135..ff08769f7 100644
--- a/java/res/values-bn-rBD/strings.xml
+++ b/java/res/values-bn-rBD/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"উন্নত"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"থিম"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"বিভক্ত কীবোর্ড সক্ষম করুন"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"অন্য ইনপুট পদ্ধতিতে স্যুইচ করুন"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ভাষা স্যুইচ কীতে অন্যান্য ইনপুট পদ্ধতি পাওয়া যায়"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ভাষা স্যুইচ কী"</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 3f0e447f9..e0c79fc91 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avançat"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Activa el teclat partit"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Altres mètodes d\'introducció"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de canvi d\'idioma serveix també per a altres mètodes d\'entrada"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla de canvi d\'idioma"</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 4fd0e71e1..d30f8e824 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Rozšířená nastavení"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Motiv"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktivovat rozdělenou klávesnici"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Přepínat metody zadávání"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Klávesa pro přepínání jazyka ovládá i další metody zadávání"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Klávesa přepínání jazyka"</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 39c51e9ea..6f2adf05e 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanceret"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktivér delt tastatur"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Skift inputmetode"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tasten til sprogskift gælder også for andre inputmetoder"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Knap til sprogskift"</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 1ced6d099..86e504e13 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Erweitert"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Design"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Geteilte Tastatur aktivieren"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Eingabemethoden wechseln"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Sprachwechseltaste umfasst auch andere Eingabemethoden."</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Sprachwechsel"</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index d9c4a40f0..963c0c8c2 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Σύνθετες"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Θέμα"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Ενεργοποίηση διαχωρισμού πληκτρολογίου"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Άλλη μέθοδος εισόδου"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Το κλειδί αλλαγής γλώσσας καλύπτει και άλλες μεθόδους εισόδου"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Πλήκτρο εναλλαγής γλώσσας"</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 1778cded3..0adcc085a 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Theme"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Enable split keyboard"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Deletes your synced data from Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"Your synced data will be deleted. Are you sure?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"Delete"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"Cancel"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Switch to other input methods"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Language switch key also covers other input methods"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Language switch key"</string>
diff --git a/java/res/values-en-rIN/strings.xml b/java/res/values-en-rIN/strings.xml
index 1778cded3..0adcc085a 100644
--- a/java/res/values-en-rIN/strings.xml
+++ b/java/res/values-en-rIN/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Theme"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Enable split keyboard"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Deletes your synced data from Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"Your synced data will be deleted. Are you sure?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"Delete"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"Cancel"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Switch to other input methods"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Language switch key also covers other input methods"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Language switch key"</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index 7b9e3ba66..03846e77d 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanzada"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Habilitar teclado dividido"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de entrada"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de cambio de idioma abarca otros métodos de entrada."</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla de selección de idioma"</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index a49ae31e8..d4c3ade11 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Opciones avanzadas"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Habilitar teclado dividido"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Otros métodos de introducción"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La tecla de cambio de idioma sirve también para otros métodos"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla para cambiar de idioma"</string>
diff --git a/java/res/values-et-rEE/strings.xml b/java/res/values-et-rEE/strings.xml
index 440331e84..7606c1f1d 100644
--- a/java/res/values-et-rEE/strings.xml
+++ b/java/res/values-et-rEE/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Täpsem"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Teema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Luba kaheks jaotatud klaviatuur"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Vaheta sisestusmeetodit"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Keelevahetuse võti hõlmab ka muid sisestusmeetodeid"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Keelevahetuse nupp"</string>
diff --git a/java/res/values-eu-rES/strings.xml b/java/res/values-eu-rES/strings.xml
index 23d15930c..d510f6ac5 100644
--- a/java/res/values-eu-rES/strings.xml
+++ b/java/res/values-eu-rES/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Ezarpen aurreratuak"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Gaia"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Gaitu teklatu banatua"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Aldatu idazketa-metodoa"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Hizkuntza aldatzeko teklak beste idazketa-metodoetarako ere balio du"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Hizkuntza aldatzeko tekla"</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 16a6f8767..0feb10f80 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"پیشرفته"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"طرح‌زمینه"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"فعال کردن دونیم‌کردن صفحه‌کلید"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"‏اطلاعات همگام‌سازی شده شما را از Google حذف می‌کند"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"اطلاعات همگام‌سازی شده شما حذف می‌شوند. مطمئن هستید؟"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"حذف"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"لغو"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"تغییر به دیگر روش‌های ورودی"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"کلید تغییر زبان، سایر ورودی‌های زبان را نیز پوشش می‌دهد"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"کلید تغییر زبان"</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 0308d18d7..1d4ac6c74 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lisäasetukset"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Teema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Ota jaettu näppäimistö käyttöön"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Käytä toista syöttötapaa"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kielenvaihtonäppäin kattaa myös muut syöttötavat"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Kielenvaihtonäppäin"</string>
@@ -170,9 +178,9 @@
<string name="install_dict" msgid="180852772562189365">"Asenna"</string>
<string name="cancel_download_dict" msgid="7843340278507019303">"Peruuta"</string>
<string name="delete_dict" msgid="756853268088330054">"Poista"</string>
- <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"Laitteesi käyttökielelle on saatavilla sanakirja.&lt;br/&gt; Suosittelemme <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g>-sanakirjan &lt;b&gt;lataamista&lt;/b&gt;, sillä se helpottaa laitteella kirjoittamista.&lt;br/&gt; &lt;br/&gt; Lataus kestää useimmiten muutaman minuutin 3G-yhteydellä. Latauksesta saatetaan periä maksu, ellei käytössäsi ole &lt;b&gt;rajoittamatonta tiedonsiirtopakettia&lt;/b&gt;.&lt;br/&gt; Jos et ole varma tiedonsiirtosopimuksesi tyypistä, etsi käyttöösi wifi-yhteys, niin lataus alkaa automaattisesti.&lt;br/&gt; &lt;br/&gt; Vinkki: voit ladata ja poistaa sanakirjoja mobiililaitteesi &lt;b&gt;Asetukset&lt;/b&gt;-valikon &lt;b&gt;Kieli ja syöttötapa&lt;/b&gt; -osiossa."</string>
+ <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"Laitteesi käyttökielelle on saatavilla sanakirja.&lt;br/&gt; Suosittelemme <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g>-sanakirjan &lt;b&gt;lataamista&lt;/b&gt;, sillä se helpottaa laitteella kirjoittamista.&lt;br/&gt; &lt;br/&gt; Lataus kestää useimmiten muutaman minuutin 3G-yhteydellä. Latauksesta saatetaan periä maksu, ellei käytössäsi ole &lt;b&gt;rajoittamatonta tiedonsiirtopakettia&lt;/b&gt;.&lt;br/&gt; Jos et ole varma tiedonsiirtosopimuksesi tyypistä, etsi käyttöösi Wi-Fi-yhteys, niin lataus alkaa automaattisesti.&lt;br/&gt; &lt;br/&gt; Vinkki: voit ladata ja poistaa sanakirjoja mobiililaitteesi &lt;b&gt;Asetukset&lt;/b&gt;-valikon &lt;b&gt;Kieli ja syöttötapa&lt;/b&gt; -osiossa."</string>
<string name="download_over_metered" msgid="1643065851159409546">"Lataa nyt (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g> Mt)"</string>
- <string name="do_not_download_over_metered" msgid="2176209579313941583">"Lataa wifi-yhteydellä"</string>
+ <string name="do_not_download_over_metered" msgid="2176209579313941583">"Lataa Wi-Fi-yhteydellä"</string>
<string name="dict_available_notification_title" msgid="4583842811218581658">"Sanakirja on saatavilla kielelle <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Paina tätä, jos haluat tarkastella kohdetta ja ladata sen"</string>
<string name="toast_downloading_suggestions" msgid="6128155879830851739">"Ladataan: kielen <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> ehdotukset ovat pian käytettävissä."</string>
diff --git a/java/res/values-fr-rCA/strings.xml b/java/res/values-fr-rCA/strings.xml
index 6730a7982..4cb0523b2 100644
--- a/java/res/values-fr-rCA/strings.xml
+++ b/java/res/values-fr-rCA/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avancés"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Thème"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Activer le clavier en deux parties"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Autres modes de saisie"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La touche de sélection de langue couvre d\'autres modes de saisie"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Touche de sélection de langue"</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 3349f4a6a..404470aff 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Paramètres avancés"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Thème"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Activer le clavier en deux parties"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Autres modes de saisie"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"La touche de sélection de langue couvre d\'autres modes de saisie."</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Touche de sélection de langue"</string>
diff --git a/java/res/values-gl-rES/strings.xml b/java/res/values-gl-rES/strings.xml
index d72bcb8b1..e9b69697a 100644
--- a/java/res/values-gl-rES/strings.xml
+++ b/java/res/values-gl-rES/strings.xml
@@ -30,11 +30,19 @@
<string name="settings_screen_accounts" msgid="7570397912370223287">"Contas e privacidade"</string>
<string name="settings_screen_appearance" msgid="9153102634339912029">"Aparencia e deseños"</string>
<string name="settings_screen_multilingual" msgid="1391301621464509659">"Opcións multilingües"</string>
- <string name="settings_screen_gesture" msgid="8826372746901183556">"Escritura mediante xestos"</string>
+ <string name="settings_screen_gesture" msgid="8826372746901183556">"Escritura xestual"</string>
<string name="settings_screen_correction" msgid="1616818407747682955">"Corrección de texto"</string>
- <string name="settings_screen_advanced" msgid="7472408607625972994">"Avanzada"</string>
+ <string name="settings_screen_advanced" msgid="7472408607625972994">"Opcións avanzadas"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Activar teclado dividido"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Outros métodos de entrada"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A tecla de cambio de idioma inclúe outros métodos de entrada"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla de cambio de idioma"</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 239b56f8e..3d0edf423 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"अतिरिक्त सेटिंग"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"थीम"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"स्प्लिट कीबोर्ड सक्षम करें"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"अन्‍य इनपुट पद्धतियों पर जाएं"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"भाषा स्‍विच कुंजी में अन्‍य इनपुट पद्धतियां भी शामिल हैं"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"भाषा स्विच कुंजी"</string>
@@ -94,12 +102,12 @@
<string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेज़ी (यूके)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेज़ी (यूएस)"</string>
<string name="subtype_es_US" msgid="5583145191430180200">"स्पेनिश (यूएस)"</string>
- <string name="subtype_hi_ZZ" msgid="8860448146262798623">"Hinglish"</string>
+ <string name="subtype_hi_ZZ" msgid="8860448146262798623">"हिंग्लिश"</string>
<string name="subtype_sr_ZZ" msgid="9059219552986034343">"सर्बियाई (लैटिन)"</string>
<string name="subtype_with_layout_en_GB" msgid="1931018968641592304">"अंग्रेज़ी (यूके) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_with_layout_en_US" msgid="8809311287529805422">"अंग्रेज़ी (यूएस) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_with_layout_es_US" msgid="510930471167541338">"स्‍पेनिश (यूएस) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_with_layout_hi_ZZ" msgid="6827402953860547044">"Hinglish (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
+ <string name="subtype_with_layout_hi_ZZ" msgid="6827402953860547044">"हिंग्लिश (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_with_layout_sr_ZZ" msgid="2859024772719772407">"सर्बियाई (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
<string name="subtype_generic_traditional" msgid="8584594350973800586">"<xliff:g id="LANGUAGE_NAME">%s</xliff:g> (पारंपरिक)"</string>
<string name="subtype_generic_compact" msgid="3353673321203202922">"<xliff:g id="LANGUAGE_NAME">%s</xliff:g> (संक्षिप्त)"</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index e1893714e..ce400d267 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Napredno"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Omogući razdvojenu tipkovnicu"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Prebaci na druge unose"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tipka za prebacivanje jezika pokriva i druge načine unosa"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tipka za izmjenjivanje jezika"</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 71314b0eb..e10248ec4 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Speciális"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Téma"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Megosztott billentyűzet bekapcsolása"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Váltás más beviteli módra"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A nyelvkapcsoló gomb egyéb beviteli módokat is tartalmaz"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"A nyelvkapcsoló"</string>
diff --git a/java/res/values-hy-rAM/strings.xml b/java/res/values-hy-rAM/strings.xml
index 8d7c5c8c1..fee35130c 100644
--- a/java/res/values-hy-rAM/strings.xml
+++ b/java/res/values-hy-rAM/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Հավելյալ"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Թեմա"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Միացնել բաժանված ստեղնաշարը"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Անցնել մուտքագրման այլ եղանակների"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Լեզվի փոխարկման բանալին ընդգրկում է այլ մուտքագրման եղանակներ ևս"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Լեզվի փոխարկման ստեղն"</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index bd86f01b1..a83c64d85 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lanjutan"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktifkan keyboard terpisah"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Menghapus data yang disinkronkan dari Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"Data yang disinkronkan akan dihapus. Anda yakin?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"Hapus"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"Batal"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Beralih ke metode masukan lain"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tombol beralih bahasa juga mencakup metode masukan lain"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tombol pengalih bahasa"</string>
diff --git a/java/res/values-is-rIS/strings.xml b/java/res/values-is-rIS/strings.xml
index 8a6927af1..6d18ffdf0 100644
--- a/java/res/values-is-rIS/strings.xml
+++ b/java/res/values-is-rIS/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Ítarlegt"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Þema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Virkja skipt lyklaborð"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Skipta um innsláttaraðferð"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Lykill til að skipta um mál inniheldur aðrar innsláttaraðferðir"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Lykill til að breyta tungumáli"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 2bca3b40b..1c0ffa9a6 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanzate"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Attiva tastiera divisa"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Altri metodi immissione"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Il tasto per cambiare lingua offre altri metodi di immissione"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tasto cambio lingua"</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index c99d5123b..bb7aa9f81 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"מתקדם"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"עיצוב"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"הפעל מקלדת מפוצלת"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"‏מוחק את הנתונים המסונכרנים שלך מ-Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"הנתונים המסונכרנים שלך יימחקו. האם אתה בטוח?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"מחק"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"בטל"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"עבור לשיטות קלט אחרות"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"מתג החלפת השפה מכסה גם שיטות קלט אחרות"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"מתג החלפת שפה"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 53ef5779f..9a43008d6 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"詳細設定"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"テーマ"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"スプリットキーボードを有効にする"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"他の入力方法に切り替え"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"言語切り替えキーは他の入力方法にも対応しています"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"言語切り替えキー"</string>
diff --git a/java/res/values-ka-rGE/strings.xml b/java/res/values-ka-rGE/strings.xml
index d4457a508..71ec1f19b 100644
--- a/java/res/values-ka-rGE/strings.xml
+++ b/java/res/values-ka-rGE/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"გაფართოებული"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"თემა"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"გაყოფილი კლავიატურის გააქტიურება"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"შეყვანის სხვა მეთოდებზე გადართვა"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ენის გადართვის ღილაკს შეყვანის სხვა მეთოდებსაც შეიცავს"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ენის გადართვის კლავიში"</string>
diff --git a/java/res/values-kk-rKZ/strings.xml b/java/res/values-kk-rKZ/strings.xml
index 58f8f306e..31097d72e 100644
--- a/java/res/values-kk-rKZ/strings.xml
+++ b/java/res/values-kk-rKZ/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Кеңейтілген"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тақырып"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Бөлінген пернетақтаны қосу"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Басқа енгізу әдістеріне ауыстырыңыз"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Тілді ауыстыру пернесі басқа енгізу әдістерін де қамтиды"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Тілді ауыстыру пернесі"</string>
diff --git a/java/res/values-km-rKH/strings.xml b/java/res/values-km-rKH/strings.xml
index 86fdf2957..95c96f281 100644
--- a/java/res/values-km-rKH/strings.xml
+++ b/java/res/values-km-rKH/strings.xml
@@ -35,11 +35,19 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"កម្រិត​ខ្ពស់"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"រូបរាង"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"បើក​ការ​បំបែក​ក្ដារចុច"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ប្ដូរ​ទៅ​​​វិធីសាស្ត្រ​បញ្ចូល​​​ផ្សេង​ទៀត"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"គ្រាប់ចុច​ប្ដូរ​ភាសា​តាម​វិធីសាស្ត្រ​បញ្ចូល​ផ្សេងទៀត"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"គ្រាប់​ចុច​ប្ដូរ​​ភាសា"</string>
<string name="show_language_switch_key_summary" msgid="7343403647474265713">"បង្ហាញ​នៅ​ពេល​ដែល​បើក​ភាសា​បញ្ចូល​ច្រើន"</string>
- <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល"</string>
+ <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល​"</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"គ្មាន​ការ​ពន្យារពេល"</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"លំនាំដើម"</string>
<string name="abbreviation_unit_milliseconds" msgid="8700286094028323363">"<xliff:g id="MILLISECONDS">%s</xliff:g> មិល្លី​វិនាទី"</string>
@@ -50,7 +58,7 @@
<string name="enable_metrics_logging" msgid="5506372337118822837">"ធ្វើឲ្យ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ប្រសើរ​ឡើង"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"រយៈ​ពេល​ចុច​ដកឃ្លា​ពីរដង"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"ប៉ះ​ដកឃ្លា​ពីរ​​ដង​បញ្ចូល​​​រយៈ​ពេល​ដែល​អនុវត្ត​តាម​ដកឃ្លា"</string>
- <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ"</string>
+ <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ​"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"សរសេរ​ពាក្យ​ដំបូង​​​ជា​អក្សរ​ធំ​​នៃ​ប្រយោគ​នីមួយ​ៗ"</string>
<string name="edit_personal_dictionary" msgid="3996910038952940420">"វចនានុក្រម​ផ្ទាល់ខ្លួន"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
@@ -58,7 +66,7 @@
<string name="prefs_show_suggestions" msgid="8026799663445531637">"បង្ហាញ​ការ​ស្នើ​​កែ"</string>
<string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"បង្ហាញ​ពាក្យ​​បាន​​ផ្ដល់​​ស្នើ​​ខណៈ​ពេល​​​វាយ​បញ្ចូល"</string>
<string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"ទប់ស្កាត់​​ពាក្យ​​បំពាន"</string>
- <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល"</string>
+ <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល​"</string>
<string name="auto_correction" msgid="7630720885194996950">"ការ​កែ​​​ស្វ័យប្រវត្តិ"</string>
<string name="auto_correction_summary" msgid="5625751551134658006">"ចន្លោះ​មិន​ឃើញ ​និង​សញ្ញា​​វណ្ណយុត្ត​កែ​ពាក្យ​ដែល​បាន​វាយ​ខុស​ស្វ័យប្រវត្តិ"</string>
<string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"បិទ"</string>
@@ -149,7 +157,7 @@
<string name="dictionary_provider_name" msgid="3027315045397363079">"កម្មវិធី​ផ្ដល់​វចនានុក្រម"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"សេវាកម្ម​​វចនានុក្រម"</string>
<string name="download_description" msgid="6014835283119198591">"ព័ត៌មាន​បច្ចុប្បន្នភាព​វចនានុក្រម"</string>
- <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
+ <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម​​"</string>
<string name="dictionary_install_over_metered_network_prompt" msgid="3587517870006332980">"វចនានុក្រម​​​​​អាច​ប្រើ​បាន"</string>
<string name="dictionary_settings_summary" msgid="5305694987799824349">"ការ​កំណត់​សម្រាប់​វចនានុក្រម"</string>
<string name="user_dictionaries" msgid="3582332055892252845">"វចនានុក្រម​​​អ្នក​ប្រើ"</string>
@@ -165,10 +173,10 @@
<string name="message_updating" msgid="4457761393932375219">"ពិនិត្យមើល​បច្ចុប្បន្នភាព"</string>
<string name="message_loading" msgid="5638680861387748936">"កំពុង​ផ្ទុក..."</string>
<string name="main_dict_description" msgid="3072821352793492143">"វចនានុក្រម​ចម្បង"</string>
- <string name="cancel" msgid="6830980399865683324">"បោះ​បង់"</string>
+ <string name="cancel" msgid="6830980399865683324">"បោះ​បង់​"</string>
<string name="go_to_settings" msgid="3876892339342569259">"ការ​កំណត់"</string>
<string name="install_dict" msgid="180852772562189365">"ដំឡើង"</string>
- <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់"</string>
+ <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់​"</string>
<string name="delete_dict" msgid="756853268088330054">"លុប"</string>
<string name="should_download_over_metered_prompt" msgid="1583881200688185508">"ភាសា​ដែល​បាន​ជ្រើស​នៅ​លើ​ឧបករណ៍​ចល័ត​មាន​វចនានុក្រម​អាច​ប្រើ​បាន។&lt;br/&gt; យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ &lt;b&gt;ទាញ​យក&lt;/b&gt; វចនានុក្រម​ភាសា <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> ដើម្បី​បង្កើន​បទពិសោធន៍​វាយ​បញ្ចូល​របស់​អ្នក។&lt;br/&gt; &lt;br/&gt; ការ​ទាញ​យក​អាច​ចំណាយ​ពេល​ប្រហែល​ពីរ​នាទី​នៅ​តាម 3G។ ការ​គិត​ថ្លៃ​អាច​អនុវត្ត​ប្រសិន​បើ​អ្នក​មិន​ប្រើ &lt;b&gt;ផែនការ​ទិន្នន័យ​គ្មាន​ដែន​កំណត់&lt;/b&gt;.&lt;br/&gt; បើ​អ្នក​មិន​ប្រាកដ​​ថា​ផែនការ​ណា​មួយ​ដែល​អ្នក​មាន យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ​​ភ្ជាប់​វ៉ាយហ្វាយ ដើម្បី​ចាប់ផ្ដើម​ទាញ​យក​ដោយ​ស្វ័យ​ប្រវត្តិ។&lt;br/&gt; &lt;br/&gt; ជំនួយ៖ អ្នក​អាច​ទាញ​យក និង​លុប​វចនានុក្រម​ដោយ​ចូល​ទៅ​ &lt;b&gt;ភាសា &amp; ការ​បញ្ចូល&lt;/b&gt; នៅ​ក្នុង​ម៉ឺនុយ &lt;b&gt;ការ​កំណត់&lt;/b&gt; សម្រាប់​ឧបករណ៍​ចល័ត។"</string>
<string name="download_over_metered" msgid="1643065851159409546">"ទាញ​យក​ឥឡូវ​នេះ (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g> មេកាបៃ)"</string>
@@ -186,7 +194,7 @@
<string name="user_dict_settings_add_word_option_name" msgid="6665558053408962865">"ពាក្យ៖"</string>
<string name="user_dict_settings_add_shortcut_option_name" msgid="3094731590655523777">"ផ្លូវកាត់​៖"</string>
<string name="user_dict_settings_add_locale_option_name" msgid="4738643440987277705">"ភាសា៖"</string>
- <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ"</string>
+ <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ​"</string>
<string name="user_dict_settings_add_shortcut_hint" msgid="2265453012555060178">"ផ្លូវកាត់​ជា​ជម្រើស"</string>
<string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"កែ​ពាក្យ"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"កែ"</string>
diff --git a/java/res/values-kn-rIN/strings.xml b/java/res/values-kn-rIN/strings.xml
index 04d9b1c49..3b45511c1 100644
--- a/java/res/values-kn-rIN/strings.xml
+++ b/java/res/values-kn-rIN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"ಸುಧಾರಿತ"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"ಥೀಮ್"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"ಬೇರ್ಪಡೆ ಕೀಬೋರ್ಡ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ಇತರೆ ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳಿಗೆ ಬದಲಾಯಿಸು"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ಭಾಷಾ ಬದಲಾವಣೆ ಕೀಯು ಇತರೆ ಇನ್‌ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಕೂಡ ಒಳಗೊಂಡಿರುತ್ತದೆ"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ಭಾಷೆ ಬದಲಾವಣೆ ಕೀ"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 68195f0d1..7e609e945 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"고급"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"테마"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"분할 키보드 사용"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"다른 입력 방법으로 전환"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"언어 전환 키가 제공하는 기타 입력 방법"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"언어 전환 키"</string>
diff --git a/java/res/values-ky-rKG/strings.xml b/java/res/values-ky-rKG/strings.xml
index 6b46785e3..14d5601bb 100644
--- a/java/res/values-ky-rKG/strings.xml
+++ b/java/res/values-ky-rKG/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Өркүндөтүлгөн"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Баскычтопту бөлүүнү иштетүү"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Башка киргзүү ыкмалрна которуу"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Тил которуштуруу баскычында башка киргизүү ыкмалары дагы камтылган"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Тил которуштуруу баскычы"</string>
diff --git a/java/res/values-lo-rLA/strings.xml b/java/res/values-lo-rLA/strings.xml
index efc09bebc..3535f9408 100644
--- a/java/res/values-lo-rLA/strings.xml
+++ b/java/res/values-lo-rLA/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"​ຂັ້ນ​ສູງ"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"ຮູບແບບສີສັນ"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"ເປີດ​ນຳ​ໃຊ້​ແປ້ນ​ພິມ​ແຍກ​ຕົວ"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"ລຶບ​ຂໍ້​ມູນ​ທີ່​ຊິງ​ຄ໌​ແລ້ວ​ຂອງ​ທ່ານ​ຈາກ Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"ຂໍ້​ມູນ​ທີ່​ຊິງ​ຄ໌​ແລ້ວ​ຂອງ​ທ່ານ​ຈະ​ຖືກ​ລຶບ. ທ່ານ​ແນ່​ໃຈ​ບໍ?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"ລຶບ"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"​ຍົກ​ເລີກ"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ປ່ຽນໄປໃຊ້ການປ້ອນຂໍ້ມູນແບບອື່ນ"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ໂຕປ່ຽນພາສາເປັນທັງໂຕປ່ຽນຮູບແບບການປ້ອນຂໍ້ມູນເຊັ່ນກັນ"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ປຸ່ມປ່ຽນພາສາ"</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index cc8d0eaf6..881561441 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Išplėstiniai"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Įgalinti suskaidytą klaviatūrą"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Perj. į kt. įvesties būd."</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kalbos perjungimo klavišu taip pat perjungiami įvesties būdai"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Kalbos keitimo klavišas"</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 833839b8a..663f427a1 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Papildu"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Motīvs"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Iespējot dalīto tastatūru"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Pārsl. uz citām iev. met."</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Valodas pārslēgš. taustiņu var lietot arī citām ievades metodēm."</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Valodas pārslēgšanas taustiņš"</string>
diff --git a/java/res/values-mk-rMK/strings.xml b/java/res/values-mk-rMK/strings.xml
index f3503f7bf..ba5402ab4 100644
--- a/java/res/values-mk-rMK/strings.xml
+++ b/java/res/values-mk-rMK/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Напредни"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Овозможи поделена тастатура"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Префрли на други влезни методи"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Копчето за менување јазици покрива и други методи на внес"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Копче за промена на јазик"</string>
diff --git a/java/res/values-ml-rIN/strings.xml b/java/res/values-ml-rIN/strings.xml
index a34de64ac..845d04fca 100644
--- a/java/res/values-ml-rIN/strings.xml
+++ b/java/res/values-ml-rIN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"വിപുലമായ"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"തീം"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"സ്‌പ്‌ലിറ്റ് കീബോർഡ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"മറ്റു ടൈപ്പുചെയ്യൽ രീതികളിലേക്ക് മാറുക"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ഭാഷ മാറൽ കീയിൽ മറ്റ് ടൈപ്പുചെയ്യൽ രീതികളും ഉൾപ്പെടുന്നു"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ഭാഷ മാറൽ കീ"</string>
diff --git a/java/res/values-mn-rMN/strings.xml b/java/res/values-mn-rMN/strings.xml
index 938c90f29..d70fec6a9 100644
--- a/java/res/values-mn-rMN/strings.xml
+++ b/java/res/values-mn-rMN/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Дэлгэрэнгүй"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Загвар"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Хуваагдмал гарыг идэвхжүүлэх"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Таны синк хийсэн мэдээллийг Google-ээс устгана."</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"Таны синк хийсэн мэдээлэл устах болно. Та итгэлтэй байна уу?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"Устгах"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"Цуцлах"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Оруулах өөр арга руу шилжүүлэх"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Хэл солих түлхүүрт өөр оруулах аргууд мөн багтсан байгаа"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Хэл солих товч"</string>
diff --git a/java/res/values-mr-rIN/strings.xml b/java/res/values-mr-rIN/strings.xml
index 2c6746e35..eb2bea5f9 100644
--- a/java/res/values-mr-rIN/strings.xml
+++ b/java/res/values-mr-rIN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"प्रगत"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"थीम"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"विभाजित कीबोर्ड सक्षम करा"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"अन्य इनपुट पद्धतींवर स्विच करा"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"भाषा स्विच की अन्य इनपुट पद्धती देखील समाविष्ट करते"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"भाषा स्विच की"</string>
diff --git a/java/res/values-ms-rMY/strings.xml b/java/res/values-ms-rMY/strings.xml
index 3136c3bbd..a57099a79 100644
--- a/java/res/values-ms-rMY/strings.xml
+++ b/java/res/values-ms-rMY/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lanjutan"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Dayakan papan kekunci terpisah"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Tukar ke kaedah input lain"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kunci pertukaran bahasa meliputi kaedah masukan lain juga"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Kekunci tukar bahasa"</string>
diff --git a/java/res/values-my-rMM/strings.xml b/java/res/values-my-rMM/strings.xml
index 281004670..5a49105cd 100644
--- a/java/res/values-my-rMM/strings.xml
+++ b/java/res/values-my-rMM/strings.xml
@@ -30,11 +30,15 @@
<string name="settings_screen_accounts" msgid="7570397912370223287">"အကောင့်များ &amp; ကိုယ်ပိုင်ကိစ္စ"</string>
<string name="settings_screen_appearance" msgid="9153102634339912029">"အပြင်ပန်း &amp; အပြင်အဆင်များ"</string>
<string name="settings_screen_multilingual" msgid="1391301621464509659">"ဘာသာစကားစုံ ရွေးချယ်စရာများ"</string>
- <string name="settings_screen_gesture" msgid="8826372746901183556">"လှုပ်ရှားမှုဖြင့်စာရိုက်ခြင်း"</string>
+ <string name="settings_screen_gesture" msgid="8826372746901183556">"လှုပ်ရှားမှုဖြင့်စာရိုက်ခြင်း"</string>
<string name="settings_screen_correction" msgid="1616818407747682955">"စာအမှားပြပြင်ခြင်း"</string>
- <string name="settings_screen_advanced" msgid="7472408607625972994">"အဆင့်မြင့်"</string>
+ <string name="settings_screen_advanced" msgid="7472408607625972994">"အဆင့်မြင့်"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"အပြင်အဆင်"</string>
- <string name="enable_split_keyboard" msgid="4177264923999493614">"ကီးဘုတ် ခွဲခြမ်းမှု ဖွင့်ထားရန်"</string>
+ <string name="enable_split_keyboard" msgid="4177264923999493614">"ကီးဘုတ် ခွဲခြမ်းမှု ဖွင့်ထားရန်"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"သင်၏ စင့်က် လုပ်ပြီးသား ဒေတာ Google ထဲမှ ဖျက်ခံရမည်။"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"သင်၏ စင့်က် လုပ်ပြီးသား ဒေတာ ဖျက်ခံရမည်။ သင် သေချာသလား?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"ဖျက်ရန်"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"ဖျက်သိမ်းရန်"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"အခြားထည့်သွင်းမည့် နည်းလမ်းများသို့ ပြောင်းရန်"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ဘာသာပြောင်းသည့် ကီးသည် အခြားထည့်သွင်းရန် နည်းလမ်းများလည်း ပါဝင်သည်"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"ဘာသာစကား ပြောင်းခလုတ်"</string>
@@ -47,7 +51,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"အဆယ်ကသွယ်အမည်များ အကြံပြုမည်"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"အကြံပြုချက်များနှင့် အမှားပြင်ခြင်းများအတွက် အဆက်သွယ်မှ အမည်များ အသုံးပြုမည်"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"ကိုယ်ရေးကိုယ်တာ အကြံပြုချက်များ"</string>
- <string name="enable_metrics_logging" msgid="5506372337118822837">"မြှင့်တင်ပါ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"မြှင့်တင်ပါ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"နှစ်နေရာခြား အဆုံးသတ်"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"အချိန်ကာလ"</string>
<string name="auto_cap" msgid="1719746674854628252">"အော်တိုစာလုံးကြီးပြောင်း"</string>
@@ -84,7 +88,7 @@
<string name="hint_add_to_dictionary_without_word" msgid="3040385779511255101">"သိမ်းရန် ဤနေရာကို ထိပါ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"အဘိဓါန်ရနိုင်"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"ကီးဘုတ်အရောင်"</string>
- <string name="switch_accounts" msgid="3321216593719006162">"အကောင့်များကို ပြောင်းရန်"</string>
+ <string name="switch_accounts" msgid="3321216593719006162">"အကောင့်များကို ပြောင်းရန်"</string>
<string name="no_accounts_selected" msgid="2073821619103904330">"အကောင့်များ မရွေးရသေးပါ"</string>
<string name="account_selected" msgid="2846876462199625974">"<xliff:g id="EMAIL_ADDRESS">%1$s</xliff:g>အား လတ်တလော သုံးန​ေ၏"</string>
<string name="account_select_ok" msgid="9141195141763227797">"အိုကေ"</string>
@@ -156,7 +160,7 @@
<string name="default_user_dict_pref_name" msgid="1625055720489280530">"သုံးစွဲသူ၏ အဘိဓာန်"</string>
<string name="dictionary_available" msgid="4728975345815214218">"အဘိဓါန်ရရှိနိုင်"</string>
<string name="dictionary_downloading" msgid="2982650524622620983">"လက်ရှိ ဒေါင်းလုပ်လုပ်နေသည်"</string>
- <string name="dictionary_installed" msgid="8081558343559342962">"ထည့်သွင်းပြီး"</string>
+ <string name="dictionary_installed" msgid="8081558343559342962">"ထည့်သွင်းပြီး"</string>
<string name="dictionary_disabled" msgid="8950383219564621762">"ထည့်သွင်းထားပြီး၊ ပိတ်ထားသည်"</string>
<string name="cannot_connect_to_dict_service" msgid="9216933695765732398">"အဘိဓါန်ဝန်ဆောင်မှုသို့ ချိတ်ဆက်ရန် ပြဿနာရှိနေသည်"</string>
<string name="no_dictionaries_available" msgid="8039920716566132611">"အဘိဓါန်မရှိ"</string>
@@ -170,7 +174,7 @@
<string name="install_dict" msgid="180852772562189365">"တပ်ဆင်ပါ"</string>
<string name="cancel_download_dict" msgid="7843340278507019303">"ထားတော့"</string>
<string name="delete_dict" msgid="756853268088330054">"ဖျက်ရန်"</string>
- <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"သင့်ဖုန်းရှိ ရွေးချယ်ထားသည့် ဘာသာအတွက် အဘိဓါန်ရှိပါသည်။ &lt;br/&gt; အဘိဓါန်အား &lt;b&gt;ဒေါင်းလုပ်လုပ်ကာ&lt;/b&gt; the <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> သင့်စာရိုက် အတွေ့အကြုံတိုးတက်စေရန် ကျွန်ုပ်တို့အကြံပြုပါသည်။ &lt;br/&gt; &lt;br/&gt; ဒေါင်းလုပ်လုပ်ရန် 3G ပေါ်တွင် ၁ မှ ၂ မိနစ်ခန့်ကြာနိုင်သည်။ သင့်တွင် &lt;b&gt;အကန့်သတ်မှရိ အချက်လက် သုံးစွဲမှု&lt;/b&gt;မရှိလျှင် ငွေကျသင့်နိုင်ပါသည်။ &lt;br/&gt; သင့်တွင် မည်သည့်အချက်လက်သုံးစွဲမှု ရှိနေသည်ကိုမသိလျှင်၊ အလိုအလျောက် ဒေါင်းလုပ်လုပ်ရန် Wi-Fi ကွန်ရက်တစ်ခု ရှာဖွေရန် တိုက်တွန်းပါသည်။ &lt;br/&gt; &lt;br/&gt; နည်းလမ်း: သင့်ဖုန်းကိရိယာရှိ &lt;b&gt;ဆက်တင်ထဲတွင်&lt;/b&gt; &lt;b&gt;ဘာသာ &amp; စာရိုက်ထည့်မှု&lt;/b&gt; သို့သွားကာ အဘိဓါန်များကို ဒေါင်းလုပ်လုပ်နိုင် ဖယ်ရှားနိုင်ပါသည်။"</string>
+ <string name="should_download_over_metered_prompt" msgid="1583881200688185508">"သင့်ဖုန်းရှိ ရွေးချယ်ထားသည့် ဘာသာအတွက် အဘိဓါန်ရှိပါသည်။ &lt;br/&gt; အဘိဓါန်အား &lt;b&gt;ဒေါင်းလုပ်လုပ်ကာ&lt;/b&gt; the <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> သင့်စာရိုက် အတွေ့အကြုံတိုးတက်စေရန် ကျွန်ုပ်တို့အကြံပြုပါသည်။ &lt;br/&gt; &lt;br/&gt; ဒေါင်းလုပ်လုပ်ရန် 3G ပေါ်တွင် ၁ မှ ၂ မိနစ်ခန့်ကြာနိုင်သည်။ သင့်တွင် &lt;b&gt;အကန့်သတ်မှရိ အချက်လက် သုံးစွဲမှု&lt;/b&gt;မရှိလျှင် ငွေကျသင့်နိုင်ပါသည်။ &lt;br/&gt; သင့်တွင် မည်သည့်အချက်လက်သုံးစွဲမှု ရှိနေသည်ကိုမသိလျှင်၊ အလိုအလျောက် ဒေါင်းလုပ်လုပ်ရန် Wi-Fi ကွန်ရက်တစ်ခု ရှာဖွေရန် တိုက်တွန်းပါသည်။ &lt;br/&gt; &lt;br/&gt; နည်းလမ်း: သင့်ဖုန်းကိရိယာရှိ &lt;b&gt;ဆက်တင်ထဲတွင်&lt;/b&gt; &lt;b&gt;ဘာသာ &amp; စာရိုက်ထည့်မှု&lt;/b&gt; သို့သွားကာ အဘိဓါန်များကို ဒေါင်းလုပ်လုပ်နိုင် ဖယ်ရှားနိုင်ပါသည်။"</string>
<string name="download_over_metered" msgid="1643065851159409546">"ယခုဒေါင်းလုပ်လုပ်မည် (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g>MB)"</string>
<string name="do_not_download_over_metered" msgid="2176209579313941583">"Wi-Fi အသုံးပြု၍ ဒေါင်းလုပ်လုပ်ရန်"</string>
<string name="dict_available_notification_title" msgid="4583842811218581658">"<xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> အတွက် အဘိဓါန် ရနိုင်ပါသည်"</string>
@@ -191,7 +195,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"စာလုံးကို ပြင်ဆင်မည်"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"တည်းဖြတ်ရန်"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="8142932447689461181">"ဖျက်ရန်"</string>
- <string name="user_dict_settings_empty_text" msgid="558499587532668203">"သင့်အဘိဓာန်ထဲတွင် မည်သည့်စာလုံးမှမရှိပါ။ ထပ်ထည့်ခြင်း(+)ခလုတ်ကို ထိ၍ စာလုံးထည့်ပါ။"</string>
+ <string name="user_dict_settings_empty_text" msgid="558499587532668203">"သင့်အဘိဓာန်ထဲတွင် မည်သည့်စာလုံးမှမရှိပါ။ ထပ်ထည့်ခြင်း(+)ခလုတ်ကို ထိ၍ စာလုံးထည့်ပါ။"</string>
<string name="user_dict_settings_all_languages" msgid="8276126583216298886">"ဘာသာစကားအားလုံးအတွက်"</string>
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ဘာသာစကားပိုများများ…"</string>
<string name="user_dict_settings_delete" msgid="110413335187193859">"ဖျက်သိမ်းရန်"</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 849d7ab2d..c28c210c2 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avansert"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktivér delt tastatur"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Bytt inndatametode"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tasten for språkbytte dekker også andre inndatametoder"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Nøkkel for språkskifte"</string>
diff --git a/java/res/values-ne-rNP/strings.xml b/java/res/values-ne-rNP/strings.xml
index 40c2d4f96..e6e709866 100644
--- a/java/res/values-ne-rNP/strings.xml
+++ b/java/res/values-ne-rNP/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"उन्नत"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"विषयवस्तु"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"विभाजित कुञ्जीपाटी सक्षम गर्नुहोस्"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Google बाट तपाईँको सिङ्क गरिएको डाटा मेटाउँछ"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"तपाईंको समक्रमण गरिएको डाटा मेटाइनेछ। के तपाईं निश्चित हुनुहुन्छ?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"मेटाउनुहोस्"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"रद्द गर्नुहोस्"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"अन्य इनपुट विधिमा स्विच गर्नुहोस्"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"भाषा स्विच किले अन्य इनपुट विधि पनि समेट्छ"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"भाषा स्विच कुञ्जी"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index d09db3f17..4a967ac49 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Geavanceerd"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Thema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Gesplitst toetsenbord inschakelen"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Invoermeth. overschakelen"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Schakelknop voor taal ook van toepassing op andere invoermethoden"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Schakelknop voor taal"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 39cf7422d..9b8fac44f 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Zaawansowane"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Motyw"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Włącz podzieloną klawiaturę"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Inne metody wprowadzania"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Klawisz zmiany języka obejmuje też inne metody wprowadzania"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Klawisz zmiany języka"</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index e063cba31..34c6d1a22 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avançadas"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Ativar teclado dividido"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Mudar p/ outros mét. ent."</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A tecla de mudança de idioma abrange outros métodos de entrada"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla alterar idioma"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index 2cc86e12f..181782c8b 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avançadas"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Ativar teclado dividido"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Outros métodos de entrada"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A tecla p/ mudar o idioma também cobre outros métodos de entrada"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tecla de seleção de idioma"</string>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 03398733c..052962184 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Setări avansate"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Temă"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Activați tastatura divizată"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Comut. alte metode de introd."</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tasta de comutare între limbi include şi alte metode de introd."</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tastă comutare limbi"</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index e5aaf8ba7..304f9988d 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Дополнительные настройки"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Включить разделенную клавиатуру"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Смена способов ввода"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Клавиша переключения языков также служит для смены способа ввода"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Клавиша смены языка"</string>
diff --git a/java/res/values-si-rLK/strings.xml b/java/res/values-si-rLK/strings.xml
index f8fa5e7c3..27d68c6e4 100644
--- a/java/res/values-si-rLK/strings.xml
+++ b/java/res/values-si-rLK/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"උසස්"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"තේමාව"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"බෙදු යතුරු පුවරුව සබල කරන්න"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"වෙනත් ආදාන ක්‍රම වෙත මාරුවන්න"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"භාෂා මාරු යතුර වෙනත් ආදාන ක්‍රමද ආවරණය කරයි"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"භාෂා මාරු යතුර"</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 0d0e69fee..c9ce2970d 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Rozšírené"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Motív"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Povoliť rozdelenie klávesnice"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Prepnúť na iné metódy vstupu"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kláves na prepnutie jazyka pokrýva aj ďalšie metódy vstupu"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Kľúč na prepínanie jazyka"</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index e1f86c36c..5aa810579 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Dodatno"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Omogoči razdeljeno tipkovnico"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Prekl. na drug nač. vnosa"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tipka za preklop jezika, ki vključuje tudi druge načine vnosa"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tipka za preklop med jeziki"</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index f8c4ff601..4c43497b8 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Напредно"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Омогући подељену тастатуру"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Пребаци на друге методе уноса"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Тастер за пребацивање језика обухвата и друге методе уноса"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Тастер за пребацивање језика"</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 0c7d1a766..396c20eaf 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avancerat"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Aktivera delat tangentbord"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Byt till annan inmatning"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Språkbytesknappen omfattar även andra inmatningsmetoder"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Knapp för att byta språk"</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 04c4f2bb7..c24c900a8 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Mahiri"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Mandhari"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Washa muundo wa kibodi inayogawanyika"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Badilisha hadi kwa mbinu zingine za ingizo"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Ufunguo wa kubadilisha lugha unashughulikia mbinu zingine za ingizo pia"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Kitufe cha kubadilisha lugha"</string>
diff --git a/java/res/values-ta-rIN/strings.xml b/java/res/values-ta-rIN/strings.xml
index 64c573ba8..8e208b16d 100644
--- a/java/res/values-ta-rIN/strings.xml
+++ b/java/res/values-ta-rIN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"மேம்பட்டவை"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"தீம்"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"பிரிக்கப்பட்ட விசைப்பலகையை இயக்கு"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"பிற உள்ளீட்டு முறைகளுக்கு மாறு"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"மொழி மாற்றல் விசை பிற உள்ளீட்டு முறைகளையும் கட்டுப்படுத்துகிறது"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"மொழி மாற்ற விசை"</string>
diff --git a/java/res/values-te-rIN/strings.xml b/java/res/values-te-rIN/strings.xml
index 0fb55b4b2..4d891a999 100644
--- a/java/res/values-te-rIN/strings.xml
+++ b/java/res/values-te-rIN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"అధునాతనం"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"థీమ్"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"విభజన కీబోర్డ్‌ను ప్రారంభించు"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ఇతర ఇన్‌పుట్ పద్ధతులకు మారండి"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"భాష మార్పు కీ ఇతర ఇన్‌పుట్ పద్ధతులను కూడా కవర్ చేస్తుంది"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"భాష మార్పు కీ"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index fcc76d9b9..d1580ba7e 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"ขั้นสูง"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"ธีม"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"เปิดใช้แป้นพิมพ์แยก"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"ใช้วิธีการป้อนข้อมูลอื่น"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"แป้นสลับภาษาครอบคลุมวิธีการป้อนข้อมูลอื่นๆ ด้วย"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"แป้นสลับภาษา"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 82617b889..1ebf4c352 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"I-enable ang split keyboard"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Lipat iba paraan ng input"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Saklaw din ng key ng pagpalit ng wika ang ibang paraan ng input"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Key ng panlipat ng wika"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 359e0d16f..340a41783 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Gelişmiş"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Tema"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Bölünmüş klavyeyi etkinleştir"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Diğer giriş yöntemine geç"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Dil geçiş tuşu diğer giriş yöntemlerini de kapsar"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Dil değiştirme tuşu"</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index dd625cb70..dd1e068be 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Додатково"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Тема"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Увімкнути розділену клавіатуру"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Інші методи введення"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Клавіша зміни мови дозволяє змінювати методи введення"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Клавіша зміни мови"</string>
diff --git a/java/res/values-ur-rPK/strings.xml b/java/res/values-ur-rPK/strings.xml
index 4b1f03b03..4827eb9e6 100644
--- a/java/res/values-ur-rPK/strings.xml
+++ b/java/res/values-ur-rPK/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"جدید ترین"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"تھیم"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"الگ ہونے والا کی بورڈ فعال کریں"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"دیگر اندراج طریقوں پر سوئچ کریں"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"زبان سوئچ کرنے کی کلید اندراج کے دیگر طریقوں کا بھی احاطہ کرتی ہے"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"زبان سوئچ کرنے کی کلید"</string>
diff --git a/java/res/values-uz-rUZ/strings.xml b/java/res/values-uz-rUZ/strings.xml
index 59aba60f0..402140855 100644
--- a/java/res/values-uz-rUZ/strings.xml
+++ b/java/res/values-uz-rUZ/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Qo‘shimcha"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Mavzu"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Ikkiga ajratiladigan klaviaturani yoqish"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Boshqa usullarga o‘tish"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tilni o‘zgartirish tugmasi matn kiritish usulini ham o‘zgartiradi"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Tilni o‘zgartirish tugmasi"</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index ec0deb117..104a9dd57 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Nâng cao"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Chủ đề"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Bật chia bàn phím"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Phương thức nhập khác"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Khóa chuyển ngôn ngữ bao gồm cả các phương thức nhập liệu khác"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Phím chuyển đổi ngôn ngữ"</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 52b0dac74..31d6ea611 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"高级"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"主题背景"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"使用分离式键盘"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"切换到其他输入法"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"语言切换键也可用于切换其他输入法"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"语言切换键"</string>
diff --git a/java/res/values-zh-rHK/strings.xml b/java/res/values-zh-rHK/strings.xml
index 840f33387..3e8d4059c 100644
--- a/java/res/values-zh-rHK/strings.xml
+++ b/java/res/values-zh-rHK/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"進階"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"主題背景"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"啟用分離式鍵盤"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"切換至其他輸入法"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"語言切換鍵包括其他輸入法"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"語言切換鍵"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 8fac3105e..2be37d51a 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -35,6 +35,14 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"進階"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"主題"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"啟用分離式鍵盤"</string>
+ <!-- no translation found for clear_sync_data_summary (993477139012576584) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_confirmation (6415032621884042784) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_ok (613104067705915132) -->
+ <skip />
+ <!-- no translation found for clear_sync_data_cancel (8543925137765830060) -->
+ <skip />
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"切換到其他輸入法"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"使語言切換鍵包含其他輸入法"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"語言切換鍵"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 0177129dc..db62fe864 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -35,6 +35,10 @@
<string name="settings_screen_advanced" msgid="7472408607625972994">"Okuthuthukisiwe"</string>
<string name="settings_screen_theme" msgid="2137262503543943871">"Itimu"</string>
<string name="enable_split_keyboard" msgid="4177264923999493614">"Nika amandla ikhibhodi yokuhlukanisa"</string>
+ <string name="clear_sync_data_summary" msgid="993477139012576584">"Susa idatha yakho evumelanisiwe esuka ku-Google"</string>
+ <string name="clear_sync_data_confirmation" msgid="6415032621884042784">"Idatha yakho evumelanisiwe izosuswa. Ingabe uqinisekile?"</string>
+ <string name="clear_sync_data_ok" msgid="613104067705915132">"Susa"</string>
+ <string name="clear_sync_data_cancel" msgid="8543925137765830060">"Khansela"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Shintshela kwezinye izindlela zokungena"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Ukhiye wokushintsha ulimi ubandakanya ezinye izindlela zokungenayo"</string>
<string name="show_language_switch_key" msgid="5915478828318774384">"Ukhiye wokushintsha ullimi"</string>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index e1a72c476..5eaac09a3 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -61,6 +61,11 @@
<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 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>
diff --git a/java/res/xml/prefs_screen_accounts.xml b/java/res/xml/prefs_screen_accounts.xml
index 41642bf08..462488547 100644
--- a/java/res/xml/prefs_screen_accounts.xml
+++ b/java/res/xml/prefs_screen_accounts.xml
@@ -48,4 +48,11 @@
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"
+ android:persistent="false"
+ android:title="@string/clear_sync_data_title"
+ android:summary="@string/clear_sync_data_summary"
+ android:dependency="pref_enable_cloud_sync" />
</PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 6ccd19f0a..4c2498893 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -23,7 +23,6 @@ import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
-import android.widget.LinearLayout;
import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
import com.android.inputmethod.event.Event;
@@ -41,11 +40,14 @@ import com.android.inputmethod.latin.define.ProductionFlags;
import com.android.inputmethod.latin.settings.Settings;
import com.android.inputmethod.latin.settings.SettingsValues;
import com.android.inputmethod.latin.utils.CapsModeUtils;
+import com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils;
+import com.android.inputmethod.latin.utils.NetworkConnectivityUtils;
import com.android.inputmethod.latin.utils.RecapitalizeStatus;
import com.android.inputmethod.latin.utils.ResourceUtils;
import com.android.inputmethod.latin.utils.ScriptUtils;
-public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
+public final class KeyboardSwitcher implements KeyboardState.SwitchActions,
+ NetworkConnectivityUtils.NetworkStateChangeListener {
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
private SubtypeSwitcher mSubtypeSwitcher;
@@ -55,6 +57,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
private MainKeyboardView mKeyboardView;
private EmojiPalettesView mEmojiPalettesView;
private LatinIME mLatinIME;
+ private RichInputMethodManager mRichImm;
private boolean mIsHardwareAcceleratedDrawingEnabled;
private KeyboardState mState;
@@ -82,6 +85,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
private void initInternal(final LatinIME latinIme) {
mLatinIME = latinIme;
+ mRichImm = RichInputMethodManager.getInstance();
mSubtypeSwitcher = SubtypeSwitcher.getInstance();
mState = new KeyboardState(this);
mIsHardwareAcceleratedDrawingEnabled =
@@ -115,7 +119,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
final int keyboardHeight = ResourceUtils.getKeyboardHeight(res, settingsValues);
builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
- builder.setSubtype(RichInputMethodManager.getInstance().getCurrentSubtype());
+ builder.setSubtype(mRichImm.getCurrentSubtype());
builder.setVoiceInputKeyEnabled(settingsValues.mShowsVoiceInputKey);
builder.setLanguageSwitchKeyEnabled(mLatinIME.shouldShowLanguageSwitchKey());
builder.setSplitLayoutEnabledByUser(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED
@@ -124,9 +128,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
try {
mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState);
// TODO: revisit this for multi-lingual input
- mKeyboardTextsSet.setLocale(
- RichInputMethodManager.getInstance().getCurrentSubtypeLocales()[0],
- mThemeContext);
+ mKeyboardTextsSet.setLocale(mRichImm.getCurrentSubtypeLocales()[0], mThemeContext);
} catch (KeyboardLayoutSetException e) {
Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
return;
@@ -165,12 +167,12 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
currentSettingsValues.mKeyPreviewDismissEndXScale,
currentSettingsValues.mKeyPreviewDismissEndYScale,
currentSettingsValues.mKeyPreviewDismissDuration);
- keyboardView.updateShortcutKey(RichInputMethodManager.getInstance().isShortcutImeReady());
+ keyboardView.updateShortcutKey(mRichImm.isShortcutImeReady());
final boolean subtypeChanged = (oldKeyboard == null)
|| !keyboard.mId.mSubtype.equals(oldKeyboard.mId.mSubtype);
- final int languageOnSpacebarFormatType = mSubtypeSwitcher.getLanguageOnSpacebarFormatType(
- keyboard.mId.mSubtype);
- final boolean hasMultipleEnabledIMEsOrSubtypes = RichInputMethodManager.getInstance()
+ final int languageOnSpacebarFormatType = LanguageOnSpacebarUtils
+ .getLanguageOnSpacebarFormatType(keyboard.mId.mSubtype);
+ final boolean hasMultipleEnabledIMEsOrSubtypes = mRichImm
.hasMultipleEnabledIMEsOrSubtypes(true /* shouldIncludeAuxiliarySubtypes */);
keyboardView.startDisplayLanguageOnSpacebar(subtypeChanged, languageOnSpacebarFormatType,
hasMultipleEnabledIMEsOrSubtypes);
@@ -415,11 +417,13 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
return mCurrentInputView;
}
+ // {@link NetworkConnectivityUtils.NetworkStateChangeListener#onNetworkStateChanged(boolean)}.
+ @Override
public void onNetworkStateChanged() {
if (mKeyboardView == null) {
return;
}
- mKeyboardView.updateShortcutKey(RichInputMethodManager.getInstance().isShortcutImeReady());
+ mKeyboardView.updateShortcutKey(mRichImm.isShortcutImeReady());
}
public int getKeyboardShiftMode() {
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index eeac4755d..ab8b7515d 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -47,7 +47,6 @@ import com.android.inputmethod.keyboard.internal.KeyDrawParams;
import com.android.inputmethod.keyboard.internal.KeyPreviewChoreographer;
import com.android.inputmethod.keyboard.internal.KeyPreviewDrawParams;
import com.android.inputmethod.keyboard.internal.KeyPreviewView;
-import com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper;
import com.android.inputmethod.keyboard.internal.MoreKeySpec;
import com.android.inputmethod.keyboard.internal.NonDistinctMultitouchHelper;
import com.android.inputmethod.keyboard.internal.SlidingKeyInputDrawingPreview;
@@ -58,6 +57,7 @@ import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.common.Constants;
import com.android.inputmethod.latin.common.CoordinateUtils;
import com.android.inputmethod.latin.settings.DebugSettings;
+import com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils;
import com.android.inputmethod.latin.utils.TypefaceUtils;
import java.util.Locale;
@@ -783,10 +783,10 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
mHasMultipleEnabledIMEsOrSubtypes = hasMultipleEnabledIMEsOrSubtypes;
final ObjectAnimator animator = mLanguageOnSpacebarFadeoutAnimator;
if (animator == null) {
- mLanguageOnSpacebarFormatType = LanguageOnSpacebarHelper.FORMAT_TYPE_NONE;
+ mLanguageOnSpacebarFormatType = LanguageOnSpacebarUtils.FORMAT_TYPE_NONE;
} else {
if (subtypeChanged
- && languageOnSpacebarFormatType != LanguageOnSpacebarHelper.FORMAT_TYPE_NONE) {
+ && languageOnSpacebarFormatType != LanguageOnSpacebarUtils.FORMAT_TYPE_NONE) {
setLanguageOnSpacebarAnimAlpha(Constants.Color.ALPHA_OPAQUE);
if (animator.isStarted()) {
animator.cancel();
@@ -811,7 +811,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
final int code = key.getCode();
if (code == Constants.CODE_SPACE) {
// If input language are explicitly selected.
- if (mLanguageOnSpacebarFormatType != LanguageOnSpacebarHelper.FORMAT_TYPE_NONE) {
+ if (mLanguageOnSpacebarFormatType != LanguageOnSpacebarUtils.FORMAT_TYPE_NONE) {
drawLanguageOnSpacebar(key, canvas, paint);
}
// Whether space key needs to show the "..." popup hint for special purposes
@@ -843,7 +843,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
// Layout language name on spacebar.
private String layoutLanguageOnSpacebar(final Paint paint,
final RichInputMethodSubtype subtype, final int width) {
- if (mLanguageOnSpacebarFormatType == LanguageOnSpacebarHelper.FORMAT_TYPE_MULTIPLE) {
+ if (mLanguageOnSpacebarFormatType == LanguageOnSpacebarUtils.FORMAT_TYPE_MULTIPLE) {
final Locale[] locales = subtype.getLocales();
final String[] languages = new String[locales.length];
for (int i = 0; i < locales.length; ++i) {
@@ -853,7 +853,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
}
// Choose appropriate language name to fit into the width.
- if (mLanguageOnSpacebarFormatType == LanguageOnSpacebarHelper.FORMAT_TYPE_FULL_LOCALE) {
+ if (mLanguageOnSpacebarFormatType == LanguageOnSpacebarUtils.FORMAT_TYPE_FULL_LOCALE) {
final String fullText = subtype.getFullDisplayName();
if (fitsTextIntoWidth(width, fullText, paint)) {
return fullText;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index d9d22e0fc..1c54a20e7 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -77,6 +77,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
private static final int DICTIONARY_FORMAT_VERSION = FormatSpec.VERSION4;
+ private static final WordProperty[] DEFAULT_WORD_PROPERTIES_FOR_SYNC =
+ new WordProperty[0] /* default */;
+
/** The application context. */
protected final Context mContext;
@@ -802,4 +805,38 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
});
}
+
+ /**
+ * Returns dictionary content required for syncing.
+ */
+ public WordProperty[] getWordPropertiesForSyncing() {
+ reloadDictionaryIfRequired();
+ final AsyncResultHolder<WordProperty[]> result = new AsyncResultHolder<>();
+ asyncExecuteTaskWithLock(mLock.readLock(), "sync-read", new Runnable() {
+ @Override
+ public void run() {
+ final ArrayList<WordProperty> wordPropertyList = new ArrayList<>();
+ final BinaryDictionary binaryDictionary = getBinaryDictionary();
+ if (binaryDictionary == null) {
+ return;
+ }
+ int token = 0;
+ do {
+ // TODO: We need a new API that returns *new* un-synced data.
+ final BinaryDictionary.GetNextWordPropertyResult nextWordPropertyResult =
+ binaryDictionary.getNextWordProperty(token);
+ final WordProperty wordProperty = nextWordPropertyResult.mWordProperty;
+ if (wordProperty == null) {
+ break;
+ }
+ wordPropertyList.add(wordProperty);
+ token = nextWordPropertyResult.mNextToken;
+ } while (token != 0);
+ result.set(wordPropertyList.toArray(new WordProperty[wordPropertyList.size()]));
+ }
+ });
+ // TODO: Figure out the best timeout duration for this API.
+ return result.get(DEFAULT_WORD_PROPERTIES_FOR_SYNC,
+ TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS);
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 27115e266..d6ec57fe6 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -32,7 +32,6 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.inputmethodservice.InputMethodService;
import android.media.AudioManager;
-import android.net.ConnectivityManager;
import android.os.Build;
import android.os.Debug;
import android.os.IBinder;
@@ -100,6 +99,7 @@ import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
import com.android.inputmethod.latin.utils.IntentUtils;
import com.android.inputmethod.latin.utils.JniUtils;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
+import com.android.inputmethod.latin.utils.NetworkConnectivityUtils;
import com.android.inputmethod.latin.utils.StatsUtils;
import com.android.inputmethod.latin.utils.StatsUtilsManager;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -592,13 +592,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
loadSettings();
resetDictionaryFacilitatorIfNecessary();
- // Register to receive ringer mode change and network state change.
- // Also receive installation and removal of a dictionary pack.
+ NetworkConnectivityUtils.onCreate(this /* context */, mKeyboardSwitcher /* listener */);
+
+ // Register to receive ringer mode change.
final IntentFilter filter = new IntentFilter();
- filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
- registerReceiver(mConnectivityAndRingerModeChangeReceiver, filter);
+ registerReceiver(mRingerModeChangeReceiver, filter);
+ // Register to receive installation and removal of a dictionary pack.
final IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
@@ -726,7 +727,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mPersonalizationDictionaryUpdater.onDestroy();
mContextualDictionaryUpdater.onDestroy();
mSettings.onDestroy();
- unregisterReceiver(mConnectivityAndRingerModeChangeReceiver);
+ NetworkConnectivityUtils.onDestroy(this /* context */);
+ unregisterReceiver(mRingerModeChangeReceiver);
unregisterReceiver(mDictionaryPackInstallReceiver);
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
mStatsUtilsManager.onDestroy();
@@ -738,7 +740,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
public void recycle() {
unregisterReceiver(mDictionaryPackInstallReceiver);
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
- unregisterReceiver(mConnectivityAndRingerModeChangeReceiver);
+ unregisterReceiver(mRingerModeChangeReceiver);
+ NetworkConnectivityUtils.onDestroy(this /* context */);
mInputLogic.recycle();
}
@@ -1828,15 +1831,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// boolean onKeyLongPress(final int keyCode, final KeyEvent event);
// boolean onKeyMultiple(final int keyCode, final int count, final KeyEvent event);
- // receive ringer mode change and network state change.
- private final BroadcastReceiver mConnectivityAndRingerModeChangeReceiver =
- new BroadcastReceiver() {
+ // receive ringer mode change.
+ private final BroadcastReceiver mRingerModeChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final String action = intent.getAction();
- if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- mRichImm.onNetworkStateChanged(intent);
- } else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
+ if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
AudioAndHapticFeedbackManager.getInstance().onRingerModeChanged();
}
}
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index 462121789..cb1de6b17 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -20,11 +20,8 @@ import static com.android.inputmethod.latin.common.Constants.Subtype.KEYBOARD_MO
import static com.android.inputmethod.latin.common.Constants.Subtype.ExtraValue.REQ_NETWORK_CONNECTIVITY;
import android.content.Context;
-import android.content.Intent;
import android.content.SharedPreferences;
import android.inputmethodservice.InputMethodService;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
@@ -36,10 +33,10 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.settings.AdditionalFeaturesSettingUtils;
import com.android.inputmethod.latin.settings.Settings;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
+import com.android.inputmethod.latin.utils.NetworkConnectivityUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.Collections;
@@ -72,7 +69,6 @@ public class RichInputMethodManager {
private RichInputMethodSubtype mCurrentRichInputMethodSubtype;
private InputMethodInfo mShortcutInputMethodInfo;
private InputMethodSubtype mShortcutSubtype;
- private boolean mIsNetworkConnected;
final HashMap<InputMethodInfo, List<InputMethodSubtype>>
mSubtypeListCacheWithImplicitlySelectedSubtypes = new HashMap<>();
final HashMap<InputMethodInfo, List<InputMethodSubtype>>
@@ -116,11 +112,6 @@ public class RichInputMethodManager {
// Initialize the current input method subtype and the shortcut IME.
refreshSubtypeCaches();
-
- final ConnectivityManager connectivityManager =
- (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo info = connectivityManager.getActiveNetworkInfo();
- mIsNetworkConnected = (info != null && info.isConnected());
}
public InputMethodSubtype[] getAdditionalSubtypes() {
@@ -511,9 +502,7 @@ public class RichInputMethodManager {
}
private void updateCurrentSubtype(@Nonnull final InputMethodSubtype subtype) {
- final RichInputMethodSubtype richSubtype = AdditionalFeaturesSettingUtils
- .createRichInputMethodSubtype(this, subtype, mContext);
- mCurrentRichInputMethodSubtype = richSubtype;
+ mCurrentRichInputMethodSubtype = new RichInputMethodSubtype(subtype);
}
private void updateShortcutIme() {
@@ -591,16 +580,8 @@ public class RichInputMethodManager {
return true;
}
if (mShortcutSubtype.containsExtraValueKey(REQ_NETWORK_CONNECTIVITY)) {
- return mIsNetworkConnected;
+ return NetworkConnectivityUtils.isNetworkConnected();
}
return true;
}
-
- public void onNetworkStateChanged(final Intent intent) {
- final boolean noConnection = intent.getBooleanExtra(
- ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
- mIsNetworkConnected = !noConnection;
-
- KeyboardSwitcher.getInstance().onNetworkStateChanged();
- }
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 92ba6c2d9..d7a03d40b 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -20,7 +20,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.view.inputmethod.InputMethodSubtype;
-import com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper;
+import com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.List;
@@ -33,9 +33,6 @@ public final class SubtypeSwitcher {
private /* final */ RichInputMethodManager mRichImm;
private /* final */ Resources mResources;
- private final LanguageOnSpacebarHelper mLanguageOnSpacebarHelper =
- new LanguageOnSpacebarHelper();
-
public static SubtypeSwitcher getInstance() {
return sInstance;
}
@@ -68,18 +65,14 @@ public final class SubtypeSwitcher {
public void updateParametersOnStartInputView() {
final List<InputMethodSubtype> enabledSubtypesOfThisIme =
mRichImm.getMyEnabledInputMethodSubtypeList(true);
- mLanguageOnSpacebarHelper.onUpdateEnabledSubtypes(enabledSubtypesOfThisIme);
+ LanguageOnSpacebarUtils.setEnabledSubtypes(enabledSubtypesOfThisIme);
}
// Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
public void onSubtypeChanged(@Nonnull final RichInputMethodSubtype richSubtype) {
final boolean implicitlyEnabledSubtype = mRichImm
.checkIfSubtypeBelongsToThisImeAndImplicitlyEnabled(richSubtype.getRawSubtype());
- mLanguageOnSpacebarHelper.onSubtypeChanged(
+ LanguageOnSpacebarUtils.onSubtypeChanged(
richSubtype, implicitlyEnabledSubtype, mResources.getConfiguration().locale);
}
-
- public int getLanguageOnSpacebarFormatType(final RichInputMethodSubtype subtype) {
- return mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(subtype);
- }
}
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 30dd51aed..df8db0cd2 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -252,6 +252,7 @@ public class SuggestedWords {
public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
public static final int KIND_FLAG_EXACT_MATCH = 0x40000000;
public static final int KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION = 0x20000000;
+ public static final int KIND_FLAG_APPROPRIATE_FOR_AUTO_CORRECTION = 0x10000000;
public final String mWord;
// The completion info from the application. Null for suggestions that don't come from
@@ -333,6 +334,10 @@ public class SuggestedWords {
return (mKindAndFlags & KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION) != 0;
}
+ public boolean isAprapreateForAutoCorrection() {
+ return (mKindAndFlags & KIND_FLAG_APPROPRIATE_FOR_AUTO_CORRECTION) != 0;
+ }
+
public void setDebugString(final String str) {
if (null == str) throw new NullPointerException("Debug info is null");
mDebugString = str;
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index 74196dd6d..b595f3974 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -58,8 +58,7 @@ public class PersonalizationHelper {
final UserHistoryDictionary dict = ref == null ? null : ref.get();
if (dict != null) {
if (DEBUG) {
- Log.d(TAG, "Use cached UserHistoryDictionary for " + locale +
- " & account" + accountName);
+ Log.d(TAG, "Use cached UserHistoryDictionary with lookup: " + lookupStr);
}
dict.reloadDictionaryIfRequired();
return dict;
diff --git a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java
index 4bd15d037..0232853f7 100644
--- a/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/AccountsSettingsFragment.java
@@ -50,12 +50,15 @@ import javax.annotation.Nullable;
*/
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";
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();
@Override
public void onCreate(final Bundle icicle) {
@@ -86,13 +89,18 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
removePreference(PREF_ACCCOUNT_SWITCHER);
removePreference(PREF_ENABLE_CLOUD_SYNC);
removePreference(PREF_SYNC_NOW);
+ removePreference(PREF_CLEAR_SYNC_DATA);
}
if (!ProductionFlags.ENABLE_PERSONAL_DICTIONARY_SYNC) {
removePreference(PREF_ENABLE_CLOUD_SYNC);
removePreference(PREF_SYNC_NOW);
+ removePreference(PREF_CLEAR_SYNC_DATA);
} else {
final Preference syncNowPreference = findPreference(PREF_SYNC_NOW);
syncNowPreference.setOnPreferenceClickListener(mSyncNowListener);
+
+ final Preference clearSyncDataPreference = findPreference(PREF_CLEAR_SYNC_DATA);
+ clearSyncDataPreference.setOnPreferenceClickListener(mClearSyncDataListener);
}
}
@@ -136,7 +144,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
final String[] accountsForLogin = LoginAccountUtils.getAccountsForLogin(context);
accountSwitcher.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
- public boolean onPreferenceClick(Preference preference) {
+ public boolean onPreferenceClick(final Preference preference) {
if (accountsForLogin.length == 0) {
// TODO: Handle account addition.
Toast.makeText(getActivity(), getString(R.string.account_select_cancel),
@@ -229,7 +237,7 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
*/
class AccountChangedListener implements DialogInterface.OnClickListener {
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(final DialogInterface dialog, final int which) {
final String oldAccount = getSignedInAccountName();
switch (which) {
case DialogInterface.BUTTON_POSITIVE: // Signed in
@@ -263,4 +271,30 @@ public final class AccountsSettingsFragment extends SubScreenFragment {
return true;
}
}
+
+ /**
+ * Listener that initiates the process of deleting user's data from the cloud.
+ */
+ class ClearSyncDataListener implements Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(final Preference preference) {
+ final AlertDialog confirmationDialog = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.clear_sync_data_title)
+ .setMessage(R.string.clear_sync_data_confirmation)
+ .setPositiveButton(R.string.clear_sync_data_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(final DialogInterface dialog, final int which) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ AccountStateChangedListener.forceDelete(
+ getSignedInAccountName());
+ }
+ }
+ })
+ .setNegativeButton(R.string.clear_sync_data_cancel, null /* OnClickListener */)
+ .create();
+ confirmationDialog.show();
+ return true;
+ }
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
index 2fd257922..c9ecade91 100644
--- a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
@@ -36,6 +36,10 @@ public final class AutoCorrectionUtils {
if (suggestion.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
return true;
}
+ // TODO: return suggestion.isAprapreateForAutoCorrection();
+ if (!suggestion.isAprapreateForAutoCorrection()) {
+ return false;
+ }
final int autoCorrectionSuggestionScore = suggestion.mScore;
// TODO: when the normalized score of the first suggestion is nearly equals to
// the normalized score of the second suggestion, behave less aggressive.
diff --git a/java/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelper.java b/java/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtils.java
index 8ed80107a..fa1583b7a 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelper.java
+++ b/java/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtils.java
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-package com.android.inputmethod.keyboard.internal;
+package com.android.inputmethod.latin.utils;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.latin.RichInputMethodSubtype;
-import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.Collections;
import java.util.List;
@@ -30,21 +29,26 @@ import javax.annotation.Nonnull;
/**
* This class determines that the language name on the spacebar should be displayed in what format.
*/
-public final class LanguageOnSpacebarHelper {
+public final class LanguageOnSpacebarUtils {
public static final int FORMAT_TYPE_NONE = 0;
public static final int FORMAT_TYPE_LANGUAGE_ONLY = 1;
public static final int FORMAT_TYPE_FULL_LOCALE = 2;
public static final int FORMAT_TYPE_MULTIPLE = 3;
- private List<InputMethodSubtype> mEnabledSubtypes = Collections.emptyList();
- private boolean mIsSystemLanguageSameAsInputLanguage;
+ private static List<InputMethodSubtype> sEnabledSubtypes = Collections.emptyList();
+ private static boolean sIsSystemLanguageSameAsInputLanguage;
- public int getLanguageOnSpacebarFormatType(@Nonnull final RichInputMethodSubtype subtype) {
+ private LanguageOnSpacebarUtils() {
+ // This utility class is not publicly instantiable.
+ }
+
+ public static int getLanguageOnSpacebarFormatType(
+ @Nonnull final RichInputMethodSubtype subtype) {
if (subtype.isNoLanguage()) {
return FORMAT_TYPE_FULL_LOCALE;
}
// Only this subtype is enabled and equals to the system locale.
- if (mEnabledSubtypes.size() < 2 && mIsSystemLanguageSameAsInputLanguage) {
+ if (sEnabledSubtypes.size() < 2 && sIsSystemLanguageSameAsInputLanguage) {
return FORMAT_TYPE_NONE;
}
final Locale[] locales = subtype.getLocales();
@@ -54,7 +58,7 @@ public final class LanguageOnSpacebarHelper {
final String keyboardLanguage = locales[0].getLanguage();
final String keyboardLayout = subtype.getKeyboardLayoutSetName();
int sameLanguageAndLayoutCount = 0;
- for (final InputMethodSubtype ims : mEnabledSubtypes) {
+ for (final InputMethodSubtype ims : sEnabledSubtypes) {
final String language = SubtypeLocaleUtils.getSubtypeLocale(ims).getLanguage();
if (keyboardLanguage.equals(language) && keyboardLayout.equals(
SubtypeLocaleUtils.getKeyboardLayoutSetName(ims))) {
@@ -67,30 +71,30 @@ public final class LanguageOnSpacebarHelper {
: FORMAT_TYPE_LANGUAGE_ONLY;
}
- public void onUpdateEnabledSubtypes(@Nonnull final List<InputMethodSubtype> enabledSubtypes) {
- mEnabledSubtypes = enabledSubtypes;
+ public static void setEnabledSubtypes(@Nonnull final List<InputMethodSubtype> enabledSubtypes) {
+ sEnabledSubtypes = enabledSubtypes;
}
- public void onSubtypeChanged(@Nonnull final RichInputMethodSubtype subtype,
+ public static void onSubtypeChanged(@Nonnull final RichInputMethodSubtype subtype,
final boolean implicitlyEnabledSubtype, @Nonnull final Locale systemLocale) {
final Locale[] newLocales = subtype.getLocales();
if (newLocales.length > 1) {
// In multi-locales mode, the system language is never the same as the input language
// because there is no single input language.
- mIsSystemLanguageSameAsInputLanguage = false;
+ sIsSystemLanguageSameAsInputLanguage = false;
return;
}
final Locale newLocale = newLocales[0];
if (systemLocale.equals(newLocale)) {
- mIsSystemLanguageSameAsInputLanguage = true;
+ sIsSystemLanguageSameAsInputLanguage = true;
return;
}
if (!systemLocale.getLanguage().equals(newLocale.getLanguage())) {
- mIsSystemLanguageSameAsInputLanguage = false;
+ sIsSystemLanguageSameAsInputLanguage = false;
return;
}
// If the subtype is enabled explicitly, the language name should be displayed even when
// the keyboard language and the system language are equal.
- mIsSystemLanguageSameAsInputLanguage = implicitlyEnabledSubtype;
+ sIsSystemLanguageSameAsInputLanguage = implicitlyEnabledSubtype;
}
}
diff --git a/java/src/com/android/inputmethod/latin/utils/NetworkConnectivityUtils.java b/java/src/com/android/inputmethod/latin/utils/NetworkConnectivityUtils.java
new file mode 100644
index 000000000..101c55067
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/utils/NetworkConnectivityUtils.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2014 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.utils;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+
+import javax.annotation.Nonnull;
+
+/**
+ * This class keeps track of the network connectivity state by receiving the system intent
+ * {@link ConnectivityManager#CONNECTIVITY_ACTION}, and invokes an registered call back to notify
+ * changes of the network connectivity state.
+ */
+public final class NetworkConnectivityUtils {
+ private static NetworkConnectivityReceiver sNetworkConnectivityReceiver;
+
+ public interface NetworkStateChangeListener {
+ /**
+ * Called when the network connectivity state has changed.
+ */
+ public void onNetworkStateChanged();
+ }
+
+ private static class NetworkConnectivityReceiver extends BroadcastReceiver {
+ @Nonnull
+ private final NetworkStateChangeListener mListener;
+ private boolean mIsNetworkConnected;
+
+ public NetworkConnectivityReceiver(@Nonnull final NetworkStateChangeListener listener,
+ final boolean isNetworkConnected) {
+ mListener = listener;
+ mIsNetworkConnected = isNetworkConnected;
+ }
+
+ public synchronized boolean isNetworkConnected() {
+ return mIsNetworkConnected;
+ }
+
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ final String action = intent.getAction();
+ if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+ final boolean noConnection = intent.getBooleanExtra(
+ ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+ synchronized (this) {
+ mIsNetworkConnected = !noConnection;
+ }
+ mListener.onNetworkStateChanged();
+ }
+ }
+ }
+
+ private NetworkConnectivityUtils() {
+ // This utility class is not publicly instantiable.
+ }
+
+ public static void onCreate(@Nonnull final Context context,
+ @Nonnull final NetworkStateChangeListener listener) {
+ final ConnectivityManager connectivityManager =
+ (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ final NetworkInfo info = connectivityManager.getActiveNetworkInfo();
+ final boolean isNetworkConnected = (info != null && info.isConnected());
+
+ // Register {@link BroadcastReceiver} for the network connectivity state change.
+ final NetworkConnectivityReceiver receiver = new NetworkConnectivityReceiver(
+ listener, isNetworkConnected);
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ context.registerReceiver(receiver, filter);
+
+ sNetworkConnectivityReceiver = receiver;
+ }
+
+ public static void onDestroy(final Context context) {
+ context.unregisterReceiver(sNetworkConnectivityReceiver);
+ }
+
+ public static boolean isNetworkConnected() {
+ final NetworkConnectivityReceiver receiver = sNetworkConnectivityReceiver;
+ return receiver != null && receiver.isNetworkConnected();
+ }
+}
diff --git a/native/jni/NativeFileList.mk b/native/jni/NativeFileList.mk
index 55bb68344..0be7153d6 100644
--- a/native/jni/NativeFileList.mk
+++ b/native/jni/NativeFileList.mk
@@ -30,8 +30,7 @@ LATIN_IME_CORE_SRC_FILES := \
dictionary_utils.cpp \
digraph_utils.cpp \
error_type_utils.cpp \
- multi_bigram_map.cpp \
- property/word_property.cpp) \
+ multi_bigram_map.cpp) \
$(addprefix suggest/core/layout/, \
additional_proximity_chars.cpp \
proximity_info.cpp \
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 9c065e0d1..8f1e35e0f 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -351,10 +351,9 @@ static void latinime_BinaryDictionary_getWordProperty(JNIEnv *env, jclass clazz,
}
const WordProperty wordProperty = dictionary->getWordProperty(
CodePointArrayView(wordCodePoints, codePointCount));
- wordProperty.outputProperties(env, outCodePoints, outFlags, outProbabilityInfo,
+ JniDataUtils::outputWordProperty(env, wordProperty, outCodePoints, outFlags, outProbabilityInfo,
outNgramPrevWordsArray, outNgramPrevWordIsBeginningOfSentenceArray,
- outNgramTargets, outNgramProbabilityInfo, outShortcutTargets,
- outShortcutProbabilities);
+ outNgramTargets, outNgramProbabilityInfo, outShortcutTargets, outShortcutProbabilities);
}
static bool latinime_BinaryDictionary_addUnigramEntry(JNIEnv *env, jclass clazz, jlong dict,
diff --git a/native/jni/src/suggest/core/dictionary/dictionary.h b/native/jni/src/suggest/core/dictionary/dictionary.h
index a5e986d15..b1774371b 100644
--- a/native/jni/src/suggest/core/dictionary/dictionary.h
+++ b/native/jni/src/suggest/core/dictionary/dictionary.h
@@ -60,6 +60,7 @@ class Dictionary {
static const int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
static const int KIND_FLAG_EXACT_MATCH = 0x40000000;
static const int KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION = 0x20000000;
+ static const int KIND_FLAG_APPROPRIATE_FOR_AUTOCORRECTION = 0x10000000;
Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::StructurePolicyPtr
dictionaryStructureWithBufferPolicy);
diff --git a/native/jni/src/suggest/core/dictionary/error_type_utils.cpp b/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
index 8f07ce275..61093e174 100644
--- a/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
+++ b/native/jni/src/suggest/core/dictionary/error_type_utils.cpp
@@ -21,13 +21,14 @@ namespace latinime {
const ErrorTypeUtils::ErrorType ErrorTypeUtils::NOT_AN_ERROR = 0x0;
const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_WRONG_CASE = 0x1;
const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_MISSING_ACCENT = 0x2;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_WRONG_ACCENT = 0x4;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_DIGRAPH = 0x8;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::INTENTIONAL_OMISSION = 0x10;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::EDIT_CORRECTION = 0x20;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::PROXIMITY_CORRECTION = 0x40;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::COMPLETION = 0x80;
-const ErrorTypeUtils::ErrorType ErrorTypeUtils::NEW_WORD = 0x100;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_MISSING_EXPLICIT_ACCENT = 0x4;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_WRONG_ACCENT = 0x8;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::MATCH_WITH_DIGRAPH = 0x10;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::INTENTIONAL_OMISSION = 0x20;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::EDIT_CORRECTION = 0x40;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::PROXIMITY_CORRECTION = 0x80;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::COMPLETION = 0x100;
+const ErrorTypeUtils::ErrorType ErrorTypeUtils::NEW_WORD = 0x200;
const ErrorTypeUtils::ErrorType ErrorTypeUtils::ERRORS_TREATED_AS_AN_EXACT_MATCH =
NOT_AN_ERROR | MATCH_WITH_WRONG_CASE | MATCH_WITH_MISSING_ACCENT | MATCH_WITH_DIGRAPH;
diff --git a/native/jni/src/suggest/core/dictionary/error_type_utils.h b/native/jni/src/suggest/core/dictionary/error_type_utils.h
index e92c509fa..75111ba75 100644
--- a/native/jni/src/suggest/core/dictionary/error_type_utils.h
+++ b/native/jni/src/suggest/core/dictionary/error_type_utils.h
@@ -32,6 +32,7 @@ class ErrorTypeUtils {
static const ErrorType NOT_AN_ERROR;
static const ErrorType MATCH_WITH_WRONG_CASE;
static const ErrorType MATCH_WITH_MISSING_ACCENT;
+ static const ErrorType MATCH_WITH_MISSING_EXPLICIT_ACCENT;
static const ErrorType MATCH_WITH_WRONG_ACCENT;
static const ErrorType MATCH_WITH_DIGRAPH;
// Treat error as an intentional omission when the CorrectionType is omission and the node can
@@ -61,6 +62,10 @@ class ErrorTypeUtils {
& ~ERRORS_TREATED_AS_AN_EXACT_MATCH_WITH_INTENTIONAL_OMISSION) == 0;
}
+ static bool isMissingExplicitAccent(const ErrorType errorType) {
+ return (errorType & MATCH_WITH_MISSING_EXPLICIT_ACCENT) != 0;
+ }
+
static bool isEditCorrectionError(const ErrorType errorType) {
return (errorType & EDIT_CORRECTION) != 0;
}
diff --git a/native/jni/src/suggest/core/dictionary/property/word_property.cpp b/native/jni/src/suggest/core/dictionary/property/word_property.cpp
deleted file mode 100644
index 019f0880f..000000000
--- a/native/jni/src/suggest/core/dictionary/property/word_property.cpp
+++ /dev/null
@@ -1,109 +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.
- */
-
-#include "suggest/core/dictionary/property/word_property.h"
-
-#include "utils/jni_data_utils.h"
-#include "suggest/core/dictionary/property/historical_info.h"
-
-namespace latinime {
-
-void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints,
- jbooleanArray outFlags, jintArray outProbabilityInfo,
- jobject outNgramPrevWordsArray, jobject outNgramPrevWordIsBeginningOfSentenceArray,
- jobject outNgramTargets, jobject outNgramProbabilities, jobject outShortcutTargets,
- jobject outShortcutProbabilities) const {
- JniDataUtils::outputCodePoints(env, outCodePoints, 0 /* start */,
- MAX_WORD_LENGTH /* maxLength */, mCodePoints.data(), mCodePoints.size(),
- false /* needsNullTermination */);
- jboolean flags[] = {mUnigramProperty.isNotAWord(), mUnigramProperty.isPossiblyOffensive(),
- !mNgrams.empty(), mUnigramProperty.hasShortcuts(),
- mUnigramProperty.representsBeginningOfSentence()};
- env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags);
- const HistoricalInfo &historicalInfo = mUnigramProperty.getHistoricalInfo();
- int probabilityInfo[] = {mUnigramProperty.getProbability(), historicalInfo.getTimestamp(),
- historicalInfo.getLevel(), historicalInfo.getCount()};
- env->SetIntArrayRegion(outProbabilityInfo, 0 /* start */, NELEMS(probabilityInfo),
- probabilityInfo);
-
- jclass integerClass = env->FindClass("java/lang/Integer");
- jmethodID intToIntegerConstructorId = env->GetMethodID(integerClass, "<init>", "(I)V");
- jclass arrayListClass = env->FindClass("java/util/ArrayList");
- jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
-
- // Output ngrams.
- jclass intArrayClass = env->FindClass("[I");
- for (const auto &ngramProperty : mNgrams) {
- const NgramContext *const ngramContext = ngramProperty.getNgramContext();
- jobjectArray prevWordWordCodePointsArray = env->NewObjectArray(
- ngramContext->getPrevWordCount(), intArrayClass, nullptr);
- jbooleanArray prevWordIsBeginningOfSentenceArray =
- env->NewBooleanArray(ngramContext->getPrevWordCount());
- for (size_t i = 0; i < ngramContext->getPrevWordCount(); ++i) {
- const CodePointArrayView codePoints = ngramContext->getNthPrevWordCodePoints(i + 1);
- jintArray prevWordCodePoints = env->NewIntArray(codePoints.size());
- JniDataUtils::outputCodePoints(env, prevWordCodePoints, 0 /* start */,
- codePoints.size(), codePoints.data(), codePoints.size(),
- false /* needsNullTermination */);
- env->SetObjectArrayElement(prevWordWordCodePointsArray, i, prevWordCodePoints);
- env->DeleteLocalRef(prevWordCodePoints);
- JniDataUtils::putBooleanToArray(env, prevWordIsBeginningOfSentenceArray, i,
- ngramContext->isNthPrevWordBeginningOfSentence(i + 1));
- }
- env->CallBooleanMethod(outNgramPrevWordsArray, addMethodId, prevWordWordCodePointsArray);
- env->CallBooleanMethod(outNgramPrevWordIsBeginningOfSentenceArray, addMethodId,
- prevWordIsBeginningOfSentenceArray);
- env->DeleteLocalRef(prevWordWordCodePointsArray);
- env->DeleteLocalRef(prevWordIsBeginningOfSentenceArray);
-
- const std::vector<int> *const targetWordCodePoints = ngramProperty.getTargetCodePoints();
- jintArray targetWordCodePointArray = env->NewIntArray(targetWordCodePoints->size());
- JniDataUtils::outputCodePoints(env, targetWordCodePointArray, 0 /* start */,
- targetWordCodePoints->size(), targetWordCodePoints->data(),
- targetWordCodePoints->size(), false /* needsNullTermination */);
- env->CallBooleanMethod(outNgramTargets, addMethodId, targetWordCodePointArray);
- env->DeleteLocalRef(targetWordCodePointArray);
-
- const HistoricalInfo &ngramHistoricalInfo = ngramProperty.getHistoricalInfo();
- int bigramProbabilityInfo[] = {ngramProperty.getProbability(),
- ngramHistoricalInfo.getTimestamp(), ngramHistoricalInfo.getLevel(),
- ngramHistoricalInfo.getCount()};
- jintArray bigramProbabilityInfoArray = env->NewIntArray(NELEMS(bigramProbabilityInfo));
- env->SetIntArrayRegion(bigramProbabilityInfoArray, 0 /* start */,
- NELEMS(bigramProbabilityInfo), bigramProbabilityInfo);
- env->CallBooleanMethod(outNgramProbabilities, addMethodId, bigramProbabilityInfoArray);
- env->DeleteLocalRef(bigramProbabilityInfoArray);
- }
-
- // Output shortcuts.
- for (const auto &shortcut : mUnigramProperty.getShortcuts()) {
- const std::vector<int> *const targetCodePoints = shortcut.getTargetCodePoints();
- jintArray shortcutTargetCodePointArray = env->NewIntArray(targetCodePoints->size());
- JniDataUtils::outputCodePoints(env, shortcutTargetCodePointArray, 0 /* start */,
- targetCodePoints->size(), targetCodePoints->data(), targetCodePoints->size(),
- false /* needsNullTermination */);
- env->CallBooleanMethod(outShortcutTargets, addMethodId, shortcutTargetCodePointArray);
- env->DeleteLocalRef(shortcutTargetCodePointArray);
- jobject integerProbability = env->NewObject(integerClass, intToIntegerConstructorId,
- shortcut.getProbability());
- env->CallBooleanMethod(outShortcutProbabilities, addMethodId, integerProbability);
- env->DeleteLocalRef(integerProbability);
- }
- env->DeleteLocalRef(integerClass);
- env->DeleteLocalRef(arrayListClass);
-}
-
-} // namespace latinime
diff --git a/native/jni/src/suggest/core/dictionary/property/word_property.h b/native/jni/src/suggest/core/dictionary/property/word_property.h
index d4db3f09f..9efc7f304 100644
--- a/native/jni/src/suggest/core/dictionary/property/word_property.h
+++ b/native/jni/src/suggest/core/dictionary/property/word_property.h
@@ -20,7 +20,6 @@
#include <vector>
#include "defines.h"
-#include "jni.h"
#include "suggest/core/dictionary/property/ngram_property.h"
#include "suggest/core/dictionary/property/unigram_property.h"
#include "utils/int_array_view.h"
@@ -39,12 +38,6 @@ class WordProperty {
: mCodePoints(std::move(codePoints)), mUnigramProperty(unigramProperty),
mNgrams(ngrams) {}
- void outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags,
- jintArray outProbabilityInfo, jobject outNgramPrevWordsArray,
- jobject outNgramPrevWordIsBeginningOfSentenceArray, jobject outNgramTargets,
- jobject outNgramProbabilities, jobject outShortcutTargets,
- jobject outShortcutProbabilities) const;
-
const CodePointArrayView getCodePoints() const {
return CodePointArrayView(mCodePoints);
}
diff --git a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
index 74db95953..1aff72952 100644
--- a/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
+++ b/native/jni/src/suggest/core/result/suggestions_output_utils.cpp
@@ -144,11 +144,16 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
const bool isExactMatchWithIntentionalOmission =
ErrorTypeUtils::isExactMatchWithIntentionalOmission(
terminalDicNode->getContainedErrorTypes());
+ // TODO: Decide whether the word should be auto-corrected or not here.
+ const bool isAppropriateForAutoCorrection = !ErrorTypeUtils::isMissingExplicitAccent(
+ terminalDicNode->getContainedErrorTypes());
const int outputTypeFlags =
(wordAttributes.isPossiblyOffensive() ? Dictionary::KIND_FLAG_POSSIBLY_OFFENSIVE : 0)
| ((isExactMatch && boostExactMatches) ? Dictionary::KIND_FLAG_EXACT_MATCH : 0)
| (isExactMatchWithIntentionalOmission ?
- Dictionary::KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION : 0);
+ Dictionary::KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION : 0)
+ | (isAppropriateForAutoCorrection ?
+ Dictionary::KIND_FLAG_APPROPRIATE_FOR_AUTOCORRECTION : 0);
// Entries that are blacklisted or do not represent a word should not be output.
const bool isValidWord = !(wordAttributes.isBlacklisted() || wordAttributes.isNotAWord());
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
index 2bdf07752..7bda3dc95 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.cpp
@@ -16,7 +16,6 @@
#include "suggest/policyimpl/dictionary/structure/v4/content/terminal_position_lookup_table.h"
-#include "suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_reading_utils.h"
#include "suggest/policyimpl/dictionary/utils/buffer_with_extendable_buffer.h"
namespace latinime {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
index 39f417ebb..b7ef2b9bd 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
@@ -79,6 +79,9 @@ int TrieMap::getNextLevelBitmapEntryIndex(const int key, const int bitmapEntryIn
}
// Create a value entry and a bitmap entry.
const int valueEntryIndex = allocateTable(TERMINAL_LINKED_ENTRY_COUNT);
+ if (valueEntryIndex == INVALID_INDEX) {
+ return INVALID_INDEX;
+ }
if (!writeEntry(Entry(0, terminalEntry.getValue()), valueEntryIndex)) {
return INVALID_INDEX;
}
@@ -195,6 +198,9 @@ bool TrieMap::writeValue(const uint64_t value, const int terminalEntryIndex) {
}
// Create value entry and write value.
const int valueEntryIndex = allocateTable(TERMINAL_LINKED_ENTRY_COUNT);
+ if (valueEntryIndex == INVALID_INDEX) {
+ return false;
+ }
if (!writeEntry(Entry(value >> (FIELD1_SIZE * CHAR_BIT), value), valueEntryIndex)) {
return false;
}
diff --git a/native/jni/src/suggest/policyimpl/typing/typing_weighting.cpp b/native/jni/src/suggest/policyimpl/typing/typing_weighting.cpp
index db7a39efb..a0e54115d 100644
--- a/native/jni/src/suggest/policyimpl/typing/typing_weighting.cpp
+++ b/native/jni/src/suggest/policyimpl/typing/typing_weighting.cpp
@@ -17,6 +17,7 @@
#include "suggest/policyimpl/typing/typing_weighting.h"
#include "suggest/core/dicnode/dic_node.h"
+#include "suggest/core/layout/proximity_info.h"
#include "suggest/policyimpl/typing/scoring_params.h"
namespace latinime {
@@ -39,6 +40,8 @@ ErrorTypeUtils::ErrorType TypingWeighting::getErrorType(const CorrectionType cor
const int primaryCodePoint = pInfoState->getPrimaryCodePointAt(
dicNode->getInputIndex(0));
const int nodeCodePoint = dicNode->getNodeCodePoint();
+ const int keyIndex = traverseSession->getProximityInfo()->getKeyIndexOf(
+ primaryCodePoint);
// TODO: Check whether the input code point is on the keyboard.
if (primaryCodePoint == nodeCodePoint) {
// Node code point is same as original code point on the keyboard.
@@ -53,6 +56,9 @@ ErrorTypeUtils::ErrorType TypingWeighting::getErrorType(const CorrectionType cor
} else if (CharUtils::toBaseCodePoint(primaryCodePoint)
== CharUtils::toBaseCodePoint(nodeCodePoint)) {
// Base code points are the same but the code point is intentionally input.
+ if (keyIndex == NOT_AN_INDEX) {
+ return ErrorTypeUtils::MATCH_WITH_MISSING_EXPLICIT_ACCENT;
+ }
return ErrorTypeUtils::MATCH_WITH_WRONG_ACCENT;
} else if (CharUtils::toLowerCase(primaryCodePoint)
== CharUtils::toBaseLowerCase(nodeCodePoint)) {
@@ -61,6 +67,10 @@ ErrorTypeUtils::ErrorType TypingWeighting::getErrorType(const CorrectionType cor
return ErrorTypeUtils::MATCH_WITH_MISSING_ACCENT
| ErrorTypeUtils::MATCH_WITH_WRONG_CASE;
} else {
+ if (keyIndex == NOT_AN_INDEX) {
+ return ErrorTypeUtils::MATCH_WITH_MISSING_EXPLICIT_ACCENT
+ | ErrorTypeUtils::MATCH_WITH_WRONG_CASE;
+ }
// Base code points are the same and the cases are different.
return ErrorTypeUtils::MATCH_WITH_WRONG_ACCENT
| ErrorTypeUtils::MATCH_WITH_WRONG_CASE;
diff --git a/native/jni/src/utils/jni_data_utils.cpp b/native/jni/src/utils/jni_data_utils.cpp
index 5555293d5..41f0623d8 100644
--- a/native/jni/src/utils/jni_data_utils.cpp
+++ b/native/jni/src/utils/jni_data_utils.cpp
@@ -16,9 +16,100 @@
#include "utils/jni_data_utils.h"
+#include "utils/int_array_view.h"
+
namespace latinime {
const int JniDataUtils::CODE_POINT_REPLACEMENT_CHARACTER = 0xFFFD;
const int JniDataUtils::CODE_POINT_NULL = 0;
+/* static */ void JniDataUtils::outputWordProperty(JNIEnv *const env,
+ const WordProperty &wordProperty, jintArray outCodePoints, jbooleanArray outFlags,
+ jintArray outProbabilityInfo, jobject outNgramPrevWordsArray,
+ jobject outNgramPrevWordIsBeginningOfSentenceArray, jobject outNgramTargets,
+ jobject outNgramProbabilities, jobject outShortcutTargets,
+ jobject outShortcutProbabilities) {
+ const CodePointArrayView codePoints = wordProperty.getCodePoints();
+ JniDataUtils::outputCodePoints(env, outCodePoints, 0 /* start */,
+ MAX_WORD_LENGTH /* maxLength */, codePoints.data(), codePoints.size(),
+ false /* needsNullTermination */);
+ const UnigramProperty &unigramProperty = wordProperty.getUnigramProperty();
+ const std::vector<NgramProperty> &ngrams = wordProperty.getNgramProperties();
+ jboolean flags[] = {unigramProperty.isNotAWord(), unigramProperty.isPossiblyOffensive(),
+ !ngrams.empty(), unigramProperty.hasShortcuts(),
+ unigramProperty.representsBeginningOfSentence()};
+ env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags);
+ const HistoricalInfo &historicalInfo = unigramProperty.getHistoricalInfo();
+ int probabilityInfo[] = {unigramProperty.getProbability(), historicalInfo.getTimestamp(),
+ historicalInfo.getLevel(), historicalInfo.getCount()};
+ env->SetIntArrayRegion(outProbabilityInfo, 0 /* start */, NELEMS(probabilityInfo),
+ probabilityInfo);
+
+ jclass integerClass = env->FindClass("java/lang/Integer");
+ jmethodID intToIntegerConstructorId = env->GetMethodID(integerClass, "<init>", "(I)V");
+ jclass arrayListClass = env->FindClass("java/util/ArrayList");
+ jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
+
+ // Output ngrams.
+ jclass intArrayClass = env->FindClass("[I");
+ for (const auto &ngramProperty : ngrams) {
+ const NgramContext *const ngramContext = ngramProperty.getNgramContext();
+ jobjectArray prevWordWordCodePointsArray = env->NewObjectArray(
+ ngramContext->getPrevWordCount(), intArrayClass, nullptr);
+ jbooleanArray prevWordIsBeginningOfSentenceArray =
+ env->NewBooleanArray(ngramContext->getPrevWordCount());
+ for (size_t i = 0; i < ngramContext->getPrevWordCount(); ++i) {
+ const CodePointArrayView codePoints = ngramContext->getNthPrevWordCodePoints(i + 1);
+ jintArray prevWordCodePoints = env->NewIntArray(codePoints.size());
+ JniDataUtils::outputCodePoints(env, prevWordCodePoints, 0 /* start */,
+ codePoints.size(), codePoints.data(), codePoints.size(),
+ false /* needsNullTermination */);
+ env->SetObjectArrayElement(prevWordWordCodePointsArray, i, prevWordCodePoints);
+ env->DeleteLocalRef(prevWordCodePoints);
+ JniDataUtils::putBooleanToArray(env, prevWordIsBeginningOfSentenceArray, i,
+ ngramContext->isNthPrevWordBeginningOfSentence(i + 1));
+ }
+ env->CallBooleanMethod(outNgramPrevWordsArray, addMethodId, prevWordWordCodePointsArray);
+ env->CallBooleanMethod(outNgramPrevWordIsBeginningOfSentenceArray, addMethodId,
+ prevWordIsBeginningOfSentenceArray);
+ env->DeleteLocalRef(prevWordWordCodePointsArray);
+ env->DeleteLocalRef(prevWordIsBeginningOfSentenceArray);
+
+ const std::vector<int> *const targetWordCodePoints = ngramProperty.getTargetCodePoints();
+ jintArray targetWordCodePointArray = env->NewIntArray(targetWordCodePoints->size());
+ JniDataUtils::outputCodePoints(env, targetWordCodePointArray, 0 /* start */,
+ targetWordCodePoints->size(), targetWordCodePoints->data(),
+ targetWordCodePoints->size(), false /* needsNullTermination */);
+ env->CallBooleanMethod(outNgramTargets, addMethodId, targetWordCodePointArray);
+ env->DeleteLocalRef(targetWordCodePointArray);
+
+ const HistoricalInfo &ngramHistoricalInfo = ngramProperty.getHistoricalInfo();
+ int bigramProbabilityInfo[] = {ngramProperty.getProbability(),
+ ngramHistoricalInfo.getTimestamp(), ngramHistoricalInfo.getLevel(),
+ ngramHistoricalInfo.getCount()};
+ jintArray bigramProbabilityInfoArray = env->NewIntArray(NELEMS(bigramProbabilityInfo));
+ env->SetIntArrayRegion(bigramProbabilityInfoArray, 0 /* start */,
+ NELEMS(bigramProbabilityInfo), bigramProbabilityInfo);
+ env->CallBooleanMethod(outNgramProbabilities, addMethodId, bigramProbabilityInfoArray);
+ env->DeleteLocalRef(bigramProbabilityInfoArray);
+ }
+
+ // Output shortcuts.
+ for (const auto &shortcut : unigramProperty.getShortcuts()) {
+ const std::vector<int> *const targetCodePoints = shortcut.getTargetCodePoints();
+ jintArray shortcutTargetCodePointArray = env->NewIntArray(targetCodePoints->size());
+ JniDataUtils::outputCodePoints(env, shortcutTargetCodePointArray, 0 /* start */,
+ targetCodePoints->size(), targetCodePoints->data(), targetCodePoints->size(),
+ false /* needsNullTermination */);
+ env->CallBooleanMethod(outShortcutTargets, addMethodId, shortcutTargetCodePointArray);
+ env->DeleteLocalRef(shortcutTargetCodePointArray);
+ jobject integerProbability = env->NewObject(integerClass, intToIntegerConstructorId,
+ shortcut.getProbability());
+ env->CallBooleanMethod(outShortcutProbabilities, addMethodId, integerProbability);
+ env->DeleteLocalRef(integerProbability);
+ }
+ env->DeleteLocalRef(integerClass);
+ env->DeleteLocalRef(arrayListClass);
+}
+
} // namespace latinime
diff --git a/native/jni/src/utils/jni_data_utils.h b/native/jni/src/utils/jni_data_utils.h
index a259e1cd0..01295859c 100644
--- a/native/jni/src/utils/jni_data_utils.h
+++ b/native/jni/src/utils/jni_data_utils.h
@@ -21,6 +21,7 @@
#include "defines.h"
#include "jni.h"
+#include "suggest/core/dictionary/property/word_property.h"
#include "suggest/core/session/ngram_context.h"
#include "suggest/core/policy/dictionary_header_structure_policy.h"
#include "suggest/policyimpl/dictionary/header/header_read_write_utils.h"
@@ -140,6 +141,12 @@ class JniDataUtils {
env->SetFloatArrayRegion(array, index, 1 /* len */, &value);
}
+ static void outputWordProperty(JNIEnv *const env, const WordProperty &wordProperty,
+ jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbabilityInfo,
+ jobject outNgramPrevWordsArray, jobject outNgramPrevWordIsBeginningOfSentenceArray,
+ jobject outNgramTargets, jobject outNgramProbabilities, jobject outShortcutTargets,
+ jobject outShortcutProbabilities);
+
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(JniDataUtils);
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
index a84df28c9..d83c4a55b 100644
--- a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
+++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java
@@ -25,15 +25,11 @@ import android.util.Log;
import com.android.inputmethod.latin.ExpandableBinaryDictionary;
import com.android.inputmethod.latin.NgramContext;
import com.android.inputmethod.latin.NgramContext.WordInfo;
-import com.android.inputmethod.latin.common.FileUtils;
import com.android.inputmethod.latin.settings.LocalSettingsConstants;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
import com.android.inputmethod.latin.utils.DistracterFilter;
import java.io.File;
-import java.io.FilenameFilter;
-import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Random;
@@ -48,34 +44,13 @@ import javax.annotation.Nullable;
public class UserHistoryDictionaryTests extends AndroidTestCase {
private static final String TAG = UserHistoryDictionaryTests.class.getSimpleName();
private static final int WAIT_FOR_WRITING_FILE_IN_MILLISECONDS = 3000;
- private static final String TEST_LOCALE_PREFIX = "test_";
private static final String TEST_ACCOUNT = "account@example.com";
- private static final String[] CHARACTERS = {
- "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
- "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
- };
-
private int mCurrentTime = 0;
private SharedPreferences mPrefs;
private String mLastKnownAccount = null;
- private void removeAllTestDictFiles() {
- final Locale dummyLocale = new Locale(TEST_LOCALE_PREFIX);
- final String dictName = UserHistoryDictionary.getUserHistoryDictName(
- UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext());
- final File dictFile = ExpandableBinaryDictionary.getDictFile(
- mContext, dictName, null /* dictFile */);
- final FilenameFilter filenameFilter = new FilenameFilter() {
- @Override
- public boolean accept(final File dir, final String filename) {
- return filename.startsWith(UserHistoryDictionary.NAME + "." + TEST_LOCALE_PREFIX);
- }
- };
- FileUtils.deleteFilteredFiles(dictFile.getParentFile(), filenameFilter);
- }
-
private static void printAllFiles(final File dir) {
Log.d(TAG, dir.getAbsolutePath());
for (final File file : dir.listFiles()) {
@@ -83,7 +58,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
}
}
- private static void checkExistenceAndRemoveDictFile(final UserHistoryDictionary dict,
+ private static void assertDictionaryExists(final UserHistoryDictionary dict,
final File dictFile) {
Log.d(TAG, "waiting for writing ...");
dict.waitAllTasksForTests();
@@ -97,12 +72,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
Log.e(TAG, "Interrupted during waiting for writing the dict file.");
}
}
- assertTrue("check exisiting of " + dictFile, dictFile.exists());
- FileUtils.deleteRecursively(dictFile);
- }
-
- private static Locale getDummyLocale(final String name) {
- return new Locale(TEST_LOCALE_PREFIX + name + System.currentTimeMillis());
+ assertTrue("Following dictionary file doesn't exist: " + dictFile, dictFile.exists());
}
@Override
@@ -115,12 +85,14 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
updateAccountName(TEST_ACCOUNT);
resetCurrentTimeForTestMode();
- removeAllTestDictFiles();
+ UserHistoryDictionaryTestsHelper.removeAllTestDictFiles(
+ UserHistoryDictionaryTestsHelper.TEST_LOCALE_PREFIX, mContext);
}
@Override
protected void tearDown() throws Exception {
- removeAllTestDictFiles();
+ UserHistoryDictionaryTestsHelper.removeAllTestDictFiles(
+ UserHistoryDictionaryTestsHelper.TEST_LOCALE_PREFIX, mContext);
stopTestModeInNativeCode();
// Restore the account that was present before running the test.
@@ -165,58 +137,6 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
}
/**
- * Generates a random word.
- */
- private static String generateWord(final int value) {
- final int lengthOfChars = CHARACTERS.length;
- final StringBuilder builder = new StringBuilder();
- long lvalue = Math.abs((long)value);
- while (lvalue > 0) {
- builder.append(CHARACTERS[(int)(lvalue % lengthOfChars)]);
- lvalue /= lengthOfChars;
- }
- return builder.toString();
- }
-
- private static List<String> generateWords(final int number, final Random random) {
- final HashSet<String> wordSet = new HashSet<>();
- while (wordSet.size() < number) {
- wordSet.add(generateWord(random.nextInt()));
- }
- return new ArrayList<>(wordSet);
- }
-
- private static void addToDict(final UserHistoryDictionary dict, final List<String> words,
- final int timestamp) {
- NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO;
- for (final String word : words) {
- UserHistoryDictionary.addToDictionary(dict, ngramContext, word, true, timestamp,
- DistracterFilter.EMPTY_DISTRACTER_FILTER);
- ngramContext = ngramContext.getNextNgramContext(new WordInfo(word));
- }
- }
-
- /**
- * @param checkContents if true, checks whether written words are actually in the dictionary
- * or not.
- */
- private void addAndWriteRandomWords(final UserHistoryDictionary dict,
- final int numberOfWords, final Random random, final boolean checkContents) {
- final List<String> words = generateWords(numberOfWords, random);
- // Add random words to the user history dictionary.
- addToDict(dict, words, mCurrentTime);
- if (checkContents) {
- dict.waitAllTasksForTests();
- for (int i = 0; i < numberOfWords; ++i) {
- final String word = words.get(i);
- assertTrue(dict.isInDictionary(word));
- }
- }
- // write to file.
- dict.close();
- }
-
- /**
* Clear all entries in the user history dictionary.
* @param dict the user history dictionary.
*/
@@ -230,19 +150,19 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
public void testRandomWords() {
Log.d(TAG, "This test can be used for profiling.");
Log.d(TAG, "Usage: please set UserHistoryDictionary.PROFILE_SAVE_RESTORE to true.");
- final Locale dummyLocale = getDummyLocale("random_words");
+ final Locale dummyLocale = UserHistoryDictionaryTestsHelper.getDummyLocale("random_words");
final String dictName = UserHistoryDictionary.getUserHistoryDictName(
UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext());
final File dictFile = ExpandableBinaryDictionary.getDictFile(
mContext, dictName, null /* dictFile */);
final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary(
getContext(), dummyLocale, TEST_ACCOUNT);
-
+ clearHistory(dict);
final int numberOfWords = 1000;
final Random random = new Random(123456);
- clearHistory(dict);
- addAndWriteRandomWords(dict, numberOfWords, random, true /* checksContents */);
- checkExistenceAndRemoveDictFile(dict, dictFile);
+ assertTrue(UserHistoryDictionaryTestsHelper.addAndWriteRandomWords(
+ dict, numberOfWords, random, true /* checksContents */, mCurrentTime));
+ assertDictionaryExists(dict, dictFile);
}
public void testStressTestForSwitchingLanguagesAndAddingWords() {
@@ -258,7 +178,8 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
// Create filename suffixes for this test.
for (int i = 0; i < numberOfLanguages; i++) {
- final Locale dummyLocale = getDummyLocale("switching_languages" + i);
+ final Locale dummyLocale =
+ UserHistoryDictionaryTestsHelper.getDummyLocale("switching_languages" + i);
final String dictName = UserHistoryDictionary.getUserHistoryDictName(
UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext());
dictFiles[i] = ExpandableBinaryDictionary.getDictFile(
@@ -273,8 +194,11 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
for (int i = 0; i < numberOfLanguageSwitching; i++) {
final int index = i % numberOfLanguages;
// Switch to dicts[index].
- addAndWriteRandomWords(dicts[index], numberOfWordsInsertedForEachLanguageSwitch,
- random, false /* checksContents */);
+ assertTrue(UserHistoryDictionaryTestsHelper.addAndWriteRandomWords(dicts[index],
+ numberOfWordsInsertedForEachLanguageSwitch,
+ random,
+ false /* checksContents */,
+ mCurrentTime));
}
final long end = System.currentTimeMillis();
@@ -282,13 +206,14 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
+ (end - start) + " ms");
} finally {
for (int i = 0; i < numberOfLanguages; i++) {
- checkExistenceAndRemoveDictFile(dicts[i], dictFiles[i]);
+ assertDictionaryExists(dicts[i], dictFiles[i]);
}
}
}
public void testAddManyWords() {
- final Locale dummyLocale = getDummyLocale("many_random_words");
+ final Locale dummyLocale =
+ UserHistoryDictionaryTestsHelper.getDummyLocale("many_random_words");
final String dictName = UserHistoryDictionary.getUserHistoryDictName(
UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext());
final File dictFile = ExpandableBinaryDictionary.getDictFile(
@@ -298,23 +223,23 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary(
getContext(), dummyLocale, TEST_ACCOUNT);
clearHistory(dict);
- try {
- addAndWriteRandomWords(dict, numberOfWords, random, true /* checksContents */);
- } finally {
- checkExistenceAndRemoveDictFile(dict, dictFile);
- }
+ assertTrue(UserHistoryDictionaryTestsHelper.addAndWriteRandomWords(dict,
+ numberOfWords, random, true /* checksContents */, mCurrentTime));
+ assertDictionaryExists(dict, dictFile);
}
public void testDecaying() {
- final Locale dummyLocale = getDummyLocale("decaying");
+ final Locale dummyLocale = UserHistoryDictionaryTestsHelper.getDummyLocale("decaying");
final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary(
getContext(), dummyLocale, TEST_ACCOUNT);
- final int numberOfWords = 5000;
- final Random random = new Random(123456);
resetCurrentTimeForTestMode();
clearHistory(dict);
- final List<String> words = generateWords(numberOfWords, random);
dict.waitAllTasksForTests();
+
+ final int numberOfWords = 5000;
+ final Random random = new Random(123456);
+ final List<String> words = UserHistoryDictionaryTestsHelper.generateWords(numberOfWords,
+ random);
NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO;
for (final String word : words) {
UserHistoryDictionary.addToDictionary(dict, ngramContext, word, true, mCurrentTime,
@@ -329,6 +254,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase {
for (final String word : words) {
assertTrue(dict.isInDictionary(word));
}
+ // Long term decay results in words removed from the dictionary.
forcePassingLongTime();
dict.runGCIfRequired();
dict.waitAllTasksForTests();
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTestsHelper.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTestsHelper.java
new file mode 100644
index 000000000..d394c0faa
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTestsHelper.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2014 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.NgramContext;
+import com.android.inputmethod.latin.NgramContext.WordInfo;
+import com.android.inputmethod.latin.common.FileUtils;
+import com.android.inputmethod.latin.utils.DistracterFilter;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Random;
+
+/**
+ * Utility class for helping while running tests involving {@link UserHistoryDictionary}.
+ */
+public class UserHistoryDictionaryTestsHelper {
+
+ /**
+ * Locale prefix for generating dummy locales for tests.
+ */
+ public static final String TEST_LOCALE_PREFIX = "test-";
+
+ /**
+ * Characters for generating random words.
+ */
+ private static final String[] CHARACTERS = {
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
+ "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"
+ };
+
+ /**
+ * Remove all the test dictionary files created for the given locale.
+ */
+ public static void removeAllTestDictFiles(final String filter, final Context context) {
+ final FilenameFilter filenameFilter = new FilenameFilter() {
+ @Override
+ public boolean accept(final File dir, final String filename) {
+ return filename.startsWith(UserHistoryDictionary.NAME + "." + filter);
+ }
+ };
+ FileUtils.deleteFilteredFiles(context.getFilesDir(), filenameFilter);
+ }
+
+ /**
+ * Generates and writes random words to dictionary. Caller can be assured
+ * that the write tasks would be finished; and its success would be reflected
+ * in the returned boolean.
+ *
+ * @param dict {@link UserHistoryDictionary} to which words should be added.
+ * @param numberOfWords number of words to be added.
+ * @param random helps generate random words.
+ * @param checkContents if true, checks whether written words are actually in the dictionary.
+ * @param currentTime timestamp that would be used for adding the words.
+ * @returns true if all words have been written to dictionary successfully.
+ */
+ public static boolean addAndWriteRandomWords(final UserHistoryDictionary dict,
+ final int numberOfWords, final Random random, final boolean checkContents,
+ final int currentTime) {
+ final List<String> words = generateWords(numberOfWords, random);
+ // Add random words to the user history dictionary.
+ addWordsToDictionary(dict, words, currentTime);
+ boolean success = true;
+ if (checkContents) {
+ dict.waitAllTasksForTests();
+ for (int i = 0; i < numberOfWords; ++i) {
+ final String word = words.get(i);
+ if (!dict.isInDictionary(word)) {
+ success = false;
+ break;
+ }
+ }
+ }
+ // write to file.
+ dict.close();
+ dict.waitAllTasksForTests();
+ return success;
+ }
+
+ private static void addWordsToDictionary(final UserHistoryDictionary dict,
+ final List<String> words, final int timestamp) {
+ NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO;
+ for (final String word : words) {
+ UserHistoryDictionary.addToDictionary(dict, ngramContext, word, true, timestamp,
+ DistracterFilter.EMPTY_DISTRACTER_FILTER);
+ ngramContext = ngramContext.getNextNgramContext(new WordInfo(word));
+ }
+ }
+
+ /**
+ * Creates unique test locale for using within tests.
+ */
+ public static Locale getDummyLocale(final String name) {
+ return new Locale(TEST_LOCALE_PREFIX + name + System.currentTimeMillis());
+ }
+
+ /**
+ * Generates random words.
+ *
+ * @param numberOfWords number of words to generate.
+ * @param random salt used for generating random words.
+ */
+ public static List<String> generateWords(final int numberOfWords, final Random random) {
+ final HashSet<String> wordSet = new HashSet<>();
+ while (wordSet.size() < numberOfWords) {
+ wordSet.add(generateWord(random.nextInt()));
+ }
+ return new ArrayList<>(wordSet);
+ }
+
+ /**
+ * Generates a random word.
+ */
+ private static String generateWord(final int value) {
+ final int lengthOfChars = CHARACTERS.length;
+ final StringBuilder builder = new StringBuilder();
+ long lvalue = Math.abs((long)value);
+ while (lvalue > 0) {
+ builder.append(CHARACTERS[(int)(lvalue % lengthOfChars)]);
+ lvalue /= lengthOfChars;
+ }
+ return builder.toString();
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelperTests.java b/tests/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtilsTests.java
index 6bb255b01..7f7f493b1 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/LanguageOnSpacebarHelperTests.java
+++ b/tests/src/com/android/inputmethod/latin/utils/LanguageOnSpacebarUtilsTests.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.android.inputmethod.keyboard.internal;
+package com.android.inputmethod.latin.utils;
-import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_FULL_LOCALE;
-import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_LANGUAGE_ONLY;
-import static com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper.FORMAT_TYPE_NONE;
+import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_FULL_LOCALE;
+import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_LANGUAGE_ONLY;
+import static com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils.FORMAT_TYPE_NONE;
import android.content.Context;
import android.test.AndroidTestCase;
@@ -28,6 +28,7 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.latin.RichInputMethodManager;
import com.android.inputmethod.latin.RichInputMethodSubtype;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
+import com.android.inputmethod.latin.utils.LanguageOnSpacebarUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.ArrayList;
@@ -36,10 +37,7 @@ import java.util.Locale;
import javax.annotation.Nonnull;
@SmallTest
-public class LanguageOnSpacebarHelperTests extends AndroidTestCase {
- private final LanguageOnSpacebarHelper mLanguageOnSpacebarHelper =
- new LanguageOnSpacebarHelper();
-
+public class LanguageOnSpacebarUtilsTests extends AndroidTestCase {
private RichInputMethodManager mRichImm;
RichInputMethodSubtype EN_US_QWERTY;
@@ -84,21 +82,21 @@ public class LanguageOnSpacebarHelperTests extends AndroidTestCase {
return new RichInputMethodSubtype(subtype);
}
- private void enableSubtypes(final RichInputMethodSubtype ... subtypes) {
+ private static void enableSubtypes(final RichInputMethodSubtype ... subtypes) {
final ArrayList<InputMethodSubtype> enabledSubtypes = new ArrayList<>();
for (final RichInputMethodSubtype subtype : subtypes) {
enabledSubtypes.add(subtype.getRawSubtype());
}
- mLanguageOnSpacebarHelper.onUpdateEnabledSubtypes(enabledSubtypes);
+ LanguageOnSpacebarUtils.setEnabledSubtypes(enabledSubtypes);
}
- private void assertFormatType(final RichInputMethodSubtype subtype,
+ private static void assertFormatType(final RichInputMethodSubtype subtype,
final boolean implicitlyEnabledSubtype, final Locale systemLocale,
final int expectedFormat) {
- mLanguageOnSpacebarHelper.onSubtypeChanged(subtype, implicitlyEnabledSubtype, systemLocale);
+ LanguageOnSpacebarUtils.onSubtypeChanged(subtype, implicitlyEnabledSubtype, systemLocale);
assertEquals(subtype.getLocales()[0] + " implicitly=" + implicitlyEnabledSubtype
+ " in " + systemLocale, expectedFormat,
- mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(subtype));
+ LanguageOnSpacebarUtils.getLanguageOnSpacebarFormatType(subtype));
}
public void testOneSubtypeImplicitlyEnabled() {