diff options
Diffstat (limited to 'java')
66 files changed, 356 insertions, 192 deletions
diff --git a/java/res/drawable-hdpi/more_suggestions_hint.png b/java/res/drawable-hdpi/more_suggestions_hint.png Binary files differdeleted file mode 100644 index 93604752b..000000000 --- a/java/res/drawable-hdpi/more_suggestions_hint.png +++ /dev/null diff --git a/java/res/drawable-hdpi/more_suggestions_hint_holo.png b/java/res/drawable-hdpi/more_suggestions_hint_holo.png Binary files differdeleted file mode 100644 index 93604752b..000000000 --- a/java/res/drawable-hdpi/more_suggestions_hint_holo.png +++ /dev/null diff --git a/java/res/drawable-mdpi/more_suggestions_hint.png b/java/res/drawable-mdpi/more_suggestions_hint.png Binary files differdeleted file mode 100644 index 7352810d3..000000000 --- a/java/res/drawable-mdpi/more_suggestions_hint.png +++ /dev/null diff --git a/java/res/drawable-mdpi/more_suggestions_hint_holo.png b/java/res/drawable-mdpi/more_suggestions_hint_holo.png Binary files differdeleted file mode 100644 index 7352810d3..000000000 --- a/java/res/drawable-mdpi/more_suggestions_hint_holo.png +++ /dev/null diff --git a/java/res/drawable-xhdpi/more_suggestions_hint.png b/java/res/drawable-xhdpi/more_suggestions_hint.png Binary files differdeleted file mode 100644 index 35fb42087..000000000 --- a/java/res/drawable-xhdpi/more_suggestions_hint.png +++ /dev/null diff --git a/java/res/drawable-xhdpi/more_suggestions_hint_holo.png b/java/res/drawable-xhdpi/more_suggestions_hint_holo.png Binary files differdeleted file mode 100644 index 35fb42087..000000000 --- a/java/res/drawable-xhdpi/more_suggestions_hint_holo.png +++ /dev/null diff --git a/java/res/drawable/btn_keyboard_key_gingerbread.xml b/java/res/drawable/btn_keyboard_key_gingerbread.xml index 4a113a8a1..5b4399e1b 100644 --- a/java/res/drawable/btn_keyboard_key_gingerbread.xml +++ b/java/res/drawable/btn_keyboard_key_gingerbread.xml @@ -23,6 +23,13 @@ <item android:state_single="true" android:drawable="@drawable/btn_keyboard_key_dark_normal" /> + <!-- Action keys. --> + + <item android:state_active="true" android:state_pressed="true" + android:drawable="@drawable/btn_keyboard_key_dark_pressed" /> + <item android:state_active="true" + android:drawable="@drawable/btn_keyboard_key_dark_normal" /> + <!-- Toggle keys. Use checkable/checked state. --> <item android:state_checkable="true" android:state_checked="true" android:state_pressed="true" @@ -34,7 +41,7 @@ <item android:state_checkable="true" android:drawable="@drawable/btn_keyboard_key_dark_normal_off" /> - <!-- Normal keys --> + <!-- Normal keys. --> <item android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_light_pressed" /> diff --git a/java/res/drawable/btn_keyboard_key_stone.xml b/java/res/drawable/btn_keyboard_key_stone.xml index 27932e8da..9bc3f18d6 100644 --- a/java/res/drawable/btn_keyboard_key_stone.xml +++ b/java/res/drawable/btn_keyboard_key_stone.xml @@ -23,6 +23,13 @@ <item android:state_single="true" android:drawable="@drawable/btn_keyboard_key_normal_stone" /> + <!-- Action keys. --> + + <item android:state_active="true" android:state_pressed="true" + android:drawable="@drawable/btn_keyboard_key_fulltrans_pressed" /> + <item android:state_active="true" + android:drawable="@drawable/btn_keyboard_key_normal_stone" /> + <!-- Toggle keys. Use checkable/checked state. --> <item android:state_checkable="true" android:state_checked="true" @@ -35,7 +42,7 @@ <item android:state_checkable="true" android:drawable="@drawable/btn_keyboard_key_normal_off_stone" /> - <!-- Normal keys --> + <!-- Normal keys. --> <item android:state_pressed="true" android:drawable="@drawable/btn_keyboard_key_fulltrans_pressed" /> diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml index 8dcc730ef..b39ee3dfc 100644 --- a/java/res/values-am/strings.xml +++ b/java/res/values-am/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"ድጋሚ ለማስተካከል ጥቆማዎችን አዘጋጅ"</string> <string name="auto_cap" msgid="1719746674854628252">"ራስ-ሰር አቢይ ማድረግ"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"መዝገበ ቃላቶች ጨምር"</string> - <string name="main_dictionary" msgid="4798763781818361168">"ዋና መዝገበ ቃል"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"የማስተካከያ ጥቆማዎች አሳይ"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"እየተየብክ ተመራጭ ቃላትን አሳይ"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"ሁልጊዜ አሳይ"</string> diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml index 87395d881..9f1209adc 100644 --- a/java/res/values-ar/strings.xml +++ b/java/res/values-ar/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"تعيين اقتراحات لعمليات إعادة التصحيح"</string> <string name="auto_cap" msgid="1719746674854628252">"أحرف كبيرة تلقائيًا"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"القواميس الإضافية"</string> - <string name="main_dictionary" msgid="4798763781818361168">"القاموس الرئيسي"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"عرض اقتراحات التصحيح"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"عرض الكلمات المقترحة أثناء الكتابة"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"عرض دومًا"</string> diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml index 9c05900ef..47e81e776 100644 --- a/java/res/values-bg/strings.xml +++ b/java/res/values-bg/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Задаване на предложения за повторни поправки"</string> <string name="auto_cap" msgid="1719746674854628252">"Автоматично поставяне на главни букви"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Добавени речници"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Основен речник"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Показване на предложения за поправка"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Показване на предложения, докато пишете"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Винаги да се показва"</string> diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml index cab232f6e..a5a3e74e8 100644 --- a/java/res/values-cs/strings.xml +++ b/java/res/values-cs/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Nastavit návrhy pro opětovné opravy"</string> <string name="auto_cap" msgid="1719746674854628252">"Velká písmena automaticky"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Doplňkové slovníky"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Hlavní slovník"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Zobrazit návrhy oprav"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Zobrazovat navržená slova během psaní"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vždy zobrazovat"</string> diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml index b5ab6c440..56ade85f1 100644 --- a/java/res/values-da/strings.xml +++ b/java/res/values-da/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Angiv forslag til fornyet rettelse"</string> <string name="auto_cap" msgid="1719746674854628252">"Skriv aut. med stort"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Tillægsordbøger"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Hovedordbog"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Vis rettelsesforslag"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Vis ordforslag under indtastning"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vis altid"</string> diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml index 70af845a5..fac7fac5c 100644 --- a/java/res/values-de/strings.xml +++ b/java/res/values-de/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Vorschläge für Korrekturen festlegen"</string> <string name="auto_cap" msgid="1719746674854628252">"Autom. Groß-/Kleinschr."</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Add-on-Wörterbücher"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Hauptwörterbuch"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Änderungsvorschläge anzeigen"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Vorgeschlagene Wörter während des Tippens anzeigen"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Immer anzeigen"</string> diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml index ce91243cc..2b9ebf5cb 100644 --- a/java/res/values-el/strings.xml +++ b/java/res/values-el/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Ορισμός προτάσεων για επαναλήψεις διορθώσεων"</string> <string name="auto_cap" msgid="1719746674854628252">"Αυτόματη χρήση κεφαλαίων"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Πρόσθετα λεξικά"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Κύριο λεξικό"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Εμφάνιση προτάσεων διόρθωσης"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Προβολή προτεινόμενων λέξεων κατά την πληκτρολόγηση"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Να εμφανίζεται πάντα"</string> diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml index f958821e8..86163acc5 100644 --- a/java/res/values-es-rUS/strings.xml +++ b/java/res/values-es-rUS/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Establecer sugerencias para realizar correcciones"</string> <string name="auto_cap" msgid="1719746674854628252">"Mayúsculas automáticas"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Diccionarios complementarios"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Diccionario principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Mostrar sugerencias de correcciones"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Mostrar palabras sugeridas al escribir"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar siempre"</string> diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml index 1c19c62fb..701c1e00a 100644 --- a/java/res/values-es/strings.xml +++ b/java/res/values-es/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Establecer sugerencias para nuevas correcciones"</string> <string name="auto_cap" msgid="1719746674854628252">"Mayúsculas automáticas"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Diccionarios complementarios"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Diccionario principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Mostrar sugerencias de correcciones"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Muestra las palabras sugeridas mientras se escribe."</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar siempre"</string> diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml index 3837b1954..4f943cf82 100644 --- a/java/res/values-fi/strings.xml +++ b/java/res/values-fi/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Aseta korjausehdotuksia"</string> <string name="auto_cap" msgid="1719746674854628252">"Automaattiset isot kirjaimet"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Lisäsanakirjat"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Pääsanakirja"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Näytä korjausehdotukset"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Näytä sanaehdotukset kirjoitettaessa"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Näytä aina"</string> diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml index 04d72d146..33c3771f4 100644 --- a/java/res/values-fr/strings.xml +++ b/java/res/values-fr/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Définir des suggestions de recorrection"</string> <string name="auto_cap" msgid="1719746674854628252">"Majuscules auto"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dictionnaires complémentaires"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Dictionnaire principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Afficher les suggestions de correction"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Afficher les suggestions de terme lors de la saisie"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Toujours afficher"</string> diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml index fbb649141..3e5470fc9 100644 --- a/java/res/values-hr/strings.xml +++ b/java/res/values-hr/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Postavite prijedloge za ponovne ispravke"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatsko pisanje velikih slova"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Rječnici-dodaci"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Glavni rječnik"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Pokaži prijedloge ispravka"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Prikazivanje predloženih riječi prilikom upisivanja"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Uvijek prikaži"</string> diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml index 7f9833dc1..47801a58b 100644 --- a/java/res/values-hu/strings.xml +++ b/java/res/values-hu/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Javaslatok beállítása az újbóli javításokhoz"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatikusan nagy kezdőbetű"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Bővítmények: szótárak"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Fő szótár"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Javítási ajánlások megjelenítése"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"A javasolt szavak megjelenítése gépelés közben"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mindig látszik"</string> diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml index ced70b355..7150de3a0 100644 --- a/java/res/values-in/strings.xml +++ b/java/res/values-in/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Setel saran untuk koreksi ulang"</string> <string name="auto_cap" msgid="1719746674854628252">"Kapitalisasi otomatis"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Kamus pengaya"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Kamus utama"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Tampilkan saran koreksi"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Tampilkan kata yang disarankan ketika mengetik"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Selalu tampilkan"</string> diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml index fe4a1e0ad..26aee30e3 100644 --- a/java/res/values-iw/strings.xml +++ b/java/res/values-iw/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"הגדר הצעות עבור תיקונים חוזרים"</string> <string name="auto_cap" msgid="1719746674854628252">"הפיכת אותיות לרישיות באופן אוטומטי"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"הוספת מילונים"</string> - <string name="main_dictionary" msgid="4798763781818361168">"מילון ראשי"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"הצג הצעות לתיקונים"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"הצג הצעות למילים בעת הקלדה"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"הצג תמיד"</string> diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml index 03974feb6..2b650a6bc 100644 --- a/java/res/values-ko/strings.xml +++ b/java/res/values-ko/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"다시 수정하기 위한 추천사항 설정"</string> <string name="auto_cap" msgid="1719746674854628252">"자동 대문자화"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"사전 추가"</string> - <string name="main_dictionary" msgid="4798763781818361168">"기본 디렉토리"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"수정 제안 표시"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"글자를 입력하는 동안 추천 단어 표시"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"항상 표시"</string> diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml index 9aa9cc598..622b059af 100644 --- a/java/res/values-lt/strings.xml +++ b/java/res/values-lt/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Nustatyti pakartotinio pataisymo pasiūlymų"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatinis didžiųjų raidžių rašymas"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Papildomi žodynai"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Pagrindinis žodynas"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Rodyti taisymo pasiūlymus"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Įvedant tekstą pateikti siūlomų žodžių"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Visada rodyti"</string> diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml index f347dbcfe..090ae1e1b 100644 --- a/java/res/values-lv/strings.xml +++ b/java/res/values-lv/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Iestatīt atkārtotu labojumu ieteikumus"</string> <string name="auto_cap" msgid="1719746674854628252">"Automātiska lielo burtu lietošana"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Papildinājumu vārdnīcas"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Galvenā vārdnīca"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Rādīt labojumu ieteikumus"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Ievades laikā attēlot ieteiktos vārdus"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vienmēr rādīt"</string> diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index 96935e5af..597b60f5e 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Angi forslag for korrigeringer"</string> <string name="auto_cap" msgid="1719746674854628252">"Stor forbokstav"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Tilleggsordbøker"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Hovedordliste"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Vis rettingsforslag"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Vis ordforslag under skriving"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vis alltid"</string> diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml index ab731bfdc..9ffc6e73f 100644 --- a/java/res/values-nl/strings.xml +++ b/java/res/values-nl/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Suggesties instellen voor verbeteringen"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-hoofdlettergebruik"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Woordenboeken toevoegen"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Algemeen woordenboek"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Correctievoorstellen weergeven"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Voorgestelde woorden weergeven tijdens typen"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Altijd weergeven"</string> diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml index d793bc9b2..31c9d4e22 100644 --- a/java/res/values-pl/strings.xml +++ b/java/res/values-pl/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Ustaw sugestie poprawek"</string> <string name="auto_cap" msgid="1719746674854628252">"Wstawiaj wielkie litery"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dodatkowe słowniki"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Główny słownik"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Pokazuj propozycje poprawek"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Wyświetl proponowane słowa podczas wpisywania"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Zawsze pokazuj"</string> diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml index b60aea30b..41e10b52b 100644 --- a/java/res/values-pt-rPT/strings.xml +++ b/java/res/values-pt-rPT/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Definir sugestões para correções"</string> <string name="auto_cap" msgid="1719746674854628252">"Letras maiúsculas automáticas"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dicionários extras"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Dicionário principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Mostrar sugestões de correcção"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Apresentar sugestões de palavras ao escrever"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar sempre"</string> diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml index 045baa96c..73eb932ed 100644 --- a/java/res/values-pt/strings.xml +++ b/java/res/values-pt/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Definir sugestões para recorreções"</string> <string name="auto_cap" msgid="1719746674854628252">"Capitaliz. automática"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dicionários complementares"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Dicionário principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Exibir sugestões de correção"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Exibir sugestões de palavras durante a digitação"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Mostrar sempre"</string> diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml index 17a343732..97a254b8b 100644 --- a/java/res/values-ro/strings.xml +++ b/java/res/values-ro/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Setaţi sugestii pentru rectificări"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalizare"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Dicţionare suplimentare"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Dicţionar principal"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Afişaţi sugestii de corectare"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Afişaţi sugestii de cuvinte în timpul introducerii textului"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Afişaţi întotdeauna"</string> diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml index 77a489450..cfc502272 100644 --- a/java/res/values-ru/strings.xml +++ b/java/res/values-ru/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Показывать варианты исправления"</string> <string name="auto_cap" msgid="1719746674854628252">"Заглавные автоматически"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Дополнительные словари"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Основной словарь"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Показать варианты исправлений"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Предлагать варианты слов во время ввода"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Всегда показывать"</string> diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml index 6312c597c..ac10b85f0 100644 --- a/java/res/values-sk/strings.xml +++ b/java/res/values-sk/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Nastaviť návrhy pre opätovné opravy"</string> <string name="auto_cap" msgid="1719746674854628252">"Veľké písmená automaticky"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Doplnkové slovníky"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Hlavný slovník"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Zobraziť návrhy opráv"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Zobrazovať navrhované slová počas písania"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vždy zobrazovať"</string> diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml index a96108b92..a742e1d22 100644 --- a/java/res/values-sl/strings.xml +++ b/java/res/values-sl/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Nastavitev predlogov za vnovične popravke"</string> <string name="auto_cap" msgid="1719746674854628252">"Samodejne velike začetnice"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Nastavitev slovarjev"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Glavni slovar"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Pokaži predloge popravkov"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Pokaži predlagane besede med tipkanjem"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Vedno pokaži"</string> diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml index 4d5985c51..32792c223 100644 --- a/java/res/values-sr/strings.xml +++ b/java/res/values-sr/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Подешавање предлога за поновне исправке"</string> <string name="auto_cap" msgid="1719746674854628252">"Аутоматски унос великих слова"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Помоћни речници"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Главни речник"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Прикажи предлоге за исправку"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Приказивање предложених речи током уноса текста"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Увек прикажи"</string> diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml index 27417bf78..4e2cdd472 100644 --- a/java/res/values-sv/strings.xml +++ b/java/res/values-sv/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Ställ in förslag för omkorrigeringar"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatiska versaler"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Tilläggsordlistor"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Huvudordlistan"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Visa rättningsförslag"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Visar ordförslag när du skriver"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Visa alltid"</string> diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml index d02b4eaad..e1bdecfd9 100644 --- a/java/res/values-sw600dp/dimens.xml +++ b/java/res/values-sw600dp/dimens.xml @@ -76,4 +76,5 @@ <dimen name="suggestion_min_width">0.3in</dimen> <dimen name="suggestion_padding">12dip</dimen> <dimen name="suggestion_text_size">22dip</dimen> + <dimen name="more_suggestions_hint_text_size">33dip</dimen> </resources> diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml index bfc2593db..b825b1457 100644 --- a/java/res/values-sw768dp/dimens.xml +++ b/java/res/values-sw768dp/dimens.xml @@ -79,4 +79,5 @@ <dimen name="suggestion_min_width">46dip</dimen> <dimen name="suggestion_padding">8dip</dimen> <dimen name="suggestion_text_size">22dip</dimen> + <dimen name="more_suggestions_hint_text_size">33dip</dimen> </resources> diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml index d442cdbc8..819c417b5 100644 --- a/java/res/values-th/strings.xml +++ b/java/res/values-th/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"ตั้งค่าคำแนะนำสำหรับการแก้ไขซ้ำ"</string> <string name="auto_cap" msgid="1719746674854628252">"ปรับเป็นตัวพิมพ์ใหญ่อัตโนมัติ"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"พจนานุกรม Add-On"</string> - <string name="main_dictionary" msgid="4798763781818361168">"พจนานุกรมหลัก"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"แสดงคำแนะนำการแก้ไข"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"แสดงคำที่แนะนำขณะพิมพ์"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"แสดงทุกครั้ง"</string> diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml index d61cda9fa..f5f0dfbab 100644 --- a/java/res/values-tl/strings.xml +++ b/java/res/values-tl/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Magtakda ng mga suhestyon para sa mga muling pagtatama"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalization"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Mga diksyunaryo na add-on"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Pangunahing diksyunaryo"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Magpakita ng mga suhestiyon ng pagwawasto"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Ipakita ang mga iminumungkahing salita habang nagta-type"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Palaging ipakita"</string> diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml index d8a59d6cf..2112420ec 100644 --- a/java/res/values-uk/strings.xml +++ b/java/res/values-uk/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Установити пропозиції для повторних виправлень"</string> <string name="auto_cap" msgid="1719746674854628252">"Авто викор. вел. літер"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Додані словники"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Основний словник"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Показувати пропозиції виправлень"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Відображати пропоновані слова під час вводу"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Завжди показувати"</string> diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml index 3a837b442..0aaed0c27 100644 --- a/java/res/values-vi/strings.xml +++ b/java/res/values-vi/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Đặt đề xuất cho các sửa đổi lại"</string> <string name="auto_cap" msgid="1719746674854628252">"Tự động viết hoa"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Thêm từ điển"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Từ điển chính"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Hiển thị gợi ý sửa"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Hiển thị từ được đề xuất khi nhập"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Luôn hiển thị"</string> diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml index b26b649d4..d1ef9cd7f 100644 --- a/java/res/values-zh-rCN/strings.xml +++ b/java/res/values-zh-rCN/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"设置更正建议"</string> <string name="auto_cap" msgid="1719746674854628252">"自动大写"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"附加词典"</string> - <string name="main_dictionary" msgid="4798763781818361168">"主词典"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"显示更正建议"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"键入时显示建议的字词"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"始终显示"</string> diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml index 568bf28ef..387ad1c65 100644 --- a/java/res/values-zh-rTW/strings.xml +++ b/java/res/values-zh-rTW/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"設定建議供重新更正"</string> <string name="auto_cap" msgid="1719746674854628252">"自動大寫"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"外掛字典"</string> - <string name="main_dictionary" msgid="4798763781818361168">"主要字典"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"顯示修正建議"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"輸入時顯示建議字詞"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"一律顯示"</string> diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml index e70ad6b8b..074dcbb92 100644 --- a/java/res/values-zu/strings.xml +++ b/java/res/values-zu/strings.xml @@ -44,7 +44,8 @@ <string name="enable_span_insert_summary" msgid="2947317657871394467">"Setha iziphakamiso zokulungisa kabusha"</string> <string name="auto_cap" msgid="1719746674854628252">"Ukwenza ofeleba okuzenzakalelayo"</string> <string name="configure_dictionaries_title" msgid="4238652338556902049">"Faka izichazamazwi"</string> - <string name="main_dictionary" msgid="4798763781818361168">"Isichazimazwi sakho ngqangi"</string> + <!-- no translation found for main_dictionary (4798763781818361168) --> + <skip /> <string name="prefs_show_suggestions" msgid="8026799663445531637">"Bonisa ukusikesela kokulungisa"</string> <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Bonisa amagama aphakamisiwe ngenkathi uthayipha"</string> <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Bonisa njalo"</string> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 6e9461a33..cd1b46073 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -118,10 +118,10 @@ <declare-styleable name="SuggestionsView"> <attr name="suggestionStripOption" format="integer"> + <!-- This should be aligned with SuggestionsViewParams.AUTO_CORRECT_* and etc. --> <flag name="autoCorrectBold" value="0x01" /> <flag name="autoCorrectUnderline" value="0x02" /> - <flag name="autoCorrectInvert" value="0x04" /> - <flag name="validTypedWordBold" value="0x08" /> + <flag name="validTypedWordBold" value="0x04" /> </attr> <attr name="colorTypedWord" format="color" /> <attr name="colorAutoCorrect" format="color" /> @@ -132,7 +132,6 @@ <attr name="alphaObsoleted" format="integer" /> <attr name="suggestionsCountInStrip" format="integer" /> <attr name="centerSuggestionPercentile" format="integer" /> - <attr name="moreSuggestionsHint" format="reference" /> <attr name="maxMoreSuggestionsRow" format="integer" /> <attr name="minMoreSuggestionsWidth" format="float" /> </declare-styleable> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 8cfa6802c..999247839 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -39,6 +39,7 @@ <bool name="config_default_bigram_prediction">false</bool> <bool name="config_default_compat_recorrection_enabled">true</bool> <bool name="config_default_sound_enabled">false</bool> + <bool name="config_default_vibration_enabled">true</bool> <bool name="config_auto_correction_spacebar_led_enabled">true</bool> <!-- Showing mini keyboard, just above the touched point if true, aligned to the key if false --> <bool name="config_show_mini_keyboard_at_touched_point">false</bool> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 8488c777b..cbd557e52 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -87,11 +87,12 @@ <fraction name="min_more_suggestions_width">90%</fraction> <fraction name="more_suggestions_info_ratio">18%</fraction> <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row --> - <dimen name="key_preview_backing_height">160dip</dimen> + <dimen name="key_preview_backing_height">240dip</dimen> <dimen name="suggestions_strip_padding">0dip</dimen> <dimen name="suggestion_min_width">44dip</dimen> <dimen name="suggestion_padding">6dip</dimen> <dimen name="suggestion_text_size">18dip</dimen> + <dimen name="more_suggestions_hint_text_size">27dip</dimen> <integer name="suggestions_count_in_strip">3</integer> <integer name="center_suggestion_percentile">36</integer> diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml index 4072ea4b8..75e22ddd8 100644 --- a/java/res/values/donottranslate.xml +++ b/java/res/values/donottranslate.xml @@ -31,6 +31,21 @@ <!-- Word separator list is the union of all symbols except those that are not separators: magic_space_swapping_symbols | magic_space_stripping_symbols | magic_space_neutral_symbols \ symbols_excluded_from_word_separators --> + <!-- Symbol characters list that should switch back to the main layout --> + <!-- \u0022: Quotation mark (double quotation mark) + \u0027: Apostrophe (single quotation mark) + \u2018: Left single quotation mark + \u2019: Right single quotation mark + \u201a: Single low-9 quotation mark + \u201b: Single high-reversed-9 quotation mark + \u201c: Left double quotation mark + \u201d: Right double quotation mark + \u201e: Double low-9 quotation mark + \u201f: Double high-reversed-9 quotation mark + \u00ab: Left-pointing double angle quotation mark + \u00bb: Right-pointing double angle quotation mark --> + <!-- string name="layout_switch_back_symbols">\u0022\u0027\u2018\u2019\u201a\u201b\u201c\u201d\u201e\u201f\u00ab\u00bb</string> --> + <string name="layout_switch_back_symbols"></string> <!-- Label for "switch to more symbol" modifier key. Must be short to fit on key! --> <string name="label_to_more_symbol_key">= \\ <</string> diff --git a/java/res/values/keypress-vibration-durations.xml b/java/res/values/keypress-vibration-durations.xml new file mode 100644 index 000000000..2569f2317 --- /dev/null +++ b/java/res/values/keypress-vibration-durations.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2011, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <string-array name="keypress_vibration_durations" translatable="false"> + <!-- Build.HARDWARE,duration_in_milliseconds --> + <item>herring,5</item> + <item>tuna,5</item> + </string-array> +</resources> diff --git a/java/res/values/keypress-volumes.xml b/java/res/values/keypress-volumes.xml new file mode 100644 index 000000000..4d0e7a097 --- /dev/null +++ b/java/res/values/keypress-volumes.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2011, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <string-array name="keypress_volumes" translatable="false"> + <!-- Build.HARDWARE,volume --> + <item>herring,0.05</item> + <item>tuna,0.05</item> + <item>stingray,0.04</item> + </string-array> +</resources> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 6aa967410..7b8bfa841 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -102,7 +102,6 @@ <item name="alphaObsoleted">50</item> <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item> <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item> - <item name="moreSuggestionsHint">@drawable/more_suggestions_hint</item> <item name="maxMoreSuggestionsRow">@integer/max_more_suggestions_row</item> <item name="minMoreSuggestionsWidth">@fraction/min_more_suggestions_width</item> </style> @@ -284,7 +283,6 @@ <item name="alphaObsoleted">70</item> <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item> <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item> - <item name="moreSuggestionsHint">@drawable/more_suggestions_hint_holo</item> <item name="maxMoreSuggestionsRow">@integer/max_more_suggestions_row</item> <item name="minMoreSuggestionsWidth">@fraction/min_more_suggestions_width</item> </style> diff --git a/java/res/values/sudden-jumping-touch-event-device-list.xml b/java/res/values/sudden-jumping-touch-event-device-list.xml index af1eefc12..ba828a758 100644 --- a/java/res/values/sudden-jumping-touch-event-device-list.xml +++ b/java/res/values/sudden-jumping-touch-event-device-list.xml @@ -20,7 +20,7 @@ <resources> <string-array name="sudden_jumping_touch_event_device_list" translatable="false"> <!-- Nexus One --> - <item>passion</item> + <item>mahimahi</item> <!-- Droid --> <item>sholes</item> </string-array> diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml index 43bbd6512..24de95f10 100644 --- a/java/res/xml/prefs.xml +++ b/java/res/xml/prefs.xml @@ -32,6 +32,7 @@ <CheckBoxPreference android:key="vibrate_on" android:title="@string/vibrate_on_keypress" + android:defaultValue="@bool/config_default_vibration_enabled" android:persistent="true" /> <CheckBoxPreference android:key="sound_on" diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml index 2dad17148..80613a56f 100644 --- a/java/res/xml/prefs_for_debug.xml +++ b/java/res/xml/prefs_for_debug.xml @@ -27,7 +27,7 @@ /> <ListPreference - android:key="pref_keyboard_layout_20100902" + android:key="pref_keyboard_layout_20110916" android:title="@string/keyboard_layout" android:persistent="true" android:entryValues="@array/keyboard_layout_modes_values" diff --git a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java index a6304d877..2fb8b8710 100644 --- a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java +++ b/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java @@ -44,4 +44,8 @@ public class VibratorCompatWrapper { return false; return (Boolean) CompatUtils.invoke(mVibrator, true, METHOD_hasVibrator); } + + public void vibrate(long milliseconds) { + mVibrator.vibrate(milliseconds); + } } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index e43ae55a8..2d123699e 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; +import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.ContextThemeWrapper; @@ -48,7 +49,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private static final boolean DEBUG_CACHE = LatinImeLogger.sDBG; public static final boolean DEBUG_STATE = false; - public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20100902"; + public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20110916"; private static final int[] KEYBOARD_THEMES = { R.style.KeyboardTheme, R.style.KeyboardTheme_HighContrast, @@ -97,6 +98,8 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha private static final int SWITCH_STATE_CHORDING_SYMBOL = 6; private int mSwitchState = SWITCH_STATE_ALPHA; + private static String mLayoutSwitchBackSymbols; + private int mThemeIndex = -1; private Context mThemeContext; @@ -204,6 +207,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mMainKeyboardId = getKeyboardId(editorInfo, false, false, settingsValues); mSymbolsKeyboardId = getKeyboardId(editorInfo, true, false, settingsValues); mSymbolsShiftedKeyboardId = getKeyboardId(editorInfo, true, true, settingsValues); + mLayoutSwitchBackSymbols = mResources.getString(R.string.layout_switch_back_symbols); setKeyboard(getKeyboard(mSavedKeyboardState.getKeyboardId())); } catch (RuntimeException e) { Log.w(TAG, "loading keyboard failed: " + mMainKeyboardId, e); @@ -661,24 +665,9 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha return c == Keyboard.CODE_SPACE || c == Keyboard.CODE_ENTER; } - private static boolean isQuoteCharacter(int c) { - // Apostrophe, quotation mark. - if (c == Keyboard.CODE_SINGLE_QUOTE || c == Keyboard.CODE_DOUBLE_QUOTE) - return true; - // \u2018: Left single quotation mark - // \u2019: Right single quotation mark - // \u201a: Single low-9 quotation mark - // \u201b: Single high-reversed-9 quotation mark - // \u201c: Left double quotation mark - // \u201d: Right double quotation mark - // \u201e: Double low-9 quotation mark - // \u201f: Double high-reversed-9 quotation mark - if (c >= '\u2018' && c <= '\u201f') - return true; - // \u00ab: Left-pointing double angle quotation mark - // \u00bb: Right-pointing double angle quotation mark - if (c == '\u00ab' || c == '\u00bb') - return true; + private static boolean isLayoutSwitchBackCharacter(int c) { + if (TextUtils.isEmpty(mLayoutSwitchBackSymbols)) return false; + if (mLayoutSwitchBackSymbols.indexOf(c) >= 0) return true; return false; } @@ -736,7 +725,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha mSwitchState = SWITCH_STATE_SYMBOL; } // Snap back to alpha keyboard mode immediately if user types a quote character. - if (isQuoteCharacter(code)) { + if (isLayoutSwitchBackCharacter(code)) { changeKeyboardMode(); } break; @@ -744,7 +733,7 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha case SWITCH_STATE_CHORDING_SYMBOL: // Snap back to alpha keyboard mode if user types one or more non-space/enter // characters followed by a space/enter or a quote character. - if (isSpaceCharacter(code) || isQuoteCharacter(code)) { + if (isSpaceCharacter(code) || isLayoutSwitchBackCharacter(code)) { changeKeyboardMode(); } break; diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 5a44460a1..8d34b7ee1 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -84,7 +84,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { private final float mBackgroundDimAmount; // HORIZONTAL ELLIPSIS "...", character for popup hint. - private static final String POPUP_HINT_CHAR = "\u2026"; + private static final String POPUP_HINT_CHAR = "..."; // Margin between the label and the icon on a key that has both of them. // Specified by the fraction of the key width. diff --git a/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java b/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java index c4251ccfc..62a9259f9 100644 --- a/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java +++ b/java/src/com/android/inputmethod/keyboard/SuddenJumpingTouchEventHandler.java @@ -51,7 +51,7 @@ public class SuddenJumpingTouchEventHandler { mView = view; final String[] deviceList = context.getResources().getStringArray( R.array.sudden_jumping_touch_event_device_list); - mNeedsSuddenJumpingHack = needsSuddenJumpingHack(Build.DEVICE, deviceList); + mNeedsSuddenJumpingHack = needsSuddenJumpingHack(Build.HARDWARE, deviceList); } private static boolean needsSuddenJumpingHack(String deviceName, String[] deviceList) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index ff0226684..ddda184aa 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -28,6 +28,7 @@ import android.content.res.Resources; import android.inputmethodservice.InputMethodService; import android.media.AudioManager; import android.net.ConnectivityManager; +import android.os.Build; import android.os.Debug; import android.os.Message; import android.os.SystemClock; @@ -56,6 +57,7 @@ import com.android.inputmethod.compat.InputMethodManagerCompatWrapper; import com.android.inputmethod.compat.InputMethodServiceCompatWrapper; import com.android.inputmethod.compat.InputTypeCompatUtils; import com.android.inputmethod.compat.SuggestionSpanUtils; +import com.android.inputmethod.compat.VibratorCompatWrapper; import com.android.inputmethod.deprecated.LanguageSwitcherProxy; import com.android.inputmethod.deprecated.VoiceProxy; import com.android.inputmethod.deprecated.recorrection.Recorrection; @@ -207,9 +209,12 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar private long mLastKeyTime; private AudioManager mAudioManager; - private static float mFxVolume = -1.0f; // just a default value to be updated runtime + private float mFxVolume = -1.0f; // default volume private boolean mSilentModeOn; // System-wide current configuration + private VibratorCompatWrapper mVibrator; + private long mKeypressVibrationDuration = -1; + // TODO: Move this flag to VoiceProxy private boolean mConfigurationChanging; @@ -433,13 +438,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar mSubtypeSwitcher = SubtypeSwitcher.getInstance(); mKeyboardSwitcher = KeyboardSwitcher.getInstance(); mRecorrection = Recorrection.getInstance(); + mVibrator = VibratorCompatWrapper.getInstance(this); DEBUG = LatinImeLogger.sDBG; - loadSettings(); - final Resources res = getResources(); mResources = res; + loadSettings(); + Utils.GCUtils.getInstance().reset(); boolean tryGC = true; for (int i = 0; i < Utils.GCUtils.GC_TRY_LOOP_MAX && tryGC; ++i) { @@ -480,6 +486,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar mSettingsValues = new Settings.Values(mPrefs, this, mSubtypeSwitcher.getInputLocaleStr()); resetContactsDictionary(null == mSuggest ? null : mSuggest.getContactsDictionary()); updateSoundEffectVolume(); + updateKeypressVibrationDuration(); } private void initSuggest() { @@ -611,6 +618,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar mSuggestionsView = (SuggestionsView) view.findViewById(R.id.suggestions_view); if (mSuggestionsView != null) mSuggestionsView.setListener(this, view); + if (LatinImeLogger.sVISUALDEBUG) { + mKeyPreviewBackingView.setBackgroundColor(0x10FF0000); + } } @Override @@ -1496,8 +1506,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar if (!TextUtils.isEmpty(typedWord) && !typedWord.equals(mBestWord)) { InputConnectionCompatUtils.commitCorrection( ic, mLastSelectionEnd - typedWord.length(), typedWord, mBestWord); - if (mSuggestionsView != null) - mSuggestionsView.onAutoCorrectionInverted(mBestWord); } } if (Keyboard.CODE_SPACE == primaryCode) { @@ -2052,13 +2060,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar // update sound effect volume private void updateSoundEffectVolume() { - if (mAudioManager == null) { - mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); - if (mAudioManager == null) return; + final String[] volumePerHardwareList = mResources.getStringArray(R.array.keypress_volumes); + final String hardwarePrefix = Build.HARDWARE + ","; + for (final String element : volumePerHardwareList) { + if (element.startsWith(hardwarePrefix)) { + mFxVolume = Float.parseFloat(element.substring(element.lastIndexOf(',') + 1)); + break; + } } - // This aligns with the current media volume minus 6dB - mFxVolume = (float) mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) - / (float) mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) / 4.0f; } // update flags for silent mode @@ -2070,6 +2079,19 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar mSilentModeOn = (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL); } + private void updateKeypressVibrationDuration() { + final String[] durationPerHardwareList = mResources.getStringArray( + R.array.keypress_vibration_durations); + final String hardwarePrefix = Build.HARDWARE + ","; + for (final String element : durationPerHardwareList) { + if (element.startsWith(hardwarePrefix)) { + mKeypressVibrationDuration = + Long.parseLong(element.substring(element.lastIndexOf(',') + 1)); + break; + } + } + } + private void playKeyClick(int primaryCode) { // if mAudioManager is null, we don't have the ringer state yet // mAudioManager will be set by updateRingerMode @@ -2079,17 +2101,20 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar } } if (isSoundOn()) { - int sound = AudioManager.FX_KEYPRESS_STANDARD; + final int sound; switch (primaryCode) { - case Keyboard.CODE_DELETE: - sound = AudioManager.FX_KEYPRESS_DELETE; - break; - case Keyboard.CODE_ENTER: - sound = AudioManager.FX_KEYPRESS_RETURN; - break; - case Keyboard.CODE_SPACE: - sound = AudioManager.FX_KEYPRESS_SPACEBAR; - break; + case Keyboard.CODE_DELETE: + sound = AudioManager.FX_KEYPRESS_DELETE; + break; + case Keyboard.CODE_ENTER: + sound = AudioManager.FX_KEYPRESS_RETURN; + break; + case Keyboard.CODE_SPACE: + sound = AudioManager.FX_KEYPRESS_SPACEBAR; + break; + default: + sound = AudioManager.FX_KEYPRESS_STANDARD; + break; } mAudioManager.playSoundEffect(sound, mFxVolume); } @@ -2099,11 +2124,16 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar if (!mSettingsValues.mVibrateOn) { return; } - LatinKeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView != null) { - inputView.performHapticFeedback( - HapticFeedbackConstants.KEYBOARD_TAP, - HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + if (mKeypressVibrationDuration < 0) { + // Go ahead with the system default + LatinKeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); + if (inputView != null) { + inputView.performHapticFeedback( + HapticFeedbackConstants.KEYBOARD_TAP, + HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } + } else if (mVibrator != null) { + mVibrator.vibrate(mKeypressVibrationDuration); } } diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java index 15a0cec2e..5a2eb1632 100644 --- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java @@ -145,13 +145,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel { // Nothing to do with. } - private final View.OnTouchListener mMotionEventDelegate = new View.OnTouchListener() { - @Override - public boolean onTouch(View view, MotionEvent me) { - return MoreSuggestionsView.this.dispatchTouchEvent(me); - } - }; - @Override public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY, PopupWindow window, KeyboardActionListener listener) { @@ -170,9 +163,7 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel { - (container.getMeasuredHeight() - container.getPaddingBottom()) + parentView.getPaddingTop() + mCoordinates[1]; - container.setOnTouchListener(mMotionEventDelegate); window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); - window.setFocusable(true); window.setOutsideTouchable(true); window.setContentView(container); window.setWidth(container.getMeasuredWidth()); @@ -193,6 +184,7 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel { @Override public boolean dismissMoreKeysPanel() { + if (mController == null) return false; return mController.dismissMoreKeysPanel(); } diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java index c97f56712..d706cd0a4 100644 --- a/java/src/com/android/inputmethod/latin/Settings.java +++ b/java/src/com/android/inputmethod/latin/Settings.java @@ -171,7 +171,8 @@ public class Settings extends InputMethodSettingsActivity // Get the settings preferences final boolean hasVibrator = VibratorCompatWrapper.getInstance(context).hasVibrator(); - mVibrateOn = hasVibrator && prefs.getBoolean(Settings.PREF_VIBRATE_ON, false); + mVibrateOn = hasVibrator && prefs.getBoolean(Settings.PREF_VIBRATE_ON, + res.getBoolean(R.bool.config_default_vibration_enabled)); mSoundOn = prefs.getBoolean(Settings.PREF_SOUND_ON, res.getBoolean(R.bool.config_default_sound_enabled)); mKeyPreviewPopupOn = isKeyPreviewPopupEnabled(prefs, res); diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java index 13beb4479..776cea26a 100644 --- a/java/src/com/android/inputmethod/latin/SuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java @@ -19,8 +19,14 @@ package com.android.inputmethod.latin; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Align; +import android.graphics.Rect; import android.graphics.Typeface; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Message; import android.os.SystemClock; @@ -29,12 +35,11 @@ import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; -import android.text.style.BackgroundColorSpan; import android.text.style.CharacterStyle; -import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; import android.util.AttributeSet; +import android.view.GestureDetector; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -86,7 +91,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, private Listener mListener; private SuggestedWords mSuggestions = SuggestedWords.EMPTY; - private boolean mShowingAutoCorrectionInverted; private final SuggestionsViewParams mParams; private static final float MIN_TEXT_XSCALE = 0.70f; @@ -95,10 +99,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, private static class UiHandler extends StaticInnerHandlerWrapper<SuggestionsView> { private static final int MSG_HIDE_PREVIEW = 0; - private static final int MSG_UPDATE_SUGGESTION = 1; private static final long DELAY_HIDE_PREVIEW = 1300; - private static final long DELAY_UPDATE_SUGGESTION = 300; public UiHandler(SuggestionsView outerInstance) { super(outerInstance); @@ -111,9 +113,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, case MSG_HIDE_PREVIEW: suggestionsView.hidePreview(); break; - case MSG_UPDATE_SUGGESTION: - suggestionsView.updateSuggestions(); - break; } } @@ -126,19 +125,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, removeMessages(MSG_HIDE_PREVIEW); } - public void postUpdateSuggestions() { - cancelUpdateSuggestions(); - sendMessageDelayed(obtainMessage(MSG_UPDATE_SUGGESTION), - DELAY_UPDATE_SUGGESTION); - } - - public void cancelUpdateSuggestions() { - removeMessages(MSG_UPDATE_SUGGESTION); - } - public void cancelAllMessages() { cancelHidePreview(); - cancelUpdateSuggestions(); } } @@ -167,15 +155,13 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, private final float mCenterSuggestionWeight; private final int mCenterSuggestionIndex; private final Drawable mMoreSuggestionsHint; + private static final String MORE_SUGGESTIONS_HINT = "..."; private static final CharacterStyle BOLD_SPAN = new StyleSpan(Typeface.BOLD); private static final CharacterStyle UNDERLINE_SPAN = new UnderlineSpan(); - private final CharacterStyle mInvertedForegroundColorSpan; - private final CharacterStyle mInvertedBackgroundColorSpan; private static final int AUTO_CORRECT_BOLD = 0x01; private static final int AUTO_CORRECT_UNDERLINE = 0x02; - private static final int AUTO_CORRECT_INVERT = 0x04; - private static final int VALID_TYPED_WORD_BOLD = 0x08; + private static final int VALID_TYPED_WORD_BOLD = 0x04; private final int mSuggestionStripOption; @@ -225,7 +211,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, mCenterSuggestionWeight = getPercent(a, R.styleable.SuggestionsView_centerSuggestionPercentile, DEFAULT_CENTER_SUGGESTION_PERCENTILE); - mMoreSuggestionsHint = a.getDrawable(R.styleable.SuggestionsView_moreSuggestionsHint); mMaxMoreSuggestionsRow = a.getInt( R.styleable.SuggestionsView_maxMoreSuggestionsRow, DEFAULT_MAX_MORE_SUGGESTIONS_ROW); @@ -233,19 +218,35 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, R.styleable.SuggestionsView_minMoreSuggestionsWidth); a.recycle(); + mMoreSuggestionsHint = getMoreSuggestionsHint(res, + res.getDimension(R.dimen.more_suggestions_hint_text_size), mColorAutoCorrect); mCenterSuggestionIndex = mSuggestionsCountInStrip / 2; mMoreSuggestionsBottomGap = res.getDimensionPixelOffset( R.dimen.more_suggestions_bottom_gap); - mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff); - mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord); - final LayoutInflater inflater = LayoutInflater.from(context); mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null); mHintToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null); mHintToSaveText = context.getText(R.string.hint_add_to_dictionary); } + private static Drawable getMoreSuggestionsHint(Resources res, float textSize, int color) { + final Paint paint = new Paint(); + paint.setAntiAlias(true); + paint.setTextAlign(Align.CENTER); + paint.setTextSize(textSize); + paint.setColor(color); + final Rect bounds = new Rect(); + paint.getTextBounds(MORE_SUGGESTIONS_HINT, 0, MORE_SUGGESTIONS_HINT.length(), bounds); + final int width = Math.round(bounds.width() + 0.5f); + final int height = Math.round(bounds.height() + 0.5f); + final Bitmap buffer = Bitmap.createBitmap( + width, (height * 3 / 2), Bitmap.Config.ARGB_8888); + final Canvas canvas = new Canvas(buffer); + canvas.drawText(MORE_SUGGESTIONS_HINT, width / 2, height, paint); + return new BitmapDrawable(res, buffer); + } + // Read integer value in TypedArray as percent. private static float getPercent(TypedArray a, int index, int defValue) { return a.getInt(index, defValue) / 100.0f; @@ -320,16 +321,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, return Color.argb(newAlpha, Color.red(color), Color.green(color), Color.blue(color)); } - public CharSequence getInvertedText(CharSequence text) { - if ((mSuggestionStripOption & AUTO_CORRECT_INVERT) == 0) - return null; - final int len = text.length(); - final Spannable word = new SpannableString(text); - word.setSpan(mInvertedBackgroundColorSpan, 0, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); - word.setSpan(mInvertedForegroundColorSpan, 0, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); - return word; - } - public void layout(SuggestedWords suggestions, ViewGroup stripView, ViewGroup placer, int stripWidth) { if (suggestions.isPunctuationSuggestions()) { @@ -522,8 +513,25 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, final Resources res = context.getResources(); mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset( R.dimen.more_suggestions_modal_tolerance); + mMoreSuggestionsSlidingDetector = new GestureDetector( + context, mMoreSuggestionsSlidingListener); } + private final View.OnTouchListener mMoreSuggestionsCanceller = new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent me) { + if (!mMoreSuggestionsWindow.isShowing()) return false; + + switch (me.getAction()) { + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + return mMoreSuggestionsView.dismissMoreKeysPanel(); + default: + return true; + } + } + }; + /** * A connection back to the input method. * @param listener @@ -534,21 +542,11 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } public void setSuggestions(SuggestedWords suggestions) { - if (suggestions == null) + if (suggestions == null || suggestions.size() == 0) return; - mSuggestions = suggestions; - if (mShowingAutoCorrectionInverted) { - mHandler.postUpdateSuggestions(); - } else { - updateSuggestions(); - } - } - private void updateSuggestions() { clear(); - if (mSuggestions.size() == 0) - return; - + mSuggestions = suggestions; mParams.layout(mSuggestions, mSuggestionsStrip, this, getWidth()); } @@ -637,15 +635,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } } - public void onAutoCorrectionInverted(CharSequence autoCorrectedWord) { - final CharSequence inverted = mParams.getInvertedText(autoCorrectedWord); - if (inverted == null) - return; - final TextView tv = mWords.get(1); - tv.setText(inverted); - mShowingAutoCorrectionInverted = true; - } - public boolean isShowingAddToDictionaryHint() { return mSuggestionsStrip.getChildCount() > 0 && mSuggestionsStrip.getChildAt(0) == mParams.mWordToSaveView; @@ -669,7 +658,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, } public void clear() { - mShowingAutoCorrectionInverted = false; mSuggestionsStrip.removeAllViews(); removeAllViews(); addView(mSuggestionsStrip); @@ -739,6 +727,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, if (mMoreSuggestionsWindow.isShowing()) { mMoreSuggestionsWindow.dismiss(); mKeyboardView.dimEntireKeyboard(false); + mKeyboardView.setOnTouchListener(null); return true; } return false; @@ -750,6 +739,10 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, @Override public boolean onLongClick(View view) { + return showMoreSuggestions(); + } + + private boolean showMoreSuggestions() { final SuggestionsViewParams params = mParams; if (params.mMoreSuggestionsAvailable) { final int stripWidth = getWidth(); @@ -770,29 +763,51 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, moreKeysPanel.showMoreKeysPanel( this, mMoreSuggestionsController, pointX, pointY, mMoreSuggestionsWindow, mMoreSuggestionsListener); - mCheckingIfModalOrSlidingMode = true; + mMoreSuggestionsMode = MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING; mOriginX = mLastX; mOriginY = mLastY; - view.setPressed(false); mKeyboardView.dimEntireKeyboard(true); + mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller); + for (int i = 0; i < params.mSuggestionsCountInStrip; i++) { + mWords.get(i).setPressed(false); + } return true; } return false; } // Working variables for onLongClick and dispatchTouchEvent. - private boolean mCheckingIfModalOrSlidingMode; + private int mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_MODAL_MODE; + private static final int MORE_SUGGESTIONS_IN_MODAL_MODE = 0; + private static final int MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING = 1; + private static final int MORE_SUGGESTIONS_IN_SLIDING_MODE = 2; private int mLastX; private int mLastY; private int mOriginX; private int mOriginY; private final int mMoreSuggestionsModalTolerance; + private final GestureDetector mMoreSuggestionsSlidingDetector; + private final GestureDetector.OnGestureListener mMoreSuggestionsSlidingListener = + new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onScroll(MotionEvent down, MotionEvent me, float deltaX, float deltaY) { + final float dy = me.getY() - down.getY(); + if (deltaY > 0 && dy < 0) { + return showMoreSuggestions(); + } + return false; + } + }; @Override public boolean dispatchTouchEvent(MotionEvent me) { - if (!mMoreSuggestionsWindow.isShowing()) { + if (!mMoreSuggestionsWindow.isShowing() + || mMoreSuggestionsMode == MORE_SUGGESTIONS_IN_MODAL_MODE) { mLastX = (int)me.getX(); mLastY = (int)me.getY(); + if (mMoreSuggestionsSlidingDetector.onTouchEvent(me)) { + return true; + } return super.dispatchTouchEvent(me); } @@ -807,22 +822,22 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener, final int translatedX = moreKeysPanel.translateX(x); final int translatedY = moreKeysPanel.translateY(y); - if (mCheckingIfModalOrSlidingMode) { + if (mMoreSuggestionsMode == MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING) { if (Math.abs(x - mOriginX) >= mMoreSuggestionsModalTolerance || mOriginY - y >= mMoreSuggestionsModalTolerance) { // Decided to be in the sliding input mode only when the touch point has been moved // upward. - mCheckingIfModalOrSlidingMode = false; + mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_SLIDING_MODE; tracker.onShowMoreKeysPanel( translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel); } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) { // Decided to be in the modal input mode - mCheckingIfModalOrSlidingMode = false; + mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_MODAL_MODE; } return true; } - // Process sliding motion events + // MORE_SUGGESTIONS_IN_SLIDING_MODE tracker.processMotionEvent(action, translatedX, translatedY, eventTime, moreKeysPanel); return true; } diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index 1e5b87763..915c40572 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -60,8 +60,11 @@ public class AndroidSpellCheckerService extends SpellCheckerService { private static final int CAPITALIZE_ALL = 2; // All caps private final static String[] EMPTY_STRING_ARRAY = new String[0]; - private final static SuggestionsInfo EMPTY_SUGGESTIONS_INFO = + private final static SuggestionsInfo NOT_IN_DICT_EMPTY_SUGGESTIONS = new SuggestionsInfo(0, EMPTY_STRING_ARRAY); + private final static SuggestionsInfo IN_DICT_EMPTY_SUGGESTIONS = + new SuggestionsInfo(SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY, + EMPTY_STRING_ARRAY); private Map<String, DictionaryPool> mDictionaryPools = Collections.synchronizedMap(new TreeMap<String, DictionaryPool>()); private Map<String, Dictionary> mUserDictionaries = @@ -330,7 +333,12 @@ public class AndroidSpellCheckerService extends SpellCheckerService { try { final String text = textInfo.getText(); - if (shouldFilterOut(text)) return EMPTY_SUGGESTIONS_INFO; + if (shouldFilterOut(text)) { + final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull(); + if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; + return dictInfo.mDictionary.isValidWord(text) ? IN_DICT_EMPTY_SUGGESTIONS + : NOT_IN_DICT_EMPTY_SUGGESTIONS; + } final SuggestionsGatherer suggestionsGatherer = new SuggestionsGatherer(suggestionsLimit); @@ -353,23 +361,19 @@ public class AndroidSpellCheckerService extends SpellCheckerService { final int capitalizeType = getCapitalizationType(text); boolean isInDict = true; - try { - final DictAndProximity dictInfo = mDictionaryPool.take(); - dictInfo.mDictionary.getWords(composer, suggestionsGatherer, - dictInfo.mProximityInfo); - isInDict = dictInfo.mDictionary.isValidWord(text); - if (!isInDict && CAPITALIZE_NONE != capitalizeType) { - // We want to test the word again if it's all caps or first caps only. - // If it's fully down, we already tested it, if it's mixed case, we don't - // want to test a lowercase version of it. - isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale)); - } - if (!mDictionaryPool.offer(dictInfo)) { - Log.e(TAG, "Can't re-insert a dictionary into its pool"); - } - } catch (InterruptedException e) { - // I don't think this can happen. - return EMPTY_SUGGESTIONS_INFO; + final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull(); + if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; + dictInfo.mDictionary.getWords(composer, suggestionsGatherer, + dictInfo.mProximityInfo); + isInDict = dictInfo.mDictionary.isValidWord(text); + if (!isInDict && CAPITALIZE_NONE != capitalizeType) { + // We want to test the word again if it's all caps or first caps only. + // If it's fully down, we already tested it, if it's mixed case, we don't + // want to test a lowercase version of it. + isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale)); + } + if (!mDictionaryPool.offer(dictInfo)) { + Log.e(TAG, "Can't re-insert a dictionary into its pool"); } final SuggestionsGatherer.Result result = suggestionsGatherer.getResults(text, @@ -396,7 +400,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService { throw e; } else { Log.e(TAG, "Exception while spellcheking: " + e); - return EMPTY_SUGGESTIONS_INFO; + return NOT_IN_DICT_EMPTY_SUGGESTIONS; } } } diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java index ee294f6b0..dec18c1d5 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java @@ -56,6 +56,15 @@ public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> { } } + // Convenience method + public DictAndProximity takeOrGetNull() { + try { + return take(); + } catch (InterruptedException e) { + return null; + } + } + public void close() { synchronized(this) { mClosed = true; |