aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/values-af/strings.xml9
-rw-r--r--java/res/values-am/strings.xml3
-rw-r--r--java/res/values-ar/strings.xml9
-rw-r--r--java/res/values-be/strings.xml3
-rw-r--r--java/res/values-bg/strings.xml3
-rw-r--r--java/res/values-ca/strings.xml3
-rw-r--r--java/res/values-cs/strings.xml3
-rw-r--r--java/res/values-da/strings.xml3
-rw-r--r--java/res/values-de/strings.xml3
-rw-r--r--java/res/values-el/strings.xml5
-rw-r--r--java/res/values-en-rGB/strings.xml3
-rw-r--r--java/res/values-es-rUS/strings.xml7
-rw-r--r--java/res/values-es/strings.xml5
-rw-r--r--java/res/values-et/strings.xml3
-rw-r--r--java/res/values-fa/strings.xml9
-rw-r--r--java/res/values-fi/strings.xml3
-rw-r--r--java/res/values-fr/strings.xml3
-rw-r--r--java/res/values-hi/strings.xml5
-rw-r--r--java/res/values-hr/strings.xml3
-rw-r--r--java/res/values-hu/strings.xml3
-rw-r--r--java/res/values-in/strings.xml5
-rw-r--r--java/res/values-is/strings.xml5
-rw-r--r--java/res/values-it/strings.xml3
-rw-r--r--java/res/values-iw/strings.xml3
-rw-r--r--java/res/values-ja/strings.xml3
-rw-r--r--java/res/values-ka/strings.xml5
-rw-r--r--java/res/values-ko/strings.xml3
-rw-r--r--java/res/values-lt/strings.xml3
-rw-r--r--java/res/values-lv/strings.xml3
-rw-r--r--java/res/values-mk/strings.xml5
-rw-r--r--java/res/values-mn/strings.xml5
-rw-r--r--java/res/values-ms/strings.xml5
-rw-r--r--java/res/values-nb/strings.xml7
-rw-r--r--java/res/values-nl/strings.xml3
-rw-r--r--java/res/values-pl/strings.xml3
-rw-r--r--java/res/values-pt-rPT/strings.xml3
-rw-r--r--java/res/values-pt/strings.xml3
-rw-r--r--java/res/values-rm/strings.xml6
-rw-r--r--java/res/values-ro/strings.xml3
-rw-r--r--java/res/values-ru/strings.xml3
-rw-r--r--java/res/values-sk/strings.xml9
-rw-r--r--java/res/values-sl/strings.xml3
-rw-r--r--java/res/values-sr/strings.xml3
-rw-r--r--java/res/values-sv/strings.xml3
-rw-r--r--java/res/values-sw/strings.xml3
-rw-r--r--java/res/values-th/strings.xml3
-rw-r--r--java/res/values-tl/strings.xml3
-rw-r--r--java/res/values-tr/strings.xml3
-rw-r--r--java/res/values-uk/strings.xml3
-rw-r--r--java/res/values-vi/strings.xml3
-rw-r--r--java/res/values-zh-rCN/strings.xml5
-rw-r--r--java/res/values-zh-rTW/strings.xml3
-rw-r--r--java/res/values-zu/strings.xml3
-rw-r--r--java/res/values/attrs.xml1
-rw-r--r--java/res/values/strings.xml7
-rw-r--r--java/res/xml-sw600dp/key_styles_common.xml19
-rw-r--r--java/res/xml-sw768dp/key_styles_common.xml21
-rw-r--r--java/res/xml/key_styles_common.xml36
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardId.java70
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java26
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardView.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java38
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java188
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java39
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java81
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java854
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java1
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java2
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java2
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java179
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java10
72 files changed, 855 insertions, 952 deletions
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 5bfd9d9a4..18e63f317 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -44,10 +44,8 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Verstek"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Stel kontakname voor"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Gebruik name van kontakte vir voorstelle en korreksies"</string>
- <!-- no translation found for use_double_space_period (8781529969425082860) -->
- <skip />
- <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
- <skip />
+ <string name="use_double_space_period" msgid="8781529969425082860">"Dubbelspasie-punt"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dubbeltik op spasiebalk voeg \'n punt in, gevolg deur \'n spasie"</string>
<string name="auto_cap" msgid="1719746674854628252">"Outohoofletters"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Die eerste woord van elke sin moet met \'n hoofletter begin"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Voeg woordeboeke by"</string>
@@ -76,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Vorige"</string>
<string name="label_done_key" msgid="2441578748772529288">"Klaar"</string>
<string name="label_send_key" msgid="2815056534433717444">"Stuur"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Laat wag"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Wag"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Koppel \'n kopstuk om te hoor hoe wagwoordsleutels hardop gesê word."</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 9794d2e66..4f66a1676 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"ቀዳሚ"</string>
<string name="label_done_key" msgid="2441578748772529288">"ተከናውኗል"</string>
<string name="label_send_key" msgid="2815056534433717444">" ይላኩ"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"ላፍታ አቁም"</string>
<string name="label_wait_key" msgid="6402152600878093134">"ቆይ"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"የይለፍቃል ቁልፎች ጮክ በለው ሲነገሩ ለመስማት የጆሮ ማዳመጫ ሰካ::"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index f4897a881..a3877ed49 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -44,10 +44,8 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"افتراضي"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"اقتراح أسماء جهات الاتصال"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"استخدام الأسماء من جهات الاتصال للاقتراحات والتصحيحات"</string>
- <!-- no translation found for use_double_space_period (8781529969425082860) -->
- <skip />
- <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
- <skip />
+ <string name="use_double_space_period" msgid="8781529969425082860">"نقطة المسافة المزدوجة"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"يؤدي النقر نقرًا مزدوجًا على مفتاح المسافة إلى إدخال نقطة متبوعة بمسافة"</string>
<string name="auto_cap" msgid="1719746674854628252">"أحرف كبيرة تلقائيًا"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"كتابة الحرف الأول من كل جملة بحرف كبير."</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"القواميس الإضافية"</string>
@@ -76,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"السابق"</string>
<string name="label_done_key" msgid="2441578748772529288">"تم"</string>
<string name="label_send_key" msgid="2815056534433717444">"إرسال"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"أ ب ج"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"٣٢١؟"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"٣٢١"</string>
<string name="label_pause_key" msgid="181098308428035340">"توقف مؤقت"</string>
<string name="label_wait_key" msgid="6402152600878093134">"انتظار"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور منطوقة بصوت عالٍ."</string>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index f5716b7fc..bf396943f 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Назад"</string>
<string name="label_done_key" msgid="2441578748772529288">"Гатова"</string>
<string name="label_send_key" msgid="2815056534433717444">"Адправіць"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Паўза"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Чакае"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Каб праслухаць паролi, падключыце гарнiтуру."</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 20d398e88..27d3ac7d5 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Пред."</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Изпращане"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Пауза"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Чака"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Включете слушалки, за да чуете клавишите за паролата на висок глас."</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index bf6122ff1..0182dd492 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Ant."</string>
<string name="label_done_key" msgid="2441578748772529288">"Fet"</string>
<string name="label_send_key" msgid="2815056534433717444">"Envia"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Espera"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Connecta un auricular per escoltar les claus de la contrasenya en veu alta."</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index 9c80863dc..806ac1291 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Před."</string>
<string name="label_done_key" msgid="2441578748772529288">"Hotovo"</string>
<string name="label_send_key" msgid="2815056534433717444">"Odeslat"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauza"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Čekat"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Chcete-li slyšet, které klávesy jste při zadávání hesla stiskli, připojte sluchátka."</string>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 6cb105012..4fbfe905d 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Forr."</string>
<string name="label_done_key" msgid="2441578748772529288">"Udfør"</string>
<string name="label_send_key" msgid="2815056534433717444">"Send"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Vent"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Tilslut et headset for at høre indtastningen blive læst højt ved angivelse af adgangskode."</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index c844ec82b..1fad9e710 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Zurück"</string>
<string name="label_done_key" msgid="2441578748772529288">"Fertig"</string>
<string name="label_send_key" msgid="2815056534433717444">"Senden"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Warten"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Schließen Sie ein Headset an, um das Passwort gesprochen zu hören."</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 1ab64f9da..2b99e7e00 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -44,7 +44,7 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Προεπιλογή"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Πρόταση ονομάτων επαφών"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Χρησιμοποιήστε ονόματα από τις Επαφές για προτάσεις και διορθ."</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"Τελεία με διπλό πάτημα πλήκρου διαστ."</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"Τελεία με διπλό πάτημα πλήκτρ.διαστ."</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Το διπλό πάτημα του πλήκτρ.διαστ. εισάγει μια τελεία και ένα κενό"</string>
<string name="auto_cap" msgid="1719746674854628252">"Αυτόματη χρήση κεφαλαίων"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Χρήση κεφαλαίου στην πρώτη λέξη κάθε πρότασης"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Προηγ"</string>
<string name="label_done_key" msgid="2441578748772529288">"Τέλος"</string>
<string name="label_send_key" msgid="2815056534433717444">"Αποστολή"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ΑΒΓ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Παύση"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Αναμ."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Συνδέστε ένα σετ ακουστικών για να ακούσετε τα πλήκτρα του κωδικού πρόσβασης να εκφωνούνται δυνατά."</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index adfd9e309..652d5aa46 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -76,9 +76,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Prev"</string>
<string name="label_done_key" msgid="2441578748772529288">"Done"</string>
<string name="label_send_key" msgid="2815056534433717444">"Send"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Wait"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Plug in a headset to hear password keys spoken aloud."</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index b4302226b..9e87970de 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -44,8 +44,8 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predeterminada"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Sugerir nombres de contacto"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Usar nombres de los contactos para sugerencias y correcciones"</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"Doble espacio después de punto"</string>
- <string name="use_double_space_period_summary" msgid="6532892187247952799">"Si tocas dos veces la barra espaciadora, se inserta un punto seguido de un espacio."</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"Punto y doble espacio"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"Tocar dos veces la barra espaciadora inserta un punto y espacio."</string>
<string name="auto_cap" msgid="1719746674854628252">"Mayúsculas automáticas"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Escribe con mayúscula la primera palabra de cada frase"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Diccionarios complementarios"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Ant."</string>
<string name="label_done_key" msgid="2441578748772529288">"Listo"</string>
<string name="label_send_key" msgid="2815056534433717444">"Enviar"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Espera"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Enchufa tus auriculares para escuchar en voz alta qué teclas presionas al ingresar una contraseña."</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 37aa2c85e..24335e65a 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -44,7 +44,7 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predeterminado"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Sugerir contactos"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilizar nombres de contactos para sugerencias y correcciones"</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"Punto y doble espacio"</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"Punto y espacio"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Si tocas dos veces el espacio, se inserta un punto seguido de un espacio."</string>
<string name="auto_cap" msgid="1719746674854628252">"Mayúsculas automáticas"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Poner la primera letra de cada palabra en mayúscula"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Anterior"</string>
<string name="label_done_key" msgid="2441578748772529288">"Ok"</string>
<string name="label_send_key" msgid="2815056534433717444">"Enviar"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Espera"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Conecta un auricular para escuchar las contraseñas en voz alta."</string>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index 35997b2ae..25dcdca73 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Eelm."</string>
<string name="label_done_key" msgid="2441578748772529288">"Valmis"</string>
<string name="label_send_key" msgid="2815056534433717444">"Saada"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Peata"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Oota"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Ühendage peakomplekt, et kuulata paroole."</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index dbc32c53c..d4a0e66b0 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -44,10 +44,8 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"پیش‌فرض"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"پیشنهاد نام‌های مخاطب"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"برای پیشنهاد و تصحیح از نام مخاطبین استفاده شود"</string>
- <!-- no translation found for use_double_space_period (8781529969425082860) -->
- <skip />
- <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
- <skip />
+ <string name="use_double_space_period" msgid="8781529969425082860">"نقطه با دو فاصله"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"با دوبار ضربه روی دکمه فاصله نقطه با یک فاصله بعد آن درج می‌شود"</string>
<string name="auto_cap" msgid="1719746674854628252">"بزرگ‌کردن خودکار حروف"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"بزرگ‌نویسی کلمه اول هر جمله"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"فرهنگ‌های لغت افزودنی"</string>
@@ -76,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"قبلی"</string>
<string name="label_done_key" msgid="2441578748772529288">"انجام شد"</string>
<string name="label_send_key" msgid="2815056534433717444">"ارسال"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"اب‌پ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"۳۲۱؟"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"۳۲۱"</string>
<string name="label_pause_key" msgid="181098308428035340">"توقف موقت"</string>
<string name="label_wait_key" msgid="6402152600878093134">"منتظر بمانید"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"برای شنیدن کلیدهای گذرواژه که با صدای بلند خوانده می‌شوند، از هدست استفاده کنید."</string>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 8e444dcb3..36890d95a 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Edell"</string>
<string name="label_done_key" msgid="2441578748772529288">"Valmis"</string>
<string name="label_send_key" msgid="2815056534433717444">"Lähetä"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Tauko"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Odota"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Liitä kuulokkeet kuullaksesi, mitä näppäimiä painat kirjoittaessasi salasanaa."</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 182f39ac4..3f895325e 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Préc."</string>
<string name="label_done_key" msgid="2441578748772529288">"OK"</string>
<string name="label_send_key" msgid="2815056534433717444">"Envoi"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Délai"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Branchez des écouteurs pour entendre l\'énoncé à haute voix des touches lors de la saisie du mot de passe."</string>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index dbb94eb3d..6537b859e 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -44,7 +44,7 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"डिफ़ॉल्ट"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"संपर्क नाम सुझाएं"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"सुझाव और सुधार के लिए संपर्क से नामों का उपयोग करें"</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"दोहरी रिक्ति वाला पीरियड"</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"दोहरे स्पेस वाला पीरियड"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"स्पेसबार पर डबल टैप करने से पीरियड शामिल हो जाता है जिसके बाद एक रिक्ति होती है"</string>
<string name="auto_cap" msgid="1719746674854628252">"स्‍वत: अक्षर बड़े करना"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"प्रत्येक वाक्य के पहले शब्द को बड़ा लिखें"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"पिछला"</string>
<string name="label_done_key" msgid="2441578748772529288">"पूर्ण"</string>
<string name="label_send_key" msgid="2815056534433717444">"भेजें"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"कखग"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?१२३"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"१२३"</string>
<string name="label_pause_key" msgid="181098308428035340">"पॉज़ करें"</string>
<string name="label_wait_key" msgid="6402152600878093134">"प्रतीक्षा करें"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"ज़ोर से बोली गई पासवर्ड कुंजियां सुनने के लिए हेडसेट प्‍लग इन करें."</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index a0963e53d..d788c1f0e 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Pret."</string>
<string name="label_done_key" msgid="2441578748772529288">"Gotovo"</string>
<string name="label_send_key" msgid="2815056534433717444">"Pošalji"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauza"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Pričekaj"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Priključite slušalice da biste čuli tipke zaporke izgovorene naglas."</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index e9972d23e..1df863927 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Előző"</string>
<string name="label_done_key" msgid="2441578748772529288">"Kész"</string>
<string name="label_send_key" msgid="2815056534433717444">"Küldés"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Szün."</string>
<string name="label_wait_key" msgid="6402152600878093134">"Vár"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Csatlakoztasson egy headsetet, ha hallani szeretné a jelszót felolvasva."</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index d761ffc50..f26ad38a4 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -45,7 +45,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"Sarankan nama Kontak"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Menggunakan nama dari Kontak untuk saran dan koreksi"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Titik spasi ganda"</string>
- <string name="use_double_space_period_summary" msgid="6532892187247952799">"Mengetuk dua kali bilah spasi akan memasukkan titik diikuti satu spasi"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"Mengetuk tombol spasi dua kali akan memasukkan titik diikuti satu spasi"</string>
<string name="auto_cap" msgid="1719746674854628252">"Kapitalisasi otomatis"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Kapitalisasi kata pertama di setiap kalimat"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Kamus pengaya"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Sblm"</string>
<string name="label_done_key" msgid="2441578748772529288">"Selesai"</string>
<string name="label_send_key" msgid="2815056534433717444">"Kirimkan"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Jeda"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Tunggu"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Pasang headset untuk mendengar tombol sandi yang diucapkan dengan keras."</string>
diff --git a/java/res/values-is/strings.xml b/java/res/values-is/strings.xml
index 9dc37edd8..8ea7461c2 100644
--- a/java/res/values-is/strings.xml
+++ b/java/res/values-is/strings.xml
@@ -123,11 +123,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Fyrra"</string>
<string name="label_done_key" msgid="2441578748772529288">"Lokið"</string>
<string name="label_send_key" msgid="2815056534433717444">"Senda"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <!-- no translation found for label_to_symbol_key (8516904117128967293) -->
- <skip />
- <!-- no translation found for label_to_symbol_with_microphone_key (9035925553010061906) -->
- <skip />
<!-- no translation found for label_pause_key (181098308428035340) -->
<skip />
<!-- no translation found for label_wait_key (6402152600878093134) -->
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index a3ed5dd1f..a78c5c56a 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Indietro"</string>
<string name="label_done_key" msgid="2441578748772529288">"Fine"</string>
<string name="label_send_key" msgid="2815056534433717444">"Invia"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Attesa"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Collega gli auricolari per ascoltare la pronuncia dei tasti premuti per la password."</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 3c58b9cc2..6542b9fb4 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"הקודם"</string>
<string name="label_done_key" msgid="2441578748772529288">"סיום"</string>
<string name="label_send_key" msgid="2815056534433717444">"שלח"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"אבג"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"השהה"</string>
<string name="label_wait_key" msgid="6402152600878093134">"המתן"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה."</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 182e66e59..2b341e116 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"前へ"</string>
<string name="label_done_key" msgid="2441578748772529288">"完了"</string>
<string name="label_send_key" msgid="2815056534433717444">"送信"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"停止"</string>
<string name="label_wait_key" msgid="6402152600878093134">"待機"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"パスワードのキーが音声出力されるのでヘッドセットを接続してください。"</string>
diff --git a/java/res/values-ka/strings.xml b/java/res/values-ka/strings.xml
index bf12855cb..ef3014401 100644
--- a/java/res/values-ka/strings.xml
+++ b/java/res/values-ka/strings.xml
@@ -123,11 +123,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"წინა"</string>
<string name="label_done_key" msgid="2441578748772529288">"შესრულებულია"</string>
<string name="label_send_key" msgid="2815056534433717444">"გაგზავნა"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <!-- no translation found for label_to_symbol_key (8516904117128967293) -->
- <skip />
- <!-- no translation found for label_to_symbol_with_microphone_key (9035925553010061906) -->
- <skip />
<!-- no translation found for label_pause_key (181098308428035340) -->
<skip />
<!-- no translation found for label_wait_key (6402152600878093134) -->
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 6206d468d..e7b9d5a75 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"이전"</string>
<string name="label_done_key" msgid="2441578748772529288">"완료"</string>
<string name="label_send_key" msgid="2815056534433717444">"전송"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"일시 중지"</string>
<string name="label_wait_key" msgid="6402152600878093134">"대기"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"비밀번호 키를 음성으로 들으려면 헤드셋을 연결하세요."</string>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index 4d7de256d..5c66e1f22 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Anks."</string>
<string name="label_done_key" msgid="2441578748772529288">"Atlikta"</string>
<string name="label_send_key" msgid="2815056534433717444">"Siųsti"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Prist."</string>
<string name="label_wait_key" msgid="6402152600878093134">"Lauk."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Prijunkite ausines, kad išgirstumėte sakomus slaptažodžio klavišus."</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index fa66c2d65..a0cf78e89 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Iepr."</string>
<string name="label_done_key" msgid="2441578748772529288">"Gatavs"</string>
<string name="label_send_key" msgid="2815056534433717444">"Sūtīt"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauze"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Gaidīt"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Pievienojiet austiņas, lai dzirdētu paroles rakstzīmes."</string>
diff --git a/java/res/values-mk/strings.xml b/java/res/values-mk/strings.xml
index 7baba300e..e199e0316 100644
--- a/java/res/values-mk/strings.xml
+++ b/java/res/values-mk/strings.xml
@@ -123,11 +123,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Претходно"</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Испрати"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <!-- no translation found for label_to_symbol_key (8516904117128967293) -->
- <skip />
- <!-- no translation found for label_to_symbol_with_microphone_key (9035925553010061906) -->
- <skip />
<!-- no translation found for label_pause_key (181098308428035340) -->
<skip />
<!-- no translation found for label_wait_key (6402152600878093134) -->
diff --git a/java/res/values-mn/strings.xml b/java/res/values-mn/strings.xml
index 7a9f529d9..41bf551ba 100644
--- a/java/res/values-mn/strings.xml
+++ b/java/res/values-mn/strings.xml
@@ -123,11 +123,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Өмнөх"</string>
<string name="label_done_key" msgid="2441578748772529288">"Хийгдлээ"</string>
<string name="label_send_key" msgid="2815056534433717444">"Илгээх"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <!-- no translation found for label_to_symbol_key (8516904117128967293) -->
- <skip />
- <!-- no translation found for label_to_symbol_with_microphone_key (9035925553010061906) -->
- <skip />
<!-- no translation found for label_pause_key (181098308428035340) -->
<skip />
<!-- no translation found for label_wait_key (6402152600878093134) -->
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 5cfe7456f..c1a2f0d09 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -45,7 +45,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"Cadangkan nama Kenalan"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Menggunakan nama daripada Kenalan untuk cadangan dan pembetulan"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Titik ruang berganda"</string>
- <string name="use_double_space_period_summary" msgid="6532892187247952799">"Ketik dua kali pada bar ruang memasukkan titik diikuti dengan ruang"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"Mengetik 2X pada bar ruang memasukkan titik diikuti dengan ruang"</string>
<string name="auto_cap" msgid="1719746674854628252">"Huruf besar auto"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Besarkan perkataan pertama setiap ayat"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Kamus tambahan"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Sblm"</string>
<string name="label_done_key" msgid="2441578748772529288">"Selesai"</string>
<string name="label_send_key" msgid="2815056534433717444">"Hantar"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Jeda"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Tnggu"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebut dengan kuat."</string>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index d21c4e916..f56ce1127 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -44,8 +44,8 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Standard"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Foreslå kontaktnavn"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Bruk navn fra Kontakter til forslag og korrigeringer"</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"To mellomrom for punktum"</string>
- <string name="use_double_space_period_summary" msgid="6532892187247952799">"Trykk to ganger på mellomromstasten for å sette inn et punktum etterfulgt av et mellomrom"</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"Punktum ved doble mellomrom"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dobbeltrykk på mellomromstasten for punktum etterfulgt av mellomrom"</string>
<string name="auto_cap" msgid="1719746674854628252">"Stor forbokstav"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Sett stor bokstav i det første ordet i hver setning"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Tilleggsordbøker"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Forr."</string>
<string name="label_done_key" msgid="2441578748772529288">"Utfør"</string>
<string name="label_send_key" msgid="2815056534433717444">"Send"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Vent"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Koble til hodetelefoner for å høre opplesing av bokstavene i passordet."</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index daa65a49e..6bd474a19 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Vorig"</string>
<string name="label_done_key" msgid="2441578748772529288">"Gereed"</string>
<string name="label_send_key" msgid="2815056534433717444">"Zenden"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauze"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Wacht"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Sluit een headset aan om wachtwoordtoetsen hardop te laten voorlezen."</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 5ee44ccbb..27fcf60ba 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Wstecz"</string>
<string name="label_done_key" msgid="2441578748772529288">"OK"</string>
<string name="label_send_key" msgid="2815056534433717444">"Wyślij"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauza"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Czekaj"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Podłącz zestaw słuchawkowy, aby usłyszeć znaki hasła wypowiadane na głos."</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 1d88fbb7c..46bd34d72 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Ant."</string>
<string name="label_done_key" msgid="2441578748772529288">"Feito"</string>
<string name="label_send_key" msgid="2815056534433717444">"Enviar"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Esp."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Ligar auscultadores com microfone integrado para ouvir as teclas da palavra-passe."</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index da0ed5db9..ce61e0c17 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Volt."</string>
<string name="label_done_key" msgid="2441578748772529288">"Feito"</string>
<string name="label_send_key" msgid="2815056534433717444">"Enviar"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Esp."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Conecte um fone de ouvido para ouvir as chaves de senha em voz alta."</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 584f33206..5a315f502 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -119,12 +119,6 @@
<skip />
<string name="label_done_key" msgid="2441578748772529288">"Finì"</string>
<string name="label_send_key" msgid="2815056534433717444">"Trametter"</string>
- <!-- no translation found for label_to_alpha_key (4793983863798817523) -->
- <skip />
- <!-- no translation found for label_to_symbol_key (8516904117128967293) -->
- <skip />
- <!-- no translation found for label_to_symbol_with_microphone_key (9035925553010061906) -->
- <skip />
<!-- no translation found for label_pause_key (181098308428035340) -->
<skip />
<!-- no translation found for label_wait_key (6402152600878093134) -->
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 9d397ac55..99b82a537 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Înapoi"</string>
<string name="label_done_key" msgid="2441578748772529288">"Terminat"</string>
<string name="label_send_key" msgid="2815056534433717444">"Trimiteţi"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pauză"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Aşt."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Conectaţi un set căşti-microfon pentru a auzi tastele apăsate când introduceţi parola."</string>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 30daeaaa5..1075d2994 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Пред."</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Отправить"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Пауза"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Ждать"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Подключите гарнитуру, чтобы услышать пароль."</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index cfb51ed08..1ee4f3324 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -31,7 +31,7 @@
<string name="popup_on_keypress" msgid="123894815723512944">"Zobraziť znaky pri stlačení klávesu"</string>
<string name="general_category" msgid="1859088467017573195">"Všeobecné"</string>
<string name="correction_category" msgid="2236750915056607613">"Oprava textu"</string>
- <string name="gesture_typing_category" msgid="497263612130532630">"Písanie gest"</string>
+ <string name="gesture_typing_category" msgid="497263612130532630">"Písanie gestami"</string>
<string name="misc_category" msgid="6894192814868233453">"Ďalšie možnosti"</string>
<string name="advanced_settings" msgid="362895144495591463">"Rozšírené nastavenia"</string>
<string name="advanced_settings_summary" msgid="4487980456152830271">"Možnosti pre odborníkov"</string>
@@ -44,7 +44,7 @@
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predvolená"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Navrhnúť mená kontaktov"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Používať mená z Kontaktov na návrhy a opravy"</string>
- <string name="use_double_space_period" msgid="8781529969425082860">"Bodka dvojitou medzerou"</string>
+ <string name="use_double_space_period" msgid="8781529969425082860">"Bodka s medzerou"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Dvojitým klepnutím na medzerník vložíte bodku a medzeru."</string>
<string name="auto_cap" msgid="1719746674854628252">"Veľké písmená automaticky"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"Písanie prvého slova v každej vete veľkým písmenom"</string>
@@ -63,7 +63,7 @@
<string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Veľmi agresívne"</string>
<string name="bigram_prediction" msgid="1084449187723948550">"Návrhy ďalšieho slova"</string>
<string name="bigram_prediction_summary" msgid="3896362682751109677">"Návrhy podľa predchádzajúceho slova"</string>
- <string name="gesture_input" msgid="826951152254563827">"Povoliť písanie gest"</string>
+ <string name="gesture_input" msgid="826951152254563827">"Povoliť písanie gestami"</string>
<string name="gesture_input_summary" msgid="9180350639305731231">"Vkladanie slov prejdením prstom po písmenách"</string>
<string name="gesture_preview_trail" msgid="3802333369335722221">"Zobrazovať stopu gesta"</string>
<string name="gesture_floating_preview_text" msgid="4443240334739381053">"Dynamická plávajúca ukážka"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Pred."</string>
<string name="label_done_key" msgid="2441578748772529288">"Hotovo"</string>
<string name="label_send_key" msgid="2815056534433717444">"Odoslať"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pozastaviť"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Čakajte"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Ak si chcete pri zadávaní hesla vypočuť nahlas vyslovené klávesy, pripojte náhlavnú súpravu."</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index b7dcfba1b..6ac740651 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Nazaj"</string>
<string name="label_done_key" msgid="2441578748772529288">"Dokončano"</string>
<string name="label_send_key" msgid="2815056534433717444">"Pošlji"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Premor"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Čakaj"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Priključite slušalke, če želite slišati izgovorjene tipke gesla."</string>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 93b8da306..1456ae96f 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Прет."</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Пошаљи"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Пауза"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Чекај"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Укључите слушалице да бисте чули наглас изговорене тастере за лозинку."</string>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 95b66923e..f6426f9a2 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Föreg"</string>
<string name="label_done_key" msgid="2441578748772529288">"Färdig"</string>
<string name="label_send_key" msgid="2815056534433717444">"Skicka"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pausa"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Vänta"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Anslut hörlurar om du vill att lösenordet ska läsas upp."</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 95d6734c8..81b9003e8 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Iliyotangulia"</string>
<string name="label_done_key" msgid="2441578748772529288">"Kwisha"</string>
<string name="label_send_key" msgid="2815056534433717444">"Tuma"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"? 123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pumzisha"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Subiri"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Chomeka plagi ya kifaa cha kichwa cha kusikiza ili kusikiliza msimbo wa nenosiri inayozungumwa kwa sauti ya juu."</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index 254bb2515..d0890987e 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"ก่อนหน้า"</string>
<string name="label_done_key" msgid="2441578748772529288">"เสร็จสิ้น"</string>
<string name="label_send_key" msgid="2815056534433717444">"ส่ง"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"กขค"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"หยุดชั่วคราว"</string>
<string name="label_wait_key" msgid="6402152600878093134">"รอ"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"เสียบชุดหูฟังเพื่อฟังเสียงเมื่อพิมพ์รหัสผ่าน"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index e4257b291..a16032e80 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Nkrn"</string>
<string name="label_done_key" msgid="2441578748772529288">"Tapos na"</string>
<string name="label_send_key" msgid="2815056534433717444">"Ipadala"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Pause"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Intay"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Mag-plug in ng headset upang marinig ang mga password key na binabanggit nang malakas."</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index f49e6f231..7b3748c84 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Önceki"</string>
<string name="label_done_key" msgid="2441578748772529288">"Bitti"</string>
<string name="label_send_key" msgid="2815056534433717444">"Gönder"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Durkl"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Bekle"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Şifre tuşlarının sesli okunmasını dinlemek için mikrofonlu kulaklık takın."</string>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index fa81ba6c3..532f67147 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Назад"</string>
<string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
<string name="label_send_key" msgid="2815056534433717444">"Надісл."</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"АБВ"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Пауза"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Чек."</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Підключіть гарнітуру, щоб прослухати відтворені вголос символи пароля."</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index ee2153cfe..2b29120c3 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Trước"</string>
<string name="label_done_key" msgid="2441578748772529288">"Xong"</string>
<string name="label_send_key" msgid="2815056534433717444">"Gửi"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Tạm dừng"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Đợi"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Cắm tai nghe để nghe mật khẩu."</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index c4cb39aa0..ed663b753 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -45,7 +45,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"联系人姓名建议"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"使用联系人中的姓名提供建议和更正"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"双击空格插入句号"</string>
- <string name="use_double_space_period_summary" msgid="6532892187247952799">"双击空格键可在空格后插入句号"</string>
+ <string name="use_double_space_period_summary" msgid="6532892187247952799">"双击空格键可插入句号并后跟空格"</string>
<string name="auto_cap" msgid="1719746674854628252">"自动大写"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"句首字词大写"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"附加词典"</string>
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"后退"</string>
<string name="label_done_key" msgid="2441578748772529288">"完成"</string>
<string name="label_send_key" msgid="2815056534433717444">"发送"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"暂停"</string>
<string name="label_wait_key" msgid="6402152600878093134">"等待"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"需要插入耳机才能听到密码的按键声。"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index eee46ce8e..28d32cf38 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"上一步"</string>
<string name="label_done_key" msgid="2441578748772529288">"完成"</string>
<string name="label_send_key" msgid="2815056534433717444">"傳送"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"暫停"</string>
<string name="label_wait_key" msgid="6402152600878093134">"等候"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"連接耳機即可聽取系統朗讀密碼按鍵。"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index a4db66496..575a687b5 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -74,9 +74,6 @@
<string name="label_previous_key" msgid="1211868118071386787">"Eledlule"</string>
<string name="label_done_key" msgid="2441578748772529288">"Kwenziwe"</string>
<string name="label_send_key" msgid="2815056534433717444">"Thumela"</string>
- <string name="label_to_alpha_key" msgid="4793983863798817523">"ABC"</string>
- <string name="label_to_symbol_key" msgid="8516904117128967293">"?123"</string>
- <string name="label_to_symbol_with_microphone_key" msgid="9035925553010061906">"123"</string>
<string name="label_pause_key" msgid="181098308428035340">"Misa okwesikhashana"</string>
<string name="label_wait_key" msgid="6402152600878093134">"Linda"</string>
<string name="spoken_use_headphones" msgid="896961781287283493">"Plaka ku-headset ukuze uzwe okhiye bephasiwedi ezindlebeni zakho bezwakala kakhulu."</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 3eb27e76b..2f1a209fc 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -389,6 +389,7 @@
<attr name="passwordInput" format="boolean" />
<attr name="clobberSettingsKey" format="boolean" />
<attr name="shortcutKeyEnabled" format="boolean" />
+ <attr name="shortcutKeyOnSymbols" format="boolean" />
<attr name="hasShortcutKey" format="boolean" />
<attr name="languageSwitchKeyEnabled" format="boolean" />
<attr name="isMultiLine" format="boolean" />
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index a842dc82c..2affdebed 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -147,13 +147,6 @@
<string name="label_done_key">Done</string>
<!-- Label for soft enter key when it performs SEND action. Must be short to fit on key! [CHAR LIMIT=5] -->
<string name="label_send_key">Send</string>
- <!-- Label for "switch to alphabetic" key. Must be short to fit on key! [CHAR LIMIT=3] -->
- <string name="label_to_alpha_key">ABC</string>
- <!-- Label for "switch to symbols" key. Must be short to fit on key! [CHAR LIMIT=4] -->
- <string name="label_to_symbol_key">\?123</string>
- <!-- Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
- part because it'll be appended by the code. Must be short to fit on key! [CHAR LIMIT=3] -->
- <string name="label_to_symbol_with_microphone_key">123</string>
<!-- Label for "Pause" key of phone number keyboard. Must be short to fit on key! [CHAR LIMIT=5] -->
<string name="label_pause_key">Pause</string>
<!-- Label for "Wait" key of phone number keyboard. Must be short to fit on key! [CHAR LIMIT=5]-->
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index bf2e76a6b..6b06ce77a 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -154,31 +154,30 @@
</default>
</switch>
<key-style
- latin:styleName="toSymbolKeyStyle"
- latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!text/label_to_symbol_key"
+ latin:styleName="baseForLayoutSwitchKeyStyle"
latin:keyLabelFlags="preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
+ latin:styleName="toSymbolKeyStyle"
+ latin:code="!code/key_switch_alpha_symbol"
+ latin:keyLabel="!text/label_to_symbol_key"
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
+ <key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key"
- latin:keyLabelFlags="preserveCase"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_symbol_key"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="comKeyStyle"
latin:keyLabel="!text/keylabel_for_popular_domain"
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index 537e76800..4d10f5b60 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -144,33 +144,30 @@
</default>
</switch>
<key-style
- latin:styleName="toSymbolKeyStyle"
- latin:code="!code/key_switch_alpha_symbol"
- latin:keyLabel="!text/label_to_symbol_key"
+ latin:styleName="baseForLayoutSwitchKeyStyle"
latin:keyLabelFlags="fontNormal|preserveCase"
latin:keyActionFlags="noKeyPreview"
latin:backgroundType="functional" />
<key-style
+ latin:styleName="toSymbolKeyStyle"
+ latin:code="!code/key_switch_alpha_symbol"
+ latin:keyLabel="!text/label_to_symbol_key"
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
+ <key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key"
- latin:keyLabelFlags="fontNormal|preserveCase"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_for_tablet_key"
- latin:keyLabelFlags="fontNormal"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_symbol_key"
- latin:keyLabelFlags="fontNormal"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="comKeyStyle"
latin:keyLabel="!text/keylabel_for_popular_domain"
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 162119dab..91ebac1da 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -134,52 +134,50 @@
latin:code="!code/key_tab"
latin:keyIcon="!icon/tab_key"
latin:keyIconPreview="!icon/tab_key_preview" />
+ <key-style
+ latin:styleName="baseForLayoutSwitchKeyStyle"
+ latin:keyLabelFlags="preserveCase"
+ latin:keyActionFlags="noKeyPreview"
+ latin:backgroundType="functional" />
<switch>
<!-- When this qwerty keyboard has no shortcut keys but shortcut key is enabled, then symbol
keyboard will have a shortcut key. That means we should use label_to_symbol_key label
and shortcut_for_label icon. -->
<case
- latin:shortcutKeyEnabled="true"
- latin:hasShortcutKey="false"
+ latin:shortcutKeyOnSymbols="true"
>
<key-style
- latin:styleName="toSymbolKeyStyle"
- latin:code="!code/key_switch_alpha_symbol"
+ latin:styleName="baseForToSymbolKeyStyle"
latin:keyIcon="!icon/shortcut_for_label"
latin:keyLabel="!text/label_to_symbol_with_microphone_key"
latin:keyLabelFlags="withIconRight|preserveCase"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
</case>
<default>
<key-style
- latin:styleName="toSymbolKeyStyle"
- latin:code="!code/key_switch_alpha_symbol"
+ latin:styleName="baseForToSymbolKeyStyle"
latin:keyLabel="!text/label_to_symbol_key"
- latin:keyLabelFlags="preserveCase"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
</default>
</switch>
<key-style
+ latin:styleName="toSymbolKeyStyle"
+ latin:code="!code/key_switch_alpha_symbol"
+ latin:parentStyle="baseForToSymbolKeyStyle" />
+ <key-style
latin:styleName="toAlphaKeyStyle"
latin:code="!code/key_switch_alpha_symbol"
latin:keyLabel="!text/label_to_alpha_key"
- latin:keyLabelFlags="preserveCase"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="toMoreSymbolKeyStyle"
latin:code="!code/key_shift"
latin:keyLabel="!text/label_to_more_symbol_key"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForLayoutSwitchKeyStyle" />
<key-style
latin:styleName="backFromMoreSymbolKeyStyle"
latin:code="!code/key_shift"
- latin:keyLabel="!text/label_to_symbol_key"
- latin:keyActionFlags="noKeyPreview"
- latin:backgroundType="functional" />
+ latin:parentStyle="baseForToSymbolKeyStyle" />
<key-style
latin:styleName="punctuationKeyStyle"
latin:keyLabel="."
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index 5e8a8f6bb..b41361515 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -71,34 +71,39 @@ public final class KeyboardId {
private final EditorInfo mEditorInfo;
public final boolean mClobberSettingsKey;
public final boolean mShortcutKeyEnabled;
- public final boolean mHasShortcutKey;
+ public final boolean mShortcutKeyOnSymbols;
public final boolean mLanguageSwitchKeyEnabled;
public final String mCustomActionLabel;
+ public final boolean mHasShortcutKey;
private final int mHashCode;
- public KeyboardId(int elementId, InputMethodSubtype subtype, int deviceFormFactor,
- int orientation, int width, int mode, EditorInfo editorInfo, boolean clobberSettingsKey,
- boolean shortcutKeyEnabled, boolean hasShortcutKey, boolean languageSwitchKeyEnabled) {
- mSubtype = subtype;
- mLocale = SubtypeLocale.getSubtypeLocale(subtype);
- mDeviceFormFactor = deviceFormFactor;
- mOrientation = orientation;
- mWidth = width;
- mMode = mode;
+ public KeyboardId(final int elementId, final KeyboardLayoutSet.Params params) {
+ mSubtype = params.mSubtype;
+ mLocale = SubtypeLocale.getSubtypeLocale(mSubtype);
+ mDeviceFormFactor = params.mDeviceFormFactor;
+ mOrientation = params.mOrientation;
+ mWidth = params.mWidth;
+ mMode = params.mMode;
mElementId = elementId;
- mEditorInfo = editorInfo;
- mClobberSettingsKey = clobberSettingsKey;
- mShortcutKeyEnabled = shortcutKeyEnabled;
- mHasShortcutKey = hasShortcutKey;
- mLanguageSwitchKeyEnabled = languageSwitchKeyEnabled;
- mCustomActionLabel = (editorInfo.actionLabel != null)
- ? editorInfo.actionLabel.toString() : null;
+ mEditorInfo = params.mEditorInfo;
+ mClobberSettingsKey = params.mNoSettingsKey;
+ mShortcutKeyEnabled = params.mVoiceKeyEnabled;
+ mShortcutKeyOnSymbols = mShortcutKeyEnabled && !params.mVoiceKeyOnMain;
+ mLanguageSwitchKeyEnabled = params.mLanguageSwitchKeyEnabled;
+ mCustomActionLabel = (mEditorInfo.actionLabel != null)
+ ? mEditorInfo.actionLabel.toString() : null;
+ final boolean alphabetMayHaveShortcutKey = isAlphabetKeyboard(elementId)
+ && !mShortcutKeyOnSymbols;
+ final boolean symbolsMayHaveShortcutKey = (elementId == KeyboardId.ELEMENT_SYMBOLS)
+ && mShortcutKeyOnSymbols;
+ mHasShortcutKey = mShortcutKeyEnabled
+ && (alphabetMayHaveShortcutKey || symbolsMayHaveShortcutKey);
mHashCode = computeHashCode(this);
}
- private static int computeHashCode(KeyboardId id) {
+ private static int computeHashCode(final KeyboardId id) {
return Arrays.hashCode(new Object[] {
id.mDeviceFormFactor,
id.mOrientation,
@@ -108,7 +113,7 @@ public final class KeyboardId {
id.passwordInput(),
id.mClobberSettingsKey,
id.mShortcutKeyEnabled,
- id.mHasShortcutKey,
+ id.mShortcutKeyOnSymbols,
id.mLanguageSwitchKeyEnabled,
id.isMultiLine(),
id.imeAction(),
@@ -119,7 +124,7 @@ public final class KeyboardId {
});
}
- private boolean equals(KeyboardId other) {
+ private boolean equals(final KeyboardId other) {
if (other == this)
return true;
return other.mDeviceFormFactor == mDeviceFormFactor
@@ -130,7 +135,7 @@ public final class KeyboardId {
&& other.passwordInput() == passwordInput()
&& other.mClobberSettingsKey == mClobberSettingsKey
&& other.mShortcutKeyEnabled == mShortcutKeyEnabled
- && other.mHasShortcutKey == mHasShortcutKey
+ && other.mShortcutKeyOnSymbols == mShortcutKeyOnSymbols
&& other.mLanguageSwitchKeyEnabled == mLanguageSwitchKeyEnabled
&& other.isMultiLine() == isMultiLine()
&& other.imeAction() == imeAction()
@@ -140,8 +145,12 @@ public final class KeyboardId {
&& other.mSubtype.equals(mSubtype);
}
+ private static boolean isAlphabetKeyboard(final int elementId) {
+ return elementId < ELEMENT_SYMBOLS;
+ }
+
public boolean isAlphabetKeyboard() {
- return mElementId < ELEMENT_SYMBOLS;
+ return isAlphabetKeyboard(mElementId);
}
public boolean navigateNext() {
@@ -181,7 +190,7 @@ public final class KeyboardId {
}
@Override
- public boolean equals(Object other) {
+ public boolean equals(final Object other) {
return other instanceof KeyboardId && equals((KeyboardId) other);
}
@@ -192,7 +201,7 @@ public final class KeyboardId {
@Override
public String toString() {
- return String.format("[%s %s:%s %s-%s:%d %s %s %s%s%s%s%s%s%s%s]",
+ return String.format("[%s %s:%s %s-%s:%d %s %s %s%s%s%s%s%s%s%s%s]",
elementIdToName(mElementId),
mLocale,
mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET),
@@ -204,13 +213,14 @@ public final class KeyboardId {
(mClobberSettingsKey ? " clobberSettingsKey" : ""),
(passwordInput() ? " passwordInput" : ""),
(mShortcutKeyEnabled ? " shortcutKeyEnabled" : ""),
+ (mShortcutKeyOnSymbols ? " shortcutKeyOnSymbols" : ""),
(mHasShortcutKey ? " hasShortcutKey" : ""),
(mLanguageSwitchKeyEnabled ? " languageSwitchKeyEnabled" : ""),
(isMultiLine() ? "isMultiLine" : "")
);
}
- public static boolean equivalentEditorInfoForKeyboard(EditorInfo a, EditorInfo b) {
+ public static boolean equivalentEditorInfoForKeyboard(final EditorInfo a, final EditorInfo b) {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
return a.inputType == b.inputType
@@ -218,7 +228,7 @@ public final class KeyboardId {
&& TextUtils.equals(a.privateImeOptions, b.privateImeOptions);
}
- public static String elementIdToName(int elementId) {
+ public static String elementIdToName(final int elementId) {
switch (elementId) {
case ELEMENT_ALPHABET: return "alphabet";
case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted";
@@ -234,8 +244,8 @@ public final class KeyboardId {
}
}
- public static String deviceFormFactor(int devoceFormFactor) {
- switch (devoceFormFactor) {
+ public static String deviceFormFactor(final int deviceFormFactor) {
+ switch (deviceFormFactor) {
case FORM_FACTOR_PHONE: return "phone";
case FORM_FACTOR_TABLET7: return "tablet7";
case FORM_FACTOR_TABLET10: return "tablet10";
@@ -243,7 +253,7 @@ public final class KeyboardId {
}
}
- public static String modeName(int mode) {
+ public static String modeName(final int mode) {
switch (mode) {
case MODE_TEXT: return "text";
case MODE_URL: return "url";
@@ -258,7 +268,7 @@ public final class KeyboardId {
}
}
- public static String actionName(int actionId) {
+ public static String actionName(final int actionId) {
return (actionId == IME_ACTION_CUSTOM_LABEL) ? "actionCustomLabel"
: EditorInfoCompatUtils.imeActionName(actionId);
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
index 4d5d7e14e..295047530 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -78,6 +78,7 @@ public final class KeyboardLayoutSet {
CollectionUtils.newHashMap();
private static final KeysCache sKeysCache = new KeysCache();
+ @SuppressWarnings("serial")
public static final class KeyboardLayoutSetException extends RuntimeException {
public final KeyboardId mKeyboardId;
@@ -93,7 +94,7 @@ public final class KeyboardLayoutSet {
public ElementParams() {}
}
- private static final class Params {
+ public static final class Params {
String mKeyboardLayoutSetName;
int mMode;
EditorInfo mEditorInfo;
@@ -109,7 +110,6 @@ public final class KeyboardLayoutSet {
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
CollectionUtils.newSparseArray();
- public Params() {}
}
public static void clearKeyboardCache() {
@@ -149,7 +149,11 @@ public final class KeyboardLayoutSet {
elementParams = mParams.mKeyboardLayoutSetElementIdToParamsMap.get(
KeyboardId.ELEMENT_ALPHABET);
}
- final KeyboardId id = getKeyboardId(keyboardLayoutSetElementId);
+ // Note: The keyboard for each shift state, and mode are represented as an elementName
+ // attribute in a keyboard_layout_set XML file. Also each keyboard layout XML resource is
+ // specified as an elementKeyboard attribute in the file.
+ // The KeyboardId is an internal key for a Keyboard object.
+ final KeyboardId id = new KeyboardId(keyboardLayoutSetElementId, mParams);
try {
return getKeyboard(elementParams, id);
} catch (RuntimeException e) {
@@ -187,22 +191,6 @@ public final class KeyboardLayoutSet {
return keyboard;
}
- // Note: The keyboard for each locale, shift state, and mode are represented as
- // KeyboardLayoutSet element id that is a key in keyboard_set.xml. Also that file specifies
- // which XML layout should be used for each keyboard. The KeyboardId is an internal key for
- // Keyboard object.
- private KeyboardId getKeyboardId(final int keyboardLayoutSetElementId) {
- final Params params = mParams;
- final boolean isSymbols = (keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS
- || keyboardLayoutSetElementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED);
- final boolean hasShortcutKey = params.mVoiceKeyEnabled
- && (isSymbols != params.mVoiceKeyOnMain);
- return new KeyboardId(keyboardLayoutSetElementId, params.mSubtype, params.mDeviceFormFactor,
- params.mOrientation, params.mWidth, params.mMode, params.mEditorInfo,
- params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey,
- params.mLanguageSwitchKeyEnabled);
- }
-
public static final class Builder {
private final Context mContext;
private final String mPackageName;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index db1691709..61d38745e 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -1013,7 +1013,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy,
public void closing() {
dismissAllKeyPreviews();
cancelAllMessages();
-
+ onCancelMoreKeysPanel();
mInvalidateAllKeys = true;
requestLayout();
}
@@ -1032,11 +1032,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy,
}
@Override
- public boolean dismissMoreKeysPanel() {
+ public void onCancelMoreKeysPanel() {
if (isShowingMoreKeysPanel()) {
- return mMoreKeysPanel.dismissMoreKeysPanel();
+ mMoreKeysPanel.dismissMoreKeysPanel();
}
- return false;
}
@Override
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 7d7eedb17..584d2fe46 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -135,7 +135,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
private int mAltCodeKeyWhileTypingAnimAlpha = Constants.Color.ALPHA_OPAQUE;
// More keys keyboard
- private int mMoreKeysPanelPointerTrackerId;
private final WeakHashMap<Key, MoreKeysPanel> mMoreKeysPanelCache =
new WeakHashMap<Key, MoreKeysPanel>();
private final boolean mConfigShowMoreKeysKeyboardAtTouchedPoint;
@@ -662,7 +661,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
mMoreKeysPanelCache.put(parentKey, moreKeysPanel);
}
- mMoreKeysPanelPointerTrackerId = tracker.mPointerId;
final int[] lastCoords = CoordinateUtils.newInstance();
tracker.getLastCoordinates(lastCoords);
@@ -732,14 +730,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
final long eventTime = me.getEventTime();
final int index = me.getActionIndex();
final int id = me.getPointerId(index);
- final int x, y;
- if (mMoreKeysPanel != null && id == mMoreKeysPanelPointerTrackerId) {
- x = mMoreKeysPanel.translateX((int)me.getX(index));
- y = mMoreKeysPanel.translateY((int)me.getY(index));
- } else {
- x = (int)me.getX(index);
- y = (int)me.getY(index);
- }
+ final int x = (int)me.getX(index);
+ final int y = (int)me.getY(index);
+
// TODO: This might be moved to the tracker.processMotionEvent() call below.
if (ENABLE_USABILITY_STUDY_LOG && action != MotionEvent.ACTION_MOVE) {
writeUsabilityStudyLog(me, action, eventTime, index, id, x, y);
@@ -800,19 +793,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
final int pointerId = me.getPointerId(i);
final PointerTracker tracker = PointerTracker.getPointerTracker(
pointerId, this);
- final int px, py;
- final MotionEvent motionEvent;
- if (mMoreKeysPanel != null
- && tracker.mPointerId == mMoreKeysPanelPointerTrackerId) {
- px = mMoreKeysPanel.translateX((int)me.getX(i));
- py = mMoreKeysPanel.translateY((int)me.getY(i));
- motionEvent = null;
- } else {
- px = (int)me.getX(i);
- py = (int)me.getY(i);
- motionEvent = me;
- }
- tracker.onMoveEvent(px, py, eventTime, motionEvent);
+ final int px = (int)me.getX(i);
+ final int py = (int)me.getY(i);
+ tracker.onMoveEvent(px, py, eventTime, me);
if (ENABLE_USABILITY_STUDY_LOG) {
writeUsabilityStudyLog(me, action, eventTime, i, pointerId, px, py);
}
@@ -861,13 +844,18 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
@Override
public void closing() {
super.closing();
- dismissMoreKeysPanel();
+ onCancelMoreKeysPanel();
mMoreKeysPanelCache.clear();
}
@Override
+ public void onCancelMoreKeysPanel() {
+ super.onCancelMoreKeysPanel();
+ PointerTracker.dismissAllMoreKeysPanels();
+ }
+
+ @Override
public boolean onDismissMoreKeysPanel() {
- mMoreKeysPanelPointerTrackerId = -1;
dimEntireKeyboard(false /* dimmed */);
return super.onDismissMoreKeysPanel();
}
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
index 16606a1c5..8a5b7dad5 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
@@ -19,76 +19,28 @@ package com.android.inputmethod.keyboard;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
+import android.view.MotionEvent;
import android.view.View;
-import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
-import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.CoordinateUtils;
-import com.android.inputmethod.latin.InputPointers;
import com.android.inputmethod.latin.R;
/**
* A view that renders a virtual {@link MoreKeysKeyboard}. It handles rendering of keys and
* detecting key presses and touch movements.
*/
-public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel {
+public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel {
private final int[] mCoordinates = CoordinateUtils.newInstance();
private final KeyDetector mKeyDetector;
-
private Controller mController;
- private KeyboardActionListener mListener;
+ protected KeyboardActionListener mListener;
private int mOriginX;
private int mOriginY;
+ private Key mCurrentKey;
- private static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
-
- private final KeyboardActionListener mMoreKeysKeyboardListener =
- new KeyboardActionListener.Adapter() {
- @Override
- public void onCodeInput(final int primaryCode, final int x, final int y) {
- // Because a more keys keyboard doesn't need proximity characters correction, we don't
- // send touch event coordinates.
- mListener.onCodeInput(
- primaryCode, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
- }
-
- @Override
- public void onTextInput(final String text) {
- mListener.onTextInput(text);
- }
-
- @Override
- public void onStartBatchInput() {
- mListener.onStartBatchInput();
- }
-
- @Override
- public void onUpdateBatchInput(final InputPointers batchPointers) {
- mListener.onUpdateBatchInput(batchPointers);
- }
-
- @Override
- public void onEndBatchInput(final InputPointers batchPointers) {
- mListener.onEndBatchInput(batchPointers);
- }
-
- @Override
- public void onCancelInput() {
- mListener.onCancelInput();
- }
-
- @Override
- public void onPressKey(final int primaryCode) {
- mListener.onPressKey(primaryCode);
- }
-
- @Override
- public void onReleaseKey(final int primaryCode, final boolean withSliding) {
- mListener.onReleaseKey(primaryCode, withSliding);
- }
- };
+ private int mActivePointerId;
public MoreKeysKeyboardView(final Context context, final AttributeSet attrs) {
this(context, attrs, R.attr.moreKeysKeyboardViewStyle);
@@ -124,26 +76,6 @@ public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeys
}
@Override
- public KeyDetector getKeyDetector() {
- return mKeyDetector;
- }
-
- @Override
- public KeyboardActionListener getKeyboardActionListener() {
- return mMoreKeysKeyboardListener;
- }
-
- @Override
- public DrawingProxy getDrawingProxy() {
- return this;
- }
-
- @Override
- public TimerProxy getTimerProxy() {
- return EMPTY_TIMER_PROXY;
- }
-
- @Override
public void setKeyPreviewPopupEnabled(final boolean previewEnabled, final int delay) {
// More keys keyboard needs no pop-up key preview displayed, so we pass always false with a
// delay of 0. The delay does not matter actually since the popup is not shown anyway.
@@ -156,16 +88,14 @@ public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeys
mController = controller;
mListener = listener;
final View container = getContainerView();
- final MoreKeysKeyboard pane = (MoreKeysKeyboard)getKeyboard();
- final int defaultCoordX = pane.getDefaultCoordX();
// The coordinates of panel's left-top corner in parentView's coordinate system.
- final int x = pointX - defaultCoordX - container.getPaddingLeft();
+ final int x = pointX - getDefaultCoordX() - container.getPaddingLeft();
final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom();
parentView.getLocationInWindow(mCoordinates);
// Ensure the horizontal position of the panel does not extend past the screen edges.
final int maxX = parentView.getMeasuredWidth() - container.getMeasuredWidth();
- final int panelX = Math.max(0, Math.min(maxX, x + CoordinateUtils.x(mCoordinates)));
+ final int panelX = Math.max(0, Math.min(maxX, x)) + CoordinateUtils.x(mCoordinates);
final int panelY = y + CoordinateUtils.y(mCoordinates);
container.setX(panelX);
container.setY(panelY);
@@ -175,6 +105,81 @@ public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeys
controller.onShowMoreKeysPanel(this);
}
+ /**
+ * Returns the default x coordinate for showing this panel.
+ */
+ protected int getDefaultCoordX() {
+ return ((MoreKeysKeyboard)getKeyboard()).getDefaultCoordX();
+ }
+
+ @Override
+ public void onDownEvent(final int x, final int y, final int pointerId, final long eventTime) {
+ mActivePointerId = pointerId;
+ onMoveKeyInternal(x, y, pointerId);
+ }
+
+ @Override
+ public void onMoveEvent(int x, int y, final int pointerId, long eventTime) {
+ if (mActivePointerId != pointerId) {
+ return;
+ }
+ final boolean hasOldKey = (mCurrentKey != null);
+ onMoveKeyInternal(x, y, pointerId);
+ if (hasOldKey && mCurrentKey == null) {
+ // If the pointer has moved too far away from any target then cancel the panel.
+ mController.onCancelMoreKeysPanel();
+ }
+ }
+
+ @Override
+ public void onUpEvent(final int x, final int y, final int pointerId, final long eventTime) {
+ if (mCurrentKey != null && mActivePointerId == pointerId) {
+ updateReleaseKeyGraphics(mCurrentKey);
+ onCodeInput(mCurrentKey.mCode, x, y);
+ mCurrentKey = null;
+ }
+ }
+
+ /**
+ * Performs the specific action for this panel when the user presses a key on the panel.
+ */
+ protected void onCodeInput(final int code, final int x, final int y) {
+ if (code == Constants.CODE_OUTPUT_TEXT) {
+ mListener.onTextInput(mCurrentKey.getOutputText());
+ } else if (code != Constants.CODE_UNSPECIFIED) {
+ mListener.onCodeInput(code, x, y);
+ }
+ }
+
+ private void onMoveKeyInternal(int x, int y, int pointerId) {
+ if (mActivePointerId != pointerId) {
+ // Ignore old pointers when newer pointer is active.
+ return;
+ }
+ final Key oldKey = mCurrentKey;
+ final Key newKey = mKeyDetector.detectHitKey(x, y);
+ if (newKey != oldKey) {
+ mCurrentKey = newKey;
+ invalidateKey(mCurrentKey);
+ if (oldKey != null) {
+ updateReleaseKeyGraphics(oldKey);
+ }
+ if (newKey != null) {
+ updatePressKeyGraphics(newKey);
+ }
+ }
+ }
+
+ private void updateReleaseKeyGraphics(final Key key) {
+ key.onReleased();
+ invalidateKey(key);
+ }
+
+ private void updatePressKeyGraphics(final Key key) {
+ key.onPressed();
+ invalidateKey(key);
+ }
+
@Override
public boolean dismissMoreKeysPanel() {
if (mController == null) return false;
@@ -192,6 +197,35 @@ public final class MoreKeysKeyboardView extends KeyboardView implements MoreKeys
}
@Override
+ public boolean onTouchEvent(final MotionEvent me) {
+ final int action = me.getActionMasked();
+ final long eventTime = me.getEventTime();
+ final int index = me.getActionIndex();
+ final int x = (int)me.getX(index);
+ final int y = (int)me.getY(index);
+ final int pointerId = me.getPointerId(index);
+ processMotionEvent(action, x, y, pointerId, eventTime);
+ return true;
+ }
+
+ public void processMotionEvent(final int action, final int x, final int y,
+ final int pointerId, final long eventTime) {
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ case MotionEvent.ACTION_POINTER_DOWN:
+ onDownEvent(x, y, pointerId, eventTime);
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_POINTER_UP:
+ onUpEvent(x, y, pointerId, eventTime);
+ break;
+ case MotionEvent.ACTION_MOVE:
+ onMoveEvent(x, y, pointerId, eventTime);
+ break;
+ }
+ }
+
+ @Override
public View getContainerView() {
return (View)getParent();
}
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java b/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java
index 8bcddccf3..9c677e5c8 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysPanel.java
@@ -18,7 +18,7 @@ package com.android.inputmethod.keyboard;
import android.view.View;
-public interface MoreKeysPanel extends PointerTracker.KeyEventHandler {
+public interface MoreKeysPanel {
public interface Controller {
/**
* Add the {@link MoreKeysPanel} to the target view.
@@ -27,9 +27,14 @@ public interface MoreKeysPanel extends PointerTracker.KeyEventHandler {
public void onShowMoreKeysPanel(final MoreKeysPanel panel);
/**
- * Remove the current {@link MoreKeysPanel} to the target view.
+ * Remove the current {@link MoreKeysPanel} from the target view.
*/
public boolean onDismissMoreKeysPanel();
+
+ /**
+ * Instructs the parent to cancel the panel (e.g., when entering a different input mode).
+ */
+ public void onCancelMoreKeysPanel();
}
/**
@@ -55,6 +60,36 @@ public interface MoreKeysPanel extends PointerTracker.KeyEventHandler {
public boolean dismissMoreKeysPanel();
/**
+ * Process a move event on the more keys panel.
+ *
+ * @param x translated x coordinate of the touch point
+ * @param y translated y coordinate of the touch point
+ * @param pointerId pointer id touch point
+ * @param eventTime timestamp of touch point
+ */
+ public void onMoveEvent(final int x, final int y, final int pointerId, final long eventTime);
+
+ /**
+ * Process a down event on the more keys panel.
+ *
+ * @param x translated x coordinate of the touch point
+ * @param y translated y coordinate of the touch point
+ * @param pointerId pointer id touch point
+ * @param eventTime timestamp of touch point
+ */
+ public void onDownEvent(final int x, final int y, final int pointerId, final long eventTime);
+
+ /**
+ * Process an up event on the more keys panel.
+ *
+ * @param x translated x coordinate of the touch point
+ * @param y translated y coordinate of the touch point
+ * @param pointerId pointer id touch point
+ * @param eventTime timestamp of touch point
+ */
+ public void onUpEvent(final int x, final int y, final int pointerId, final long eventTime);
+
+ /**
* Translate X-coordinate of touch event to the local X-coordinate of this
* {@link MoreKeysPanel}.
*
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index a44f3ede0..0f55607a0 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -84,7 +84,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
public void showSlidingKeyInputPreview(PointerTracker tracker);
public void dismissSlidingKeyInputPreview();
public void showGesturePreviewTrail(PointerTracker tracker, boolean isOldestTracker);
- public boolean dismissMoreKeysPanel();
}
public interface TimerProxy {
@@ -319,8 +318,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
// true if this pointer is no longer tracking touch event.
private boolean mIsTrackingCanceled;
- // true if this pointer has been long-pressed and is showing a more keys panel.
- private boolean mIsShowingMoreKeysPanel;
+ // the more keys panel currently being shown. equals null if no panel is active.
+ private MoreKeysPanel mMoreKeysPanel;
// true if this pointer is in a sliding key input.
boolean mIsInSlidingKeyInput;
@@ -413,6 +412,17 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
+ public static void dismissAllMoreKeysPanels() {
+ final int trackersSize = sTrackers.size();
+ for (int i = 0; i < trackersSize; ++i) {
+ final PointerTracker tracker = sTrackers.get(i);
+ if (tracker.isShowingMoreKeysPanel()) {
+ tracker.mMoreKeysPanel.dismissMoreKeysPanel();
+ tracker.mMoreKeysPanel = null;
+ }
+ }
+ }
+
private PointerTracker(final int id, final KeyEventHandler handler) {
if (handler == null) {
throw new NullPointerException();
@@ -716,6 +726,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
sLastRecognitionPointSize = 0;
sLastRecognitionTime = 0;
mListener.onStartBatchInput();
+ dismissAllMoreKeysPanels();
}
mTimerProxy.cancelLongPressTimer();
mDrawingProxy.showGesturePreviewTrail(this, isOldestTrackerInQueue(this));
@@ -812,7 +823,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (DEBUG_EVENT) {
printTouchEvent("onDownEvent:", x, y, eventTime);
}
-
mDrawingProxy = handler.getDrawingProxy();
mTimerProxy = handler.getTimerProxy();
setKeyboardActionListener(handler.getKeyboardActionListener());
@@ -848,7 +858,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
// A gesture should start only from a non-modifier key.
mIsDetectingGesture = (mKeyboard != null) && mKeyboard.mId.isAlphabetKeyboard()
- && !mIsShowingMoreKeysPanel && key != null && !key.isModifier();
+ && key != null && !key.isModifier();
if (mIsDetectingGesture) {
if (getActivePointerTrackerCount() == 1) {
sGestureFirstDownTime = eventTime;
@@ -858,6 +868,10 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
+ private boolean isShowingMoreKeysPanel() {
+ return (mMoreKeysPanel != null);
+ }
+
private void onDownEventInternal(final int x, final int y, final long eventTime) {
Key key = onDownKey(x, y, eventTime);
// Sliding key is allowed when 1) enabled by configuration, 2) this pointer starts sliding
@@ -905,6 +919,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
cancelBatchInput();
return;
}
+ // If the MoreKeysPanel is showing then do not attempt to enter gesture mode. However,
+ // the gestured touch points are still being recorded in case the panel is dismissed.
+ if (isShowingMoreKeysPanel()) {
+ return;
+ }
mayStartBatchInput(key);
if (sInGesture) {
mayUpdateBatchInput(eventTime, key);
@@ -920,6 +939,12 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
return;
}
+ if (isShowingMoreKeysPanel()) {
+ final int translatedX = mMoreKeysPanel.translateX(x);
+ final int translatedY = mMoreKeysPanel.translateY(y);
+ mMoreKeysPanel.onMoveEvent(translatedX, translatedY, mPointerId, eventTime);
+ }
+
if (sShouldHandleGesture && me != null) {
// Add historical points to gesture path.
final int pointerIndex = me.findPointerIndex(mPointerId);
@@ -933,6 +958,10 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
+ if (isShowingMoreKeysPanel()) {
+ // Do not handle sliding keys (or show key pop-ups) when the MoreKeysPanel is visible.
+ return;
+ }
onMoveEventInternal(x, y, eventTime);
}
@@ -964,7 +993,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.pointerTracker_onMoveEvent(x, y, lastX, lastY);
}
- onUpEventInternal(eventTime);
+ onUpEventInternal(x, y, eventTime);
onDownEventInternal(x, y, eventTime);
}
@@ -983,7 +1012,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
lastX, lastY, Constants.printableCode(oldKey.mCode),
x, y, Constants.printableCode(key.mCode)));
}
- onUpEventInternal(eventTime);
+ onUpEventInternal(x, y, eventTime);
onDownEventInternal(x, y, eventTime);
}
@@ -1099,7 +1128,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
sPointerTrackerQueue.releaseAllPointersOlderThan(this, eventTime);
}
}
- onUpEventInternal(eventTime);
+ onUpEventInternal(x, y, eventTime);
sPointerTrackerQueue.remove(this);
}
@@ -1111,11 +1140,14 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (DEBUG_EVENT) {
printTouchEvent("onPhntEvent:", mLastX, mLastY, eventTime);
}
- onUpEventInternal(eventTime);
+ if (isShowingMoreKeysPanel()) {
+ return;
+ }
+ onUpEventInternal(mLastX, mLastY, eventTime);
cancelTracking();
}
- private void onUpEventInternal(final long eventTime) {
+ private void onUpEventInternal(final int x, final int y, final long eventTime) {
mTimerProxy.cancelKeyTimers();
resetSlidingKeyInput();
mIsDetectingGesture = false;
@@ -1123,9 +1155,16 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
mCurrentKey = null;
// Release the last pressed key.
setReleasedKeyGraphics(currentKey);
- if (mIsShowingMoreKeysPanel) {
- mDrawingProxy.dismissMoreKeysPanel();
- mIsShowingMoreKeysPanel = false;
+
+ if (isShowingMoreKeysPanel()) {
+ if (!mIsTrackingCanceled) {
+ final int translatedX = mMoreKeysPanel.translateX(x);
+ final int translatedY = mMoreKeysPanel.translateY(y);
+ mMoreKeysPanel.onUpEvent(translatedX, translatedY, mPointerId, eventTime);
+ }
+ mMoreKeysPanel.dismissMoreKeysPanel();
+ mMoreKeysPanel = null;
+ return;
}
if (sInGesture) {
@@ -1144,10 +1183,12 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
- public void onShowMoreKeysPanel(final int x, final int y, final KeyEventHandler handler) {
- onLongPressed();
- mIsShowingMoreKeysPanel = true;
- onDownEvent(x, y, SystemClock.uptimeMillis(), handler);
+ public void onShowMoreKeysPanel(final int translatedX, final int translatedY,
+ final MoreKeysPanel panel) {
+ setReleasedKeyGraphics(mCurrentKey);
+ final long eventTime = SystemClock.uptimeMillis();
+ mMoreKeysPanel = panel;
+ mMoreKeysPanel.onDownEvent(translatedX, translatedY, mPointerId, eventTime);
}
@Override
@@ -1179,9 +1220,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
mTimerProxy.cancelKeyTimers();
setReleasedKeyGraphics(mCurrentKey);
resetSlidingKeyInput();
- if (mIsShowingMoreKeysPanel) {
- mDrawingProxy.dismissMoreKeysPanel();
- mIsShowingMoreKeysPanel = false;
+ if (isShowingMoreKeysPanel()) {
+ mMoreKeysPanel.dismissMoreKeysPanel();
+ mMoreKeysPanel = null;
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index 36342688e..da418f41a 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -622,6 +622,8 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
R.styleable.Keyboard_Case_clobberSettingsKey, id.mClobberSettingsKey);
final boolean shortcutKeyEnabledMatched = matchBoolean(a,
R.styleable.Keyboard_Case_shortcutKeyEnabled, id.mShortcutKeyEnabled);
+ final boolean shortcutKeyOnSymbolsMatched = matchBoolean(a,
+ R.styleable.Keyboard_Case_shortcutKeyOnSymbols, id.mShortcutKeyOnSymbols);
final boolean hasShortcutKeyMatched = matchBoolean(a,
R.styleable.Keyboard_Case_hasShortcutKey, id.mHasShortcutKey);
final boolean languageSwitchKeyEnabledMatched = matchBoolean(a,
@@ -640,12 +642,12 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
final boolean selected = keyboardLayoutSetElementMatched && modeMatched
&& navigateNextMatched && navigatePreviousMatched && passwordInputMatched
&& clobberSettingsKeyMatched && shortcutKeyEnabledMatched
- && hasShortcutKeyMatched && languageSwitchKeyEnabledMatched
- && isMultiLineMatched && imeActionMatched && localeCodeMatched
- && languageCodeMatched && countryCodeMatched;
+ && shortcutKeyOnSymbolsMatched && hasShortcutKeyMatched
+ && languageSwitchKeyEnabledMatched && isMultiLineMatched && imeActionMatched
+ && localeCodeMatched && languageCodeMatched && countryCodeMatched;
if (DEBUG) {
- startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE,
+ startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE,
textAttr(a.getString(
R.styleable.Keyboard_Case_keyboardLayoutSetElement),
"keyboardLayoutSetElement"),
@@ -662,6 +664,8 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
"passwordInput"),
booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyEnabled,
"shortcutKeyEnabled"),
+ booleanAttr(a, R.styleable.Keyboard_Case_shortcutKeyOnSymbols,
+ "shortcutKeyOnSymbols"),
booleanAttr(a, R.styleable.Keyboard_Case_hasShortcutKey,
"hasShortcutKey"),
booleanAttr(a, R.styleable.Keyboard_Case_languageSwitchKeyEnabled,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 9d0564315..6fefb809b 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -97,9 +97,6 @@ public final class KeyboardTextsSet {
"label_done_key",
"label_previous_key",
// Other labels.
- "label_to_alpha_key",
- "label_to_symbol_key",
- "label_to_symbol_with_microphone_key",
"label_pause_key",
"label_wait_key",
};
@@ -147,92 +144,95 @@ public final class KeyboardTextsSet {
/* 39 */ "keylabel_for_south_slavic_row3_8",
/* 40 */ "more_keys_for_cyrillic_ie",
/* 41 */ "more_keys_for_cyrillic_i",
- /* 42 */ "more_keys_for_single_quote",
- /* 43 */ "more_keys_for_double_quote",
- /* 44 */ "more_keys_for_tablet_double_quote",
- /* 45 */ "more_keys_for_currency_dollar",
- /* 46 */ "keylabel_for_currency_generic",
- /* 47 */ "more_keys_for_currency_generic",
- /* 48 */ "more_keys_for_punctuation",
- /* 49 */ "more_keys_for_star",
- /* 50 */ "more_keys_for_bullet",
- /* 51 */ "more_keys_for_plus",
- /* 52 */ "more_keys_for_left_parenthesis",
- /* 53 */ "more_keys_for_right_parenthesis",
- /* 54 */ "more_keys_for_less_than",
- /* 55 */ "more_keys_for_greater_than",
- /* 56 */ "more_keys_for_arabic_diacritics",
- /* 57 */ "keyhintlabel_for_arabic_diacritics",
- /* 58 */ "keylabel_for_symbols_1",
- /* 59 */ "keylabel_for_symbols_2",
- /* 60 */ "keylabel_for_symbols_3",
- /* 61 */ "keylabel_for_symbols_4",
- /* 62 */ "keylabel_for_symbols_5",
- /* 63 */ "keylabel_for_symbols_6",
- /* 64 */ "keylabel_for_symbols_7",
- /* 65 */ "keylabel_for_symbols_8",
- /* 66 */ "keylabel_for_symbols_9",
- /* 67 */ "keylabel_for_symbols_0",
- /* 68 */ "additional_more_keys_for_symbols_1",
- /* 69 */ "additional_more_keys_for_symbols_2",
- /* 70 */ "additional_more_keys_for_symbols_3",
- /* 71 */ "additional_more_keys_for_symbols_4",
- /* 72 */ "additional_more_keys_for_symbols_5",
- /* 73 */ "additional_more_keys_for_symbols_6",
- /* 74 */ "additional_more_keys_for_symbols_7",
- /* 75 */ "additional_more_keys_for_symbols_8",
- /* 76 */ "additional_more_keys_for_symbols_9",
- /* 77 */ "additional_more_keys_for_symbols_0",
- /* 78 */ "more_keys_for_symbols_1",
- /* 79 */ "more_keys_for_symbols_2",
- /* 80 */ "more_keys_for_symbols_3",
- /* 81 */ "more_keys_for_symbols_4",
- /* 82 */ "more_keys_for_symbols_5",
- /* 83 */ "more_keys_for_symbols_6",
- /* 84 */ "more_keys_for_symbols_7",
- /* 85 */ "more_keys_for_symbols_8",
- /* 86 */ "more_keys_for_symbols_9",
- /* 87 */ "more_keys_for_symbols_0",
- /* 88 */ "keylabel_for_comma",
- /* 89 */ "more_keys_for_comma",
- /* 90 */ "keylabel_for_symbols_question",
- /* 91 */ "keylabel_for_symbols_semicolon",
- /* 92 */ "keylabel_for_symbols_percent",
- /* 93 */ "more_keys_for_symbols_exclamation",
- /* 94 */ "more_keys_for_symbols_question",
- /* 95 */ "more_keys_for_symbols_semicolon",
- /* 96 */ "more_keys_for_symbols_percent",
- /* 97 */ "keylabel_for_tablet_comma",
- /* 98 */ "keyhintlabel_for_tablet_comma",
- /* 99 */ "more_keys_for_tablet_comma",
- /* 100 */ "keyhintlabel_for_tablet_period",
- /* 101 */ "more_keys_for_tablet_period",
- /* 102 */ "keylabel_for_apostrophe",
- /* 103 */ "keyhintlabel_for_apostrophe",
- /* 104 */ "more_keys_for_apostrophe",
- /* 105 */ "more_keys_for_q",
- /* 106 */ "more_keys_for_x",
- /* 107 */ "keylabel_for_q",
- /* 108 */ "keylabel_for_w",
- /* 109 */ "keylabel_for_y",
- /* 110 */ "keylabel_for_x",
- /* 111 */ "keylabel_for_spanish_row2_10",
- /* 112 */ "more_keys_for_am_pm",
- /* 113 */ "settings_as_more_key",
- /* 114 */ "shortcut_as_more_key",
- /* 115 */ "action_next_as_more_key",
- /* 116 */ "action_previous_as_more_key",
- /* 117 */ "label_to_more_symbol_key",
- /* 118 */ "label_to_more_symbol_for_tablet_key",
- /* 119 */ "label_tab_key",
- /* 120 */ "label_to_phone_numeric_key",
- /* 121 */ "label_to_phone_symbols_key",
- /* 122 */ "label_time_am",
- /* 123 */ "label_time_pm",
- /* 124 */ "label_to_symbol_key_pcqwerty",
- /* 125 */ "keylabel_for_popular_domain",
- /* 126 */ "more_keys_for_popular_domain",
- /* 127 */ "more_keys_for_smiley",
+ /* 42 */ "label_to_alpha_key",
+ /* 43 */ "more_keys_for_single_quote",
+ /* 44 */ "more_keys_for_double_quote",
+ /* 45 */ "more_keys_for_tablet_double_quote",
+ /* 46 */ "more_keys_for_currency_dollar",
+ /* 47 */ "keylabel_for_currency_generic",
+ /* 48 */ "more_keys_for_currency_generic",
+ /* 49 */ "more_keys_for_punctuation",
+ /* 50 */ "more_keys_for_star",
+ /* 51 */ "more_keys_for_bullet",
+ /* 52 */ "more_keys_for_plus",
+ /* 53 */ "more_keys_for_left_parenthesis",
+ /* 54 */ "more_keys_for_right_parenthesis",
+ /* 55 */ "more_keys_for_less_than",
+ /* 56 */ "more_keys_for_greater_than",
+ /* 57 */ "more_keys_for_arabic_diacritics",
+ /* 58 */ "keyhintlabel_for_arabic_diacritics",
+ /* 59 */ "keylabel_for_symbols_1",
+ /* 60 */ "keylabel_for_symbols_2",
+ /* 61 */ "keylabel_for_symbols_3",
+ /* 62 */ "keylabel_for_symbols_4",
+ /* 63 */ "keylabel_for_symbols_5",
+ /* 64 */ "keylabel_for_symbols_6",
+ /* 65 */ "keylabel_for_symbols_7",
+ /* 66 */ "keylabel_for_symbols_8",
+ /* 67 */ "keylabel_for_symbols_9",
+ /* 68 */ "keylabel_for_symbols_0",
+ /* 69 */ "label_to_symbol_key",
+ /* 70 */ "label_to_symbol_with_microphone_key",
+ /* 71 */ "additional_more_keys_for_symbols_1",
+ /* 72 */ "additional_more_keys_for_symbols_2",
+ /* 73 */ "additional_more_keys_for_symbols_3",
+ /* 74 */ "additional_more_keys_for_symbols_4",
+ /* 75 */ "additional_more_keys_for_symbols_5",
+ /* 76 */ "additional_more_keys_for_symbols_6",
+ /* 77 */ "additional_more_keys_for_symbols_7",
+ /* 78 */ "additional_more_keys_for_symbols_8",
+ /* 79 */ "additional_more_keys_for_symbols_9",
+ /* 80 */ "additional_more_keys_for_symbols_0",
+ /* 81 */ "more_keys_for_symbols_1",
+ /* 82 */ "more_keys_for_symbols_2",
+ /* 83 */ "more_keys_for_symbols_3",
+ /* 84 */ "more_keys_for_symbols_4",
+ /* 85 */ "more_keys_for_symbols_5",
+ /* 86 */ "more_keys_for_symbols_6",
+ /* 87 */ "more_keys_for_symbols_7",
+ /* 88 */ "more_keys_for_symbols_8",
+ /* 89 */ "more_keys_for_symbols_9",
+ /* 90 */ "more_keys_for_symbols_0",
+ /* 91 */ "keylabel_for_comma",
+ /* 92 */ "more_keys_for_comma",
+ /* 93 */ "keylabel_for_symbols_question",
+ /* 94 */ "keylabel_for_symbols_semicolon",
+ /* 95 */ "keylabel_for_symbols_percent",
+ /* 96 */ "more_keys_for_symbols_exclamation",
+ /* 97 */ "more_keys_for_symbols_question",
+ /* 98 */ "more_keys_for_symbols_semicolon",
+ /* 99 */ "more_keys_for_symbols_percent",
+ /* 100 */ "keylabel_for_tablet_comma",
+ /* 101 */ "keyhintlabel_for_tablet_comma",
+ /* 102 */ "more_keys_for_tablet_comma",
+ /* 103 */ "keyhintlabel_for_tablet_period",
+ /* 104 */ "more_keys_for_tablet_period",
+ /* 105 */ "keylabel_for_apostrophe",
+ /* 106 */ "keyhintlabel_for_apostrophe",
+ /* 107 */ "more_keys_for_apostrophe",
+ /* 108 */ "more_keys_for_q",
+ /* 109 */ "more_keys_for_x",
+ /* 110 */ "keylabel_for_q",
+ /* 111 */ "keylabel_for_w",
+ /* 112 */ "keylabel_for_y",
+ /* 113 */ "keylabel_for_x",
+ /* 114 */ "keylabel_for_spanish_row2_10",
+ /* 115 */ "more_keys_for_am_pm",
+ /* 116 */ "settings_as_more_key",
+ /* 117 */ "shortcut_as_more_key",
+ /* 118 */ "action_next_as_more_key",
+ /* 119 */ "action_previous_as_more_key",
+ /* 120 */ "label_to_more_symbol_key",
+ /* 121 */ "label_to_more_symbol_for_tablet_key",
+ /* 122 */ "label_tab_key",
+ /* 123 */ "label_to_phone_numeric_key",
+ /* 124 */ "label_to_phone_symbols_key",
+ /* 125 */ "label_time_am",
+ /* 126 */ "label_time_pm",
+ /* 127 */ "label_to_symbol_key_pcqwerty",
+ /* 128 */ "keylabel_for_popular_domain",
+ /* 129 */ "more_keys_for_popular_domain",
+ /* 130 */ "more_keys_for_smiley",
};
private static final String EMPTY = "";
@@ -245,38 +245,40 @@ public final class KeyboardTextsSet {
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
EMPTY, EMPTY, EMPTY,
/* ~41 */
- /* 42 */ "!fixedColumnOrder!4,\u2018,\u2019,\u201A,\u201B",
+ // Label for "switch to alphabetic" key.
+ /* 42 */ "ABC",
+ /* 43 */ "!fixedColumnOrder!4,\u2018,\u2019,\u201A,\u201B",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;</string>
- /* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB",
+ /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
// U+00A2: "¢" CENT SIGN
// U+00A3: "£" POUND SIGN
// U+20AC: "€" EURO SIGN
// U+00A5: "¥" YEN SIGN
// U+20B1: "₱" PESO SIGN
- /* 45 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
- /* 46 */ "$",
- /* 47 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
- /* 48 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
+ /* 46 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
+ /* 47 */ "$",
+ /* 48 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
+ /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
// U+2020: "†" DAGGER
// U+2021: "‡" DOUBLE DAGGER
// U+2605: "★" BLACK STAR
- /* 49 */ "\u2020,\u2021,\u2605",
+ /* 50 */ "\u2020,\u2021,\u2605",
// U+266A: "♪" EIGHTH NOTE
// U+2665: "♥" BLACK HEART SUIT
// U+2660: "♠" BLACK SPADE SUIT
// U+2666: "♦" BLACK DIAMOND SUIT
// U+2663: "♣" BLACK CLUB SUIT
- /* 50 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
+ /* 51 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
// U+00B1: "±" PLUS-MINUS SIGN
- /* 51 */ "\u00B1",
+ /* 52 */ "\u00B1",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
- /* 52 */ "!fixedColumnOrder!3,<,{,[",
- /* 53 */ "!fixedColumnOrder!3,>,},]",
+ /* 53 */ "!fixedColumnOrder!3,<,{,[",
+ /* 54 */ "!fixedColumnOrder!3,>,},]",
// U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
// U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
// U+2264: "≤" LESS-THAN OR EQUAL TO
@@ -292,103 +294,108 @@ public final class KeyboardTextsSet {
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 54 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
- /* 55 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
- /* 56 */ EMPTY,
+ /* 55 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
/* 57 */ EMPTY,
- /* 58 */ "1",
- /* 59 */ "2",
- /* 60 */ "3",
- /* 61 */ "4",
- /* 62 */ "5",
- /* 63 */ "6",
- /* 64 */ "7",
- /* 65 */ "8",
- /* 66 */ "9",
- /* 67 */ "0",
- /* 68~ */
+ /* 58 */ EMPTY,
+ /* 59 */ "1",
+ /* 60 */ "2",
+ /* 61 */ "3",
+ /* 62 */ "4",
+ /* 63 */ "5",
+ /* 64 */ "6",
+ /* 65 */ "7",
+ /* 66 */ "8",
+ /* 67 */ "9",
+ /* 68 */ "0",
+ // Label for "switch to symbols" key.
+ /* 69 */ "?123",
+ // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
+ // part because it'll be appended by the code.
+ /* 70 */ "123",
+ /* 71~ */
EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
- /* ~77 */
+ /* ~80 */
// U+00B9: "¹" SUPERSCRIPT ONE
// U+00BD: "½" VULGAR FRACTION ONE HALF
// U+2153: "⅓" VULGAR FRACTION ONE THIRD
// U+00BC: "¼" VULGAR FRACTION ONE QUARTER
// U+215B: "⅛" VULGAR FRACTION ONE EIGHTH
- /* 78 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
+ /* 81 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
// U+00B2: "²" SUPERSCRIPT TWO
// U+2154: "⅔" VULGAR FRACTION TWO THIRDS
- /* 79 */ "\u00B2,\u2154",
+ /* 82 */ "\u00B2,\u2154",
// U+00B3: "³" SUPERSCRIPT THREE
// U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
// U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
- /* 80 */ "\u00B3,\u00BE,\u215C",
+ /* 83 */ "\u00B3,\u00BE,\u215C",
// U+2074: "⁴" SUPERSCRIPT FOUR
- /* 81 */ "\u2074",
+ /* 84 */ "\u2074",
// U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
- /* 82 */ "\u215D",
- /* 83 */ EMPTY,
- // U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
- /* 84 */ "\u215E",
- /* 85 */ EMPTY,
+ /* 85 */ "\u215D",
/* 86 */ EMPTY,
+ // U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
+ /* 87 */ "\u215E",
+ /* 88 */ EMPTY,
+ /* 89 */ EMPTY,
// U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
// U+2205: "∅" EMPTY SET
- /* 87 */ "\u207F,\u2205",
- /* 88 */ ",",
- /* 89 */ EMPTY,
- /* 90 */ "?",
- /* 91 */ ";",
- /* 92 */ "%",
+ /* 90 */ "\u207F,\u2205",
+ /* 91 */ ",",
+ /* 92 */ EMPTY,
+ /* 93 */ "?",
+ /* 94 */ ";",
+ /* 95 */ "%",
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* 93 */ "\u00A1",
+ /* 96 */ "\u00A1",
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 94 */ "\u00BF",
- /* 95 */ EMPTY,
+ /* 97 */ "\u00BF",
+ /* 98 */ EMPTY,
// U+2030: "‰" PER MILLE SIGN
- /* 96 */ "\u2030",
- /* 97 */ ",",
- /* 98 */ "!",
- /* 99 */ "!",
- /* 100 */ "?",
- /* 101 */ "?",
- /* 102 */ "\'",
- /* 103 */ "\"",
- /* 104 */ "\"",
- /* 105 */ EMPTY,
- /* 106 */ EMPTY,
- /* 107 */ "q",
- /* 108 */ "w",
- /* 109 */ "y",
- /* 110 */ "x",
+ /* 99 */ "\u2030",
+ /* 100 */ ",",
+ /* 101 */ "!",
+ /* 102 */ "!",
+ /* 103 */ "?",
+ /* 104 */ "?",
+ /* 105 */ "\'",
+ /* 106 */ "\"",
+ /* 107 */ "\"",
+ /* 108 */ EMPTY,
+ /* 109 */ EMPTY,
+ /* 110 */ "q",
+ /* 111 */ "w",
+ /* 112 */ "y",
+ /* 113 */ "x",
// U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
- /* 111 */ "\u00F1",
- /* 112 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
- /* 113 */ "!icon/settings_key|!code/key_settings",
- /* 114 */ "!icon/shortcut_key|!code/key_shortcut",
- /* 115 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
- /* 116 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
+ /* 114 */ "\u00F1",
+ /* 115 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
+ /* 116 */ "!icon/settings_key|!code/key_settings",
+ /* 117 */ "!icon/shortcut_key|!code/key_shortcut",
+ /* 118 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
+ /* 119 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
// Label for "switch to more symbol" modifier key. Must be short to fit on key!
- /* 117 */ "= \\ <",
+ /* 120 */ "= \\ <",
// Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key!
- /* 118 */ "~ \\ {",
+ /* 121 */ "~ \\ {",
// Label for "Tab" key. Must be short to fit on key!
- /* 119 */ "Tab",
+ /* 122 */ "Tab",
// Label for "switch to phone numeric" key. Must be short to fit on key!
- /* 120 */ "123",
+ /* 123 */ "123",
// Label for "switch to phone symbols" key. Must be short to fit on key!
// U+FF0A: "*" FULLWIDTH ASTERISK
// U+FF03: "#" FULLWIDTH NUMBER SIGN
- /* 121 */ "\uFF0A\uFF03",
+ /* 124 */ "\uFF0A\uFF03",
// Key label for "ante meridiem"
- /* 122 */ "AM",
+ /* 125 */ "AM",
// Key label for "post meridiem"
- /* 123 */ "PM",
+ /* 126 */ "PM",
// Label for "switch to symbols" key on PC QWERTY layout
- /* 124 */ "Sym",
- /* 125 */ ".com",
+ /* 127 */ "Sym",
+ /* 128 */ ".com",
// popular web domains for the locale - most popular, displayed on the keyboard
- /* 126 */ "!hasLabels!,.net,.org,.gov,.edu",
- /* 127 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
+ /* 129 */ "!hasLabels!,.net,.org,.gov,.edu",
+ /* 130 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
};
/* Language af: Afrikaans */
@@ -449,39 +456,46 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~42 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0623: "ا" ARABIC LETTER ALEF
+ // U+200C: ZERO WIDTH NON-JOINER
+ // U+0628: "ب" ARABIC LETTER BEH
+ // U+062C: "پ" ARABIC LETTER PEH
+ /* 42 */ "\u0623\u200C\u0628\u200C\u062C",
+ /* 43 */ null,
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
- /* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
+ /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
+ /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
// U+00A2: "¢" CENT SIGN
// U+00A3: "£" POUND SIGN
// U+20AC: "€" EURO SIGN
// U+00A5: "¥" YEN SIGN
// U+20B1: "₱" PESO SIGN
// U+FDFC: "﷼" RIAL SIGN
- /* 45 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1,\uFDFC",
- /* 46 */ null,
+ /* 46 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1,\uFDFC",
/* 47 */ null,
+ /* 48 */ null,
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
- /* 48 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
+ /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 49 */ "\u2605,\u066D",
+ /* 50 */ "\u2605,\u066D",
// U+266A: "♪" EIGHTH NOTE
- /* 50 */ "\u266A",
- /* 51 */ null,
+ /* 51 */ "\u266A",
+ /* 52 */ null,
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
// U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
// U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
- /* 52 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 53 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
// U+2264: "≤" LESS-THAN OR EQUAL TO
// U+2265: "≥" GREATER-THAN EQUAL TO
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -497,8 +511,8 @@ public final class KeyboardTextsSet {
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 54 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
- /* 55 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0654: "ٔ" ARABIC HAMZA ABOVE
// U+0652: "ْ" ARABIC SUKUN
@@ -514,64 +528,70 @@ public final class KeyboardTextsSet {
// U+064E: "َ" ARABIC FATHA
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
- /* 56 */ "!fixedColumnOrder!7,\u0655,\u0654,\u0652,\u064D,\u064C,\u064B,\u0651,\u0656,\u0670,\u0653,\u0650,\u064F,\u064E,\u0640\u0640\u0640|\u0640",
- /* 57 */ "\u0651",
+ /* 57 */ "!fixedColumnOrder!7,\u0655,\u0654,\u0652,\u064D,\u064C,\u064B,\u0651,\u0656,\u0670,\u0653,\u0650,\u064F,\u064E,\u0640\u0640\u0640|\u0640",
+ /* 58 */ "\u0651",
// U+0661: "١" ARABIC-INDIC DIGIT ONE
- /* 58 */ "\u0661",
+ /* 59 */ "\u0661",
// U+0662: "٢" ARABIC-INDIC DIGIT TWO
- /* 59 */ "\u0662",
+ /* 60 */ "\u0662",
// U+0663: "٣" ARABIC-INDIC DIGIT THREE
- /* 60 */ "\u0663",
+ /* 61 */ "\u0663",
// U+0664: "٤" ARABIC-INDIC DIGIT FOUR
- /* 61 */ "\u0664",
+ /* 62 */ "\u0664",
// U+0665: "٥" ARABIC-INDIC DIGIT FIVE
- /* 62 */ "\u0665",
+ /* 63 */ "\u0665",
// U+0666: "٦" ARABIC-INDIC DIGIT SIX
- /* 63 */ "\u0666",
+ /* 64 */ "\u0666",
// U+0667: "٧" ARABIC-INDIC DIGIT SEVEN
- /* 64 */ "\u0667",
+ /* 65 */ "\u0667",
// U+0668: "٨" ARABIC-INDIC DIGIT EIGHT
- /* 65 */ "\u0668",
+ /* 66 */ "\u0668",
// U+0669: "٩" ARABIC-INDIC DIGIT NINE
- /* 66 */ "\u0669",
+ /* 67 */ "\u0669",
// U+0660: "٠" ARABIC-INDIC DIGIT ZERO
- /* 67 */ "\u0660",
- /* 68 */ "1",
- /* 69 */ "2",
- /* 70 */ "3",
- /* 71 */ "4",
- /* 72 */ "5",
- /* 73 */ "6",
- /* 74 */ "7",
- /* 75 */ "8",
- /* 76 */ "9",
+ /* 68 */ "\u0660",
+ // Label for "switch to symbols" key.
+ // U+061F: "؟" ARABIC QUESTION MARK
+ /* 69 */ "\u0663\u0662\u0661\u061F",
+ // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
+ // part because it'll be appended by the code.
+ /* 70 */ "\u0663\u0662\u0661",
+ /* 71 */ "1",
+ /* 72 */ "2",
+ /* 73 */ "3",
+ /* 74 */ "4",
+ /* 75 */ "5",
+ /* 76 */ "6",
+ /* 77 */ "7",
+ /* 78 */ "8",
+ /* 79 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 77 */ "0,\u066B,\u066C",
- /* 78~ */
+ /* 80 */ "0,\u066B,\u066C",
+ /* 81~ */
null, null, null, null, null, null, null, null, null, null,
- /* ~87 */
+ /* ~90 */
// U+060C: "،" ARABIC COMMA
- /* 88 */ "\u060C",
- /* 89 */ "\\,",
- /* 90 */ "\u061F",
- /* 91 */ "\u061B",
+ /* 91 */ "\u060C",
+ /* 92 */ "\\,",
+ /* 93 */ "\u061F",
+ /* 94 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 92 */ "\u066A",
- /* 93 */ null,
- /* 94 */ "?",
- /* 95 */ ";",
+ /* 95 */ "\u066A",
+ /* 96 */ null,
+ /* 97 */ "?",
+ /* 98 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 96 */ "\\%,\u2030",
- /* 97~ */
+ /* 99 */ "\\%,\u2030",
+ /* 100~ */
null, null, null, null, null,
- /* ~101 */
+ /* ~104 */
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
- /* 102 */ "\u060C",
- /* 103 */ "\u061F",
- /* 104 */ "\u061F,\u061B,!,:,-,/,\',\"",
+ /* 105 */ "\u060C",
+ /* 106 */ "\u061F",
+ /* 107 */ "\u061F,\u061B,!,:,-,/,\',\"",
};
/* Language be: Belarusian */
@@ -600,6 +620,26 @@ public final class KeyboardTextsSet {
/* ~39 */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
/* 40 */ "\u0451",
+ /* 41 */ null,
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
+ };
+
+ /* Language bg: Bulgarian */
+ private static final String[] LANGUAGE_bg = {
+ /* 0~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
};
/* Language ca: Catalan */
@@ -835,6 +875,20 @@ public final class KeyboardTextsSet {
/* 6 */ "\u00F1,\u0144",
};
+ /* Language el: Greek */
+ private static final String[] LANGUAGE_el = {
+ /* 0~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0391: "Α" GREEK CAPITAL LETTER ALPHA
+ // U+0392: "Β" GREEK CAPITAL LETTER BETA
+ // U+0393: "Γ" GREEK CAPITAL LETTER GAMMA
+ /* 42 */ "\u0391\u0392\u0393",
+ };
+
/* Language en: English */
private static final String[] LANGUAGE_en = {
// U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
@@ -1003,20 +1057,20 @@ public final class KeyboardTextsSet {
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null,
- /* ~104 */
- /* 105 */ "q",
- /* 106 */ "x",
+ null, null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~107 */
+ /* 108 */ "q",
+ /* 109 */ "x",
// U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
- /* 107 */ "\u015D",
+ /* 110 */ "\u015D",
// U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
- /* 108 */ "\u011D",
+ /* 111 */ "\u011D",
// U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
- /* 109 */ "\u016D",
+ /* 112 */ "\u016D",
// U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
- /* 110 */ "\u0109",
+ /* 113 */ "\u0109",
// U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
- /* 111 */ "\u0135",
+ /* 114 */ "\u0135",
};
/* Language es: Spanish */
@@ -1074,25 +1128,25 @@ public final class KeyboardTextsSet {
/* 8~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null,
- /* ~47 */
+ null, null, null, null, null, null, null, null, null, null, null,
+ /* ~48 */
// U+00A1: "¡" INVERTED EXCLAMATION MARK
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 48 */ "!fixedColumnOrder!9,\u00A1,\",\',#,-,:,!,\\,,?,\u00BF,@,&,\\%,+,;,/,(,)",
- /* 49~ */
+ /* 49 */ "!fixedColumnOrder!9,\u00A1,\",\',#,-,:,!,\\,,?,\u00BF,@,&,\\%,+,;,/,(,)",
+ /* 50~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null,
- /* ~98 */
+ null, null, null, null, null, null, null,
+ /* ~101 */
// U+00A1: "¡" INVERTED EXCLAMATION MARK
- /* 99 */ "!,\u00A1",
- /* 100 */ null,
+ /* 102 */ "!,\u00A1",
+ /* 103 */ null,
// U+00BF: "¿" INVERTED QUESTION MARK
- /* 101 */ "?,\u00BF",
- /* 102 */ "\"",
- /* 103 */ "\'",
- /* 104 */ "\'",
+ /* 104 */ "?,\u00BF",
+ /* 105 */ "\"",
+ /* 106 */ "\'",
+ /* 107 */ "\'",
};
/* Language et: Estonian */
@@ -1200,15 +1254,22 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~42 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0627: "ا" ARABIC LETTER ALEF
+ // U+200C: ZERO WIDTH NON-JOINER
+ // U+0628: "ب" ARABIC LETTER BEH
+ // U+067E: "پ" ARABIC LETTER PEH
+ /* 42 */ "\u0627\u200C\u0628\u200C\u067E",
+ /* 43 */ null,
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
- /* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\",\'",
+ /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\",\'",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
- /* 45 */ null,
+ /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
+ /* 46 */ null,
// U+FDFC: "﷼" RIAL SIGN
// U+060B: "؋" AFGHANI SIGN
// U+00A2: "¢" CENT SIGN
@@ -1216,24 +1277,24 @@ public final class KeyboardTextsSet {
// U+20AC: "€" EURO SIGN
// U+00A5: "¥" YEN SIGN
// U+20B1: "₱" PESO SIGN
- /* 46 */ "\uFDFC",
- /* 47 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1,\u060B",
+ /* 47 */ "\uFDFC",
+ /* 48 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1,\u060B",
// U+061F: "؟" ARABIC QUESTION MARK
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
- /* 48 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
+ /* 49 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
// U+2605: "★" BLACK STAR
// U+066D: "٭" ARABIC FIVE POINTED STAR
- /* 49 */ "\u2605,\u066D",
+ /* 50 */ "\u2605,\u066D",
// U+266A: "♪" EIGHTH NOTE
- /* 50 */ "\u266A",
- /* 51 */ null,
+ /* 51 */ "\u266A",
+ /* 52 */ null,
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
// U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
// U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
- /* 52 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
- /* 53 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+ /* 53 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
// U+2264: "≤" LESS-THAN OR EQUAL TO
// U+2265: "≥" GREATER-THAN EQUAL TO
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -1249,8 +1310,8 @@ public final class KeyboardTextsSet {
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 54 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
- /* 55 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
// U+0655: "ٕ" ARABIC HAMZA BELOW
// U+0652: "ْ" ARABIC SUKUN
// U+0651: "ّ" ARABIC SHADDA
@@ -1266,68 +1327,74 @@ public final class KeyboardTextsSet {
// U+064E: "َ" ARABIC FATHA
// U+0640: "ـ" ARABIC TATWEEL
// In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
- /* 56 */ "!fixedColumnOrder!7,\u0655,\u0652,\u0651,\u064C,\u064D,\u064B,\u0654,\u0656,\u0670,\u0653,\u064F,\u0650,\u064E,\u0640\u0640\u0640|\u0640",
- /* 57 */ "\u064B",
+ /* 57 */ "!fixedColumnOrder!7,\u0655,\u0652,\u0651,\u064C,\u064D,\u064B,\u0654,\u0656,\u0670,\u0653,\u064F,\u0650,\u064E,\u0640\u0640\u0640|\u0640",
+ /* 58 */ "\u064B",
// U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
- /* 58 */ "\u06F1",
+ /* 59 */ "\u06F1",
// U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
- /* 59 */ "\u06F2",
+ /* 60 */ "\u06F2",
// U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE
- /* 60 */ "\u06F3",
+ /* 61 */ "\u06F3",
// U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR
- /* 61 */ "\u06F4",
+ /* 62 */ "\u06F4",
// U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE
- /* 62 */ "\u06F5",
+ /* 63 */ "\u06F5",
// U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX
- /* 63 */ "\u06F6",
+ /* 64 */ "\u06F6",
// U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN
- /* 64 */ "\u06F7",
+ /* 65 */ "\u06F7",
// U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT
- /* 65 */ "\u06F8",
+ /* 66 */ "\u06F8",
// U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE
- /* 66 */ "\u06F9",
+ /* 67 */ "\u06F9",
// U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
- /* 67 */ "\u06F0",
- /* 68 */ "1",
- /* 69 */ "2",
- /* 70 */ "3",
- /* 71 */ "4",
- /* 72 */ "5",
- /* 73 */ "6",
- /* 74 */ "7",
- /* 75 */ "8",
- /* 76 */ "9",
+ /* 68 */ "\u06F0",
+ // Label for "switch to symbols" key.
+ // U+061F: "؟" ARABIC QUESTION MARK
+ /* 69 */ "\u06F3\u06F2\u06F1\u061F",
+ // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
+ // part because it'll be appended by the code.
+ /* 70 */ "\u06F3\u06F2\u06F1",
+ /* 71 */ "1",
+ /* 72 */ "2",
+ /* 73 */ "3",
+ /* 74 */ "4",
+ /* 75 */ "5",
+ /* 76 */ "6",
+ /* 77 */ "7",
+ /* 78 */ "8",
+ /* 79 */ "9",
// U+066B: "٫" ARABIC DECIMAL SEPARATOR
// U+066C: "٬" ARABIC THOUSANDS SEPARATOR
- /* 77 */ "0,\u066B,\u066C",
- /* 78~ */
+ /* 80 */ "0,\u066B,\u066C",
+ /* 81~ */
null, null, null, null, null, null, null, null, null, null,
- /* ~87 */
+ /* ~90 */
// U+060C: "،" ARABIC COMMA
- /* 88 */ "\u060C",
- /* 89 */ "\\,",
- /* 90 */ "\u061F",
- /* 91 */ "\u061B",
+ /* 91 */ "\u060C",
+ /* 92 */ "\\,",
+ /* 93 */ "\u061F",
+ /* 94 */ "\u061B",
// U+066A: "٪" ARABIC PERCENT SIGN
- /* 92 */ "\u066A",
- /* 93 */ null,
- /* 94 */ "?",
- /* 95 */ ";",
+ /* 95 */ "\u066A",
+ /* 96 */ null,
+ /* 97 */ "?",
+ /* 98 */ ";",
// U+2030: "‰" PER MILLE SIGN
- /* 96 */ "\\%,\u2030",
+ /* 99 */ "\\%,\u2030",
// U+060C: "،" ARABIC COMMA
// U+061B: "؛" ARABIC SEMICOLON
// U+061F: "؟" ARABIC QUESTION MARK
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
// U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
- /* 97 */ "\u060C",
- /* 98 */ "!",
- /* 99 */ "!,\\,",
- /* 100 */ "\u061F",
- /* 101 */ "\u061F,?",
- /* 102 */ "\u060C",
+ /* 100 */ "\u060C",
+ /* 101 */ "!",
+ /* 102 */ "!,\\,",
/* 103 */ "\u061F",
- /* 104 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
+ /* 104 */ "\u061F,?",
+ /* 105 */ "\u060C",
+ /* 106 */ "\u061F",
+ /* 107 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
};
/* Language fi: Finnish */
@@ -1435,44 +1502,56 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null,
- /* ~45 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0915: "क" DEVANAGARI LETTER KA
+ // U+0916: "ख" DEVANAGARI LETTER KHA
+ // U+0917: "ग" DEVANAGARI LETTER GA
+ /* 42 */ "\u0915\u0916\u0917",
+ /* 43~ */
+ null, null, null, null,
+ /* ~46 */
// U+20B9: "₹" INDIAN RUPEE SIGN
- /* 46 */ "\u20B9",
- /* 47~ */
+ /* 47 */ "\u20B9",
+ /* 48~ */
null, null, null, null, null, null, null, null, null, null, null,
- /* ~57 */
+ /* ~58 */
// U+0967: "१" DEVANAGARI DIGIT ONE
- /* 58 */ "\u0967",
+ /* 59 */ "\u0967",
// U+0968: "२" DEVANAGARI DIGIT TWO
- /* 59 */ "\u0968",
+ /* 60 */ "\u0968",
// U+0969: "३" DEVANAGARI DIGIT THREE
- /* 60 */ "\u0969",
+ /* 61 */ "\u0969",
// U+096A: "४" DEVANAGARI DIGIT FOUR
- /* 61 */ "\u096A",
+ /* 62 */ "\u096A",
// U+096B: "५" DEVANAGARI DIGIT FIVE
- /* 62 */ "\u096B",
+ /* 63 */ "\u096B",
// U+096C: "६" DEVANAGARI DIGIT SIX
- /* 63 */ "\u096C",
+ /* 64 */ "\u096C",
// U+096D: "७" DEVANAGARI DIGIT SEVEN
- /* 64 */ "\u096D",
+ /* 65 */ "\u096D",
// U+096E: "८" DEVANAGARI DIGIT EIGHT
- /* 65 */ "\u096E",
+ /* 66 */ "\u096E",
// U+096F: "९" DEVANAGARI DIGIT NINE
- /* 66 */ "\u096F",
+ /* 67 */ "\u096F",
// U+0966: "०" DEVANAGARI DIGIT ZERO
- /* 67 */ "\u0966",
- /* 68 */ "1",
- /* 69 */ "2",
- /* 70 */ "3",
- /* 71 */ "4",
- /* 72 */ "5",
- /* 73 */ "6",
- /* 74 */ "7",
- /* 75 */ "8",
- /* 76 */ "9",
- /* 77 */ "0",
+ /* 68 */ "\u0966",
+ // Label for "switch to symbols" key.
+ /* 69 */ "?\u0967\u0968\u0969",
+ // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
+ // part because it'll be appended by the code.
+ /* 70 */ "\u0967\u0968\u0969",
+ /* 71 */ "1",
+ /* 72 */ "2",
+ /* 73 */ "3",
+ /* 74 */ "4",
+ /* 75 */ "5",
+ /* 76 */ "6",
+ /* 77 */ "7",
+ /* 78 */ "8",
+ /* 79 */ "9",
+ /* 80 */ "0",
};
/* Language hr: Croatian */
@@ -1660,29 +1739,35 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null,
- /* ~42 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+05D0: "א" HEBREW LETTER ALEF
+ // U+05D1: "ב" HEBREW LETTER BET
+ // U+05D2: "ג" HEBREW LETTER GIMEL
+ /* 42 */ "\u05D0\u05D1\u05D2",
+ /* 43 */ null,
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_double_quote">&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB;|&#x00AB;</string>
- /* 43 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
+ /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;|&#x00BB;,&#x00BB|&#x00AB;;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
- /* 45 */ null,
+ /* 45 */ "!fixedColumnOrder!4,\u201C,\u201D,\u00AB|\u00BB,\u00BB|\u00AB,\u2018,\u2019,\u201A,\u201B",
+ /* 46 */ null,
// U+20AA: "₪" NEW SHEQEL SIGN
- /* 46 */ "\u20AA",
- /* 47 */ null,
+ /* 47 */ "\u20AA",
/* 48 */ null,
+ /* 49 */ null,
// U+2605: "★" BLACK STAR
- /* 49 */ "\u2605",
- /* 50 */ null,
+ /* 50 */ "\u2605",
+ /* 51 */ null,
// U+00B1: "±" PLUS-MINUS SIGN
// U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
- /* 51 */ "\u00B1,\uFB29",
+ /* 52 */ "\u00B1,\uFB29",
// The all letters need to be mirrored are found at
// http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
- /* 52 */ "!fixedColumnOrder!3,<|>,{|},[|]",
- /* 53 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
+ /* 53 */ "!fixedColumnOrder!3,<|>,{|},[|]",
+ /* 54 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
// U+2264: "≤" LESS-THAN OR EQUAL TO
// U+2265: "≥" GREATER-THAN EQUAL TO
// U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -1698,8 +1783,22 @@ public final class KeyboardTextsSet {
// U+201D: "”" RIGHT DOUBLE QUOTATION MARK
// U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
- /* 54 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
- /* 55 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ /* 55 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+ /* 56 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+ };
+
+ /* Language ka: Georgian */
+ private static final String[] LANGUAGE_ka = {
+ /* 0~ */
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+10D0: "ა" GEORGIAN LETTER AN
+ // U+10D1: "ბ" GEORGIAN LETTER BAN
+ // U+10D2: "გ" GEORGIAN LETTER GAN
+ /* 42 */ "\u10D0\u10D1\u10D2",
};
/* Language ky: Kirghiz */
@@ -1733,6 +1832,12 @@ public final class KeyboardTextsSet {
/* ~39 */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
/* 40 */ "\u0451",
+ /* 41 */ null,
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
};
/* Language lt: Lithuanian */
@@ -1933,7 +2038,12 @@ public final class KeyboardTextsSet {
/* 40 */ "\u0450",
// U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
/* 41 */ "\u045D",
- /* 42 */ null,
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
+ /* 43 */ null,
// U+2018: "‘" LEFT SINGLE QUOTATION MARK
// U+2019: "’" RIGHT SINGLE QUOTATION MARK
// U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
@@ -1944,10 +2054,10 @@ public final class KeyboardTextsSet {
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
- /* 43 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
+ /* 44 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 45 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
};
/* Language mn: Mongolian */
@@ -1955,11 +2065,18 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null,
- /* ~45 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
+ /* 43~ */
+ null, null, null, null,
+ /* ~46 */
// U+20AE: "₮" TUGRIK SIGN
- /* 46 */ "\u20AE",
+ /* 47 */ "\u20AE",
};
/* Language nb: Norwegian Bokmål */
@@ -2239,6 +2356,12 @@ public final class KeyboardTextsSet {
/* ~39 */
// U+0451: "ё" CYRILLIC SMALL LETTER IO
/* 40 */ "\u0451",
+ /* 41 */ null,
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
};
/* Language sk: Slovak */
@@ -2388,8 +2511,13 @@ public final class KeyboardTextsSet {
/* 40 */ "\u0450",
// U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
/* 41 */ "\u045D",
- /* 42 */ null,
// END: More keys definitions for Serbian (Cyrillic)
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
+ /* 43 */ null,
// U+2018: "‘" LEFT SINGLE QUOTATION MARK
// U+2019: "’" RIGHT SINGLE QUOTATION MARK
// U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
@@ -2400,10 +2528,10 @@ public final class KeyboardTextsSet {
// U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string>
- /* 43 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
+ /* 44 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB",
// TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK.
// <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
- /* 44 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
+ /* 45 */ "!fixedColumnOrder!5,\u201E,\u201C,\u201D,\u00AB,\u00BB,\u2018,\u2019,\u201A,\u201B",
};
/* Language sv: Swedish */
@@ -2504,11 +2632,18 @@ public final class KeyboardTextsSet {
/* 0~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null,
- /* ~45 */
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0E01: "ก" THAI CHARACTER KO KAI
+ // U+0E02: "ข" THAI CHARACTER KHO KHAI
+ // U+0E04: "ค" THAI CHARACTER KHO KHWAI
+ /* 42 */ "\u0E01\u0E02\u0E04",
+ /* 43~ */
+ null, null, null, null,
+ /* ~46 */
// U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
- /* 46 */ "\u0E3F",
+ /* 47 */ "\u0E3F",
};
/* Language tl: Tagalog */
@@ -2636,10 +2771,18 @@ public final class KeyboardTextsSet {
// U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN
/* 35 */ "\u044A",
/* 36~ */
- null, null, null, null, null, null, null, null, null, null,
- /* ~45 */
+ null, null, null, null, null, null,
+ /* ~41 */
+ // Label for "switch to alphabetic" key.
+ // U+0410: "А" CYRILLIC CAPITAL LETTER A
+ // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
+ // U+0412: "В" CYRILLIC CAPITAL LETTER VE
+ /* 42 */ "\u0410\u0411\u0412",
+ /* 43~ */
+ null, null, null, null,
+ /* ~46 */
// U+20B4: "₴" HRYVNIA SIGN
- /* 46 */ "\u20B4",
+ /* 47 */ "\u20B4",
};
/* Language vi: Vietnamese */
@@ -2724,10 +2867,10 @@ public final class KeyboardTextsSet {
/* 10~ */
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null,
- /* ~45 */
+ null, null, null, null, null, null, null,
+ /* ~46 */
// U+20AB: "₫" DONG SIGN
- /* 46 */ "\u20AB",
+ /* 47 */ "\u20AB",
};
/* Language zu: Zulu */
@@ -2905,10 +3048,12 @@ public final class KeyboardTextsSet {
"af", LANGUAGE_af, /* Afrikaans */
"ar", LANGUAGE_ar, /* Arabic */
"be", LANGUAGE_be, /* Belarusian */
+ "bg", LANGUAGE_bg, /* Bulgarian */
"ca", LANGUAGE_ca, /* Catalan */
"cs", LANGUAGE_cs, /* Czech */
"da", LANGUAGE_da, /* Danish */
"de", LANGUAGE_de, /* German */
+ "el", LANGUAGE_el, /* Greek */
"en", LANGUAGE_en, /* English */
"eo", LANGUAGE_eo, /* Esperanto */
"es", LANGUAGE_es, /* Spanish */
@@ -2922,6 +3067,7 @@ public final class KeyboardTextsSet {
"is", LANGUAGE_is, /* Icelandic */
"it", LANGUAGE_it, /* Italian */
"iw", LANGUAGE_iw, /* Hebrew */
+ "ka", LANGUAGE_ka, /* Georgian */
"ky", LANGUAGE_ky, /* Kirghiz */
"lt", LANGUAGE_lt, /* Lithuanian */
"lv", LANGUAGE_lv, /* Latvian */
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index dcbbfca09..9d52f3a70 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -824,6 +824,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
}
// Remove pending messages related to update suggestions
mHandler.cancelUpdateSuggestionStrip();
+ resetComposingState(true /* alsoResetLastComposedWord */);
}
@Override
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index fb1eb2701..f1a7e97e8 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -1412,8 +1412,6 @@ public final class BinaryDictInputOutput {
private static WeightedString getWordAtAddressWithParentAddress(
final FusionDictionaryBufferInterface buffer, final int headerSize, final int address,
final FormatOptions options) {
- final StringBuilder builder = new StringBuilder();
-
int currentAddress = address;
int index = FormatSpec.MAX_WORD_LENGTH - 1;
int frequency = Integer.MIN_VALUE;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 2f146f86c..89d6c9010 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -294,6 +294,8 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
final String[] gatheredSuggestions;
final boolean hasRecommendedSuggestions;
if (0 == mLength) {
+ // TODO: the comment below describes what is intended, but in the practice
+ // mBestSuggestion is only ever set to null so it doesn't work. Fix this.
// Either we found no suggestions, or we found some BUT the max length was 0.
// If we found some mBestSuggestion will not be null. If it is null, then
// we found none, regardless of the max length.
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
index f0017c095..26a304ef8 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -17,66 +17,17 @@
package com.android.inputmethod.latin.suggestions;
import android.content.Context;
-import android.content.res.Resources;
import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardActionListener;
-import com.android.inputmethod.keyboard.KeyboardView;
-import com.android.inputmethod.keyboard.MoreKeysDetector;
-import com.android.inputmethod.keyboard.MoreKeysPanel;
-import com.android.inputmethod.keyboard.PointerTracker;
-import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
-import com.android.inputmethod.keyboard.PointerTracker.KeyEventHandler;
-import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
-import com.android.inputmethod.latin.CoordinateUtils;
+import com.android.inputmethod.keyboard.MoreKeysKeyboardView;
import com.android.inputmethod.latin.R;
/**
* A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
* key presses and touch movements.
*/
-public final class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
- private final int[] mCoordinates = CoordinateUtils.newInstance();
-
- final KeyDetector mModalPanelKeyDetector;
- private final KeyDetector mSlidingPanelKeyDetector;
-
- private Controller mController;
- KeyboardActionListener mListener;
- private int mOriginX;
- private int mOriginY;
-
- static final TimerProxy EMPTY_TIMER_PROXY = new TimerProxy.Adapter();
-
- final KeyboardActionListener mSuggestionsPaneListener =
- new KeyboardActionListener.Adapter() {
- @Override
- public void onPressKey(final int primaryCode) {
- mListener.onPressKey(primaryCode);
- }
-
- @Override
- public void onReleaseKey(final int primaryCode, final boolean withSliding) {
- mListener.onReleaseKey(primaryCode, withSliding);
- }
-
- @Override
- public void onCodeInput(final int primaryCode, final int x, final int y) {
- final int index = primaryCode - MoreSuggestions.SUGGESTION_CODE_BASE;
- if (index >= 0 && index < SuggestionStripView.MAX_SUGGESTIONS) {
- mListener.onCustomRequest(index);
- }
- }
-
- @Override
- public void onCancelInput() {
- mListener.onCancelInput();
- }
- };
+public final class MoreSuggestionsView extends MoreKeysKeyboardView {
public MoreSuggestionsView(final Context context, final AttributeSet attrs) {
this(context, attrs, R.attr.moreSuggestionsViewStyle);
@@ -85,12 +36,12 @@ public final class MoreSuggestionsView extends KeyboardView implements MoreKeysP
public MoreSuggestionsView(final Context context, final AttributeSet attrs,
final int defStyle) {
super(context, attrs, defStyle);
+ }
- final Resources res = context.getResources();
- mModalPanelKeyDetector = new KeyDetector(/* keyHysteresisDistance */ 0);
- mSlidingPanelKeyDetector = new MoreKeysDetector(
- res.getDimension(R.dimen.more_suggestions_slide_allowance));
- setKeyPreviewPopupEnabled(false, 0);
+ @Override
+ protected int getDefaultCoordX() {
+ final MoreSuggestions pane = (MoreSuggestions)getKeyboard();
+ return pane.mOccupiedWidth / 2;
}
@Override
@@ -110,119 +61,11 @@ public final class MoreSuggestionsView extends KeyboardView implements MoreKeysP
}
@Override
- public void setKeyboard(final Keyboard keyboard) {
- super.setKeyboard(keyboard);
- mModalPanelKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop());
- mSlidingPanelKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
- -getPaddingTop() + mVerticalCorrection);
- }
-
- @Override
- public KeyDetector getKeyDetector() {
- return mSlidingPanelKeyDetector;
- }
-
- @Override
- public KeyboardActionListener getKeyboardActionListener() {
- return mSuggestionsPaneListener;
- }
-
- @Override
- public DrawingProxy getDrawingProxy() {
- return this;
- }
-
- @Override
- public TimerProxy getTimerProxy() {
- return EMPTY_TIMER_PROXY;
- }
-
- @Override
- public void setKeyPreviewPopupEnabled(final boolean previewEnabled, final int delay) {
- // Suggestions pane needs no pop-up key preview displayed, so we pass always false with a
- // delay of 0. The delay does not matter actually since the popup is not shown anyway.
- super.setKeyPreviewPopupEnabled(false, 0);
- }
-
- @Override
- public void showMoreKeysPanel(final View parentView, final Controller controller,
- final int pointX, final int pointY, final KeyboardActionListener listener) {
- mController = controller;
- mListener = listener;
- final View container = getContainerView();
- final MoreSuggestions pane = (MoreSuggestions)getKeyboard();
- final int defaultCoordX = pane.mOccupiedWidth / 2;
- // The coordinates of panel's left-top corner in parentView's coordinate system.
- final int x = pointX - defaultCoordX - container.getPaddingLeft();
- final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom();
-
- parentView.getLocationInWindow(mCoordinates);
- // Ensure the horizontal position of the panel does not extend past the screen edges.
- final int maxX = parentView.getMeasuredWidth() - container.getMeasuredWidth();
- final int panelX = Math.max(0, Math.min(maxX, x + CoordinateUtils.x(mCoordinates)));
- final int panelY = y + CoordinateUtils.y(mCoordinates);
- container.setX(panelX);
- container.setY(panelY);
-
- mOriginX = x + container.getPaddingLeft();
- mOriginY = y + container.getPaddingTop();
- controller.onShowMoreKeysPanel(this);
- }
-
- @Override
- public boolean dismissMoreKeysPanel() {
- if (mController == null) return false;
- return mController.onDismissMoreKeysPanel();
- }
-
- @Override
- public int translateX(final int x) {
- return x - mOriginX;
- }
-
- @Override
- public int translateY(final int y) {
- return y - mOriginY;
- }
-
- private final KeyEventHandler mModalPanelKeyEventHandler = new KeyEventHandler() {
- @Override
- public KeyDetector getKeyDetector() {
- return mModalPanelKeyDetector;
- }
-
- @Override
- public KeyboardActionListener getKeyboardActionListener() {
- return mSuggestionsPaneListener;
- }
-
- @Override
- public DrawingProxy getDrawingProxy() {
- return MoreSuggestionsView.this;
+ public void onCodeInput(final int primaryCode, final int x, final int y) {
+ final int index = primaryCode - MoreSuggestions.SUGGESTION_CODE_BASE;
+ if (index >= 0 && index < SuggestionStripView.MAX_SUGGESTIONS) {
+ mListener.onCustomRequest(index);
}
-
- @Override
- public TimerProxy getTimerProxy() {
- return EMPTY_TIMER_PROXY;
- }
- };
-
- @Override
- public boolean onTouchEvent(final MotionEvent me) {
- final int action = me.getAction();
- final long eventTime = me.getEventTime();
- final int index = me.getActionIndex();
- final int id = me.getPointerId(index);
- final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
- final int x = (int)me.getX(index);
- final int y = (int)me.getY(index);
- tracker.processMotionEvent(action, x, y, eventTime, mModalPanelKeyEventHandler);
- return true;
- }
-
- @Override
- public View getContainerView() {
- return (View)getParent();
}
@Override
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index e27fc2a7a..d7b514e8a 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -54,7 +54,6 @@ import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.keyboard.MoreKeysPanel;
-import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.ViewLayoutUtils;
import com.android.inputmethod.latin.AutoCorrection;
import com.android.inputmethod.latin.CollectionUtils;
@@ -685,6 +684,11 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
public void onShowMoreKeysPanel(MoreKeysPanel panel) {
mKeyboardView.onShowMoreKeysPanel(panel);
}
+
+ @Override
+ public void onCancelMoreKeysPanel() {
+ dismissMoreSuggestions();
+ }
};
boolean dismissMoreSuggestions() {
@@ -771,7 +775,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
final long eventTime = me.getEventTime();
final int index = me.getActionIndex();
final int id = me.getPointerId(index);
- final PointerTracker tracker = PointerTracker.getPointerTracker(id, moreKeysPanel);
final int x = (int)me.getX(index);
final int y = (int)me.getY(index);
final int translatedX = moreKeysPanel.translateX(x);
@@ -783,7 +786,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
// Decided to be in the sliding input mode only when the touch point has been moved
// upward.
mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_SLIDING_MODE;
- tracker.onShowMoreKeysPanel(translatedX, translatedY, moreKeysPanel);
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
// Decided to be in the modal input mode
mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_MODAL_MODE;
@@ -792,7 +794,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
}
// MORE_SUGGESTIONS_IN_SLIDING_MODE
- tracker.processMotionEvent(action, translatedX, translatedY, eventTime, moreKeysPanel);
+ mMoreSuggestionsView.processMotionEvent(action, translatedX, translatedY, id, eventTime);
return true;
}