diff options
Diffstat (limited to 'java')
154 files changed, 1209 insertions, 314 deletions
diff --git a/java/res/layout/emoji_keyboard_tab_icon.xml b/java/res/layout/emoji_keyboard_tab_icon.xml index 13bb41ca2..15f9c3a3e 100644 --- a/java/res/layout/emoji_keyboard_tab_icon.xml +++ b/java/res/layout/emoji_keyboard_tab_icon.xml @@ -19,6 +19,8 @@ --> <!-- Note: contentDescription will be added programatically in {@link EmojiPalettesView}. --> +<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_weight="1.0" @@ -26,4 +28,6 @@ android:gravity="center" android:scaleType="center" android:contentDescription="@null" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml index 06a937bff..9ff090aad 100644 --- a/java/res/layout/emoji_palettes_view.xml +++ b/java/res/layout/emoji_palettes_view.xml @@ -62,11 +62,15 @@ android:layout_height="match_parent" android:background="@drawable/suggestions_strip_divider" /> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageButton android:id="@+id/emoji_keyboard_delete" android:layout_width="0dip" android:layout_weight="12.5" android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" android:contentDescription="@string/spoken_description_delete" /> </LinearLayout> <android.support.v4.view.ViewPager @@ -85,18 +89,26 @@ android:layout_weight="1" > <!-- TODO: Implement a KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <TextView android:id="@+id/emoji_keyboard_alphabet_left" android:layout_width="0dip" android:layout_weight="0.15" android:gravity="center" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <RelativeLayout android:id="@+id/emoji_keyboard_space" android:layout_width="0dip" android:layout_weight="0.70" android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" android:contentDescription="@string/spoken_description_space"> <!-- WORKAROUND: Show the spacebar icon as a bacground of this View. --> <View @@ -108,11 +120,15 @@ android:layout_centerInParent="true" /> </RelativeLayout> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <TextView android:id="@+id/emoji_keyboard_alphabet_right" android:layout_width="0dip" android:layout_weight="0.15" android:gravity="center" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> </LinearLayout> </com.android.inputmethod.keyboard.emoji.EmojiPalettesView> diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml index 149095147..563599d82 100644 --- a/java/res/layout/suggestion_divider.xml +++ b/java/res/layout/suggestion_divider.xml @@ -18,11 +18,17 @@ */ --> +<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" + android:padding="0dp" + android:gravity="center" android:src="@drawable/suggestions_strip_divider" android:contentDescription="@null" - android:padding="0dp" - android:gravity="center" /> + android:clickable="false" + android:longClickable="false" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> diff --git a/java/res/layout/suggestions_strip.xml b/java/res/layout/suggestions_strip.xml index 3d2f07f7b..489477990 100644 --- a/java/res/layout/suggestions_strip.xml +++ b/java/res/layout/suggestions_strip.xml @@ -20,13 +20,19 @@ <merge xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/suggestions_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" - android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" /> + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/add_to_dictionary_strip" android:orientation="horizontal" @@ -34,7 +40,8 @@ android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" - android:visibility="invisible"> + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false"> <TextView android:id="@+id/word_to_save" android:layout_width="match_parent" @@ -49,13 +56,17 @@ android:textAlignment="viewStart" style="?attr/suggestionWordStyle" /> </LinearLayout> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/important_notice_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" - android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin"> + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" > <TextView android:id="@+id/important_notice_title" android:layout_width="match_parent" diff --git a/java/res/raw/main_en.dict b/java/res/raw/main_en.dict Binary files differindex d0ccdbb03..d631d6fbc 100644 --- a/java/res/raw/main_en.dict +++ b/java/res/raw/main_en.dict diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml index 3c2cb63ef..09abb5f6c 100644 --- a/java/res/values-af/strings-talkback-descriptions.xml +++ b/java/res/values-af/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml index 187aa4b89..2d1653f28 100644 --- a/java/res/values-af/strings.xml +++ b/java/res/values-af/strings.xml @@ -46,6 +46,8 @@ <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> <string name="use_personalized_dicts" msgid="5167396352105467626">"Gepersonaliseerde voorstelle"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml index 2e1243a1f..1b1da01e5 100644 --- a/java/res/values-am/strings-talkback-descriptions.xml +++ b/java/res/values-am/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml index 651c642cb..f957d1111 100644 --- a/java/res/values-am/strings.xml +++ b/java/res/values-am/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"የዕውቂያ ስም ጠቁም"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"ከዕውቂያዎች ለጥቆማዎች እና ማስተካከያዎች ስሞች ተጠቀም"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"ግላዊ የጥቆማ አስተያየቶች"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ar/strings-talkback-descriptions.xml b/java/res/values-ar/strings-talkback-descriptions.xml index 0ca701bbe..b39033a85 100644 --- a/java/res/values-ar/strings-talkback-descriptions.xml +++ b/java/res/values-ar/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml index a907ba885..111b5af51 100644 --- a/java/res/values-ar/strings.xml +++ b/java/res/values-ar/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"اقتراح أسماء جهات الاتصال"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"استخدام الأسماء من جهات الاتصال للاقتراحات والتصحيحات"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"اقتراحات مخصصة"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-az-rAZ/strings-talkback-descriptions.xml b/java/res/values-az-rAZ/strings-talkback-descriptions.xml index 5dd303aec..8ba8a6e7d 100644 --- a/java/res/values-az-rAZ/strings-talkback-descriptions.xml +++ b/java/res/values-az-rAZ/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-az-rAZ/strings.xml b/java/res/values-az-rAZ/strings.xml index f1f3e22ab..bf3990d6e 100644 --- a/java/res/values-az-rAZ/strings.xml +++ b/java/res/values-az-rAZ/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Kontakt adları təklif edin"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Təklif və korreksiya üçün Kontaktlardakı adlardan istifadə edin"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Fərdiləşmiş təkliflər"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"İkili boşluq periodu"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Boşluqdakı iki klik boşluqdan sonra pauza daxil edir"</string> <string name="auto_cap" msgid="1719746674854628252">"Avtomatik böyük hərfləşmə"</string> diff --git a/java/res/values-bg/strings-talkback-descriptions.xml b/java/res/values-bg/strings-talkback-descriptions.xml index 50025b535..edd74b52c 100644 --- a/java/res/values-bg/strings-talkback-descriptions.xml +++ b/java/res/values-bg/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml index c18b1083c..96c3a9560 100644 --- a/java/res/values-bg/strings.xml +++ b/java/res/values-bg/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Предложения за контакти"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Използване на имена от „Контакти“ за предложения и поправки"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Персонализ. предложения"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml index 3127feb1c..5bbf65571 100644 --- a/java/res/values-ca/strings-talkback-descriptions.xml +++ b/java/res/values-ca/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml index bb5b05413..3c7e09237 100644 --- a/java/res/values-ca/strings.xml +++ b/java/res/values-ca/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Suggereix noms de contactes"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilitza els noms de contactes per fer suggeriments i correccions"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Suggeriments personalitz."</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Punt amb doble espai"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Picar dues vegades la barra d\'espai insereix punt i espai blanc"</string> <string name="auto_cap" msgid="1719746674854628252">"Majúscules automàtiques"</string> diff --git a/java/res/values-cs/strings-talkback-descriptions.xml b/java/res/values-cs/strings-talkback-descriptions.xml index a80957929..50cc984b9 100644 --- a/java/res/values-cs/strings-talkback-descriptions.xml +++ b/java/res/values-cs/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml index b805d2820..98a9a13d6 100644 --- a/java/res/values-cs/strings.xml +++ b/java/res/values-cs/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Navrhovat jména kontaktů"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Použít jména ze seznamu kontaktů k návrhům a opravám"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalizované návrhy"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Tečka dvojitým mezerníkem"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dvojím klepnutím na mezerník vložíte tečku následovanou mezerou."</string> <string name="auto_cap" msgid="1719746674854628252">"Velká písmena automaticky"</string> diff --git a/java/res/values-da/strings-talkback-descriptions.xml b/java/res/values-da/strings-talkback-descriptions.xml index ffcdb442c..b34650e8b 100644 --- a/java/res/values-da/strings-talkback-descriptions.xml +++ b/java/res/values-da/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml index 36263c65e..d7a005be4 100644 --- a/java/res/values-da/strings.xml +++ b/java/res/values-da/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Foreslå navne på kontakter"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Brug navne fra Kontaktpersoner til forslag og rettelser"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Tilpassede forslag"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"To mellemrum for punktum"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"To tryk på mellemrumstasten indsætter et punktum og et mellemrum"</string> <string name="auto_cap" msgid="1719746674854628252">"Skriv automatisk med stort"</string> diff --git a/java/res/values-de/strings-talkback-descriptions.xml b/java/res/values-de/strings-talkback-descriptions.xml index e2fe2b7c5..3ae624370 100644 --- a/java/res/values-de/strings-talkback-descriptions.xml +++ b/java/res/values-de/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml index aaa4c50db..d5bfec2b4 100644 --- a/java/res/values-de/strings.xml +++ b/java/res/values-de/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Kontakte vorschlagen"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Namen aus \"Kontakte\" als Vorschläge und Korrekturmöglichkeiten anzeigen"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalisierte Vorschläge"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Punkt plus Leerzeichen"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Für Punkt plus Leerzeichen zweimal auf die Leertaste tippen"</string> <string name="auto_cap" msgid="1719746674854628252">"Autom. Groß-/Kleinschreibung"</string> diff --git a/java/res/values-el/strings-talkback-descriptions.xml b/java/res/values-el/strings-talkback-descriptions.xml index 60a6d174a..bb9875780 100644 --- a/java/res/values-el/strings-talkback-descriptions.xml +++ b/java/res/values-el/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml index aa7d60c3f..cfe652b2a 100644 --- a/java/res/values-el/strings.xml +++ b/java/res/values-el/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Πρόταση ονομάτων επαφών"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Χρησιμοποιήστε ονόματα από τις Επαφές για προτάσεις και διορθ."</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Εξατομικευμένες προτάσεις"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml index 0f726ddaf..3956777ea 100644 --- a/java/res/values-en-rGB/strings-talkback-descriptions.xml +++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml index dbc3712d0..0053a257c 100644 --- a/java/res/values-en-rGB/strings.xml +++ b/java/res/values-en-rGB/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Suggest Contact names"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Use names from Contacts for suggestions and corrections"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalised suggestions"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Double-space full stop"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Double tap on spacebar inserts a full stop followed by a space"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalisation"</string> diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml index 0f726ddaf..3956777ea 100644 --- a/java/res/values-en-rIN/strings-talkback-descriptions.xml +++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-en-rIN/strings.xml b/java/res/values-en-rIN/strings.xml index dbc3712d0..0053a257c 100644 --- a/java/res/values-en-rIN/strings.xml +++ b/java/res/values-en-rIN/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Suggest Contact names"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Use names from Contacts for suggestions and corrections"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalised suggestions"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Double-space full stop"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Double tap on spacebar inserts a full stop followed by a space"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalisation"</string> diff --git a/java/res/values-es-rUS/strings-talkback-descriptions.xml b/java/res/values-es-rUS/strings-talkback-descriptions.xml index 52f791631..75fa14c2b 100644 --- a/java/res/values-es-rUS/strings-talkback-descriptions.xml +++ b/java/res/values-es-rUS/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml index db34dd227..ffbd54364 100644 --- a/java/res/values-es-rUS/strings.xml +++ b/java/res/values-es-rUS/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Sugerenc. personalizadas"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <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> diff --git a/java/res/values-es/strings-talkback-descriptions.xml b/java/res/values-es/strings-talkback-descriptions.xml index 86c970f81..11422bc56 100644 --- a/java/res/values-es/strings-talkback-descriptions.xml +++ b/java/res/values-es/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml index 87671f428..1174614c5 100644 --- a/java/res/values-es/strings.xml +++ b/java/res/values-es/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Sugerencias personalizadas"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <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> diff --git a/java/res/values-et-rEE/strings-talkback-descriptions.xml b/java/res/values-et-rEE/strings-talkback-descriptions.xml index 2a7493e71..5bbe63b17 100644 --- a/java/res/values-et-rEE/strings-talkback-descriptions.xml +++ b/java/res/values-et-rEE/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-et-rEE/strings.xml b/java/res/values-et-rEE/strings.xml index e9c3f84ee..00d17bc60 100644 --- a/java/res/values-et-rEE/strings.xml +++ b/java/res/values-et-rEE/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Soovita kontaktkirjeid"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Kasuta soovitusteks ja parandusteks nimesid kontaktiloendist"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Isikupärast. soovitused"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Punkt tühikuklahviga"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Tühikuklahvi kaks korda puudutades sisestatakse punkt ja tühik"</string> <string name="auto_cap" msgid="1719746674854628252">"Automaatne suurtähtede kasutamine"</string> diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml index b36b88a6a..c70040fae 100644 --- a/java/res/values-fa/strings-talkback-descriptions.xml +++ b/java/res/values-fa/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml index 16a53b3f9..8a6e5a2dc 100644 --- a/java/res/values-fa/strings.xml +++ b/java/res/values-fa/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"پیشنهاد نامهای مخاطب"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"برای پیشنهاد و تصحیح از نام مخاطبین استفاده شود"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"پیشنهادات شخصی شده"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-fi/strings-talkback-descriptions.xml b/java/res/values-fi/strings-talkback-descriptions.xml index e6050fb67..e2e66e3fe 100644 --- a/java/res/values-fi/strings-talkback-descriptions.xml +++ b/java/res/values-fi/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml index 9ccc8c3c7..de9866acb 100644 --- a/java/res/values-fi/strings.xml +++ b/java/res/values-fi/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Ehdota yht.tietojen nimiä"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Käytä yhteystietojen nimiä ehdotuksissa ja korjauksissa"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Räätälöidyt ehdotukset"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Kaksoisvälilyönti = piste"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Välilyönnin kaksoisnapautus lisää tekstiin pisteen ja välilyönnin"</string> <string name="auto_cap" msgid="1719746674854628252">"Automaattiset isot kirjaimet"</string> diff --git a/java/res/values-fr-rCA/strings-talkback-descriptions.xml b/java/res/values-fr-rCA/strings-talkback-descriptions.xml index 263792c66..2a0bec474 100644 --- a/java/res/values-fr-rCA/strings-talkback-descriptions.xml +++ b/java/res/values-fr-rCA/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-fr-rCA/strings.xml b/java/res/values-fr-rCA/strings.xml index fa4304776..357210f0c 100644 --- a/java/res/values-fr-rCA/strings.xml +++ b/java/res/values-fr-rCA/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Proposer noms de contacts"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utiliser des noms de contacts pour les suggestions et corrections"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Suggestions personnalisées"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Point et espace"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Appuyez deux fois sur la barre d\'espace pour insérer un point et une espace"</string> <string name="auto_cap" msgid="1719746674854628252">"Majuscules automatiques"</string> diff --git a/java/res/values-fr/strings-talkback-descriptions.xml b/java/res/values-fr/strings-talkback-descriptions.xml index 37904262e..a79fd2107 100644 --- a/java/res/values-fr/strings-talkback-descriptions.xml +++ b/java/res/values-fr/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml index 0fa8e638c..ea7eed688 100644 --- a/java/res/values-fr/strings.xml +++ b/java/res/values-fr/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Proposer noms de contacts"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utiliser des noms de contacts pour les suggestions et corrections"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Suggestions personnalisées"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Point et espace"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Appuyez deux fois sur la barre d\'espace pour insérer un point et un espace."</string> <string name="auto_cap" msgid="1719746674854628252">"Majuscules auto"</string> diff --git a/java/res/values-hi/strings-talkback-descriptions.xml b/java/res/values-hi/strings-talkback-descriptions.xml index 9747aeb34..78e4c8d6e 100644 --- a/java/res/values-hi/strings-talkback-descriptions.xml +++ b/java/res/values-hi/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml index cb1ad60eb..26d9595ef 100644 --- a/java/res/values-hi/strings.xml +++ b/java/res/values-hi/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"संपर्क नाम सुझाएं"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"सुझाव और सुधार के लिए संपर्क से नामों का उपयोग करें"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"वैयक्तिकृत सुझाव"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-hr/strings-talkback-descriptions.xml b/java/res/values-hr/strings-talkback-descriptions.xml index a5c4dfaee..b3d5f707c 100644 --- a/java/res/values-hr/strings-talkback-descriptions.xml +++ b/java/res/values-hr/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml index 14e408f47..3d749e111 100644 --- a/java/res/values-hr/strings.xml +++ b/java/res/values-hr/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Predlaži imena kontakata"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Upotreba imena iz Kontakata za prijedloge i ispravke"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Prilagođeni prijedlozi"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Točka s dva razmaka"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dvostrukim dodirivanjem razmaknice umeću se točka i razmak"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatsko pisanje velikih slova"</string> diff --git a/java/res/values-hu/strings-talkback-descriptions.xml b/java/res/values-hu/strings-talkback-descriptions.xml index 1b514b2d4..cf505c472 100644 --- a/java/res/values-hu/strings-talkback-descriptions.xml +++ b/java/res/values-hu/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml index 4c751b724..5691bf703 100644 --- a/java/res/values-hu/strings.xml +++ b/java/res/values-hu/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Javasolt névjegyek"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"A névjegyek használata a javaslatokhoz és javításokhoz"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Testreszabott javaslatok"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dupla szóköz: pont"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"A szóköz kétszeri megérintése beszúr egy pontot, majd egy szóközt"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatikusan nagy kezdőbetű"</string> diff --git a/java/res/values-hy-rAM/strings-talkback-descriptions.xml b/java/res/values-hy-rAM/strings-talkback-descriptions.xml index d9c9b6d82..5b7e4b522 100644 --- a/java/res/values-hy-rAM/strings-talkback-descriptions.xml +++ b/java/res/values-hy-rAM/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-hy-rAM/strings.xml b/java/res/values-hy-rAM/strings.xml index a43e67916..d7851b540 100644 --- a/java/res/values-hy-rAM/strings.xml +++ b/java/res/values-hy-rAM/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Առաջարկել կոնտակտների անունները"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Օգտագործել կոնտակտների անունները՝ առաջարկների և ուղղումների համար"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Անհատականացված առաջարկներ"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml index 07c5bf749..6f2970795 100644 --- a/java/res/values-in/strings-talkback-descriptions.xml +++ b/java/res/values-in/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml index a625da03e..3205a5db4 100644 --- a/java/res/values-in/strings.xml +++ b/java/res/values-in/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Saran hasil personalisasi"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Titik spasi ganda"</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> diff --git a/java/res/values-it/strings-talkback-descriptions.xml b/java/res/values-it/strings-talkback-descriptions.xml index e48f7715e..f9eeefea0 100644 --- a/java/res/values-it/strings-talkback-descriptions.xml +++ b/java/res/values-it/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml index fc9834e12..e51a87184 100644 --- a/java/res/values-it/strings.xml +++ b/java/res/values-it/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Suggerisci nomi di contatti"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilizza nomi di Contatti per suggerimenti e correzioni"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Suggerimenti personalizz."</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Doppio spazio per punto"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Tocca due volte barra spaziatr. per inserire punto seguito da spazio"</string> <string name="auto_cap" msgid="1719746674854628252">"Maiuscole automatiche"</string> diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml index f3f07af03..435aaba51 100644 --- a/java/res/values-iw/strings-talkback-descriptions.xml +++ b/java/res/values-iw/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml index 7ab16370e..36cb66330 100644 --- a/java/res/values-iw/strings.xml +++ b/java/res/values-iw/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"הצע שמות של אנשי קשר"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"השתמש בשמות מרשימת אנשי הקשר עבור הצעות ותיקונים"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"הצעות מותאמות אישית"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ja/strings-talkback-descriptions.xml b/java/res/values-ja/strings-talkback-descriptions.xml index 757b83209..a3b4c8faa 100644 --- a/java/res/values-ja/strings-talkback-descriptions.xml +++ b/java/res/values-ja/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml index 3845bd759..b6eea69dd 100644 --- a/java/res/values-ja/strings.xml +++ b/java/res/values-ja/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"連絡先の名前を候補に表示"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"連絡先の名前を使用して候補表示や自動修正を行います"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"入力候補のカスタマイズ"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml index daf818005..0cf7e7ce4 100644 --- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml +++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ka-rGE/strings.xml b/java/res/values-ka-rGE/strings.xml index 4677b1844..3360c6209 100644 --- a/java/res/values-ka-rGE/strings.xml +++ b/java/res/values-ka-rGE/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"კონტაქტის სახელების შეთავაზება"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"კონტაქტებიდან სახელების გამოყენება შეთავაზებებისთვის და კორექციისთვის"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"პერსონალიზებული შეთავაზებები"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-kk/strings-talkback-descriptions.xml b/java/res/values-kk/strings-talkback-descriptions.xml index 13adf830d..39388a4d7 100644 --- a/java/res/values-kk/strings-talkback-descriptions.xml +++ b/java/res/values-kk/strings-talkback-descriptions.xml @@ -27,7 +27,8 @@ <skip /> <!-- no translation found for spoken_auto_correct_obscured (6276420476908833791) --> <skip /> - <string name="spoken_description_unknown" msgid="3197434010402179157">"Перне коды %d"</string> + <!-- no translation found for spoken_description_unknown (5139930082759824442) --> + <skip /> <string name="spoken_description_shift" msgid="244197883292549308">"Shift"</string> <string name="spoken_description_shift_shifted" msgid="1681877323344195035">"Shift қосулы (өшіру үшін түрту)"</string> <string name="spoken_description_caps_lock" msgid="3276478269526304432">"Caps lock қосулы (өшіру үшін түрту)"</string> diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml index 67934c702..0f0ac5600 100644 --- a/java/res/values-km-rKH/strings-talkback-descriptions.xml +++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-km-rKH/strings.xml b/java/res/values-km-rKH/strings.xml index 337d08676..5d68816d1 100644 --- a/java/res/values-km-rKH/strings.xml +++ b/java/res/values-km-rKH/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"ស្នើឈ្មោះទំនាក់ទំនង"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"ប្រើឈ្មោះពីទំនាក់ទំនងសម្រាប់ការស្នើ និងកែ"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"ការស្នើផ្ទាល់ខ្លួន"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ko/strings-talkback-descriptions.xml b/java/res/values-ko/strings-talkback-descriptions.xml index 117c09539..d5d71f935 100644 --- a/java/res/values-ko/strings-talkback-descriptions.xml +++ b/java/res/values-ko/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml index 98427b32a..3eff38c9d 100644 --- a/java/res/values-ko/strings.xml +++ b/java/res/values-ko/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"주소록 이름 활용"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"추천 및 수정에 주소록의 이름 사용"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"맞춤 추천 검색어"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml index 4a63b02c7..c6140fda9 100644 --- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml +++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-lo-rLA/strings.xml b/java/res/values-lo-rLA/strings.xml index 9d012b6a4..bca49e573 100644 --- a/java/res/values-lo-rLA/strings.xml +++ b/java/res/values-lo-rLA/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"ແນະນຳລາຍຊື່ຜູ່ຕິດຕໍ່"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"ໃຊ້ຊື່ຈາກລາຍຊື່ຜູ່ຕິດຕໍ່ສຳລັບການແນະນຳ ແລະ ການຊ່ວຍແກ້ຄຳ"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"ຄຳແນະນຳຕາມການນຳໃຊ້ຂອງທ່ານ"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-lt/strings-talkback-descriptions.xml b/java/res/values-lt/strings-talkback-descriptions.xml index 8baf25b56..4e7f6afef 100644 --- a/java/res/values-lt/strings-talkback-descriptions.xml +++ b/java/res/values-lt/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml index 73003c25f..01ec1bea7 100644 --- a/java/res/values-lt/strings.xml +++ b/java/res/values-lt/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Siūlyti kontaktų vardus"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Siūlant ir taisant naudoti vardus iš „Kontaktų“"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Suasmeninti pasiūlymai"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Tšk. ir tarp. pal. dukart"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dukart palietus tarpo klavišą įterpiamas taškas ir tarpas."</string> <string name="auto_cap" msgid="1719746674854628252">"Automatinis didžiųjų raidžių rašymas"</string> diff --git a/java/res/values-lv/strings-talkback-descriptions.xml b/java/res/values-lv/strings-talkback-descriptions.xml index bd15c3fce..e68d83afb 100644 --- a/java/res/values-lv/strings-talkback-descriptions.xml +++ b/java/res/values-lv/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml index d689182fb..bc4e3e1ea 100644 --- a/java/res/values-lv/strings.xml +++ b/java/res/values-lv/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Ieteikt kontaktp. vārdus"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Izmantot kontaktpersonu vārdus kā ieteikumus un labojumus"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalizēti ieteikumi"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dubultpiesk. = punkts"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Divreiz pieskaroties atst. taustiņam, ievada punktu un atstarpi."</string> <string name="auto_cap" msgid="1719746674854628252">"Automātiska lielo burtu lietošana"</string> diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml index c28ac209a..1c1e6e7f3 100644 --- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml +++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-mn-rMN/strings.xml b/java/res/values-mn-rMN/strings.xml index f6233b5f6..67886e3bd 100644 --- a/java/res/values-mn-rMN/strings.xml +++ b/java/res/values-mn-rMN/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Харилцагчдын нэрс санал болгох"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Санал болгох, залруулахда Харилцагчдын нэрсээс ашиглах"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Хувийн тохиргоотой зөвлөмжүүд"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-ms-rMY/strings-talkback-descriptions.xml b/java/res/values-ms-rMY/strings-talkback-descriptions.xml index ad0a62793..d6a45033e 100644 --- a/java/res/values-ms-rMY/strings-talkback-descriptions.xml +++ b/java/res/values-ms-rMY/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ms-rMY/strings.xml b/java/res/values-ms-rMY/strings.xml index 04ea273ac..52165c55a 100644 --- a/java/res/values-ms-rMY/strings.xml +++ b/java/res/values-ms-rMY/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Cadangan diperibadikan"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Titik ruang berganda"</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">"Autopenghurufbesaran"</string> diff --git a/java/res/values-nb/strings-talkback-descriptions.xml b/java/res/values-nb/strings-talkback-descriptions.xml index 899491afb..4870366d1 100644 --- a/java/res/values-nb/strings-talkback-descriptions.xml +++ b/java/res/values-nb/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index f4a3a2da0..339361cc4 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Spesialtilpassede forslag"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <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> diff --git a/java/res/values-ne-rNP/strings-talkback-descriptions.xml b/java/res/values-ne-rNP/strings-talkback-descriptions.xml index 548e21a88..044a04154 100644 --- a/java/res/values-ne-rNP/strings-talkback-descriptions.xml +++ b/java/res/values-ne-rNP/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ne-rNP/strings.xml b/java/res/values-ne-rNP/strings.xml index 60321466f..22e5acb91 100644 --- a/java/res/values-ne-rNP/strings.xml +++ b/java/res/values-ne-rNP/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"सम्पर्क नामहरू सुझाव गर्नुहोस्"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"सुझाव र सुधारका लागि सम्पर्कबाट नामहरू प्रयोग गर्नुहोस्"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"निजीकृत सुझावहरू"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-nl/strings-talkback-descriptions.xml b/java/res/values-nl/strings-talkback-descriptions.xml index 4393e568a..57bbf91e2 100644 --- a/java/res/values-nl/strings-talkback-descriptions.xml +++ b/java/res/values-nl/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml index a651f7e06..94ccd6b46 100644 --- a/java/res/values-nl/strings.xml +++ b/java/res/values-nl/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Contactnamen suggereren"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Namen uit Contacten gebruiken voor suggesties en correcties"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Gepersonaliseerde suggesties"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dubbeltik is punt, spatie"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dubbeltik op spatiebalk voor een punt gevolgd door een spatie"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-hoofdlettergebruik"</string> diff --git a/java/res/values-pl/strings-talkback-descriptions.xml b/java/res/values-pl/strings-talkback-descriptions.xml index 9a97b2642..1708ae02a 100644 --- a/java/res/values-pl/strings-talkback-descriptions.xml +++ b/java/res/values-pl/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml index e78b7f267..218e6197e 100644 --- a/java/res/values-pl/strings.xml +++ b/java/res/values-pl/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Proponuj osoby z kontaktów"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"W propozycjach i poprawkach użyj nazwisk z kontaktów"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Spersonalizowane sugestie"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Szybka kropka ze spacją"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dwukrotne kliknięcie spacji wstawia kropkę ze spacją"</string> <string name="auto_cap" msgid="1719746674854628252">"Wstawiaj wielkie litery"</string> diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml index fac1969c1..91d187ec9 100644 --- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml +++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml index d13fca3ba..86a619bc6 100644 --- a/java/res/values-pt-rPT/strings.xml +++ b/java/res/values-pt-rPT/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Sugerir nomes de Contactos"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilizar nomes dos Contactos para sugestões e correções"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Sugestões personalizadas"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Ponto de espaço duplo"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Tocar duas vezes na barra espaço insere ponto seguido de espaço"</string> <string name="auto_cap" msgid="1719746674854628252">"Letras maiúsculas automáticas"</string> diff --git a/java/res/values-pt/strings-talkback-descriptions.xml b/java/res/values-pt/strings-talkback-descriptions.xml index e026dbab1..065cdaec6 100644 --- a/java/res/values-pt/strings-talkback-descriptions.xml +++ b/java/res/values-pt/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml index f19ce5ed4..4d65ec86c 100644 --- a/java/res/values-pt/strings.xml +++ b/java/res/values-pt/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Sugerir nomes de contato"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Usar nomes dos Contatos para sugestões e correções"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Sugestões personalizadas"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Duplo espaço para ponto"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Toque duplo na barra de espaço insere um ponto seguido de espaço"</string> <string name="auto_cap" msgid="1719746674854628252">"Capitalização automática"</string> diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml index 34bfd8fc8..6e5db4d02 100644 --- a/java/res/values-ro/strings-talkback-descriptions.xml +++ b/java/res/values-ro/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml index 5d5330d3b..8ab56bc7a 100644 --- a/java/res/values-ro/strings.xml +++ b/java/res/values-ro/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Sugeraţi nume din Agendă"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Utilizaţi numele din Agendă pentru sugestii şi corecţii"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Sugestii personalizate"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Inserează punct spațiu"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dubla atingere a barei de spațiu inserează punct urmat de spațiu"</string> <string name="auto_cap" msgid="1719746674854628252">"Scriere automată cu majuscule"</string> diff --git a/java/res/values-ru/strings-talkback-descriptions.xml b/java/res/values-ru/strings-talkback-descriptions.xml index d79e4b8f0..f73ceab4e 100644 --- a/java/res/values-ru/strings-talkback-descriptions.xml +++ b/java/res/values-ru/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml index e78874948..61c414c4b 100644 --- a/java/res/values-ru/strings.xml +++ b/java/res/values-ru/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Подсказывать имена"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Подсказывать исправления на основе имен из списка контактов"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Пользовательские словари"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml index e2f0eb191..9fde012b3 100644 --- a/java/res/values-sk/strings-talkback-descriptions.xml +++ b/java/res/values-sk/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml index 179960f50..1d7a3dc0e 100644 --- a/java/res/values-sk/strings.xml +++ b/java/res/values-sk/strings.xml @@ -46,6 +46,8 @@ <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_personalized_dicts" msgid="5167396352105467626">"Prispôsobené návrhy"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <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> diff --git a/java/res/values-sl/strings-talkback-descriptions.xml b/java/res/values-sl/strings-talkback-descriptions.xml index 92ccc6856..27b8d3d6c 100644 --- a/java/res/values-sl/strings-talkback-descriptions.xml +++ b/java/res/values-sl/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml index 64eedc623..85d40f4c9 100644 --- a/java/res/values-sl/strings.xml +++ b/java/res/values-sl/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Predlagaj imena stikov"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Uporaba imen iz stikov za predloge in popravke"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Prilagojeni predlogi"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dva presl. za vnos pike"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Z dvojnim dotikom preslednice vstavite piko in za njo presledek"</string> <string name="auto_cap" msgid="1719746674854628252">"Samod. velike začetnice"</string> diff --git a/java/res/values-sr/strings-talkback-descriptions.xml b/java/res/values-sr/strings-talkback-descriptions.xml index d14cccfbc..d47258177 100644 --- a/java/res/values-sr/strings-talkback-descriptions.xml +++ b/java/res/values-sr/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml index a37d22e7e..1862e8539 100644 --- a/java/res/values-sr/strings.xml +++ b/java/res/values-sr/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Предложи имена контаката"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Користи имена из Контаката за предлоге и исправке"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Персонализовани предлози"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-sv/strings-talkback-descriptions.xml b/java/res/values-sv/strings-talkback-descriptions.xml index fd7a43f65..9824b5a7c 100644 --- a/java/res/values-sv/strings-talkback-descriptions.xml +++ b/java/res/values-sv/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml index 1cb57dda9..606140466 100644 --- a/java/res/values-sv/strings.xml +++ b/java/res/values-sv/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Föreslå kontaktnamn"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Använd namn från Kontakter för förslag och korrigeringar"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Anpassade förslag"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dubbelt blanksteg = punkt"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Dubbelt blanksteg ger en punkt följt av mellanslag"</string> <string name="auto_cap" msgid="1719746674854628252">"Automatiska versaler"</string> diff --git a/java/res/values-sw/strings-talkback-descriptions.xml b/java/res/values-sw/strings-talkback-descriptions.xml index a7447cec4..e00ce6a9b 100644 --- a/java/res/values-sw/strings-talkback-descriptions.xml +++ b/java/res/values-sw/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml index 361e9f67d..2d130e0bf 100644 --- a/java/res/values-sw/strings.xml +++ b/java/res/values-sw/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Pendekeza majini ya Anwani"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Tumia majina kutoka kwa Anwani kwa mapendekezo na marekebisho"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Mapendekezo yaliyobadilishwa kukufaa"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Kitone baada ya nafasi mbili"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Kugonga mara mbili kwenye upau nafasi kunaingiza kitone kikifuatiwa na nafasi"</string> <string name="auto_cap" msgid="1719746674854628252">"Uwekaji wa herufi kubwa kiotomatiki"</string> diff --git a/java/res/values-th/strings-talkback-descriptions.xml b/java/res/values-th/strings-talkback-descriptions.xml index 780252074..81c86fd5b 100644 --- a/java/res/values-th/strings-talkback-descriptions.xml +++ b/java/res/values-th/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml index 5bbff3dc8..83f196f87 100644 --- a/java/res/values-th/strings.xml +++ b/java/res/values-th/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"แนะนำชื่อผู้ติดต่อ"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"ใช้ชื่อจากรายชื่อติดต่อสำหรับคำแนะนำและการแก้ไข"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"คำแนะนำในแบบของคุณ"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"แตะ Space สองครั้งแทรกจุด"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"แตะ Spacebar สองครั้งจะแทรกจุดตามด้วยช่องว่างหนึ่งช่อง"</string> <string name="auto_cap" msgid="1719746674854628252">"ปรับเป็นตัวพิมพ์ใหญ่อัตโนมัติ"</string> diff --git a/java/res/values-tl/strings-talkback-descriptions.xml b/java/res/values-tl/strings-talkback-descriptions.xml index df977bdf5..06ba9211d 100644 --- a/java/res/values-tl/strings-talkback-descriptions.xml +++ b/java/res/values-tl/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml index d1b665c72..b9216a607 100644 --- a/java/res/values-tl/strings.xml +++ b/java/res/values-tl/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Mungkahi pangalan Contact"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Gamitin pangalan mula Mga Contact sa mga mungkahi\'t pagwawasto"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Personalized suggestions"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Double-space period"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Naglalagay ng tuldok na may puwang ang pag-double tap sa spacebar"</string> <string name="auto_cap" msgid="1719746674854628252">"Auto-capitalization"</string> diff --git a/java/res/values-tr/strings-talkback-descriptions.xml b/java/res/values-tr/strings-talkback-descriptions.xml index c392e8594..a3f635cb9 100644 --- a/java/res/values-tr/strings-talkback-descriptions.xml +++ b/java/res/values-tr/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml index adbd67690..b1573c3d8 100644 --- a/java/res/values-tr/strings.xml +++ b/java/res/values-tr/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Kişi Adları öner"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Öneri ve düzeltmeler için Kişiler\'deki adları kullan"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Kişisel öneriler"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Çift boşlukla nokta ekleme"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Boşluk çubuğuna iki kez vurmak nokta ve ardından bir boşluk ekler"</string> <string name="auto_cap" msgid="1719746674854628252">"Otomatik olarak büyük harf yap"</string> diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml index 3f43a1233..e4df115ae 100644 --- a/java/res/values-uk/strings-talkback-descriptions.xml +++ b/java/res/values-uk/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml index 8ce96561f..f2993fc03 100644 --- a/java/res/values-uk/strings.xml +++ b/java/res/values-uk/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Пропон. імена контактів"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Використ. імена зі списку контактів для пропозицій і виправлень"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Персональні пропозиції"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-v20/platform-theme.xml b/java/res/values-v20/platform-theme.xml index 06062047b..52e7f3521 100644 --- a/java/res/values-v20/platform-theme.xml +++ b/java/res/values-v20/platform-theme.xml @@ -21,6 +21,6 @@ <!-- TODO: This file is temporarily placed under values-v20. --> <!-- TODO: It might be moved under values-v21. --> <resources xmlns:android="http://schemas.android.com/apk/res/android"> - <style name="platformActivityTheme" parent="@android:style/Theme.Quantum.Light" /> - <style name="platformDialogTheme" parent="@android:style/Theme.Quantum.Light.Dialog" /> + <style name="platformActivityTheme" parent="@android:style/Theme.Material.Light" /> + <style name="platformDialogTheme" parent="@android:style/Theme.Material.Light.Dialog" /> </resources> diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml index 5c9140996..ad63fa52f 100644 --- a/java/res/values-vi/strings-talkback-descriptions.xml +++ b/java/res/values-vi/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml index 5d4705892..5a47ad06a 100644 --- a/java/res/values-vi/strings.xml +++ b/java/res/values-vi/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Đề xuất tên liên hệ"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Sử dụng tên từ Danh bạ cho các đề xuất và chỉnh sửa"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Đề xuất được cá nhân hóa"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Dấu cách đôi"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Nhấn đúp vào phím cách sẽ chèn thêm một dấu sau dấu cách"</string> <string name="auto_cap" msgid="1719746674854628252">"Tự động viết hoa"</string> diff --git a/java/res/values-zh-rCN/strings-talkback-descriptions.xml b/java/res/values-zh-rCN/strings-talkback-descriptions.xml index f0770ab3a..dda7638e4 100644 --- a/java/res/values-zh-rCN/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rCN/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml index 4f5cddda7..7725118e8 100644 --- a/java/res/values-zh-rCN/strings.xml +++ b/java/res/values-zh-rCN/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"联系人姓名建议"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"根据通讯录中的姓名提供建议和更正"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"个性化建议"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-zh-rHK/strings-talkback-descriptions.xml b/java/res/values-zh-rHK/strings-talkback-descriptions.xml index 1bed8c96a..a962492ed 100644 --- a/java/res/values-zh-rHK/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rHK/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-zh-rHK/strings.xml b/java/res/values-zh-rHK/strings.xml index 1d6030e0a..564db46fe 100644 --- a/java/res/values-zh-rHK/strings.xml +++ b/java/res/values-zh-rHK/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"建議聯絡人名稱"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"使用「聯絡人」的名稱提供建議與修正"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"個人化建議"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-zh-rTW/strings-talkback-descriptions.xml b/java/res/values-zh-rTW/strings-talkback-descriptions.xml index f7ca6cef3..c097b28b7 100644 --- a/java/res/values-zh-rTW/strings-talkback-descriptions.xml +++ b/java/res/values-zh-rTW/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml index ae74d055c..176d5b4a7 100644 --- a/java/res/values-zh-rTW/strings.xml +++ b/java/res/values-zh-rTW/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"聯絡人姓名建議"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"根據「聯絡人」名稱提供建議與修正"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"個人化建議"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <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> diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml index 1a6f8b40d..9f344d8bf 100644 --- a/java/res/values-zu/strings-talkback-descriptions.xml +++ b/java/res/values-zu/strings-talkback-descriptions.xml @@ -82,4 +82,12 @@ <skip /> <!-- no translation found for spoken_emoji_unknown (5981009928135394306) --> <skip /> + <!-- no translation found for spoken_open_more_keys_keyboard (6832897688371903747) --> + <skip /> + <!-- no translation found for spoken_close_more_keys_keyboard (3524914657934712026) --> + <skip /> + <!-- no translation found for spoken_open_more_suggestions (4231720702882969760) --> + <skip /> + <!-- no translation found for spoken_close_more_suggestions (9118455416075032839) --> + <skip /> </resources> diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml index a0054cbde..d330c0785 100644 --- a/java/res/values-zu/strings.xml +++ b/java/res/values-zu/strings.xml @@ -46,6 +46,8 @@ <string name="use_contacts_dict" msgid="4435317977804180815">"Sikisela amagama Othintana nabo"</string> <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Amagama abasebenzisi kusuka Kothintana nabo bokusikisela nokulungisa"</string> <string name="use_personalized_dicts" msgid="5167396352105467626">"Iziphakamiso ezenziwe okomuntu siqu"</string> + <!-- no translation found for enable_metrics_logging (5506372337118822837) --> + <skip /> <string name="use_double_space_period" msgid="8781529969425082860">"Isikhathi se-Double-space"</string> <string name="use_double_space_period_summary" msgid="6532892187247952799">"Ukuthepha kabili kubha yesikhala kufaka isikhathi esilandelwa yisikhala"</string> <string name="auto_cap" msgid="1719746674854628252">"Ukwenza ofeleba okuzenzakalelayo"</string> diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml index df26fb3b4..02a93ca82 100644 --- a/java/res/values/themes-common.xml +++ b/java/res/values/themes-common.xml @@ -124,9 +124,10 @@ <item name="android:paddingTop">0dp</item> <item name="android:paddingRight">@dimen/config_suggestion_text_horizontal_padding</item> <item name="android:paddingBottom">0dp</item> - <!-- Provide a haptic feedback by ourselves based on the keyboard settings. - We just need to ignore the system's haptic feedback settings. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <item name="android:hapticFeedbackEnabled">false</item> + <item name="android:soundEffectsEnabled">false</item> <item name="android:focusable">false</item> <item name="android:clickable">false</item> <item name="android:singleLine">true</item> diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java index 3a6453128..7a3510ee1 100644 --- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java @@ -28,6 +28,7 @@ import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; +import com.android.inputmethod.latin.utils.StringUtils; import java.util.Locale; @@ -79,14 +80,6 @@ final class KeyCodeDescriptionMapper { /** * Returns the localized description of the action performed by a specified * key based on the current keyboard state. - * <p> - * The order of precedence for key descriptions is: - * <ol> - * <li>Manually-defined based on the key label</li> - * <li>Automatic or manually-defined based on the key code</li> - * <li>Automatically based on the key label</li> - * <li>{code null} for keys with no label or key code defined</li> - * </p> * * @param context The package's context. * @param keyboard The keyboard on which the key resides. @@ -121,7 +114,20 @@ final class KeyCodeDescriptionMapper { // Just attempt to speak the description. if (code != Constants.CODE_UNSPECIFIED) { - return getDescriptionForKeyCode(context, keyboard, key, shouldObscure); + // If the key description should be obscured, now is the time to do it. + final boolean isDefinedNonCtrl = Character.isDefined(code) + && !Character.isISOControl(code); + if (shouldObscure && isDefinedNonCtrl) { + return context.getString(OBSCURED_KEY_RES_ID); + } + final String description = getDescriptionForCodePoint(context, code); + if (description != null) { + return description; + } + if (!TextUtils.isEmpty(key.getLabel())) { + return key.getLabel(); + } + return context.getString(R.string.spoken_description_unknown); } return null; } @@ -247,57 +253,35 @@ final class KeyCodeDescriptionMapper { /** * Returns a localized character sequence describing what will happen when - * the specified key is pressed based on its key code. - * <p> - * The order of precedence for key code descriptions is: - * <ol> - * <li>Manually-defined shift-locked description</li> - * <li>Manually-defined shifted description</li> - * <li>Manually-defined normal description</li> - * <li>Automatic based on the character represented by the key code</li> - * <li>Fall-back for undefined or control characters</li> - * </ol> - * </p> + * the specified key is pressed based on its key code point. * * @param context The package's context. - * @param keyboard The keyboard on which the key resides. - * @param key The key from which to obtain a description. - * @param shouldObscure {@true} if text (e.g. non-control) characters should be obscured. - * @return a character sequence describing the action performed by pressing the key + * @param codePoint The code point from which to obtain a description. + * @return a character sequence describing the code point. */ - private String getDescriptionForKeyCode(final Context context, final Keyboard keyboard, - final Key key, final boolean shouldObscure) { - final int code = key.getCode(); - + public String getDescriptionForCodePoint(final Context context, final int codePoint) { // If the key description should be obscured, now is the time to do it. - final boolean isDefinedNonCtrl = Character.isDefined(code) && !Character.isISOControl(code); - if (shouldObscure && isDefinedNonCtrl) { - return context.getString(OBSCURED_KEY_RES_ID); - } - final int index = mKeyCodeMap.indexOfKey(code); + final int index = mKeyCodeMap.indexOfKey(codePoint); if (index >= 0) { return context.getString(mKeyCodeMap.valueAt(index)); } - final String accentedLetter = getSpokenAccentedLetterDescription(context, code); + final String accentedLetter = getSpokenAccentedLetterDescription(context, codePoint); if (accentedLetter != null) { return accentedLetter; } // Here, <code>code</code> may be a base (non-accented) letter. - final String unsupportedSymbol = getSpokenSymbolDescription(context, code); + final String unsupportedSymbol = getSpokenSymbolDescription(context, codePoint); if (unsupportedSymbol != null) { return unsupportedSymbol; } - final String emojiDescription = getSpokenEmojiDescription(context, code); + final String emojiDescription = getSpokenEmojiDescription(context, codePoint); if (emojiDescription != null) { return emojiDescription; } - if (isDefinedNonCtrl) { - return Character.toString((char) code); - } - if (!TextUtils.isEmpty(key.getLabel())) { - return key.getLabel(); + if (Character.isDefined(codePoint) && !Character.isISOControl(codePoint)) { + return StringUtils.newSingleCodePointString(codePoint); } - return context.getString(R.string.spoken_description_unknown, code); + return null; } // TODO: Remove this method once TTS supports those accented letters' verbalization. diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java index 4fdf5b8fa..96f84dde9 100644 --- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java +++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java @@ -17,6 +17,7 @@ package com.android.inputmethod.accessibility; import android.content.Context; +import android.graphics.Rect; import android.os.SystemClock; import android.util.Log; import android.util.SparseIntArray; @@ -58,7 +59,8 @@ public final class MainKeyboardAccessibilityDelegate /** The most recently set keyboard mode. */ private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN; private static final int KEYBOARD_IS_HIDDEN = -1; - private boolean mShouldIgnoreOnRegisterHoverKey; + // The rectangle region to ignore hover events. + private final Rect mBoundsToIgnoreHoverEvent = new Rect(); private final AccessibilityLongPressTimer mAccessibilityLongPressTimer; @@ -154,14 +156,28 @@ public final class MainKeyboardAccessibilityDelegate case KeyboardId.ELEMENT_ALPHABET: if (lastElementId == KeyboardId.ELEMENT_ALPHABET || lastElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { + // Transition between alphabet mode and automatic shifted mode should be silently + // ignored because it can be determined by each key's talk back announce. return; } resId = R.string.spoken_description_mode_alpha; break; case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED: + if (lastElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { + // Resetting automatic shifted mode by pressing the shift key causes the transition + // from automatic shifted to manual shifted that should be silently ignored. + return; + } resId = R.string.spoken_description_shiftmode_on; break; case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED: + if (lastElementId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED) { + // Resetting caps locked mode by pressing the shift key causes the transition + // from shift locked to shift lock shifted that should be silently ignored. + return; + } + resId = R.string.spoken_description_shiftmode_locked; + break; case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED: resId = R.string.spoken_description_shiftmode_locked; break; @@ -192,31 +208,49 @@ public final class MainKeyboardAccessibilityDelegate @Override protected void onRegisterHoverKey(final Key key, final MotionEvent event) { + final int x = key.getHitBox().centerX(); + final int y = key.getHitBox().centerY(); if (DEBUG_HOVER) { - Log.d(TAG, "onRegisterHoverKey: key=" + key + " ignore=" - + mShouldIgnoreOnRegisterHoverKey); + Log.d(TAG, "onRegisterHoverKey: key=" + key + + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y)); } - if (!mShouldIgnoreOnRegisterHoverKey) { - super.onRegisterHoverKey(key, event); + if (mBoundsToIgnoreHoverEvent.contains(x, y)) { + // This hover exit event points to the key that should be ignored. + // Clear the ignoring region to handle further hover events. + mBoundsToIgnoreHoverEvent.setEmpty(); + return; } - mShouldIgnoreOnRegisterHoverKey = false; + super.onRegisterHoverKey(key, event); } @Override protected void onHoverEnterTo(final Key key) { + final int x = key.getHitBox().centerX(); + final int y = key.getHitBox().centerY(); if (DEBUG_HOVER) { - Log.d(TAG, "onHoverEnterTo: key=" + key); + Log.d(TAG, "onHoverEnterTo: key=" + key + + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y)); } mAccessibilityLongPressTimer.cancelLongPress(); + if (mBoundsToIgnoreHoverEvent.contains(x, y)) { + return; + } + // This hover enter event points to the key that isn't in the ignoring region. + // Further hover events should be handled. + mBoundsToIgnoreHoverEvent.setEmpty(); super.onHoverEnterTo(key); if (key.isLongPressEnabled()) { mAccessibilityLongPressTimer.startLongPress(key); } } + @Override protected void onHoverExitFrom(final Key key) { + final int x = key.getHitBox().centerX(); + final int y = key.getHitBox().centerY(); if (DEBUG_HOVER) { - Log.d(TAG, "onHoverExitFrom: key=" + key); + Log.d(TAG, "onHoverExitFrom: key=" + key + + " inIgnoreBounds=" + mBoundsToIgnoreHoverEvent.contains(x, y)); } mAccessibilityLongPressTimer.cancelLongPress(); super.onHoverExitFrom(key); @@ -246,6 +280,24 @@ public final class MainKeyboardAccessibilityDelegate // or a key invokes IME switcher dialog, we should just ignore the next // {@link #onRegisterHoverKey(Key,MotionEvent)}. It can be determined by whether // {@link PointerTracker} is in operation or not. - mShouldIgnoreOnRegisterHoverKey = !tracker.isInOperation(); + if (tracker.isInOperation()) { + // This long press shows a more keys keyboard and further hover events should be + // handled. + mBoundsToIgnoreHoverEvent.setEmpty(); + return; + } + // This long press has handled at {@link MainKeyboardView#onLongPress(PointerTracker)}. + // We should ignore further hover events on this key. + mBoundsToIgnoreHoverEvent.set(key.getHitBox()); + if (key.hasNoPanelAutoMoreKey()) { + // This long press has registered a code point without showing a more keys keyboard. + // We should talk back the code point if possible. + final int codePointOfNoPanelAutoMoreKey = key.getMoreKeys()[0].mCode; + final String text = KeyCodeDescriptionMapper.getInstance().getDescriptionForCodePoint( + mKeyboardView.getContext(), codePointOfNoPanelAutoMoreKey); + if (text != null) { + sendWindowStateChanged(text); + } + } } } diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index 77877143b..bcd0cd848 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -382,7 +382,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack mLanguageOnSpacebarTextSize = keyHeight * mLanguageOnSpacebarTextRatio; if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) { - mAccessibilityDelegate = new MainKeyboardAccessibilityDelegate(this, mKeyDetector); + if (mAccessibilityDelegate == null) { + mAccessibilityDelegate = new MainKeyboardAccessibilityDelegate(this, mKeyDetector); + } mAccessibilityDelegate.setKeyboard(keyboard); } else { mAccessibilityDelegate = null; diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java index 4ca4abec6..0f575d30c 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java @@ -77,10 +77,13 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel // discarded at {@link InputView#dispatchHoverEvent(MotionEvent)}. Because only a hover // event that is on this view is dispatched by the platform, we should use a // {@link KeyDetector} that has no sliding allowance and no hysteresis. - mKeyDetector = new KeyDetector(); - mAccessibilityDelegate = new MoreKeysKeyboardAccessibilityDelegate(this, mKeyDetector); - mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_keys_keyboard); - mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_keys_keyboard); + if (mAccessibilityDelegate == null) { + mKeyDetector = new KeyDetector(); + mAccessibilityDelegate = new MoreKeysKeyboardAccessibilityDelegate( + this, mKeyDetector); + mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_keys_keyboard); + mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_keys_keyboard); + } mAccessibilityDelegate.setKeyboard(keyboard); } else { mKeyDetector = new MoreKeysDetector(getResources().getDimension( diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java index 0166802a4..80ba60c82 100644 --- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java @@ -55,7 +55,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements private OnKeyEventListener mListener = EMPTY_LISTENER; private final KeyDetector mKeyDetector = new KeyDetector(); private final GestureDetector mGestureDetector; - private final KeyboardAccessibilityDelegate<EmojiPageKeyboardView> mAccessibilityDelegate; + private KeyboardAccessibilityDelegate<EmojiPageKeyboardView> mAccessibilityDelegate; public EmojiPageKeyboardView(final Context context, final AttributeSet attrs) { this(context, attrs, R.attr.keyboardViewStyle); @@ -67,7 +67,6 @@ final class EmojiPageKeyboardView extends KeyboardView implements mGestureDetector = new GestureDetector(context, this); mGestureDetector.setIsLongpressEnabled(false /* isLongpressEnabled */); mHandler = new Handler(); - mAccessibilityDelegate = new KeyboardAccessibilityDelegate<>(this, mKeyDetector); } public void setOnKeyEventListener(final OnKeyEventListener listener) { @@ -81,6 +80,14 @@ final class EmojiPageKeyboardView extends KeyboardView implements public void setKeyboard(final Keyboard keyboard) { super.setKeyboard(keyboard); mKeyDetector.setKeyboard(keyboard, 0 /* correctionX */, 0 /* correctionY */); + if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) { + if (mAccessibilityDelegate == null) { + mAccessibilityDelegate = new KeyboardAccessibilityDelegate<>(this, mKeyDetector); + } + mAccessibilityDelegate.setKeyboard(keyboard); + } else { + mAccessibilityDelegate = null; + } } /** @@ -88,8 +95,10 @@ final class EmojiPageKeyboardView extends KeyboardView implements */ @Override public boolean onHoverEvent(final MotionEvent event) { - if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) { - return mAccessibilityDelegate.onHoverEvent(event); + final KeyboardAccessibilityDelegate<EmojiPageKeyboardView> accessibilityDelegate = + mAccessibilityDelegate; + if (accessibilityDelegate != null) { + return accessibilityDelegate.onHoverEvent(event); } return super.onHoverEvent(event); } diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java index abed5208b..e37cd2369 100644 --- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java +++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java @@ -46,6 +46,7 @@ import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.keyboard.internal.KeyDrawParams; import com.android.inputmethod.keyboard.internal.KeyVisualAttributes; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; +import com.android.inputmethod.latin.AudioAndHapticFeedbackManager; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SubtypeSwitcher; @@ -240,6 +241,8 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public void onTabChanged(final String tabId) { + AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback( + Constants.CODE_UNSPECIFIED, this); final int categoryId = mEmojiCategory.getCategoryId(tabId); setCurrentCategoryId(categoryId, false /* force */); updateEmojiCategoryPageIdView(); diff --git a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java index 54bc29559..eb8b34ccd 100644 --- a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java +++ b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java @@ -16,14 +16,14 @@ package com.android.inputmethod.latin; -import com.android.inputmethod.latin.settings.SettingsValues; - import android.content.Context; import android.media.AudioManager; import android.os.Vibrator; import android.view.HapticFeedbackConstants; import android.view.View; +import com.android.inputmethod.latin.settings.SettingsValues; + /** * This class gathers audio feedback and haptic feedback functions. * @@ -86,40 +86,41 @@ public final class AudioAndHapticFeedbackManager { if (mAudioManager == null) { return; } - if (mSoundOn) { - final int sound; - switch (code) { - case Constants.CODE_DELETE: - sound = AudioManager.FX_KEYPRESS_DELETE; - break; - case Constants.CODE_ENTER: - sound = AudioManager.FX_KEYPRESS_RETURN; - break; - case Constants.CODE_SPACE: - sound = AudioManager.FX_KEYPRESS_SPACEBAR; - break; - default: - sound = AudioManager.FX_KEYPRESS_STANDARD; - break; - } - mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume); + if (!mSoundOn) { + return; + } + final int sound; + switch (code) { + case Constants.CODE_DELETE: + sound = AudioManager.FX_KEYPRESS_DELETE; + break; + case Constants.CODE_ENTER: + sound = AudioManager.FX_KEYPRESS_RETURN; + break; + case Constants.CODE_SPACE: + sound = AudioManager.FX_KEYPRESS_SPACEBAR; + break; + default: + sound = AudioManager.FX_KEYPRESS_STANDARD; + break; } + mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume); } public void performHapticFeedback(final View viewToPerformHapticFeedbackOn) { if (!mSettingsValues.mVibrateOn) { return; } - if (mSettingsValues.mKeypressVibrationDuration < 0) { - // Go ahead with the system default - if (viewToPerformHapticFeedbackOn != null) { - viewToPerformHapticFeedbackOn.performHapticFeedback( - HapticFeedbackConstants.KEYBOARD_TAP, - HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - } + if (mSettingsValues.mKeypressVibrationDuration >= 0) { + vibrate(mSettingsValues.mKeypressVibrationDuration); return; } - vibrate(mSettingsValues.mKeypressVibrationDuration); + // Go ahead with the system default + if (viewToPerformHapticFeedbackOn != null) { + viewToPerformHapticFeedbackOn.performHapticFeedback( + HapticFeedbackConstants.KEYBOARD_TAP, + HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } } public void onSettingsChanged(final SettingsValues settingsValues) { diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index 7247a1f20..1d087439d 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -345,7 +345,7 @@ public final class BinaryDictionary extends Dictionary { } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { return getFrequency(word) != NOT_A_PROBABILITY; } diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java index bc7276b9a..b55ed125f 100644 --- a/java/src/com/android/inputmethod/latin/Dictionary.java +++ b/java/src/com/android/inputmethod/latin/Dictionary.java @@ -16,6 +16,7 @@ package com.android.inputmethod.latin; +import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; @@ -85,11 +86,19 @@ public abstract class Dictionary { final int sessionId, final float[] inOutLanguageWeight); /** - * Checks if the given word occurs in the dictionary + * Checks if the given word has to be treated as a valid word. Please note that some + * dictionaries have entries that should be treated as invalid words. * @param word the word to search for. The search should be case-insensitive. - * @return true if the word exists, false otherwise + * @return true if the word is valid, false otherwise */ - abstract public boolean isValidWord(final String word); + public boolean isValidWord(final String word) { + return isInDictionary(word); + } + + /** + * Checks if the given word is in the dictionary regardless of it being valid or not. + */ + abstract public boolean isInDictionary(final String word); public int getFrequency(final String word) { return NOT_A_PROBABILITY; @@ -165,7 +174,7 @@ public abstract class Dictionary { } @Override - public boolean isValidWord(String word) { + public boolean isInDictionary(String word) { return false; } } diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java index 53c78fd00..89d61ce2a 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java +++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java @@ -78,9 +78,9 @@ public final class DictionaryCollection extends Dictionary { } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { for (int i = mDictionaries.size() - 1; i >= 0; --i) - if (mDictionaries.get(i).isValidWord(word)) return true; + if (mDictionaries.get(i).isInDictionary(word)) return true; return false; } diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java index e8b0be069..bdf39238a 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java @@ -30,6 +30,7 @@ import com.android.inputmethod.latin.personalization.PersonalizationDictionary; import com.android.inputmethod.latin.personalization.UserHistoryDictionary; import com.android.inputmethod.latin.settings.SpacingAndPunctuations; import com.android.inputmethod.latin.utils.DistracterFilter; +import com.android.inputmethod.latin.utils.DistracterFilterCheckingIsInDictionary; import com.android.inputmethod.latin.utils.ExecutorUtils; import com.android.inputmethod.latin.utils.LanguageModelParam; import com.android.inputmethod.latin.utils.SuggestionResults; @@ -571,16 +572,22 @@ public class DictionaryFacilitator { final PersonalizationDataChunk personalizationDataChunk, final SpacingAndPunctuations spacingAndPunctuations, final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) { + final ExpandableBinaryDictionary personalizationDict = + mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION); + if (personalizationDict == null) { + if (callback != null) { + callback.onFinished(); + } + return; + } final ArrayList<LanguageModelParam> languageModelParams = LanguageModelParam.createLanguageModelParamsFrom( personalizationDataChunk.mTokens, personalizationDataChunk.mTimestampInSeconds, this /* dictionaryFacilitator */, spacingAndPunctuations, - mDistracterFilter); - final ExpandableBinaryDictionary personalizationDict = - mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION); - if (personalizationDict == null || languageModelParams == null - || languageModelParams.isEmpty()) { + new DistracterFilterCheckingIsInDictionary( + mDistracterFilter, personalizationDict)); + if (languageModelParams == null || languageModelParams.isEmpty()) { if (callback != null) { callback.onFinished(); } diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 0a5478c95..4dbfa0bac 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -49,6 +49,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; * queries in native code. This binary dictionary is written to internal storage. */ abstract public class ExpandableBinaryDictionary extends Dictionary { + private static final boolean DEBUG = false; /** Used for Log actions from this class */ private static final String TAG = ExpandableBinaryDictionary.class.getSimpleName(); @@ -324,16 +325,17 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { protected void addNgramEntryLocked(final PrevWordsInfo prevWordsInfo, final String word, final int frequency, final int timestamp) { if (!mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp)) { - Log.e(TAG, "Cannot add n-gram entry."); - Log.e(TAG, " PrevWordsInfo: " + prevWordsInfo); - Log.e(TAG, " word: " + word); + if (DEBUG) { + Log.i(TAG, "Cannot add n-gram entry."); + Log.i(TAG, " PrevWordsInfo: " + prevWordsInfo + ", word: " + word); + } } } /** * Dynamically remove the n-gram entry in the dictionary. */ - public void removeNgramDynamically(final PrevWordsInfo prevWordsInfo, final String word1) { + public void removeNgramDynamically(final PrevWordsInfo prevWordsInfo, final String word) { reloadDictionaryIfRequired(); asyncExecuteTaskWithWriteLock(new Runnable() { @Override @@ -342,7 +344,12 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { return; } runGCIfRequiredLocked(true /* mindsBlockByGC */); - mBinaryDictionary.removeNgramEntry(prevWordsInfo, word1); + if (!mBinaryDictionary.removeNgramEntry(prevWordsInfo, word)) { + if (DEBUG) { + Log.i(TAG, "Cannot remove n-gram entry."); + Log.i(TAG, " PrevWordsInfo: " + prevWordsInfo + ", word: " + word); + } + } } }); } @@ -413,7 +420,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { reloadDictionaryIfRequired(); boolean lockAcquired = false; try { @@ -423,10 +430,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { if (mBinaryDictionary == null) { return false; } - return isValidWordLocked(word); + return isInDictionaryLocked(word); } } catch (final InterruptedException e) { - Log.e(TAG, "Interrupted tryLock() in isValidWord().", e); + Log.e(TAG, "Interrupted tryLock() in isInDictionary().", e); } finally { if (lockAcquired) { mLock.readLock().unlock(); @@ -435,9 +442,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { return false; } - protected boolean isValidWordLocked(final String word) { + protected boolean isInDictionaryLocked(final String word) { if (mBinaryDictionary == null) return false; - return mBinaryDictionary.isValidWord(word); + return mBinaryDictionary.isInDictionary(word); } @Override @@ -589,20 +596,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { }); } - // TODO: Implement BinaryDictionary.isInDictionary(). - @UsedForTesting - public boolean isInUnderlyingBinaryDictionaryForTests(final String word) { - mLock.readLock().lock(); - try { - if (mBinaryDictionary != null && mDictType == Dictionary.TYPE_USER_HISTORY) { - return mBinaryDictionary.isValidWord(word); - } - return false; - } finally { - mLock.readLock().unlock(); - } - } - @UsedForTesting public void waitAllTasksForTests() { final CountDownLatch countDownLatch = new CountDownLatch(1); diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 709f1334f..35966bb71 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -81,7 +81,7 @@ import com.android.inputmethod.latin.utils.ApplicationUtils; import com.android.inputmethod.latin.utils.CapsModeUtils; import com.android.inputmethod.latin.utils.CoordinateUtils; import com.android.inputmethod.latin.utils.DialogUtils; -import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion; +import com.android.inputmethod.latin.utils.DistracterFilterCheckingExactMatches; import com.android.inputmethod.latin.utils.ImportantNoticeUtils; import com.android.inputmethod.latin.utils.IntentUtils; import com.android.inputmethod.latin.utils.JniUtils; @@ -121,7 +121,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private final Settings mSettings; private final DictionaryFacilitator mDictionaryFacilitator = - new DictionaryFacilitator(new DistracterFilterUsingSuggestion(this /* context */)); + new DictionaryFacilitator(new DistracterFilterCheckingExactMatches(this /* context */)); private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */, this /* SuggestionStripViewAccessor */, mDictionaryFacilitator); // We expect to have only one decoder in almost all cases, hence the default capacity of 1. @@ -1374,34 +1374,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen callback.onGetSuggestedWords(SuggestedWords.EMPTY); return; } - // Get the word on which we should search the bigrams. If we are composing a word, it's - // whatever is *before* the half-committed word in the buffer, hence 2; if we aren't, we - // should just skip whitespace if any, so 1. final SettingsValues currentSettings = mSettings.getCurrent(); final int[] additionalFeaturesOptions = currentSettings.mAdditionalFeaturesSettingValues; - - if (DEBUG) { - if (mInputLogic.mWordComposer.isComposingWord() - || mInputLogic.mWordComposer.isBatchMode()) { - final PrevWordsInfo prevWordsInfo - = mInputLogic.mWordComposer.getPrevWordsInfoForSuggestion(); - // TODO: this is for checking consistency with older versions. Remove this when - // we are confident this is stable. - // We're checking the previous word in the text field against the memorized previous - // word. If we are composing a word we should have the second word before the cursor - // memorized, otherwise we should have the first. - final PrevWordsInfo rereadPrevWordsInfo = - mInputLogic.getPrevWordsInfoFromNthPreviousWordForSuggestion( - currentSettings.mSpacingAndPunctuations, - mInputLogic.mWordComposer.isComposingWord() ? 2 : 1); - if (!TextUtils.equals(prevWordsInfo.mPrevWord, rereadPrevWordsInfo.mPrevWord)) { - throw new RuntimeException("Unexpected previous word: " - + prevWordsInfo.mPrevWord + " <> " + rereadPrevWordsInfo.mPrevWord); - } - } - } mInputLogic.mSuggest.getSuggestedWords(mInputLogic.mWordComposer, - mInputLogic.mWordComposer.getPrevWordsInfoForSuggestion(), + mInputLogic.getPrevWordsInfoFromNthPreviousWordForSuggestion( + currentSettings.mSpacingAndPunctuations, + // Get the word on which we should search the bigrams. If we are composing + // a word, it's whatever is *before* the half-committed word in the buffer, + // hence 2; if we aren't, we should just skip whitespace if any, so 1. + mInputLogic.mWordComposer.isComposingWord() ? 2 : 1), keyboard.getProximityInfo(), currentSettings.mBlockPotentiallyOffensive, currentSettings.mAutoCorrectionEnabled, additionalFeaturesOptions, sessionId, sequenceNumber, callback); diff --git a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java index 7989346f4..e59ef7563 100644 --- a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java @@ -66,10 +66,10 @@ public final class ReadOnlyBinaryDictionary extends Dictionary { } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { if (mLock.readLock().tryLock()) { try { - return mBinaryDictionary.isValidWord(word); + return mBinaryDictionary.isInDictionary(word); } finally { mLock.readLock().unlock(); } diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index 9da0f8451..1ba5d5ea6 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -110,7 +110,7 @@ public final class Suggest { wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions, SESSION_TYPING, rawSuggestions); - final boolean isFirstCharCapitalized = wordComposer.isFirstCharCapitalized(); + final boolean isOnlyFirstCharCapitalized = wordComposer.isOnlyFirstCharCapitalized(); // If resumed, then we don't want to upcase everything: resuming on a fully-capitalized // words is rarely done to switch to another fully-capitalized word, but usually to a // normal, non-capitalized suggestion. @@ -122,7 +122,7 @@ public final class Suggest { } else { final SuggestedWordInfo firstSuggestedWordInfo = getTransformedSuggestedWordInfo( suggestionResults.first(), suggestionResults.mLocale, isAllUpperCase, - isFirstCharCapitalized, trailingSingleQuotesCount); + isOnlyFirstCharCapitalized, trailingSingleQuotesCount); firstSuggestion = firstSuggestedWordInfo.mWord; if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) { whitelistedWord = null; @@ -142,7 +142,7 @@ public final class Suggest { final boolean allowsToBeAutoCorrected = (null != whitelistedWord && !whitelistedWord.equals(typedWord)) || (consideredWord.length() > 1 && !mDictionaryFacilitator.isValidWord( - consideredWord, wordComposer.isFirstCharCapitalized()) + consideredWord, isOnlyFirstCharCapitalized) && !typedWord.equals(firstSuggestion)); final boolean hasAutoCorrection; @@ -173,12 +173,12 @@ public final class Suggest { final ArrayList<SuggestedWordInfo> suggestionsContainer = new ArrayList<>(suggestionResults); final int suggestionsCount = suggestionsContainer.size(); - if (isFirstCharCapitalized || isAllUpperCase || 0 != trailingSingleQuotesCount) { + if (isOnlyFirstCharCapitalized || isAllUpperCase || 0 != trailingSingleQuotesCount) { for (int i = 0; i < suggestionsCount; ++i) { final SuggestedWordInfo wordInfo = suggestionsContainer.get(i); final SuggestedWordInfo transformedWordInfo = getTransformedSuggestedWordInfo( - wordInfo, suggestionResults.mLocale, isAllUpperCase, isFirstCharCapitalized, - trailingSingleQuotesCount); + wordInfo, suggestionResults.mLocale, isAllUpperCase, + isOnlyFirstCharCapitalized, trailingSingleQuotesCount); suggestionsContainer.set(i, transformedWordInfo); } } @@ -292,11 +292,11 @@ public final class Suggest { /* package for test */ static SuggestedWordInfo getTransformedSuggestedWordInfo( final SuggestedWordInfo wordInfo, final Locale locale, final boolean isAllUpperCase, - final boolean isFirstCharCapitalized, final int trailingSingleQuotesCount) { + final boolean isOnlyFirstCharCapitalized, final int trailingSingleQuotesCount) { final StringBuilder sb = new StringBuilder(wordInfo.mWord.length()); if (isAllUpperCase) { sb.append(wordInfo.mWord.toUpperCase(locale)); - } else if (isFirstCharCapitalized) { + } else if (isOnlyFirstCharCapitalized) { sb.append(StringUtils.capitalizeFirstCodePoint(wordInfo.mWord, locale)); } else { sb.append(wordInfo.mWord); diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index 7a50d1a9d..6ce1f85c5 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -45,9 +45,6 @@ public final class WordComposer { // The list of events that served to compose this string. private final ArrayList<Event> mEvents; private final InputPointers mInputPointers = new InputPointers(MAX_WORD_LENGTH); - // The information of previous words (before the composing word). Must not be null. Used as - // context for suggestions. - private PrevWordsInfo mPrevWordsInfo; private String mAutoCorrection; private boolean mIsResumed; private boolean mIsBatchMode; @@ -72,9 +69,9 @@ public final class WordComposer { private int mCursorPositionWithinWord; /** - * Whether the user chose to capitalize the first char of the word. + * Whether the composing word has the only first char capitalized. */ - private boolean mIsFirstCharCapitalized; + private boolean mIsOnlyFirstCharCapitalized; public WordComposer() { mCombinerChain = new CombinerChain(""); @@ -84,7 +81,6 @@ public final class WordComposer { mIsBatchMode = false; mCursorPositionWithinWord = 0; mRejectedBatchModeSuggestion = null; - mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO; refreshTypedWordCache(); } @@ -111,12 +107,11 @@ public final class WordComposer { mAutoCorrection = null; mCapsCount = 0; mDigitsCount = 0; - mIsFirstCharCapitalized = false; + mIsOnlyFirstCharCapitalized = false; mIsResumed = false; mIsBatchMode = false; mCursorPositionWithinWord = 0; mRejectedBatchModeSuggestion = null; - mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO; refreshTypedWordCache(); } @@ -178,12 +173,6 @@ public final class WordComposer { return mInputPointers; } - private static boolean isFirstCharCapitalized(final int index, final int codePoint, - final boolean previous) { - if (index == 0) return Character.isUpperCase(codePoint); - return previous && !Character.isUpperCase(codePoint); - } - /** * Process an input event. * @@ -203,7 +192,7 @@ public final class WordComposer { mCursorPositionWithinWord = mCodePointSize; // We may have deleted the last one. if (0 == mCodePointSize) { - mIsFirstCharCapitalized = false; + mIsOnlyFirstCharCapitalized = false; } if (Constants.CODE_DELETE != event.mKeyCode) { if (newIndex < MAX_WORD_LENGTH) { @@ -215,8 +204,12 @@ public final class WordComposer { mInputPointers.addPointerAt(newIndex, keyX, keyY, 0, 0); } } - mIsFirstCharCapitalized = isFirstCharCapitalized( - newIndex, primaryCode, mIsFirstCharCapitalized); + if (0 == newIndex) { + mIsOnlyFirstCharCapitalized = Character.isUpperCase(primaryCode); + } else { + mIsOnlyFirstCharCapitalized = mIsOnlyFirstCharCapitalized + && !Character.isUpperCase(primaryCode); + } if (Character.isUpperCase(primaryCode)) mCapsCount++; if (Character.isDigit(primaryCode)) mDigitsCount++; } @@ -296,10 +289,8 @@ public final class WordComposer { * This will register NOT_A_COORDINATE for X and Ys, and use the passed keyboard for proximity. * @param codePoints the code points to set as the composing word. * @param coordinates the x, y coordinates of the key in the CoordinateUtils format - * @param prevWordsInfo the information of previous words, to use as context for suggestions */ - public void setComposingWord(final int[] codePoints, final int[] coordinates, - final PrevWordsInfo prevWordsInfo) { + public void setComposingWord(final int[] codePoints, final int[] coordinates) { reset(); final int length = codePoints.length; for (int i = 0; i < length; ++i) { @@ -308,7 +299,6 @@ public final class WordComposer { CoordinateUtils.yFromArray(coordinates, i))); } mIsResumed = true; - mPrevWordsInfo = prevWordsInfo; } /** @@ -319,16 +309,13 @@ public final class WordComposer { return mTypedWordCache.toString(); } - public PrevWordsInfo getPrevWordsInfoForSuggestion() { - return mPrevWordsInfo; - } - /** - * Whether or not the user typed a capital letter as the first letter in the word + * Whether or not the user typed a capital letter as the first letter in the word, and no + * other letter is capitalized * @return capitalization preference */ - public boolean isFirstCharCapitalized() { - return mIsFirstCharCapitalized; + public boolean isOnlyFirstCharCapitalized() { + return mIsOnlyFirstCharCapitalized; } /** @@ -364,7 +351,7 @@ public final class WordComposer { } /** - * Saves the caps mode and the previous word at the start of composing. + * Saves the caps mode at the start of composing. * * WordComposer needs to know about the caps mode for several reasons. The first is, we need * to know after the fact what the reason was, to register the correct form into the user @@ -373,12 +360,9 @@ public final class WordComposer { * Also, batch input needs to know about the current caps mode to display correctly * capitalized suggestions. * @param mode the mode at the time of start - * @param prevWordsInfo the information of previous words */ - public void setCapitalizedModeAndPreviousWordAtStartComposingTime(final int mode, - final PrevWordsInfo prevWordsInfo) { + public void setCapitalizedModeAtStartComposingTime(final int mode) { mCapitalizedMode = mode; - mPrevWordsInfo = prevWordsInfo; } /** @@ -429,11 +413,10 @@ public final class WordComposer { mCapsCount = 0; mDigitsCount = 0; mIsBatchMode = false; - mPrevWordsInfo = new PrevWordsInfo(committedWord.toString()); mCombinerChain.reset(); mEvents.clear(); mCodePointSize = 0; - mIsFirstCharCapitalized = false; + mIsOnlyFirstCharCapitalized = false; mCapitalizedMode = CAPS_MODE_OFF; refreshTypedWordCache(); mAutoCorrection = null; @@ -443,15 +426,7 @@ public final class WordComposer { return lastComposedWord; } - // Call this when the recorded previous word should be discarded. This is typically called - // when the user inputs a separator that's not whitespace (including the case of the - // double-space-to-period feature). - public void discardPreviousWordForSuggestion() { - mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO; - } - - public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord, - final PrevWordsInfo prevWordsInfo) { + public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord) { mEvents.clear(); Collections.copy(mEvents, lastComposedWord.mEvents); mInputPointers.set(lastComposedWord.mInputPointers); @@ -462,7 +437,6 @@ public final class WordComposer { mCursorPositionWithinWord = mCodePointSize; mRejectedBatchModeSuggestion = null; mIsResumed = true; - mPrevWordsInfo = prevWordsInfo; } public boolean isBatchMode() { diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java index c90dc90ce..24cc1ef0d 100644 --- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java +++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java @@ -544,11 +544,8 @@ public final class InputLogic { } } mConnection.endBatchEdit(); - mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime( - getActualCapsMode(settingsValues, keyboardSwitcher.getKeyboardShiftMode()), - // Prev word is 1st word before cursor - getPrevWordsInfoFromNthPreviousWordForSuggestion( - settingsValues.mSpacingAndPunctuations, 1 /* nthPreviousWord */)); + mWordComposer.setCapitalizedModeAtStartComposingTime( + getActualCapsMode(settingsValues, keyboardSwitcher.getKeyboardShiftMode())); } /* The sequence number member is only used in onUpdateBatchInput. It is increased each time @@ -584,10 +581,8 @@ public final class InputLogic { mSpaceState = SpaceState.PHANTOM; keyboardSwitcher.requestUpdatingShiftState( getCurrentAutoCapsState(settingsValues), getCurrentRecapitalizeState()); - mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime( - getActualCapsMode(settingsValues, - keyboardSwitcher.getKeyboardShiftMode()), - new PrevWordsInfo(commitParts[0])); + mWordComposer.setCapitalizedModeAtStartComposingTime(getActualCapsMode( + settingsValues, keyboardSwitcher.getKeyboardShiftMode())); ++mAutoCommitSequenceNumber; } } @@ -724,15 +719,7 @@ public final class InputLogic { mWordComposer.processEvent(inputTransaction.mEvent); // If it's the first letter, make note of auto-caps state if (mWordComposer.isSingleLetter()) { - // We pass 2 to getPreviousWordForSuggestion when the previous code point is a word - // connector. Otherwise, we pass 1 because we were not composing a word yet, so the - // word we want is the 1st word before the cursor. - mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime( - inputTransaction.mShiftState, - getPrevWordsInfoFromNthPreviousWordForSuggestion( - settingsValues.mSpacingAndPunctuations, - settingsValues.mSpacingAndPunctuations.isWordConnector( - mConnection.getCodePointBeforeCursor()) ? 2 : 1)); + mWordComposer.setCapitalizedModeAtStartComposingTime(inputTransaction.mShiftState); } mConnection.setComposingText(getTextWithUnderline( mWordComposer.getTypedWord()), 1); @@ -924,10 +911,8 @@ public final class InputLogic { // No need to reset mSpaceState, it has already be done (that's why we // receive it as a parameter) inputTransaction.setRequiresUpdateSuggestions(); - mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime( - WordComposer.CAPS_MODE_OFF, - getPrevWordsInfoFromNthPreviousWordForSuggestion( - inputTransaction.mSettingsValues.mSpacingAndPunctuations, 1)); + mWordComposer.setCapitalizedModeAtStartComposingTime( + WordComposer.CAPS_MODE_OFF); return; } } else if (SpaceState.SWAP_PUNCTUATION == inputTransaction.mSpaceState) { @@ -1107,7 +1092,6 @@ public final class InputLogic { final String textToInsert = inputTransaction.mSettingsValues.mSpacingAndPunctuations .mSentenceSeparatorAndSpace; mConnection.commitText(textToInsert, 1); - mWordComposer.discardPreviousWordForSuggestion(); return true; } return false; @@ -1267,10 +1251,7 @@ public final class InputLogic { final int expectedCursorPosition = mConnection.getExpectedSelectionStart(); if (!mConnection.isCursorTouchingWord(settingsValues.mSpacingAndPunctuations)) { // Show predictions. - mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime( - WordComposer.CAPS_MODE_OFF, - getPrevWordsInfoFromNthPreviousWordForSuggestion( - settingsValues.mSpacingAndPunctuations, 1)); + mWordComposer.setCapitalizedModeAtStartComposingTime(WordComposer.CAPS_MODE_OFF); mLatinIME.mHandler.postUpdateSuggestionStrip(); return; } @@ -1322,7 +1303,7 @@ public final class InputLogic { settingsValues.mSpacingAndPunctuations, 0 == numberOfCharsInWordBeforeCursor ? 1 : 2); mWordComposer.setComposingWord(codePoints, - mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), prevWordsInfo); + mLatinIME.getCoordinatesForCurrentKeyboard(codePoints)); mWordComposer.setCursorPositionWithinWord( typedWord.codePointCount(0, numberOfCharsInWordBeforeCursor)); mConnection.setComposingRegion(expectedCursorPosition - numberOfCharsInWordBeforeCursor, @@ -1450,7 +1431,7 @@ public final class InputLogic { // with the typed word, so we need to resume suggestions right away. final int[] codePoints = StringUtils.toCodePointArray(stringToCommit); mWordComposer.setComposingWord(codePoints, - mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), prevWordsInfo); + mLatinIME.getCoordinatesForCurrentKeyboard(codePoints)); mConnection.setComposingText(textToCommit, 1); } // Don't restart suggestion yet. We'll restart if the user deletes the separator. @@ -1897,21 +1878,6 @@ public final class InputLogic { // strings. mLastComposedWord = mWordComposer.commitWord(commitType, chosenWordWithSuggestions, separatorString, prevWordsInfo); - final boolean shouldDiscardPreviousWordForSuggestion; - if (0 == StringUtils.codePointCount(separatorString)) { - // Separator is 0-length, we can keep the previous word for suggestion. Either this - // was a manual pick or the language has no spaces in which case we want to keep the - // previous word, or it was the keyboard closing or the cursor moving in which case it - // will be reset anyway. - shouldDiscardPreviousWordForSuggestion = false; - } else { - // Otherwise, we discard if the separator contains any non-whitespace. - shouldDiscardPreviousWordForSuggestion = - !StringUtils.containsOnlyWhitespace(separatorString); - } - if (shouldDiscardPreviousWordForSuggestion) { - mWordComposer.discardPreviousWordForSuggestion(); - } } /** diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java index be658ceff..1ba7b366f 100644 --- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java +++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java @@ -80,4 +80,10 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB /* package */ void runGCIfRequired() { runGCIfRequired(false /* mindsBlockByGC */); } + + @Override + public boolean isValidWord(final String word) { + // Strings out of this dictionary should not be considered existing words. + return false; + } } diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java index 1423fceff..19fa29e5f 100644 --- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java @@ -38,10 +38,4 @@ public class PersonalizationDictionary extends DecayingExpandableBinaryDictionar final Locale locale, final File dictFile) { return PersonalizationHelper.getPersonalizationDictionary(context, locale); } - - @Override - public boolean isValidWord(final String word) { - // Strings out of this dictionary should not be considered existing words. - return false; - } } diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java index 67ad54fb7..ea1035612 100644 --- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java +++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java @@ -47,12 +47,6 @@ public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBas return PersonalizationHelper.getUserHistoryDictionary(context, locale); } - @Override - public boolean isValidWord(final String word) { - // Strings out of this dictionary should not be considered existing words. - return false; - } - /** * Add a word to the user history dictionary. * diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java index cc80e6f21..55274cfe2 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java @@ -16,6 +16,7 @@ package com.android.inputmethod.latin.spellcheck; +import android.content.res.Resources; import android.os.Binder; import android.text.TextUtils; import android.util.Log; @@ -26,14 +27,18 @@ import android.view.textservice.TextInfo; import com.android.inputmethod.latin.PrevWordsInfo; import java.util.ArrayList; +import java.util.Locale; public final class AndroidSpellCheckerSession extends AndroidWordLevelSpellCheckerSession { private static final String TAG = AndroidSpellCheckerSession.class.getSimpleName(); private static final boolean DBG = false; private final static String[] EMPTY_STRING_ARRAY = new String[0]; + private final Resources mResources; + private SentenceLevelAdapter mSentenceLevelAdapter; public AndroidSpellCheckerSession(AndroidSpellCheckerService service) { super(service); + mResources = service.getResources(); } private SentenceSuggestionsInfo fixWronglyInvalidatedWordWithSingleQuote(TextInfo ti, @@ -115,8 +120,7 @@ public final class AndroidSpellCheckerSession extends AndroidWordLevelSpellCheck @Override public SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(TextInfo[] textInfos, int suggestionsLimit) { - final SentenceSuggestionsInfo[] retval = - super.onGetSentenceSuggestionsMultiple(textInfos, suggestionsLimit); + final SentenceSuggestionsInfo[] retval = splitAndSuggest(textInfos, suggestionsLimit); if (retval == null || retval.length != textInfos.length) { return retval; } @@ -130,6 +134,58 @@ public final class AndroidSpellCheckerSession extends AndroidWordLevelSpellCheck return retval; } + /** + * Get sentence suggestions for specified texts in an array of TextInfo. This is taken from + * SpellCheckerService#onGetSentenceSuggestionsMultiple that we can't use because it's + * using private variables. + * The default implementation splits the input text to words and returns + * {@link SentenceSuggestionsInfo} which contains suggestions for each word. + * This function will run on the incoming IPC thread. + * So, this is not called on the main thread, + * but will be called in series on another thread. + * @param textInfos an array of the text metadata + * @param suggestionsLimit the maximum number of suggestions to be returned + * @return an array of {@link SentenceSuggestionsInfo} returned by + * {@link SpellCheckerService.Session#onGetSuggestions(TextInfo, int)} + */ + private SentenceSuggestionsInfo[] splitAndSuggest(TextInfo[] textInfos, int suggestionsLimit) { + if (textInfos == null || textInfos.length == 0) { + return SentenceLevelAdapter.EMPTY_SENTENCE_SUGGESTIONS_INFOS; + } + SentenceLevelAdapter sentenceLevelAdapter; + synchronized(this) { + sentenceLevelAdapter = mSentenceLevelAdapter; + if (sentenceLevelAdapter == null) { + final String localeStr = getLocale(); + if (!TextUtils.isEmpty(localeStr)) { + sentenceLevelAdapter = new SentenceLevelAdapter(mResources, + new Locale(localeStr)); + mSentenceLevelAdapter = sentenceLevelAdapter; + } + } + } + if (sentenceLevelAdapter == null) { + return SentenceLevelAdapter.EMPTY_SENTENCE_SUGGESTIONS_INFOS; + } + final int infosSize = textInfos.length; + final SentenceSuggestionsInfo[] retval = new SentenceSuggestionsInfo[infosSize]; + for (int i = 0; i < infosSize; ++i) { + final SentenceLevelAdapter.SentenceTextInfoParams textInfoParams = + sentenceLevelAdapter.getSplitWords(textInfos[i]); + final ArrayList<SentenceLevelAdapter.SentenceWordItem> mItems = + textInfoParams.mItems; + final int itemsSize = mItems.size(); + final TextInfo[] splitTextInfos = new TextInfo[itemsSize]; + for (int j = 0; j < itemsSize; ++j) { + splitTextInfos[j] = mItems.get(j).mTextInfo; + } + retval[i] = SentenceLevelAdapter.reconstructSuggestions( + textInfoParams, onGetSuggestionsMultiple( + splitTextInfos, suggestionsLimit, true)); + } + return retval; + } + @Override public SuggestionsInfo[] onGetSuggestionsMultiple(TextInfo[] textInfos, int suggestionsLimit, boolean sequentialWords) { diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java index d7953e6e7..0032fcb88 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java @@ -323,7 +323,7 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session { } else { coordinates = dictInfo.mKeyboard.getCoordinates(codePoints); } - composer.setComposingWord(codePoints, coordinates, null /* previousWord */); + composer.setComposingWord(codePoints, coordinates); // TODO: make a spell checker option to block offensive words or not final ArrayList<SuggestedWordInfo> suggestions = dictInfo.mDictionary.getSuggestions(composer, prevWordsInfo, diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java index 1331d52d5..cc52a3e0f 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java @@ -58,7 +58,7 @@ public final class DictionaryPool extends LinkedBlockingQueue<DictAndKeyboard> { return noSuggestions; } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { // This is never called. However if for some strange reason it ever gets // called, returning true is less destructive (it will not underline the // word in red). diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SentenceLevelAdapter.java b/java/src/com/android/inputmethod/latin/spellcheck/SentenceLevelAdapter.java new file mode 100644 index 000000000..13352f39e --- /dev/null +++ b/java/src/com/android/inputmethod/latin/spellcheck/SentenceLevelAdapter.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.latin.spellcheck; + +import android.content.res.Resources; +import android.view.textservice.SentenceSuggestionsInfo; +import android.view.textservice.SuggestionsInfo; +import android.view.textservice.TextInfo; + +import com.android.inputmethod.latin.Constants; +import com.android.inputmethod.latin.settings.SpacingAndPunctuations; +import com.android.inputmethod.latin.utils.RunInLocale; + +import java.util.ArrayList; +import java.util.Locale; + +/** + * This code is mostly lifted directly from android.service.textservice.SpellCheckerService in + * the framework; maybe that should be protected instead, so that implementers don't have to + * rewrite everything for any small change. + */ +public class SentenceLevelAdapter { + public static final SentenceSuggestionsInfo[] EMPTY_SENTENCE_SUGGESTIONS_INFOS = + new SentenceSuggestionsInfo[] {}; + private static final SuggestionsInfo EMPTY_SUGGESTIONS_INFO = new SuggestionsInfo(0, null); + /** + * Container for split TextInfo parameters + */ + public static class SentenceWordItem { + public final TextInfo mTextInfo; + public final int mStart; + public final int mLength; + public SentenceWordItem(TextInfo ti, int start, int end) { + mTextInfo = ti; + mStart = start; + mLength = end - start; + } + } + + /** + * Container for originally queried TextInfo and parameters + */ + public static class SentenceTextInfoParams { + final TextInfo mOriginalTextInfo; + final ArrayList<SentenceWordItem> mItems; + final int mSize; + public SentenceTextInfoParams(TextInfo ti, ArrayList<SentenceWordItem> items) { + mOriginalTextInfo = ti; + mItems = items; + mSize = items.size(); + } + } + + private static class WordIterator { + private final SpacingAndPunctuations mSpacingAndPunctuations; + public WordIterator(final Resources res, final Locale locale) { + final RunInLocale<SpacingAndPunctuations> job + = new RunInLocale<SpacingAndPunctuations>() { + @Override + protected SpacingAndPunctuations job(final Resources res) { + return new SpacingAndPunctuations(res); + } + }; + mSpacingAndPunctuations = job.runInLocale(res, locale); + } + + public int getEndOfWord(final CharSequence sequence, int index) { + final int length = sequence.length(); + index = index < 0 ? 0 : Character.offsetByCodePoints(sequence, index, 1); + while (index < length) { + final int codePoint = Character.codePointAt(sequence, index); + if (mSpacingAndPunctuations.isWordSeparator(codePoint)) { + // If it's a period, we want to stop here only if it's followed by another + // word separator. In all other cases we stop here. + if (Constants.CODE_PERIOD == codePoint) { + final int indexOfNextCodePoint = + index + Character.charCount(Constants.CODE_PERIOD); + if (indexOfNextCodePoint < length + && mSpacingAndPunctuations.isWordSeparator( + Character.codePointAt(sequence, indexOfNextCodePoint))) { + return index; + } + } else { + return index; + } + } + index += Character.charCount(codePoint); + } + return index; + } + + public int getBeginningOfNextWord(final CharSequence sequence, int index) { + final int length = sequence.length(); + if (index >= length) { + return -1; + } + index = index < 0 ? 0 : Character.offsetByCodePoints(sequence, index, 1); + while (index < length) { + final int codePoint = Character.codePointAt(sequence, index); + if (!mSpacingAndPunctuations.isWordSeparator(codePoint)) { + return index; + } + index += Character.charCount(codePoint); + } + return -1; + } + } + + private final WordIterator mWordIterator; + public SentenceLevelAdapter(final Resources res, final Locale locale) { + mWordIterator = new WordIterator(res, locale); + } + + public SentenceTextInfoParams getSplitWords(TextInfo originalTextInfo) { + final WordIterator wordIterator = mWordIterator; + final CharSequence originalText = originalTextInfo.getText(); + final int cookie = originalTextInfo.getCookie(); + final int start = -1; + final int end = originalText.length(); + final ArrayList<SentenceWordItem> wordItems = new ArrayList<SentenceWordItem>(); + int wordStart = wordIterator.getBeginningOfNextWord(originalText, start); + int wordEnd = wordIterator.getEndOfWord(originalText, wordStart); + while (wordStart <= end && wordEnd != -1 && wordStart != -1) { + if (wordEnd >= start && wordEnd > wordStart) { + final String query = originalText.subSequence(wordStart, wordEnd).toString(); + final TextInfo ti = new TextInfo(query, cookie, query.hashCode()); + wordItems.add(new SentenceWordItem(ti, wordStart, wordEnd)); + } + wordStart = wordIterator.getBeginningOfNextWord(originalText, wordEnd); + if (wordStart == -1) { + break; + } + wordEnd = wordIterator.getEndOfWord(originalText, wordStart); + } + return new SentenceTextInfoParams(originalTextInfo, wordItems); + } + + public static SentenceSuggestionsInfo reconstructSuggestions( + SentenceTextInfoParams originalTextInfoParams, SuggestionsInfo[] results) { + if (results == null || results.length == 0) { + return null; + } + if (originalTextInfoParams == null) { + return null; + } + final int originalCookie = originalTextInfoParams.mOriginalTextInfo.getCookie(); + final int originalSequence = + originalTextInfoParams.mOriginalTextInfo.getSequence(); + + final int querySize = originalTextInfoParams.mSize; + final int[] offsets = new int[querySize]; + final int[] lengths = new int[querySize]; + final SuggestionsInfo[] reconstructedSuggestions = new SuggestionsInfo[querySize]; + for (int i = 0; i < querySize; ++i) { + final SentenceWordItem item = originalTextInfoParams.mItems.get(i); + SuggestionsInfo result = null; + for (int j = 0; j < results.length; ++j) { + final SuggestionsInfo cur = results[j]; + if (cur != null && cur.getSequence() == item.mTextInfo.getSequence()) { + result = cur; + result.setCookieAndSequence(originalCookie, originalSequence); + break; + } + } + offsets[i] = item.mStart; + lengths[i] = item.mLength; + reconstructedSuggestions[i] = result != null ? result : EMPTY_SUGGESTIONS_INFO; + } + return new SentenceSuggestionsInfo(reconstructedSuggestions, offsets, lengths); + } +} diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java index 75075664f..a6437bac3 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedContactsBinaryDictionary.java @@ -47,9 +47,9 @@ public final class SynchronouslyLoadedContactsBinaryDictionary extends ContactsB } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { synchronized (mLock) { - return super.isValidWord(word); + return super.isInDictionary(word); } } } diff --git a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java index f2d981a9d..8c9d5d681 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/SynchronouslyLoadedUserBinaryDictionary.java @@ -52,9 +52,9 @@ public final class SynchronouslyLoadedUserBinaryDictionary extends UserBinaryDic } @Override - public boolean isValidWord(final String word) { + public boolean isInDictionary(final String word) { synchronized (mLock) { - return super.isValidWord(word); + return super.isInDictionary(word); } } } diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java index 79a735ad6..528d500d2 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java @@ -56,10 +56,18 @@ public final class MoreSuggestionsView extends MoreKeysKeyboardView { super.setKeyboard(keyboard); // With accessibility mode off, {@link #mAccessibilityDelegate} is set to null at the // above {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call. + // With accessibility mode on, {@link #mAccessibilityDelegate} is set to a + // {@link MoreKeysKeyboardAccessibilityDelegate} object at the above + // {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call. And the object has to be + // overwritten by a {@link MoreSuggestionsAccessibilityDelegate} object here. if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) { - mAccessibilityDelegate = new MoreSuggestionsAccessibilityDelegate(this, mKeyDetector); - mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_suggestions); - mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_suggestions); + if (!(mAccessibilityDelegate instanceof MoreSuggestionsAccessibilityDelegate)) { + mAccessibilityDelegate = new MoreSuggestionsAccessibilityDelegate( + this, mKeyDetector); + mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_suggestions); + mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_suggestions); + } + mAccessibilityDelegate.setKeyboard(keyboard); } } diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java index 810bda758..19b48f081 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java @@ -379,10 +379,9 @@ final class SuggestionStripLayoutHelper { } else { wordView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } - - // Disable this suggestion if the suggestion is null or empty. - // TODO: Fix disabled {@link TextView}'s content description. - wordView.setEnabled(!TextUtils.isEmpty(word)); + // {@link StyleSpan} in a content description may cause an issue of TTS/TalkBack. + // Use a simple {@link String} to avoid the issue. + wordView.setContentDescription(TextUtils.isEmpty(word) ? null : word.toString()); final CharSequence text = getEllipsizedText(word, width, wordView.getPaint()); final float scaleX = getTextScaleX(word, width, wordView.getPaint()); wordView.setText(text); // TextView.setText() resets text scale x to 1.0. @@ -461,14 +460,15 @@ final class SuggestionStripLayoutHelper { } final TextView wordView = mWordViews.get(positionInStrip); - wordView.setEnabled(true); - wordView.setTextColor(mColorAutoCorrect); + final String punctuation = punctuationSuggestions.getLabel(positionInStrip); // {@link TextView#getTag()} is used to get the index in suggestedWords at // {@link SuggestionStripView#onClick(View)}. wordView.setTag(positionInStrip); - wordView.setText(punctuationSuggestions.getLabel(positionInStrip)); + wordView.setText(punctuation); + wordView.setContentDescription(punctuation); wordView.setTextScaleX(1.0f); wordView.setCompoundDrawables(null, null, null, null); + wordView.setTextColor(mColorAutoCorrect); stripView.addView(wordView); setLayoutWeight(wordView, 1.0f, mSuggestionsStripHeight); } diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java index 97241498a..3be933ff7 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java @@ -163,7 +163,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick word.setOnLongClickListener(this); mWordViews.add(word); final View divider = inflater.inflate(R.layout.suggestion_divider, null); - divider.setOnClickListener(this); mDividerViews.add(divider); final TextView info = new TextView(context, null, R.attr.suggestionWordStyle); info.setTextColor(Color.WHITE); @@ -429,6 +428,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick @Override public void onClick(final View view) { + AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback( + Constants.CODE_UNSPECIFIED, this); if (view == mImportantNoticeStrip) { mListener.showImportantNoticeContents(); return; diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilterCheckingExactMatches.java index 8c3844ed8..0ee6236b1 100644 --- a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java +++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilterCheckingExactMatches.java @@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit; import android.content.Context; import android.util.Log; +import android.util.LruCache; import android.view.inputmethod.InputMethodSubtype; import com.android.inputmethod.latin.DictionaryFacilitator; @@ -31,15 +32,16 @@ import com.android.inputmethod.latin.PrevWordsInfo; * This class is used to prevent distracters being added to personalization * or user history dictionaries */ -// TODO: Rename. -public class DistracterFilterUsingSuggestion implements DistracterFilter { - private static final String TAG = DistracterFilterUsingSuggestion.class.getSimpleName(); +public class DistracterFilterCheckingExactMatches implements DistracterFilter { + private static final String TAG = DistracterFilterCheckingExactMatches.class.getSimpleName(); private static final boolean DEBUG = false; private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120; + private static final int MAX_DISTRACTERS_CACHE_SIZE = 512; private final Context mContext; private final DictionaryFacilitator mDictionaryFacilitator; + private final LruCache<String, Boolean> mDistractersCache; private final Object mLock = new Object(); /** @@ -47,9 +49,10 @@ public class DistracterFilterUsingSuggestion implements DistracterFilter { * * @param context the context. */ - public DistracterFilterUsingSuggestion(final Context context) { + public DistracterFilterCheckingExactMatches(final Context context) { mContext = context; mDictionaryFacilitator = new DictionaryFacilitator(); + mDistractersCache = new LruCache<>(MAX_DISTRACTERS_CACHE_SIZE); } @Override @@ -88,6 +91,7 @@ public class DistracterFilterUsingSuggestion implements DistracterFilter { synchronized (mLock) { // Reset dictionaries for the locale. try { + mDistractersCache.evictAll(); loadDictionariesForLocale(locale); } catch (final InterruptedException e) { Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter", @@ -96,6 +100,15 @@ public class DistracterFilterUsingSuggestion implements DistracterFilter { } } } + + final Boolean isCachedDistracter = mDistractersCache.get(testedWord); + if (isCachedDistracter != null && isCachedDistracter) { + if (DEBUG) { + Log.d(TAG, "testedWord: " + testedWord); + Log.d(TAG, "isDistracter: true (cache hit)"); + } + return true; + } // The tested word is a distracter when there is a word that is exact matched to the tested // word and its probability is higher than the tested word's probability. final int perfectMatchFreq = mDictionaryFacilitator.getFrequency(testedWord); @@ -107,6 +120,10 @@ public class DistracterFilterUsingSuggestion implements DistracterFilter { Log.d(TAG, "exactMatchFreq: " + exactMatchFreq); Log.d(TAG, "isDistracter: " + isDistracter); } + if (isDistracter) { + // Add the word to the cache. + mDistractersCache.put(testedWord, Boolean.TRUE); + } return isDistracter; } } diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilterCheckingIsInDictionary.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilterCheckingIsInDictionary.java new file mode 100644 index 000000000..4ad4ba784 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilterCheckingIsInDictionary.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.latin.utils; + +import java.util.List; +import java.util.Locale; + +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.latin.Dictionary; +import com.android.inputmethod.latin.PrevWordsInfo; + +public class DistracterFilterCheckingIsInDictionary implements DistracterFilter { + private final DistracterFilter mDistracterFilter; + private final Dictionary mDictionary; + + public DistracterFilterCheckingIsInDictionary(final DistracterFilter distracterFilter, + final Dictionary dictionary) { + mDistracterFilter = distracterFilter; + mDictionary = dictionary; + } + + @Override + public boolean isDistracterToWordsInDictionaries(PrevWordsInfo prevWordsInfo, + String testedWord, Locale locale) { + if (mDictionary.isInDictionary(testedWord)) { + // This filter treats entries that are already in the dictionary as non-distracters + // because they have passed the filtering in the past. + return false; + } else { + return mDistracterFilter.isDistracterToWordsInDictionaries( + prevWordsInfo, testedWord, locale); + } + } + + @Override + public void updateEnabledSubtypes(List<InputMethodSubtype> enabledSubtypes) { + // Do nothing. + } + + @Override + public void close() { + // Do nothing. + } +} diff --git a/java/src/com/android/inputmethod/latin/utils/StringUtils.java b/java/src/com/android/inputmethod/latin/utils/StringUtils.java index 4ed0f0a94..e4237a7f2 100644 --- a/java/src/com/android/inputmethod/latin/utils/StringUtils.java +++ b/java/src/com/android/inputmethod/latin/utils/StringUtils.java @@ -315,24 +315,6 @@ public final class StringUtils { return true; } - /** - * Returns true if all code points in text are whitespace, false otherwise. Empty is true. - */ - // Interestingly enough, U+00A0 NO-BREAK SPACE and U+200B ZERO-WIDTH SPACE are not considered - // whitespace, while EN SPACE, EM SPACE and IDEOGRAPHIC SPACES are. - public static boolean containsOnlyWhitespace(final String text) { - final int length = text.length(); - int i = 0; - while (i < length) { - final int codePoint = text.codePointAt(i); - if (!Character.isWhitespace(codePoint)) { - return false; - } - i += Character.charCount(codePoint); - } - return true; - } - public static boolean isIdenticalAfterCapitalizeEachWord(final String text, final int[] sortedSeparators) { boolean needsCapsNext = true; |