aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/layout/dictionary_line.xml12
-rw-r--r--java/res/layout/key_preview.xml27
-rw-r--r--java/res/raw/main_es.dictbin1376670 -> 1376678 bytes
-rw-r--r--java/res/values-af/strings-action-keys.xml3
-rw-r--r--java/res/values-af/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-af/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-af/strings.xml3
-rw-r--r--java/res/values-am/strings-action-keys.xml3
-rw-r--r--java/res/values-am/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-am/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-am/strings.xml3
-rw-r--r--java/res/values-ca/strings-action-keys.xml3
-rw-r--r--java/res/values-ca/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-ca/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-ca/strings.xml3
-rw-r--r--java/res/values-cs/strings.xml2
-rw-r--r--java/res/values-en-rGB/strings-action-keys.xml3
-rw-r--r--java/res/values-en-rGB/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-en-rGB/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-en-rGB/strings.xml3
-rw-r--r--java/res/values-en-rIN/strings-action-keys.xml3
-rw-r--r--java/res/values-en-rIN/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-en-rIN/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-en-rIN/strings.xml3
-rw-r--r--java/res/values-fa/strings-action-keys.xml3
-rw-r--r--java/res/values-fa/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-fa/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-fa/strings.xml3
-rw-r--r--java/res/values-in/strings-action-keys.xml3
-rw-r--r--java/res/values-in/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-in/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-in/strings.xml3
-rw-r--r--java/res/values-iw/strings-action-keys.xml3
-rw-r--r--java/res/values-iw/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-iw/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-iw/strings.xml3
-rw-r--r--java/res/values-ka-rGE/strings-action-keys.xml3
-rw-r--r--java/res/values-ka-rGE/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-ka-rGE/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-ka-rGE/strings.xml3
-rw-r--r--java/res/values-km-rKH/strings-action-keys.xml3
-rw-r--r--java/res/values-km-rKH/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-km-rKH/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-km-rKH/strings.xml3
-rw-r--r--java/res/values-lo-rLA/strings-action-keys.xml3
-rw-r--r--java/res/values-lo-rLA/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-lo-rLA/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-lo-rLA/strings.xml3
-rw-r--r--java/res/values-mn-rMN/strings-action-keys.xml3
-rw-r--r--java/res/values-mn-rMN/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-mn-rMN/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-mn-rMN/strings.xml3
-rw-r--r--java/res/values-pt-rPT/strings-action-keys.xml3
-rw-r--r--java/res/values-pt-rPT/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-pt-rPT/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-pt-rPT/strings.xml3
-rw-r--r--java/res/values-ro/strings-action-keys.xml3
-rw-r--r--java/res/values-ro/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-ro/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-ro/strings.xml3
-rw-r--r--java/res/values-sk/strings-action-keys.xml3
-rw-r--r--java/res/values-sk/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-sk/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-sk/strings.xml3
-rw-r--r--java/res/values-uk/strings-action-keys.xml3
-rw-r--r--java/res/values-uk/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-uk/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-uk/strings.xml3
-rw-r--r--java/res/values-vi/strings-action-keys.xml3
-rw-r--r--java/res/values-vi/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-vi/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-vi/strings.xml3
-rw-r--r--java/res/values-zu/strings-action-keys.xml3
-rw-r--r--java/res/values-zu/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-zu/strings-talkback-descriptions.xml30
-rw-r--r--java/res/values-zu/strings.xml3
-rw-r--r--java/res/values/attrs.xml6
-rw-r--r--java/res/values/keyboard-themes.xml9
-rw-r--r--java/res/values/strings.xml44
-rw-r--r--java/res/values/themes-common.xml2
-rw-r--r--java/res/values/themes-ics.xml8
-rw-r--r--java/res/values/themes-klp.xml8
-rw-r--r--java/res/values/themes-lxx-dark.xml8
-rw-r--r--java/res/xml/prefs.xml237
-rw-r--r--java/res/xml/prefs_for_debug.xml12
-rw-r--r--java/res/xml/spell_checker_settings.xml15
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java4
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java58
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java54
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java60
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java11
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java15
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java56
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java157
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java9
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyPreviewView.java90
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java14
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java107
-rw-r--r--java/src/com/android/inputmethod/latin/DicTraverseSession.java15
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitator.java30
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java32
-rw-r--r--java/src/com/android/inputmethod/latin/InputAttributes.java10
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java67
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java38
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java122
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/WordProperty.java6
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java5
-rw-r--r--java/src/com/android/inputmethod/latin/settings/DebugSettings.java7
-rw-r--r--java/src/com/android/inputmethod/latin/settings/Settings.java15
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsFragment.java126
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsValues.java3
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java12
-rw-r--r--java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java4
-rw-r--r--java/src/com/android/inputmethod/latin/utils/SuggestionResults.java8
116 files changed, 4768 insertions, 1160 deletions
diff --git a/java/res/layout/dictionary_line.xml b/java/res/layout/dictionary_line.xml
index 7268cd468..bb1843d6c 100644
--- a/java/res/layout/dictionary_line.xml
+++ b/java/res/layout/dictionary_line.xml
@@ -42,7 +42,7 @@
android:orientation="vertical">
<TextView
- android:id="@+android:id/title"
+ android:id="@android:id/title"
android:layout_marginLeft="5dip"
android:layout_marginStart="5dip"
android:layout_width="wrap_content"
@@ -59,7 +59,7 @@
android:layout_marginLeft="5dip">
<TextView
- android:id="@+android:id/summary"
+ android:id="@android:id/summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
@@ -77,14 +77,14 @@
</LinearLayout>
<com.android.inputmethod.dictionarypack.ButtonSwitcher
- android:id="@+android:id/wordlist_button_switcher"
+ android:id="@+id/wordlist_button_switcher"
android:layout_weight="0"
android:layout_marginStart="13dip"
android:layout_marginLeft="13dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
- android:id="@+android:id/dict_install_button"
+ android:id="@+id/dict_install_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
@@ -92,7 +92,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/install_dict" />
<Button
- android:id="@+android:id/dict_cancel_button"
+ android:id="@+id/dict_cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
@@ -100,7 +100,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/cancel_download_dict" />
<Button
- android:id="@+android:id/dict_delete_button"
+ android:id="@+id/dict_delete_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
diff --git a/java/res/layout/key_preview.xml b/java/res/layout/key_preview.xml
deleted file mode 100644
index 16d4c72c3..000000000
--- a/java/res/layout/key_preview.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:minWidth="32dp"
- android:gravity="center"
- style="?attr/keyPreviewTextViewStyle"
-/>
diff --git a/java/res/raw/main_es.dict b/java/res/raw/main_es.dict
index 83eefe4f6..0911b70f1 100644
--- a/java/res/raw/main_es.dict
+++ b/java/res/raw/main_es.dict
Binary files differ
diff --git a/java/res/values-af/strings-action-keys.xml b/java/res/values-af/strings-action-keys.xml
index bef175b16..c7ae3f759 100644
--- a/java/res/values-af/strings-action-keys.xml
+++ b/java/res/values-af/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Vorige"</string>
<string name="label_done_key" msgid="7564866296502630852">"Klaar"</string>
<string name="label_send_key" msgid="482252074224462163">"Stuur"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Soek"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Laat wag"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wag"</string>
</resources>
diff --git a/java/res/values-af/strings-letter-descriptions.xml b/java/res/values-af/strings-letter-descriptions.xml
new file mode 100644
index 000000000..1238a4312
--- /dev/null
+++ b/java/res/values-af/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Vroulike rangtelwoordaanwyser"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Mikroteken"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Manlike rangtelwoordaanwyser"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Stemlose S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, gravis"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, akuut"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, kappie"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, deelteken"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, sirkel bo"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, koppelletter"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cédille"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, gravis"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, akuut"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, kappie"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, deelteken"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, gravis"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, akuut"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, kappie"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, deelteken"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, gravis"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, akuut"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, kappie"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, deelteken"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, deurhaal"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, gravis"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, akuut"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, kappie"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, deelteken"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, akuut"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, deelteken"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, makron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, brevis"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, akuut"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, kappie"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, kol bo"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, deurhaal"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, makron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, brevis"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, kol bo"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, kappie"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, brevis"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, kol bo"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cédille"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, kappie"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, deurhaal"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, makron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, brevis"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Kollose I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, koppelletter"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, kappie"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cédille"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, akuut"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cédille"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, middelkol"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, deurhaal"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, akuut"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cédille"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, voorafgegaan deur apostroof"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, makron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, brevis"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, dubbelakuut"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, koppelletter"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, akuut"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cédille"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, akuut"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, kappie"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cédille"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cédille"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, deurhaal"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, makron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, brevis"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, sirkel bo"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, dubbelakuut"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, kappie"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, kappie"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, akuut"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, kol bo"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, onderstebo kappie"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Lang S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horing"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horing"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, komma onder"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, komma onder"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Sjwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, kol onder"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, haak bo"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, kappie en akuut"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, kappie en gravis"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, kappie en haak bo"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, kappie en tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, kappie en kol onder"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, brevis en akuut"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, brevis en gravis"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, brevis en haak bo"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, brevis en tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, brevis en kol onder"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, kol onder"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, haak bo"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, kappie en akuut"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, kappie en gravis"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, kappie en haak bo"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, kappie en tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, kappie en kol onder"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, haak bo"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, kol onder"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, kol onder"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, haak bo"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, kappie en akuut"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, kappie en gravis"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, kappie en haak bo"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, kappie en tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, kappie en kol onder"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horing en akuut"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horing en gravis"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horing en haak bo"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horing en tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horing en kol onder"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, kol onder"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, haak bo"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horing en akuut"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horing en gravis"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horing en haak bo"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horing en tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horing en kol onder"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, gravis"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, kol onder"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, haak bo"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Onderstebo uitroepteken"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Dubbele hoekaanhalingsteken na links"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Middelkol"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Boskrif-een"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Dubbele hoekaanhalingsteken na regs"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Onderstebo vraagteken"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Enkele linkeraanhalingsteken"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Enkele regteraanhalingsteken"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Enkele lae-9-aanhalingsteken"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Dubbele linkeraanhalingsteken"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Dubbele regteraanhalingsteken"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Kruisie"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Dubbelkruisie"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Per-duisend-teken"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Aksent"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Dubbelaksent"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Enkele hoekaanhalingsteken na links"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Enkele hoekaanhalingsteken na regs"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Boskrif-vier"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Klein Latynse boskrif-letter-n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Peso-teken"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Per adres"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Pyl na regs"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Pyl na onder"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Leë versameling"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Vermeerdering"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Minder as of gelyk aan"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Meer as of gelyk aan"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Swart ster"</string>
+</resources>
diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml
index 09abb5f6c..3b6ba0ad2 100644
--- a/java/res/values-af/strings-talkback-descriptions.xml
+++ b/java/res/values-af/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Geen teks is ingevoer nie"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> korrigeer <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> voer outokorrigering uit"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Onbekende karakter"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Meer simbole"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Plekke"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbole"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emosiekone"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Hoofletter-<xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Hoofletter-I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Hoofletter-I, kol bo"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Onbekende simbool"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Onbekende emosiekoon"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Alternatiewe karakters is beskikbaar"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Alternatiewe karakters is toegemaak"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Alternatiewe voorstelle is beskikbaar"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Alternatiewe voorstelle is toegemaak"</string>
</resources>
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 0367c474a..295c855bd 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Verbeter <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-action-keys.xml b/java/res/values-am/strings-action-keys.xml
index 26e45135b..51c253823 100644
--- a/java/res/values-am/strings-action-keys.xml
+++ b/java/res/values-am/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"ቀዳሚ"</string>
<string name="label_done_key" msgid="7564866296502630852">"ተደርጓል"</string>
<string name="label_send_key" msgid="482252074224462163">"ላክ"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"ፈልግ"</string>
<string name="label_pause_key" msgid="2225922926459730642">"ቆም በል"</string>
<string name="label_wait_key" msgid="5891247853595466039">"ጠብቅ"</string>
</resources>
diff --git a/java/res/values-am/strings-letter-descriptions.xml b/java/res/values-am/strings-letter-descriptions.xml
new file mode 100644
index 000000000..5c9486975
--- /dev/null
+++ b/java/res/values-am/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"እንስት የደረጃ አመልካች"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"የማይክሮ ምልክት"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"ተባዕታይ የደረጃ አመልካች"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"ሻርፕ ኤስ"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"ኤ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"ኤ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"ኤ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"ኤ፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"ኤ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"ኤ፣ ቀለበት ከላይ"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"ኤ፣ ኢ፣ ማሰሪያ"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"ሲ፣ ጭራ"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"ኢ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"ኢ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"ኢ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"ኢ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"አይ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"አይ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"አይ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"አይ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"ኤት"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"ኤን፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"ኦ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"ኦ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"ኦ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"ኦ፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"ኦ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"ኦ፣ ሰያፍ ሰረዝ"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"ዩ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"ዩ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"ዩ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"ዩ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"ዋይ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"ቶርን"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"ዋይ፣ ባለሁለት ነጥብ"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"ኤ፣ ማክሮን"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"ኤ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"ኤ፣ ኦጎነክ"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"ሲ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"ሲ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"ሲ፣ ነጥብ ከላይ"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"ሲ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"ዲ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"ዲ፣ ሰያፍ ሰረዝ"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"ኢ፣ ማክሮን"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"ኢ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"ኢ፣ ነጥብ ከላይ"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"ኢ፣ ኦጎነክ"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"ኢ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"ጂ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"ጂ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"ጂ፣ ነጥብ ከላይ"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"ጂ፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"ኤች፣ ድፋት"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"ኤች፣ ሰያፍ ሰረዝ"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"አይ፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"አይ፣ ማክሮን"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"አይ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"አይ፣ ኦጎነክ"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"ነጥብ አልባ አይ"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"አይ፣ ጄ፣ ማሰሪያ"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"ጄ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"ኬ፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"ክራ"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"ኤል፣ ይዘት"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"ኤል፣ ጭራ"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"ኤል፣ ካሮን"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"ኤል፣ የመሃል ነጥብ"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"ኤል፣ ሰያፍ ሰረዝ"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"ኤን፣ ይዘት"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"ኤን፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"ኤን፣ ካሮን"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"ኤን፣ በትእምርተ ጭረት የተቀደመ"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"እንግ"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"ኦ፣ ማክሮን"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"ኦ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"ኦ፣ ድርብ ይዘት"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"ኦ፣ ኢ፣ ማሰሪያ"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"አር፣ ይዘት"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"አር፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"አር፣ ካሮን"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"ኤስ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"ኤስ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"ኤስ፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"ኤስ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"ቲ፣ ጭራ"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"ቲ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"ቲ፣ ሰያፍ ሰረዝ"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"ዩ፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"ዩ፣ ማክሮን"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"ዩ፣ ቁንጽል"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"ዩ፣ ቀለበት ከላይ"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"ዩ፣ ድርብ ይዘት"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"ዩ፣ ኦጎነክ"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"ደብልዩ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"ዋይ፣ ድፋት"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"ዜድ፣ ይዘት"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"ዜድ፣ ነጥብ ከላይ"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"ዜድ፣ ካሮን"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"ረጅም ኤስ"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"ኦ፣ ቀንድ"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"ዩ፣ ቀንድ"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"ኤስ፣ ኮማ ከታች"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"ቲ፣ ኮማ ከታች"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"ሽዋ"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"ኤ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"ኤ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"ኤ፣ ድፋት እና ይዘት"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"ኤ፣ ድፋት እና ጭረት"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"ኤ፣ ድፋት እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"ኤ፣ ድፋት እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"ኤ፣ ድፋት እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"ኤ፣ ቁንጽል እና ይዘት"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"ኤ፣ ቁንጽል እና ጭረት"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"ኤ፣ ቁንጽል እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"ኤ፣ ቁንጽል እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"ኤ፣ ቁንጽል እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"ኢ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"ኢ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"ኢ፣ ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"ኢ፣ ድፋት እና ይዘት"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"ኢ፣ ድፋት እና ጭረት"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"ኢ፣ ድፋት እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"ኢ፣ ድፋት እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"ኢ፣ ድፋት እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"አይ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"አይ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"ኦ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"ኦ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"ኦ፣ ድፋት እና ይዘት"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"ኦ፣ ድፋት እና ጭረት"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"ኦ፣ ድፋት እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"ኦ፣ ድፋት እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"ኦ፣ ድፋት እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"ኦ፣ ቀንድ እና ይዘት"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"ኦ፣ ቀንድ እና ጭረት"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"ኦ፣ ቀንድ እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"ኦ፣ ቀንድ እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"ኦ፣ ቀንድ እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"ዩ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"ዩ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"ዩ፣ ቀንድ እና ይዘት"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"ዩ፣ ቀንድ እና ጭረት"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"ዩ፣ ቀንድ እና መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"ዩ፣ ቀንድ እና ድፋትቅናት"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"ዩ፣ ቀንድ እና ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"ዋይ፣ ጭረት"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"ዋይ፣ ነጥብ ከታች"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"ዋይ፣ መንጠቆ ከላይ"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"ዋይ፣ ድፋትቅናት"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"የተገለበጠ ቃለ አጋኖ"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"ግራ ጠቋሚ ድርብ የማዕዘን ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"የመሃል ነጥብ"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"ራስጌ አደር አንድ"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"ቀኝ ጠቋሚ ድርብ የማዕዘን ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"የተገለበጠ የጥያቄ ምልክት"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"የግራ ነጠላ ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"የቀኝ ነጠላ ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"ነጠላ ዝቅተኛ-9 ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"የግራ ድርብ ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"የቀኝ ድርብ ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"ሾተል"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"ድርብ ሾተል"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"የሺኛ ምልክት"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"ፕራይም"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"ድርብ ፕራይም"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"ነጠላ ግራ ጠቋሚ የማዕዘን ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"ነጠላ ቀኝ ጠቋሚ የማዕዘን ትዕምርተ ጥቅስ"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"ራስጌ አደር አራት"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"የራስጌ አደር ላቲን ንዑስ ሆሄ ኤን"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"የፔሶ ምልክት"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"ባለአደራ"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"የቀኝ ቀስት"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"የታች ቀስት"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"ባዶ ስብስብ"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"ጨምር"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"ያንሳል ወይም እክሉ ነው ከ"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"ይበልጣል ወይም እክሉ ነው ከ"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"ጥቁር ኮከብ"</string>
+</resources>
diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml
index 1b1da01e5..84c3cb0c8 100644
--- a/java/res/values-am/strings-talkback-descriptions.xml
+++ b/java/res/values-am/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"ምንም ፅሁፍ አልገባም"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>ን ወደ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> ያርመዋል"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> የራስ ሰር እርማት ያከናውናል"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"ያልታወቀ ቁምፊ"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"ቀይር"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"ተጨማሪ ምልክቶች"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ቦታዎች"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ምልክቶች"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ስሜት ገላጭ አዶዎች"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"አቢይ ሆሄ <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"አቢይ ሆሄ አይ"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"አቢይ ሆሄ አይ፣ ነጥብ ከላይ"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"ያልታወቀ ምልክት"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"ያልታወቀ ስሜት ገላጭ ምስል"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"ተለዋጭ ቁምፊዎች ይገኛሉ"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"ተለዋጭ ቁምፊዎች ተሰናብተዋል"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"ተለዋጭ የአስተያየት ጥቆማዎች ይገኛሉ"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"ተለዋጭ የአስተያየት ጥቆማዎች ተሰናብተዋል"</string>
</resources>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index b20175738..35eb17cce 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"የዕውቂያ ስም ጠቁም"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"ከዕውቂያዎች ለጥቆማዎች እና ማስተካከያዎች ስሞች ተጠቀም"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"ግላዊ የጥቆማ አስተያየቶች"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን አሻሽል"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"የድርብ-ክፍተት ነጥብ"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"የክፍተት አሞሌው ላይ ሁለቴ መታ ማድረግ አንድ ነጥብ እና ክፍተት አስከትሎ ያስገባል"</string>
<string name="auto_cap" msgid="1719746674854628252">"ራስ-ሰር አቢይ ማድረግ"</string>
diff --git a/java/res/values-ca/strings-action-keys.xml b/java/res/values-ca/strings-action-keys.xml
index 5dcf4a337..2760fb076 100644
--- a/java/res/values-ca/strings-action-keys.xml
+++ b/java/res/values-ca/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Fet"</string>
<string name="label_send_key" msgid="482252074224462163">"Envia"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Cerca"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Atura"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-ca/strings-letter-descriptions.xml b/java/res/values-ca/strings-letter-descriptions.xml
new file mode 100644
index 000000000..a6569ec94
--- /dev/null
+++ b/java/res/values-ca/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Indicador ordinal femení"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Signe de micro"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Indicador ordinal masculí"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"S sonora"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, accent obert"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, accent tancat"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, titlla"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, dièresi"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, anell"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, lligadura"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, ce trencada"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, accent obert"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, accent tancat"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, dièresi"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, accent obert"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, accent tancat"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, dièresi"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, titlla"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, accent obert"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, accent tancat"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, titlla"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, dièresi"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, conjunt buit"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, accent obert"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, accent tancat"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"O, dièresi"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, accent tancat"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, dièresi"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, màcron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breu"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, croc polonès"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, accent tancat"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, punt superior"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, anticircumflex"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, anticircumflex"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, barra"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, anticircumflex"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breu"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, punt superior"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, croc polonès"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, anticircumflex"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breu"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, punt superior"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, vírgula"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, barra"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, titlla"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, màcron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breu"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, croc polonès"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I sense punt"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, lligadura"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, vírgula"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, accent tancat"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, vírgula"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, anticircumflex"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, punt volat"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, barra"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, accent tancat"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, vírgula"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, anticircumflex"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, precedida d\'apòstrof"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, màcron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breu"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, accent tancat doble"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, lligadura"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, accent tancat"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, vírgula"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, anticircumflex"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, accent tancat"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, vírgula"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, anticircumflex"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, vírgula"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, anticircumflex"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, barra"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, titlla"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, màcron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breu"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, anell"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, accent tancat doble"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, croc polonès"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, accent tancat"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, punt superior"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, anticircumflex"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"S llarga"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, banya"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, banya"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, coma inferior"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, coma inferior"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Neutra"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, punt inferior"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, vírgula superior"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex i accent tancat"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex i accent obert"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex i vírgula superior"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex i titlla"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex i punt inferior"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breu i accent tancat"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breu i accent obert"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breu i vírgula superior"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breu i titlla"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breu i punt inferior"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, punt inferior"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, vírgula superior"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, titlla"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex i accent tancat"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex i accent obert"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex i vírgula superior"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex i titlla"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex i punt inferior"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, vírgula superior"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, punt inferior"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, punt inferior"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, vírgula superior"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex i accent tancat"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex i accent obert"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex i vírgula superior"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex i titlla"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex i punt inferior"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, banya i accent tancat"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, banya i accent obert"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, banya i vírgula superior"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, banya i titlla"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, banya i punt inferior"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, punt inferior"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, vírgula superior"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, banya i accent tancat"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, banya i accent obert"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, banya i vírgula superior"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, banya i titlla"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, banya i punt inferior"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, accent obert"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, punt inferior"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, vírgula superior"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, titlla"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Signe d\'exclamació invertit"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Doble cometa angular d\'obertura"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"punt volat"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Superíndex d\'u"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Doble cometa angular de tancament"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Signe d\'interrogació invertit"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Cometes simples d\'obertura"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Cometes simples de tancament"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Cometes alemanyes simples d\'obertura"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Cometes dobles d\'obertura"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Cometes dobles de tancament"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Obelisc"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Doble obelisc"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Signe per mil"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Cometa"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Cometa doble"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Cometes angulars simples d\'obertura"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Cometes angulars simples de tancament"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Superíndex de quatre"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Superíndex de lletra minúscula llatina n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Signe del peso"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Percentatge"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Fletxa cap a la dreta"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Fletxa cap avall"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Conjunt buit"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Increment"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Més petit o igual que"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Més gran o igual que"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Estrella negra"</string>
+</resources>
diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml
index 5bbf65571..9b01c75ed 100644
--- a/java/res/values-ca/strings-talkback-descriptions.xml
+++ b/java/res/values-ca/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"No s\'ha introduït cap text."</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corregeix <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> per <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>."</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa la correcció automàtica."</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Caràcter desconegut"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Maj"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Més símbols"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Maj"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Llocs"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticones"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"<xliff:g id="LOWER_LETTER">%s</xliff:g> majúscula"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"I majúscula"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"I majúscula, punt superior"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Símbol desconegut"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Emoji desconegut"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Hi ha caràcters alternatius disponibles."</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Els caràcters alternatius s\'ignoren."</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Hi ha suggeriments alternatius disponibles."</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Els suggeriments alternatius s\'ignoren."</string>
</resources>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index cd5e1d4f8..7f0782ddf 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Millora <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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.xml b/java/res/values-cs/strings.xml
index fe51c79d4..abbdcbe9f 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -52,7 +52,7 @@
<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>
<string name="auto_cap_summary" msgid="7934452761022946874">"Kapitalizace prvního slova každé věty"</string>
- <string name="edit_personal_dictionary" msgid="3996910038952940420">"Osobní slovník"</string>
+ <string name="edit_personal_dictionary" msgid="3996910038952940420">"Vlastní slovník"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Doplňkové slovníky"</string>
<string name="main_dictionary" msgid="4798763781818361168">"Hlavní slovník"</string>
<string name="prefs_show_suggestions" msgid="8026799663445531637">"Zobrazit návrhy oprav"</string>
diff --git a/java/res/values-en-rGB/strings-action-keys.xml b/java/res/values-en-rGB/strings-action-keys.xml
index b8b02e149..6514e85f3 100644
--- a/java/res/values-en-rGB/strings-action-keys.xml
+++ b/java/res/values-en-rGB/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
<string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Search"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
</resources>
diff --git a/java/res/values-en-rGB/strings-letter-descriptions.xml b/java/res/values-en-rGB/strings-letter-descriptions.xml
new file mode 100644
index 000000000..514bc6cbd
--- /dev/null
+++ b/java/res/values-en-rGB/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Feminine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Micro sign"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Masculine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, acute"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diaeresis"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, ring above"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligature"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilla"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, acute"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, acute"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, acute"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, stroke"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, acute"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, acute"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, acute"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, dot above"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, stroke"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, dot above"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, dot above"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, stroke"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Dotless I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligature"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, acute"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, middle dot"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, stroke"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, acute"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, preceded by apostrophe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, double acute"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligature"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, acute"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, acute"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, stroke"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, ring above"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, double acute"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, acute"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, dot above"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Long S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, comma below"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, comma below"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, dot below"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, hook above"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve and acute"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve and grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve and hook above"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve and tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve and dot below"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, dot below"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, hook above"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, hook above"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, dot below"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, dot below"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, hook above"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horn and acute"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horn and grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, dot below"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, hook above"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horn and acute"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horn and grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, dot below"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, hook above"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Inverted exclamation mark"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Left-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Middle dot"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Superscript one"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Right-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Inverted question mark"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Left single quotation mark"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Right single quotation mark"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Single low-9 quotation mark"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Left double quotation mark"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Right double quotation mark"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Double dagger"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Per mille sign"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Double prime"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Single left-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Single right-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Superscript four"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Superscript latin small letter n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Peso sign"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Care of"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Rightwards arrow"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Downwards arrow"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Empty set"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Increment"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Less than or equal to"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Greater than or equal to"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Black star"</string>
+</resources>
diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml
index 3956777ea..e209b5494 100644
--- a/java/res/values-en-rGB/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"No text entered"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrects <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> to <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Unknown character"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Capital <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Capital I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Capital I, dot above"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Unknown symbol"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Unknown emoji"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Alternative characters are available"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Alternative characters are dismissed"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Alternative suggestions are available"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Alternative suggestions are dismissed"</string>
</resources>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 0375ad2bb..75697ad92 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Improve <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-action-keys.xml b/java/res/values-en-rIN/strings-action-keys.xml
index b8b02e149..6514e85f3 100644
--- a/java/res/values-en-rIN/strings-action-keys.xml
+++ b/java/res/values-en-rIN/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
<string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Search"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
</resources>
diff --git a/java/res/values-en-rIN/strings-letter-descriptions.xml b/java/res/values-en-rIN/strings-letter-descriptions.xml
new file mode 100644
index 000000000..514bc6cbd
--- /dev/null
+++ b/java/res/values-en-rIN/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Feminine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Micro sign"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Masculine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, acute"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diaeresis"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, ring above"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligature"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilla"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, acute"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, acute"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, acute"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, stroke"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, acute"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, acute"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, acute"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, dot above"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, stroke"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, dot above"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, dot above"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, stroke"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Dotless I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligature"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, acute"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, middle dot"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, stroke"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, acute"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, preceded by apostrophe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, double acute"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligature"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, acute"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, acute"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, stroke"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, ring above"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, double acute"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, acute"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, dot above"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Long S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, comma below"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, comma below"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, dot below"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, hook above"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve and acute"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve and grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve and hook above"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve and tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve and dot below"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, dot below"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, hook above"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, hook above"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, dot below"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, dot below"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, hook above"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horn and acute"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horn and grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, dot below"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, hook above"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horn and acute"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horn and grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, dot below"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, hook above"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Inverted exclamation mark"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Left-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Middle dot"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Superscript one"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Right-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Inverted question mark"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Left single quotation mark"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Right single quotation mark"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Single low-9 quotation mark"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Left double quotation mark"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Right double quotation mark"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Double dagger"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Per mille sign"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Double prime"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Single left-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Single right-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Superscript four"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Superscript latin small letter n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Peso sign"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Care of"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Rightwards arrow"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Downwards arrow"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Empty set"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Increment"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Less than or equal to"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Greater than or equal to"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Black star"</string>
+</resources>
diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml
index 3956777ea..e209b5494 100644
--- a/java/res/values-en-rIN/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"No text entered"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrects <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> to <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> performs auto-correction"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Unknown character"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"More symbols"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Capital <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Capital I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Capital I, dot above"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Unknown symbol"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Unknown emoji"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Alternative characters are available"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Alternative characters are dismissed"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Alternative suggestions are available"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Alternative suggestions are dismissed"</string>
</resources>
diff --git a/java/res/values-en-rIN/strings.xml b/java/res/values-en-rIN/strings.xml
index 0375ad2bb..75697ad92 100644
--- a/java/res/values-en-rIN/strings.xml
+++ b/java/res/values-en-rIN/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Improve <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-fa/strings-action-keys.xml b/java/res/values-fa/strings-action-keys.xml
index ae393bbf6..859877c89 100644
--- a/java/res/values-fa/strings-action-keys.xml
+++ b/java/res/values-fa/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"قبلی"</string>
<string name="label_done_key" msgid="7564866296502630852">"اتمام"</string>
<string name="label_send_key" msgid="482252074224462163">"ارسال"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"جستجو"</string>
<string name="label_pause_key" msgid="2225922926459730642">"مکث"</string>
<string name="label_wait_key" msgid="5891247853595466039">"انتظار"</string>
</resources>
diff --git a/java/res/values-fa/strings-letter-descriptions.xml b/java/res/values-fa/strings-letter-descriptions.xml
new file mode 100644
index 000000000..4687f1be0
--- /dev/null
+++ b/java/res/values-fa/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"نشانگر ترتیبی زنانه"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"علامت میکرو"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"نشانگر ترتیبی مردانه"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"‏شارپ S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"‏A با اکسان گراو"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"‏A با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"‏A با هشتک"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"‏A با مدک"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"‏A با دو نقطه"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"‏A با حلقه"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"‏A، ‏E متصل به هم"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"‏C با سدیلا"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"‏E با اکسان گراو"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"‏E با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"‏E با هشتک"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"‏E با دو نقطه"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"‏I با اکسان گراو"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"‏I با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"‏I با هشتک"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"‏I با دونقطه"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"‏N با مدک"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"‏O با اکسان گراو"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"‏O با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"‏O با هشتک"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"‏O با مدک"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"‏O با دونقطه"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"‏O با خط مورب"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"‏U با اکسان گراو"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"‏U با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"‏U با هشتک"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"‏U با دو نقطه"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"‏Y با اکسان اگو"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"‏Y با دو نقطه"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"‏A با ماکرون"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"‏A کوتاه"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"‏A با اگنک"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"‏C با اکسان اگو"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"‏C با هشتک"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"‏C با نقطه"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"‏C با هفتک"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"‏D با هفتک"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"‏D با خط مورب"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"‏E با ماکرون"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"‏E کوتاه"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"‏E با نقطه"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"‏E با اگنک"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"‏E با هفتک"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"‏G با هشتک"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"‏G کوتاه"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"‏G با نقطه"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"‏G با سدیلا"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"‏H با هشتک"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"‏H با خط مورب"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"‏I با مدک"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"‏I با ماکرون"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"‏I کوتاه"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"‏I با اگنک"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"‏I بی‌نقطه"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"‏I، ‏J متصل به هم"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"‏I با هشتک"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"‏K با سدیلا"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"‏L با اکسان اگو"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"‏L با سدیلا"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"‏L با هفتک"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"‏L با نقطه وسط"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"‏L با خط مورب"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"‏N با اکسان اگو"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"‏N با سدیلا"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"‏N با هفتک"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"‏N بعد از آپاستراف"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"‏O با ماکرون"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"‏O کوتاه"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"‏O با اکسان اگوی دوتایی"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"‏O، ‏E متصل به هم"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"‏R با اکسان اگو"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"‏R با سدیلا"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"‏R با هفتک"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"‏S با اکسان اگو"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"‏S با هشتک"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"‏S با سدیلا"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"‏S با هفتک"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"‏T با سدیلا"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"‏T با کارون"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"‏T با خط مورب"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"‏U با مدک"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"‏U با ماکرون"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"‏U کوتاه"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"‏U با حلقه"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"‏U با اکسان اگو دوتایی"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"‏U با اگنک"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"‏W با هشتک"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"‏Y با هشتک"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"‏Z با اکسان اگو"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"‏Z با دو نقطه"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"‏Z با هفتک"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"‏S طولانی"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"‏O با شاخ"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"‏U با شاخ"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"‏S با کامای زیرین"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"‏T با کامای زیرین"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"واکه بی‌رنگ"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"‏A با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"‏A با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"‏A با هشتک و اکسان اگو"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"‏A با هشتک و اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"‏A با هشتک و کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"‏A با هشتک و مدک"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"‏A با هشتک و نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"‏A کوتاه با اکسان اگو"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"‏A کوتاه با اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"‏A کوتاه با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"‏A کوتاه با مدک"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"‏A کوتاه با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"‏E با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"‏E با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"‏E با مدک"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"‏E با هشتک و اکسان اگو"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"‏E با هشتک و اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"‏E با هشتک و کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"‏E با هشتک و مدک"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"‏E با هشتک و نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"‏I با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"‏I با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"‏O با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"‏O با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"‏O با هشتک و اکسان اگو"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"‏O با هشتک و اکسان گراو"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"‏O با هشتک و کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"‏O با هشتک و مدک"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"‏O با هشتک و نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"‏O با شاخ و اکسان اگو"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"‏O با شاخ و اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"‏O با شاخ و کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"‏O با شاخ و مدک"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"‏O با شاخ و نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"‏U با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"‏U با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"‏U با شاخ و اکسان اگو"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"‏U با شاخ و اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"‏U با شاخ و کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"‏U با شاخ و مدک"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"‏U با شاخ و نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"‏Y اکسان گراو"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"‏Y با نقطه زیرین"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"‏Y با کروشه بالایی"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"‏Y با مدک"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"علامت تعجب وارونه"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"گیومه رو به چپ"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"نقطه وسط"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"بالانویس یک"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"گیومه رو به راست"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"علامت سؤال وارونه"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"علامت نقل قول تکی سمت چپ"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"علامت نقل قول تکی سمت راست"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"علامت نقل قول تکی ۹ پایین"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"علامت نقل قول دوتایی سمت چپ"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"علامت نقل قول دوتایی سمت راست"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"نماد خنجر"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"نماد خنجر دوتایی"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"علامت در هزار"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"پریم"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"پریم دوتایی"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"گیومه تکی رو به چپ"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"گیومه تکی رو به راست"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"بالانویس چهار"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"‏بالانویس حرف n کوچک لاتین"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"علامت پسو"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"توسط"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"پیکان سمت راست"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"پیکان رو به پایین"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"مجموعه تهی"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"افزایش"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"کمتر یا مساوی"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"بزرگتر یا مساوی"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"ستاره سیاه"</string>
+</resources>
diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml
index c70040fae..988dd5cd1 100644
--- a/java/res/values-fa/strings-talkback-descriptions.xml
+++ b/java/res/values-fa/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"نوشتاری وارد نشده است"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>، ‏<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> را به <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> تصحیح می‌کند"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> تصحیح خودکار را انجام می‌دهد"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"نویسه نامشخص"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"نمادهای بیشتر"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"تبدیل"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"مکان‌ها"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"نمادها"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"شکلک‌ها"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"حرف بزرگ <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"‏I بزرگ"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"‏I بزرگ با نقطه بالایی"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"نماد نامشخص"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"‏شکلک emoji نامشخص"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"نویسه‌های جایگزین در دسترس هستند"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"از نویسه‌های جایگزین صرفنظر می‌شود"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"پیشنهادهای جایگزین در دسترس هستند"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"از پیشنهادهای جایگزین صرفنظر می‌شود"</string>
</resources>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 0c466c201..bda2756e7 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"پیشنهاد نام‌های مخاطب"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"برای پیشنهاد و تصحیح از نام مخاطبین استفاده شود"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"پیشنهادات شخصی شده"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"بهبود <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"نقطه با دو فاصله"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"با دوبار ضربه روی دکمه فاصله نقطه با یک فاصله بعد آن درج می‌شود"</string>
<string name="auto_cap" msgid="1719746674854628252">"بزرگ‌کردن خودکار حروف"</string>
diff --git a/java/res/values-in/strings-action-keys.xml b/java/res/values-in/strings-action-keys.xml
index 052798d02..7f1a28e29 100644
--- a/java/res/values-in/strings-action-keys.xml
+++ b/java/res/values-in/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Balik"</string>
<string name="label_done_key" msgid="7564866296502630852">"Beres"</string>
<string name="label_send_key" msgid="482252074224462163">"Kirim"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Telusur"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Jeda"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Tunggu"</string>
</resources>
diff --git a/java/res/values-in/strings-letter-descriptions.xml b/java/res/values-in/strings-letter-descriptions.xml
new file mode 100644
index 000000000..711f68905
--- /dev/null
+++ b/java/res/values-in/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Indikator ordinal feminin"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Simbol mikro"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Indikator ordinal maskulin"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Eszett"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A dengan aksen nontirus (tanda coret miring ke arah kiri di bagian atas)"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A dengan aksen tirus (tanda coret miring ke arah kanan di bagian atas)"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A dengan aksen sirkumfleks (tanda aksen di bagian atas)"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A dengan aksen tilda (tanda gelombang di bagian atas)"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A dengan aksen diaeresis (titik dua di bagian atas)"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A dengan aksen lingkaran di bagian atas"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A E ligatur (Karakter A dan E yang digabungkan menjadi satu kesatuan unit)"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C dengan aksen cedilla (tanda kait di bagian bawah)"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E dengan aksen nontirus"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E dengan aksen diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I dengan aksen nontirus"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I dengan aksen diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N dengan aksen tilda"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O dengan aksen nontirus"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O dengan aksen tilda"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O dengan aksen diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O coret"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U dengan aksen nontirus"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U dengan aksen diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn (sekarang diganti dengan huruf th)"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y dengan aksen diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A dengan aksen makron (tanda pengulur/makron di bagian atas)"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A dengan aksen breve (tanda breve di bagian atas)"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A dengan aksen ogonek (tanda ekor di sebelah kanan bawah untuk menunjukkan bunyi sengau)"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C dengan titik di bagian atas"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C dengan aksen caron (tanda caron di bagian atas)"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D dengan aksen caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D coret"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E dengan aksen makron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E dengan aksen breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E dengan titik di bagian atas"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E dengan aksen ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E dengan aksen caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G dengan aksen breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G dengan aksen titik di bagian atas"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H coret"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I dengan aksen tilda"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I dengan aksen makron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I dengan aksen breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I dengan aksen ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I tanpa titik"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I dan J ligatur"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L dengan aksen caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L dengan titik di tengah"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L coret"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N dengan aksen caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N yang didahului tanda apostrof"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O dengan aksen makron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O dengan aksen breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O dengan aksen tirus ganda"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O dan E ligatur"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R dengan aksen caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S dengan aksen caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T dengan aksen cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T dengan aksen caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T coret"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U dengan aksen tilda"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U dengan aksen makron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U dengan aksen breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U dengan aksen lingkaran di bagian atas"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U dengan aksen tirus ganda"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U dengan aksen ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y dengan aksen sirkumfleks"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z dengan aksen tirus"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z dengan titik di bagian atas"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z dengan aksen caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"S Panjang"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O dengan aksen tanduk"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U dengan aksen tanduk"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S dengan aksen koma di bagian bawah"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T dengan aksen koma di bagian bawah"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa (aksen pepet)"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A dengan aksen sirkumfleks dan tirus"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A dengan aksen sirkumfleks dan nontirus"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A dengan aksen sirkumfleks dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A dengan aksen sirkumfleks dan tilda"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A dengan aksen sirkumfleks dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A dengan aksen breve dan tirus"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A dengan aksen breve dan nontirus"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A dengan aksen breve dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A dengan aksen breve dan tilda"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A dengan aksen breve dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E dengan aksen tilda"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E dengan aksen sirkumfleks dan tirus"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E dengan aksen sirkumfleks dan nontirus"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E dengan aksen sirkumfleks dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E dengan aksen sirkumfleks dan tilda"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E dengan aksen sirkumfleks dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O dengan aksen sirkumfleks dan tirus"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O dengan aksen sirkumfleks dan nontirus"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O dengan aksen sirkumfleks dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O dengan aksen sirkumfleks dan tilda"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O dengan aksen sirkumfleks dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O dengan aksen tanduk dan tirus"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O dengan aksen tanduk dan nontirus"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O dengan aksen tanduk dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O dengan aksen tanduk dan tilda"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O dengan aksen tanduk dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U dengan aksen tanduk dan tirus"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U dengan aksen tanduk dan nontirus"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U dengan aksen tanduk dan kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U dengan aksen tanduk dan tilda"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U dengan aksen tanduk dan titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y dengan aksen nontirus"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y dengan aksen titik di bagian bawah"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y dengan aksen kait di bagian atas"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y dengan aksen tilda"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Tanda seru terbalik"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Dua tanda kurung sudut kiri"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Titik tengah"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Superscript satu"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Dua tanda kurung sudut kanan"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Tanda tanya terbalik"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Tanda petik tunggal kiri"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Tanda petik tunggal kanan"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Tanda petik tunggal di bagian bawah"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Tanda petik ganda kiri"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Tanda petik ganda kanan"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger (Tanda belati)"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Dagger ganda"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Simbol per mil"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Tanda petik"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Tanda petik ganda"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Tanda kurung sudut kiri tunggal"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Tanda kurung sudut kanan tunggal"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Superscript empat"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Superscript huruf latin kecil n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Simbol peso"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Dengan alamat"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Panah ke kanan"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Panah ke bawah"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Himpunan kosong"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Penambahan"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Kurang dari atau sama dengan"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Lebih dari atau sama dengan"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Bintang hitam"</string>
+</resources>
diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml
index 6f2970795..f7334d9d0 100644
--- a/java/res/values-in/strings-talkback-descriptions.xml
+++ b/java/res/values-in/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Tidak ada teks yang dimasukkan"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> mengoreksi <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> menjadi <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan koreksi otomatis"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Karakter tak dikenal"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Simbol lainnya"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Tempat"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbol"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikon"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Huruf kapital <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Huruf kapital I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Huruf kapital I dengan aksen titik di bagian atas"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Simbol tak dikenal"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Emoji tak dikenal"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Karakter alternatif tersedia"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Karakter alternatif ditolak"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Saran alternatif tersedia"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Saran alternatif ditolak"</string>
</resources>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 160b2ee43..a5babcd61 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"Sarankan nama Kontak"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Menggunakan nama dari Kontak untuk saran dan koreksi"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"Saran hasil personalisasi"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"Tingkatkan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-iw/strings-action-keys.xml b/java/res/values-iw/strings-action-keys.xml
index 398c081d6..f72a6feeb 100644
--- a/java/res/values-iw/strings-action-keys.xml
+++ b/java/res/values-iw/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"הקודם"</string>
<string name="label_done_key" msgid="7564866296502630852">"בוצע"</string>
<string name="label_send_key" msgid="482252074224462163">"שלח"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"חפש"</string>
<string name="label_pause_key" msgid="2225922926459730642">"השהה"</string>
<string name="label_wait_key" msgid="5891247853595466039">"המתן"</string>
</resources>
diff --git a/java/res/values-iw/strings-letter-descriptions.xml b/java/res/values-iw/strings-letter-descriptions.xml
new file mode 100644
index 000000000..1b0e72f42
--- /dev/null
+++ b/java/res/values-iw/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"סימן סידורי נקבי"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"סימן מיקרו"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"סימן סידורי זכרי"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"‏S חדה"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"‏A‏, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"‏A, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"‏A, גג"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"‏A, טילדה"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"‏A, עלית כפולה"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"‏A, טבעת מעל"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"‏A‏, E, ליגטורה"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"‏C, סדיליה"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"‏E, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"‏E, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"‏E, גג"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"‏E, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"‏I, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"‏I, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"‏I, גג"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"‏I, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"‏N, טילדה"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"‏O, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"‏O, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"‏O, גג"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"‏O, טילדה"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"‏O, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"‏O, קו חוצה"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"‏U, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"‏U, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"‏U, גג"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"‏U, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"‏Y, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"‏Y, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"‏A, קו עלי"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"‏A, ברווה"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"‏A, זנבון"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"‏C, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"‏C, גג"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"‏C, נקודה מעל"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"‏C, וי קטן"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"‏D, וי קטן"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"‏D, קו חוצה"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"‏E, קו עלי"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"‏E, ברווה"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"‏E, נקודה מעל"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"‏E, זנבון"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"‏E, וי קטן"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"‏G, גג"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"‏G, ברווה"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"‏G, נקודה מעל"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"‏G, סדיליה"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"‏H, גג"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"‏H, קו חוצה"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"‏I, טילדה"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"‏I, קו עלי"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"‏I, ברווה"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"‏I, זנבון"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"‏I ללא נקודות"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"‏I‏, J, ליגטורה"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"‏J, גג"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"‏K, סדיליה"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"‏L, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"‏L, סדיליה"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"‏L, וי קטן"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"‏L, נקודה אמצעית"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"‏L, קו חוצה"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"‏N, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"‏N, סדיליה"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"‏N, וי קטן"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"‏N, עם גרש לפני"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"‏O, קו עלי"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"‏O, ברווה"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"‏O, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"‏O‏, E, ליגטורה"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"‏R, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"‏R, סדיליה"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"‏R, וי קטן"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"‏S, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"‏S, גג"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"‏S, סדיליה"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"‏S, וי קטן"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"‏T, סדיליה"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"‏T, וי קטן"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"‏T, קו חוצה"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"‏U, טילדה"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"‏U, קו עלי"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"‏U, ברווה"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"‏U, טבעת מעל"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"‏U, הטעמה עלית כפולה"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"‏U, זנבון"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"‏W, גג"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"‏Y, גג"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"‏Z, הטעמה עלית"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"‏Z, נקודה מעל"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"‏Z, וי קטן"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"‏S ארוכה"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"‏O, קרן"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"‏U, קרן"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"‏S, פסיק מתחת"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"‏T, פסיק מתחת"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"‏A, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"‏A, קרס מעל"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"‏A, גג והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"‏A, גג והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"‏A, גג וקרס מעל"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"‏A, גג וטילדה"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"‏A, גג ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"‏A, ברווה והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"‏A, ברווה והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"‏A, ברווה וקרס מעל"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"‏A, ברווה וטילדה"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"‏A, ברווה ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"‏E, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"‏E, קרס מעל"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"‏E, טילדה"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"‏E, גג והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"‏E, גג והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"‏E, גג וקרס מעל"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"‏E, גג וטילדה"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"‏E, גג ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"‏I, קרס מעל"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"‏I, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"‏O, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"‏O, קרס מעל"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"‏O, גג והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"‏O, גג והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"‏O, גג וקרס מעל"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"‏O, גג וטילדה"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"‏O, גג ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"‏O, קרן והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"‏O, קרן והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"‏O, קרן וקרס מעל"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"‏O, קרן וטילדה"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"‏O, קרן ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"‏U, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"‏U, קרס מעל"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"‏U, קרן והטעמה עלית"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"‏U, קרן והטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"‏U, קרן וקרס מעל"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"‏U, קרן וטילדה"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"‏U, קרן ונקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"‏Y, הטעמה משנית"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"‏Y, נקודה מתחת"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"‏Y, קרס מעל"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"‏Y, טילדה"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"סימן קריאה הפוך"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"סימן ציטוט זוויתי כפול הפונה שמאלה"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"נקודה אמצעית"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"אחד בכתב עלי"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"סימן ציטוט זוויתי כפול הפונה ימינה"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"סימן שאלה הפוך"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"גרש שמאלי יחיד"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"גרש ימני יחיד"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"גרש יחיד תחתון"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"מירכאות כפולות שמאליות"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"מירכאות כפולות ימניות"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"צלבון"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"צלבון כפול"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"סימן פרומיל"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"‏Prime כפול"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"סימן ציטוט זוויתי יחיד הפונה שמאלה"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"סימן ציטוט זוויתי יחיד הפונה ימינה"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"ארבע בכתב עלי"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"‏n לטינית קטנה בכתב עלי"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"סימן פזו"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"סימן \"לכבוד\""</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"חץ ימינה"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"חץ מטה"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Empty Set"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"הגדל"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"קטן מ- או שווה ל-"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"גדול מ- או שווה ל-"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"כוכב שחור"</string>
+</resources>
diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml
index 435aaba51..a43b64ec7 100644
--- a/java/res/values-iw/strings-talkback-descriptions.xml
+++ b/java/res/values-iw/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"לא הוזן טקסט"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> מתקן את <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ל-<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> מבצע תיקון אוטומטי"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"תו לא מוכר"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"סמלים נוספים"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"מקומות"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"סמלים"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"רגשונים"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"<xliff:g id="LOWER_LETTER">%s</xliff:g> גדולה"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"‏I גדולה"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"‏I גדולה, נקודה מעל"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"סמל לא מוכר"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"‏Emoji לא מוכר"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"תווים חלופיים זמינים"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"תווים חלופיים נדחים"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"הצעות חלופיות זמינות"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"הצעות חלופיות נדחות"</string>
</resources>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 297048ca5..705121e3f 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"הצע שמות של אנשי קשר"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"השתמש בשמות מרשימת אנשי הקשר עבור הצעות ותיקונים"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"הצעות מותאמות אישית"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"שפר את <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"רווח כפול לנקודה"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"הקשה פעמיים על מקש הרווח מזינה נקודה ואחריה רווח"</string>
<string name="auto_cap" msgid="1719746674854628252">"הפיכת אותיות לרישיות באופן אוטומטי"</string>
diff --git a/java/res/values-ka-rGE/strings-action-keys.xml b/java/res/values-ka-rGE/strings-action-keys.xml
index 3ad6c3395..5fa92357c 100644
--- a/java/res/values-ka-rGE/strings-action-keys.xml
+++ b/java/res/values-ka-rGE/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"წინა"</string>
<string name="label_done_key" msgid="7564866296502630852">"დასრ."</string>
<string name="label_send_key" msgid="482252074224462163">"გაგზ."</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"ძიება"</string>
<string name="label_pause_key" msgid="2225922926459730642">"პაუზა"</string>
<string name="label_wait_key" msgid="5891247853595466039">"მოცდა"</string>
</resources>
diff --git a/java/res/values-ka-rGE/strings-letter-descriptions.xml b/java/res/values-ka-rGE/strings-letter-descriptions.xml
new file mode 100644
index 000000000..ae3ddabce
--- /dev/null
+++ b/java/res/values-ka-rGE/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Feminine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"ნიშანი მიკრო"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Masculine ordinal indicator"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, acute"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diaeresis"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, ring above"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligature"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilla"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, acute"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, acute"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, acute"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, stroke"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, acute"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, acute"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, acute"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, dot above"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, stroke"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, dot above"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, dot above"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, stroke"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Dotless I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligature"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, acute"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, middle dot"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, stroke"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, acute"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, preceded by apostrophe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, double acute"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligature"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, acute"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, acute"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, stroke"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, ring above"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, double acute"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, acute"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, dot above"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Long S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, comma below"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, comma below"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, dot below"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, hook above"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve and acute"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve and grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve and hook above"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve and tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve and dot below"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, dot below"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, hook above"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, hook above"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, dot below"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, dot below"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, hook above"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horn and acute"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horn and grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, dot below"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, hook above"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horn and acute"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horn and grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, dot below"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, hook above"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Inverted exclamation mark"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Left-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Middle dot"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"ერთიანი ზედა ინდექსში"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Right-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Inverted question mark"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Left single quotation mark"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Right single quotation mark"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Single low-9 quotation mark"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Left double quotation mark"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Right double quotation mark"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Double dagger"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Per mille sign"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Double prime"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"მარცხნივ მიმართლი კუთხოვანი ერთმაგი ბრჭყალი"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"მარჯვნივ მიმართლი კუთხოვანი ერთმაგი ბრჭყალი"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"ოთხიანი ზედა ინდექსში"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"ლათინური ასო n ზედა ინდექსში"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"პესოს ნიშანი"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Care of"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"მარჯვნივ მიმართული ისარი"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"ქვევით მიმართლი ისარი"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Empty set"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Increment"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"ნაკლებობა ან ტოლობა"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"მეტობა ან ტოლობა"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"შავი ვარსკვლავი"</string>
+</resources>
diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
index 0cf7e7ce4..5d23b09e8 100644
--- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml
+++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"ტექსტი შეყვანილი არ არის"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> შეასწორებს <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>-ს <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>-ად"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ასრულებს ავტოკორექციას"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"უცნობი სიმბოლო"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"დამატებითი სიმბოლოები"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ადგილები"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"სიმბოლოები"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"სიცილაკები"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"დიდი <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"დიდი I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Capital I, dot above"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"უცნობი სიმბოლო"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"უცნობი emoji"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"ალტერნატიული სიმბოლოები ხელმისაწვდომია"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"ალტერნატიული სიმბოლოები გამოტოვებულია"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"ალტერნატიული შეთავაზებები ხელმისაწვდომია"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"ალტერნატიული შეთავაზებები გამოტოვებულია"</string>
</resources>
diff --git a/java/res/values-ka-rGE/strings.xml b/java/res/values-ka-rGE/strings.xml
index 7c0026e5e..43dcc6354 100644
--- a/java/res/values-ka-rGE/strings.xml
+++ b/java/res/values-ka-rGE/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"კონტაქტის სახელების შეთავაზება"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"კონტაქტებიდან სახელების გამოყენება შეთავაზებებისთვის და კორექციისთვის"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"პერსონალიზებული შეთავაზებები"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-ის გაუმჯობესება"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"წერტილი ორმაგი შორისით"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"შორისზე ორჯერ შეხება დაწერს წერტილს და შორისის სიმბოლოს"</string>
<string name="auto_cap" msgid="1719746674854628252">"ავტო-კაპიტალიზაცია"</string>
diff --git a/java/res/values-km-rKH/strings-action-keys.xml b/java/res/values-km-rKH/strings-action-keys.xml
index d6b11b7ce..3ff6d49b1 100644
--- a/java/res/values-km-rKH/strings-action-keys.xml
+++ b/java/res/values-km-rKH/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"មុន"</string>
<string name="label_done_key" msgid="7564866296502630852">"រួចរាល់"</string>
<string name="label_send_key" msgid="482252074224462163">"ផ្ញើ"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"ស្វែងរក"</string>
<string name="label_pause_key" msgid="2225922926459730642">"ផ្អាក"</string>
<string name="label_wait_key" msgid="5891247853595466039">"រង់ចាំ"</string>
</resources>
diff --git a/java/res/values-km-rKH/strings-letter-descriptions.xml b/java/res/values-km-rKH/strings-letter-descriptions.xml
new file mode 100644
index 000000000..f58eff4d1
--- /dev/null
+++ b/java/res/values-km-rKH/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"សញ្ញា ª"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"សញ្ញា µ"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"សញ្ញា º"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"សញ្ញា ß"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"សញ្ញា à"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"សញ្ញា á"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"សញ្ញា â"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"សញ្ញា ã"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"សញ្ញា ä"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"សញ្ញា å"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"សញ្ញា æ"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"សញ្ញា ç"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"សញ្ញា è"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"សញ្ញា é"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"សញ្ញា ê"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"សញ្ញា ë"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"សញ្ញា ì"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"សញ្ញា í"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"សញ្ញា î"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"សញ្ញា ï"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"សញ្ញា ð"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"សញ្ញា ñ"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"សញ្ញា ò"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"សញ្ញា ó"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"សញ្ញា ô"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"សញ្ញា õ"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"សញ្ញា ö"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"សញ្ញា ø"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"សញ្ញា ù"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"សញ្ញា ú"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"សញ្ញា û"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"សញ្ញា ü"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"សញ្ញា ý"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"សញ្ញា þ"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"សញ្ញា ÿ"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"សញ្ញា ā"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"សញ្ញា ă"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"សញ្ញា ą"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"សញ្ញា ć"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"សញ្ញា ĉ"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"សញ្ញា ċ"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"សញ្ញា č"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"សញ្ញា ď"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"សញ្ញា đ"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"សញ្ញា ē"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"សញ្ញា ĕ"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"សញ្ញា ė"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"សញ្ញា ę"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"សញ្ញា ě"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"សញ្ញា ĝ"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"សញ្ញា ğ"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"សញ្ញា ġ"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"សញ្ញា ģ"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"សញ្ញា ĥ"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"សញ្ញា ħ"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"សញ្ញា ĩ"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"សញ្ញា ī"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"សញ្ញា ĭ"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"សញ្ញា į"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"សញ្ញា ı"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"សញ្ញា ij"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"សញ្ញា ĵ"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"សញ្ញា ķ"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"សញ្ញា ĸ"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"សញ្ញា ĺ"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"សញ្ញា ļ"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"សញ្ញា ľ"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"សញ្ញា ŀ"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"សញ្ញា ł"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"សញ្ញា ń"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"សញ្ញា ņ"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"សញ្ញា ň"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"សញ្ញា ʼn"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"សញ្ញា ŋ"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"សញ្ញា ō"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"សញ្ញា ŏ"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"សញ្ញា ő"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"សញ្ញា œ"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"សញ្ញា ŕ"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"សញ្ញា ŗ"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"សញ្ញា ř"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"សញ្ញា ś"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"សញ្ញា ŝ"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"សញ្ញា ş"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"សញ្ញា š"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"សញ្ញា ţ"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"សញ្ញា ť"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"សញ្ញា ŧ"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"សញ្ញា ũ"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"សញ្ញា ū"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"សញ្ញា ŭ"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"សញ្ញា ů"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"សញ្ញា ű"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"សញ្ញា ų"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"សញ្ញា ŵ"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"សញ្ញា ŷ"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"សញ្ញា ź"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"សញ្ញា ż"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"សញ្ញា ž"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"សញ្ញា ſ"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"សញ្ញា ơ"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"សញ្ញា ư"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"សញ្ញា ș"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"សញ្ញា ț"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"សញ្ញា ə"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"សញ្ញា ạ"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"សញ្ញា ả"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"សញ្ញា ấ"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"សញ្ញា ầ"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"សញ្ញា ẩ"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"សញ្ញា ẫ"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"សញ្ញា ậ"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"សញ្ញា ắ"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"សញ្ញា ằ"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"សញ្ញា ẳ"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"សញ្ញា ẵ"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"សញ្ញា ặ"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"សញ្ញា ẹ"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"សញ្ញា ẻ"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"សញ្ញា ẽ"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"សញ្ញា ế"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"សញ្ញា ề"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"សញ្ញា ể"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"សញ្ញា ễ"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"សញ្ញា ệ"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"សញ្ញា ỉ"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"សញ្ញា ị"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"សញ្ញា ọ"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"សញ្ញា ỏ"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"សញ្ញា ố"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"សញ្ញា ồ"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"សញ្ញា ổ"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"សញ្ញា ỗ"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"សញ្ញា ộ"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"សញ្ញា ớ"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"សញ្ញា ờ"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"សញ្ញា ở"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"សញ្ញា ỡ"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"សញ្ញា ợ"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"សញ្ញា ụ"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"សញ្ញា ủ"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"សញ្ញា ứ"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"សញ្ញា ừ"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"សញ្ញា ử"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"សញ្ញា ữ"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"សញ្ញា ự"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"សញ្ញា ỳ"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"សញ្ញា ỵ"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"សញ្ញា ỷ"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"សញ្ញា ỹ"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"សញ្ញា ¡"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"សញ្ញា «"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"សញ្ញា ·"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"សញ្ញា ¹"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"សញ្ញា »"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"សញ្ញា ¿"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"សញ្ញា ‘"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"សញ្ញា ’"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"សញ្ញា ‚"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"សញ្ញា “"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"សញ្ញា ”"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"សញ្ញា †"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"សញ្ញា ‡"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"សញ្ញា ‰"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"សញ្ញា ′"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"សញ្ញា ″"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"សញ្ញា ‹"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"សញ្ញា ›"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"សញ្ញា ⁴"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"សញ្ញា ⁿ"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"សញ្ញា ₱"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"សញ្ញា ℅"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"សញ្ញា →"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"សញ្ញា ↓"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"សញ្ញា ∅"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"សញ្ញា ∆"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"សញ្ញា ≤"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"សញ្ញា ≥"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"សញ្ញា ★"</string>
+</resources>
diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml
index 0f0ac5600..e5b786048 100644
--- a/java/res/values-km-rKH/strings-talkback-descriptions.xml
+++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"គ្មាន​អត្ថបទ​​​បាន​បញ្ចូល"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> កែ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ទៅ​ជា <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> អនុវត្ត​ការ​កែ​ស្វ័យ​ប្រវត្តិ"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"មិន​ស្គាល់​តួអក្សរ"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"និមិត្ត​សញ្ញា​​ច្រើន​ទៀត"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ទីកន្លែង"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"និមិត្តសញ្ញា"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"សញ្ញា​អារម្មណ៍"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"អក្សរ​ធំ <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"សញ្ញា I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"សញ្ញា İ"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"មិន​ស្គាល់​និមិត្តសញ្ញា"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"មិន​ស្គាល់​សញ្ញា​អារម្មណ៍"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"តួអក្សរ​ជំនួស​អាច​ប្រើ​បាន"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"បាន​បដិសេធ​តួអក្សរ​ជំនួស"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"ការ​ស្នើ​ជំនួស​អាច​ប្រើ​បាន"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"បាន​បដិសេធ​ការ​ស្នើ​ជំនួស"</string>
</resources>
diff --git a/java/res/values-km-rKH/strings.xml b/java/res/values-km-rKH/strings.xml
index 91ba5b96f..c55c0367f 100644
--- a/java/res/values-km-rKH/strings.xml
+++ b/java/res/values-km-rKH/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"ស្នើ​ឈ្មោះ​ទំនាក់ទំនង"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"ប្រើ​ឈ្មោះ​ពី​ទំនាក់ទំនង​សម្រាប់​ការ​​ស្នើ និង​​​កែ"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"ការ​ស្នើ​ផ្ទាល់​ខ្លួន"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"ធ្វើឲ្យ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ប្រសើរ​ឡើង"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"រយៈ​ពេល​ចុច​ដកឃ្លា​ពីរដង"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"ប៉ះ​ដកឃ្លា​ពីរ​​ដង​បញ្ចូល​​​រយៈ​ពេល​ដែល​អនុវត្ត​តាម​ដកឃ្លា"</string>
<string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ​"</string>
diff --git a/java/res/values-lo-rLA/strings-action-keys.xml b/java/res/values-lo-rLA/strings-action-keys.xml
index 239930583..e1cd91367 100644
--- a/java/res/values-lo-rLA/strings-action-keys.xml
+++ b/java/res/values-lo-rLA/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"ກ່ອນໜ້າ"</string>
<string name="label_done_key" msgid="7564866296502630852">"Done"</string>
<string name="label_send_key" msgid="482252074224462163">"ສົ່ງ"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"ຊອກຫາ"</string>
<string name="label_pause_key" msgid="2225922926459730642">"ຢຸດຊົ່ວຄາວ"</string>
<string name="label_wait_key" msgid="5891247853595466039">"ລໍຖ້າ"</string>
</resources>
diff --git a/java/res/values-lo-rLA/strings-letter-descriptions.xml b/java/res/values-lo-rLA/strings-letter-descriptions.xml
new file mode 100644
index 000000000..ecc0b7a71
--- /dev/null
+++ b/java/res/values-lo-rLA/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"ໂຕ​ບົ່ງ​ຊີ້​ລຳ​ດັບ​ເພດ​ຍິງ"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"ສັນຍາລັກໄມໂຄຣ"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"​ໂຕ​ບົ່ງ​ຊີ້​ລຳ​ດັບ​ເພດ​ຊາຍ"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, acute"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diaeresis"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, ring above"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligature"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilla"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, acute"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, acute"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, acute"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, stroke"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, acute"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, acute"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, acute"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, dot above"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, stroke"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, dot above"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, dot above"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, stroke"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Dotless I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligature"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, acute"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, middle dot"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, stroke"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, acute"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, preceded by apostrophe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, double acute"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligature"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, acute"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, acute"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, stroke"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, ring above"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, double acute"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, acute"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, dot above"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Long S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, comma below"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, comma below"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, dot below"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, hook above"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve and acute"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve and grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve and hook above"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve and tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve and dot below"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, dot below"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, hook above"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, hook above"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, dot below"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, dot below"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, hook above"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex and acute"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex and grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex and hook above"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex and tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex and dot below"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horn and acute"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horn and grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, dot below"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, hook above"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horn and acute"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horn and grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horn and hook above"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horn and tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horn and dot below"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, dot below"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, hook above"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Inverted exclamation mark"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Left-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"​​ຈ້ຳ​ເມັດ​ທາງ​ກາງ"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Superscript one"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Right-pointing double angle quotation mark"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Inverted question mark"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Left single quotation mark"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Right single quotation mark"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Single low-9 quotation mark"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"​ເຄື່ອງ​ໝາຍ​ວົງ​ຢືມ​ຊ້າຍ"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"​ເຄື່ອງ​ໝາຍ​ວົງ​ຢືມ​ຂວາ​"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Double dagger"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"​ເຄື່ອງ​ໝາຍ​ຕໍ່​ໄມລ໌"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Double prime"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Single left-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Single right-pointing angle quotation mark"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"ໂຕ​ຍົກ​ເລກ​ສີ່"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"ໂຕ​ຍົກ​ n ໂຕ​ນ້ອຍ"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"ເຄື່ອງ​ໝາຍເປ​ໂຊ"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"CARE OF"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"​ລູກ​ສອນ​ຊີ້​ໄປ​ຂວາ"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"ລູກ​ສອນ​ຊີ້​ລົງ"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"​ຊຸດ​ຫວ່າງ​ເປົ່າ"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"ເພີ່ມ"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"​ໜ້ອຍກວ່າ ຫຼື​ເທົ່າ​ກັບ"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"ຫຼາຍກວ່າ ຫຼື​ເທົ່າ​ກັບ"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"​ດາວ​ດຳ"</string>
+</resources>
diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
index c6140fda9..187b63ae5 100644
--- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"ບໍ່ມີ​ການໃສ່​ຂໍ້ຄວາມ"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ແກ້​ໄຂ​ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> ເປັນ <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> ດຳ​ເນີນ​ການ​ແກ້​ໄຂ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"​ໂຕ​ອັກ​ສອນ​ທີ່ບໍ່​ຮູ້​ຈັກ"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"​ສັນ​ຍາ​ລັກ​ເພີ່ມ​ເຕີມ"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ສະຖານທີ່"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ສັນຍາລັກ"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"​ອີ​ໂມ​ຕິ​ຄອນ"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"ໂຕ​ພິມ​ໃຫຍ່ <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"ໂຕ​ພິມ​ໃຫຍ່ I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"​ໂຕພິມ​ໃຫຍ່ I ມີ​ຈ້ຳ​ເມັດ​ຢູ່​ເທິງ"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"ສັນ​ຍາ​ລັກ​ທີ່ບໍ່​ຮູ້​ຈັກ"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"ອີ​ໂມ​ຈິ​ທີ່ບໍ່​ຮູ້​ຈັກ"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"​ມີ​ໂຕ​ອັກ​ສອນ​ສຳ​ຮອງ​ໃຫ້​ເລືອກ"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"​ປິດ​ໂຕ​ອັກ​ສອນ​ສຳ​ຮອງ​ແລ້ວ"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"​ມີ​ຄຳ​ແນະ​ນຳ​ສຳ​ຮອງ​ໃຫ້​ເລືອກ"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"​ປິດ​ການ​ແນະ​ນຳ​ສຳ​ຮອງ​ແລ້ວ"</string>
</resources>
diff --git a/java/res/values-lo-rLA/strings.xml b/java/res/values-lo-rLA/strings.xml
index c8ef7acea..8947a8b30 100644
--- a/java/res/values-lo-rLA/strings.xml
+++ b/java/res/values-lo-rLA/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"ແນະນຳລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"ໃຊ້ຊື່ຈາກລາຍຊື່ຜູ່ຕິດຕໍ່ສຳລັບການແນະນຳ ແລະ ການຊ່ວຍແກ້ຄຳ"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"ຄຳແນະນຳຕາມການນຳໃຊ້ຂອງທ່ານ"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"ປັບ​ປຸງ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"ຍະຫວ່າງສອງເທື່ອເພື່ອໃສ່ຈ້ຳເມັດ"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"ກົດທີ່ປຸ່ມຍະຫວ່າງສອງເທື່ອເພື່ອໃສ່ຈ້ຳເມັດແລ້ວຕາມດ້ວຍການຍະຫວ່າງ"</string>
<string name="auto_cap" msgid="1719746674854628252">"ເຮັດໂຕພິມໃຫຍ່ອັດຕະໂນມັດ"</string>
diff --git a/java/res/values-mn-rMN/strings-action-keys.xml b/java/res/values-mn-rMN/strings-action-keys.xml
index a855386d0..8ebb5bb1f 100644
--- a/java/res/values-mn-rMN/strings-action-keys.xml
+++ b/java/res/values-mn-rMN/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Өмнөх"</string>
<string name="label_done_key" msgid="7564866296502630852">"Дууссан"</string>
<string name="label_send_key" msgid="482252074224462163">"Илгээх"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Хайлт"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Түр зогсоох"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Хүлээх"</string>
</resources>
diff --git a/java/res/values-mn-rMN/strings-letter-descriptions.xml b/java/res/values-mn-rMN/strings-letter-descriptions.xml
new file mode 100644
index 000000000..b8f8d85e3
--- /dev/null
+++ b/java/res/values-mn-rMN/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Эм хүйсийн дугаар заагч"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Микро тэмдэг"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Эр хүйсийн дугаар заагч"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Хурц S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"А, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"А, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"А, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"А, долгионтой"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"А, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, дээрээ цагирагтай"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, залгагдсан"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Зураастай ди"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, долгионтой"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, долгионтой"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, хөндлөн зураастай"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Гэдэстэй багана"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, хоёр цэгтэй"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, хөндлөн малгайтай"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"А, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"А, сүүлтэй"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"С, дээрээ цэгтэй"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, хөндлөн зураастай"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, хөндлөн малгайтай"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, дээрээ цэгтэй"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, сүүлтэй"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, дээрээ цэгтэй"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, хөндлөн зураастай"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, долгионтой"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, хөндлөн малгайтай"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, сүүлтэй"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Цэггүй I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, залгагдсан"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Кра"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, дунд цэгтэй"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, хөндлөн зураастай"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N,"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Инг"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, хөндлөн малгайтай"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, давхар баруун малгайтай"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, залгагдсан"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, дэвсгэртэй"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, хөндлөн зураастай"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, долгионтой"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, хөндлөн малгайтай"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, тавган малгайтай"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, дээрээ цагирагтай"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, давхар баруун малгайтай"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, сүүлтэй"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, дээвэр малгайтай"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, баруун малгайтай"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, дээрээ цэгтэй"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, аяган малгайтай"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Урт S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, эвэртэй"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, эвэртэй"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, доор таслалтай"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, доор таслалтай"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Шва"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"А, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"А, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, дээвэр болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"А, дээвэр болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"А, дээвэр болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"А, дээвэр болон долгионтой"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"А, дээвэр болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"А, тавган болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"А, тавган болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"А, тавган болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"А, тавган болон долгионтой"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"А, тавган болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, долгионтой"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, дээвэр болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, дээвэр болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, дээвэр болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, дээвэр болон долгионтой"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, дээвэр болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, дээвэр болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, дээвэр болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, дээвэр болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, дээвэр болон долгионтой"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, дээвэр болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, эвэр болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, эвэр болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, эвэр болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, эвэр болон долгионтой"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, эвэр болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, эвэр болон баруун малгайтай"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, эвэр болон зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, эвэр болон дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, эвэр болон долгионтой"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, эвэр болон доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, зүүн малгайтай"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, доор цэгтэй"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, дээр дэгээтэй"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, долгионтой"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Урвуу анхаарлын тэмдэг"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Зүүн заасан давхар хашилт"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Дунд цэг"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Мөрний дээрх нэг"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Баруун заасан давхар хашилт"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Урвуу асуултын тэмдэг"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Зүүн дан хашилт"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Баруун дан хашилт"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Дан доогуур-9 хашилт"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Зүүн давхар хашилт"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Баруун давхар хашилт"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Чинжаал"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Давхар чинжаал"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Нэг мильд тэмдэг"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Штрих"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Давхар штрих"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Зүүн заасан дан хашилт"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Баруун заасан дан хашилт"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Мөрний дээрх дөрөв"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Мөрний дээрх жижиг латин n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Песо тэмдэг"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Анхааралд"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Баруун сум"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Доош сум"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Хоосон олонлог"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Өсөлт"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Бага буюу тэнцүү"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Их буюу тэнцүү"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Хар од"</string>
+</resources>
diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
index 1c1e6e7f3..d2c583e5a 100644
--- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml
+++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст оруулаагүй"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> нь <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>-г <xliff:g id="CORRECTED_WORD">%3$s</xliff:g> руу залруулна"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> авто-залруулалт хийдэг"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Үл мэдэгдэх тэмдэгт"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Шифт"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Өөр тэмдэгтүүд"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Шифт"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Газар"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Симбол"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Эмотикон"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Том <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Том I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Том I, дээрээ цэгтэй"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Үл мэдэгдэх симбол"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Үл мэдэгдэх эможи"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Бусад тэмдэгтүүд ашиглах боломжтой"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Бусад тэмдэгтүүдийг хаагдсан"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Бусад санал болголтууд ашиглах боломжтой"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Бусад санал болголтууд хаагдсан"</string>
</resources>
diff --git a/java/res/values-mn-rMN/strings.xml b/java/res/values-mn-rMN/strings.xml
index bfce751af..67e8b4ef0 100644
--- a/java/res/values-mn-rMN/strings.xml
+++ b/java/res/values-mn-rMN/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"Харилцагчдын нэрс санал болгох"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Санал болгох, залруулахда Харилцагчдын нэрсээс ашиглах"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"Хувийн тохиргоотой зөвлөмжүүд"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> сайжруулах"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Давхар зайтай цэг"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Ардаа зайтай цэг оруулахын тулд Зай авах дээр давхар товшино уу"</string>
<string name="auto_cap" msgid="1719746674854628252">"Автоматаар томруулах"</string>
diff --git a/java/res/values-pt-rPT/strings-action-keys.xml b/java/res/values-pt-rPT/strings-action-keys.xml
index 1b5921f3e..73a6c498f 100644
--- a/java/res/values-pt-rPT/strings-action-keys.xml
+++ b/java/res/values-pt-rPT/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Conc."</string>
<string name="label_send_key" msgid="482252074224462163">"Env."</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Pesquisar"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-pt-rPT/strings-letter-descriptions.xml b/java/res/values-pt-rPT/strings-letter-descriptions.xml
new file mode 100644
index 000000000..377b1578f
--- /dev/null
+++ b/java/res/values-pt-rPT/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Indicador ordinal feminino"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Sinal de micro"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Indicador ordinal masculino"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"S curto"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, agudo"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circunflexo"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, til"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diérese"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, anel sobreposto"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligadura"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilha"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, agudo"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circunflexo"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diérese"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, agudo"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circunflexo"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diérese"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, til"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, agudo"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circunflexo"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, til"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diérese"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, traço"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, agudo"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circunflexo"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diérese"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, agudo"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diérese"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, mácron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, agudo"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circunflexo"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, ponto sobreposto"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, traço"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, mácron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, ponto sobreposto"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circunflexo"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, ponto sobreposto"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilha"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circunflexo"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, traço"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, til"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, mácron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I sem ponto"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligadura"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circunflexo"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilha"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, agudo"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilha"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, ponto intermédio"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, traço"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, agudo"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilha"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, precedido de apóstrofe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, mácron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, duplo agudo"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligadura"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, agudo"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilha"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, agudo"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circunflexo"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilha"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilha"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, traço"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, til"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, mácron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, anel sobreposto"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, duplo agudo"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circunflexo"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circunflexo"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, agudo"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, ponto sobreposto"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"S longo"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, chifre"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, chifre"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, vírgula subposta"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, vírgula subposta"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, ponto subposto"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circunflexo e agudo"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circunflexo e grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circunflexo e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circunflexo e til"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circunflexo e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve e agudo"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve e grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve e til"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, ponto subposto"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, til"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circunflexo e agudo"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circunflexo e grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circunflexo e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circunflexo e til"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circunflexo e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, ponto subposto"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, ponto subposto"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circunflexo e agudo"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circunflexo e grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circunflexo e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circunflexo e til"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circunflexo e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, chifre e agudo"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, chifre e grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, chifre e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, chifre e til"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, chifre e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, ponto subposto"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, chifre e agudo"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, chifre e grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, chifre e gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, chifre e til"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, chifre e ponto subposto"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, ponto subposto"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, gancho sobreposto"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, til"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Ponto de exclamação invertido"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Aspas angulares duplas esquerdas"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Ponto intermédio"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Um sobrescrito"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Aspas angulares duplas direitas"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Ponto de interrogação invertido"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Aspa simples esquerda"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Aspa simples direita"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Aspa simples subposta"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Aspas duplas esquerdas"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Aspas duplas direitas"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Adaga"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Adaga dupla"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Sinal de permilagem"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Plica"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Plica dupla"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Aspa angular simples esquerda"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Aspa angular simples direita"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Quatro sobrescrito"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"N latino minúsculo sobrescrito"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Sinal de peso"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Ao cuidado de"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Seta para a direita"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Seta para baixo"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Conjunto vazio"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Delta"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Menor do que ou igual a"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Maior do que ou igual a"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Estrela negra"</string>
+</resources>
diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
index 91d187ec9..30bbd3fb3 100644
--- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml
+++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Nenhum texto digitado"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corrige <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> para <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> executa a correção automática"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Caráter desconhecido"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locais"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Ícones expressivos"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"<xliff:g id="LOWER_LETTER">%s</xliff:g> maiúsculo"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"I maiúsculo"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"I maiúsculo, ponto sobreposto"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Símbolo desconhecido"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Emoji desconhecido"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Os carateres alternativos estão disponíveis"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Os carateres alternativos são ignorados"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"As sugestões alternativas estão disponíveis"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"As sugestões alternativas são ignoradas"</string>
</resources>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 7db5ccf6c..212958800 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Melhorar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-ro/strings-action-keys.xml b/java/res/values-ro/strings-action-keys.xml
index bee4b12ea..1a1541529 100644
--- a/java/res/values-ro/strings-action-keys.xml
+++ b/java/res/values-ro/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Înap."</string>
<string name="label_done_key" msgid="7564866296502630852">"Gata"</string>
<string name="label_send_key" msgid="482252074224462163">"Trim."</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Căutați"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Pauză"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Așt."</string>
</resources>
diff --git a/java/res/values-ro/strings-letter-descriptions.xml b/java/res/values-ro/strings-letter-descriptions.xml
new file mode 100644
index 000000000..46cbd1adb
--- /dev/null
+++ b/java/res/values-ro/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Indicator de ordine feminin"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Semnul miu"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Indicator de ordine masculin"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"S ascuțit"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, accent grav"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, accent circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tildă"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, semn diacritic"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, cerc deasupra"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligatură"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, sedilă"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, accent grav"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, accent circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, semn diacritic"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, accent grav"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, accent circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, semn diacritic"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tildă"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, accent grav"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, accent circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tildă"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, semn diacritic"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, tăiat cu linie"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, accent grav"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, accent circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, semn diacritic"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, accent ascuțit"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, semn diacritic"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, căciulă"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, accent ascuțit"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, accent circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, punct deasupra"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, tăiat cu linie"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, căciulă"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, punct deasupra"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, accent circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, căciulă"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, punct deasupra"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, sedilă"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, accent circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, tăiat cu linie"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tildă"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, căciulă"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I fără punct"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligatură"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, accent circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, sedilă"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, accent ascuțit"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, sedilă"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, punct la mijloc"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, tăiat cu linie"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, accent ascuțit"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, sedilă"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, precedat de apostrof"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, căciulă"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, accent ascuțit dublu"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligatură"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, accent ascuțit"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, sedilă"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, accent ascuțit"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, accent circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, sedilă"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, sedilă"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, tăiat cu linie"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tildă"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, căciulă"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, cerc deasupra"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, accent ascuțit dublu"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, accent circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, accent circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, accent ascuțit"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, punct deasupra"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"S lung"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, corn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, corn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, virgulă dedesubt"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, virgulă dedesubt"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, accent circumflex și ascuțit"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, accent circumflex și grav"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, accent circumflex și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, accent circumflex și tildă"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, accent circumflex și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, căciulă și accent ascuțit"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, căciulă și accent grav"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, căciulă și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, căciulă și tildă"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, căciulă și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tildă"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, accent circumflex și ascuțit"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, accent circumflex și grav"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, accent circumflex și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, accent circumflex și tildă"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, accent circumflex și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, accent circumflex și ascuțit"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, accent circumflex și grav"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, accent circumflex și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, accent circumflex și tildă"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, accent circumflex și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, corn și accent ascuțit"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, corn și accent grav"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, corn și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, corn și tildă"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, corn și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, corn și accent ascuțit"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, corn și accent grav"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, corn și cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, corn și tildă"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, corn și punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, accent grav"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, punct dedesubt"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, cârlig deasupra"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tildă"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Semnul exclamării inversat"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Ghilimele duble la stânga"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Punct la mijloc"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Unu exponent"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Ghilimele duble la dreapta"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Semnul întrebării inversat"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Ghilimele simple la stânga"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Ghilimele simple la dreapta"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Ghilimele simple jos"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Ghilimele duble la stânga"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Ghilimele duble la dreapta"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Cruce"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Cruce dublă"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Semnul la mie"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prim"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Prim dublu"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Ghilimele simple la stânga"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Ghilimele simple la dreapta"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Patru exponent"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"n latin exponent"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Semnul peso"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"În atenția"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Săgeată la dreapta"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Săgeată în jos"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Zero barat"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Increment"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Mai mic sau egal cu"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Mai mare sau egal cu"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Stea neagră"</string>
+</resources>
diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml
index 6e5db4d02..52885c84d 100644
--- a/java/res/values-ro/strings-talkback-descriptions.xml
+++ b/java/res/values-ro/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Nu a fost introdus text"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> corectează <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> cu <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> efectuează corectare automată"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Caracter necunoscut"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mai multe simboluri"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locații"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboluri"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticonuri"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"<xliff:g id="LOWER_LETTER">%s</xliff:g> mare"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"I mare"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"I mare, punct deasupra"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Simbol necunoscut"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Emoji necunoscut"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Sunt disponibile caracterele alternative"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"S-au închis caracterele alternative"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Sunt disponibile sugestiile alternative"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"S-au închis sugestiile alternative"</string>
</resources>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 628b1a2e1..8e1bb1cb0 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Îmbunătățiți <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-sk/strings-action-keys.xml b/java/res/values-sk/strings-action-keys.xml
index ffc5be2d6..84e1c3172 100644
--- a/java/res/values-sk/strings-action-keys.xml
+++ b/java/res/values-sk/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Pred."</string>
<string name="label_done_key" msgid="7564866296502630852">"OK"</string>
<string name="label_send_key" msgid="482252074224462163">"Posl."</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Hľadať"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Čakať"</string>
</resources>
diff --git a/java/res/values-sk/strings-letter-descriptions.xml b/java/res/values-sk/strings-letter-descriptions.xml
new file mode 100644
index 000000000..e6bba4a8a
--- /dev/null
+++ b/java/res/values-sk/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Indikátor radovej číslovky ženského rodu"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Znak mikro"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Indikátor radovej číslovky mužského rodu"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Ostré S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A s dĺžňom"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A s vokáňom"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A s vlnovkou"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A s krúžkom"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"Ligatúra písmen A, E"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E s dĺžňom"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E s vokáňom"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I s dĺžňom"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I s vokáňom"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N s vlnovkou"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O s dĺžňom"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O s vokáňom"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O s vlnovkou"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"Prečiarknuté O"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U s dĺžňom"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U s vokáňom"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y s dĺžňom"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y s dvoma bodkami"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A s vodorovnou čiarkou"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A s oblúčikom"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A s nožičkou"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C s dĺžňom"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C s vokáňom"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C s bodkou nad písmenom"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C s mäkčeňom"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D s mäkčeňom"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"Prečiarknuté D"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E s vodorovnou čiarkou"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E s oblúčikom"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E s bodkou nad písmenom"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E s nožičkou"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E s mäkčeňom"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G s vokáňom"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G s oblúčikom"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G s bodkou nad písmenom"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H s vokáňom"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"Prečiarknuté H"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I s vlnovkou"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I s vodorovnou čiarkou"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I s oblúčikom"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I s nožičkou"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I bez bodky"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"Ligatúra písmen I, J"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J s vokáňom"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L s dĺžňom"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L s mäkčeňom"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L s bodkou uprostred"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"Prečiarknuté L"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N s dĺžňom"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N s mäkčeňom"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N s apostrofom na začiatku"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O s vodorovnou čiarkou"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O s oblúčikom"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O s dvoma dĺžňami"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"Ligatúra písmen O, E"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R s dĺžňom"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R s mäkčeňom"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S s dĺžňom"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S s vokáňom"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S s mäkčeňom"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T s háčikom pod písmenom"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T s mäkčeňom"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"Prečiarknuté T"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U s vlnovkou"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U s vodorovnou čiarkou"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U s oblúčikom"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U s krúžkom"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U s dvoma dĺžňami"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U s nožičkou"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W s vokáňom"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y s vokáňom"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z s dĺžňom"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z s bokou nad písmenom"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z s mäkčeňom"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Dlhé S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O s rohom"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U s rohom"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S s čiarkou pod písmenom"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T s čiarkou pod písmenom"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A s vokáňom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A s vokáňom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A s vokáňom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A s vokáňom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A s vokáňom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A s oblúčikom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A s oblúčikom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A s oblúčikom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A s oblúčikom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A s oblúčikom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E s vlnovkou"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E s vokáňom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E s vokáňom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E s vokáňom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E s vokáňom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E s vokáňom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O s vokáňom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O s vokáňom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O s vokáňom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O s vokáňom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O s vokáňom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O s rohom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O s rohom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O s rohom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O s rohom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O s rohom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U s rohom aj dĺžňom"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U s rohom aj opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U s rohom aj háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U s rohom aj vlnovkou"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U s rohom aj bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y s opačným dĺžňom"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y s bodkou pod písmenom"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y s háčikom nad písmenom"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y s vlnovkou"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Obrátený výkričník"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Lomené ľavé dvojité úvodzovky"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Bodka uprostred"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Jednotka v hornom indexe"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Lomené pravé dvojité úvodzovky"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Obrátený otáznik"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Ľavé jednoduché úvodzovky"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Pravé jednoduché úvodzovky"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Dolné jednoduché úvodzovky"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Ľavé dvojité úvodzovky"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Pravé dvojité úvodzovky"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Krížik"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Dvojitý krížik"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Znak promile"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Indexová čiarka"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Dvojitá indexová čiarka"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Jednoduché ľavé úvodzovky"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Jednoduché pravé úvodzovky"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Štvorka v hornom indexe"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Latinka – malé písmeno n v hornom indexe"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Znak pesa"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Malé písmená c a o oddelené lomkou"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Šípka vpravo"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Šípka nadol"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Prázdna množina"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Prírastok"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Menšie alebo rovné ako"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Väčšie alebo rovné ako"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Čierna hviezda"</string>
+</resources>
diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml
index 9fde012b3..2cd094ee1 100644
--- a/java/res/values-sk/strings-talkback-descriptions.xml
+++ b/java/res/values-sk/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Nie je zadaný žiadny text"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"Klávesom <xliff:g id="KEY_NAME">%1$s</xliff:g> opravíte slovo <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> na <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Klávesom <xliff:g id="KEY_NAME">%1$s</xliff:g> spustíte automatické opravy"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Neznámy znak"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Ďalšie symboly"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Miesta"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboly"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Veľké písmeno – <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Veľké I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Veľké I s bodkou nad písmenom"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Neznámy symbol"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Neznámy symbol Emodži"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Alternatívne znaky sú dostupné"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Alternatívne znaky boli zrušené"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Alternatívne návrhy sú dostupné"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Alternatívne návrhy boli zrušené"</string>
</resources>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index f439bd0ff..023193bf6 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Zlepšiť aplikáciu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Bodka s medzerou"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Dvojitým klepnutím na medzerník vložíte bodku a medzeru."</string>
<string name="auto_cap" msgid="1719746674854628252">"Veľké písmená automaticky"</string>
diff --git a/java/res/values-uk/strings-action-keys.xml b/java/res/values-uk/strings-action-keys.xml
index 8b71498c1..206fcf0da 100644
--- a/java/res/values-uk/strings-action-keys.xml
+++ b/java/res/values-uk/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
<string name="label_done_key" msgid="7564866296502630852">"ОК"</string>
<string name="label_send_key" msgid="482252074224462163">"Слати"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Пошук"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Ждати"</string>
</resources>
diff --git a/java/res/values-uk/strings-letter-descriptions.xml b/java/res/values-uk/strings-letter-descriptions.xml
new file mode 100644
index 000000000..1199771a4
--- /dev/null
+++ b/java/res/values-uk/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Індикатор порядкового числівника жіночого роду"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Знак мікро"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Індикатор порядкового числівника чоловічого роду"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Есцет"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, гравіс"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, акут"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, циркумфлекс"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, тильда"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, трема"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, кільце вгорі"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, лігатура"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, седиль"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, гравіс"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, акут"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, циркумфлекс"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, трема"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, гравіс"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, акут"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, циркумфлекс"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, трема"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Ет"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, тильда"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, гравіс"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, акут"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, циркумфлекс"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, тильда"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, трема"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, риска"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, гравіс"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, акут"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, циркумфлекс"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, трема"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, акут"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Торн"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, трема"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, макрон"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, бреве"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, хвостик"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, акут"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, циркумфлекс"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, крапка вгорі"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, гачек"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, гачек"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, риска"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, макрон"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, бреве"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, крапка вгорі"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, хвостик"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, гачек"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, циркумфлекс"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, бреве"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, крапка вгорі"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, седиль"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, циркумфлекс"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, риска"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, тильда"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, макрон"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, бреве"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, хвостик"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I без крапки"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, лігатура"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, циркумфлекс"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, седиль"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Кра"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, акут"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, седіль"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, гачек"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, інтерпункт"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, риска"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, акут"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, седиль"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, гачек"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, після апострофа"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Енг"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, макрон"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, бреве"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, подвійний акут"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, лігатура"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, акут"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, седиль"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, гачек"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, акут"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, циркумфлекс"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, седиль"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, гачек"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, седиль"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, гачек"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, риска"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, тильда"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, макрон"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, бреве"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, кільце вгорі"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, подвійний акут"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, хвостик"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, циркумфлекс"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, циркумфлекс"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, акут"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, крапка вгорі"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, гачек"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Довгий звук S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, ріг"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, ріг"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, кома внизу"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, кома внизу"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Шва"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, крапка внизу"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, гачок угорі"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, циркумфлекс і акут"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, циркумфлекс і гравіс"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, циркумфлекс і гачок угорі"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, циркумфлекс і тильда"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, циркумфлекс і крапка внизу"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, бреве й акут"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, бреве та гравіс"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, бреве та гачок угорі"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, бреве та тильда"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, бреве та крапка внизу"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, крапка внизу"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, гачок угорі"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, тильда"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, циркумфлекс і акут"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, циркумфлекс і гравіс"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, циркумфлекс і гачок угорі"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, циркумфлекс і тильда"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, циркумфлекс і крапка внизу"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, гачок угорі"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, крапка внизу"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, крапка внизу"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, гачок угорі"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, циркумфлекс і акут"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, циркумфлекс і гравіс"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, циркумфлекс і гачок угорі"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, циркумфлекс і тильда"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, циркумфлекс і крапка внизу"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, ріг і акут"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, ріг і гравіс"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, ріг і гачок угорі"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, ріг і тильда"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, ріг і крапка внизу"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, крапка внизу"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, гачок угорі"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, ріг і акут"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, ріг і гравіс"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, ріг і гачок угорі"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, ріг і тильда"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, ріг і крапка внизу"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, гравіс"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, крапка внизу"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, гачок угорі"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, тильда"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Перевернутий знак оклику"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Ліві подвійні кутові лапки"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Інтерпункт"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Верхній індекс, один"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Праві подвійні кутові лапки"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Перевернутий знак запитання"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Ліві одинарні лапки"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Праві одинарні лапки"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Ліві нижні одинарні лапки"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Ліві подвійні лапки"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Праві подвійні лапки"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Хрестик"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Подвійний хрестик"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Знак проміле"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Штрих"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Подвійний штрих"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Ліві одинарні кутові лапки"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Праві одинарні кутові лапки"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Верхній індекс, чотири"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Верхній індекс, мала латинська літера n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Знак песо"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Через"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Стрілка праворуч"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Стрілка вниз"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Порожня множина"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Крок"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Менше або дорівнює"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Більше або дорівнює"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Чорна зірка"</string>
+</resources>
diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml
index e4df115ae..80e471052 100644
--- a/java/res/values-uk/strings-talkback-descriptions.xml
+++ b/java/res/values-uk/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Текст не введено"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> виправляє слово \"<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>\" на \"<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>\""</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> автоматично виправляє"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Невідомий символ"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Більше символів"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Клавіша Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Місця"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символи"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Смайли"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Велика <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Велика I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Велика I, крапка вгорі"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Невідомий символ"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Невідомий смайл Emoji"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Доступні альтернативні символи"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Альтернативні символи відхилено"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Доступні альтернативні пропозиції"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Альтернативні пропозиції відхилено"</string>
</resources>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 1d146a511..a7fcfd440 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -46,8 +46,7 @@
<string name="use_contacts_dict" msgid="4435317977804180815">"Пропон. імена контактів"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"Використ. імена зі списку контактів для пропозицій і виправлень"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"Персональні пропозиції"</string>
- <!-- no translation found for enable_metrics_logging (5506372337118822837) -->
- <skip />
+ <string name="enable_metrics_logging" msgid="5506372337118822837">"Покращувати додаток <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Крапка подвійним пробілом"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Подвійне натискання пробілу вставляє крапку з пробілом після неї"</string>
<string name="auto_cap" msgid="1719746674854628252">"Авто викор. вел. літер"</string>
diff --git a/java/res/values-vi/strings-action-keys.xml b/java/res/values-vi/strings-action-keys.xml
index 16b7c959e..3c4060883 100644
--- a/java/res/values-vi/strings-action-keys.xml
+++ b/java/res/values-vi/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Trước"</string>
<string name="label_done_key" msgid="7564866296502630852">"Xong"</string>
<string name="label_send_key" msgid="482252074224462163">"Gửi"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Tìm kiếm"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Tdừng"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Đợi"</string>
</resources>
diff --git a/java/res/values-vi/strings-letter-descriptions.xml b/java/res/values-vi/strings-letter-descriptions.xml
new file mode 100644
index 000000000..74f199f08
--- /dev/null
+++ b/java/res/values-vi/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Chỉ báo thứ tự giống cái"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Ký hiệu micrô"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Chỉ báo thứ tự giống đực"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, dấu huyền"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, dấu sắc"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, dấu mũ"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, dấu ngã"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, dấu nhẫn phía trên"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, dấu gạch nối"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, dấu huyền"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, dấu sắc"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, dấu mũ"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, dấu huyền"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, dấu sắc"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, dấu mũ"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, dấu ngã"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, dấu huyền"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, dấu sắc"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, dấu mũ"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, dấu ngã"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, nét gạch"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, dấu huyền"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, dấu sắc"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, dấu mũ"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, dấu sắc"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Dấu móc"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, dấu tách đôi"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, sự làm dấu"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, dấu ngân"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, một cái đuôi nhỏ"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, dấu sắc"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, dấu mũ"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, dấu chấm phía trên"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, nét gạch"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, sự làm dấu"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, dấu ngân"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, dấu chấm phía trên"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, một cái đuôi nhỏ"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, dấu mũ"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, dấu ngân"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, dấu chấm phía trên"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, dấu mũ"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, nét gạch"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, dấu ngã"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, sự làm dấu"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, dấu ngân"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, một cái đuôi nhỏ"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"I không dấu chấm"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, dấu gạch nối"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, dấu mũ"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, dấu sắc"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, chấm ở giữa"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, nét gạch"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, dấu sắc"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, theo sau dấu móc lửng"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, sự làm dấu"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, dấu ngân"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, hai dấu sắc"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, dấu gạch nối"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, dấu sắc"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, dấu sắc"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, dấu mũ"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, dấu móc dưới"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, nét gạch"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, dấu ngã"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, sự làm dấu"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, dấu ngân"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, dấu nhẫn ở trên"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, hai dấu sắc"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, một cái đuôi nhỏ"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, dấu mũ"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, dấu mũ"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, dấu sắc"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, dấu chấm phía trên"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, dấu mũ ngược"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"S dài"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, dấu móc"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, dấu móc"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, dấu phẩy phía dưới"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, dấu phẩy phía dưới"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Âm Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, dấu móc phía trên"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, dấu mũ và dấu sắc"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, dấu mũ và dấu huyền"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, dấu mũ và móc phía trên"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, dấu mũ và dấu ngã"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, dấu mũ và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, dấu ngân và dấu sắc"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, dấu ngân và dấu huyền"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, dấu ngân và móc phía trên"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, dấu ngân và dấu ngã"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, dấu ngân và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, móc phía trên"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, dấu ngã"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, dấu mũ và dấu sắc"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, dấu mũ và dấu huyền"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, dấu mũ và móc phía trên"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, dấu mũ và dấu ngã"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, dấu mũ và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, móc phía trên"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, móc phía trên"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, dấu mũ và dấu sắc"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, dấu mũ và dấu huyền"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, dấu mũ và móc phía trên"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, dấu mũ và dấu ngã"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, dấu mũ và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, dấu móc và dấu sắc"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, dấu móc và dấu huyền"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, dấu móc và móc phía trên"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, dấu móc và dấu ngã"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, dấu móc và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, móc phía trên"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, dấu móc và dấu sắc"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, dấu móc và dấu huyền"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, dấu móc và móc phía trên"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, dấu móc và dấu ngã"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, dấu móc và dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, dấu huyền"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, dấu chấm phía dưới"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, móc phía trên"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, dấu ngã"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Dấu cảm thán đảo ngược"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Dấu ngoặc kép mở"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Dấu chấm ở giữa"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"Chỉ số trên một"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Dấu ngoặc kép đóng"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Dấu hỏi đảo ngược"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Dấu ngoặc đơn mở"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Dấu ngoặc đơn đóng"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Dấu trích dẫn đơn"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Dấu ngoặc kép mở"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Dấu ngoặc kép đóng"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dấu chữ thập"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Dấu chữ thập kép"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Dấu cho mỗi ngàn"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Dấu phẩy"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Hai phẩy"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Dấu ngoặc đơn mở"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Dấu ngoặc đơn đóng"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Chỉ số trên bốn"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"Chỉ số trên của n thường"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Ký hiệu đồng Pêsô"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Dấu phần trăm"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Mũi tên về phía phải"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Mũi tên xuống dưới"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Tập rỗng"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Tăng dần"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Nhỏ hơn hoặc bằng"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Lớn hơn hoặc bằng"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Sao đen"</string>
+</resources>
diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml
index ad63fa52f..659b1d36f 100644
--- a/java/res/values-vi/strings-talkback-descriptions.xml
+++ b/java/res/values-vi/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Không có ký tự nào được nhập"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g> sửa <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> thành <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> tự động sửa"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Ký tự không xác định"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Biểu tượng khác"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Địa điểm"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Biểu tượng"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Biểu tượng cảm xúc"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"<xliff:g id="LOWER_LETTER">%s</xliff:g> hoa"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"I hoa"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"I hoa, dấu chấm phía trên"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Ký hiệu không xác định"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"Biểu tượng cảm xúc không xác định"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Có ký tự thay thế"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Ký tự thay thế đã bị loại bỏ"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Có đề xuất thay thế"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Đề xuất thay thế đã bị loại bỏ"</string>
</resources>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 100175f63..d95ff61f7 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Cải thiện <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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-zu/strings-action-keys.xml b/java/res/values-zu/strings-action-keys.xml
index 5d60a6cca..fe36678e8 100644
--- a/java/res/values-zu/strings-action-keys.xml
+++ b/java/res/values-zu/strings-action-keys.xml
@@ -25,8 +25,7 @@
<string name="label_previous_key" msgid="1421141755779895275">"Okwedlule"</string>
<string name="label_done_key" msgid="7564866296502630852">"Kwenziwe"</string>
<string name="label_send_key" msgid="482252074224462163">"Thumela"</string>
- <!-- no translation found for label_search_key (7965186050435796642) -->
- <skip />
+ <string name="label_search_key" msgid="7965186050435796642">"Sesha"</string>
<string name="label_pause_key" msgid="2225922926459730642">"Misa isikhashana"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Linda"</string>
</resources>
diff --git a/java/res/values-zu/strings-letter-descriptions.xml b/java/res/values-zu/strings-letter-descriptions.xml
new file mode 100644
index 000000000..54eb6e5ff
--- /dev/null
+++ b/java/res/values-zu/strings-letter-descriptions.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 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.
+*/
+ -->
+
+<!--
+ These accented letters (spoken_accented_letter_*) are unsupported by TTS.
+ These symbols (spoken_symbol_*) are also unsupported by TTS.
+ TODO: Remove these string resources when TTS/TalkBack support these letters.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"Isikhombi sobesifazane"</string>
+ <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"Uphawu olukhulu"</string>
+ <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"Isikhombi sowesilisa"</string>
+ <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"Sharp S"</string>
+ <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"A, grave"</string>
+ <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"A, acute"</string>
+ <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"A, circumflex"</string>
+ <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"A, tilde"</string>
+ <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"A, diaeresis"</string>
+ <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"A, ring ngenhla"</string>
+ <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"A, E, ligature"</string>
+ <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"C, cedilla"</string>
+ <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"E, grave"</string>
+ <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"E, acute"</string>
+ <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"E, circumflex"</string>
+ <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"E, diaeresis"</string>
+ <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"I, grave"</string>
+ <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"I, acute"</string>
+ <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"I, circumflex"</string>
+ <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"I, diaeresis"</string>
+ <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"Eth"</string>
+ <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"N, tilde"</string>
+ <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"O, grave"</string>
+ <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"O, acute"</string>
+ <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"O, circumflex"</string>
+ <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"O, tilde"</string>
+ <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"O, diaeresis"</string>
+ <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"O, stroke"</string>
+ <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"U, grave"</string>
+ <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"U, acute"</string>
+ <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"U, circumflex"</string>
+ <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"U, diaeresis"</string>
+ <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Y, acute"</string>
+ <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"Thorn"</string>
+ <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Y, diaeresis"</string>
+ <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"A, macron"</string>
+ <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"A, breve"</string>
+ <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"A, ogonek"</string>
+ <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"C, acute"</string>
+ <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"C, circumflex"</string>
+ <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"C, icashazi ngenhla"</string>
+ <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"C, caron"</string>
+ <string name="spoken_accented_letter_010F" msgid="603374318657992205">"D, caron"</string>
+ <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"D, stroke"</string>
+ <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"E, macron"</string>
+ <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"E, breve"</string>
+ <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"E, icashazi ngenhla"</string>
+ <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"E, ogonek"</string>
+ <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"E, caron"</string>
+ <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"G, circumflex"</string>
+ <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"G, breve"</string>
+ <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"G, icashazi ngenhla"</string>
+ <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"G, cedilla"</string>
+ <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"H, circumflex"</string>
+ <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"H, stroke"</string>
+ <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"I, tilde"</string>
+ <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"I, macron"</string>
+ <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"I, breve"</string>
+ <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"I, ogonek"</string>
+ <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"Dotless I"</string>
+ <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J, ligature"</string>
+ <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"J, circumflex"</string>
+ <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"K, cedilla"</string>
+ <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"Kra"</string>
+ <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"L, acute"</string>
+ <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"L, cedilla"</string>
+ <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"L, caron"</string>
+ <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"L, icashazi eliphakathi"</string>
+ <string name="spoken_accented_letter_0142" msgid="752931798111122240">"L, stroke"</string>
+ <string name="spoken_accented_letter_0144" msgid="201843550323875352">"N, acute"</string>
+ <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"N, cedilla"</string>
+ <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"N, caron"</string>
+ <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"N, kulandele i-apostrophe"</string>
+ <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"Eng"</string>
+ <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"O, macron"</string>
+ <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"O, breve"</string>
+ <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"O, double acute"</string>
+ <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"O, E, ligature"</string>
+ <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"R, acute"</string>
+ <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"R, cedilla"</string>
+ <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"R, caron"</string>
+ <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"S, acute"</string>
+ <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"S, circumflex"</string>
+ <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"S, cedilla"</string>
+ <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"S, caron"</string>
+ <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"T, cedilla"</string>
+ <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"T, caron"</string>
+ <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"T, stroke"</string>
+ <string name="spoken_accented_letter_0169" msgid="413046581387735371">"U, tilde"</string>
+ <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"U, macron"</string>
+ <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"U, breve"</string>
+ <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"U, indingilizi ngenhla"</string>
+ <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"U, double acute"</string>
+ <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"U, ogonek"</string>
+ <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"W, circumflex"</string>
+ <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"Y, circumflex"</string>
+ <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"Z, acute"</string>
+ <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Z, icashazi ngenhla"</string>
+ <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"Z, caron"</string>
+ <string name="spoken_accented_letter_017F" msgid="317501463253362415">"Long S"</string>
+ <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"O, horn"</string>
+ <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"U, horn"</string>
+ <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"S, ukhefana ngezansi"</string>
+ <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"T, ukhefana ngezansi"</string>
+ <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"Schwa"</string>
+ <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"A, icashazi ngenhla"</string>
+ <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"A, ihhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"A, circumflex ne-acute"</string>
+ <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"A, circumflex ne-grave"</string>
+ <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"A, circumflex nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"A, circumflex ne-tilde"</string>
+ <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"A, circumflex necashazi ngenhla"</string>
+ <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"A, breve ne-acute"</string>
+ <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"A, breve ne-grave"</string>
+ <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"A, breve nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"A, breve ne-tilde"</string>
+ <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"A, breve necashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"E, icashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"E, ihhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"E, tilde"</string>
+ <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"E, circumflex ne-acute"</string>
+ <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"E, circumflex ne-grave"</string>
+ <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"E, circumflex nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"E, circumflex ne-tilde"</string>
+ <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"E, circumflex necashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"I, ihhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"I, icashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"O, icashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"O, ihhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"O, circumflex ne-acute"</string>
+ <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"O, circumflex ne-grave"</string>
+ <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"O, circumflex nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"O, circumflex ne-tilde"</string>
+ <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"O, circumflex necashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"O, horn ne-acute"</string>
+ <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"O, horn ne-grave"</string>
+ <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"O, horn nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"O, horn ne-tilde"</string>
+ <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"O, horn necashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"U, icashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"U, uhhuku ngehla"</string>
+ <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"U, horn ne-acute"</string>
+ <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"U, horn ne-grave"</string>
+ <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"U, horn nehhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"U, horn ne-tilde"</string>
+ <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"U, horn necashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Y, grave"</string>
+ <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"Y, icashazi ngezansi"</string>
+ <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"Y, ihhuku ngenhla"</string>
+ <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"Y, tilde"</string>
+ <string name="spoken_symbol_00A1" msgid="4281758332905123408">"Umbabazi okokushiwo"</string>
+ <string name="spoken_symbol_00AB" msgid="4093069643313064892">"Umaki wokukopisha onama-engeli amabili okhombe ngakwesokunxele"</string>
+ <string name="spoken_symbol_00B7" msgid="2447718728927874920">"Icashazi eliphakathi"</string>
+ <string name="spoken_symbol_00B9" msgid="8026257165451461231">"I-Superscript one"</string>
+ <string name="spoken_symbol_00BB" msgid="1102740075655373928">"Umaki wokukopisha onama-engeli amabili okhombe ngakwesokudla"</string>
+ <string name="spoken_symbol_00BF" msgid="6233794752573788098">"Umbuzi okokushiwo"</string>
+ <string name="spoken_symbol_2018" msgid="4886476295598930225">"Umaki wokukopisha oyedwa ongakwesokunxele"</string>
+ <string name="spoken_symbol_2019" msgid="8892530161598134083">"Umaki wokukopisha oyedwa ongakwesokudla"</string>
+ <string name="spoken_symbol_201A" msgid="2072987157683446644">"Umaki wokukopisha owodwa ophansi 9"</string>
+ <string name="spoken_symbol_201C" msgid="4588048378803665427">"Umaki wokukopisha ongakubili ongakwekunxele"</string>
+ <string name="spoken_symbol_201D" msgid="1642776849495925895">"Umaki wokukopisha ongakubili ongakwekudla"</string>
+ <string name="spoken_symbol_2020" msgid="9084628638189344431">"Dagger"</string>
+ <string name="spoken_symbol_2021" msgid="5081396468559426475">"Double dagger"</string>
+ <string name="spoken_symbol_2030" msgid="9068837172419431755">"Per mille sign"</string>
+ <string name="spoken_symbol_2032" msgid="3014506329156664396">"Prime"</string>
+ <string name="spoken_symbol_2033" msgid="1251022699713475088">"Double prime"</string>
+ <string name="spoken_symbol_2039" msgid="6989616457213775957">"Umaki wokukopisha oyedwa ngokhombe ngakwesokunxele"</string>
+ <string name="spoken_symbol_203A" msgid="31245095449823701">"Umaki wokukopisha oyedwa ngokhombe ngakwesokudla"</string>
+ <string name="spoken_symbol_2074" msgid="2116717717093306894">"Superscript four"</string>
+ <string name="spoken_symbol_207F" msgid="1706731172134246659">"I-Superscript latin uhlambu oluncane u-n"</string>
+ <string name="spoken_symbol_20B1" msgid="2159994270622444689">"Uphawu lwe-Peso"</string>
+ <string name="spoken_symbol_2105" msgid="7289404939366976829">"Ukunakekela ko"</string>
+ <string name="spoken_symbol_2192" msgid="827804523596125414">"Umcibisholo wangakwesokudla"</string>
+ <string name="spoken_symbol_2193" msgid="2659541693445985717">"Umcibisholo oyaphansi"</string>
+ <string name="spoken_symbol_2205" msgid="4457188084269117343">"Isethi engenalutho"</string>
+ <string name="spoken_symbol_2206" msgid="4856786565708380687">"Nciphisa"</string>
+ <string name="spoken_symbol_2264" msgid="5092061257745123554">"Okuncane noma okulinganayo"</string>
+ <string name="spoken_symbol_2265" msgid="1907966479878036357">"Okukhulu noma okulinganayo"</string>
+ <string name="spoken_symbol_2605" msgid="5202920479405857753">"Inkanyezi emnyama"</string>
+</resources>
diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml
index 9f344d8bf..6d3de70a5 100644
--- a/java/res/values-zu/strings-talkback-descriptions.xml
+++ b/java/res/values-zu/strings-talkback-descriptions.xml
@@ -25,8 +25,7 @@
<string name="spoken_no_text_entered" msgid="1711276837961785646">"Awukho umbhalo ofakiwe"</string>
<string name="spoken_auto_correct" msgid="8989324692167993804">"I-<xliff:g id="KEY_NAME">%1$s</xliff:g> ilungisa i-<xliff:g id="ORIGINAL_WORD">%2$s</xliff:g> kube yi-<xliff:g id="CORRECTED_WORD">%3$s</xliff:g>"</string>
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"I-<xliff:g id="KEY_NAME">%1$s</xliff:g> yenza ukulungisa okuzenzakalelayo"</string>
- <!-- no translation found for spoken_description_unknown (5139930082759824442) -->
- <skip />
+ <string name="spoken_description_unknown" msgid="5139930082759824442">"Uhlamvu olungaziwa"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"U-Shift"</string>
<string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Amasimbuli amaningi"</string>
<string name="spoken_description_shift_shifted" msgid="3122704922642232605">"U-Shift"</string>
@@ -72,22 +71,13 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Izindawo"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Amasimbuli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Izithombe-mzwelo"</string>
- <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
- <skip />
- <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
- <skip />
- <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
- <skip />
- <!-- no translation found for spoken_symbol_unknown (717298227061173706) -->
- <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 />
+ <string name="spoken_description_upper_case" msgid="4904835255229433916">"Ufeleba <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
+ <string name="spoken_letter_0049" msgid="4743162182646977944">"Ufeleba I"</string>
+ <string name="spoken_letter_0130" msgid="4766619646231612274">"Ufeleba I, icashazi ngenhla"</string>
+ <string name="spoken_symbol_unknown" msgid="717298227061173706">"Uphawu olungaziwa"</string>
+ <string name="spoken_emoji_unknown" msgid="5981009928135394306">"I-emoji engaziwa"</string>
+ <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"Ezinye izinhlamvu ziyatholakala"</string>
+ <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"Ezinye izinhlamvu ziyalahlwa"</string>
+ <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"Ezinye iziphakamiso ziyatholakala"</string>
+ <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"Ezinye iziphakamiso ziyalahlwa"</string>
</resources>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 8e3942f60..c72352dd9 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -46,8 +46,7 @@
<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="enable_metrics_logging" msgid="5506372337118822837">"Thuthukisa i-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<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/attrs.xml b/java/res/values/attrs.xml
index a1f478bd5..fcb919d0b 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -26,8 +26,6 @@
<attr name="keyboardViewStyle" format="reference" />
<!-- MainKeyboardView style -->
<attr name="mainKeyboardViewStyle" format="reference" />
- <!-- Key preview text view style -->
- <attr name="keyPreviewTextViewStyle" format="reference"/>
<!-- EmojiPalettesView style -->
<attr name="emojiPalettesViewStyle" format="reference" />
<!-- MoreKeysKeyboard style -->
@@ -106,8 +104,8 @@
<attr name="longPressShiftLockTimeout" format="integer" />
<!-- Ignore special key timeout while typing in millisecond. -->
<attr name="ignoreAltCodeKeyTimeout" format="integer" />
- <!-- Layout resource for key press feedback.-->
- <attr name="keyPreviewLayout" format="reference" />
+ <!-- Background resource for key press feedback.-->
+ <attr name="keyPreviewBackground" format="reference" />
<!-- Vertical offset of the key press feedback from the key. -->
<attr name="keyPreviewOffset" format="dimension" />
<!-- Height of the key press feedback popup. -->
diff --git a/java/res/values/keyboard-themes.xml b/java/res/values/keyboard-themes.xml
index a06082c6e..28a34c315 100644
--- a/java/res/values/keyboard-themes.xml
+++ b/java/res/values/keyboard-themes.xml
@@ -20,13 +20,14 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- For keyboard color scheme option dialog. -->
<string-array name="keyboard_theme_names" translatable="false">
- <!-- TODO: Make this item as translatable string resource. -->
- <item>Material</item>
- <item>@string/keyboard_color_scheme_white</item>
- <item>@string/keyboard_color_scheme_blue</item>
+ <!-- TODO: Implement Material Light theme. -->
+ <item>@string/keyboard_theme_material_dark</item>
+ <item>@string/keyboard_theme_holo_white</item>
+ <item>@string/keyboard_theme_holo_blue</item>
</string-array>
<!-- An element must be a keyboard theme id of {@link KeyboardTheme#THEME_ID_*}. -->
<string-array name="keyboard_theme_ids" translatable="false">
+ <!-- TODO: Implement Material Light theme. -->
<item>3</item>
<item>2</item>
<item>0</item>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 884911565..9ec3f469c 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -36,22 +36,18 @@
<!-- Option to control whether or not to show a popup with a larger font on each key press. -->
<string name="popup_on_keypress">Popup on keypress</string>
- <!-- Category title for general settings for Android keyboard -->
- <string name="general_category">General</string>
-
- <!-- Category title for text prediction -->
- <string name="correction_category">Text correction</string>
-
- <!-- Category title for gesture typing -->
- <string name="gesture_typing_category">Gesture typing</string>
-
- <!-- Category title for misc options -->
- <string name="misc_category">Other options</string>
-
- <!-- Option name for advanced settings screen [CHAR LIMIT=25] -->
- <string name="advanced_settings">Advanced settings</string>
- <!-- Option summary for advanced settings screen [CHAR LIMIT=65 (two lines) or 30 (fits on one line, preferable)] -->
- <string name="advanced_settings_summary">Options for experts</string>
+ <!-- Settings screen title for input preferences [CHAR LIMIT=25]-->
+ <string name="settings_screen_input">Input preferences</string>
+ <!-- Settings screen title for appearance preferences [CHAR LIMIT=25] -->
+ <string name="settings_screen_appearances">Appearance</string>
+ <!-- Settings screen title for multi lingual options [CHAR_LIMIT=25] -->
+ <string name="settings_screen_multi_lingual">Multi lingual options</string>
+ <!-- Settings screen title for gesture typing preferences [CHAR_LIMIT=25] -->
+ <string name="settings_screen_gesture">Gesture typing preferences</string>
+ <!-- Settings screen title for text correction options [CHAR_LIMIT=25] -->
+ <string name="settings_screen_correction">Text correction</string>
+ <!-- Settings screen title for advanced settings [CHAR LIMIT=25] -->
+ <string name="settings_screen_advanced">Advanced</string>
<!-- Option name for including other IMEs in the language switch list [CHAR LIMIT=30] -->
<string name="include_other_imes_in_language_switch_list">Switch to other input methods</string>
@@ -295,12 +291,16 @@ mobile devices. [CHAR LIMIT=25] -->
<!-- Description for Emoji keyboard subtype [CHAR LIMIT=25] -->
<string name="subtype_emoji">Emoji</string>
- <!-- Title of the preference settings for switching keyboard color scheme [CHAR LIMIT=35] -->
- <string name="keyboard_color_scheme">Color scheme</string>
- <!-- The keyboard color scheme name, White [CHAR LIMIT=16] -->
- <string name="keyboard_color_scheme_white">White</string>
- <!-- The keyboard color scheme name, Blue [CHAR LIMIT=16] -->
- <string name="keyboard_color_scheme_blue">Blue</string>
+ <!-- Title of the preference settings for switching keyboard theme [CHAR LIMIT=35] -->
+ <string name="keyboard_theme">Keyboard theme</string>
+ <!-- The keyboard theme name, Holo White [CHAR LIMIT=25] -->
+ <string name="keyboard_theme_holo_white">Holo White</string>
+ <!-- The keyboard theme name, Holo Blue [CHAR LIMIT=25] -->
+ <string name="keyboard_theme_holo_blue">Holo Blue</string>
+ <!-- The keyboard theme name, Material Dark [CHAR LIMIT=25] -->
+ <string name="keyboard_theme_material_dark">Material Dark</string>
+ <!-- The keyboard theme name, Material Light [CHAR LIMIT=25] -->
+ <string name="keyboard_theme_material_light">Material Light</string>
<!-- Title of the preference settings for custom input styles (language and keyboard layout pairs) [CHAR LIMIT=35]-->
<string name="custom_input_styles_title">Custom input styles</string>
diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml
index 02a93ca82..2b2a80aed 100644
--- a/java/res/values/themes-common.xml
+++ b/java/res/values/themes-common.xml
@@ -75,7 +75,6 @@
<item name="keyRepeatInterval">@integer/config_key_repeat_interval</item>
<item name="longPressShiftLockTimeout">@integer/config_longpress_shift_lock_timeout</item>
<item name="ignoreAltCodeKeyTimeout">@integer/config_ignore_alt_code_key_timeout</item>
- <item name="keyPreviewLayout">@layout/key_preview</item>
<item name="keyPreviewHeight">@dimen/config_key_preview_height</item>
<!-- TODO: consolidate key preview linger timeout with the key preview animation parameters. -->
<item name="keyPreviewLingerTimeout">@integer/config_key_preview_linger_timeout</item>
@@ -106,7 +105,6 @@
<style
name="MainKeyboardView"
parent="KeyboardView" />
- <style name="KeyPreviewTextView" />
<!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
for instance delete button, need themed {@link KeyboardView} attributes. -->
<style name="EmojiPalettesView" />
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index 319b4aeed..073ae90b9 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -23,7 +23,6 @@
<item name="keyboardStyle">@style/Keyboard.ICS</item>
<item name="keyboardViewStyle">@style/KeyboardView.ICS</item>
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.ICS</item>
- <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.ICS</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.ICS</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.ICS</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.ICS</item>
@@ -66,6 +65,7 @@
name="MainKeyboardView.ICS"
parent="KeyboardView.ICS"
>
+ <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_ics</item>
<item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
<item name="gestureFloatingPreviewTextColor">@color/highlight_color_ics</item>
<item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item>
@@ -75,12 +75,6 @@
<item name="languageOnSpacebarTextShadowRadius">1.0</item>
<item name="languageOnSpacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item>
</style>
- <style
- name="KeyPreviewTextView.ICS"
- parent="KeyPreviewTextView"
- >
- <item name="android:background">@drawable/keyboard_key_feedback_ics</item>
- </style>
<!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
for instance delete button, need themed {@link KeyboardView} attributes. -->
<style
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index 208723dd3..f895de572 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -23,7 +23,6 @@
<item name="keyboardStyle">@style/Keyboard.KLP</item>
<item name="keyboardViewStyle">@style/KeyboardView.KLP</item>
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.KLP</item>
- <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.KLP</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.KLP</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.KLP</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.KLP</item>
@@ -66,6 +65,7 @@
name="MainKeyboardView.KLP"
parent="KeyboardView.KLP"
>
+ <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_klp</item>
<item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
<item name="gestureFloatingPreviewTextColor">@color/highlight_color_klp</item>
<item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_holo</item>
@@ -75,12 +75,6 @@
<item name="languageOnSpacebarTextShadowRadius">1.0</item>
<item name="languageOnSpacebarTextShadowColor">@color/spacebar_text_shadow_color_holo</item>
</style>
- <style
- name="KeyPreviewTextView.KLP"
- parent="KeyPreviewTextView"
- >
- <item name="android:background">@drawable/keyboard_key_feedback_klp</item>
- </style>
<!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
for instance delete button, need themed {@link KeyboardView} attributes. -->
<style
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index e9a295c67..1db8f428e 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -23,7 +23,6 @@
<item name="keyboardStyle">@style/Keyboard.LXX_Dark</item>
<item name="keyboardViewStyle">@style/KeyboardView.LXX_Dark</item>
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Dark</item>
- <item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.LXX_Dark</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Dark</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Dark</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Dark</item>
@@ -67,6 +66,7 @@
name="MainKeyboardView.LXX_Dark"
parent="KeyboardView.LXX_Dark"
>
+ <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_lxx_dark</item>
<item name="keyPreviewOffset">@dimen/config_key_preview_offset_holo</item>
<item name="gestureFloatingPreviewTextColor">@color/highlight_color_lxx_dark</item>
<item name="gestureFloatingPreviewColor">@color/gesture_floating_preview_color_lxx_dark</item>
@@ -76,12 +76,6 @@
<!-- A negative value to disable text shadow layer. -->
<item name="languageOnSpacebarTextShadowRadius">-1.0</item>
</style>
- <style
- name="KeyPreviewTextView.LXX_Dark"
- parent="KeyPreviewTextView"
- >
- <item name="android:background">@drawable/keyboard_key_feedback_lxx_dark</item>
- </style>
<!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
for instance delete button, need themed {@link KeyboardView} attributes. -->
<style
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 0e9c16190..e71d9517c 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -18,15 +18,21 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
android:key="english_ime_settings">
- <PreferenceCategory
- android:title="@string/general_category"
- android:key="general_settings">
+ <PreferenceScreen
+ android:title="@string/settings_screen_input"
+ android:key="screen_input">
<CheckBoxPreference
android:key="auto_cap"
android:title="@string/auto_cap"
android:summary="@string/auto_cap_summary"
- android:persistent="true"
- android:defaultValue="true" />
+ android:defaultValue="true"
+ android:persistent="true" />
+ <CheckBoxPreference
+ android:key="pref_key_use_double_space_period"
+ android:title="@string/use_double_space_period"
+ android:summary="@string/use_double_space_period_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
<CheckBoxPreference
android:key="vibrate_on"
android:title="@string/vibrate_on_keypress"
@@ -40,17 +46,67 @@
<CheckBoxPreference
android:key="popup_on"
android:title="@string/popup_on_keypress"
- android:persistent="true"
- android:defaultValue="@bool/config_default_key_preview_popup" />
+ android:defaultValue="@bool/config_default_key_preview_popup"
+ android:persistent="true" />
<CheckBoxPreference
android:key="pref_voice_input_key"
android:title="@string/voice_input"
- android:persistent="true"
- android:defaultValue="true" />
- </PreferenceCategory>
- <PreferenceCategory
- android:title="@string/correction_category"
- android:key="correction_settings">
+ android:defaultValue="true"
+ android:persistent="true" />
+ </PreferenceScreen>
+ <ListPreference
+ android:key="pref_keyboard_theme"
+ android:title="@string/keyboard_theme"
+ android:entryValues="@array/keyboard_theme_ids"
+ android:entries="@array/keyboard_theme_names"
+ android:persistent="true" />
+ <PreferenceScreen
+ android:title="@string/settings_screen_multi_lingual"
+ android:key="screen_multi_lingual">
+ <CheckBoxPreference
+ android:key="pref_show_language_switch_key"
+ android:title="@string/show_language_switch_key"
+ android:summary="@string/show_language_switch_key_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
+ <CheckBoxPreference
+ android:key="pref_include_other_imes_in_language_switch_list"
+ android:dependency="pref_show_language_switch_key"
+ android:title="@string/include_other_imes_in_language_switch_list"
+ android:summary="@string/include_other_imes_in_language_switch_list_summary"
+ android:defaultValue="false"
+ android:persistent="true" />
+ <PreferenceScreen
+ android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
+ android:key="custom_input_styles"
+ android:title="@string/custom_input_styles_title" />
+ </PreferenceScreen>
+ <PreferenceScreen
+ android:title="@string/settings_screen_gesture"
+ android:key="screen_gesture">
+ <CheckBoxPreference
+ android:key="gesture_input"
+ android:title="@string/gesture_input"
+ android:summary="@string/gesture_input_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
+ <CheckBoxPreference
+ android:key="pref_gesture_floating_preview_text"
+ android:dependency="gesture_input"
+ android:title="@string/gesture_floating_preview_text"
+ android:summary="@string/gesture_floating_preview_text_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
+ <CheckBoxPreference
+ android:key="pref_gesture_preview_trail"
+ android:dependency="gesture_input"
+ android:title="@string/gesture_preview_trail"
+ android:defaultValue="true"
+ android:persistent="true" />
+ </PreferenceScreen>
+ <PreferenceScreen
+ android:title="@string/settings_screen_correction"
+ android:key="screen_correction">
<PreferenceScreen
android:key="edit_personal_dictionary"
android:title="@string/edit_personal_dictionary">
@@ -71,137 +127,74 @@
android:key="pref_key_block_potentially_offensive"
android:title="@string/prefs_block_potentially_offensive_title"
android:summary="@string/prefs_block_potentially_offensive_summary"
- android:persistent="true"
- android:defaultValue="@bool/config_block_potentially_offensive" />
+ android:defaultValue="@bool/config_block_potentially_offensive"
+ android:persistent="true" />
<ListPreference
android:key="auto_correction_threshold"
android:title="@string/auto_correction"
android:summary="@string/auto_correction_summary"
- android:persistent="true"
android:entryValues="@array/auto_correction_threshold_mode_indexes"
android:entries="@array/auto_correction_threshold_modes"
- android:defaultValue="@string/auto_correction_threshold_mode_index_modest" />
+ android:defaultValue="@string/auto_correction_threshold_mode_index_modest"
+ android:persistent="true" />
<ListPreference
android:key="show_suggestions_setting"
android:summary="@string/prefs_show_suggestions_summary"
android:title="@string/prefs_show_suggestions"
- android:persistent="true"
android:entryValues="@array/prefs_suggestion_visibility_values"
android:entries="@array/prefs_suggestion_visibilities"
- android:defaultValue="@string/prefs_suggestion_visibility_default_value" />
+ android:defaultValue="@string/prefs_suggestion_visibility_default_value"
+ android:persistent="true" />
<CheckBoxPreference
android:key="pref_key_use_personalized_dicts"
android:title="@string/use_personalized_dicts"
android:summary="@string/use_personalized_dicts_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <!-- title will be set programmatically to embed application name -->
- <CheckBoxPreference
- android:key="pref_enable_metrics_logging"
- android:summary="@string/enable_metrics_logging_summary"
- android:persistent="true"
- android:defaultValue="true" />
- </PreferenceCategory>
- <PreferenceCategory
- android:title="@string/gesture_typing_category"
- android:key="gesture_typing_settings">
- <CheckBoxPreference
- android:key="gesture_input"
- android:title="@string/gesture_input"
- android:summary="@string/gesture_input_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <!-- TODO: Move these two options to the advanced settings. -->
- <CheckBoxPreference
- android:key="pref_gesture_floating_preview_text"
- android:dependency="gesture_input"
- android:title="@string/gesture_floating_preview_text"
- android:summary="@string/gesture_floating_preview_text_summary"
- android:persistent="true"
- android:defaultValue="true" />
+ android:defaultValue="true"
+ android:persistent="true" />
<CheckBoxPreference
- android:key="pref_gesture_preview_trail"
- android:dependency="gesture_input"
- android:title="@string/gesture_preview_trail"
- android:persistent="true"
- android:defaultValue="true" />
- </PreferenceCategory>
- <PreferenceCategory
- android:title="@string/misc_category"
- android:key="misc_settings">
+ android:key="pref_key_use_contacts_dict"
+ android:title="@string/use_contacts_dict"
+ android:summary="@string/use_contacts_dict_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
<CheckBoxPreference
android:key="next_word_prediction"
android:title="@string/bigram_prediction"
android:summary="@string/bigram_prediction_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <PreferenceScreen
- android:key="pref_advanced_settings"
- android:title="@string/advanced_settings"
- android:summary="@string/advanced_settings_summary">
- <CheckBoxPreference
- android:key="pref_key_use_contacts_dict"
- android:title="@string/use_contacts_dict"
- android:summary="@string/use_contacts_dict_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <CheckBoxPreference
- android:key="pref_key_use_double_space_period"
- android:title="@string/use_double_space_period"
- android:summary="@string/use_double_space_period_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <CheckBoxPreference
- android:key="pref_show_language_switch_key"
- android:title="@string/show_language_switch_key"
- android:summary="@string/show_language_switch_key_summary"
- android:persistent="true"
- android:defaultValue="true" />
- <CheckBoxPreference
- android:key="pref_include_other_imes_in_language_switch_list"
- android:dependency="pref_show_language_switch_key"
- android:title="@string/include_other_imes_in_language_switch_list"
- android:summary="@string/include_other_imes_in_language_switch_list_summary"
- android:persistent="true"
- android:defaultValue="false" />
- <ListPreference
- android:key="pref_keyboard_theme"
- android:title="@string/keyboard_color_scheme"
- android:persistent="true"
- android:entryValues="@array/keyboard_theme_ids"
- android:entries="@array/keyboard_theme_names" />
- <PreferenceScreen
- android:fragment="com.android.inputmethod.latin.settings.AdditionalSubtypeSettings"
- android:key="custom_input_styles"
- android:title="@string/custom_input_styles_title" />
- <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
- <ListPreference
- android:key="pref_key_preview_popup_dismiss_delay"
- android:title="@string/key_preview_popup_dismiss_delay" />
- <com.android.inputmethod.latin.settings.SeekBarDialogPreference
- android:key="pref_vibration_duration_settings"
- android:title="@string/prefs_keypress_vibration_duration_settings"
- latin:maxValue="@integer/config_max_vibration_duration" />
- <com.android.inputmethod.latin.settings.SeekBarDialogPreference
- android:key="pref_keypress_sound_volume"
- android:title="@string/prefs_keypress_sound_volume_settings"
- latin:maxValue="100" /> <!-- percent -->
- <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
- the default value is added programmatically. -->
- <CheckBoxPreference
- android:key="pref_show_setup_wizard_icon"
- android:title="@string/show_setup_wizard_icon"
- android:summary="@string/show_setup_wizard_icon_summary" />
+ android:defaultValue="true"
+ android:persistent="true" />
</PreferenceScreen>
+ <PreferenceScreen
+ android:title="@string/settings_screen_advanced"
+ android:key="screen_advanced">
+ <!-- TODO: consolidate key preview dismiss delay with the key preview animation parameters. -->
+ <ListPreference
+ android:key="pref_key_preview_popup_dismiss_delay"
+ android:title="@string/key_preview_popup_dismiss_delay" />
+ <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+ android:key="pref_vibration_duration_settings"
+ android:title="@string/prefs_keypress_vibration_duration_settings"
+ latin:maxValue="@integer/config_max_vibration_duration" />
+ <com.android.inputmethod.latin.settings.SeekBarDialogPreference
+ android:key="pref_keypress_sound_volume"
+ android:title="@string/prefs_keypress_sound_volume_settings"
+ latin:maxValue="100" /> <!-- percent -->
+ <!-- The settigs for showing setup wizard application icon shouldn't be persistent and
+ the default value is added programmatically. -->
+ <CheckBoxPreference
+ android:key="pref_show_setup_wizard_icon"
+ android:title="@string/show_setup_wizard_icon"
+ android:summary="@string/show_setup_wizard_icon_summary" />
+ <!-- title will be set programmatically to embed application name -->
+ <CheckBoxPreference
+ android:key="pref_enable_metrics_logging"
+ android:summary="@string/enable_metrics_logging_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
<PreferenceScreen
- android:key="send_feedback"
- android:title="@string/send_feedback" />
- <PreferenceScreen
- android:key="about_keyboard" />
- <PreferenceScreen
- android:key="debug_settings"
+ android:key="screen_debug"
android:title="Debug settings"
- android:persistent="true"
- android:defaultValue="false" />
- </PreferenceCategory>
+ android:defaultValue="false"
+ android:persistent="true" />
+ </PreferenceScreen>
</PreferenceScreen>
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index 0bcc5cbe4..ae29a8a82 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -23,19 +23,19 @@
<CheckBoxPreference
android:key="debug_mode"
android:title="@string/prefs_debug_mode"
- android:persistent="true"
- android:defaultValue="false" />
+ android:defaultValue="false"
+ android:persistent="true" />
<CheckBoxPreference
android:key="force_non_distinct_multitouch"
android:title="@string/prefs_force_non_distinct_multitouch"
- android:persistent="true"
- android:defaultValue="false" />
+ android:defaultValue="false"
+ android:persistent="true" />
<CheckBoxPreference
android:key="pref_sliding_key_input_preview"
android:title="@string/sliding_key_input_preview"
android:summary="@string/sliding_key_input_preview_summary"
- android:persistent="true"
- android:defaultValue="true" />
+ android:defaultValue="true"
+ android:persistent="true" />
<com.android.inputmethod.latin.settings.SeekBarDialogPreference
android:key="pref_key_longpress_timeout"
android:title="@string/prefs_key_longpress_timeout_settings"
diff --git a/java/res/xml/spell_checker_settings.xml b/java/res/xml/spell_checker_settings.xml
index de67e7f81..3d9501857 100644
--- a/java/res/xml/spell_checker_settings.xml
+++ b/java/res/xml/spell_checker_settings.xml
@@ -15,11 +15,12 @@
-->
<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
- <CheckBoxPreference
- android:key="pref_spellcheck_use_contacts"
- android:title="@string/use_contacts_for_spellchecking_option_title"
- android:summary="@string/use_contacts_for_spellchecking_option_summary"
- android:persistent="true"
- android:defaultValue="true" />
+ xmlns:android="http://schemas.android.com/apk/res/android"
+>
+ <CheckBoxPreference
+ android:key="pref_spellcheck_use_contacts"
+ android:title="@string/use_contacts_for_spellchecking_option_title"
+ android:summary="@string/use_contacts_for_spellchecking_option_summary"
+ android:defaultValue="true"
+ android:persistent="true" />
</PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index d67d9dc4b..3925fc652 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -305,7 +305,7 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
key.onPressed();
mKeyboardView.invalidateKey(key);
final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
- provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
+ provider.onHoverEnterTo(key);
provider.performActionForKey(key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS);
}
@@ -328,6 +328,6 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
key.onReleased();
mKeyboardView.invalidateKey(key);
final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
- provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
+ provider.onHoverExitFrom(key);
}
}
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index cb13483f2..61d066af5 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -65,6 +65,9 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
/** The virtual view identifier for the focused node. */
private int mAccessibilityFocusedView = UNDEFINED;
+ /** The virtual view identifier for the hovering node. */
+ private int mHoveringNodeId = UNDEFINED;
+
/** The current keyboard view. */
private final KeyboardView mKeyboardView;
@@ -76,7 +79,6 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance();
mAccessibilityUtils = AccessibilityUtils.getInstance();
mKeyboardView = keyboardView;
- updateParentLocation();
// Since this class is constructed lazily, we might not get a subsequent
// call to setKeyboard() and therefore need to call it now.
@@ -141,6 +143,28 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
return event;
}
+ public void onHoverEnterTo(final Key key) {
+ final int id = getVirtualViewIdOf(key);
+ if (id == View.NO_ID) {
+ return;
+ }
+ // Start hovering on the key. Because our accessibility model is lift-to-type, we should
+ // report the node info without click and long click actions to avoid unnecessary
+ // announcements.
+ mHoveringNodeId = id;
+ // Invalidate the node info of the key.
+ sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_WINDOW_CONTENT_CHANGED);
+ sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
+ }
+
+ public void onHoverExitFrom(final Key key) {
+ mHoveringNodeId = UNDEFINED;
+ // Invalidate the node info of the key to be able to revert the change we have done
+ // in {@link #onHoverEnterTo(Key)}.
+ sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_WINDOW_CONTENT_CHANGED);
+ sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
+ }
+
/**
* Returns an {@link AccessibilityNodeInfoCompat} representing a virtual
* view, i.e. a descendant of the host View, with the given <code>virtualViewId</code> or
@@ -169,10 +193,23 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
}
if (virtualViewId == View.NO_ID) {
// We are requested to create an AccessibilityNodeInfo describing
- // this View. Returning an empty info is sufficient for a keyboard.
+ // this View, i.e. the root of the virtual sub-tree.
final AccessibilityNodeInfoCompat rootInfo =
AccessibilityNodeInfoCompat.obtain(mKeyboardView);
ViewCompat.onInitializeAccessibilityNodeInfo(mKeyboardView, rootInfo);
+ updateParentLocation();
+
+ // Add the virtual children of the root View.
+ final List<Key> sortedKeys = mKeyboard.getSortedKeys();
+ final int size = sortedKeys.size();
+ for (int index = 0; index < size; index++) {
+ final Key key = sortedKeys.get(index);
+ if (key.isSpacer()) {
+ continue;
+ }
+ // Use an index of the sorted keys list as a virtual view id.
+ rootInfo.addChild(mKeyboardView, index);
+ }
return rootInfo;
}
@@ -200,9 +237,16 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
info.setBoundsInScreen(boundsInScreen);
info.setParent(mKeyboardView);
info.setSource(mKeyboardView, virtualViewId);
- info.setBoundsInScreen(boundsInScreen);
- info.setEnabled(true);
+ info.setEnabled(key.isEnabled());
info.setVisibleToUser(true);
+ // Don't add ACTION_CLICK and ACTION_LONG_CLOCK actions while hovering on the key.
+ // See {@link #onHoverEnterTo(Key)} and {@link #onHoverExitFrom(Key)}.
+ if (virtualViewId != mHoveringNodeId) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
+ if (key.isLongPressEnabled()) {
+ info.addAction(AccessibilityNodeInfoCompat.ACTION_LONG_CLICK);
+ }
+ }
if (mAccessibilityFocusedView == virtualViewId) {
info.addAction(AccessibilityNodeInfoCompat.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
@@ -241,6 +285,12 @@ final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderC
sendAccessibilityEventForKey(
key, AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
return true;
+ case AccessibilityNodeInfoCompat.ACTION_CLICK:
+ sendAccessibilityEventForKey(key, AccessibilityEvent.TYPE_VIEW_CLICKED);
+ return true;
+ case AccessibilityNodeInfoCompat.ACTION_LONG_CLICK:
+ sendAccessibilityEventForKey(key, AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
+ return true;
default:
return false;
}
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 9a859bfdb..702efb3d7 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -35,7 +35,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodSubtype;
-import android.widget.TextView;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.MainKeyboardAccessibilityDelegate;
@@ -48,6 +47,7 @@ import com.android.inputmethod.keyboard.internal.KeyDrawParams;
import com.android.inputmethod.keyboard.internal.KeyPreviewChoreographer;
import com.android.inputmethod.keyboard.internal.KeyPreviewDrawParams;
import com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper;
+import com.android.inputmethod.keyboard.internal.MoreKeySpec;
import com.android.inputmethod.keyboard.internal.NonDistinctMultitouchHelper;
import com.android.inputmethod.keyboard.internal.SlidingKeyInputDrawingPreview;
import com.android.inputmethod.keyboard.internal.TimerHandler;
@@ -236,16 +236,14 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
R.styleable.MainKeyboardView_gestureFloatingPreviewTextLingerTimeout, 0);
mGestureFloatingTextDrawingPreview = new GestureFloatingTextDrawingPreview(
- mDrawingPreviewPlacerView, mainKeyboardViewAttr);
- mDrawingPreviewPlacerView.addPreview(mGestureFloatingTextDrawingPreview);
+ mainKeyboardViewAttr);
+ mGestureFloatingTextDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
- mGestureTrailsDrawingPreview = new GestureTrailsDrawingPreview(
- mDrawingPreviewPlacerView, mainKeyboardViewAttr);
- mDrawingPreviewPlacerView.addPreview(mGestureTrailsDrawingPreview);
+ mGestureTrailsDrawingPreview = new GestureTrailsDrawingPreview(mainKeyboardViewAttr);
+ mGestureTrailsDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
- mSlidingKeyInputDrawingPreview = new SlidingKeyInputDrawingPreview(
- mDrawingPreviewPlacerView, mainKeyboardViewAttr);
- mDrawingPreviewPlacerView.addPreview(mSlidingKeyInputDrawingPreview);
+ mSlidingKeyInputDrawingPreview = new SlidingKeyInputDrawingPreview(mainKeyboardViewAttr);
+ mSlidingKeyInputDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
mainKeyboardViewAttr.recycle();
mMoreKeysKeyboardContainer = LayoutInflater.from(getContext())
@@ -428,15 +426,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
windowContentView.addView(mDrawingPreviewPlacerView);
}
- /**
- * Returns the enabled state of the key feedback preview
- * @return whether or not the key feedback preview is enabled
- * @see #setKeyPreviewPopupEnabled(boolean, int)
- */
- public boolean isKeyPreviewPopupEnabled() {
- return mKeyPreviewDrawParams.isPopupEnabled();
- }
-
// Implements {@link DrawingHandler.Callbacks} method.
@Override
public void dismissAllKeyPreviews() {
@@ -461,12 +450,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
locatePreviewPlacerView();
- final TextView previewTextView = mKeyPreviewChoreographer.getKeyPreviewTextView(
- key, mDrawingPreviewPlacerView);
getLocationInWindow(mOriginCoords);
- mKeyPreviewChoreographer.placeKeyPreview(key, previewTextView, keyboard.mIconsSet,
- mKeyDrawParams, getWidth(), mOriginCoords);
- mKeyPreviewChoreographer.showKeyPreview(key, previewTextView, isHardwareAccelerated());
+ mKeyPreviewChoreographer.placeAndShowKeyPreview(key, keyboard.mIconsSet, mKeyDrawParams,
+ getWidth(), mOriginCoords, mDrawingPreviewPlacerView, isHardwareAccelerated());
}
// Implements {@link TimerHandler.Callbacks} method.
@@ -557,13 +543,25 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
private MoreKeysPanel onCreateMoreKeysPanel(final Key key, final Context context) {
- if (key.getMoreKeys() == null) {
+ final MoreKeySpec[] moreKeys = key.getMoreKeys();
+ if (moreKeys == null) {
return null;
}
Keyboard moreKeysKeyboard = mMoreKeysKeyboardCache.get(key);
if (moreKeysKeyboard == null) {
- moreKeysKeyboard = new MoreKeysKeyboard.Builder(
- context, key, this, mKeyPreviewDrawParams).build();
+ // {@link KeyPreviewDrawParams#mPreviewVisibleWidth} should have been set at
+ // {@link KeyPreviewChoreographer#placeKeyPreview(Key,TextView,KeyboardIconsSet,KeyDrawParams,int,int[]},
+ // though there may be some chances that the value is zero. <code>width == 0</code>
+ // will cause zero-division error at
+ // {@link MoreKeysKeyboardParams#setParameters(int,int,int,int,int,int,boolean,int)}.
+ final boolean isSingleMoreKeyWithPreview = mKeyPreviewDrawParams.isPopupEnabled()
+ && !key.noKeyPreview() && moreKeys.length == 1
+ && mKeyPreviewDrawParams.getVisibleWidth() > 0;
+ final MoreKeysKeyboard.Builder builder = new MoreKeysKeyboard.Builder(
+ context, key, getKeyboard(), isSingleMoreKeyWithPreview,
+ mKeyPreviewDrawParams.getVisibleWidth(),
+ mKeyPreviewDrawParams.getVisibleHeight(), newLabelPaint(key));
+ moreKeysKeyboard = builder.build();
mMoreKeysKeyboardCache.put(key, moreKeysKeyboard);
}
@@ -619,7 +617,8 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
final int[] lastCoords = CoordinateUtils.newInstance();
tracker.getLastCoordinates(lastCoords);
- final boolean keyPreviewEnabled = isKeyPreviewPopupEnabled() && !key.noKeyPreview();
+ final boolean keyPreviewEnabled = mKeyPreviewDrawParams.isPopupEnabled()
+ && !key.noKeyPreview();
// The more keys keyboard is usually horizontally aligned with the center of the parent key.
// If showMoreKeysKeyboardAtTouchedPoint is true and the key preview is disabled, the more
// keys keyboard is placed at the touch point of the parent key.
@@ -730,6 +729,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
public void onHideWindow() {
+ onDismissMoreKeysPanel();
final MainKeyboardAccessibilityDelegate accessibilityDelegate = mAccessibilityDelegate;
if (accessibilityDelegate != null) {
accessibilityDelegate.onHideWindow();
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
index a72f79137..e0184d7f1 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboard.java
@@ -21,7 +21,6 @@ import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.keyboard.internal.KeyPreviewDrawParams;
import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.keyboard.internal.KeyboardParams;
@@ -260,33 +259,27 @@ public final class MoreKeysKeyboard extends Keyboard {
/**
* The builder of MoreKeysKeyboard.
* @param context the context of {@link MoreKeysKeyboardView}.
- * @param parentKey the {@link Key} that invokes more keys keyboard.
- * @param parentKeyboardView the {@link KeyboardView} that contains the parentKey.
+ * @param key the {@link Key} that invokes more keys keyboard.
+ * @param keyboard the {@link Keyboard} that contains the parentKey.
+ * @param isSingleMoreKeyWithPreview true if the <code>key</code> has just a single
+ * "more key" and its key popup preview is enabled.
* @param keyPreviewDrawParams the parameter to place key preview.
+ * @param paintToMeasure the {@link Paint} object to measure a "more key" width
*/
- public Builder(final Context context, final Key parentKey,
- final MainKeyboardView parentKeyboardView,
- final KeyPreviewDrawParams keyPreviewDrawParams) {
+ public Builder(final Context context, final Key key, final Keyboard keyboard,
+ final boolean isSingleMoreKeyWithPreview, final int keyPreviewVisibleWidth,
+ final int keyPreviewVisibleHeight, final Paint paintToMeasure) {
super(context, new MoreKeysKeyboardParams());
- final Keyboard parentKeyboard = parentKeyboardView.getKeyboard();
- load(parentKeyboard.mMoreKeysTemplate, parentKeyboard.mId);
+ load(keyboard.mMoreKeysTemplate, keyboard.mId);
// TODO: More keys keyboard's vertical gap is currently calculated heuristically.
// Should revise the algorithm.
- mParams.mVerticalGap = parentKeyboard.mVerticalGap / 2;
- mParentKey = parentKey;
-
- final MoreKeySpec[] moreKeys = parentKey.getMoreKeys();
- final int width, height;
- // {@link KeyPreviewDrawParams#mPreviewVisibleWidth} should have been set at
- // {@link MainKeyboardView#showKeyPreview(PointerTracker}, though there may be
- // some chances that the value is zero. <code>width == 0</code> will cause
- // zero-division error at
- // {@link MoreKeysKeyboardParams#setParameters(int,int,int,int,int,int,boolean,int)}.
- final boolean singleMoreKeyWithPreview = parentKeyboardView.isKeyPreviewPopupEnabled()
- && !parentKey.noKeyPreview() && moreKeys.length == 1
- && keyPreviewDrawParams.getVisibleWidth() > 0;
- if (singleMoreKeyWithPreview) {
+ mParams.mVerticalGap = keyboard.mVerticalGap / 2;
+ // This {@link MoreKeysKeyboard} is invoked from the <code>key</code>.
+ mParentKey = key;
+
+ final int keyWidth, rowHeight;
+ if (isSingleMoreKeyWithPreview) {
// Use pre-computed width and height if this more keys keyboard has only one key to
// mitigate visual flicker between key preview and more keys keyboard.
// Caveats for the visual assets: To achieve this effect, both the key preview
@@ -294,29 +287,28 @@ public final class MoreKeysKeyboard extends Keyboard {
// left/right/top paddings. The bottom paddings of both backgrounds don't need to
// be considered because the vertical positions of both backgrounds were already
// adjusted with their bottom paddings deducted.
- width = keyPreviewDrawParams.getVisibleWidth();
- height = keyPreviewDrawParams.getVisibleHeight() + mParams.mVerticalGap;
+ keyWidth = keyPreviewVisibleWidth;
+ rowHeight = keyPreviewVisibleHeight + mParams.mVerticalGap;
} else {
final float padding = context.getResources().getDimension(
R.dimen.config_more_keys_keyboard_key_horizontal_padding)
- + (parentKey.hasLabelsInMoreKeys()
+ + (key.hasLabelsInMoreKeys()
? mParams.mDefaultKeyWidth * LABEL_PADDING_RATIO : 0.0f);
- width = getMaxKeyWidth(parentKey, mParams.mDefaultKeyWidth, padding,
- parentKeyboardView.newLabelPaint(parentKey));
- height = parentKeyboard.mMostCommonKeyHeight;
+ keyWidth = getMaxKeyWidth(key, mParams.mDefaultKeyWidth, padding, paintToMeasure);
+ rowHeight = keyboard.mMostCommonKeyHeight;
}
final int dividerWidth;
- if (parentKey.needsDividersInMoreKeys()) {
+ if (key.needsDividersInMoreKeys()) {
mDivider = mResources.getDrawable(R.drawable.more_keys_divider);
- dividerWidth = (int)(width * DIVIDER_RATIO);
+ dividerWidth = (int)(keyWidth * DIVIDER_RATIO);
} else {
mDivider = null;
dividerWidth = 0;
}
- mParams.setParameters(moreKeys.length, parentKey.getMoreKeysColumn(),
- width, height, parentKey.getX() + parentKey.getWidth() / 2,
- parentKeyboard.mId.mWidth, parentKey.isFixedColumnOrderMoreKeys(),
- dividerWidth);
+ final MoreKeySpec[] moreKeys = key.getMoreKeys();
+ mParams.setParameters(moreKeys.length, key.getMoreKeysColumn(), keyWidth, rowHeight,
+ key.getX() + key.getWidth() / 2, keyboard.mId.mWidth,
+ key.isFixedColumnOrderMoreKeys(), dividerWidth);
}
private static int getMaxKeyWidth(final Key parentKey, final int minKeyWidth,
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
index a34dbef4b..8010a3e7e 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
@@ -21,6 +21,7 @@ import android.os.Handler;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
+import android.view.accessibility.AccessibilityEvent;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.KeyboardAccessibilityDelegate;
@@ -106,6 +107,12 @@ final class EmojiPageKeyboardView extends KeyboardView implements
}
}
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(final AccessibilityEvent event) {
+ // Don't populate accessibility event with all Emoji keys.
+ return true;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
index 3a72aed0d..a194f3dfd 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
@@ -27,16 +27,19 @@ import com.android.inputmethod.keyboard.PointerTracker;
* SlidingKeyInputDrawingPreview.
*/
public abstract class AbstractDrawingPreview {
- private final View mDrawingView;
+ private View mDrawingView;
private boolean mPreviewEnabled;
private boolean mHasValidGeometry;
- protected AbstractDrawingPreview(final View drawingView) {
+ public void setDrawingView(final DrawingPreviewPlacerView drawingView) {
mDrawingView = drawingView;
+ drawingView.addPreview(this);
}
- protected final View getDrawingView() {
- return mDrawingView;
+ protected void invalidateDrawingView() {
+ if (mDrawingView != null) {
+ mDrawingView.invalidate();
+ }
}
protected final boolean isPreviewEnabled() {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
index 3b4c43418..a5d47adb3 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
@@ -46,7 +46,9 @@ public final class DrawingPreviewPlacerView extends RelativeLayout {
}
public void addPreview(final AbstractDrawingPreview preview) {
- mPreviews.add(preview);
+ if (mPreviews.indexOf(preview) < 0) {
+ mPreviews.add(preview);
+ }
}
public void setKeyboardViewGeometry(final int[] originCoords, final int width,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
index 2fa703083..fd84856b7 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
@@ -23,7 +23,6 @@ import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.RectF;
import android.text.TextUtils;
-import android.view.View;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.latin.R;
@@ -49,6 +48,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
public final float mGesturePreviewHorizontalPadding;
public final float mGesturePreviewVerticalPadding;
public final float mGesturePreviewRoundRadius;
+ public final int mDisplayWidth;
private final int mGesturePreviewTextSize;
private final int mGesturePreviewTextColor;
@@ -72,6 +72,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
R.styleable.MainKeyboardView_gestureFloatingPreviewVerticalPadding, 0.0f);
mGesturePreviewRoundRadius = mainKeyboardViewAttr.getDimension(
R.styleable.MainKeyboardView_gestureFloatingPreviewRoundRadius, 0.0f);
+ mDisplayWidth = mainKeyboardViewAttr.getResources().getDisplayMetrics().widthPixels;
final Paint textPaint = getTextPaint();
final Rect textRect = new Rect();
@@ -100,9 +101,8 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
private final int[] mLastPointerCoords = CoordinateUtils.newInstance();
- public GestureFloatingTextDrawingPreview(final View drawingView, final TypedArray typedArray) {
- super(drawingView);
- mParams = new GesturePreviewTextParams(typedArray);
+ public GestureFloatingTextDrawingPreview(final TypedArray mainKeyboardViewAttr) {
+ mParams = new GesturePreviewTextParams(mainKeyboardViewAttr);
}
@Override
@@ -149,7 +149,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
*/
protected void updatePreviewPosition() {
if (mSuggestedWords.isEmpty() || TextUtils.isEmpty(mSuggestedWords.getWord(0))) {
- getDrawingView().invalidate();
+ invalidateDrawingView();
return;
}
final String text = mSuggestedWords.getWord(0);
@@ -163,10 +163,9 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
final float rectWidth = textWidth + hPad * 2.0f;
final float rectHeight = textHeight + vPad * 2.0f;
- final int displayWidth = getDrawingView().getResources().getDisplayMetrics().widthPixels;
final float rectX = Math.min(
Math.max(CoordinateUtils.x(mLastPointerCoords) - rectWidth / 2.0f, 0.0f),
- displayWidth - rectWidth);
+ mParams.mDisplayWidth - rectWidth);
final float rectY = CoordinateUtils.y(mLastPointerCoords)
- mParams.mGesturePreviewTextOffset - rectHeight;
rectangle.set(rectX, rectY, rectX + rectWidth, rectY + rectHeight);
@@ -174,6 +173,6 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
mPreviewTextX = (int)(rectX + hPad + textWidth / 2.0f);
mPreviewTextY = (int)(rectY + vPad) + textHeight;
// TODO: Should narrow the invalidate region.
- getDrawingView().invalidate();
+ invalidateDrawingView();
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
index 72628e38a..f7bd7efe0 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
@@ -24,17 +24,15 @@ import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
-import android.os.Message;
+import android.os.Handler;
import android.util.SparseArray;
-import android.view.View;
import com.android.inputmethod.keyboard.PointerTracker;
-import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
/**
* Draw preview graphics of multiple gesture trails during gesture input.
*/
-public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
+public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview implements Runnable {
private final SparseArray<GestureTrailDrawingPoints> mGestureTrails = new SparseArray<>();
private final GestureTrailDrawingParams mDrawingParams;
private final Paint mGesturePaint;
@@ -47,45 +45,10 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
private final Rect mDirtyRect = new Rect();
private final Rect mGestureTrailBoundsRect = new Rect(); // per trail
- private final DrawingHandler mDrawingHandler;
+ private final Handler mDrawingHandler = new Handler();
- private static final class DrawingHandler
- extends LeakGuardHandlerWrapper<GestureTrailsDrawingPreview> {
- private static final int MSG_UPDATE_GESTURE_TRAIL = 0;
-
- private final GestureTrailDrawingParams mDrawingParams;
-
- public DrawingHandler(final GestureTrailsDrawingPreview ownerInstance,
- final GestureTrailDrawingParams drawingParams) {
- super(ownerInstance);
- mDrawingParams = drawingParams;
- }
-
- @Override
- public void handleMessage(final Message msg) {
- final GestureTrailsDrawingPreview preview = getOwnerInstance();
- if (preview == null) {
- return;
- }
- switch (msg.what) {
- case MSG_UPDATE_GESTURE_TRAIL:
- preview.getDrawingView().invalidate();
- break;
- }
- }
-
- public void postUpdateGestureTrailPreview() {
- removeMessages(MSG_UPDATE_GESTURE_TRAIL);
- sendMessageDelayed(obtainMessage(MSG_UPDATE_GESTURE_TRAIL),
- mDrawingParams.mUpdateInterval);
- }
- }
-
- public GestureTrailsDrawingPreview(final View drawingView,
- final TypedArray mainKeyboardViewAttr) {
- super(drawingView);
+ public GestureTrailsDrawingPreview(final TypedArray mainKeyboardViewAttr) {
mDrawingParams = new GestureTrailDrawingParams(mainKeyboardViewAttr);
- mDrawingHandler = new DrawingHandler(this, mDrawingParams);
final Paint gesturePaint = new Paint();
gesturePaint.setAntiAlias(true);
gesturePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
@@ -153,6 +116,12 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
return needsUpdatingGestureTrail;
}
+ @Override
+ public void run() {
+ // Update preview.
+ invalidateDrawingView();
+ }
+
/**
* Draws the preview
* @param canvas The canvas where the preview is drawn.
@@ -167,7 +136,8 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
final boolean needsUpdatingGestureTrail = drawGestureTrails(
mOffscreenCanvas, mGesturePaint, mDirtyRect);
if (needsUpdatingGestureTrail) {
- mDrawingHandler.postUpdateGestureTrailPreview();
+ mDrawingHandler.removeCallbacks(this);
+ mDrawingHandler.postDelayed(this, mDrawingParams.mUpdateInterval);
}
// Transfer offscreen buffer to screen.
if (!mDirtyRect.isEmpty()) {
@@ -199,6 +169,6 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
trail.addStroke(tracker.getGestureStrokeDrawingPoints(), tracker.getDownTime());
// TODO: Should narrow the invalidate region.
- getDrawingView().invalidate();
+ invalidateDrawingView();
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
index 605519b02..cd29c8d17 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
@@ -21,17 +21,12 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
-import android.widget.TextView;
import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.ViewLayoutUtils;
@@ -46,10 +41,11 @@ import java.util.HashSet;
* - how key previews should be shown and dismissed.
*/
public final class KeyPreviewChoreographer {
- // Free {@link TextView} pool that can be used for key preview.
- private final ArrayDeque<TextView> mFreeKeyPreviewTextViews = new ArrayDeque<>();
- // Map from {@link Key} to {@link TextView} that is currently being displayed as key preview.
- private final HashMap<Key,TextView> mShowingKeyPreviewTextViews = new HashMap<>();
+ // Free {@link KeyPreviewView} pool that can be used for key preview.
+ private final ArrayDeque<KeyPreviewView> mFreeKeyPreviewViews = new ArrayDeque<>();
+ // Map from {@link Key} to {@link KeyPreviewView} that is currently being displayed as key
+ // preview.
+ private final HashMap<Key,KeyPreviewView> mShowingKeyPreviewViews = new HashMap<>();
private final KeyPreviewDrawParams mParams;
@@ -57,32 +53,28 @@ public final class KeyPreviewChoreographer {
mParams = params;
}
- public TextView getKeyPreviewTextView(final Key key, final ViewGroup placerView) {
- TextView previewTextView = mShowingKeyPreviewTextViews.remove(key);
- if (previewTextView != null) {
- return previewTextView;
+ public KeyPreviewView getKeyPreviewView(final Key key, final ViewGroup placerView) {
+ KeyPreviewView keyPreviewView = mShowingKeyPreviewViews.remove(key);
+ if (keyPreviewView != null) {
+ return keyPreviewView;
}
- previewTextView = mFreeKeyPreviewTextViews.poll();
- if (previewTextView != null) {
- return previewTextView;
+ keyPreviewView = mFreeKeyPreviewViews.poll();
+ if (keyPreviewView != null) {
+ return keyPreviewView;
}
final Context context = placerView.getContext();
- if (mParams.mLayoutId != 0) {
- previewTextView = (TextView)LayoutInflater.from(context)
- .inflate(mParams.mLayoutId, null);
- } else {
- previewTextView = new TextView(context);
- }
- placerView.addView(previewTextView, ViewLayoutUtils.newLayoutParam(placerView, 0, 0));
- return previewTextView;
+ keyPreviewView = new KeyPreviewView(context, null /* attrs */);
+ keyPreviewView.setBackgroundResource(mParams.mPreviewBackgroundResId);
+ placerView.addView(keyPreviewView, ViewLayoutUtils.newLayoutParam(placerView, 0, 0));
+ return keyPreviewView;
}
public boolean isShowingKeyPreview(final Key key) {
- return mShowingKeyPreviewTextViews.containsKey(key);
+ return mShowingKeyPreviewViews.containsKey(key);
}
public void dismissAllKeyPreviews() {
- for (final Key key : new HashSet<>(mShowingKeyPreviewTextViews.keySet())) {
+ for (final Key key : new HashSet<>(mShowingKeyPreviewViews.keySet())) {
dismissKeyPreview(key, false /* withAnimation */);
}
}
@@ -91,11 +83,11 @@ public final class KeyPreviewChoreographer {
if (key == null) {
return;
}
- final TextView previewTextView = mShowingKeyPreviewTextViews.get(key);
- if (previewTextView == null) {
+ final KeyPreviewView keyPreviewView = mShowingKeyPreviewViews.get(key);
+ if (keyPreviewView == null) {
return;
}
- final Object tag = previewTextView.getTag();
+ final Object tag = keyPreviewView.getTag();
if (withAnimation) {
if (tag instanceof KeyPreviewAnimations) {
final KeyPreviewAnimations animation = (KeyPreviewAnimations)tag;
@@ -104,105 +96,76 @@ public final class KeyPreviewChoreographer {
}
}
// Dismiss preview without animation.
- mShowingKeyPreviewTextViews.remove(key);
+ mShowingKeyPreviewViews.remove(key);
if (tag instanceof Animator) {
((Animator)tag).cancel();
}
- previewTextView.setTag(null);
- previewTextView.setVisibility(View.INVISIBLE);
- mFreeKeyPreviewTextViews.add(previewTextView);
+ keyPreviewView.setTag(null);
+ keyPreviewView.setVisibility(View.INVISIBLE);
+ mFreeKeyPreviewViews.add(keyPreviewView);
}
- // Background state set
- private static final int[][][] KEY_PREVIEW_BACKGROUND_STATE_TABLE = {
- { // STATE_MIDDLE
- {},
- { R.attr.state_has_morekeys }
- },
- { // STATE_LEFT
- { R.attr.state_left_edge },
- { R.attr.state_left_edge, R.attr.state_has_morekeys }
- },
- { // STATE_RIGHT
- { R.attr.state_right_edge },
- { R.attr.state_right_edge, R.attr.state_has_morekeys }
- }
- };
- private static final int STATE_MIDDLE = 0;
- private static final int STATE_LEFT = 1;
- private static final int STATE_RIGHT = 2;
- private static final int STATE_NORMAL = 0;
- private static final int STATE_HAS_MOREKEYS = 1;
+ public void placeAndShowKeyPreview(final Key key, final KeyboardIconsSet iconsSet,
+ final KeyDrawParams drawParams, final int keyboardViewWidth, final int[] keyboardOrigin,
+ final ViewGroup placerView, final boolean withAnimation) {
+ final KeyPreviewView keyPreviewView = getKeyPreviewView(key, placerView);
+ placeKeyPreview(
+ key, keyPreviewView, iconsSet, drawParams, keyboardViewWidth, keyboardOrigin);
+ showKeyPreview(key, keyPreviewView, withAnimation);
+ }
- public void placeKeyPreview(final Key key, final TextView previewTextView,
+ private void placeKeyPreview(final Key key, final KeyPreviewView keyPreviewView,
final KeyboardIconsSet iconsSet, final KeyDrawParams drawParams,
final int keyboardViewWidth, final int[] originCoords) {
- previewTextView.setTextColor(drawParams.mPreviewTextColor);
- final Drawable background = previewTextView.getBackground();
- final String label = key.getPreviewLabel();
- // What we show as preview should match what we show on a key top in onDraw().
- if (label != null) {
- // TODO Should take care of temporaryShiftLabel here.
- previewTextView.setCompoundDrawables(null, null, null, null);
- previewTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- key.selectPreviewTextSize(drawParams));
- previewTextView.setTypeface(key.selectPreviewTypeface(drawParams));
- previewTextView.setText(label);
- } else {
- previewTextView.setCompoundDrawables(null, null, null, key.getPreviewIcon(iconsSet));
- previewTextView.setText(null);
- }
-
- previewTextView.measure(
+ keyPreviewView.setPreviewVisual(key, iconsSet, drawParams);
+ keyPreviewView.measure(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- mParams.setGeometry(previewTextView);
- final int previewWidth = previewTextView.getMeasuredWidth();
+ mParams.setGeometry(keyPreviewView);
+ final int previewWidth = keyPreviewView.getMeasuredWidth();
final int previewHeight = mParams.mPreviewHeight;
final int keyDrawWidth = key.getDrawWidth();
// The key preview is horizontally aligned with the center of the visible part of the
// parent key. If it doesn't fit in this {@link KeyboardView}, it is moved inward to fit and
// the left/right background is used if such background is specified.
- final int statePosition;
+ final int keyPreviewPosition;
int previewX = key.getDrawX() - (previewWidth - keyDrawWidth) / 2
+ CoordinateUtils.x(originCoords);
if (previewX < 0) {
previewX = 0;
- statePosition = STATE_LEFT;
+ keyPreviewPosition = KeyPreviewView.POSITION_LEFT;
} else if (previewX > keyboardViewWidth - previewWidth) {
previewX = keyboardViewWidth - previewWidth;
- statePosition = STATE_RIGHT;
+ keyPreviewPosition = KeyPreviewView.POSITION_RIGHT;
} else {
- statePosition = STATE_MIDDLE;
+ keyPreviewPosition = KeyPreviewView.POSITION_MIDDLE;
}
+ final boolean hasMoreKeys = (key.getMoreKeys() != null);
+ keyPreviewView.setPreviewBackground(hasMoreKeys, keyPreviewPosition);
// The key preview is placed vertically above the top edge of the parent key with an
// arbitrary offset.
final int previewY = key.getY() - previewHeight + mParams.mPreviewOffset
+ CoordinateUtils.y(originCoords);
- if (background != null) {
- final int hasMoreKeys = (key.getMoreKeys() != null) ? STATE_HAS_MOREKEYS : STATE_NORMAL;
- background.setState(KEY_PREVIEW_BACKGROUND_STATE_TABLE[statePosition][hasMoreKeys]);
- }
ViewLayoutUtils.placeViewAt(
- previewTextView, previewX, previewY, previewWidth, previewHeight);
- previewTextView.setPivotX(previewWidth / 2.0f);
- previewTextView.setPivotY(previewHeight);
+ keyPreviewView, previewX, previewY, previewWidth, previewHeight);
+ keyPreviewView.setPivotX(previewWidth / 2.0f);
+ keyPreviewView.setPivotY(previewHeight);
}
- public void showKeyPreview(final Key key, final TextView previewTextView,
+ private void showKeyPreview(final Key key, final KeyPreviewView keyPreviewView,
final boolean withAnimation) {
if (!withAnimation) {
- previewTextView.setVisibility(View.VISIBLE);
- mShowingKeyPreviewTextViews.put(key, previewTextView);
+ keyPreviewView.setVisibility(View.VISIBLE);
+ mShowingKeyPreviewViews.put(key, keyPreviewView);
return;
}
// Show preview with animation.
- final Animator showUpAnimation = createShowUpAniation(key, previewTextView);
- final Animator dismissAnimation = createDismissAnimation(key, previewTextView);
+ final Animator showUpAnimation = createShowUpAniation(key, keyPreviewView);
+ final Animator dismissAnimation = createDismissAnimation(key, keyPreviewView);
final KeyPreviewAnimations animation = new KeyPreviewAnimations(
showUpAnimation, dismissAnimation);
- previewTextView.setTag(animation);
+ keyPreviewView.setTag(animation);
animation.startShowUp();
}
@@ -212,13 +175,13 @@ public final class KeyPreviewChoreographer {
private static final DecelerateInterpolator DECELERATE_INTERPOLATOR =
new DecelerateInterpolator();
- private Animator createShowUpAniation(final Key key, final TextView previewTextView) {
+ private Animator createShowUpAniation(final Key key, final KeyPreviewView keyPreviewView) {
// TODO: Optimization for no scale animation and no duration.
final ObjectAnimator scaleXAnimation = ObjectAnimator.ofFloat(
- previewTextView, View.SCALE_X, mParams.getShowUpStartScale(),
+ keyPreviewView, View.SCALE_X, mParams.getShowUpStartScale(),
KEY_PREVIEW_SHOW_UP_END_SCALE);
final ObjectAnimator scaleYAnimation = ObjectAnimator.ofFloat(
- previewTextView, View.SCALE_Y, mParams.getShowUpStartScale(),
+ keyPreviewView, View.SCALE_Y, mParams.getShowUpStartScale(),
KEY_PREVIEW_SHOW_UP_END_SCALE);
final AnimatorSet showUpAnimation = new AnimatorSet();
showUpAnimation.play(scaleXAnimation).with(scaleYAnimation);
@@ -227,18 +190,18 @@ public final class KeyPreviewChoreographer {
showUpAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(final Animator animation) {
- showKeyPreview(key, previewTextView, false /* withAnimation */);
+ showKeyPreview(key, keyPreviewView, false /* withAnimation */);
}
});
return showUpAnimation;
}
- private Animator createDismissAnimation(final Key key, final TextView previewTextView) {
+ private Animator createDismissAnimation(final Key key, final KeyPreviewView keyPreviewView) {
// TODO: Optimization for no scale animation and no duration.
final ObjectAnimator scaleXAnimation = ObjectAnimator.ofFloat(
- previewTextView, View.SCALE_X, mParams.getDismissEndScale());
+ keyPreviewView, View.SCALE_X, mParams.getDismissEndScale());
final ObjectAnimator scaleYAnimation = ObjectAnimator.ofFloat(
- previewTextView, View.SCALE_Y, mParams.getDismissEndScale());
+ keyPreviewView, View.SCALE_Y, mParams.getDismissEndScale());
final AnimatorSet dismissAnimation = new AnimatorSet();
dismissAnimation.play(scaleXAnimation).with(scaleYAnimation);
final int dismissDuration = Math.min(
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java
index 37e5c889d..68c9831fa 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewDrawParams.java
@@ -23,9 +23,9 @@ import com.android.inputmethod.latin.R;
public final class KeyPreviewDrawParams {
// XML attributes of {@link MainKeyboardView}.
- public final int mLayoutId;
public final int mPreviewOffset;
public final int mPreviewHeight;
+ public final int mPreviewBackgroundResId;
private int mShowUpDuration;
private int mDismissDuration;
private float mShowUpStartScale;
@@ -63,13 +63,10 @@ public final class KeyPreviewDrawParams {
R.styleable.MainKeyboardView_keyPreviewOffset, 0);
mPreviewHeight = mainKeyboardViewAttr.getDimensionPixelSize(
R.styleable.MainKeyboardView_keyPreviewHeight, 0);
+ mPreviewBackgroundResId = mainKeyboardViewAttr.getResourceId(
+ R.styleable.MainKeyboardView_keyPreviewBackground, 0);
mLingerTimeout = mainKeyboardViewAttr.getInt(
R.styleable.MainKeyboardView_keyPreviewLingerTimeout, 0);
- mLayoutId = mainKeyboardViewAttr.getResourceId(
- R.styleable.MainKeyboardView_keyPreviewLayout, 0);
- if (mLayoutId == 0) {
- mShowPopup = false;
- }
}
public void setVisibleOffset(final int previewVisibleOffset) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewView.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewView.java
new file mode 100644
index 000000000..360faf829
--- /dev/null
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewView.java
@@ -0,0 +1,90 @@
+/*
+ * 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.keyboard.internal;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.widget.TextView;
+
+import com.android.inputmethod.keyboard.Key;
+import com.android.inputmethod.latin.R;
+
+/**
+ * The pop up key preview view.
+ */
+public class KeyPreviewView extends TextView {
+ public static final int POSITION_MIDDLE = 0;
+ public static final int POSITION_LEFT = 1;
+ public static final int POSITION_RIGHT = 2;
+
+ public KeyPreviewView(final Context context, final AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public KeyPreviewView(final Context context, final AttributeSet attrs, final int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ setGravity(Gravity.CENTER);
+ }
+
+ public void setPreviewVisual(final Key key, final KeyboardIconsSet iconsSet,
+ final KeyDrawParams drawParams) {
+ // What we show as preview should match what we show on a key top in onDraw().
+ final int iconId = key.getIconId();
+ if (iconId != KeyboardIconsSet.ICON_UNDEFINED) {
+ setCompoundDrawables(null, null, null, key.getPreviewIcon(iconsSet));
+ setText(null);
+ return;
+ }
+
+ setCompoundDrawables(null, null, null, null);
+ setTextColor(drawParams.mPreviewTextColor);
+ setTextSize(TypedValue.COMPLEX_UNIT_PX, key.selectPreviewTextSize(drawParams));
+ setTypeface(key.selectPreviewTypeface(drawParams));
+ // TODO Should take care of temporaryShiftLabel here.
+ setText(key.getPreviewLabel());
+ }
+
+ // Background state set
+ private static final int[][][] KEY_PREVIEW_BACKGROUND_STATE_TABLE = {
+ { // POSITION_MIDDLE
+ {},
+ { R.attr.state_has_morekeys }
+ },
+ { // POSITION_LEFT
+ { R.attr.state_left_edge },
+ { R.attr.state_left_edge, R.attr.state_has_morekeys }
+ },
+ { // POSITION_RIGHT
+ { R.attr.state_right_edge },
+ { R.attr.state_right_edge, R.attr.state_has_morekeys }
+ }
+ };
+ private static final int STATE_NORMAL = 0;
+ private static final int STATE_HAS_MOREKEYS = 1;
+
+ public void setPreviewBackground(final boolean hasMoreKeys, final int position) {
+ final Drawable background = getBackground();
+ if (background == null) {
+ return;
+ }
+ final int hasMoreKeysState = hasMoreKeys ? STATE_HAS_MOREKEYS : STATE_NORMAL;
+ background.setState(KEY_PREVIEW_BACKGROUND_STATE_TABLE[position][hasMoreKeysState]);
+ }
+}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
index 76cb89160..ef4c74d61 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
@@ -20,7 +20,6 @@ import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
-import android.view.View;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.latin.R;
@@ -28,6 +27,11 @@ import com.android.inputmethod.latin.utils.CoordinateUtils;
/**
* Draw rubber band preview graphics during sliding key input.
+ *
+ * @attr ref R.styleable#MainKeyboardView_slidingKeyInputPreviewColor
+ * @attr ref R.styleable#MainKeyboardView_slidingKeyInputPreviewWidth
+ * @attr ref R.styleable#MainKeyboardView_slidingKeyInputPreviewBodyRatio
+ * @attr ref R.styleable#MainKeyboardView_slidingKeyInputPreviewShadowRatio
*/
public final class SlidingKeyInputDrawingPreview extends AbstractDrawingPreview {
private final float mPreviewBodyRadius;
@@ -40,9 +44,7 @@ public final class SlidingKeyInputDrawingPreview extends AbstractDrawingPreview
private final RoundedLine mRoundedLine = new RoundedLine();
private final Paint mPaint = new Paint();
- public SlidingKeyInputDrawingPreview(final View drawingView,
- final TypedArray mainKeyboardViewAttr) {
- super(drawingView);
+ public SlidingKeyInputDrawingPreview(final TypedArray mainKeyboardViewAttr) {
final int previewColor = mainKeyboardViewAttr.getColor(
R.styleable.MainKeyboardView_slidingKeyInputPreviewColor, 0);
final float previewRadius = mainKeyboardViewAttr.getDimension(
@@ -69,7 +71,7 @@ public final class SlidingKeyInputDrawingPreview extends AbstractDrawingPreview
public void dismissSlidingKeyInputPreview() {
mShowsSlidingKeyInputPreview = false;
- getDrawingView().invalidate();
+ invalidateDrawingView();
}
/**
@@ -99,6 +101,6 @@ public final class SlidingKeyInputDrawingPreview extends AbstractDrawingPreview
tracker.getDownCoordinates(mPreviewFrom);
tracker.getLastCoordinates(mPreviewTo);
mShowsSlidingKeyInputPreview = true;
- getDrawingView().invalidate();
+ invalidateDrawingView();
}
}
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 543f74fc4..335e52fef 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -28,7 +28,6 @@ import com.android.inputmethod.latin.makedict.FormatSpec;
import com.android.inputmethod.latin.makedict.FormatSpec.DictionaryOptions;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.makedict.WordProperty;
-import com.android.inputmethod.latin.settings.NativeSuggestOptions;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
import com.android.inputmethod.latin.utils.FileUtils;
import com.android.inputmethod.latin.utils.JniUtils;
@@ -49,10 +48,6 @@ import java.util.Map;
public final class BinaryDictionary extends Dictionary {
private static final String TAG = BinaryDictionary.class.getSimpleName();
- // Must be equal to MAX_WORD_LENGTH in native/jni/src/defines.h
- private static final int MAX_WORD_LENGTH = Constants.DICTIONARY_MAX_WORD_LENGTH;
- // Must be equal to MAX_RESULTS in native/jni/src/defines.h
- private static final int MAX_RESULTS = 18;
// The cutoff returned by native for auto-commit confidence.
// Must be equal to CONFIDENCE_TO_AUTO_COMMIT in native/jni/src/defines.h
private static final int CONFIDENCE_TO_AUTO_COMMIT = 1000000;
@@ -69,11 +64,12 @@ public final class BinaryDictionary extends Dictionary {
public static final int NOT_A_VALID_TIMESTAMP = -1;
// Format to get unigram flags from native side via getWordPropertyNative().
- private static final int FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT = 4;
+ private static final int FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT = 5;
private static final int FORMAT_WORD_PROPERTY_IS_NOT_A_WORD_INDEX = 0;
private static final int FORMAT_WORD_PROPERTY_IS_BLACKLISTED_INDEX = 1;
private static final int FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX = 2;
private static final int FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX = 3;
+ private static final int FORMAT_WORD_PROPERTY_IS_BEGINNING_OF_SENTENCE_INDEX = 4;
// Format to get probability and historical info from native side via getWordPropertyNative().
public static final int FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT = 4;
@@ -88,21 +84,10 @@ public final class BinaryDictionary extends Dictionary {
private final Locale mLocale;
private final long mDictSize;
private final String mDictFilePath;
+ private final boolean mUseFullEditDistance;
private final boolean mIsUpdatable;
private boolean mHasUpdated;
- private final int[] mInputCodePoints = new int[MAX_WORD_LENGTH];
- private final int[] mOutputSuggestionCount = new int[1];
- private final int[] mOutputCodePoints = new int[MAX_WORD_LENGTH * MAX_RESULTS];
- private final int[] mSpaceIndices = new int[MAX_RESULTS];
- private final int[] mOutputScores = new int[MAX_RESULTS];
- private final int[] mOutputTypes = new int[MAX_RESULTS];
- // Only one result is ever used
- private final int[] mOutputAutoCommitFirstWordConfidence = new int[1];
- private final float[] mInputOutputLanguageWeight = new float[1];
-
- private final NativeSuggestOptions mNativeSuggestOptions = new NativeSuggestOptions();
-
private final SparseArray<DicTraverseSession> mDicTraverseSessions = new SparseArray<>();
// TODO: There should be a way to remove used DicTraverseSession objects from
@@ -136,7 +121,7 @@ public final class BinaryDictionary extends Dictionary {
mDictFilePath = filename;
mIsUpdatable = isUpdatable;
mHasUpdated = false;
- mNativeSuggestOptions.setUseFullEditDistance(useFullEditDistance);
+ mUseFullEditDistance = useFullEditDistance;
loadDictionary(filename, offset, length, isUpdatable);
}
@@ -148,7 +133,6 @@ public final class BinaryDictionary extends Dictionary {
* @param formatVersion the format version of the dictionary
* @param attributeMap the attributes of the dictionary
*/
- @UsedForTesting
public BinaryDictionary(final String filename, final boolean useFullEditDistance,
final Locale locale, final String dictType, final long formatVersion,
final Map<String, String> attributeMap) {
@@ -159,7 +143,7 @@ public final class BinaryDictionary extends Dictionary {
// On memory dictionary is always updatable.
mIsUpdatable = true;
mHasUpdated = false;
- mNativeSuggestOptions.setUseFullEditDistance(useFullEditDistance);
+ mUseFullEditDistance = useFullEditDistance;
final String[] keyArray = new String[attributeMap.size()];
final String[] valueArray = new String[attributeMap.size()];
int index = 0;
@@ -193,10 +177,12 @@ public final class BinaryDictionary extends Dictionary {
private static native int getBigramProbabilityNative(long dict, int[] word0,
boolean isBeginningOfSentence, int[] word1);
private static native void getWordPropertyNative(long dict, int[] word,
- int[] outCodePoints, boolean[] outFlags, int[] outProbabilityInfo,
- ArrayList<int[]> outBigramTargets, ArrayList<int[]> outBigramProbabilityInfo,
- ArrayList<int[]> outShortcutTargets, ArrayList<Integer> outShortcutProbabilities);
- private static native int getNextWordNative(long dict, int token, int[] outCodePoints);
+ boolean isBeginningOfSentence, int[] outCodePoints, boolean[] outFlags,
+ int[] outProbabilityInfo, ArrayList<int[]> outBigramTargets,
+ ArrayList<int[]> outBigramProbabilityInfo, ArrayList<int[]> outShortcutTargets,
+ ArrayList<Integer> outShortcutProbabilities);
+ private static native int getNextWordNative(long dict, int token, int[] outCodePoints,
+ boolean[] outIsBeginningOfSentence);
private static native void getSuggestionsNative(long dict, long proximityInfo,
long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times,
int[] pointerIds, int[] inputCodePoints, int inputSize, int[] suggestOptions,
@@ -274,8 +260,8 @@ public final class BinaryDictionary extends Dictionary {
if (!isValidDictionary()) {
return null;
}
-
- Arrays.fill(mInputCodePoints, Constants.NOT_A_CODE);
+ final DicTraverseSession session = getTraverseSession(sessionId);
+ Arrays.fill(session.mInputCodePoints, Constants.NOT_A_CODE);
// TODO: toLowerCase in the native code
final int[] prevWordCodePointArray = (null == prevWordsInfo.mPrevWord)
? null : StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
@@ -284,47 +270,50 @@ public final class BinaryDictionary extends Dictionary {
final int inputSize;
if (!isGesture) {
inputSize = composer.copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount(
- mInputCodePoints);
+ session.mInputCodePoints);
if (inputSize < 0) {
return null;
}
} else {
inputSize = inputPointers.getPointerSize();
}
-
- mNativeSuggestOptions.setIsGesture(isGesture);
- mNativeSuggestOptions.setBlockOffensiveWords(blockOffensiveWords);
- mNativeSuggestOptions.setAdditionalFeaturesOptions(additionalFeaturesOptions);
+ session.mNativeSuggestOptions.setUseFullEditDistance(mUseFullEditDistance);
+ session.mNativeSuggestOptions.setIsGesture(isGesture);
+ session.mNativeSuggestOptions.setBlockOffensiveWords(blockOffensiveWords);
+ session.mNativeSuggestOptions.setAdditionalFeaturesOptions(additionalFeaturesOptions);
if (inOutLanguageWeight != null) {
- mInputOutputLanguageWeight[0] = inOutLanguageWeight[0];
+ session.mInputOutputLanguageWeight[0] = inOutLanguageWeight[0];
} else {
- mInputOutputLanguageWeight[0] = Dictionary.NOT_A_LANGUAGE_WEIGHT;
+ session.mInputOutputLanguageWeight[0] = Dictionary.NOT_A_LANGUAGE_WEIGHT;
}
// proximityInfo and/or prevWordForBigrams may not be null.
getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(),
getTraverseSession(sessionId).getSession(), inputPointers.getXCoordinates(),
inputPointers.getYCoordinates(), inputPointers.getTimes(),
- inputPointers.getPointerIds(), mInputCodePoints, inputSize,
- mNativeSuggestOptions.getOptions(), prevWordCodePointArray,
- prevWordsInfo.mIsBeginningOfSentence, mOutputSuggestionCount,
- mOutputCodePoints, mOutputScores, mSpaceIndices, mOutputTypes,
- mOutputAutoCommitFirstWordConfidence, mInputOutputLanguageWeight);
+ inputPointers.getPointerIds(), session.mInputCodePoints, inputSize,
+ session.mNativeSuggestOptions.getOptions(), prevWordCodePointArray,
+ prevWordsInfo.mIsBeginningOfSentence, session.mOutputSuggestionCount,
+ session.mOutputCodePoints, session.mOutputScores, session.mSpaceIndices,
+ session.mOutputTypes, session.mOutputAutoCommitFirstWordConfidence,
+ session.mInputOutputLanguageWeight);
if (inOutLanguageWeight != null) {
- inOutLanguageWeight[0] = mInputOutputLanguageWeight[0];
+ inOutLanguageWeight[0] = session.mInputOutputLanguageWeight[0];
}
- final int count = mOutputSuggestionCount[0];
+ final int count = session.mOutputSuggestionCount[0];
final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
for (int j = 0; j < count; ++j) {
- final int start = j * MAX_WORD_LENGTH;
+ final int start = j * Constants.DICTIONARY_MAX_WORD_LENGTH;
int len = 0;
- while (len < MAX_WORD_LENGTH && mOutputCodePoints[start + len] != 0) {
+ while (len < Constants.DICTIONARY_MAX_WORD_LENGTH
+ && session.mOutputCodePoints[start + len] != 0) {
++len;
}
if (len > 0) {
- suggestions.add(new SuggestedWordInfo(new String(mOutputCodePoints, start, len),
- mOutputScores[j], mOutputTypes[j], this /* sourceDict */,
- mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
- mOutputAutoCommitFirstWordConfidence[0]));
+ suggestions.add(new SuggestedWordInfo(
+ new String(session.mOutputCodePoints, start, len),
+ session.mOutputScores[j], session.mOutputTypes[j], this /* sourceDict */,
+ session.mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
+ session.mOutputAutoCommitFirstWordConfidence[0]));
}
}
return suggestions;
@@ -372,12 +361,12 @@ public final class BinaryDictionary extends Dictionary {
prevWordsInfo.mIsBeginningOfSentence, codePoints1);
}
- public WordProperty getWordProperty(final String word) {
- if (TextUtils.isEmpty(word)) {
+ public WordProperty getWordProperty(final String word, final boolean isBeginningOfSentence) {
+ if (word == null) {
return null;
}
final int[] codePoints = StringUtils.toCodePointArray(word);
- final int[] outCodePoints = new int[MAX_WORD_LENGTH];
+ final int[] outCodePoints = new int[Constants.DICTIONARY_MAX_WORD_LENGTH];
final boolean[] outFlags = new boolean[FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT];
final int[] outProbabilityInfo =
new int[FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT];
@@ -385,14 +374,15 @@ public final class BinaryDictionary extends Dictionary {
final ArrayList<int[]> outBigramProbabilityInfo = new ArrayList<>();
final ArrayList<int[]> outShortcutTargets = new ArrayList<>();
final ArrayList<Integer> outShortcutProbabilities = new ArrayList<>();
- getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbabilityInfo,
- outBigramTargets, outBigramProbabilityInfo, outShortcutTargets,
- outShortcutProbabilities);
+ getWordPropertyNative(mNativeDict, codePoints, isBeginningOfSentence, outCodePoints,
+ outFlags, outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo,
+ outShortcutTargets, outShortcutProbabilities);
return new WordProperty(codePoints,
outFlags[FORMAT_WORD_PROPERTY_IS_NOT_A_WORD_INDEX],
outFlags[FORMAT_WORD_PROPERTY_IS_BLACKLISTED_INDEX],
outFlags[FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX],
- outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX], outProbabilityInfo,
+ outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX],
+ outFlags[FORMAT_WORD_PROPERTY_IS_BEGINNING_OF_SENTENCE_INDEX], outProbabilityInfo,
outBigramTargets, outBigramProbabilityInfo, outShortcutTargets,
outShortcutProbabilities);
}
@@ -412,10 +402,13 @@ public final class BinaryDictionary extends Dictionary {
* If token is 0, this method newly starts iterating the dictionary.
*/
public GetNextWordPropertyResult getNextWordProperty(final int token) {
- final int[] codePoints = new int[MAX_WORD_LENGTH];
- final int nextToken = getNextWordNative(mNativeDict, token, codePoints);
+ final int[] codePoints = new int[Constants.DICTIONARY_MAX_WORD_LENGTH];
+ final boolean[] isBeginningOfSentence = new boolean[1];
+ final int nextToken = getNextWordNative(mNativeDict, token, codePoints,
+ isBeginningOfSentence);
final String word = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
- return new GetNextWordPropertyResult(getWordProperty(word), nextToken);
+ return new GetNextWordPropertyResult(
+ getWordProperty(word, isBeginningOfSentence[0]), nextToken);
}
// Add a unigram entry to binary dictionary with unigram attributes in native code.
diff --git a/java/src/com/android/inputmethod/latin/DicTraverseSession.java b/java/src/com/android/inputmethod/latin/DicTraverseSession.java
index 8d295adee..8bbf426e5 100644
--- a/java/src/com/android/inputmethod/latin/DicTraverseSession.java
+++ b/java/src/com/android/inputmethod/latin/DicTraverseSession.java
@@ -16,6 +16,7 @@
package com.android.inputmethod.latin;
+import com.android.inputmethod.latin.settings.NativeSuggestOptions;
import com.android.inputmethod.latin.utils.JniUtils;
import java.util.Locale;
@@ -24,6 +25,20 @@ public final class DicTraverseSession {
static {
JniUtils.loadNativeLibrary();
}
+ // Must be equal to MAX_RESULTS in native/jni/src/defines.h
+ private static final int MAX_RESULTS = 18;
+ public final int[] mInputCodePoints = new int[Constants.DICTIONARY_MAX_WORD_LENGTH];
+ public final int[] mOutputSuggestionCount = new int[1];
+ public final int[] mOutputCodePoints =
+ new int[Constants.DICTIONARY_MAX_WORD_LENGTH * MAX_RESULTS];
+ public final int[] mSpaceIndices = new int[MAX_RESULTS];
+ public final int[] mOutputScores = new int[MAX_RESULTS];
+ public final int[] mOutputTypes = new int[MAX_RESULTS];
+ // Only one result is ever used
+ public final int[] mOutputAutoCommitFirstWordConfidence = new int[1];
+ public final float[] mInputOutputLanguageWeight = new float[1];
+
+ public final NativeSuggestOptions mNativeSuggestOptions = new NativeSuggestOptions();
private static native long setDicTraverseSessionNative(String locale, long dictSize);
private static native void initDicTraverseSessionNative(long nativeDicTraverseSession,
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 4a28a242a..304c450ab 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -468,20 +468,24 @@ public class DictionaryFacilitator {
isValid, timeStampInSeconds, mDistracterFilter);
}
- public void cancelAddingUserHistory(final PrevWordsInfo prevWordsInfo,
- final String committedWord) {
- final ExpandableBinaryDictionary userHistoryDictionary =
- mDictionaries.getSubDict(Dictionary.TYPE_USER_HISTORY);
- if (userHistoryDictionary != null) {
- userHistoryDictionary.removeNgramDynamically(prevWordsInfo, committedWord);
+ private void removeWord(final String dictName, final String word) {
+ final ExpandableBinaryDictionary dictionary = mDictionaries.getSubDict(dictName);
+ if (dictionary != null) {
+ dictionary.removeUnigramEntryDynamically(word);
}
}
+ public void removeWordFromPersonalizedDicts(final String word) {
+ removeWord(Dictionary.TYPE_USER_HISTORY, word);
+ removeWord(Dictionary.TYPE_PERSONALIZATION, word);
+ removeWord(Dictionary.TYPE_CONTEXTUAL, word);
+ }
+
// TODO: Revise the way to fusion suggestion results.
public SuggestionResults getSuggestionResults(final WordComposer composer,
final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
- final int sessionId, final ArrayList<SuggestedWordInfo> rawSuggestions) {
+ final int sessionId) {
final Dictionaries dictionaries = mDictionaries;
final SuggestionResults suggestionResults =
new SuggestionResults(dictionaries.mLocale, SuggestedWords.MAX_SUGGESTIONS);
@@ -495,21 +499,13 @@ public class DictionaryFacilitator {
languageWeight);
if (null == dictionarySuggestions) continue;
suggestionResults.addAll(dictionarySuggestions);
- if (null != rawSuggestions) {
- rawSuggestions.addAll(dictionarySuggestions);
+ if (null != suggestionResults.mRawSuggestions) {
+ suggestionResults.mRawSuggestions.addAll(dictionarySuggestions);
}
}
return suggestionResults;
}
- public boolean isValidMainDictWord(final String word) {
- final Dictionary mainDict = mDictionaries.getDict(Dictionary.TYPE_MAIN);
- if (TextUtils.isEmpty(word) || mainDict == null) {
- return false;
- }
- return mainDict.isValidWord(word);
- }
-
public boolean isValidWord(final String word, final boolean ignoreCase) {
if (TextUtils.isEmpty(word)) {
return false;
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index b1966bffc..37879cf68 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -122,12 +122,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
return mBinaryDictionary.isValidDictionary();
}
- // TODO: Remove and always enable beginning of sentence prediction. Currently, this is enabled
- // only for ContextualDictionary.
- protected boolean enableBeginningOfSentencePrediction() {
- return false;
- }
-
/**
* Creates a new expandable binary dictionary.
*
@@ -311,6 +305,27 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
/**
+ * Dynamically remove the unigram entry from the dictionary.
+ */
+ public void removeUnigramEntryDynamically(final String word) {
+ reloadDictionaryIfRequired();
+ asyncExecuteTaskWithWriteLock(new Runnable() {
+ @Override
+ public void run() {
+ if (mBinaryDictionary == null) {
+ return;
+ }
+ runGCIfRequiredLocked(true /* mindsBlockByGC */);
+ if (!mBinaryDictionary.removeUnigramEntry(word)) {
+ if (DEBUG) {
+ Log.i(TAG, "Cannot remove unigram entry: " + word);
+ }
+ }
+ }
+ });
+ }
+
+ /**
* Adds n-gram information of a word to the dictionary. May overwrite an existing entry.
*/
public void addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
@@ -341,6 +356,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
/**
* Dynamically remove the n-gram entry in the dictionary.
*/
+ @UsedForTesting
public void removeNgramDynamically(final PrevWordsInfo prevWordsInfo, final String word) {
reloadDictionaryIfRequired();
asyncExecuteTaskWithWriteLock(new Runnable() {
@@ -404,10 +420,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
if (mBinaryDictionary == null) {
return null;
}
- if (composer.size() == 0 && prevWordsInfo.mIsBeginningOfSentence
- && !enableBeginningOfSentencePrediction()) {
- return null;
- }
final ArrayList<SuggestedWordInfo> suggestions =
mBinaryDictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
blockOffensiveWords, additionalFeaturesOptions, sessionId,
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index e1ae3dfe3..ebe436128 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -41,6 +41,7 @@ public final class InputAttributes {
final public boolean mShouldShowSuggestions;
final public boolean mApplicationSpecifiedCompletionOn;
final public boolean mShouldInsertSpacesAutomatically;
+ final public boolean mShouldShowVoiceInputKey;
final private int mInputType;
final private EditorInfo mEditorInfo;
final private String mPackageNameForPrivateImeOptions;
@@ -74,6 +75,7 @@ public final class InputAttributes {
mInputTypeNoAutoCorrect = false;
mApplicationSpecifiedCompletionOn = false;
mShouldInsertSpacesAutomatically = false;
+ mShouldShowVoiceInputKey = false;
return;
}
// inputClass == InputType.TYPE_CLASS_TEXT
@@ -99,6 +101,12 @@ public final class InputAttributes {
mShouldInsertSpacesAutomatically = InputTypeUtils.isAutoSpaceFriendlyType(inputType);
+ final boolean noMicrophone = mIsPasswordField
+ || InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS == variation
+ || InputType.TYPE_TEXT_VARIATION_URI == variation
+ || hasNoMicrophoneKeyOption();
+ mShouldShowVoiceInputKey = !noMicrophone;
+
// If it's a browser edit field and auto correct is not ON explicitly, then
// disable auto correction, but keep suggestions on.
// If NO_SUGGESTIONS is set, don't do prediction.
@@ -119,7 +127,7 @@ public final class InputAttributes {
return editorInfo.inputType == mInputType;
}
- public boolean hasNoMicrophoneKeyOption() {
+ private boolean hasNoMicrophoneKeyOption() {
@SuppressWarnings("deprecation")
final boolean deprecatedNoMicrophone = InputAttributes.inPrivateImeOptions(
null, NO_MICROPHONE_COMPAT, mEditorInfo);
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 670d856e3..9d03e8a43 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -100,30 +100,43 @@ public final class Suggest {
? typedWord.substring(0, typedWord.length() - trailingSingleQuotesCount)
: typedWord;
- final ArrayList<SuggestedWordInfo> rawSuggestions;
- if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
- rawSuggestions = new ArrayList<>();
- } else {
- rawSuggestions = null;
- }
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
- additionalFeaturesOptions, SESSION_TYPING, rawSuggestions);
+ additionalFeaturesOptions, SESSION_TYPING);
+ final boolean isPrediction = !wordComposer.isComposingWord();
+ final boolean shouldMakeSuggestionsAllUpperCase = wordComposer.isAllUpperCase()
+ && !wordComposer.isResumed();
final boolean isOnlyFirstCharCapitalized =
wordComposer.isOrWillBeOnlyFirstCharCapitalized();
+
+ final ArrayList<SuggestedWordInfo> suggestionsContainer =
+ new ArrayList<>(suggestionResults);
+ final int suggestionsCount = suggestionsContainer.size();
+ if (isOnlyFirstCharCapitalized || shouldMakeSuggestionsAllUpperCase
+ || 0 != trailingSingleQuotesCount) {
+ for (int i = 0; i < suggestionsCount; ++i) {
+ final SuggestedWordInfo wordInfo = suggestionsContainer.get(i);
+ final SuggestedWordInfo transformedWordInfo = getTransformedSuggestedWordInfo(
+ wordInfo, suggestionResults.mLocale, shouldMakeSuggestionsAllUpperCase,
+ isOnlyFirstCharCapitalized, trailingSingleQuotesCount);
+ suggestionsContainer.set(i, transformedWordInfo);
+ }
+ }
+ SuggestedWordInfo.removeDups(typedWord, suggestionsContainer);
+
// 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.
- final boolean isAllUpperCase = wordComposer.isAllUpperCase() && !wordComposer.isResumed();
final String firstSuggestion;
final String whitelistedWord;
if (suggestionResults.isEmpty()) {
whitelistedWord = firstSuggestion = null;
} else {
final SuggestedWordInfo firstSuggestedWordInfo = getTransformedSuggestedWordInfo(
- suggestionResults.first(), suggestionResults.mLocale, isAllUpperCase,
- isOnlyFirstCharCapitalized, trailingSingleQuotesCount);
+ suggestionResults.first(), suggestionResults.mLocale,
+ shouldMakeSuggestionsAllUpperCase, isOnlyFirstCharCapitalized,
+ trailingSingleQuotesCount);
firstSuggestion = firstSuggestedWordInfo.mWord;
if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
whitelistedWord = null;
@@ -132,8 +145,6 @@ public final class Suggest {
}
}
- final boolean isPrediction = !wordComposer.isComposingWord();
-
// We allow auto-correction if we have a whitelisted word, or if the word is not a valid
// word of more than 1 char, except if the first suggestion is the same as the typed string
// because in this case if it's strong enough to auto-correct that will mistakenly designate
@@ -171,19 +182,6 @@ public final class Suggest {
suggestionResults.first(), consideredWord, mAutoCorrectionThreshold);
}
- final ArrayList<SuggestedWordInfo> suggestionsContainer =
- new ArrayList<>(suggestionResults);
- final int suggestionsCount = suggestionsContainer.size();
- 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,
- isOnlyFirstCharCapitalized, trailingSingleQuotesCount);
- suggestionsContainer.set(i, transformedWordInfo);
- }
- }
-
if (!TextUtils.isEmpty(typedWord)) {
suggestionsContainer.add(0, new SuggestedWordInfo(typedWord,
SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_TYPED,
@@ -191,7 +189,6 @@ public final class Suggest {
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */));
}
- SuggestedWordInfo.removeDups(suggestionsContainer);
final ArrayList<SuggestedWordInfo> suggestionsList;
if (DBG && !suggestionsContainer.isEmpty()) {
@@ -200,12 +197,13 @@ public final class Suggest {
suggestionsList = suggestionsContainer;
}
- callback.onGetSuggestedWords(new SuggestedWords(suggestionsList, rawSuggestions,
+ callback.onGetSuggestedWords(new SuggestedWords(suggestionsList,
+ suggestionResults.mRawSuggestions,
// TODO: this first argument is lying. If this is a whitelisted word which is an
// actual word, it says typedWordValid = false, which looks wrong. We should either
// rename the attribute or change the value.
!isPrediction && !allowsToBeAutoCorrected /* typedWordValid */,
- hasAutoCorrection, /* willAutoCorrect */
+ hasAutoCorrection /* willAutoCorrect */,
false /* isObsoleteSuggestions */, isPrediction, sequenceNumber));
}
@@ -216,15 +214,9 @@ public final class Suggest {
final boolean blockOffensiveWords, final int[] additionalFeaturesOptions,
final int sessionId, final int sequenceNumber,
final OnGetSuggestedWordsCallback callback) {
- final ArrayList<SuggestedWordInfo> rawSuggestions;
- if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
- rawSuggestions = new ArrayList<>();
- } else {
- rawSuggestions = null;
- }
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
- additionalFeaturesOptions, sessionId, rawSuggestions);
+ additionalFeaturesOptions, sessionId);
final ArrayList<SuggestedWordInfo> suggestionsContainer =
new ArrayList<>(suggestionResults);
final int suggestionsCount = suggestionsContainer.size();
@@ -245,7 +237,7 @@ public final class Suggest {
final SuggestedWordInfo rejected = suggestionsContainer.remove(0);
suggestionsContainer.add(1, rejected);
}
- SuggestedWordInfo.removeDups(suggestionsContainer);
+ SuggestedWordInfo.removeDups(null /* typedWord */, suggestionsContainer);
// For some reason some suggestions with MIN_VALUE are making their way here.
// TODO: Find a more robust way to detect distractors.
@@ -257,7 +249,8 @@ public final class Suggest {
// In the batch input mode, the most relevant suggested word should act as a "typed word"
// (typedWordValid=true), not as an "auto correct word" (willAutoCorrect=false).
- callback.onGetSuggestedWords(new SuggestedWords(suggestionsContainer, rawSuggestions,
+ callback.onGetSuggestedWords(new SuggestedWords(suggestionsContainer,
+ suggestionResults.mRawSuggestions,
true /* typedWordValid */,
false /* willAutoCorrect */,
false /* isObsoleteSuggestions */,
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index 72461e17a..f22af7991 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -316,10 +316,6 @@ public class SuggestedWords {
return mDebugString;
}
- public int codePointCount() {
- return mCodePointCount;
- }
-
public int codePointAt(int i) {
return mWord.codePointAt(i);
}
@@ -333,23 +329,29 @@ public class SuggestedWords {
}
}
- // TODO: Consolidate this method and StringUtils.removeDupes() in the future.
- public static void removeDups(ArrayList<SuggestedWordInfo> candidates) {
- if (candidates.size() <= 1) {
+ // This will always remove the higher index if a duplicate is found.
+ public static void removeDups(final String typedWord,
+ ArrayList<SuggestedWordInfo> candidates) {
+ if (candidates.isEmpty()) {
return;
}
- int i = 1;
- while (i < candidates.size()) {
- final SuggestedWordInfo cur = candidates.get(i);
- for (int j = 0; j < i; ++j) {
- final SuggestedWordInfo previous = candidates.get(j);
- if (cur.mWord.equals(previous.mWord)) {
- candidates.remove(cur.mScore < previous.mScore ? i : j);
- --i;
- break;
- }
+ if (!TextUtils.isEmpty(typedWord)) {
+ removeSuggestedWordInfoFrom(typedWord, candidates, -1 /* startIndexExclusive */);
+ }
+ for (int i = 0; i < candidates.size(); ++i) {
+ removeSuggestedWordInfoFrom(candidates.get(i).mWord, candidates,
+ i /* startIndexExclusive */);
+ }
+ }
+
+ private static void removeSuggestedWordInfoFrom(final String word,
+ final ArrayList<SuggestedWordInfo> candidates, final int startIndexExclusive) {
+ for (int i = startIndexExclusive + 1; i < candidates.size(); ++i) {
+ final SuggestedWordInfo previous = candidates.get(i);
+ if (word.equals(previous.mWord)) {
+ candidates.remove(i);
+ --i;
}
- ++i;
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index de95b9787..4d3f5b50b 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -728,14 +728,13 @@ public final class InputLogic {
mConnection.setComposingText(getTextWithUnderline(
mWordComposer.getTypedWord()), 1);
} else {
- final boolean swapWeakSpace = maybeStripSpace(inputTransaction,
- inputTransaction.mEvent.isSuggestionStripPress());
+ final boolean swapWeakSpace = tryStripSpaceAndReturnWhetherShouldSwapInstead(
+ inputTransaction, inputTransaction.mEvent.isSuggestionStripPress());
- sendKeyCodePoint(settingsValues, codePoint);
-
- if (swapWeakSpace) {
- swapSwapperAndSpace(inputTransaction);
+ if (swapWeakSpace && trySwapSwapperAndSpace(inputTransaction)) {
mSpaceState = SpaceState.WEAK;
+ } else {
+ sendKeyCodePoint(settingsValues, codePoint);
}
// In case the "add to dictionary" hint was still displayed.
mSuggestionStripViewAccessor.dismissAddToDictionaryHint();
@@ -780,7 +779,8 @@ public final class InputLogic {
}
}
- final boolean swapWeakSpace = maybeStripSpace(inputTransaction, isFromSuggestionStrip);
+ final boolean swapWeakSpace = tryStripSpaceAndReturnWhetherShouldSwapInstead(
+ inputTransaction, isFromSuggestionStrip);
final boolean isInsideDoubleQuoteOrAfterDigit = Constants.CODE_DOUBLE_QUOTE == codePoint
&& mConnection.isInsideDoubleQuoteOrAfterDigit();
@@ -804,16 +804,14 @@ public final class InputLogic {
promotePhantomSpace(settingsValues);
}
- if (!shouldAvoidSendingCode) {
- sendKeyCodePoint(settingsValues, codePoint);
- }
-
- if (Constants.CODE_SPACE == codePoint) {
- if (maybeDoubleSpacePeriod(inputTransaction)) {
- inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
- inputTransaction.setRequiresUpdateSuggestions();
- mSpaceState = SpaceState.DOUBLE;
- } else if (!mSuggestedWords.isPunctuationSuggestions()) {
+ if (tryPerformDoubleSpacePeriod(inputTransaction)) {
+ mSpaceState = SpaceState.DOUBLE;
+ inputTransaction.setRequiresUpdateSuggestions();
+ } else if (swapWeakSpace && trySwapSwapperAndSpace(inputTransaction)) {
+ mSpaceState = SpaceState.SWAP_PUNCTUATION;
+ mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
+ } else if (Constants.CODE_SPACE == codePoint) {
+ if (!mSuggestedWords.isPunctuationSuggestions()) {
mSpaceState = SpaceState.WEAK;
}
@@ -821,11 +819,12 @@ public final class InputLogic {
if (wasComposingWord || mSuggestedWords.isEmpty()) {
inputTransaction.setRequiresUpdateSuggestions();
}
+
+ if (!shouldAvoidSendingCode) {
+ sendKeyCodePoint(settingsValues, codePoint);
+ }
} else {
- if (swapWeakSpace) {
- swapSwapperAndSpace(inputTransaction);
- mSpaceState = SpaceState.SWAP_PUNCTUATION;
- } else if ((SpaceState.PHANTOM == inputTransaction.mSpaceState
+ if ((SpaceState.PHANTOM == inputTransaction.mSpaceState
&& settingsValues.isUsuallyFollowedBySpace(codePoint))
|| (Constants.CODE_DOUBLE_QUOTE == codePoint
&& isInsideDoubleQuoteOrAfterDigit)) {
@@ -843,6 +842,8 @@ public final class InputLogic {
mSpaceState = SpaceState.PHANTOM;
}
+ sendKeyCodePoint(settingsValues, codePoint);
+
// Set punctuation right away. onUpdateSelection will fire but tests whether it is
// already displayed or not, so it's okay.
mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
@@ -884,6 +885,9 @@ public final class InputLogic {
final String rejectedSuggestion = mWordComposer.getTypedWord();
mWordComposer.reset();
mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion);
+ if (!TextUtils.isEmpty(rejectedSuggestion)) {
+ mDictionaryFacilitator.removeWordFromPersonalizedDicts(rejectedSuggestion);
+ }
} else {
mWordComposer.processEvent(inputTransaction.mEvent);
}
@@ -1005,16 +1009,18 @@ public final class InputLogic {
* This method will check that there are two characters before the cursor and that the first
* one is a space before it does the actual swapping.
* @param inputTransaction The transaction in progress.
+ * @return true if the swap has been performed, false if it was prevented by preliminary checks.
*/
- private void swapSwapperAndSpace(final InputTransaction inputTransaction) {
- final CharSequence lastTwo = mConnection.getTextBeforeCursor(2, 0);
- // It is guaranteed lastTwo.charAt(1) is a swapper - else this method is not called.
- if (lastTwo != null && lastTwo.length() == 2 && lastTwo.charAt(0) == Constants.CODE_SPACE) {
- mConnection.deleteSurroundingText(2, 0);
- final String text = lastTwo.charAt(1) + " ";
- mConnection.commitText(text, 1);
- inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
+ private boolean trySwapSwapperAndSpace(final InputTransaction inputTransaction) {
+ final int codePointBeforeCursor = mConnection.getCodePointBeforeCursor();
+ if (Constants.CODE_SPACE != codePointBeforeCursor) {
+ return false;
}
+ mConnection.deleteSurroundingText(1, 0);
+ final String text = inputTransaction.mEvent.getTextToCommit() + " ";
+ mConnection.commitText(text, 1);
+ inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
+ return true;
}
/*
@@ -1023,8 +1029,8 @@ public final class InputLogic {
* @param isFromSuggestionStrip Whether this code point is coming from the suggestion strip.
* @return whether we should swap the space instead of removing it.
*/
- private boolean maybeStripSpace(final InputTransaction inputTransaction,
- final boolean isFromSuggestionStrip) {
+ private boolean tryStripSpaceAndReturnWhetherShouldSwapInstead(
+ final InputTransaction inputTransaction, final boolean isFromSuggestionStrip) {
final int codePoint = inputTransaction.mEvent.mCodePoint;
if (Constants.CODE_ENTER == codePoint &&
SpaceState.SWAP_PUNCTUATION == inputTransaction.mSpaceState) {
@@ -1065,37 +1071,42 @@ public final class InputLogic {
* period-space sequence of characters. This typically happens when the user presses space
* twice in a row quickly.
* This method will check that the double-space-to-period is active in settings, that the
- * two spaces have been input close enough together, and that the previous character allows
- * for the transformation to take place. If all of these conditions are fulfilled, this
- * method applies the transformation and returns true. Otherwise, it does nothing and
- * returns false.
+ * two spaces have been input close enough together, that the typed character is a space
+ * and that the previous character allows for the transformation to take place. If all of
+ * these conditions are fulfilled, this method applies the transformation and returns true.
+ * Otherwise, it does nothing and returns false.
*
* @param inputTransaction The transaction in progress.
* @return true if we applied the double-space-to-period transformation, false otherwise.
*/
- private boolean maybeDoubleSpacePeriod(final InputTransaction inputTransaction) {
- if (!inputTransaction.mSettingsValues.mUseDoubleSpacePeriod) return false;
- if (!isDoubleSpacePeriodCountdownActive(inputTransaction)) return false;
- // We only do this when we see two spaces and an accepted code point before the cursor.
- // The code point may be a surrogate pair but the two spaces may not, so we need 4 chars.
- final CharSequence lastThree = mConnection.getTextBeforeCursor(4, 0);
- if (null == lastThree) return false;
- final int length = lastThree.length();
- if (length < 3) return false;
- if (lastThree.charAt(length - 1) != Constants.CODE_SPACE) return false;
- if (lastThree.charAt(length - 2) != Constants.CODE_SPACE) return false;
- // We know there are spaces in pos -1 and -2, and we have at least three chars.
- // If we have only three chars, isSurrogatePairs can't return true as charAt(1) is a space,
- // so this is fine.
+ private boolean tryPerformDoubleSpacePeriod(final InputTransaction inputTransaction) {
+ // Check the setting, the typed character and the countdown. If any of the conditions is
+ // not fulfilled, return false.
+ if (!inputTransaction.mSettingsValues.mUseDoubleSpacePeriod
+ || Constants.CODE_SPACE != inputTransaction.mEvent.mCodePoint
+ || !isDoubleSpacePeriodCountdownActive(inputTransaction)) {
+ return false;
+ }
+ // We only do this when we see one space and an accepted code point before the cursor.
+ // The code point may be a surrogate pair but the space may not, so we need 3 chars.
+ final CharSequence lastTwo = mConnection.getTextBeforeCursor(3, 0);
+ if (null == lastTwo) return false;
+ final int length = lastTwo.length();
+ if (length < 2) return false;
+ if (lastTwo.charAt(length - 1) != Constants.CODE_SPACE) return false;
+ // We know there is a space in pos -1, and we have at least two chars. If we have only two
+ // chars, isSurrogatePairs can't return true as charAt(1) is a space, so this is fine.
final int firstCodePoint =
- Character.isSurrogatePair(lastThree.charAt(0), lastThree.charAt(1)) ?
- Character.codePointAt(lastThree, 0) : lastThree.charAt(length - 3);
+ Character.isSurrogatePair(lastTwo.charAt(0), lastTwo.charAt(1)) ?
+ Character.codePointAt(lastTwo, length - 3) : lastTwo.charAt(length - 2);
if (canBeFollowedByDoubleSpacePeriod(firstCodePoint)) {
cancelDoubleSpacePeriodCountdown();
- mConnection.deleteSurroundingText(2, 0);
+ mConnection.deleteSurroundingText(1, 0);
final String textToInsert = inputTransaction.mSettingsValues.mSpacingAndPunctuations
.mSentenceSeparatorAndSpace;
mConnection.commitText(textToInsert, 1);
+ inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
+ inputTransaction.setRequiresUpdateSuggestions();
return true;
}
return false;
@@ -1187,6 +1198,8 @@ public final class InputLogic {
Log.w(TAG, "Called updateSuggestionsOrPredictions but suggestions were not "
+ "requested!");
}
+ // Clear the suggestions strip.
+ mSuggestionStripViewAccessor.showSuggestionStrip(SuggestedWords.EMPTY);
return;
}
@@ -1363,7 +1376,6 @@ public final class InputLogic {
* @param inputTransaction The transaction in progress.
*/
private void revertCommit(final InputTransaction inputTransaction) {
- final PrevWordsInfo prevWordsInfo = mLastComposedWord.mPrevWordsInfo;
final CharSequence originallyTypedWord = mLastComposedWord.mTypedWord;
final CharSequence committedWord = mLastComposedWord.mCommittedWord;
final String committedWordString = committedWord.toString();
@@ -1385,8 +1397,8 @@ public final class InputLogic {
}
}
mConnection.deleteSurroundingText(deleteLength, 0);
- if (!TextUtils.isEmpty(prevWordsInfo.mPrevWord) && !TextUtils.isEmpty(committedWord)) {
- mDictionaryFacilitator.cancelAddingUserHistory(prevWordsInfo, committedWordString);
+ if (!TextUtils.isEmpty(committedWord)) {
+ mDictionaryFacilitator.removeWordFromPersonalizedDicts(committedWordString);
}
final String stringToCommit = originallyTypedWord + mLastComposedWord.mSeparatorString;
final SpannableString textToCommit = new SpannableString(stringToCommit);
diff --git a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
index 31cb59756..cd78e2235 100644
--- a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
+++ b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
@@ -70,8 +70,8 @@ public final class WordProperty implements Comparable<WordProperty> {
// Construct word property using information from native code.
// This represents invalid word when the probability is BinaryDictionary.NOT_A_PROBABILITY.
public WordProperty(final int[] codePoints, final boolean isNotAWord,
- final boolean isBlacklisted, final boolean hasBigram,
- final boolean hasShortcuts, final int[] probabilityInfo,
+ final boolean isBlacklisted, final boolean hasBigram, final boolean hasShortcuts,
+ final boolean isBeginningOfSentence, final int[] probabilityInfo,
final ArrayList<int[]> bigramTargets, final ArrayList<int[]> bigramProbabilityInfo,
final ArrayList<int[]> shortcutTargets,
final ArrayList<Integer> shortcutProbabilities) {
@@ -79,7 +79,7 @@ public final class WordProperty implements Comparable<WordProperty> {
mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo);
mShortcutTargets = new ArrayList<>();
mBigrams = new ArrayList<>();
- mIsBeginningOfSentence = false;
+ mIsBeginningOfSentence = isBeginningOfSentence;
mIsNotAWord = isNotAWord;
mIsBlacklistEntry = isBlacklisted;
mHasShortcuts = hasShortcuts;
diff --git a/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java b/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java
index a96018fe9..ac55b9333 100644
--- a/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/ContextualDictionary.java
@@ -43,11 +43,6 @@ public class ContextualDictionary extends ExpandableBinaryDictionary {
}
@Override
- protected boolean enableBeginningOfSentencePrediction() {
- return true;
- }
-
- @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/settings/DebugSettings.java b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
index 845ddb377..c17e86892 100644
--- a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
@@ -21,14 +21,13 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Process;
-import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.preference.TwoStatePreference;
-import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryDumpBroadcastReceiver;
import com.android.inputmethod.latin.DictionaryFacilitator;
import com.android.inputmethod.latin.R;
@@ -57,7 +56,7 @@ public final class DebugSettings extends PreferenceFragment
public static final String PREF_KEY_LONGPRESS_TIMEOUT = "pref_key_longpress_timeout";
private boolean mServiceNeedsRestart = false;
- private CheckBoxPreference mDebugMode;
+ private TwoStatePreference mDebugMode;
@Override
public void onCreate(Bundle icicle) {
@@ -107,7 +106,7 @@ public final class DebugSettings extends PreferenceFragment
res, R.fraction.config_key_preview_dismiss_end_scale));
mServiceNeedsRestart = false;
- mDebugMode = (CheckBoxPreference) findPreference(PREF_DEBUG_MODE);
+ mDebugMode = (TwoStatePreference) findPreference(PREF_DEBUG_MODE);
updateDebugMode();
}
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index 235847799..fb1a210bb 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -39,8 +39,14 @@ import java.util.concurrent.locks.ReentrantLock;
public final class Settings implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = Settings.class.getSimpleName();
+ // Settings screens
+ public static final String SCREEN_INPUT = "screen_input";
+ public static final String SCREEN_MULTI_LINGUAL = "screen_multi_lingual";
+ public static final String SCREEN_GESTURE = "screen_gesture";
+ public static final String SCREEN_CORRECTION = "screen_correction";
+ public static final String SCREEN_ADVANCED = "screen_advanced";
+ public static final String SCREEN_DEBUG = "screen_debug";
// In the same order as xml/prefs.xml
- public static final String PREF_GENERAL_SETTINGS = "general_settings";
public static final String PREF_AUTO_CAP = "auto_cap";
public static final String PREF_VIBRATE_ON = "vibrate_on";
public static final String PREF_SOUND_ON = "sound_on";
@@ -48,13 +54,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
// PREF_VOICE_MODE_OBSOLETE is obsolete. Use PREF_VOICE_INPUT_KEY instead.
public static final String PREF_VOICE_MODE_OBSOLETE = "voice_mode";
public static final String PREF_VOICE_INPUT_KEY = "pref_voice_input_key";
- public static final String PREF_CORRECTION_SETTINGS = "correction_settings";
public static final String PREF_EDIT_PERSONAL_DICTIONARY = "edit_personal_dictionary";
public static final String PREF_CONFIGURE_DICTIONARIES_KEY = "configure_dictionaries_key";
public static final String PREF_AUTO_CORRECTION_THRESHOLD = "auto_correction_threshold";
public static final String PREF_SHOW_SUGGESTIONS_SETTING = "show_suggestions_setting";
- public static final String PREF_MISC_SETTINGS = "misc_settings";
- public static final String PREF_ADVANCED_SETTINGS = "pref_advanced_settings";
public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
public static final String PREF_KEY_USE_PERSONALIZED_DICTS = "pref_key_use_personalized_dicts";
public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD =
@@ -75,7 +78,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
"pref_key_preview_popup_dismiss_delay";
public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction";
- public static final String PREF_GESTURE_SETTINGS = "gesture_typing_settings";
public static final String PREF_GESTURE_INPUT = "gesture_input";
public static final String PREF_VIBRATION_DURATION_SETTINGS =
"pref_vibration_duration_settings";
@@ -89,7 +91,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_INPUT_LANGUAGE = "input_language";
public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
- public static final String PREF_DEBUG_SETTINGS = "debug_settings";
public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal";
public static final String PREF_ENABLE_METRICS_LOGGING = "pref_enable_metrics_logging";
@@ -105,8 +106,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
"pref_last_used_personalization_dict_wiped_time";
private static final String PREF_CORPUS_HANDLES_FOR_PERSONALIZATION =
"pref_corpus_handles_for_personalization";
- public static final String PREF_SEND_FEEDBACK = "send_feedback";
- public static final String PREF_ABOUT_KEYBOARD = "about_keyboard";
// Emoji
public static final String PREF_EMOJI_RECENT_KEYS = "emoji_recent_keys";
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index 5eb0377c7..689f878be 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -27,13 +27,15 @@ import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.preference.TwoStatePreference;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.dictionarypack.DictionarySettingsActivity;
@@ -61,6 +63,10 @@ public final class SettingsFragment extends InputMethodSettingsFragment
DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS
|| Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2;
+ private static final int NO_MENU_GROUP = Menu.NONE; // We don't care about menu grouping.
+ private static final int MENU_FEEDBACK = Menu.FIRST; // The first menu item id and order.
+ private static final int MENU_ABOUT = Menu.FIRST + 1; // The second menu item id and order.
+
private void setPreferenceEnabled(final String preferenceKey, final boolean enabled) {
final Preference preference = findPreference(preferenceKey);
if (preference != null) {
@@ -93,6 +99,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
@Override
public void onCreate(final Bundle icicle) {
super.onCreate(icicle);
+ setHasOptionsMenu(true);
setInputMethodSettingsCategoryTitle(R.string.language_selection_title);
setSubtypeEnablerTitle(R.string.select_language);
addPreferencesFromResource(R.xml.prefs);
@@ -117,66 +124,48 @@ public final class SettingsFragment extends InputMethodSettingsFragment
ensureConsistencyOfAutoCorrectionSettings();
- final PreferenceGroup generalSettings =
- (PreferenceGroup) findPreference(Settings.PREF_GENERAL_SETTINGS);
- final PreferenceGroup miscSettings =
- (PreferenceGroup) findPreference(Settings.PREF_MISC_SETTINGS);
-
- final Preference debugSettings = findPreference(Settings.PREF_DEBUG_SETTINGS);
- if (debugSettings != null) {
- if (Settings.isInternal(prefs)) {
- final Intent debugSettingsIntent = new Intent(Intent.ACTION_MAIN);
- debugSettingsIntent.setClassName(
- context.getPackageName(), DebugSettingsActivity.class.getName());
- debugSettings.setIntent(debugSettingsIntent);
- } else {
- miscSettings.removePreference(debugSettings);
- }
- }
-
- final Preference feedbackSettings = findPreference(Settings.PREF_SEND_FEEDBACK);
- final Preference aboutSettings = findPreference(Settings.PREF_ABOUT_KEYBOARD);
- if (feedbackSettings != null) {
- if (FeedbackUtils.isFeedbackFormSupported()) {
- feedbackSettings.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(final Preference pref) {
- FeedbackUtils.showFeedbackForm(getActivity());
- return true;
- }
- });
- aboutSettings.setTitle(FeedbackUtils.getAboutKeyboardTitleResId());
- aboutSettings.setIntent(FeedbackUtils.getAboutKeyboardIntent(getActivity()));
- } else {
- miscSettings.removePreference(feedbackSettings);
- miscSettings.removePreference(aboutSettings);
- }
+ final PreferenceScreen inputScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_INPUT);
+ final PreferenceScreen multiLingualScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_MULTI_LINGUAL);
+ final PreferenceScreen gestureScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_GESTURE);
+ final PreferenceScreen correctionScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_CORRECTION);
+ final PreferenceScreen advancedScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_ADVANCED);
+ final PreferenceScreen debugScreen =
+ (PreferenceScreen) findPreference(Settings.SCREEN_DEBUG);
+
+ if (Settings.isInternal(prefs)) {
+ final Intent debugSettingsIntent = new Intent(Intent.ACTION_MAIN);
+ debugSettingsIntent.setClassName(
+ context.getPackageName(), DebugSettingsActivity.class.getName());
+ debugScreen.setIntent(debugSettingsIntent);
+ } else {
+ advancedScreen.removePreference(debugScreen);
}
final boolean showVoiceKeyOption = res.getBoolean(
R.bool.config_enable_show_voice_key_option);
if (!showVoiceKeyOption) {
- removePreference(Settings.PREF_VOICE_INPUT_KEY, generalSettings);
+ removePreference(Settings.PREF_VOICE_INPUT_KEY, inputScreen);
}
- final PreferenceGroup advancedSettings =
- (PreferenceGroup) findPreference(Settings.PREF_ADVANCED_SETTINGS);
if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) {
- removePreference(Settings.PREF_VIBRATE_ON, generalSettings);
- removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedSettings);
+ removePreference(Settings.PREF_VIBRATE_ON, inputScreen);
+ removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedScreen);
}
if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) {
+ removePreference(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, multiLingualScreen);
removePreference(
- Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, advancedSettings);
- removePreference(
- Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, advancedSettings);
+ Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, multiLingualScreen);
}
-
// TODO: consolidate key preview dismiss delay with the key preview animation parameters.
if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) {
- removePreference(Settings.PREF_POPUP_ON, generalSettings);
- removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, advancedSettings);
+ removePreference(Settings.PREF_POPUP_ON, inputScreen);
+ removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, advancedScreen);
} else {
// TODO: Cleanup this setup.
final ListPreference keyPreviewPopupDismissDelay =
@@ -199,18 +188,16 @@ public final class SettingsFragment extends InputMethodSettingsFragment
}
if (!res.getBoolean(R.bool.config_setup_wizard_available)) {
- removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedSettings);
+ removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedScreen);
}
- final PreferenceGroup textCorrectionGroup =
- (PreferenceGroup) findPreference(Settings.PREF_CORRECTION_SETTINGS);
final PreferenceScreen dictionaryLink =
(PreferenceScreen) findPreference(Settings.PREF_CONFIGURE_DICTIONARIES_KEY);
final Intent intent = dictionaryLink.getIntent();
intent.setClassName(context.getPackageName(), DictionarySettingsActivity.class.getName());
final int number = context.getPackageManager().queryIntentActivities(intent, 0).size();
if (0 >= number) {
- textCorrectionGroup.removePreference(dictionaryLink);
+ correctionScreen.removePreference(dictionaryLink);
}
if (ProductionFlag.IS_METRICS_LOGGING_SUPPORTED) {
@@ -224,7 +211,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
enableMetricsLogging.setTitle(enableMetricsLoggingTitle);
}
} else {
- removePreference(Settings.PREF_ENABLE_METRICS_LOGGING, textCorrectionGroup);
+ removePreference(Settings.PREF_ENABLE_METRICS_LOGGING, advancedScreen);
}
final Preference editPersonalDictionary =
@@ -238,7 +225,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
}
if (!Settings.readFromBuildConfigIfGestureInputEnabled(res)) {
- removePreference(Settings.PREF_GESTURE_SETTINGS, getPreferenceScreen());
+ getPreferenceScreen().removePreference(gestureScreen);
}
AdditionalFeaturesSettingUtils.addAdditionalFeaturesPreferences(context, this);
@@ -261,8 +248,8 @@ public final class SettingsFragment extends InputMethodSettingsFragment
voiceInputKeyOption.setSummary(isShortcutImeEnabled ? null
: res.getText(R.string.voice_input_disabled_summary));
}
- final CheckBoxPreference showSetupWizardIcon =
- (CheckBoxPreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
+ final TwoStatePreference showSetupWizardIcon =
+ (TwoStatePreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
if (showSetupWizardIcon != null) {
showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, getActivity()));
}
@@ -476,4 +463,33 @@ public final class SettingsFragment extends InputMethodSettingsFragment
userDictionaryPreference.setFragment(UserDictionaryList.class.getName());
}
}
+
+ @Override
+ public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
+ if (FeedbackUtils.isFeedbackFormSupported()) {
+ menu.add(NO_MENU_GROUP, MENU_FEEDBACK /* itemId */, MENU_FEEDBACK /* order */,
+ R.string.send_feedback);
+ }
+ final int aboutResId = FeedbackUtils.getAboutKeyboardTitleResId();
+ if (aboutResId != 0) {
+ menu.add(NO_MENU_GROUP, MENU_ABOUT /* itemId */, MENU_ABOUT /* order */, aboutResId);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ final int itemId = item.getItemId();
+ if (itemId == MENU_FEEDBACK) {
+ FeedbackUtils.showFeedbackForm(getActivity());
+ return true;
+ }
+ if (itemId == MENU_ABOUT) {
+ final Intent aboutIntent = FeedbackUtils.getAboutKeyboardIntent(getActivity());
+ if (aboutIntent != null) {
+ startActivity(aboutIntent);
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 44104019b..8de5fed07 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -125,8 +125,7 @@ public final class SettingsValues {
mSlidingKeyInputPreviewEnabled = prefs.getBoolean(
DebugSettings.PREF_SLIDING_KEY_INPUT_PREVIEW, true);
mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res)
- && !mInputAttributes.mIsPasswordField
- && !mInputAttributes.hasNoMicrophoneKeyOption()
+ && mInputAttributes.mShouldShowVoiceInputKey
&& SubtypeSwitcher.getInstance().isShortcutImeEnabled();
final String autoCorrectionThresholdRawValue = prefs.getString(
Settings.PREF_AUTO_CORRECTION_THRESHOLD,
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
index 19b48f081..ad5aad747 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java
@@ -44,10 +44,12 @@ import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.PunctuationSuggestions;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SuggestedWords;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.AutoCorrectionUtils;
import com.android.inputmethod.latin.utils.ResourceUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -249,8 +251,8 @@ final class SuggestionStripLayoutHelper {
final int positionInStrip =
getPositionInSuggestionStrip(indexInSuggestedWords, suggestedWords);
// Use identity for strings, not #equals : it's the typed word if it's the same object
- final boolean isTypedWord =
- suggestedWords.getWord(indexInSuggestedWords) == suggestedWords.mTypedWord;
+ final boolean isTypedWord = suggestedWords.getInfo(indexInSuggestedWords).isKindOf(
+ SuggestedWordInfo.KIND_TYPED);
final int color;
if (positionInStrip == mCenterPositionInStrip && suggestedWords.mWillAutoCorrect) {
@@ -386,6 +388,12 @@ final class SuggestionStripLayoutHelper {
final float scaleX = getTextScaleX(word, width, wordView.getPaint());
wordView.setText(text); // TextView.setText() resets text scale x to 1.0.
wordView.setTextScaleX(Math.max(scaleX, MIN_TEXT_XSCALE));
+ // A <code>wordView</code> should be disabled when <code>word</code> is empty in order to
+ // make it unclickable.
+ // With accessibility touch exploration on, <code>wordView</code> should be enabled even
+ // when it is empty to avoid announcing as "disabled".
+ wordView.setEnabled(!TextUtils.isEmpty(word)
+ || AccessibilityUtils.getInstance().isTouchExplorationEnabled());
return wordView;
}
diff --git a/java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java b/java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java
index c66007537..34f59e8bc 100644
--- a/java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java
@@ -31,6 +31,7 @@ public class CombinedFormatUtils {
public static final String HISTORICAL_INFO_TAG = "historicalInfo";
public static final String HISTORICAL_INFO_SEPARATOR = ":";
public static final String WORD_TAG = "word";
+ public static final String BEGINNING_OF_SENTENCE_TAG = "beginning_of_sentence";
public static final String NOT_A_WORD_TAG = "not_a_word";
public static final String BLACKLISTED_TAG = "blacklisted";
@@ -56,6 +57,9 @@ public class CombinedFormatUtils {
builder.append(" " + WORD_TAG + "=" + wordProperty.mWord);
builder.append(",");
builder.append(formatProbabilityInfo(wordProperty.mProbabilityInfo));
+ if (wordProperty.mIsBeginningOfSentence) {
+ builder.append("," + BEGINNING_OF_SENTENCE_TAG + "=true");
+ }
if (wordProperty.mIsNotAWord) {
builder.append("," + NOT_A_WORD_TAG + "=true");
}
diff --git a/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java b/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java
index 0b362c48a..5c109a68c 100644
--- a/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java
+++ b/java/src/com/android/inputmethod/latin/utils/SuggestionResults.java
@@ -17,7 +17,9 @@
package com.android.inputmethod.latin.utils;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.define.ProductionFlag;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Locale;
@@ -29,6 +31,7 @@ import java.util.TreeSet;
*/
public final class SuggestionResults extends TreeSet<SuggestedWordInfo> {
public final Locale mLocale;
+ public final ArrayList<SuggestedWordInfo> mRawSuggestions;
private final int mCapacity;
public SuggestionResults(final Locale locale, final int capacity) {
@@ -40,6 +43,11 @@ public final class SuggestionResults extends TreeSet<SuggestedWordInfo> {
super(comparator);
mLocale = locale;
mCapacity = capacity;
+ if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
+ mRawSuggestions = new ArrayList<>();
+ } else {
+ mRawSuggestions = null;
+ }
}
@Override