diff --git a/java/proguard.flags b/java/proguard.flags
index ca205b927..163352287 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -20,6 +20,10 @@
boolean equalsIgnoreCase(...);
}
+-keep class com.android.inputmethod.latin.InputPointers {
+ *;
+}
+
-keep class com.android.inputmethod.latin.spellcheck.SpellCheckerSettingsFragment {
*;
}
@@ -38,6 +42,7 @@
-keep class com.android.inputmethod.latin.ResearchLogger {
void flush();
+ void publishCurrentLogUnit(...);
}
-keep class com.android.inputmethod.keyboard.KeyboardLayoutSet$Builder {
diff --git a/java/res/values-af/strings-appname.xml b/java/res/values-af/strings-appname.xml
new file mode 100644
index 000000000..1adf723d7
--- /dev/null
+++ b/java/res/values-af/strings-appname.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ "Android-speltoetser"
+ "Android-sleutelbordinstellings"
+ "Speltoets tans instellings"
+
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 2a8a2e8f4..fb7cf349f 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -20,14 +20,10 @@
- "Android-sleutelbord"
"Android-sleutelbord (AOSP)"
- "Android-sleutelbordinstellings"
"Invoeropsies"
"Navorsing-loglêerbevele"
- "Android-speltoetser"
"Android-speltoetser (AOSP)"
- "Speltoetser se instellings"
"Soek kontakname op"
"Speltoetser gebruik inskrywings uit jou kontaklys"
"Vibreer met sleuteldruk"
@@ -111,9 +107,19 @@
"let op die tydstempel in die loglêer"
"Aangetekende tydstempel"
"Moenie hierdie sessie aanteken nie"
+
+
+
+
"Sessie se loglêer uitgevee"
"Sessie se loglêer uitgevee"
"Sessie se loglêer NIE uitgevee nie"
+
+
+
+
+
+
"Invoertale"
"Raak weer om te stoor"
"Woordeboek beskikbaar"
diff --git a/java/res/values-am/strings-appname.xml b/java/res/values-am/strings-appname.xml
new file mode 100644
index 000000000..fd93114f3
--- /dev/null
+++ b/java/res/values-am/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "የAndroid ቁልፍ ሰሌዳ"
+ "Android የፊደል አራሚ"
+ "Android የቁልፍ ሰሌዳ ቅንብሮች"
+ "የፊደል አራሚ ቅንብሮች"
+
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index a6373ccb6..d36b9a68b 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -20,14 +20,10 @@
- "የAndroid ቁልፍሰሌዳ"
"የAndroid ቁልፍ ሰሌዳ (AOSP)"
- "የAndroid ቁልፍሰሌዳ ቅንብሮች"
"ግቤት አማራጮች"
"የጥናት የምዝግብ ማስታወሻ ትዕዛዞች"
- "Android የፊደል ማረሚያ"
"Android የፊደል ማረሚያ (AOSP)"
- "የፊደል አራሚ ቅንብሮች"
"የእውቅያ ስሞችን ተመልከት"
"ፊደል አራሚ ከእውቅያ ዝርዝርህ የገቡትን ይጠቀማል"
"በቁልፍመጫንጊዜ አንዝር"
@@ -111,9 +107,14 @@
"የምዝግብ ማስታወሻ ጊዜ ማህተም ማስታወሻ"
"የጊዜ ማህተም ተመዝግቧል"
"ይህን ክፍለ ጊዜ እንዳትመዘግበው"
+ "ክፍለ ጊዜ ምዝገባን አንቃ"
+ "ሙሉውን የክፍለጊዜ ታሪክ መዝግብ"
"የክፍለጊዜ ምዝግብ ማስታወሻ በመሰረዝ ላይ"
"የክፍለ ጊዜ ምዝግብ ማስታወሻ ተሰርዟል"
"የክፍለጊዜ ምዝግብ ማስታወሻ አልተሰረዘም"
+ "የክፍለጊዜ ታሪክ ተመዝግቧል"
+ "ስህተት፦ክፍለጊዜ ታሪክ አልተመዘገበም"
+ "ክፍለጊዜ ምዝገባ ነቅቷል"
"ቋንቋዎች አግቤት"
"ለማስቀመጥ እንደገና ንካ"
"መዝገበ ቃላት አለ"
diff --git a/java/res/values-ar/strings-appname.xml b/java/res/values-ar/strings-appname.xml
new file mode 100644
index 000000000..3d81e5d4b
--- /dev/null
+++ b/java/res/values-ar/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "لوحة مفاتيح Android"
+ "التدقيق الإملائي في Android"
+ "إعدادات لوحة مفاتيح Android"
+ "إعدادات التدقيق الإملائي"
+
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 9e6f1ea51..9490704a6 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -20,14 +20,10 @@
- "لوحة مفاتيح Android"
"لوحة مفاتيح Android (AOSP)"
- "إعدادات لوحة مفاتيح Android"
"خيارات الإرسال"
"أوامر سجلات البحث"
- "التدقيق الإملائي في Android"
"التدقيق الإملائي في Android (AOSP)"
- "إعدادات التدقيق الإملائي"
"بحث في أسماء جهات الاتصال"
"يستخدم المدقق الإملائي إدخالات من قائمة جهات الاتصال"
"اهتزاز عند ضغط مفتاح"
@@ -111,9 +107,14 @@
"ملاحظة طابع زمني في سجل"
"تم تسجيل الطابع الزمني"
"عدم تسجيل هذه الجلسة"
+ "تمكين تسجيل الجلسة"
+ "تسجيل سجل الجلسة بالكامل"
"جارٍ حذف سجل الجلسة"
"تم حذف سجل الجلسة"
"لم يتم حذف سجل الجلسة"
+ "تم تسجيل سجل الجلسة"
+ "الخطأ: لم يتم تسجيل سجل الجلسة"
+ "تم تمكين تسجيل الجلسة"
"لغات الإدخال"
"المس مرة أخرى للحفظ"
"القاموس متاح"
diff --git a/java/res/values-be/strings-appname.xml b/java/res/values-be/strings-appname.xml
new file mode 100644
index 000000000..e0aadfa3c
--- /dev/null
+++ b/java/res/values-be/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Клавіятура Android"
+ "Iнструмент праверкi правапiсу для Android"
+ "Налады клавіятуры Android"
+ "Налады праверкі арфаграфіі"
+
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index fb371f4c3..0d563f330 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -20,14 +20,10 @@
- "Клавіятура Android"
"Клавіятура Android (AOSP)"
- "Налады клавіятуры Android"
"Параметры ўводу"
"Каманды гiсторыя даследаванняў"
- "Iнструмент праверкi правапiсу для Android"
"Iнструмент праверкi правапiсу для Android (AOSP)"
- "Налады праверкі арфаграфіі"
"Шукаць імёны кантактаў"
"Модуль праверкі правапісу выкарыстоўвае запісы са спісу кантактаў"
"Вібрацыя пры націску клавіш"
@@ -111,9 +107,14 @@
"Пазначыць час у гiсторыi"
"Запiсаныя пазнакі"
"Не рэгістраваць гэты сеанс"
+ "Уключыць гiсторыю сеанса"
+ "Запiс усёй гiсторыi сеанса"
"Выдаленне гiсторыi сеанса"
"Гiсторыя сеанса выдалена"
"Гiсторыя сеанса НЕ выдалена"
+ "Гiсторыя сеанса запiсана"
+ "Памылка: гiсторыя сеанса НЕ запiсана"
+ "Уключаны запiс сеанса"
"Мовы ўводу"
"Дакраніцеся зноў, каб захаваць"
"Слоўнік даступны"
diff --git a/java/res/values-bg/strings-appname.xml b/java/res/values-bg/strings-appname.xml
new file mode 100644
index 000000000..49e301d32
--- /dev/null
+++ b/java/res/values-bg/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Клавиатура на Android"
+ "Програма за правописна проверка за Android"
+ "Настройки на клавиатурата на Android"
+ "Настройки за проверка на правописа"
+
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 94945c03b..38ebfe84a 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -20,14 +20,10 @@
- "Клавиатура на Android"
"Клавиатура на Android (AOSP)"
- "Настройки на клавиатурата на Android"
"Опции за въвеждане"
"Команди за рег. файл за проучвания"
- "Програма за правописна проверка за Android"
"Програма за правописна проверка за Android (AOSP)"
- "Настройки за проверка на правописа"
"Търсене на имена"
"За проверка на правописа се ползват записи от списъка с контакти"
"Да вибрира при натискане на клавиш"
@@ -111,9 +107,19 @@
"Отбелязване на часа в рег. файл"
"Часът е записан"
"Без регистр. на сесията"
+
+
+
+
"Рег. файл на сесията се изтрива"
"Рег. файл на сесията е изтрит"
"Рег. файл на сесията НЕ Е изтрит"
+
+
+
+
+
+
"Езици за въвеждане"
"Докоснете отново, за да запазите"
"Има достъп до речник"
diff --git a/java/res/values-ca/strings-appname.xml b/java/res/values-ca/strings-appname.xml
new file mode 100644
index 000000000..add5c3f2f
--- /dev/null
+++ b/java/res/values-ca/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Teclat Android"
+ "Corrector ortogràfic d\'Android"
+ "Configuració del teclat d\'Android"
+ "Configuració de la correcció ortogràfica"
+
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index b6fb56093..252441062 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -20,14 +20,10 @@
- "Teclat Android"
"Teclat d\'Android (AOSP)"
- "Configuració del teclat d\'Android"
"Opcions d\'entrada"
"Recerca d\'ordres de reg."
- "Corrector ortogràfic d\'Android"
"Corrector ortogràfic d\'Android (AOSP)"
- "Configuració de la correcció ortogràfica"
"Cerca noms de contactes"
"El corrector ortogràfic utilitza entrades de la llista de cont."
"Vibra en prémer tecles"
@@ -111,9 +107,14 @@
"Indica m. horària al reg."
"Marca horària enregistrada"
"No enregistris la sessió"
+ "Activa el registre de sessió"
+ "Registra tot l\'historial de sessió"
"Suprimint registre de ses."
"Registre de ses. suprimit"
"Registre de ses. NO sup."
+ "Historial de sessió registrat"
+ "Error: historial de sessió NO registrat"
+ "Registre de sessió activat"
"Idiomes d\'entrada"
"Torna a tocar per desar"
"Diccionari disponible"
diff --git a/java/res/values-cs/strings-appname.xml b/java/res/values-cs/strings-appname.xml
new file mode 100644
index 000000000..0eeac88b4
--- /dev/null
+++ b/java/res/values-cs/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Klávesnice Android"
+ "Kontrola pravopisu Android"
+ "Nastavení klávesnice Android"
+ "Nastavení kontroly pravopisu"
+
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 5818d5c6f..4697d43ec 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -20,14 +20,10 @@
- "Klávesnice Android"
"Klávesnice Android (AOSP)"
- "Nastavení klávesnice Android"
"Možnosti zadávání textu a dat"
"Příkazy vývoj. protokolu"
- "Kontrola pravopisu Android"
"Kontrola pravopisu Android (AOSP)"
- "Nastavení kontroly pravopisu"
"Vyhledat kontakty"
"Kontrola pravopisu používá záznamy z vašeho seznamu kontaktů."
"Při stisku klávesy vibrovat"
@@ -111,9 +107,14 @@
"Uložit čas do protokolu"
"Časové razítko vloženo"
"Neprotokolovat relaci"
+ "Povolit protokolování relace"
+ "Protokolovat celou historii relace"
"Mazání protokolu relace"
"Protokol relace smazán"
"Protokol relace nesmazán"
+ "Historie relace protokolována"
+ "Historie relace NENÍ protokolována"
+ "Protokolování relace povoleno"
"Vstupní jazyky"
"Opětovným dotykem provedete uložení"
"Slovník k dispozici"
diff --git a/java/res/values-da/strings-appname.xml b/java/res/values-da/strings-appname.xml
new file mode 100644
index 000000000..faef5824b
--- /dev/null
+++ b/java/res/values-da/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-tastatur"
+ "Android-stavekontrol"
+ "Indstillinger for Android-tastatur"
+ "Indstillinger for stavekontrol"
+
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index dc1df0772..5a128ee58 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -20,14 +20,10 @@
- "Android-tastatur"
"Android-tastatur (AOSP)"
- "Android-tastatur-indstillinger"
"Indstillinger for input"
"Forskningslogkommandoer"
- "Android-stavekontrol"
"Android-stavekontrol (AOSP)"
- "Indstillinger for stavekontrol"
"Slå kontaktnavne op"
"Stavekontrollen bruger poster fra listen over kontaktpersoner"
"Vibration ved tastetryk"
@@ -111,9 +107,14 @@
"Notér tidsstempel i log"
"Noteret tidsstempel"
"Logfør ikke denne session"
+ "Aktivér logføring af sessioner"
+ "Logfør hele sessionshistorikken"
"Sletter sessionslogfil"
"Sessionslogfil slettet"
"Sessionslog IKKE slettet"
+ "Sessionshistorikken er logført"
+ "Fejl: Sessionshistorik IKKE logført"
+ "Logføring af sessioner er aktiveret"
"Inputsprog"
"Tryk igen for at gemme"
"Ordbog er tilgængelig"
diff --git a/java/res/values-de/strings-appname.xml b/java/res/values-de/strings-appname.xml
new file mode 100644
index 000000000..fc5fb8902
--- /dev/null
+++ b/java/res/values-de/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-Tastatur"
+ "Android-Rechtschreibprüfung"
+ "Android-Tastatureinstellungen"
+ "Einstellungen für Rechtschreibprüfung"
+
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index b24952534..9381ecb56 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -20,14 +20,10 @@
- "Android-Tastatur"
"Android-Tastatur (AOSP)"
- "Android-Tastatureinstellungen"
"Eingabeoptionen"
"Forschungsprotokollbefehle"
- "Android-Rechtschreibprüfung"
"Android-Rechtschreibprüfung (AOSP)"
- "Einstellungen für Rechtschreibprüfung"
"Kontaktnamen prüfen"
"Rechtschreibprüfung verwendet Einträge aus Ihrer Kontaktliste."
"Bei Tastendruck vibrieren"
@@ -111,9 +107,14 @@
"Zeitstempel im Protokoll"
"Zeitstempel aufgenommen"
"Nicht protokollieren"
+ "Sitzungsprotokoll aktivieren"
+ "Gesamten Sitzungsverlauf speichern"
"Protokoll wird gelöscht..."
"Protokoll gelöscht"
"Protokoll NICHT gelöscht"
+ "Sitzungsverlauf gespeichert"
+ "Sitzungsverlauf NICHT gespeichert"
+ "Sitzungsprotokoll aktiviert"
"Eingabesprachen"
"Zum Speichern erneut berühren"
"Wörterbuch verfügbar"
diff --git a/java/res/values-el/strings-appname.xml b/java/res/values-el/strings-appname.xml
new file mode 100644
index 000000000..a199655f2
--- /dev/null
+++ b/java/res/values-el/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Πληκτρολόγιο Android"
+ "Ορθογραφικός έλεγχος Android"
+ "Ρυθμίσεις πληκτρολογίου Android"
+ "Ρυθμίσεις ορθογραφικού ελέγχου"
+
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index d9e1aa8c4..8125bc4bd 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -20,14 +20,10 @@
- "Πληκτρολόγιο Android"
"Πληκτρολόγιο Android (AOSP)"
- "Ρυθμίσεις πληκτρολογίου Android"
"Επιλογές εισόδου"
"Έρευνα εντολών καταγραφής"
- "Ορθογραφικός έλεγχος Android"
"Ορθογραφικός έλεγχος Android (AOSP)"
- "Ρυθμίσεις ορθογραφικού ελέγχου"
"Αναζήτηση ονομάτων επαφών"
"Ο ορθογρ. έλεγχος χρησιμοπ. καταχωρίσεις από τη λίστα επαφών σας"
"Δόνηση κατά το πάτημα πλήκτρων"
@@ -111,9 +107,14 @@
"Χρόνος στο αρχείο καταγρ."
"Καταγεγραμμένος χρόνος"
"Χωρίς αρχείο καταγραφής"
+ "Ενεργοποίηση καταγραφής περιόδου"
+ "Καταγραφή ολόκλ. ιστορικού περιόδου"
"Διαγραφή αρχείου σύνδεσης"
"Αρχείο καταγρ. διαγράφηκε"
"Αρχείο καταγρ. ΔΕΝ διαγρ."
+ "Το ιστορικό περιόδου καταγράφηκε"
+ "Σφάλμα: ΜΗ καταγραφή ιστορ. περιόδου"
+ "Ενεργοποίηση καταγραφής περιόδου"
"Γλώσσες εισόδου"
"Αγγίξτε ξανά για αποθήκευση"
"Λεξικό διαθέσιμο"
diff --git a/java/res/values-en-rGB/strings-appname.xml b/java/res/values-en-rGB/strings-appname.xml
new file mode 100644
index 000000000..ad9e782b0
--- /dev/null
+++ b/java/res/values-en-rGB/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android keyboard"
+ "Android spell checker"
+ "Android keyboard settings"
+ "Spell checking settings"
+
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 7241e5df0..9697cc792 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -20,14 +20,10 @@
- "Android keyboard"
"Android keyboard (AOSP)"
- "Android keyboard settings"
"Input options"
"Research Log Commands"
- "Android spell checker"
"Android spell checker (AOSP)"
- "Spellchecking settings"
"Look up contact names"
"Spell checker uses entries from your contact list"
"Vibrate on key-press"
@@ -111,9 +107,14 @@
"Note timestamp in log"
"Recorded timestamp"
"Do not log this session"
+ "Enable session logging"
+ "Log whole session history"
"Deleting session log"
"Session log deleted"
"Session log NOT deleted"
+ "Session history logged"
+ "Error: Session history NOT logged"
+ "Session logging enabled"
"Input languages"
"Touch again to save"
"Dictionary available"
diff --git a/java/res/values-es-rUS/strings-appname.xml b/java/res/values-es-rUS/strings-appname.xml
new file mode 100644
index 000000000..5f08afba4
--- /dev/null
+++ b/java/res/values-es-rUS/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Teclado de Android"
+ "Corrector ortográfico de Android"
+ "Configuración de teclado de Android"
+ "Configuración del corrector ortográfico"
+
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index 01d9912da..00fce612b 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -20,14 +20,10 @@
- "Teclado de Android"
"Teclado de Android (AOSP)"
- "Configuración de teclado de Android"
"Opciones de entrada"
"Comandos registro invest."
- "Corrector ortográfico de Android"
"Corrector ortográfico de Android (AOSP)"
- "Configuración del corrector ortográfico"
"Buscar nombres contactos"
"El corrector ortográfico usa entradas de tu lista de contactos."
"Vibrar al pulsar teclas"
@@ -111,9 +107,14 @@
"Marcar tiempo en registro"
"Marca tiempo registrada"
"No registrar esta sesión"
+ "Activar registro de sesión"
+ "Registrar his. de sesión completo"
"Eliminando registro"
"Registro sesión eliminado"
"NO se eliminó el registro"
+ "Se registró el historial de sesión."
+ "Error al registrar his. de sesión"
+ "Se activó el historial de sesión."
"Idiomas de entrada"
"Vuelve a tocar para guardar."
"Diccionario disponible"
diff --git a/java/res/values-es/strings-appname.xml b/java/res/values-es/strings-appname.xml
new file mode 100644
index 000000000..cce9a176d
--- /dev/null
+++ b/java/res/values-es/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Teclado de Android"
+ "Corrector ortográfico de Android"
+ "Ajustes del teclado de Android"
+ "Ajustes del corrector ortográfico"
+
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index f97d93ddf..7625003c8 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -20,14 +20,10 @@
- "Teclado de Android"
"Teclado Android (AOSP)"
- "Ajustes del teclado de Android"
"Opciones entrada texto"
"Comandos registro investigación"
- "Corrector de Android"
"Corrector de Android (AOSP)"
- "Ajustes del corrector ortográfico"
"Nombres de contactos"
"Añadir nombres de tu lista de contactos al corrector"
"Vibrar al pulsar tecla"
@@ -111,9 +107,14 @@
"Anotar marca tiempo en registro"
"Marca de tiempo registrada"
"No registrar esta sesión"
+ "Habilitar registro de sesión"
+ "Registrar historial de sesión"
"Eliminando registro..."
"Registro eliminado"
"Registro no eliminado"
+ "Historial de sesión registrado"
+ "Error: historial NO registrado"
+ "Registro de sesión habilitado"
"Idiomas de entrada"
"Toca otra vez para guardar."
"Hay un diccionario disponible"
diff --git a/java/res/values-et/strings-appname.xml b/java/res/values-et/strings-appname.xml
new file mode 100644
index 000000000..181d597f9
--- /dev/null
+++ b/java/res/values-et/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Androidi klaviatuur"
+ "Androidi õigekirjakontroll"
+ "Androidi klaviatuuri seaded"
+ "Õigekirjakontrolli seaded"
+
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index e4f0f2f58..ae98198ce 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -20,14 +20,10 @@
- "Androidi klaviatuur"
"Android-klaviatuur (AOSP)"
- "Androidi klaviatuuriseaded"
"Sisestusvalikud"
"Uuringulogi käsud"
- "Androidi õigekirjakontroll"
"Androidi õigekirjakontroll (AOSP)"
- "Õigekirjakontrolli seaded"
"Kontakti nimede kontroll."
"Õigekirjakontroll kasutab teie kontaktisikute loendi sissekandeid"
"Vibreeri klahvivajutusel"
@@ -111,9 +107,14 @@
"Märgi ajatempel logisse"
"Salvestatud ajatemplid"
"Ära logi seda seanssi"
+ "Lubage seansi logimine"
+ "Logige kogu seansi ajalugu"
"Seansi logi kustutamine"
"Seansi logi kustutatud"
"Seansi logi EI kustutatud"
+ "Seansi ajalugu on logitud"
+ "Viga: seansi ajalugu EI OLE logitud"
+ "Seansi logimine on lubatud"
"Sisestuskeeled"
"Salvestamiseks puudutage uuesti"
"Sõnastik saadaval"
diff --git a/java/res/values-fa/strings-appname.xml b/java/res/values-fa/strings-appname.xml
new file mode 100644
index 000000000..366d56d92
--- /dev/null
+++ b/java/res/values-fa/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "صفحه کلید Android"
+ "غلطگیر املای Android"
+ "تنظیمات صفحه کلید Android"
+ "تنظیمات غلط گیر املا"
+
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 1e18a4843..bfdabab04 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -20,14 +20,10 @@
- "صفحه کلید Android"
"صفحه کلید (Android (AOSP"
- "تنظیمات صفحه کلید Android"
"گزینه های ورودی"
"فرمانهای گزارشگیری پژوهش"
- "غلطگیر املای Android"
"غلطگیر املای Android (AOSP)"
- "تنظیمات غلط گیری املایی"
"جستجوی نام مخاطبین"
"غلطگیر املا از ورودیهای لیست مخاطبین شما استفاده میکند"
"لرزش با فشار کلید"
@@ -115,9 +111,19 @@
"یادداشت مهر زمان در گزارش"
"مهر زمان ثبت شده"
"از این جلسه گزارشگیری نشود"
+
+
+
+
"در حال حذف گزارش جلسه"
"گزارش جلسه حذف شد"
"گزارش جلسه حذف نشد"
+
+
+
+
+
+
"زبانهای ورودی"
"برای ذخیره دوباره لمس کنید"
"دیکشنری موجود است"
diff --git a/java/res/values-fi/strings-appname.xml b/java/res/values-fi/strings-appname.xml
new file mode 100644
index 000000000..b2e23d552
--- /dev/null
+++ b/java/res/values-fi/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-näppäimistö"
+ "Android-oikoluku"
+ "Android-näppäimistön asetukset"
+ "Oikolukuasetukset"
+
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 3ca48be5d..b19b0624e 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -20,14 +20,10 @@
- "Android-näppäimistö"
"Android-näppäimistö (AOSP)"
- "Android-näppäimistön asetukset"
"Syöttövalinnat"
"Tutkimuslokin komennot"
- "Android-oikoluku"
"Android-oikoluku (AOSP)"
- "Oikoluvun asetukset"
"Hae kontaktien nimiä"
"Oikeinkirjoituksen tarkistus käyttää kontaktiluettelosi tietoja."
"Käytä värinää näppäimiä painettaessa"
@@ -111,9 +107,14 @@
"Merkitse aikaleima lokiin"
"Merkitty aikaleima"
"Älä tallenna tätä käyttök."
+ "Ota käyttökertaloki käyttöön"
+ "Kirjaa koko käyttökerran historia"
"Poistetaan lokia"
"Käyttökertaloki poistettu"
"Lokia EI poistettu"
+ "Käyttökerran historia kirjattu"
+ "Virhe: käyttök. historiaa EI kirj."
+ "Käyttökertaloki käytössä"
"Syöttökielet"
"Tallenna koskettamalla uudelleen"
"Sanakirja saatavilla"
diff --git a/java/res/values-fr/strings-appname.xml b/java/res/values-fr/strings-appname.xml
new file mode 100644
index 000000000..8e2a6e088
--- /dev/null
+++ b/java/res/values-fr/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Clavier Android"
+ "Correcteur orthographique Android"
+ "Paramètres du clavier Android"
+ "Paramètres du correcteur orthographique"
+
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index e457480c1..99c6e0337 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -20,14 +20,10 @@
- "Clavier Android"
"Clavier Android (AOSP)"
- "Paramètres du clavier Android"
"Options de saisie"
"Commandes journaux rech."
- "Correcteur orthographique Android"
"Correcteur orthographique Android (AOSP)"
- "Paramètre du correcteur orthographique"
"Rechercher noms contacts"
"Correcteur orthographique utilise entrées de liste de contacts."
"Vibrer à chaque touche"
@@ -111,9 +107,14 @@
"Noter heure dans journal"
"Heure enregistrée."
"Ne pas enregistrer session"
+ "Activer l\'enregistrement de session"
+ "Enregistrer historique de la session"
"Suppr. journal session…"
"Journal session supprimé."
"Journal session PAS suppr."
+ "Historique de la session enregistré."
+ "Historique session NON enregistré."
+ "Enregistrement de session activé."
"Langues de saisie"
"Appuyer de nouveau pour enregistrer"
"Dictionnaire disponible"
diff --git a/java/res/values-hi/strings-appname.xml b/java/res/values-hi/strings-appname.xml
new file mode 100644
index 000000000..02283af9a
--- /dev/null
+++ b/java/res/values-hi/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android कीबोर्ड"
+ "Android वर्तनी परीक्षक"
+ "Android कीबोर्ड सेटिंग"
+ "वर्तनी जांच सेटिंग"
+
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 9dfcf614e..81fb684bf 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -20,14 +20,10 @@
- "Android कीबोर्ड"
"Android कीबोर्ड (AOSP)"
- "Android कीबोर्ड सेटिंग"
"इनपुट विकल्प"
"लॉग आदेशों का शोध करें"
- "Android वर्तनी परीक्षक"
"Android वर्तनी परीक्षक (AOSP)"
- "वर्तनी जांच सेटिंग"
"संपर्क नामों को खोजें"
"वर्तनी परीक्षक आपकी संपर्क सूची की प्रविष्टियों का उपयोग करता है"
"कुंजी दबाने पर कंपन करता है"
@@ -111,9 +107,19 @@
"लॉग में टाइमस्टैम्प नोट करें"
"रिकॉर्ड किया गया टाइमस्टैम्प"
"इस सत्र को लॉग न करें"
+
+
+
+
"सत्र लॉग हटाया जा रहा है"
"सत्र लॉग हटाया गया"
"सत्र लॉग हटाया नहीं गया"
+
+
+
+
+
+
"इनपुट भाषाएं"
"सहेजने के लिए पुन: स्पर्श करें"
"शब्दकोश उपलब्ध है"
diff --git a/java/res/values-hr/strings-appname.xml b/java/res/values-hr/strings-appname.xml
new file mode 100644
index 000000000..69fa2e9a1
--- /dev/null
+++ b/java/res/values-hr/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Androidova tipkovnica"
+ "Androidova provjera pravopisa"
+ "Postavke Androidove tipkovnice"
+ "Postavke provjere pravopisa"
+
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index c8649e951..5a1eefc5e 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -20,14 +20,10 @@
- "Android tipkovnica"
"Android tipkovnica (AOSP)"
- "Postavke tipkovnice za Android"
"Opcije ulaza"
"Istraživanje naredbi dnevnika"
- "Androidova provjera pravopisa"
"Androidova provjera pravopisa (AOSP)"
- "Postavke provjere pravopisa"
"Potražite imena kontakata"
"Provjera pravopisa upotrebljava unose iz vašeg popisa kontakata"
"Vibracija pri pritisku na tipku"
@@ -111,9 +107,14 @@
"Zabilježi razdoblje u dnevniku"
"Zabilježeno razdoblje"
"Ne bilježi ovu sesiju"
+ "Omogući bilježenje sesije"
+ "Bilježi cijelu povijest sesije"
"Brisanje dnevnika sesije"
"Izbrisan dnevnik sesije"
"Dnevnik sesije NIJE izbrisan"
+ "Povijest sesije zabilježena je"
+ "Pogr.: pov. sesije NIJE zabilježena"
+ "Omogućeno je bilježenje sesije"
"Jezici unosa"
"Dodirnite ponovo za spremanje"
"Rječnik je dostupan"
diff --git a/java/res/values-hu/strings-appname.xml b/java/res/values-hu/strings-appname.xml
new file mode 100644
index 000000000..ad511cfbc
--- /dev/null
+++ b/java/res/values-hu/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-billentyűzet"
+ "Androidos helyesírás-ellenőrző"
+ "Android-billentyűzet beállításai"
+ "A helyesírás-ellenőrzés beállításai"
+
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index d2a38cb24..a0110e49a 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -20,14 +20,10 @@
- "Android-billentyűzet"
"Android-billentyűzet (AOSP)"
- "Android billentyűzetbeállítások"
"Beviteli beállítások"
"Naplózási parancsok"
- "Androidos helyesírás-ellenőrző"
"Androidos helyesírás-ellenőrző (AOSP)"
- "Helyesírás-ellenőrzés beállításai"
"Névjegyek keresése"
"A helyesírás-ellenőrző használja a névjegyek bejegyzéseit"
"Rezgés billentyű megnyomása esetén"
@@ -111,9 +107,19 @@
"Időbélyegző naplózáskor"
"Rögzített időbélyegzők"
"Ne naplózza"
+
+
+
+
"Napló törlése folyamatban"
"Napló törölve"
"Napló NINCS törölve"
+
+
+
+
+
+
"Beviteli nyelvek"
"Érintse meg újból a mentéshez"
"Van elérhető szótár"
diff --git a/java/res/values-in/strings-appname.xml b/java/res/values-in/strings-appname.xml
new file mode 100644
index 000000000..283d69247
--- /dev/null
+++ b/java/res/values-in/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Keyboard Android"
+ "Pemeriksa ejaan Android"
+ "Setelan keyboard Android"
+ "Setelan pemeriksa ejaan"
+
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 2d10e6274..b02656c6e 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -20,14 +20,10 @@
- "Keyboard Android"
"Keyboard Android (AOSP)"
- "Setelan keyboard Android"
"Opsi masukan"
"Riset Perintah Log"
- "Pemeriksa ejaan Android"
"Pemeriksa ejaan Android (AOSP)"
- "Setelan pemeriksaan ejaan"
"Cari nama kontak"
"Pemeriksa ejaan menggunakan entri dari daftar kontak Anda"
"Getar jika tombol ditekan"
@@ -111,9 +107,14 @@
"Catat cap waktu di log"
"Cap waktu yang direkam"
"Jangan simpan log sesi ini"
+ "Aktifkan log sesi"
+ "Rekam log seluruh riwayat sesi"
"Menghapus log sesi"
"Log sesi dihapus"
"Log sesi BELUM dihapus"
+ "Log riwayat sesi direkam"
+ "Ksalahn: Log rwyat sesi TAK direkam"
+ "Perekaman log sesi diaktifkan"
"Bahasa masukan"
"Sentuh lagi untuk menyimpan"
"Kamus yang tersedia"
diff --git a/java/res/values-it/strings-appname.xml b/java/res/values-it/strings-appname.xml
new file mode 100644
index 000000000..b84896b9d
--- /dev/null
+++ b/java/res/values-it/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Tastiera Android"
+ "Controllo ortografico Android"
+ "Impostazioni tastiera Android"
+ "Impostazioni di controllo ortografico"
+
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index c3a2b5135..b23c516e9 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -20,14 +20,10 @@
- "Tastiera Android"
"Tastiera Android (AOSP)"
- "Impostazioni tastiera Android"
"Opzioni inserimento"
"Ricerca comandi di log"
- "Controllo ortografico Android"
"Controllo ortografico Android (AOSP)"
- "Impostazioni di controllo ortografico"
"Cerca in nomi contatti"
"La funzione di controllo ortografico usa voci dell\'elenco contatti"
"Vibrazione tasti"
@@ -111,9 +107,14 @@
"Indicazione temporale log"
"Indicazione temporale registrata"
"Non registrare la sessione"
+ "Attiva registrazione sessioni"
+ "Registra intera cronologia sessione"
"Eliminazione log sessione"
"Log di sessione eliminato"
"Log sessione non eliminato"
+ "Cronologia sessione registrata"
+ "Errore: cron. sessione NON registr."
+ "Registrazione sessioni attivata"
"Lingue comandi"
"Tocca di nuovo per salvare"
"Dizionario disponibile"
diff --git a/java/res/values-iw/strings-appname.xml b/java/res/values-iw/strings-appname.xml
new file mode 100644
index 000000000..f3f4b674c
--- /dev/null
+++ b/java/res/values-iw/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "מקלדת Android"
+ "בודק האיות של Android"
+ "הגדרות מקלדת Android"
+ "הגדרות בדיקת איות"
+
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 3859993f9..29bd615b4 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -20,14 +20,10 @@
- "מקלדת Android"
"מקלדת Android (AOSP)"
- "הגדרות מקלדת של Android"
"אפשרויות קלט"
"פקודות יומן מחקר"
- "בודק האיות של Android"
"בודק האיות של Android (AOSP)"
- "הגדרות בדיקת איות"
"חפש שמות של אנשי קשר"
"בודק האיות משתמש בערכים מרשימת אנשי הקשר שלך"
"רטט בלחיצה על מקשים"
@@ -111,9 +107,14 @@
"ציין חותמת זמן ביומן"
"חותמת זמן מתועדת"
"אל תרשום הפעלה זו ביומן"
+ "הפעל רישום הפעלה"
+ "רשום את כל היסטוריית ההפעלה"
"מוחק יומן הפעלה"
"יומן הפעלה נמחק"
"יומן הפעלה לא נמחק"
+ "היסטוריית הפעלה נרשמה"
+ "שגיאה: היסטוריית ההפעלה לא נרשמה"
+ "רישום הפעלה הופעל"
"שפות קלט"
"גע שוב כדי לשמור"
"מילון זמין"
diff --git a/java/res/values-ja/strings-appname.xml b/java/res/values-ja/strings-appname.xml
new file mode 100644
index 000000000..16c1c05c6
--- /dev/null
+++ b/java/res/values-ja/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Androidキーボード"
+ "Androidスペルチェッカー"
+ "Androidキーボードの設定"
+ "スペルチェックの設定"
+
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index f9349f540..ca13bb9ce 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -20,14 +20,10 @@
- "Androidキーボード"
"Androidキーボード(AOSP)"
- "Androidキーボードの設定"
"入力オプション"
"ログコマンドの検索"
- "Androidスペルチェッカー"
"Androidスペルチェッカー(AOSP)"
- "スペルチェックの設定"
"連絡先名の検索"
"スペルチェッカーでは連絡先リストのエントリを使用します"
"キー操作バイブ"
@@ -111,9 +107,19 @@
"タイムスタンプを記録"
"タイムスタンプ記録済み"
"セッションを記録しない"
+
+
+
+
"セッションログ削除中"
"セッションログ削除済み"
"セッションログ未削除"
+
+
+
+
+
+
"入力言語"
"保存するにはもう一度タップ"
"辞書を利用できます"
diff --git a/java/res/values-ko/strings-appname.xml b/java/res/values-ko/strings-appname.xml
new file mode 100644
index 000000000..3d7db6136
--- /dev/null
+++ b/java/res/values-ko/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android 키보드"
+ "Android 맞춤법 검사기"
+ "Android 키보드 설정"
+ "맞춤법 검사 설정"
+
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index cd8cb6b51..3126b2e66 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -20,14 +20,10 @@
- "Android 키보드"
"Android 키보드(AOSP)"
- "Android 키보드 설정"
"입력 옵션"
"로그 명령 탐색"
- "Android 맞춤법 검사기"
"Android 맞춤법 검사기(AOSP)"
- "맞춤법 검사 설정"
"연락처 이름 조회"
"맞춤법 검사기가 주소록의 항목을 사용합니다."
"키를 누를 때 진동 발생"
@@ -111,9 +107,19 @@
"로그에 타임스탬프를 기록"
"타임스탬프를 기록함"
"이 세션을 로그하지 마세요."
+
+
+
+
"세션 로그 삭제"
"세션 로그가 삭제됨"
"세션 로그가 삭제되지 않음"
+
+
+
+
+
+
"입력 언어"
"저장하려면 다시 터치"
"사전 사용 가능"
diff --git a/java/res/values-lt/strings-appname.xml b/java/res/values-lt/strings-appname.xml
new file mode 100644
index 000000000..668d27531
--- /dev/null
+++ b/java/res/values-lt/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "„Android“ klaviatūra"
+ "„Android“ rašybos tikrinimo programa"
+ "„Android“ klaviatūros nustatymai"
+ "Rašybos tikrinimo nustatymai"
+
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index 2f6abc856..7d7b54c8f 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -20,14 +20,10 @@
- "„Android“ klaviatūra"
"„Android“ klaviatūra (AOSP)"
- "„Android“ klaviatūros nustatymai"
"Įvesties parinktys"
"Tyrinėti žurnalo komandas"
- "„Android“ rašybos tikrinimo programa"
"„Android“ rašybos tikrinimo programa (AOSP)"
- "Rašybos tikrinimo nustatymai"
"Kontaktų vardų paieška"
"Rašybos tikrinimo progr. naudoja įrašus, esančius kontaktų sąraše"
"Vibruoti, kai paspaudžiami klavišai"
@@ -111,9 +107,14 @@
"Pažym. laiko žymę žurnale"
"Įrašyta laiko žymė"
"Neįrašyti šios sesijos"
+ "Įgalinti sesijos įrašymą į žurnalą"
+ "Įrašyti sesijos istoriją į žurnalą"
"Ištrinam. sesijos žurnal."
"Sesijos žurnalas ištrint."
"Sesij. žurnal. NEIŠTRINT."
+ "Sesijos istorija įrašyta į žurnalą"
+ "Klaida: sesijos istorija NEĮRAŠYTA"
+ "Sesijos įrašymas žurnale įgalintas"
"Įvesties kalbos"
"Jei norite išsaugoti, palieskite dar kartą"
"Žodynas galimas"
diff --git a/java/res/values-lv/strings-appname.xml b/java/res/values-lv/strings-appname.xml
new file mode 100644
index 000000000..e5657a237
--- /dev/null
+++ b/java/res/values-lv/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android tastatūra"
+ "Android pareizrakstības pārbaudītājs"
+ "Android tastatūras iestatījumi"
+ "Pareizrakstības pārbaudes iestatījumi"
+
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 66dd1473e..e5e61e39c 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -20,14 +20,10 @@
- "Android tastatūra"
"Android tastatūra (AOSP)"
- "Android tastatūras iestatījumi"
"Ievades opcijas"
"Izpētes žurnāla komandas"
- "Android pareizrakstības pārbaudītājs"
"Android pareizrakstības pārbaudītājs (AOSP)"
- "Pareizrakstības pārbaudes iestatījumi"
"Meklēt kontaktp. vārdus"
"Pareizrakst. pārbaudītājs lieto ierakstus no kontaktp. saraksta."
"Vibrēt, nospiežot taustiņu"
@@ -111,9 +107,14 @@
"Atzīmēt laiksp. žurnālā"
"Laikspied. ir reģistrēts."
"Nereģistrēt šo sesiju"
+ "Sesijas reģistrēšanas iespējošana"
+ "Visas sesijas vēstures reģistrēšana"
"Not. sesijas žurn. dzēš."
"Sesijas žurnāls ir dzēsts"
"Sesijas žurn. NAV dzēsts"
+ "Sesijas vēsture ir reģistrēta."
+ "Kļūda: sesijas vēsture NAV reģistr."
+ "Sesijas reģistrēšana ir iespējota."
"Ievades valodas"
"Pieskarieties vēlreiz, lai saglabātu."
"Ir pieejama vārdnīca."
diff --git a/java/res/values-ms/strings-appname.xml b/java/res/values-ms/strings-appname.xml
new file mode 100644
index 000000000..6273c6595
--- /dev/null
+++ b/java/res/values-ms/strings-appname.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ "Penyemak ejaan Android"
+ "Tetapan papan kekunci Android"
+ "Tetapan penyemakan ejaan"
+
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 53c902039..cdd23a8de 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -20,14 +20,10 @@
- "Papan kekunci Android"
"Papan kekunci Android (AOSP)"
- "Tetapan papan kekunci Android"
"Pilihan input"
"Arahan Log Penyelidikan"
- "Penyemak ejaan Android"
"Penyemak ejaan Android (AOSP)"
- "Tetapan penyemakan ejaan"
"Cari nama kenalan"
"Penyemak ejaan menggunakan entri dari senarai kenalan anda"
"Getar pada tekanan kekunci"
@@ -111,9 +107,19 @@
"Tanda cap waktu dalam log"
"Cap waktu direkodkan"
"Jangan log sesi ini"
+
+
+
+
"Memadam log sesi"
"Log sesi dipadam"
"Log sesi TIDAK dipadam"
+
+
+
+
+
+
"Bahasa input"
"Sentuh lagi untuk menyimpan"
"Kamus tersedia"
diff --git a/java/res/values-nb/strings-appname.xml b/java/res/values-nb/strings-appname.xml
new file mode 100644
index 000000000..56c1c3c71
--- /dev/null
+++ b/java/res/values-nb/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-tastatur"
+ "Android-stavekontroll"
+ "Innstillinger for Android-tastatur"
+ "Innstillinger for stavekontroll"
+
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index bdde36ae8..5f7519a8d 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -20,14 +20,10 @@
- "Skjermtastatur"
"Android-tastatur (AOSP)"
- "Innstillinger for skjermtastatur"
"Inndataalternativer"
"Kommandoer for undersøkelseslogging"
- "Android-stavekontroll"
"Android-stavekontroll (AOSP)"
- "Innstillinger for stavekontroll"
"Slå opp kontaktnavn"
"Stavekontrollen bruker oppføringer fra kontaktlisten din"
"Vibrer ved tastetrykk"
@@ -111,9 +107,14 @@
"Notér tidsstempel i logg"
"Registrerte tidsstempel"
"Ikke loggfør denne økten"
+ "Aktiver lagring av økter"
+ "Lagre hele øktloggen"
"Sletter øktloggen"
"Øktloggen ble slettet"
"Øktloggen ble IKKE slettet"
+ "Øktloggen er lagret"
+ "Feil: Øktloggen er IKKE lagret"
+ "Øktlagring er aktivert"
"Inndataspråk"
"Trykk på nytt for å lagre"
"Ordbok tilgjengelig"
diff --git a/java/res/values-nl/strings-appname.xml b/java/res/values-nl/strings-appname.xml
new file mode 100644
index 000000000..ee288efbb
--- /dev/null
+++ b/java/res/values-nl/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android-toetsenbord"
+ "Spellingcontrole van Android"
+ "Instellingen voor Android-toetsenbord"
+ "Instellingen voor spellingcontrole"
+
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 9624e176e..19c9eda1c 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -20,14 +20,10 @@
- "Android-toetsenbord"
"Android-toetsenbord (AOSP)"
- "Instellingen voor Android-toetsenbord"
"Invoeropties"
"Opdrachten in onderzoekslogbestand"
- "Spellingcontrole van Android"
"Spellingcontrole van Android (AOSP)"
- "Instellingen voor spellingcontrole"
"Contactnamen opzoeken"
"De spellingcontrole gebruikt items uit uw contactenlijst"
"Trillen bij toetsaanslag"
@@ -111,9 +107,14 @@
"Tijdstempel opnemen in logbestand"
"Opgenomen tijdstempel"
"Sessie niet registreren"
+ "Sessieregistratie inschakelen"
+ "Hele sessiegeschiedenis registreren"
"Sessielogbestand verwijderen"
"Sessielogbestand verwijderd"
"Sessielogbestand NIET verwijderd"
+ "Sessiegeschiedenis geregistreerd"
+ "Fout: sessiegesch. NIET geregistr."
+ "Sessieregistratie ingeschakeld"
"Invoertalen"
"Raak nogmaals aan om op te slaan"
"Woordenboek beschikbaar"
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index c8a72b77a..6ffe8dce3 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -20,14 +20,10 @@
- "Klawiatura Android"
"Klawiatura Androida (AOSP)"
- "Ustawienia klawiatury Android"
"Opcje wprowadzania"
"Polecenia dziennika badań"
- "Słownik Androida"
"Sprawdzanie pisowni na Androidzie (AOSP)"
- "Ustawienia sprawdzania pisowni"
"Przeszukaj kontakty"
"Sprawdzanie pisowni bierze pod uwagę wpisy z listy kontaktów."
"Wibracja przy naciśnięciu"
@@ -111,9 +107,19 @@
"Znacznik czasu uwagi w dzienniku"
"Zapisano znacznik czasu"
"Nie rejestruj tej sesji"
+
+
+
+
"Usuwanie dziennika sesji"
"Usunięto dziennik sesji"
"Dziennik sesji NIEUSUNIĘTY"
+
+
+
+
+
+
"Języki wprowadzania"
"Dotknij ponownie, aby zapisać"
"Słownik dostępny"
diff --git a/java/res/values-pt-rPT/strings-appname.xml b/java/res/values-pt-rPT/strings-appname.xml
new file mode 100644
index 000000000..1b88acb69
--- /dev/null
+++ b/java/res/values-pt-rPT/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Teclado do Android"
+ "Verificador ortográfico do Android"
+ "Definições de teclado do Android"
+ "Definições da verificação ortográfica"
+
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index cef2ce75b..f16070bb4 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -20,14 +20,10 @@
- "Teclado do Android"
"Teclado Android (AOSP)"
- "Definições de teclado do Android"
"Opções de introdução"
"Comandos de Reg. Invest."
- "Verificador ortográfico do Android"
"Verificador ortográfico do Android (AOSP)"
- "Definições da verificação ortográfica"
"Procurar nomes de contac."
"O corretor ortográfico utiliza entradas da sua lista de contactos"
"Vibrar ao primir as teclas"
@@ -111,9 +107,14 @@
"Anotar car. data no reg."
"Carimbo de data gravado"
"Não registar esta sessão"
+ "Ativar registos de sessão"
+ "Registar hist. de sessões completo"
"A eliminar reg. da sessão"
"Reg. de sessão eliminado"
"Reg. de sessão NÃO elim."
+ "Histórico de sessões registado"
+ "Erro: hist. de sessões NÃO regist."
+ "Registo de sessões ativado"
"Idiomas de introdução"
"Toque novamente para guardar"
"Dicionário disponível"
diff --git a/java/res/values-pt/strings-appname.xml b/java/res/values-pt/strings-appname.xml
new file mode 100644
index 000000000..3987a6dea
--- /dev/null
+++ b/java/res/values-pt/strings-appname.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ "Corretor ortográfico do Android"
+ "Configurações de teclado do Android"
+ "Configurações de verificação ortográfica"
+
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index d092879cf..93666ac3b 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -20,14 +20,10 @@
- "Teclado Android"
"Teclado Android (AOSP)"
- "Configurações de teclado Android"
"Opções de entrada"
"Pesq. comandos de reg."
- "Corretor ortográfico do Android"
"Corretor ortográfico do Android (AOSP)"
- "Configurações de verificação ortográfica"
"Buscar nomes de contatos"
"O corretor ortográfico usa entradas de sua lista de contatos"
"Vibrar ao tocar a tecla"
@@ -111,9 +107,19 @@
"Indicar data/hora no reg."
"Data/hora registrada"
"Não registrar esta sessão"
+
+
+
+
"Excluindo reg. de sessão"
"Registro excluído"
"Registro NÃO excluído"
+
+
+
+
+
+
"Idiomas de entrada"
"Toque novamente para salvar"
"Dicionário disponível"
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index b39691ceb..670ce57f1 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -20,20 +20,14 @@
- "Tastatura Android"
- "Parameters da la tastatura Android"
-
-
-
-
@@ -190,12 +184,22 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/java/res/values-ro/strings-appname.xml b/java/res/values-ro/strings-appname.xml
new file mode 100644
index 000000000..dfa642204
--- /dev/null
+++ b/java/res/values-ro/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Tastatură Android"
+ "Verificator ortografic Android"
+ "Setările tastaturii Android"
+ "Setările de verificare ortografică"
+
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 08275665c..620a5c4a0 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -20,14 +20,10 @@
- "Tastatură Android"
"Tastatură Android (AOSP)"
- "Setările tastaturii Android"
"Opţiuni de introducere text"
"Comenzi jurnal cercetare"
- "Verificator ortografic Android"
"Verificator ortografic Android (AOSP)"
- "Setări de verificare ortografică"
"Verificare nume în agendă"
"Verificatorul ortografic utilizează intrări din lista de contacte"
"Vibrare la apăsarea tastei"
@@ -111,9 +107,19 @@
"Înreg. marc. temp. jurnal"
"Marcaj temporal înregis."
"Nu înregistraţi sesiunea"
+
+
+
+
"Se șterge jurnal sesiune"
"Jurnal de sesiune șters"
"Jurnal sesiune neşters"
+
+
+
+
+
+
"Limbi de intrare"
"Atingeţi din nou pentru a salva"
"Dicţionar disponibil"
diff --git a/java/res/values-ru/strings-appname.xml b/java/res/values-ru/strings-appname.xml
new file mode 100644
index 000000000..5db1d0bc9
--- /dev/null
+++ b/java/res/values-ru/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Клавиатура Android"
+ "Проверка правописания Android"
+ "Настройки клавиатуры Android"
+ "Настройки проверки правописания"
+
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 77ffe7b55..c50d1dee1 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -20,14 +20,10 @@
- "Клавиатура Android"
"Клавиатура Android (AOSP)"
- "Клавиатура Android"
"Настройки"
"Все команды"
- "Проверка правописания Android"
"Проверка правописания Android (AOSP)"
- "Настройка проверки правописания"
"Поиск контактов"
"Обращаться к списку контактов при проверке правописания"
"Виброотклик клавиш"
@@ -111,9 +107,19 @@
"Закладка в журнале"
"Закладка сохранена"
"Не сохранять этот сеанс"
+
+
+
+
"Удаление…"
"Запись сеанса удалена"
"Запись сеанса НЕ удалена"
+
+
+
+
+
+
"Языки ввода"
"Нажмите, чтобы сохранить"
"Доступен словарь"
diff --git a/java/res/values-sk/strings-appname.xml b/java/res/values-sk/strings-appname.xml
new file mode 100644
index 000000000..5b5590000
--- /dev/null
+++ b/java/res/values-sk/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Klávesnica Android"
+ "Kontrola pravopisu Android"
+ "Nastavenia klávesnice Android"
+ "Nastavenia kontroly pravopisu"
+
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 2b31bd858..d89d1d3b6 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -20,14 +20,10 @@
- "Klávesnica Android"
"Klávesnica Android (AOSP)"
- "Nastavenia klávesnice Android"
"Možnosti zadávania textu a údajov"
"Príkazy denníka výskumu"
- "Kontrola pravopisu Android"
"Kontrola pravopisu Android (AOSP)"
- "Nastavenia kontroly pravopisu"
"Vyhľadať kontakty"
"Kontrola pravopisu používa záznamy z vášho zoznamu kontaktov"
"Pri stlačení klávesu vibrovať"
@@ -111,9 +107,19 @@
"Časová pečiatka denníka"
"Časová pečiatka zaznamenaná"
"Neukl. reláciu do denníka"
+
+
+
+
"Odstraň. denníka relácie"
"Denník relácie odstránený"
"Denník relácie NIE JE odstr."
+
+
+
+
+
+
"Jazyky vstupu"
"Opätovným dotykom uložíte"
"K dispozícii je slovník"
diff --git a/java/res/values-sl/strings-appname.xml b/java/res/values-sl/strings-appname.xml
new file mode 100644
index 000000000..fd303d8dd
--- /dev/null
+++ b/java/res/values-sl/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Tipkovnica Android"
+ "Črkovalnik za Android"
+ "Nastavitve tipkovnice Android"
+ "Nastavitve preverjanja črkovanja"
+
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 05e20b04c..ad3e7395f 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -20,14 +20,10 @@
- "Tipkovnica Android"
"Tipkovnica Android (AOSP)"
- "Nastavitve tipkovnice Android"
"Možnosti vnosa"
"Ukazi za dnevnik raziskav"
- "Črkovalnik za Android"
"Črkovalnik za Android (AOSP)"
- "Nastavitve preverjanja črkovanja"
"Iskanje imen stikov"
"Črkovalnik uporablja vnose s seznama stikov"
"Vibriranje ob pritisku tipke"
@@ -111,9 +107,14 @@
"V dnev. zabeleži čas. žig"
"Časovni žig zabeležen"
"Brez dnevnika za to sejo"
+ "Omogoči zapisovanje seje v dnevnik"
+ "Zapiši celotno zgodovino seje v dnevnik"
"Brisanje seje dnevnika"
"Dnevnik seje izbrisan"
"Dnevnik seje NI izbrisan"
+ "Zgodovina seje zapisana v dnevnik"
+ "Napaka: zgodovina seje NI zapisana v dnevnik"
+ "Zapisovanje seje v dnevnik omogočeno"
"Jeziki vnosa"
"Dotaknite se še enkrat, da shranite"
"Slovar je na voljo"
diff --git a/java/res/values-sr/strings-appname.xml b/java/res/values-sr/strings-appname.xml
new file mode 100644
index 000000000..449fe551a
--- /dev/null
+++ b/java/res/values-sr/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android тастатура"
+ "Android провера правописа"
+ "Подешавања Android тастатуре"
+ "Подешавања провере правописа"
+
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 43fe7003d..d1c440d07 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -20,14 +20,10 @@
- "Android тастатура"
"Android тастатура (AOSP)"
- "Подешавања Android тастатуре"
"Опције уноса"
"Команде евиденције истраживања"
- "Android провера правописа"
"Android провера правописа (AOSP)"
- "Подешавања провере правописа"
"Потражи имена контаката"
"Контролор правописа користи уносе са листе контаката"
"Вибрирај на притисак тастера"
@@ -111,9 +107,14 @@
"Наведи временску ознаку у евиденцији"
"Снимљена временска ознака"
"Не евидентирај ову сесију"
+ "Омогући евидентирање сесија"
+ "Евидентирај целу историју сесија"
"Брисање евиденције сесије"
"Евиденција сесије је обрисана"
"Евиденција сесије НИЈЕ избрисана"
+ "Историја сесија је евидентирана"
+ "Грешка: Историја сесија НИЈЕ евидентирана"
+ "Евидентирање сесија је омогућено"
"Језици уноса"
"Поново додирните да бисте сачували"
"Речник је доступан"
diff --git a/java/res/values-sv/strings-appname.xml b/java/res/values-sv/strings-appname.xml
new file mode 100644
index 000000000..9b4a7dbd1
--- /dev/null
+++ b/java/res/values-sv/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Androids tangentbord"
+ "Stavningskontroll i Android"
+ "Inställningar för Androids tangentbord"
+ "Inställningar för stavningskontroll"
+
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index f24446976..0da487723 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -20,14 +20,10 @@
- "Androids tangentbord"
"Androids tangentbord (AOSP)"
- "Inställningar för Androids tangentbord"
"Inmatningsalternativ"
"Loggkommandon"
- "Stavningskontroll i Android"
"Stavningskontroll i Android (AOSP)"
- "Inställningar för stavningskontroll"
"Sök namn på kontakter"
"I stavningskontrollen används poster från kontaktlistan"
"Vibrera vid tangenttryck"
@@ -111,9 +107,14 @@
"Markera tidpunkt i loggen"
"Tidpunkten har sparats"
"Logga inte detta besök"
+ "Aktivera sessionsloggning"
+ "Logga hela sessionshistoriken"
"Besöksloggen tas bort"
"Besöksloggen togs bort"
"Besöksloggen togs EJ bort"
+ "Sessionshistoriken har loggats"
+ "Fel: historiken har INTE loggats"
+ "Sessionsloggning är aktiverat"
"Inmatningsspråk"
"Spara genom att trycka igen"
"En ordlista är tillgänglig"
diff --git a/java/res/values-sw/strings-appname.xml b/java/res/values-sw/strings-appname.xml
new file mode 100644
index 000000000..51de0a6b8
--- /dev/null
+++ b/java/res/values-sw/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Kibodi ya Android"
+ "Kikagua tahajia cha Android"
+ "Mipangilio ya kibodi ya Android"
+ "Mipangilio ya kukagua tahajia"
+
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 9cec8679d..545c41157 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -20,14 +20,10 @@
- "Kibodi ya Android"
"Kicharazio cha Android (AOSP)"
- "Mipangilio ya kibodi ya Android"
"Chaguo za uingizaji"
"Amri za Kumbukumbu za Utafiti"
- "Kikagua tahajia cha Android"
"Kikagua tahajia cha Android (AOSP)"
- "Mipangilio ya kukagua sarufi"
"Angalia majina ya wasiliani"
"Kikagua tahajia hutumia ingizo kutoka kwa orodha yako ya anwani"
"Tetema unabofya kitufe"
@@ -111,9 +107,14 @@
"Dokeza mhuri wa muda kwenye kumbukumbu"
"Mhuri wa muda uliorekodiwa"
"Usihifadhi kumbukumbu za kipindi hiki"
+ "Wezesha kuingia kwenye kipindi"
+ "Ingia kwenye historia ya kipindi kizima"
"Inafuta kumbukumbu za kipindi"
"Kumbukumbu za kipindi zimefutwa"
"Kumbukumbu za kipindi HAZIJAFUTWA"
+ "Historia ya kipindi imeingia"
+ "Hitilafu: Historia ya kipindi HAIJAINGIA"
+ "Kuingia kwa kipindi kumewezeshwa"
"Lugha zinazoruhusiwa"
"Gusa tena ili kuhifadhi"
"Kamusi inapatikana"
diff --git a/java/res/values-th/strings-appname.xml b/java/res/values-th/strings-appname.xml
new file mode 100644
index 000000000..87205d0eb
--- /dev/null
+++ b/java/res/values-th/strings-appname.xml
@@ -0,0 +1,30 @@
+
+
+
+
+ "แป้นพิมพ์แอนดรอยด์"
+
+
+
+
+
+
+
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 174ee4507..c47fc0597 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -20,14 +20,10 @@
- "แป้นพิมพ์ Android"
"Android keyboard (AOSP)"
- "การตั้งค่าแป้นพิมพ์ Android"
"ตัวเลือกการป้อนข้อมูล"
"คำสั่งบันทึกการวิจัย"
- "แอนดรอยด์ตรวจสอบการสะกด"
"แอนดรอยด์ตรวจสอบการสะกด (AOSP)"
- "การตั้งค่าการตรวจสอบการสะกด"
"ค้นหารายชื่อติดต่อ"
"เครื่องมือตรวจการสะกดใช้รายการจากรายชื่อติดต่อของคุณ"
"สั่นเมื่อกดปุ่ม"
@@ -111,9 +107,19 @@
"จดเวลาบันทึกไว้ในบันทึก"
"บันทึกเวลาบันทึกแล้ว"
"อย่าบันทึกเซสชันนี้"
+
+
+
+
"กำลังลบบันทึกเซสชัน"
"ลบบันทึกเซสชันแล้ว"
"บันทึกเซสชันไม่ถูกลบ"
+
+
+
+
+
+
"ภาษาสำหรับการป้อนข้อมูล"
"แตะอีกครั้งเพื่อบันทึก"
"มีพจนานุกรมให้ใช้งาน"
diff --git a/java/res/values-tl/strings-appname.xml b/java/res/values-tl/strings-appname.xml
new file mode 100644
index 000000000..fd2b3f55b
--- /dev/null
+++ b/java/res/values-tl/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Keyboard ng Android"
+ "Spell checker ng Android"
+ "Mga setting ng keyboard ng Android"
+ "Mga setting ng pag-spell check"
+
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 25801ca7d..766972f46 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -20,14 +20,10 @@
- "Android keyboard"
"Android keyboard (AOSP)"
- "Mga setting ng Android keyboard"
"Mga pagpipilian sa input"
"Cmmnd sa Log ng Pnnliksik"
- "Pang-check ng pagbabaybay ng Android"
"Pang-check ng pagbabaybay ng Android (AOSP)"
- "Mga setting ng pang-check ng pagbabaybay"
"Maghanap pangalan contact"
"Gumagamit pang-check pagbabaybay entry sa iyong listahan contact"
"Mag-vibrate sa keypress"
@@ -111,9 +107,19 @@
"Tandaan timestamp sa log"
"Na-record na timestamp"
"Huwag i-log ang session"
+
+
+
+
"Tinatanggl log ng session"
"Tinanggal log ng session"
"HND ntnggl log ng session"
+
+
+
+
+
+
"Mga wika ng input"
"Pinduting muli upang i-save"
"Available ang diksyunaryo"
diff --git a/java/res/values-tr/strings-appname.xml b/java/res/values-tr/strings-appname.xml
new file mode 100644
index 000000000..f5e36d2e8
--- /dev/null
+++ b/java/res/values-tr/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android klavyesi"
+ "Android yazım denetleyici"
+ "Android klavye ayarları"
+ "Yazım denetimi ayarları"
+
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 190736e82..0f5857ab3 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -20,14 +20,10 @@
- "Android klavyesi"
"Android klavye (AOSP)"
- "Android klavye ayarları"
"Giriş seçenekleri"
"Araştırma Günlüğü Komutları"
- "Android yazım denetleyici"
"Android yazım denetleyici (AOSP)"
- "Yazım denetimi ayarları"
"Kişi adlarını denetle"
"Yazım denetleyici, kişi listenizdeki girişleri kullanır"
"Tuşa basıldığında titret"
@@ -111,9 +107,19 @@
"Günlüğe zaman damgası koy"
"Zaman damgası kaydedildi"
"Bu oturumu günlüğe kaydetme"
+
+
+
+
"Oturum günlüğü siliniyor"
"Oturum günlüğü silindi"
"Oturum günlüğü SİLİNMEDİ"
+
+
+
+
+
+
"Giriş dilleri"
"Kaydetmek için tekrar dokunun"
"Sözlük kullanılabilir"
diff --git a/java/res/values-uk/strings-appname.xml b/java/res/values-uk/strings-appname.xml
new file mode 100644
index 000000000..fdbb89fd9
--- /dev/null
+++ b/java/res/values-uk/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Клавіатура Android"
+ "Засіб перевірки орфографії Android"
+ "Налаштування клавіатури Android"
+ "Налаштування перевірки орфографії"
+
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 04a8a638e..d2f9091f6 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -20,14 +20,10 @@
- "Клавіатура Android"
"Клавіатура Android (AOSP)"
- "Налашт-ня клавіат. Android"
"Парам. введення"
"Команди журналу дослідж."
- "Засіб перевірки орфографії Android"
"Засіб перевірки орфографії Android (AOSP)"
- "Налаштування перевірки орфографії"
"Шукати імена контактів"
"Програма перевірки правопису використ. записи зі списку контактів"
"Вібр. при натисканні клавіш"
@@ -111,9 +107,14 @@
"Мітка часу в журналі"
"Записана мітка часу"
"Не реєструвати цю сесію"
+ "Увімкнути запис журналу сеансу"
+ "Записувати історію всього сеансу"
"Видалення журналу сесії"
"Журнал сесії видалено"
"Журнал сесії НЕ видалено"
+ "Історію сеансу записано"
+ "Помилка. Історію сеансу НЕ записано"
+ "Запис журналу сеансу ввімкнено"
"Мови введення"
"Торкніться знову, щоб зберегти"
"Словник доступний"
diff --git a/java/res/values-vi/strings-appname.xml b/java/res/values-vi/strings-appname.xml
new file mode 100644
index 000000000..6e32d0370
--- /dev/null
+++ b/java/res/values-vi/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Bàn phím Android"
+ "Trình kiểm tra chính tả Android"
+ "Cài đặt bàn phím Android"
+ "Cài đặt kiểm tra chính tả"
+
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index c9dc0e644..789d4da48 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -20,14 +20,10 @@
- "Bàn phím Android"
"Bàn phím Android (AOSP)"
- "Cài đặt bàn phím Android"
"Tùy chọn nhập"
"Lệnh ghi nhật ký cho nghiên cứu"
- "Trình kiểm tra chính tả Android"
"Trình kiểm tra chính tả Android (AOSP)"
- "Cài đặt kiểm tra chính tả"
"Tra cứu tên liên hệ"
"Trình kiểm tra chính tả sử dụng các mục nhập từ danh sách liên hệ của bạn"
"Rung khi nhấn phím"
@@ -111,9 +107,19 @@
"Dấu thời gian ghi chú trong nhật ký"
"Dấu thời gian đã ghi"
"Không ghi nhật ký phiên này"
+
+
+
+
"Đang xóa nhật ký phiên"
"Đã xóa nhật ký phiên"
"Nhật ký phiên KHÔNG bị xóa"
+
+
+
+
+
+
"Ngôn ngữ nhập"
"Chạm lại để lưu"
"Có sẵn từ điển"
diff --git a/java/res/values-zh-rCN/strings-appname.xml b/java/res/values-zh-rCN/strings-appname.xml
new file mode 100644
index 000000000..2c1064ad6
--- /dev/null
+++ b/java/res/values-zh-rCN/strings-appname.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ "Android 拼写检查工具"
+ "Android 键盘设置"
+ "拼写检查设置"
+
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 9f5e4633d..ef1c8102e 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -20,14 +20,10 @@
- "Android 键盘"
"Android 键盘 (AOSP)"
- "Android 键盘设置"
"输入选项"
"研究记录命令"
- "Android 拼写检查工具"
"Android 拼写检查工具 (AOSP)"
- "拼写检查设置"
"查找联系人姓名"
"拼写检查工具会使用您的联系人列表中的条目"
"按键振动"
@@ -111,9 +107,19 @@
"标记记录中的时间"
"已标记时间"
"不记录本次会话"
+
+
+
+
"正在删除会话记录"
"会话记录已删除"
"未能删除会话记录"
+
+
+
+
+
+
"输入语言"
"再次触摸即可保存"
"有可用词典"
diff --git a/java/res/values-zh-rTW/strings-appname.xml b/java/res/values-zh-rTW/strings-appname.xml
new file mode 100644
index 000000000..8cc663826
--- /dev/null
+++ b/java/res/values-zh-rTW/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Android 鍵盤"
+ "Android 拼字檢查"
+ "Android 鍵盤設定"
+ "拼字檢查設定"
+
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 0cc8a9d82..20c40eb93 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -20,14 +20,10 @@
- "Android 鍵盤"
"Android 鍵盤 (AOSP)"
- "Android 鍵盤設定"
"輸入選項"
"研究紀錄指令"
- "Android 拼字檢查"
"Android 拼字檢查 (AOSP)"
- "拼字檢查設定"
"查詢聯絡人姓名"
"拼字檢查程式使用您的聯絡人清單項目"
"按鍵時震動"
@@ -111,9 +107,19 @@
"在紀錄中加註時間戳記"
"已記錄時間戳記"
"不要記錄這個工作階段"
+
+
+
+
"正在刪除工作階段紀錄"
"已刪除工作階段紀錄"
"「未」刪除工作階段紀錄"
+
+
+
+
+
+
"輸入語言"
"再次輕觸即可儲存"
"可使用字典"
diff --git a/java/res/values-zu/strings-appname.xml b/java/res/values-zu/strings-appname.xml
new file mode 100644
index 000000000..a0fb51716
--- /dev/null
+++ b/java/res/values-zu/strings-appname.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ "Ikhibhodi ye-Android"
+ "Isihloli sokupela se-Android"
+ "Izilungiselelo zekhibhodi ye-Android"
+ "Izilungiselelo zokuhlola ukupela"
+
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 35cb99cf8..da222092e 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -20,14 +20,10 @@
- "Ikhibhodi ye-Android"
"Ikhibhodi ye-Android (AOSP)"
- "Izilungiselelo zekhibhodi ye-Android"
"Okukhethwa kukho kokungenayo"
"Imiyalo yefayela lokungena lokucwaninga"
- "Isihloli sokupela se-Android"
"Isihloli sokupela se-Android (AOSP)"
- "Izilungiselelo zokuhlola ukupela"
"Bheka amagama woxhumana nabo"
"Isihloli sokupela sisebenzisa okungenayo kusuka kuhlu lalabo oxhumana nabo"
"Dlidlizelisa ngokucindezela inkinobho"
@@ -111,9 +107,14 @@
"Qaphela isitembu sesikhathi efayeleni lokungena"
"Isitembu sesikhathi esirekhodiwe"
"Ungenzi ifayela lokungena lalesi sikhathi"
+ "Nika amandla ukungena ngemvume kwesikhathi"
+ "Umlando wesikhathi sonke sefayela lokungena"
"Isusa ifayela lokungena lesikhathi"
"Ifayela lokungena lesikhathi lisusiwe"
"Ifayela lokungena lesikhathi alisusiwe"
+ "Umlando wesikhathi ukhiyiwe"
+ "Iphutha: Umlando wesikhathi awukhiyiwe"
+ "Ukungena kwesikhathi kunikwe amandla"
"Izilimi zokufakwayo"
"Thinta futhi ukuze ulondoloze"
"Isichazamazwi siyatholakala"
diff --git a/java/res/values/strings-appname.xml b/java/res/values/strings-appname.xml
new file mode 100644
index 000000000..19aaa2513
--- /dev/null
+++ b/java/res/values/strings-appname.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Android keyboard
+
+
+ Android spell checker
+
+
+ Android keyboard settings
+
+
+ Spell checking settings
+
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 6c66a4844..7272cfe97 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -18,25 +18,16 @@
*/
-->
-
- Android keyboard
Android keyboard (AOSP)
-
- Android keyboard settings
Input options
Research Log Commands
-
- Android spell checker
Android spell checker (AOSP)
-
- Spell checking settings
-
Look up contact names
@@ -233,12 +224,22 @@
Do not log this session
+
+ Enable session logging
+
+ Log whole session history
Deleting session log
Session log deleted
Session log NOT deleted
+
+ Session history logged
+
+ Error: Session history NOT logged
+
+ Session logging enabled
Input languages
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 32ef408b4..1ae0020a4 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -610,6 +610,15 @@ public class PointerTracker {
onUpEventInternal();
onDownEventInternal(x, y, eventTime);
} else {
+ // HACK: If there are currently multiple touches, register the key even if
+ // the finger slides off the key. This defends against noise from some
+ // touch panels when there are close multiple touches.
+ // Caveat: When in chording input mode with a modifier key, we don't use
+ // this hack.
+ if (me != null && me.getPointerCount() > 1
+ && !sPointerTrackerQueue.hasModifierKeyOlderThan(this)) {
+ onUpEventInternal();
+ }
mKeyAlreadyProcessed = true;
setReleasedKeyGraphics(oldKey);
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 5db65c660..d3bb85d4b 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -28,6 +28,7 @@ public class PointerTrackerQueue {
private static final String TAG = PointerTrackerQueue.class.getSimpleName();
private static final boolean DEBUG = false;
+ // TODO: Use ring buffer instead of {@link LinkedList}.
private final LinkedList mQueue = new LinkedList();
public synchronized void add(PointerTracker tracker) {
@@ -81,6 +82,20 @@ public class PointerTrackerQueue {
}
}
+ public synchronized boolean hasModifierKeyOlderThan(PointerTracker tracker) {
+ final Iterator it = mQueue.iterator();
+ while (it.hasNext()) {
+ final PointerTracker t = it.next();
+ if (t == tracker) {
+ break;
+ }
+ if (t.isModifier()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public synchronized boolean isAnyInSlidingKeyInput() {
for (final PointerTracker tracker : mQueue) {
if (tracker.isInSlidingKeyInput()) {
diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index c78974dac..a66337404 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -92,7 +92,8 @@ public class AutoCorrection {
public static boolean suggestionExceedsAutoCorrectionThreshold(SuggestedWordInfo suggestion,
CharSequence consideredWord, float autoCorrectionThreshold) {
if (null != suggestion) {
- //final int autoCorrectionSuggestionScore = sortedScores[0];
+ // Shortlist a whitelisted word
+ if (suggestion.mKind == SuggestedWordInfo.KIND_WHITELIST) return true;
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/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index ae415d0ab..534cffb2d 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -45,17 +45,17 @@ public class BinaryDictionary extends Dictionary {
public static final int MAX_SPACES = 16;
private static final String TAG = "BinaryDictionary";
- private static final int MAX_BIGRAMS = 60;
+ private static final int MAX_PREDICTIONS = 60;
+ private static final int MAX_RESULTS = Math.max(MAX_PREDICTIONS, MAX_WORDS);
private static final int TYPED_LETTER_MULTIPLIER = 2;
private long mNativeDict;
private final int[] mInputCodes = new int[MAX_WORD_LENGTH];
- private final char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_WORDS];
- private final char[] mOutputChars_bigrams = new char[MAX_WORD_LENGTH * MAX_BIGRAMS];
+ private final char[] mOutputChars = new char[MAX_WORD_LENGTH * MAX_RESULTS];
private final int[] mSpaceIndices = new int[MAX_SPACES];
- private final int[] mScores = new int[MAX_WORDS];
- private final int[] mBigramScores = new int[MAX_BIGRAMS];
+ private final int[] mOutputScores = new int[MAX_RESULTS];
+ private final int[] mOutputTypes = new int[MAX_RESULTS];
private final boolean mUseFullEditDistance;
@@ -83,7 +83,8 @@ public class BinaryDictionary extends Dictionary {
}
private native long openNative(String sourceDir, long dictOffset, long dictSize,
- int typedLetterMultiplier, int fullWordMultiplier, int maxWordLength, int maxWords);
+ int typedLetterMultiplier, int fullWordMultiplier, int maxWordLength, int maxWords,
+ int maxPredictions);
private native void closeNative(long dict);
private native int getFrequencyNative(long dict, int[] word, int wordLength);
private native boolean isValidBigramNative(long dict, int[] word1, int[] word2);
@@ -91,78 +92,59 @@ public class BinaryDictionary extends Dictionary {
int[] yCoordinates, int[] times, int[] pointerIds, int[] inputCodes, int codesSize,
int commitPoint, boolean isGesture,
int[] prevWordCodePointArray, boolean useFullEditDistance, char[] outputChars,
- int[] scores, int[] outputIndices);
- private native int getBigramsNative(long dict, int[] prevWord, int prevWordLength,
- int[] inputCodes, int inputCodesLength, char[] outputChars, int[] scores,
- int maxWordLength, int maxBigrams);
+ int[] outputScores, int[] outputIndices, int[] outputTypes);
private static native float calcNormalizedScoreNative(
char[] before, int beforeLength, char[] after, int afterLength, int score);
private static native int editDistanceNative(
char[] before, int beforeLength, char[] after, int afterLength);
private final void loadDictionary(String path, long startOffset, long length) {
- mNativeDict = openNative(path, startOffset, length,
- TYPED_LETTER_MULTIPLIER, FULL_WORD_SCORE_MULTIPLIER, MAX_WORD_LENGTH, MAX_WORDS);
+ mNativeDict = openNative(path, startOffset, length, TYPED_LETTER_MULTIPLIER,
+ FULL_WORD_SCORE_MULTIPLIER, MAX_WORD_LENGTH, MAX_WORDS, MAX_PREDICTIONS);
}
@Override
- public ArrayList getBigrams(final WordComposer codes,
- final CharSequence previousWord) {
- if (mNativeDict == 0) return null;
+ public ArrayList getSuggestions(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo) {
+ if (!isValidDictionary()) return null;
+ Arrays.fill(mInputCodes, WordComposer.NOT_A_CODE);
+ Arrays.fill(mOutputChars, (char) 0);
+ Arrays.fill(mOutputScores, 0);
+ // TODO: toLowerCase in the native code
+ final int[] prevWordCodePointArray = (null == prevWord)
+ ? null : StringUtils.toCodePointArray(prevWord.toString());
+ final int composerSize = composer.size();
- int[] codePoints = StringUtils.toCodePointArray(previousWord.toString());
- Arrays.fill(mOutputChars_bigrams, (char) 0);
- Arrays.fill(mBigramScores, 0);
-
- int codesSize = codes.size();
- Arrays.fill(mInputCodes, -1);
- if (codesSize > 0) {
- mInputCodes[0] = codes.getCodeAt(0);
+ final boolean isGesture = composer.isBatchMode();
+ if (composerSize <= 1 || !isGesture) {
+ if (composerSize > MAX_WORD_LENGTH - 1) return null;
+ for (int i = 0; i < composerSize; i++) {
+ mInputCodes[i] = composer.getCodeAt(i);
+ }
}
- int count = getBigramsNative(mNativeDict, codePoints, codePoints.length, mInputCodes,
- codesSize, mOutputChars_bigrams, mBigramScores, MAX_WORD_LENGTH, MAX_BIGRAMS);
- if (count > MAX_BIGRAMS) {
- count = MAX_BIGRAMS;
- }
+ final InputPointers ips = composer.getInputPointers();
+ final int codesSize = isGesture ? ips.getPointerSize() : composerSize;
+ // proximityInfo and/or prevWordForBigrams may not be null.
+ final int tmpCount = getSuggestionsNative(mNativeDict,
+ proximityInfo.getNativeProximityInfo(), ips.getXCoordinates(),
+ ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(),
+ mInputCodes, codesSize, 0 /* commitPoint */, isGesture, prevWordCodePointArray,
+ mUseFullEditDistance, mOutputChars, mOutputScores, mSpaceIndices, mOutputTypes);
+ final int count = Math.min(tmpCount, MAX_PREDICTIONS);
final ArrayList suggestions = new ArrayList();
for (int j = 0; j < count; ++j) {
- if (codesSize > 0 && mBigramScores[j] < 1) break;
+ if (composerSize > 0 && mOutputScores[j] < 1) break;
final int start = j * MAX_WORD_LENGTH;
int len = 0;
- while (len < MAX_WORD_LENGTH && mOutputChars_bigrams[start + len] != 0) {
+ while (len < MAX_WORD_LENGTH && mOutputChars[start + len] != 0) {
++len;
}
if (len > 0) {
- suggestions.add(new SuggestedWordInfo(
- new String(mOutputChars_bigrams, start, len),
- mBigramScores[j], SuggestedWordInfo.KIND_CORRECTION, mDictType));
- }
- }
- return suggestions;
- }
-
- // proximityInfo and/or prevWordForBigrams may not be null.
- @Override
- public ArrayList getWords(final WordComposer codes,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
- final int count = getSuggestions(codes, prevWordForBigrams, proximityInfo, mOutputChars,
- mScores, mSpaceIndices);
-
- final ArrayList suggestions = new ArrayList();
- for (int j = 0; j < count; ++j) {
- if (mScores[j] < 1) break;
- final int start = j * MAX_WORD_LENGTH;
- int len = 0;
- while (len < MAX_WORD_LENGTH && mOutputChars[start + len] != 0) {
- ++len;
- }
- if (len > 0) {
- // TODO: actually get the kind from native code
suggestions.add(new SuggestedWordInfo(
new String(mOutputChars, start, len),
- mScores[j], SuggestedWordInfo.KIND_CORRECTION, mDictType));
+ mOutputScores[j], SuggestedWordInfo.KIND_CORRECTION, mDictType));
}
}
return suggestions;
@@ -172,41 +154,6 @@ public class BinaryDictionary extends Dictionary {
return mNativeDict != 0;
}
- // proximityInfo may not be null.
- /* package for test */ int getSuggestions(final WordComposer codes,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo,
- char[] outputChars, int[] scores, int[] spaceIndices) {
- if (!isValidDictionary()) return -1;
-
- final int codesSize = codes.size();
- // Won't deal with really long words.
- if (codesSize > MAX_WORD_LENGTH - 1) return -1;
-
- Arrays.fill(mInputCodes, WordComposer.NOT_A_CODE);
- for (int i = 0; i < codesSize; i++) {
- mInputCodes[i] = codes.getCodeAt(i);
- }
- Arrays.fill(outputChars, (char) 0);
- Arrays.fill(scores, 0);
-
- // TODO: toLowerCase in the native code
- final int[] prevWordCodePointArray = (null == prevWordForBigrams)
- ? null : StringUtils.toCodePointArray(prevWordForBigrams.toString());
-
- int[] emptyArray = new int[codesSize];
- Arrays.fill(emptyArray, 0);
-
- //final int commitPoint = codes.getCommitPoint();
- //codes.clearCommitPoint();
-
- final InputPointers ips = codes.getInputPointers();
-
- return getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(),
- ips.getXCoordinates(), ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(),
- mInputCodes, codesSize, 0 /* unused */, false, prevWordCodePointArray,
- mUseFullEditDistance, outputChars, scores, spaceIndices);
- }
-
public static float calcNormalizedScore(String before, String after, int score) {
return calcNormalizedScoreNative(before.toCharArray(), before.length(),
after.toCharArray(), after.length(), score);
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 37eced5d6..236c198ad 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -149,7 +149,8 @@ public class BinaryDictionaryFileDumper {
final int MODE_MAX = NONE;
final Uri.Builder wordListUriBuilder = getProviderUriBuilder(id);
- final String outputFileName = BinaryDictionaryGetter.getCacheFileName(id, locale, context);
+ final String finalFileName = BinaryDictionaryGetter.getCacheFileName(id, locale, context);
+ final String tempFileName = finalFileName + ".tmp";
for (int mode = MODE_MIN; mode <= MODE_MAX; ++mode) {
InputStream originalSourceStream = null;
@@ -165,7 +166,10 @@ public class BinaryDictionaryFileDumper {
if (null == afd) return null;
originalSourceStream = afd.createInputStream();
// Open output.
- outputFile = new File(outputFileName);
+ outputFile = new File(tempFileName);
+ // Just to be sure, delete the file. This may fail silently, and return false: this
+ // is the right thing to do, as we just want to continue anyway.
+ outputFile.delete();
outputStream = new FileOutputStream(outputFile);
// Get the appropriate decryption method for this try
switch (mode) {
@@ -194,14 +198,20 @@ public class BinaryDictionaryFileDumper {
break;
}
checkMagicAndCopyFileTo(new BufferedInputStream(inputStream), outputStream);
+ outputStream.flush();
+ outputStream.close();
+ final File finalFile = new File(finalFileName);
+ if (!outputFile.renameTo(finalFile)) {
+ throw new IOException("Can't move the file to its final name");
+ }
wordListUriBuilder.appendQueryParameter(QUERY_PARAMETER_DELETE_RESULT,
QUERY_PARAMETER_SUCCESS);
if (0 >= resolver.delete(wordListUriBuilder.build(), null, null)) {
Log.e(TAG, "Could not have the dictionary pack delete a word list");
}
- BinaryDictionaryGetter.removeFilesWithIdExcept(context, id, outputFile);
+ BinaryDictionaryGetter.removeFilesWithIdExcept(context, id, finalFile);
// Success! Close files (through the finally{} clause) and return.
- return AssetFileAddress.makeFromFileName(outputFileName);
+ return AssetFileAddress.makeFromFileName(finalFileName);
} catch (Exception e) {
if (DEBUG) {
Log.i(TAG, "Can't open word list in mode " + mode + " : " + e);
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index 0835450c1..fd40aa6da 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -16,6 +16,8 @@
package com.android.inputmethod.latin;
+import android.text.TextUtils;
+
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
@@ -50,24 +52,17 @@ public abstract class Dictionary {
}
/**
- * Searches for words in the dictionary that match the characters in the composer. Matched
- * words are returned as an ArrayList.
+ * Searches for suggestions for a given context. For the moment the context is only the
+ * previous word.
* @param composer the key sequence to match with coordinate info, as a WordComposer
- * @param prevWordForBigrams the previous word, or null if none
+ * @param prevWord the previous word, or null if none
* @param proximityInfo the object for key proximity. May be ignored by some implementations.
- * @return the list of suggestions
+ * @return the list of suggestions (possibly null if none)
*/
- abstract public ArrayList getWords(final WordComposer composer,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo);
-
- /**
- * Searches for pairs in the bigram dictionary that matches the previous word.
- * @param composer the key sequence to match
- * @param previousWord the word before
- * @return the list of suggestions
- */
- public abstract ArrayList getBigrams(final WordComposer composer,
- final CharSequence previousWord);
+ // TODO: pass more context than just the previous word, to enable better suggestions (n-gram
+ // and more)
+ abstract public ArrayList getSuggestions(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo);
/**
* Checks if the given word occurs in the dictionary
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index dcc53c59f..88ac07d7a 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -55,38 +55,19 @@ public class DictionaryCollection extends Dictionary {
}
@Override
- public ArrayList getWords(final WordComposer composer,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
+ public ArrayList getSuggestions(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo) {
final CopyOnWriteArrayList dictionaries = mDictionaries;
if (dictionaries.isEmpty()) return null;
// To avoid creating unnecessary objects, we get the list out of the first
// dictionary and add the rest to it if not null, hence the get(0)
- ArrayList suggestions = dictionaries.get(0).getWords(composer,
- prevWordForBigrams, proximityInfo);
+ ArrayList suggestions = dictionaries.get(0).getSuggestions(composer,
+ prevWord, proximityInfo);
if (null == suggestions) suggestions = new ArrayList();
final int length = dictionaries.size();
for (int i = 0; i < length; ++ i) {
- final ArrayList sugg = dictionaries.get(i).getWords(composer,
- prevWordForBigrams, proximityInfo);
- if (null != sugg) suggestions.addAll(sugg);
- }
- return suggestions;
- }
-
- @Override
- public ArrayList getBigrams(final WordComposer composer,
- final CharSequence previousWord) {
- final CopyOnWriteArrayList dictionaries = mDictionaries;
- if (dictionaries.isEmpty()) return null;
- // To avoid creating unnecessary objects, we get the list out of the first
- // dictionary and add the rest to it if not null, hence the get(0)
- ArrayList suggestions = dictionaries.get(0).getBigrams(composer,
- previousWord);
- if (null == suggestions) suggestions = new ArrayList();
- final int length = dictionaries.size();
- for (int i = 0; i < length; ++ i) {
- final ArrayList sugg =
- dictionaries.get(i).getBigrams(composer, previousWord);
+ final ArrayList sugg = dictionaries.get(i).getSuggestions(composer,
+ prevWord, proximityInfo);
if (null != sugg) suggestions.addAll(sugg);
}
return suggestions;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index 1cda9f257..016530abb 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -192,41 +192,13 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
@Override
- public ArrayList getWords(final WordComposer codes,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
+ public ArrayList getSuggestions(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo) {
asyncReloadDictionaryIfRequired();
- return getWordsInner(codes, prevWordForBigrams, proximityInfo);
- }
-
- protected final ArrayList getWordsInner(final WordComposer codes,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
- // Ensure that there are no concurrent calls to getWords. If there are, do nothing and
- // return.
if (mLocalDictionaryController.tryLock()) {
try {
if (mBinaryDictionary != null) {
- return mBinaryDictionary.getWords(codes, prevWordForBigrams, proximityInfo);
- }
- } finally {
- mLocalDictionaryController.unlock();
- }
- }
- return null;
- }
-
- @Override
- public ArrayList getBigrams(final WordComposer codes,
- final CharSequence previousWord) {
- asyncReloadDictionaryIfRequired();
- return getBigramsInner(codes, previousWord);
- }
-
- protected ArrayList getBigramsInner(final WordComposer codes,
- final CharSequence previousWord) {
- if (mLocalDictionaryController.tryLock()) {
- try {
- if (mBinaryDictionary != null) {
- return mBinaryDictionary.getBigrams(codes, previousWord);
+ return mBinaryDictionary.getSuggestions(composer, prevWord, proximityInfo);
}
} finally {
mLocalDictionaryController.unlock();
diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 76213c0da..5d7995dc2 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -17,6 +17,7 @@
package com.android.inputmethod.latin;
import android.content.Context;
+import android.text.TextUtils;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
@@ -247,23 +248,36 @@ public class ExpandableDictionary extends Dictionary {
}
@Override
- public ArrayList getWords(final WordComposer codes,
- final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
+ public ArrayList getSuggestions(final WordComposer composer,
+ final CharSequence prevWord, final ProximityInfo proximityInfo) {
+ if (reloadDictionaryIfRequired()) return null;
+ if (composer.size() <= 1) {
+ if (composer.size() >= BinaryDictionary.MAX_WORD_LENGTH) {
+ return null;
+ }
+ final ArrayList suggestions =
+ getWordsInner(composer, prevWord, proximityInfo);
+ return suggestions;
+ } else {
+ if (TextUtils.isEmpty(prevWord)) return null;
+ final ArrayList suggestions = new ArrayList();
+ runBigramReverseLookUp(prevWord, suggestions);
+ return suggestions;
+ }
+ }
+
+ // This reloads the dictionary if required, and returns whether it's currently updating its
+ // contents or not.
+ // @VisibleForTesting
+ boolean reloadDictionaryIfRequired() {
synchronized (mUpdatingLock) {
// If we need to update, start off a background task
if (mRequiresReload) startDictionaryLoadingTaskLocked();
- // Currently updating contacts, don't return any results.
- if (mUpdatingDictionary) return null;
+ return mUpdatingDictionary;
}
- if (codes.size() >= BinaryDictionary.MAX_WORD_LENGTH) {
- return null;
- }
- final ArrayList suggestions =
- getWordsInner(codes, prevWordForBigrams, proximityInfo);
- return suggestions;
}
- protected final ArrayList getWordsInner(final WordComposer codes,
+ protected ArrayList getWordsInner(final WordComposer codes,
final CharSequence prevWordForBigrams, final ProximityInfo proximityInfo) {
final ArrayList suggestions = new ArrayList();
mInputLength = codes.size();
@@ -589,16 +603,6 @@ public class ExpandableDictionary extends Dictionary {
return searchWord(childNode.mChildren, word, depth + 1, childNode);
}
- // @VisibleForTesting
- boolean reloadDictionaryIfRequired() {
- synchronized (mUpdatingLock) {
- // If we need to update, start off a background task
- if (mRequiresReload) startDictionaryLoadingTaskLocked();
- // Currently updating contacts, don't return any results.
- return mUpdatingDictionary;
- }
- }
-
private void runBigramReverseLookUp(final CharSequence previousWord,
final ArrayList suggestions) {
// Search for the lowercase version of the word only, because that's where bigrams
@@ -610,17 +614,6 @@ public class ExpandableDictionary extends Dictionary {
}
}
- @Override
- public ArrayList getBigrams(final WordComposer codes,
- final CharSequence previousWord) {
- if (!reloadDictionaryIfRequired()) {
- final ArrayList suggestions = new ArrayList();
- runBigramReverseLookUp(previousWord, suggestions);
- return suggestions;
- }
- return null;
- }
-
/**
* Used for testing purposes and in the spell checker
* This function will wait for loading from database to be done
diff --git a/java/src/com/android/inputmethod/latin/InputPointers.java b/java/src/com/android/inputmethod/latin/InputPointers.java
index 9d77d4e96..5ad53480f 100644
--- a/java/src/com/android/inputmethod/latin/InputPointers.java
+++ b/java/src/com/android/inputmethod/latin/InputPointers.java
@@ -18,7 +18,7 @@ package com.android.inputmethod.latin;
import java.util.Arrays;
-// TODO: Add unit test
+// TODO: This class is not thread-safe.
public class InputPointers {
private final ScalableIntArray mXCoordinates = new ScalableIntArray();
private final ScalableIntArray mYCoordinates = new ScalableIntArray();
@@ -55,21 +55,15 @@ public class InputPointers {
/**
* Append the pointers in the specified {@link InputPointers} to the end of this.
- * @param src the source {@link InputPointers} to append the pointers.
+ * @param src the source {@link InputPointers} to read the data from.
* @param startPos the starting index of the pointers in {@code src}.
* @param length the number of pointers to be appended.
*/
public void append(InputPointers src, int startPos, int length) {
- final int currentLength = getPointerSize();
- final int newLength = currentLength + length;
- mXCoordinates.ensureCapacity(newLength);
- mYCoordinates.ensureCapacity(newLength);
- mPointerIds.ensureCapacity(newLength);
- mTimes.ensureCapacity(newLength);
- System.arraycopy(src.getXCoordinates(), startPos, getXCoordinates(), currentLength, length);
- System.arraycopy(src.getYCoordinates(), startPos, getYCoordinates(), currentLength, length);
- System.arraycopy(src.getPointerIds(), startPos, getPointerIds(), currentLength, length);
- System.arraycopy(src.getTimes(), startPos, getTimes(), currentLength, length);
+ mXCoordinates.append(src.mXCoordinates, startPos, length);
+ mYCoordinates.append(src.mYCoordinates, startPos, length);
+ mPointerIds.append(src.mPointerIds, startPos, length);
+ mTimes.append(src.mTimes, startPos, length);
}
public void reset() {
@@ -118,24 +112,23 @@ public class InputPointers {
}
public void add(int val) {
- ensureCapacity(mLength);
+ final int nextLength = mLength + 1;
+ ensureCapacity(nextLength);
mArray[mLength] = val;
- ++mLength;
+ mLength = nextLength;
}
- public void ensureCapacity(int minimumCapacity) {
+ private void ensureCapacity(int minimumCapacity) {
if (mArray.length < minimumCapacity) {
final int nextCapacity = mArray.length * 2;
- grow(minimumCapacity > nextCapacity ? minimumCapacity : nextCapacity);
+ // The following is the same as newLength = Math.max(minimumCapacity, nextCapacity);
+ final int newLength = minimumCapacity > nextCapacity
+ ? minimumCapacity
+ : nextCapacity;
+ mArray = Arrays.copyOf(mArray, newLength);
}
}
- private void grow(int newCapacity) {
- final int[] newArray = new int[newCapacity];
- System.arraycopy(mArray, 0, newArray, 0, mLength);
- mArray = newArray;
- }
-
public int getLength() {
return mLength;
}
@@ -149,14 +142,23 @@ public class InputPointers {
return mArray;
}
- public void copy(ScalableIntArray ip) {
- mArray = Arrays.copyOf(ip.mArray, ip.mArray.length);
- mLength = ip.mLength;
- }
-
public void set(ScalableIntArray ip) {
mArray = ip.mArray;
mLength = ip.mLength;
}
+
+ public void copy(ScalableIntArray ip) {
+ ensureCapacity(ip.mLength);
+ System.arraycopy(ip.mArray, 0, mArray, 0, ip.mLength);
+ mLength = ip.mLength;
+ }
+
+ public void append(ScalableIntArray src, int startPos, int length) {
+ final int currentLength = mLength;
+ final int newLength = currentLength + length;
+ ensureCapacity(newLength);
+ System.arraycopy(src.mArray, startPos, mArray, currentLength, length);
+ mLength = newLength;
+ }
}
}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 4be2a1799..f27d32150 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -353,7 +353,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mPrefs = prefs;
LatinImeLogger.init(this, prefs);
if (ProductionFlag.IS_EXPERIMENTAL) {
- ResearchLogger.getInstance().init(this, prefs);
+ ResearchLogger.getInstance().init(this, prefs, mKeyboardSwitcher);
}
InputMethodManagerCompatWrapper.init(this);
SubtypeSwitcher.init(this);
@@ -689,6 +689,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
}
+ // Callback for the TargetApplicationGetter
@Override
public void onTargetApplicationKnown(final ApplicationInfo info) {
mTargetApplicationInfo = info;
@@ -997,7 +998,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
}
- public void commitTyped(final int separatorCode) {
+ private void commitTyped(final int separatorCode) {
if (!mWordComposer.isComposingWord()) return;
final CharSequence typedWord = mWordComposer.getTypedWord();
if (typedWord.length() > 0) {
@@ -1013,6 +1014,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
updateSuggestionsOrPredictions();
}
+ // Called from the KeyboardSwitcher which needs to know auto caps state to display
+ // the right layout.
public int getCurrentAutoCapsState() {
if (!mCurrentSettings.mAutoCap) return Constants.TextUtils.CAP_MODE_OFF;
@@ -1088,6 +1091,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|| codePoint == Keyboard.CODE_CLOSING_ANGLE_BRACKET;
}
+ // Callback for the SuggestionsView, to call when the "add to dictionary" hint is pressed.
@Override
public boolean addWordToUserDictionary(String word) {
mUserDictionary.addWordToUserDictionary(word, 128);
@@ -1285,6 +1289,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mConnection.endBatchEdit();
}
+ // Called from PointerTracker through the KeyboardActionListener interface
@Override
public void onTextInput(CharSequence text) {
mConnection.beginBatchEdit();
@@ -1348,6 +1353,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
+ // Called from PointerTracker through the KeyboardActionListener interface
@Override
public void onCancelInput() {
// User released a finger outside any key
@@ -1505,7 +1511,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// it entirely and resume suggestions on the previous word, we'd like to still
// have touch coordinates for it.
resetComposingState(false /* alsoResetLastComposedWord */);
- clearSuggestions();
}
if (isComposingWord) {
final int keyX, keyY;
@@ -1621,12 +1626,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
inputView.closing();
}
- public boolean isShowingPunctuationList() {
+ // TODO: make this private
+ // Outside LatinIME, only used by the test suite.
+ /* package for tests */ boolean isShowingPunctuationList() {
if (mSuggestionsView == null) return false;
return mCurrentSettings.mSuggestPuncList == mSuggestionsView.getSuggestions();
}
- public boolean isSuggestionsStripVisible() {
+ private boolean isSuggestionsStripVisible() {
if (mSuggestionsView == null)
return false;
if (mSuggestionsView.isShowingAddToDictionaryHint())
@@ -1638,7 +1645,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
return mCurrentSettings.isSuggestionsRequested(mDisplayOrientation);
}
- public void clearSuggestions() {
+ private void clearSuggestions() {
setSuggestions(SuggestedWords.EMPTY, false);
setAutoCorrectionIndicator(false);
}
@@ -1661,7 +1668,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
- public void updateSuggestionsOrPredictions() {
+ // TODO: rename this method to updateSuggestionStrip or simply updateSuggestions
+ private void updateSuggestionsOrPredictions() {
mHandler.cancelUpdateSuggestionStrip();
// Check if we have a suggestion engine attached.
@@ -1675,42 +1683,36 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
final String typedWord = mWordComposer.getTypedWord();
- final SuggestedWords suggestions;
if (!mWordComposer.isComposingWord() && !mCurrentSettings.mBigramPredictionEnabled) {
setPunctuationSuggestions();
return;
}
- if (!mWordComposer.isComposingWord()) {
- suggestions = updateBigramPredictions();
- } else {
- suggestions = updateSuggestions(typedWord);
- }
+ // Get the word on which we should search the bigrams. If we are composing a word, it's
+ // whatever is *before* the half-committed word in the buffer, hence 2; if we aren't, we
+ // should just skip whitespace if any, so 1.
+ // TODO: this is slow (2-way IPC) - we should probably cache this instead.
+ final CharSequence prevWord =
+ mConnection.getNthPreviousWord(mCurrentSettings.mWordSeparators,
+ mWordComposer.isComposingWord() ? 2 : 1);
+ SuggestedWords suggestedWords = mSuggest.getSuggestedWords(mWordComposer,
+ prevWord, mKeyboardSwitcher.getKeyboard().getProximityInfo(),
+ mCurrentSettings.mCorrectionEnabled);
+ suggestedWords = maybeRetrieveOlderSuggestions(typedWord, suggestedWords);
- if (null != suggestions && suggestions.size() > 0) {
- showSuggestions(suggestions, typedWord);
- } else {
- clearSuggestions();
- }
+ showSuggestions(suggestedWords, typedWord);
}
- private SuggestedWords updateSuggestions(final CharSequence typedWord) {
- // TODO: May need a better way of retrieving previous word
- final CharSequence prevWord =
- mConnection.getNthPreviousWord(mCurrentSettings.mWordSeparators, 2);
- // getSuggestedWords handles gracefully a null value of prevWord
- final SuggestedWords suggestedWords = mSuggest.getSuggestedWords(mWordComposer,
- prevWord, mKeyboardSwitcher.getKeyboard().getProximityInfo(),
- // !mWordComposer.isComposingWord() is known to be false
- mCurrentSettings.mCorrectionEnabled, !mWordComposer.isComposingWord());
-
- // Basically, we update the suggestion strip only when suggestion count > 1. However,
- // there is an exception: We update the suggestion strip whenever typed word's length
- // is 1 or typed word is found in dictionary, regardless of suggestion count. Actually,
- // in most cases, suggestion count is 1 when typed word's length is 1, but we do always
- // need to clear the previous state when the user starts typing a word (i.e. typed word's
- // length == 1).
- if (suggestedWords.size() > 1 || typedWord.length() == 1
+ private SuggestedWords maybeRetrieveOlderSuggestions(final CharSequence typedWord,
+ final SuggestedWords suggestedWords) {
+ // TODO: consolidate this into getSuggestedWords
+ // We update the suggestion strip only when we have some suggestions to show, i.e. when
+ // the suggestion count is > 1; else, we leave the old suggestions, with the typed word
+ // replaced with the new one. However, when the word is a dictionary word, or when the
+ // length of the typed word is 1 or 0 (after a deletion typically), we do want to remove the
+ // old suggestions. Also, if we are showing the "add to dictionary" hint, we need to
+ // revert to suggestions - although it is unclear how we can come here if it's displayed.
+ if (suggestedWords.size() > 1 || typedWord.length() <= 1
|| !suggestedWords.mTypedWordValid
|| mSuggestionsView.isShowingAddToDictionaryHint()) {
return suggestedWords;
@@ -1733,7 +1735,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private void showSuggestions(final SuggestedWords suggestedWords,
final CharSequence typedWord) {
- // This method is only ever called by updateSuggestions or updateBigramPredictions.
+ if (null == suggestedWords || suggestedWords.size() <= 0) {
+ clearSuggestions();
+ return;
+ }
final CharSequence autoCorrection;
if (suggestedWords.size() > 0) {
if (suggestedWords.mWillAutoCorrect) {
@@ -1781,6 +1786,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
+ // Called from SuggestionsView through the SuggestionsView.Listener interface
@Override
public void pickSuggestionManually(final int index, final CharSequence suggestion,
final int x, final int y) {
@@ -1891,16 +1897,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
separatorCode, prevWord);
}
- private SuggestedWords updateBigramPredictions() {
- final CharSequence prevWord =
- mConnection.getNthPreviousWord(mCurrentSettings.mWordSeparators, 1);
- return mSuggest.getSuggestedWords(mWordComposer,
- prevWord, mKeyboardSwitcher.getKeyboard().getProximityInfo(),
- // !mWordComposer.isComposingWord() is known to be true
- mCurrentSettings.mCorrectionEnabled, !mWordComposer.isComposingWord());
- }
-
- public void setPunctuationSuggestions() {
+ private void setPunctuationSuggestions() {
if (mCurrentSettings.mBigramPredictionEnabled) {
clearSuggestions();
} else {
@@ -2008,16 +2005,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mHandler.postUpdateSuggestionStrip();
}
+ // Used by the RingCharBuffer
public boolean isWordSeparator(int code) {
return mCurrentSettings.isWordSeparator(code);
}
- public boolean preferCapitalization() {
- return mWordComposer.isFirstCharCapitalized();
- }
-
// Notify that language or mode have been changed and toggleLanguage will update KeyboardID
- // according to new language or mode.
+ // according to new language or mode. Called from SubtypeSwitcher.
public void onRefreshKeyboard() {
// When the device locale is changed in SetupWizard etc., this method may get called via
// onConfigurationChanged before SoftInputWindow is shown.
@@ -2034,16 +2028,20 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
// TODO: Remove this method from {@link LatinIME} and move {@link FeedbackManager} to
- // {@link KeyboardSwitcher}.
+ // {@link KeyboardSwitcher}. Called from KeyboardSwitcher
public void hapticAndAudioFeedback(final int primaryCode) {
mFeedbackManager.hapticAndAudioFeedback(primaryCode, mKeyboardSwitcher.getKeyboardView());
}
+ // Callback called by PointerTracker through the KeyboardActionListener. This is called when a
+ // key is depressed; release matching call is onReleaseKey below.
@Override
public void onPressKey(int primaryCode) {
mKeyboardSwitcher.onPressKey(primaryCode);
}
+ // Callback by PointerTracker through the KeyboardActionListener. This is called when a key
+ // is released; press matching call is onPressKey above.
@Override
public void onReleaseKey(int primaryCode, boolean withSliding) {
mKeyboardSwitcher.onReleaseKey(primaryCode, withSliding);
@@ -2088,6 +2086,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
launchSettingsClass(SettingsActivity.class);
}
+ // Called from debug code only
public void launchDebugSettings() {
launchSettingsClass(DebugSettingsActivity.class);
}
diff --git a/java/src/com/android/inputmethod/latin/ResearchLog.java b/java/src/com/android/inputmethod/latin/ResearchLog.java
new file mode 100644
index 000000000..1de5cb36a
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/ResearchLog.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.content.SharedPreferences;
+import android.os.SystemClock;
+import android.util.JsonWriter;
+import android.util.Log;
+import android.view.inputmethod.CompletionInfo;
+
+import com.android.inputmethod.keyboard.Key;
+import com.android.inputmethod.latin.ResearchLogger.LogUnit;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.define.ProductionFlag;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Logs the use of the LatinIME keyboard.
+ *
+ * This class logs operations on the IME keyboard, including what the user has typed.
+ * Data is stored locally in a file in app-specific storage.
+ *
+ * This functionality is off by default. See {@link ProductionFlag#IS_EXPERIMENTAL}.
+ */
+public class ResearchLog {
+ private static final String TAG = ResearchLog.class.getSimpleName();
+ private static final JsonWriter NULL_JSON_WRITER = new JsonWriter(
+ new OutputStreamWriter(new NullOutputStream()));
+
+ final ScheduledExecutorService mExecutor;
+ /* package */ final File mFile;
+ private JsonWriter mJsonWriter = NULL_JSON_WRITER; // should never be null
+
+ private int mLoggingState;
+ private static final int LOGGING_STATE_UNSTARTED = 0;
+ private static final int LOGGING_STATE_RUNNING = 1;
+ private static final int LOGGING_STATE_STOPPING = 2;
+ private static final int LOGGING_STATE_STOPPED = 3;
+ private static final long FLUSH_DELAY_IN_MS = 1000 * 5;
+
+ private static class NullOutputStream extends OutputStream {
+ /** {@inheritDoc} */
+ @Override
+ public void write(byte[] buffer, int offset, int count) {
+ // nop
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void write(byte[] buffer) {
+ // nop
+ }
+
+ @Override
+ public void write(int oneByte) {
+ }
+ }
+
+ public ResearchLog(File outputFile) {
+ mExecutor = Executors.newSingleThreadScheduledExecutor();
+ if (outputFile == null) {
+ throw new IllegalArgumentException();
+ }
+ mFile = outputFile;
+ mLoggingState = LOGGING_STATE_UNSTARTED;
+ }
+
+ public synchronized void start() throws IOException {
+ switch (mLoggingState) {
+ case LOGGING_STATE_UNSTARTED:
+ mJsonWriter = new JsonWriter(new BufferedWriter(new FileWriter(mFile)));
+ mJsonWriter.setLenient(true);
+ mJsonWriter.beginArray();
+ mLoggingState = LOGGING_STATE_RUNNING;
+ break;
+ case LOGGING_STATE_RUNNING:
+ case LOGGING_STATE_STOPPING:
+ case LOGGING_STATE_STOPPED:
+ break;
+ }
+ }
+
+ public synchronized void stop() {
+ switch (mLoggingState) {
+ case LOGGING_STATE_UNSTARTED:
+ mLoggingState = LOGGING_STATE_STOPPED;
+ break;
+ case LOGGING_STATE_RUNNING:
+ mExecutor.submit(new Callable