aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/res/color/setup_step_action_background.xml30
-rw-r--r--java/res/color/setup_step_action_color.xml30
-rw-r--r--java/res/drawable-hdpi/unbundled_check_01.pngbin0 -> 697 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_check_02.pngbin0 -> 763 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_earth_01.pngbin0 -> 1469 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_earth_02.pngbin0 -> 1544 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_key_01.pngbin0 -> 985 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_key_02.pngbin0 -> 1013 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_select_01.pngbin0 -> 1017 bytes
-rw-r--r--java/res/drawable-hdpi/unbundled_select_02.pngbin0 -> 1235 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_check_01.pngbin0 -> 597 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_check_02.pngbin0 -> 634 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_earth_01.pngbin0 -> 965 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_earth_02.pngbin0 -> 957 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_key_01.pngbin0 -> 709 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_key_02.pngbin0 -> 709 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_select_01.pngbin0 -> 685 bytes
-rw-r--r--java/res/drawable-mdpi/unbundled_select_02.pngbin0 -> 849 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_check_01.pngbin0 -> 876 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_check_02.pngbin0 -> 1090 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_earth_01.pngbin0 -> 2183 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_earth_02.pngbin0 -> 2305 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_key_01.pngbin0 -> 1306 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_key_02.pngbin0 -> 1309 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_select_01.pngbin0 -> 1401 bytes
-rw-r--r--java/res/drawable-xhdpi/unbundled_select_02.pngbin0 -> 1681 bytes
-rw-r--r--java/res/drawable/ic_setup_finish.xml30
-rw-r--r--java/res/drawable/ic_setup_step1.xml30
-rw-r--r--java/res/drawable/ic_setup_step2.xml30
-rw-r--r--java/res/drawable/ic_setup_step3.xml30
-rw-r--r--java/res/drawable/setup_step_action_background.xml30
-rw-r--r--java/res/layout-land/setup_steps_screen.xml40
-rw-r--r--java/res/layout-land/setup_welcome_screen.xml40
-rw-r--r--java/res/layout/setup_start_indicator_label.xml32
-rw-r--r--java/res/layout/setup_step.xml28
-rw-r--r--java/res/layout/setup_steps_cards.xml63
-rw-r--r--java/res/layout/setup_steps_screen.xml27
-rw-r--r--java/res/layout/setup_steps_title.xml27
-rw-r--r--java/res/layout/setup_welcome_screen.xml27
-rw-r--r--java/res/layout/setup_welcome_title.xml32
-rw-r--r--java/res/layout/setup_welcome_video.xml45
-rw-r--r--java/res/layout/setup_wizard.xml69
-rw-r--r--java/res/raw/main_en.dictbin1069819 -> 1069822 bytes
-rw-r--r--java/res/raw/main_fr.dictbin1329626 -> 1329626 bytes
-rw-r--r--java/res/raw/main_ru.dictbin2228286 -> 2228285 bytes
-rw-r--r--java/res/raw/setup_welcome_video.mp4bin0 -> 923297 bytes
-rw-r--r--java/res/values-af/strings.xml20
-rw-r--r--java/res/values-am/strings.xml20
-rw-r--r--java/res/values-ar/strings.xml20
-rw-r--r--java/res/values-be/strings.xml20
-rw-r--r--java/res/values-bg/strings.xml25
-rw-r--r--java/res/values-ca/strings.xml20
-rw-r--r--java/res/values-cs/strings.xml25
-rw-r--r--java/res/values-da/strings.xml25
-rw-r--r--java/res/values-de/strings.xml25
-rw-r--r--java/res/values-el/strings.xml25
-rw-r--r--java/res/values-en-rGB/strings.xml20
-rw-r--r--java/res/values-es-rUS/strings.xml25
-rw-r--r--java/res/values-es/strings.xml20
-rw-r--r--java/res/values-et/strings.xml20
-rw-r--r--java/res/values-fa/strings.xml20
-rw-r--r--java/res/values-fi/strings.xml20
-rw-r--r--java/res/values-fr/strings.xml25
-rw-r--r--java/res/values-hi/strings.xml25
-rw-r--r--java/res/values-hr/strings.xml25
-rw-r--r--java/res/values-hu/strings.xml25
-rw-r--r--java/res/values-in/strings.xml25
-rw-r--r--java/res/values-is/strings.xml414
-rw-r--r--java/res/values-it/strings.xml20
-rw-r--r--java/res/values-iw/strings.xml20
-rw-r--r--java/res/values-ja/strings.xml25
-rw-r--r--java/res/values-ka/strings.xml414
-rw-r--r--java/res/values-ko/strings.xml25
-rw-r--r--java/res/values-lt/strings.xml25
-rw-r--r--java/res/values-lv/strings.xml25
-rw-r--r--java/res/values-mk/strings.xml414
-rw-r--r--java/res/values-mn/strings.xml414
-rw-r--r--java/res/values-ms/strings.xml25
-rw-r--r--java/res/values-nb/strings.xml25
-rw-r--r--java/res/values-nl/strings.xml25
-rw-r--r--java/res/values-pl/strings.xml25
-rw-r--r--java/res/values-pt-rPT/strings.xml20
-rw-r--r--java/res/values-pt/strings.xml20
-rw-r--r--java/res/values-rm/strings.xml34
-rw-r--r--java/res/values-ro/strings.xml25
-rw-r--r--java/res/values-ru/strings.xml25
-rw-r--r--java/res/values-sk/strings.xml25
-rw-r--r--java/res/values-sl/strings.xml25
-rw-r--r--java/res/values-sr/strings.xml25
-rw-r--r--java/res/values-sv/strings.xml25
-rw-r--r--java/res/values-sw/strings.xml20
-rw-r--r--java/res/values-sw600dp-land/setup-dimens.xml1
-rw-r--r--java/res/values-sw768dp-land/setup-dimens.xml1
-rw-r--r--java/res/values-th/strings.xml20
-rw-r--r--java/res/values-tl/strings.xml20
-rw-r--r--java/res/values-tr/strings.xml25
-rw-r--r--java/res/values-uk/strings.xml20
-rw-r--r--java/res/values-v17/setup-styles.xml25
-rw-r--r--java/res/values-vi/strings.xml25
-rw-r--r--java/res/values-zh-rCN/strings.xml25
-rw-r--r--java/res/values-zh-rTW/strings.xml20
-rw-r--r--java/res/values-zu/strings.xml20
-rw-r--r--java/res/values/config.xml8
-rw-r--r--java/res/values/dimens.xml8
-rw-r--r--java/res/values/setup-dimens.xml18
-rw-r--r--java/res/values/setup-styles-common.xml72
-rw-r--r--java/res/values/setup-styles.xml29
-rw-r--r--java/res/values/strings.xml55
-rw-r--r--java/res/xml/prefs.xml14
-rw-r--r--java/src/com/android/inputmethod/compat/TextViewCompatUtils.java18
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/ActionBatch.java8
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java16
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionaryService.java5
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/LogProblemReporter.java3
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java92
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java33
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/PrivateLog.java23
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java14
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/WordListPreference.java33
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java10
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java48
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java4
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java1
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java3
-rw-r--r--java/src/com/android/inputmethod/latin/DebugSettings.java14
-rw-r--r--java/src/com/android/inputmethod/latin/FeedbackUtils.java9
-rw-r--r--java/src/com/android/inputmethod/latin/MetadataFileUriGetter.java12
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodManager.java127
-rw-r--r--java/src/com/android/inputmethod/latin/Settings.java2
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsFragment.java28
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java10
-rw-r--r--java/src/com/android/inputmethod/latin/Utils.java15
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupActivity.java166
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java108
-rw-r--r--java/src/com/android/inputmethod/research/FeedbackFragment.java39
-rw-r--r--java/src/com/android/inputmethod/research/FixedLogBuffer.java71
-rw-r--r--java/src/com/android/inputmethod/research/LogUnit.java99
-rw-r--r--java/src/com/android/inputmethod/research/MainLogBuffer.java61
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLog.java16
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogDirectory.java14
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogger.java50
-rw-r--r--java/src/com/android/inputmethod/research/UploaderService.java25
142 files changed, 4260 insertions, 578 deletions
diff --git a/java/res/color/setup_step_action_background.xml b/java/res/color/setup_step_action_background.xml
new file mode 100644
index 000000000..79120b4d0
--- /dev/null
+++ b/java/res/color/setup_step_action_background.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:color="@color/setup_text_action" />
+ <item
+ android:state_pressed="true"
+ android:color="@color/setup_text_action" />
+ <item
+ android:color="@color/setup_step_background" />
+</selector>
diff --git a/java/res/color/setup_step_action_color.xml b/java/res/color/setup_step_action_color.xml
new file mode 100644
index 000000000..c53e026d5
--- /dev/null
+++ b/java/res/color/setup_step_action_color.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:color="@color/setup_step_background" />
+ <item
+ android:state_pressed="true"
+ android:color="@color/setup_step_background" />
+ <item
+ android:color="@color/setup_text_action" />
+</selector>
diff --git a/java/res/drawable-hdpi/unbundled_check_01.png b/java/res/drawable-hdpi/unbundled_check_01.png
new file mode 100644
index 000000000..42cce2f0f
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_check_01.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_check_02.png b/java/res/drawable-hdpi/unbundled_check_02.png
new file mode 100644
index 000000000..dcd120eac
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_check_02.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_earth_01.png b/java/res/drawable-hdpi/unbundled_earth_01.png
new file mode 100644
index 000000000..4a0f087ed
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_earth_01.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_earth_02.png b/java/res/drawable-hdpi/unbundled_earth_02.png
new file mode 100644
index 000000000..f4bd421f2
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_earth_02.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_key_01.png b/java/res/drawable-hdpi/unbundled_key_01.png
new file mode 100644
index 000000000..87c9e2c9b
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_key_01.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_key_02.png b/java/res/drawable-hdpi/unbundled_key_02.png
new file mode 100644
index 000000000..0747384b4
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_key_02.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_select_01.png b/java/res/drawable-hdpi/unbundled_select_01.png
new file mode 100644
index 000000000..bb3de2f35
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_select_01.png
Binary files differ
diff --git a/java/res/drawable-hdpi/unbundled_select_02.png b/java/res/drawable-hdpi/unbundled_select_02.png
new file mode 100644
index 000000000..e56fdab97
--- /dev/null
+++ b/java/res/drawable-hdpi/unbundled_select_02.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_check_01.png b/java/res/drawable-mdpi/unbundled_check_01.png
new file mode 100644
index 000000000..d0d02a368
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_check_01.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_check_02.png b/java/res/drawable-mdpi/unbundled_check_02.png
new file mode 100644
index 000000000..d34fa2297
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_check_02.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_earth_01.png b/java/res/drawable-mdpi/unbundled_earth_01.png
new file mode 100644
index 000000000..ba60181ac
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_earth_01.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_earth_02.png b/java/res/drawable-mdpi/unbundled_earth_02.png
new file mode 100644
index 000000000..9c5263864
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_earth_02.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_key_01.png b/java/res/drawable-mdpi/unbundled_key_01.png
new file mode 100644
index 000000000..8cd72dbd5
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_key_01.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_key_02.png b/java/res/drawable-mdpi/unbundled_key_02.png
new file mode 100644
index 000000000..4ef6e0cb7
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_key_02.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_select_01.png b/java/res/drawable-mdpi/unbundled_select_01.png
new file mode 100644
index 000000000..9ab008a46
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_select_01.png
Binary files differ
diff --git a/java/res/drawable-mdpi/unbundled_select_02.png b/java/res/drawable-mdpi/unbundled_select_02.png
new file mode 100644
index 000000000..8af807b2d
--- /dev/null
+++ b/java/res/drawable-mdpi/unbundled_select_02.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_check_01.png b/java/res/drawable-xhdpi/unbundled_check_01.png
new file mode 100644
index 000000000..1300a7f5b
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_check_01.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_check_02.png b/java/res/drawable-xhdpi/unbundled_check_02.png
new file mode 100644
index 000000000..715188656
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_check_02.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_earth_01.png b/java/res/drawable-xhdpi/unbundled_earth_01.png
new file mode 100644
index 000000000..24b663488
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_earth_01.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_earth_02.png b/java/res/drawable-xhdpi/unbundled_earth_02.png
new file mode 100644
index 000000000..59aa031b0
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_earth_02.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_key_01.png b/java/res/drawable-xhdpi/unbundled_key_01.png
new file mode 100644
index 000000000..c8b117b44
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_key_01.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_key_02.png b/java/res/drawable-xhdpi/unbundled_key_02.png
new file mode 100644
index 000000000..dc2da5632
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_key_02.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_select_01.png b/java/res/drawable-xhdpi/unbundled_select_01.png
new file mode 100644
index 000000000..baf1e55b5
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_select_01.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/unbundled_select_02.png b/java/res/drawable-xhdpi/unbundled_select_02.png
new file mode 100644
index 000000000..ad1058e0c
--- /dev/null
+++ b/java/res/drawable-xhdpi/unbundled_select_02.png
Binary files differ
diff --git a/java/res/drawable/ic_setup_finish.xml b/java/res/drawable/ic_setup_finish.xml
new file mode 100644
index 000000000..8ac8a86d1
--- /dev/null
+++ b/java/res/drawable/ic_setup_finish.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:drawable="@drawable/unbundled_check_01" />
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/unbundled_check_01" />
+ <item
+ android:drawable="@drawable/unbundled_check_02" />
+</selector>
diff --git a/java/res/drawable/ic_setup_step1.xml b/java/res/drawable/ic_setup_step1.xml
new file mode 100644
index 000000000..e26afb3ca
--- /dev/null
+++ b/java/res/drawable/ic_setup_step1.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:drawable="@drawable/unbundled_key_01" />
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/unbundled_key_01" />
+ <item
+ android:drawable="@drawable/unbundled_key_02" />
+</selector>
diff --git a/java/res/drawable/ic_setup_step2.xml b/java/res/drawable/ic_setup_step2.xml
new file mode 100644
index 000000000..46db29306
--- /dev/null
+++ b/java/res/drawable/ic_setup_step2.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:drawable="@drawable/unbundled_select_01" />
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/unbundled_select_01" />
+ <item
+ android:drawable="@drawable/unbundled_select_02" />
+</selector>
diff --git a/java/res/drawable/ic_setup_step3.xml b/java/res/drawable/ic_setup_step3.xml
new file mode 100644
index 000000000..4ff9fd933
--- /dev/null
+++ b/java/res/drawable/ic_setup_step3.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:drawable="@drawable/unbundled_earth_01" />
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/unbundled_earth_01" />
+ <item
+ android:drawable="@drawable/unbundled_earth_02" />
+</selector>
diff --git a/java/res/drawable/setup_step_action_background.xml b/java/res/drawable/setup_step_action_background.xml
new file mode 100644
index 000000000..25738e3a4
--- /dev/null
+++ b/java/res/drawable/setup_step_action_background.xml
@@ -0,0 +1,30 @@
+<?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.
+*/
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_focused="true"
+ android:drawable="@color/setup_text_action" />
+ <item
+ android:state_pressed="true"
+ android:drawable="@color/setup_text_action" />
+ <item
+ android:drawable="@color/setup_step_background" />
+</selector>
diff --git a/java/res/layout-land/setup_steps_screen.xml b/java/res/layout-land/setup_steps_screen.xml
new file mode 100644
index 000000000..0b4a096cc
--- /dev/null
+++ b/java/res/layout-land/setup_steps_screen.xml
@@ -0,0 +1,40 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:baselineAligned="false">
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="@integer/setup_title_weight_in_screen"
+ android:orientation="vertical">
+ <include layout="@layout/setup_steps_title" />
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="@integer/setup_body_weight_in_screen"
+ android:orientation="vertical">
+ <include layout="@layout/setup_steps_cards" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/java/res/layout-land/setup_welcome_screen.xml b/java/res/layout-land/setup_welcome_screen.xml
new file mode 100644
index 000000000..8b162e27f
--- /dev/null
+++ b/java/res/layout-land/setup_welcome_screen.xml
@@ -0,0 +1,40 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:baselineAligned="false">
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="@integer/setup_title_weight_in_screen"
+ android:orientation="vertical">
+ <include layout="@layout/setup_welcome_title" />
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="@integer/setup_body_weight_in_screen"
+ android:orientation="vertical">
+ <include layout="@layout/setup_welcome_video" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/java/res/layout/setup_start_indicator_label.xml b/java/res/layout/setup_start_indicator_label.xml
new file mode 100644
index 000000000..33854bb44
--- /dev/null
+++ b/java/res/layout/setup_start_indicator_label.xml
@@ -0,0 +1,32 @@
+<?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.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <view class="com.android.inputmethod.latin.setup.SetupStartIndicatorView$LabelView"
+ android:id="@+id/setup_start_label"
+ android:text="@string/setup_start_action"
+ android:gravity="end|center_vertical"
+ android:layout_width="0dp"
+ android:layout_weight="1.0"
+ style="@style/setupStepActionLabelStyleCommon" />
+ <view class="com.android.inputmethod.latin.setup.SetupStartIndicatorView$IndicatorView"
+ android:id="@+id/setup_start_indicator"
+ style="@style/setupStepStartIndicatorStyle" />
+</merge>
diff --git a/java/res/layout/setup_step.xml b/java/res/layout/setup_step.xml
index 26d7fe799..fa84902bf 100644
--- a/java/res/layout/setup_step.xml
+++ b/java/res/layout/setup_step.xml
@@ -25,34 +25,14 @@
<TextView
android:id="@+id/setup_step_title"
style="@style/setupStepTitleStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="16dp"
- android:paddingBottom="16dp"
- android:paddingLeft="24dp"
- android:paddingRight="24dp" />
+ android:paddingTop="@dimen/setup_step_vertical_padding"
+ android:paddingBottom="@dimen/setup_step_vertical_padding" />
<TextView
android:id="@+id/setup_step_instruction"
style="@style/setupStepInstructionStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="16dp"
- android:paddingLeft="24dp"
- android:paddingRight="24dp" />
- <View
- android:layout_width="match_parent"
- android:layout_height="2dp" />
+ android:paddingBottom="@dimen/setup_step_vertical_padding" />
<TextView
android:id="@+id/setup_step_action_label"
style="@style/setupStepActionLabelStyle"
- android:gravity="center_vertical"
- android:drawablePadding="12dp"
- android:layout_width="match_parent"
- android:layout_height="48dp"
- android:clickable="true"
- android:focusable="true"
- android:paddingLeft="12dp"
- android:paddingStart="12dp"
- android:paddingRight="24dp"
- android:paddingEnd="24dp" />
+ android:layout_marginTop="@dimen/setup_step_horizontal_line_height" />
</LinearLayout>
diff --git a/java/res/layout/setup_steps_cards.xml b/java/res/layout/setup_steps_cards.xml
new file mode 100644
index 000000000..6c46461fe
--- /dev/null
+++ b/java/res/layout/setup_steps_cards.xml
@@ -0,0 +1,63 @@
+<?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.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <LinearLayout
+ android:id="@+id/setup_step_bullets"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/setup_step_vertical_padding"
+ android:orientation="horizontal">
+ <TextView
+ android:id="@+id/setup_step1_bullet"
+ style="@style/setupStepBulletStyle"
+ android:text="@string/setup_step1_bullet" />
+ <TextView
+ android:id="@+id/setup_step2_bullet"
+ style="@style/setupStepBulletStyle"
+ android:text="@string/setup_step2_bullet" />
+ <TextView
+ android:id="@+id/setup_step3_bullet"
+ style="@style/setupStepBulletStyle"
+ android:text="@string/setup_step3_bullet" />
+ </LinearLayout>
+ <com.android.inputmethod.latin.setup.SetupStepIndicatorView
+ android:id="@+id/setup_step_indicator"
+ style="@style/setupStepIndicatorStyle" />
+ <FrameLayout
+ android:id="@+id/setup_steps_pane"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <include
+ android:id="@+id/setup_step1"
+ layout="@layout/setup_step" />
+ <include
+ android:id="@+id/setup_step2"
+ layout="@layout/setup_step" />
+ <include
+ android:id="@+id/setup_step3"
+ layout="@layout/setup_step" />
+ </FrameLayout>
+ <TextView
+ android:id="@+id/setup_finish"
+ android:text="@string/setup_finish_action"
+ style="@style/setupStepActionLabelStyle"
+ android:layout_marginTop="@dimen/setup_step_horizontal_line_height" />
+</merge>
diff --git a/java/res/layout/setup_steps_screen.xml b/java/res/layout/setup_steps_screen.xml
new file mode 100644
index 000000000..1159c0acf
--- /dev/null
+++ b/java/res/layout/setup_steps_screen.xml
@@ -0,0 +1,27 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <include layout="@layout/setup_steps_title" />
+ <include layout="@layout/setup_steps_cards" />
+</LinearLayout>
diff --git a/java/res/layout/setup_steps_title.xml b/java/res/layout/setup_steps_title.xml
new file mode 100644
index 000000000..e3694bfe0
--- /dev/null
+++ b/java/res/layout/setup_steps_title.xml
@@ -0,0 +1,27 @@
+<?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.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView
+ android:id="@+id/setup_title"
+ style="@style/setupTitleStyle"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true" />
+</merge>
diff --git a/java/res/layout/setup_welcome_screen.xml b/java/res/layout/setup_welcome_screen.xml
new file mode 100644
index 000000000..44e98e268
--- /dev/null
+++ b/java/res/layout/setup_welcome_screen.xml
@@ -0,0 +1,27 @@
+<?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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <include layout="@layout/setup_welcome_title" />
+ <include layout="@layout/setup_welcome_video" />
+</LinearLayout>
diff --git a/java/res/layout/setup_welcome_title.xml b/java/res/layout/setup_welcome_title.xml
new file mode 100644
index 000000000..6e6d78147
--- /dev/null
+++ b/java/res/layout/setup_welcome_title.xml
@@ -0,0 +1,32 @@
+<?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.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <TextView
+ android:id="@+id/setup_welcome_title"
+ style="@style/setupTitleStyle"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true" />
+ <TextView
+ android:id="@+id/setup_welcome_description"
+ android:text="@string/setup_welcome_additional_description"
+ android:layout_marginTop="12dp"
+ style="@style/setupWelcomeDescritpionStyle" />
+</merge>
diff --git a/java/res/layout/setup_welcome_video.xml b/java/res/layout/setup_welcome_video.xml
new file mode 100644
index 000000000..da59ec883
--- /dev/null
+++ b/java/res/layout/setup_welcome_video.xml
@@ -0,0 +1,45 @@
+<?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.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <View
+ android:layout_weight="@integer/setup_welcome_video_left_padding_weight_in_screen"
+ android:layout_width="0dp"
+ android:layout_height="0dp" />
+ <VideoView
+ android:id="@+id/setup_welcome_video"
+ android:layout_weight="@integer/setup_welcome_video_weight_in_screen"
+ android:layout_marginTop="@dimen/setup_welcome_video_vertical_margin"
+ android:layout_marginBottom="@dimen/setup_welcome_video_vertical_margin"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_weight="@integer/setup_welcome_video_right_padding_weight_in_screen"
+ android:layout_width="0dp"
+ android:layout_height="0dp" />
+ </LinearLayout>
+ <com.android.inputmethod.latin.setup.SetupStartIndicatorView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+</merge>
diff --git a/java/res/layout/setup_wizard.xml b/java/res/layout/setup_wizard.xml
index acbbe30b3..176f83630 100644
--- a/java/res/layout/setup_wizard.xml
+++ b/java/res/layout/setup_wizard.xml
@@ -18,61 +18,18 @@
*/
-->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:fillViewport="true">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/setup_background"
- android:paddingLeft="@dimen/setup_horizontal_padding"
- android:paddingRight="@dimen/setup_horizontal_padding"
- android:paddingTop="16dp"
- android:paddingBottom="16dp">
- <TextView
- android:id="@+id/setup_title"
- style="@style/setupTitleStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true" />
- <LinearLayout
- android:id="@+id/setup_step_bullets"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/setup_title"
- android:paddingTop="16dp"
- android:orientation="horizontal">
- <TextView
- style="@style/setupStepBulletStyle"
- android:text="@string/setup_step1_bullet" />
- <TextView
- style="@style/setupStepBulletStyle"
- android:text="@string/setup_step2_bullet" />
- <TextView
- style="@style/setupStepBulletStyle"
- android:text="@string/setup_step3_bullet" />
- </LinearLayout>
- <com.android.inputmethod.latin.setup.SetupStepIndicatorView
- android:id="@+id/setup_step_indicator"
- android:layout_width="match_parent"
- android:layout_height="24dp"
- android:layout_below="@id/setup_step_bullets" />
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/setup_step_indicator">
- <include
- android:id="@+id/setup_step1"
- layout="@layout/setup_step" />
- <include
- android:id="@+id/setup_step2"
- layout="@layout/setup_step" />
- <include
- android:id="@+id/setup_step3"
- layout="@layout/setup_step" />
- </FrameLayout>
- </RelativeLayout>
-</ScrollView>
+ android:background="@color/setup_background"
+ android:paddingLeft="@dimen/setup_horizontal_padding"
+ android:paddingRight="@dimen/setup_horizontal_padding"
+ android:paddingTop="@dimen/setup_vertical_padding"
+ android:paddingBottom="@dimen/setup_vertical_padding">
+ <include
+ android:id="@+id/setup_welcome_screen"
+ layout="@layout/setup_welcome_screen" />
+ <include
+ android:id="@+id/setup_steps_screen"
+ layout="@layout/setup_steps_screen" />
+</FrameLayout>
diff --git a/java/res/raw/main_en.dict b/java/res/raw/main_en.dict
index 526761ce0..086874dd6 100644
--- a/java/res/raw/main_en.dict
+++ b/java/res/raw/main_en.dict
Binary files differ
diff --git a/java/res/raw/main_fr.dict b/java/res/raw/main_fr.dict
index 7520898e3..9044c7e9e 100644
--- a/java/res/raw/main_fr.dict
+++ b/java/res/raw/main_fr.dict
Binary files differ
diff --git a/java/res/raw/main_ru.dict b/java/res/raw/main_ru.dict
index 216ff09da..9fd613343 100644
--- a/java/res/raw/main_ru.dict
+++ b/java/res/raw/main_ru.dict
Binary files differ
diff --git a/java/res/raw/setup_welcome_video.mp4 b/java/res/raw/setup_welcome_video.mp4
new file mode 100644
index 000000000..09357d8de
--- /dev/null
+++ b/java/res/raw/setup_welcome_video.mp4
Binary files differ
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index 28929402d..04b7aff28 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Moet hierdie lêer regtig vir <xliff:g id="LOCALE_NAME">%s</xliff:g> geïnstalleer word?"</string>
<string name="error" msgid="8940763624668513648">"Daar was \'n fout"</string>
<string name="button_default" msgid="3988017840431881491">"Verstek"</string>
- <string name="language_settings" msgid="1671153053201809031">"Taal en invoer"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Kies invoermetode"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Welkom by <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"met Gebaar-tik"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Kom aan die gang"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Volgende stap"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Stel <xliff:g id="APPLICATION_NAME">%s</xliff:g> op"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Aktiveer <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Verifieer asseblief \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" in jou Taal- en invoerinstellings. Dit sal dit magtig om op jou toestel te loop."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Aktiveer in instellings"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Skakel oor na <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Volgende, kies \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" as jou aktiewe teks-invoermetode."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Wissel invoermetodes"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Veels geluk, jy\'s gereed!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nou kan jy al jou gunsteling programme met <xliff:g id="APPLICATION_NAME">%s</xliff:g> intik."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Stel bykomende tale op"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Klaar"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Wys opstelassistent-ikoon"</string>
<string name="app_name" msgid="6320102637491234792">"Woordeboekverskaffer"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Woordeboekverskaffer"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Woordeboek-diens"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"\'n Woordeboek is vir <xliff:g id="LANGUAGE">%1$s</xliff:g> beskikbaar"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Druk om te hersien en af te laai"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Laai tans af: voorstelle vir <xliff:g id="LANGUAGE">%1$s</xliff:g> sal binnekort gereed wees."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 03a8b931a..57becfc67 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"እውን ይሄ ፋይል ለ<xliff:g id="LOCALE_NAME">%s</xliff:g> ይጫን?"</string>
<string name="error" msgid="8940763624668513648">"ስህተት ተከስቶ ነበር"</string>
<string name="button_default" msgid="3988017840431881491">"ነባሪ"</string>
- <string name="language_settings" msgid="1671153053201809031">"ቋንቋ እና ግቤት"</string>
- <string name="select_input_method" msgid="4301602374609275003">"የግቤት ስልት ይምረጡ"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"እንኳን ወደ <xliff:g id="APPLICATION_NAME">%s</xliff:g> በደህና መጡ"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"በጣት ምልክት መተየብ"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"ጀምር"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"ቀጣይ ደረጃ"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን በማዋቀር ላይ"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን ያንቁ"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"እባክዎ «<xliff:g id="APPLICATION_NAME">%s</xliff:g>»ን በቋንቋ እና ግቤት ቅንብሮችዎ ውስጥ ያረጋግጡት። ይሄ እሱ በመሣሪያዎ ላይ እንዲሄድ ይፈቅድለታል።"</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"በቅንብሮች ውስጥ ያንቁ"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"ወደ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ይቀይሩ"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"በመቀጠል «<xliff:g id="APPLICATION_NAME">%s</xliff:g>»ን እንደ የጽሑፍ ግቤት ስልትዎ ይምረጡት።"</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"የግቤት ስልቶችን ቀያይር"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"እንኳን ደስ አለዎት፣ በቃ ጨርሰዋል!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"አሁን በሁሉም ተወዳጅ መተግበሪያዎችዎ ላይ በ<xliff:g id="APPLICATION_NAME">%s</xliff:g> መተየብ ይችላሉ።"</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"ተጨማሪ ቋንቋዎችን ያዋቅሩ"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"ጨርሷል"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"የውቅር አዋቂ አዶ አሳይ"</string>
<string name="app_name" msgid="6320102637491234792">"የመዝገበ-ቃላት አቅራቢ"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"የመዝገበ-ቃላት አቅራቢ"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"የመዝገበ-ቃላት አገልግሎት"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"መዝገበ-ቃላት ለ<xliff:g id="LANGUAGE">%1$s</xliff:g> ይገኛል"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"ለመገምገምና ለማውረድ ይጫኑ"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"በማውረድ ላይ፦ የ<xliff:g id="LANGUAGE">%1$s</xliff:g> ጥቆማ አስተያየቶች በቅርቡ ዝግጁ ይሆናሉ።"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index c16f224e4..0f7a904c0 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"هل تريد حقًا تثبيت هذا الملف للغة <xliff:g id="LOCALE_NAME">%s</xliff:g>؟"</string>
<string name="error" msgid="8940763624668513648">"حدث خطأ"</string>
<string name="button_default" msgid="3988017840431881491">"الافتراضية"</string>
- <string name="language_settings" msgid="1671153053201809031">"اللغة والإدخال"</string>
- <string name="select_input_method" msgid="4301602374609275003">"اختيار أسلوب الإدخال"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"مرحبا بكم في <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"مع الكتابة بالإشارة"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"بدء الاستخدام"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"الخطوة التالية"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"إعداد <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"تمكين <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"يُرجى تحديد \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" في إعدادات اللغة والإدخال حيث يسمح هذا الإعداد بتشغيله على جهازك."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"تمكين في الإعدادات"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"التبديل إلى <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"بعد ذلك، حدد \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" باعتباره أسلوب إدخال النص النشط."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"تبديل أساليب الإدخال"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"تهانينا، بهذا تكون قد انتهيت من الإعداد"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"الآن أصبح بإمكانك الكتابة في جميع تطبيقاتك المفضلة باستخدام <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"تهيئة اللغات الإضافية"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"إنهاء العملية"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"عرض رمز معالج الإعداد"</string>
<string name="app_name" msgid="6320102637491234792">"مقدم القاموس"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"مقدم القاموس"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"خدمة القاموس"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"هناك قاموس متوفر للغة <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"اضغط للمراجعة والتنزيل"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"جارٍ التنزيل: ستتوفر اقتراحات للغة <xliff:g id="LANGUAGE">%1$s</xliff:g> بعد قليل."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index eca24eb4b..1f843bf77 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Сапраўды ўсталяваць гэты файл на мове: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Была памылка"</string>
<string name="button_default" msgid="3988017840431881491">"Па змаўчанні"</string>
- <string name="language_settings" msgid="1671153053201809031">"Мова і ўвод"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Выберыце метад уводу"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Вітаем у прыкладанні <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"з уводам жэстамі"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Пачаць"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Далей"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Наладка прыкладання <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Уключыць прыкладанне <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Праверце прыкладанне \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" на сваёй мове і параметры ўводу. Гэта дасць магчымасць дазволіць яму працаваць на вашай прыладзе."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Уключыць у наладах"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Пераключыцца на прыкладанне <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Выберыце \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" як актыўны метад уводу тэксту."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Пераключэнне метадаў уводу"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Усё гатова!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Цяпер вы можаце ўводзіць ўсе свае любімыя прыкладанні з iмем <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Наладка дадатковых моў"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Гатова"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Паказаць значок майстра ўсталёўкі"</string>
<string name="app_name" msgid="6320102637491234792">"Пастаўшчык слоўніка"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Пастаўшчык слоўніка"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Слоўнік"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Слоўнік для мовы \"<xliff:g id="LANGUAGE">%1$s</xliff:g>\""</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Нацiснiце, каб прагледзець i спампаваць"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Загрузка: прапановы для мовы \"<xliff:g id="LANGUAGE">%1$s</xliff:g>\" хутка з\'явяцца."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 3a9b57980..e0f333227 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Наистина ли да се инсталира този файл за <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Възникна грешка"</string>
<string name="button_default" msgid="3988017840431881491">"Стандартни"</string>
- <string name="language_settings" msgid="1671153053201809031">"Език и въвеждане"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Избор на метод на въвеждане"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Добре дошли в/ъв <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"с въвеждане чрез жест"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Първи стъпки"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Настройване на <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Активирайте <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Поставете отметка за <xliff:g id="APPLICATION_NAME">%s</xliff:g> в „Език и въвеждане“. Така ще упълномощите прилож. да се изпълнява на у-вото."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Превключете към <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Поздравления! Вече сте готови!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Вече можете да пишете във всичките си любими приложения посредством <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Конфигуриране на допълнителни езици"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Край"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Доставчик на речника"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Доставчик на речника"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Услуга за речник"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"За <xliff:g id="LANGUAGE">%1$s</xliff:g> е налице речник"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Натиснете, за да прегледате и изтеглите"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Изтегля се: Предложенията за <xliff:g id="LANGUAGE">%1$s</xliff:g> ще бъдат готови скоро."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 9d6c74a23..7427f0d7a 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Realment vols instal·lar aquest fitxer per a <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"S\'ha produït un error"</string>
<string name="button_default" msgid="3988017840431881491">"Predeterminat"</string>
- <string name="language_settings" msgid="1671153053201809031">"Idioma i introducció"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Selecció de mètodes d\'introducció"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Et donem la benvinguda a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"Amb Escriptura gestual"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Comença"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Pas següent"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configuració de <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Activació de <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Marca \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" a la configuració d\'Idioma i introducció de temps. D\'aquesta manera es podrà executar al dispositiu."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Activa a la configuració"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Canvi a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"A continuació, selecciona \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" com a mètode d\'introducció de text actiu."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Canvia els mètodes d\'introducció"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Enhorabona, ja has acabat!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Ara ja pots escriure a totes les teves aplicacions preferides amb <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configura idiomes addicionals"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Finalitzat"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Mostra icona d\'aux. de config."</string>
<string name="app_name" msgid="6320102637491234792">"Proveïdor de diccionaris"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Proveïdor de diccionaris"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Servei de diccionari"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Hi ha un diccionari disponible per a l\'idioma: <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Prem per revisar-lo i per baixar-lo"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Baixada: els suggeriments per a <xliff:g id="LANGUAGE">%1$s</xliff:g> estaran disponibles ben aviat."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index bd647610d..82b185aa9 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Chcete nainstalovat tento soubor pro jazyk <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Došlo k chybě"</string>
<string name="button_default" msgid="3988017840431881491">"Výchozí"</string>
- <string name="language_settings" msgid="1671153053201809031">"Jazyk a zadávání"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Výběr metody zadávání dat"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Vítá vás <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"s psaním gesty"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Začínáme"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Nastavení aplikace <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Zapnutí aplikace <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"V nastavení Jazyk a zadávání zaškrtněte aplikaci <xliff:g id="APPLICATION_NAME">%s</xliff:g>, povolíte tak její spuštění."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Přepnutí na aplikaci <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gratulujeme, vše je připraveno."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nyní můžete ve všech svých oblíbených aplikacích psát pomocí aplikace <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Nakonfigurovat další jazyky"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Hotovo"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Poskytovatel slovníku"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Poskytovatel slovníku"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Služba slovníku"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Je k dispozici slovník pro jazyk <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Stisknutím zkontrolujete a stáhnete"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Stahování: návrhy pro jazyk <xliff:g id="LANGUAGE">%1$s</xliff:g> budou brzy k dispozici."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 56429170b..af81123db 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Er du klar til at installere denne fil til <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Der opstod en fejl"</string>
<string name="button_default" msgid="3988017840431881491">"Standard"</string>
- <string name="language_settings" msgid="1671153053201809031">"Sprog og input"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Vælg inputmetode"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Velkommen til <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"med Berøringsinput"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Kom godt i gang"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> konfigureres"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Aktivér <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Markér \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" i Sprog og inputindstillinger. Dermed får appen tilladelse til at køre på din enhed."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Skift til <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Så er du klar."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nu kan du skrive i alle dine favoritapps med <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurer flere sprog"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Afslut"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Dictionary Provider"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Dictionary Provider"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Ordbogstjeneste"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Der er en tilgængelig ordbog for <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Tryk for at gennemgå og downloade"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Downloader: Der vil snart være forslag klar på <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 1c9bec2b8..69422fc1e 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Möchten Sie diese Datei für <xliff:g id="LOCALE_NAME">%s</xliff:g> installieren?"</string>
<string name="error" msgid="8940763624668513648">"Es ist ein Fehler aufgetreten"</string>
<string name="button_default" msgid="3988017840431881491">"Standard"</string>
- <string name="language_settings" msgid="1671153053201809031">"Sprache &amp; Eingabe"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Eingabemethode wählen"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Willkommen bei <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"mit Bewegungseingabe"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Jetzt starten"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> einrichten"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> aktivieren"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Aktivieren Sie \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" unter \"Sprache &amp; Eingabe\". Damit wird die App auf Ihrem Gerät autorisiert."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Zu <xliff:g id="APPLICATION_NAME">%s</xliff:g> wechseln"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Die Einrichtung ist abgeschlossen"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Jetzt können Sie in allen Ihren Lieblings-Apps über <xliff:g id="APPLICATION_NAME">%s</xliff:g> Text eingeben."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Weitere Sprachen konfigurieren"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Fertig"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Wörterbuchbereitstellung"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Wörterbuchbereitstellung"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Wörterbuch"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Es ist ein Wörterbuch für <xliff:g id="LANGUAGE">%1$s</xliff:g> verfügbar."</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Zum Lesen und Herunterladen drücken"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Download wurde gestartet: Vorschläge für <xliff:g id="LANGUAGE">%1$s</xliff:g> sind in Kürze bereit."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index fad1cf5ac..9c9d40dad 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Να εγκατασταθεί όντως αυτό το αρχείο για <xliff:g id="LOCALE_NAME">%s</xliff:g>;"</string>
<string name="error" msgid="8940763624668513648">"Παρουσιάστηκε σφάλμα."</string>
<string name="button_default" msgid="3988017840431881491">"Προεπιλογή"</string>
- <string name="language_settings" msgid="1671153053201809031">"Γλώσσα και εισαγωγή"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Επιλογή μεθόδου εισαγωγής"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Καλώς ορίσατε στο <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"με Πληκτρολόγηση με κίνηση"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Έναρξη"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Ρύθμιση της εφαρμογής <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Ενεργοποιήστε την εφαρμογή <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Επιλέξτε \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" στις ρυθμίσεις Γλώσσα και εισαγωγή, για να εκτελεστεί στη συσκευή."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Μετάβαση στην εφαρμογή <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Συγχαρητήρια, είστε έτοιμοι!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Πλέον μπορείτε να πληκτρολογήσετε όλες τις αγαπημένες σας εφαρμογές με το <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Διαμόρφωση πρόσθετων γλωσσών"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Ολοκληρώθηκε"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Παροχέας λεξικού"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Παροχέας λεξικού"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Υπηρεσία λεξικού"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Υπάρχει διαθέσιμο λεξικό για τα <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Πατήστε για έλεγχο και λήψη"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Λήψη: Οι προτάσεις για τα <xliff:g id="LANGUAGE">%1$s</xliff:g> θα είναι έτοιμες σύντομα."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index c0b9ede09..7b0abb45e 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Really install this file for <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"There was an error"</string>
<string name="button_default" msgid="3988017840431881491">"Default"</string>
- <string name="language_settings" msgid="1671153053201809031">"Language &amp; input"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Choose input method"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Welcome to <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"with Gesture Typing"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Get started"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Next step"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Setting up <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Enable <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Please tick \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" in your Language &amp; input settings. This will authorise it to run on your device."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Enable in Settings"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Switch to <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Next, select \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" as your active text-input method."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Switch input methods"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Congratulations, you\'re all set!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Now you can type in all your favourite apps with <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configure additional languages"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Finished"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Show setup wizard icon"</string>
<string name="app_name" msgid="6320102637491234792">"Dictionary Provider"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Dictionary Provider"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Dictionary Service"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"A dictionary is available for <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Press to review and download"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Downloading: suggestions for <xliff:g id="LANGUAGE">%1$s</xliff:g> will be ready soon."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index 88f585606..f361c9cdb 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"¿Realmente quieres instalar este archivo para <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Se produjo un error."</string>
<string name="button_default" msgid="3988017840431881491">"Predeterminado"</string>
- <string name="language_settings" msgid="1671153053201809031">"Teclado e idioma"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Seleccionar método de entrada"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Te damos la bienvenida a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"con la escritura gestual"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Comenzar"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurando <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Habilitar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Marca \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" en Teclado e idioma para autorizar su ejecución en el dispositivo."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Cambiar a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"¡Felicitaciones, ya terminaste!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Ahora puedes escribir en todas tus aplicaciones favoritas con <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configurar otros idiomas"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Finalizado"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Proveedor de diccionarios"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Proveedor de diccionarios"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Servicio de diccionarios"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Hay un diccionario disponible de <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pulsar para opinar y descargar"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Descargando: las sugerencias de <xliff:g id="LANGUAGE">%1$s</xliff:g> estarán disponibles en breve."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 2da24af94..6efb83dd0 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"¿Seguro que quieres instalar este archivo para <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Se ha producido un error"</string>
<string name="button_default" msgid="3988017840431881491">"Predeterminado"</string>
- <string name="language_settings" msgid="1671153053201809031">"Idioma y entrada de texto"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Selecciona un método de entrada"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Te damos la bienvenida a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"con escritura con gestos"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Empezar"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Paso siguiente"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurando <xliff:g id="APPLICATION_NAME">%s</xliff:g>..."</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Habilitar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Selecciona <xliff:g id="APPLICATION_NAME">%s</xliff:g> en Idioma y entrada de texto para que se ejecute en el dispositivo."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Habilitar en Ajustes"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Cambiar a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"A continuación, selecciona <xliff:g id="APPLICATION_NAME">%s</xliff:g> como método de entrada de texto activo."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Alternar métodos de entrada"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"¡Enhorabuena, has terminado!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> te permite escribir en todas tus aplicaciones favoritas."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configura otros idiomas"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Finalizado"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Mostrar icono asistente config"</string>
<string name="app_name" msgid="6320102637491234792">"Proveedor del diccionario"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Proveedor del diccionario"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Servicio de diccionario"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Hay un diccionario disponible de <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pulsa para comprobar y descargar"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Descargando: las sugerencias de <xliff:g id="LANGUAGE">%1$s</xliff:g> estarán disponibles en breve."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index fc8547257..5a963c3fa 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Kas soovite tõesti installida faili lokaadile <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Ilmnes viga"</string>
<string name="button_default" msgid="3988017840431881491">"Vaikeväärtus"</string>
- <string name="language_settings" msgid="1671153053201809031">"Keeled ja sisestamine"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Valige sisestusmeetod"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Tere tulemast rakendusse <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"joonistusega sisestamisega"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Alustamine"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Järgmine toiming"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Rakenduse <xliff:g id="APPLICATION_NAME">%s</xliff:g> seadistamine"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Lubage <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Märkige oma keele ja sisestamise seadetes rakendus „<xliff:g id="APPLICATION_NAME">%s</xliff:g>”. See lubab rakenduse käitamise teie seadmes."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Luba seadetes"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Minge üle rakendusele <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Järgmisena valige aktiivseks tekstisisestusmeetodiks rakendus „<xliff:g id="APPLICATION_NAME">%s</xliff:g>”."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Vaheta sisestusmeetodeid"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Õnnitleme. Kõik on valmis!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nüüd saate rakendusega <xliff:g id="APPLICATION_NAME">%s</xliff:g> sisestada kõikides oma lemmikrakendustes."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Seadista lisakeeled"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Lõpetatud"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Kuva seadistusviisardi ikoon"</string>
<string name="app_name" msgid="6320102637491234792">"Sõnastikupakkuja"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Sõnastikupakkuja"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Sõnastikuteenus"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Sõnastik on <xliff:g id="LANGUAGE">%1$s</xliff:g> keele jaoks saadaval"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Vajutage ülevaatamiseks ja allalaadimiseks"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Allalaadimine: <xliff:g id="LANGUAGE">%1$s</xliff:g> keele soovitused on varsti saadaval."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index e7f5c9603..4323214a4 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -175,8 +175,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"این فایل واقعاً برای <xliff:g id="LOCALE_NAME">%s</xliff:g> نصب شود؟"</string>
<string name="error" msgid="8940763624668513648">"خطایی روی داد"</string>
<string name="button_default" msgid="3988017840431881491">"پیش‌فرض"</string>
- <string name="language_settings" msgid="1671153053201809031">"زبان و ورودی"</string>
- <string name="select_input_method" msgid="4301602374609275003">"انتخاب روش ورودی"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"به <xliff:g id="APPLICATION_NAME">%s</xliff:g> خوش آمدید"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"با ورودی اشاره‌ای"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"شروع به کار"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"مرحله بعد"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"راه‌اندازی <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"فعال‌سازی <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"لطفاً «<xliff:g id="APPLICATION_NAME">%s</xliff:g>» را در تنظیمات زبان و ورودی خود علامت بزنید. این کار مجوز اجرای آن در دستگاه شما است."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"فعال‌سازی در تنظیمات"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"جابجایی به <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"در مرحله بعدی، «<xliff:g id="APPLICATION_NAME">%s</xliff:g>» را به عنوان روش ورودی نوشتار فعال خود انتخاب نمایید."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"تغییر روش‌های ورودی"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"تبریک می‌گوییم، اکنون کاملاً آماده هستید!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"اکنون می‌توانید در همه برنامه‌های دلخواه خود با <xliff:g id="APPLICATION_NAME">%s</xliff:g> تایپ کنید."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"پیکربندی زبان‌های دیگر"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"تمام شد"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"نمایش نماد برنامه نصب"</string>
<string name="app_name" msgid="6320102637491234792">"ارائه‌دهنده فرهنگ لغت"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"ارائه‌دهنده فرهنگ لغت"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"سرویس فرهنگ لغت"</string>
@@ -207,4 +221,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"یک فرهنگ لغت برای <xliff:g id="LANGUAGE">%1$s</xliff:g> موجود است"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"برای مرور و دانلود فشار دهید"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"دانلود لغات پیشنهادی برای <xliff:g id="LANGUAGE">%1$s</xliff:g> به زودی شروع می‌شود."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 649913672..3ae4f655c 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Haluatko asentaa tämä tiedoston kielelle <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Tapahtui virhe"</string>
<string name="button_default" msgid="3988017840431881491">"Oletusarvot"</string>
- <string name="language_settings" msgid="1671153053201809031">"Kieli ja syöttötapa"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Valitse syöttötapa"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Tervetuloa käyttämään sovellusta <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"sekä piirtokirjoitus"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Aloita"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Seuraava vaihe"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Sovelluksen <xliff:g id="APPLICATION_NAME">%s</xliff:g> asetukset"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Ota <xliff:g id="APPLICATION_NAME">%s</xliff:g> käyttöön"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Valitse <xliff:g id="APPLICATION_NAME">%s</xliff:g> kieli- ja syöttötapa-asetuksissa. Näin valtuutat sovelluksen toimimaan laitteellasi."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Ota käyttöön asetuksissa"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Siirry sovellukseen <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Valitse <xliff:g id="APPLICATION_NAME">%s</xliff:g> käytössä olevaksi tekstinsyöttötavaksi."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Vaihda syöttötapaa"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Onneksi olkoon, valmista tuli!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nyt voit kirjoittaa kaikkiin lempisovelluksiisi sovelluksen <xliff:g id="APPLICATION_NAME">%s</xliff:g> avulla."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Määritä lisää kieliä"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Valmis"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Näytä ohjattu asennus -kuvake"</string>
<string name="app_name" msgid="6320102637491234792">"Sanakirjan tarjoaja"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Sanakirjan tarjoaja"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Sanakirjapalvelu"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Kielen <xliff:g id="LANGUAGE">%1$s</xliff:g> sanakirja on saatavilla"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Paina tätä, jos haluat tarkastella kohdetta tai ladata sen"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Ladataan: pian ehdotuksia näytetään kielellä <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index c3851d9f0..a357cc530 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Installer ce fichier pour la langue \"<xliff:g id="LOCALE_NAME">%s</xliff:g>\" ?"</string>
<string name="error" msgid="8940763624668513648">"Une erreur s\'est produite"</string>
<string name="button_default" msgid="3988017840431881491">"Par défaut"</string>
- <string name="language_settings" msgid="1671153053201809031">"Langue et saisie"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Sélectionnez le mode de saisie"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Bienvenue dans <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"avec la saisie gestuelle"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Commencer"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurer <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Activer <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Sous \"Langue et saisie\", cochez \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" pour autoriser son exécution sur l\'appareil."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Basculer vers <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Félicitations, l\'opération est terminée"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>, vous pouvez saisir du texte dans toutes vos applications préférées."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configurer des langues supplémentaires"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"OK"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Fournisseur de dictionnaires"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Fournisseur de dictionnaires"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Service de dictionnaires"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Un dictionnaire est disponible en <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Appuyez ici pour consulter et télécharger le dictionnaire."</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"En cours de téléchargement. Des suggestions pour la langue suivante seront bientôt disponibles : <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index bd745cc54..1990aa14d 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"<xliff:g id="LOCALE_NAME">%s</xliff:g> के लिए वास्तव में यह फ़ाइल इंस्टॉल करें?"</string>
<string name="error" msgid="8940763624668513648">"कोई त्रुटि हुई थी"</string>
<string name="button_default" msgid="3988017840431881491">"डिफ़ॉल्ट"</string>
- <string name="language_settings" msgid="1671153053201809031">"भाषा और इनपुट"</string>
- <string name="select_input_method" msgid="4301602374609275003">"इनपुट पद्धति चुनें"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> में आपका स्वागत है"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"हावभाव लेखन के साथ"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"आरंभ करें"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सेट करना"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> को सक्षम करें"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"कृपया अपनी भाषा और इनपुट सेटिंग में \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" को चेक करें. इससे वह आपके उपकरण पर चलने के लिए अधिकृत हो जाएगा."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> पर स्विच करें"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"बधाई हो, आप बिल्कुल तैयार हैं!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"अब आप <xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ अपने सभी पसंदीदा एप्लिकेशन में लिख सकते हैं."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"अतिरिक्त भाषाएं कॉन्फ़िगर करना"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"समाप्त"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"डिक्‍शनरी प्रदाता"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"डिक्‍शनरी प्रदाता"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"डिक्‍शनरी सेवा"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g> के लिए डिक्‍शनरी उपलब्‍ध है"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"समीक्षा करने और डाउनलोड करने के लिए दबाएं"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"डाउनलोड हो रहा है: <xliff:g id="LANGUAGE">%1$s</xliff:g> के लिए सुझाव जल्दी ही तैयार हो जाएंगे."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 6b418a16a..d5c3dc072 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Želite li doista instalirati ovu datoteku za <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Došlo je do pogreške"</string>
<string name="button_default" msgid="3988017840431881491">"Zadano"</string>
- <string name="language_settings" msgid="1671153053201809031">"Jezik i unos"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Odabir načina unosa"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Dobro došli u aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"s Pisanjem kretnjama"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Počnite s radom"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Postavljanje aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Omogućite aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Potvrdite aplikaciju \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" u postavkama Jezik i unos i ovlastite je za pokretanje."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Prijeđite na aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Izvrsno, spremni ste!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Sada možete pisati u svim svojim omiljenim aplikacijama pomoću aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfiguriraj dodatne jezike"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Završeno"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Davatelj rječnika"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Davatelj rječnika"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Usluga rječnika"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Dostupan je rječnik za <xliff:g id="LANGUAGE">%1$s</xliff:g> jezik"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pritisnite za pregled i preuzimanje"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Preuzimanje: prijedlozi za <xliff:g id="LANGUAGE">%1$s</xliff:g> bit će spremni uskoro."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index e1e6dc797..998e1a7b7 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Valóban telepíti ezt a fájlt <xliff:g id="LOCALE_NAME">%s</xliff:g> nyelvhez?"</string>
<string name="error" msgid="8940763624668513648">"Hiba történt."</string>
<string name="button_default" msgid="3988017840431881491">"Alapértelmezett"</string>
- <string name="language_settings" msgid="1671153053201809031">"Nyelv és bevitel"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Beviteli mód kiválasztása"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Üdvözli a(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g>!"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"kézmozdulatokkal történő bevitellel"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Első lépések"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"A(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g> beállítása"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"A(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g> engedélyezése"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Jelölje be a(z) „<xliff:g id="APPLICATION_NAME">%s</xliff:g>” alkalmazást a „Nyelv és bevitel” alatt a futtatás érdekében."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Váltás a(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g> alkalmazásra"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gratulálunk, máris elkészült!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Immár minden kedvenc alkalmazásában gépelhet a(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g> segítségével."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Állítson be további nyelveket"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Befejeződött"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Szótárszolgáltató"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Szótárszolgáltató"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Szótárszolgáltatás"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g> nyelvhez van rendelkezésre álló szótár"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Nyomja meg az áttekintéshez és letöltéshez"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Letöltés: a(z) <xliff:g id="LANGUAGE">%1$s</xliff:g> nyelvvel kapcsolatos javaslatok hamarosan elérhetők lesznek."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 5072b9a55..e986a2df3 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Yakin ingin memasang file ini untuk <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Terjadi kesalahan"</string>
<string name="button_default" msgid="3988017840431881491">"Default"</string>
- <string name="language_settings" msgid="1671153053201809031">"Bahasa &amp; masukan"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Pilih metode masukan"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Selamat datang di <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"dengan Ketikan Isyarat"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Memulai"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Menyiapkan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Aktifkan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Centang \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" di setelan Bahasa &amp; masukan Anda. Tindakan ini akan mengizinkannya berjalan di perangkat Anda."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Beralih ke <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Selamat, Anda sudah siap!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Sekarang Anda dapat mengetik di semua aplikasi favorit Anda dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurasikan bahasa tambahan"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Selesai"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Penyedia Kamus"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Penyedia Kamus"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Layanan Kamus"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Kamus tersedia untuk bahasa <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Tekan untuk meninjau dan mengunduh"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Mengunduh: saran untuk bahasa <xliff:g id="LANGUAGE">%1$s</xliff:g> akan segera tersedia."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-is/strings.xml b/java/res/values-is/strings.xml
new file mode 100644
index 000000000..0a9375cd5
--- /dev/null
+++ b/java/res/values-is/strings.xml
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for aosp_android_keyboard_ime_name (8250992613616792321) -->
+ <skip />
+ <!-- no translation found for aosp_android_keyboard_ime_settings (423615877174850267) -->
+ <skip />
+ <!-- no translation found for aosp_spell_checker_service_name (511950477199948048) -->
+ <skip />
+ <!-- no translation found for aosp_android_spell_checker_service_settings (2970535894327288421) -->
+ <skip />
+ <!-- no translation found for english_ime_input_options (3909945612939668554) -->
+ <skip />
+ <!-- no translation found for english_ime_research_log (8492602295696577851) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_summary (8754413382543307713) -->
+ <skip />
+ <!-- no translation found for vibrate_on_keypress (5258079494276955460) -->
+ <skip />
+ <!-- no translation found for sound_on_keypress (6093592297198243644) -->
+ <skip />
+ <!-- no translation found for popup_on_keypress (123894815723512944) -->
+ <skip />
+ <!-- no translation found for general_category (1859088467017573195) -->
+ <skip />
+ <!-- no translation found for correction_category (2236750915056607613) -->
+ <skip />
+ <!-- no translation found for gesture_typing_category (497263612130532630) -->
+ <skip />
+ <!-- no translation found for misc_category (6894192814868233453) -->
+ <skip />
+ <!-- no translation found for advanced_settings (362895144495591463) -->
+ <skip />
+ <!-- no translation found for advanced_settings_summary (4487980456152830271) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key (5915478828318774384) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key_summary (7343403647474265713) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview (6604262359510068370) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview_summary (6340524345729093886) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_delay (6213164897443068248) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_no_delay (2096123151571458064) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_default_delay (2166964333903906734) -->
+ <skip />
+ <!-- no translation found for abbreviation_unit_milliseconds (8700286094028323363) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict (4435317977804180815) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict_summary (6599983334507879959) -->
+ <skip />
+ <!-- no translation found for use_double_space_period (8781529969425082860) -->
+ <skip />
+ <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
+ <skip />
+ <!-- no translation found for auto_cap (1719746674854628252) -->
+ <skip />
+ <!-- no translation found for auto_cap_summary (7934452761022946874) -->
+ <skip />
+ <!-- no translation found for configure_dictionaries_title (4238652338556902049) -->
+ <skip />
+ <!-- no translation found for main_dictionary (4798763781818361168) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions (8026799663445531637) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions_summary (1583132279498502825) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_name (3219916594067551303) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_only_portrait_name (3859783767435239118) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_hide_name (6309143926422234673) -->
+ <skip />
+ <!-- no translation found for auto_correction (7630720885194996950) -->
+ <skip />
+ <!-- no translation found for auto_correction_summary (5625751551134658006) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_off (8470882665417944026) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_modest (8788366690620799097) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_aggeressive (3524029103734923819) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_very_aggeressive (3386782235540547678) -->
+ <skip />
+ <!-- no translation found for bigram_prediction (1084449187723948550) -->
+ <skip />
+ <!-- no translation found for bigram_prediction_summary (3896362682751109677) -->
+ <skip />
+ <!-- no translation found for gesture_input (826951152254563827) -->
+ <skip />
+ <!-- no translation found for gesture_input_summary (9180350639305731231) -->
+ <skip />
+ <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text (4443240334739381053) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text_summary (4472696213996203533) -->
+ <skip />
+ <!-- no translation found for added_word (8993883354622484372) -->
+ <skip />
+ <string name="label_go_key" msgid="1635148082137219148">"Áfram"</string>
+ <string name="label_next_key" msgid="362972844525672568">"Næsta"</string>
+ <string name="label_previous_key" msgid="1211868118071386787">"Fyrra"</string>
+ <string name="label_done_key" msgid="2441578748772529288">"Lokið"</string>
+ <string name="label_send_key" msgid="2815056534433717444">"Senda"</string>
+ <!-- no translation found for label_pause_key (181098308428035340) -->
+ <skip />
+ <!-- no translation found for label_wait_key (6402152600878093134) -->
+ <skip />
+ <!-- no translation found for spoken_use_headphones (896961781287283493) -->
+ <skip />
+ <!-- no translation found for spoken_current_text_is (2485723011272583845) -->
+ <skip />
+ <!-- no translation found for spoken_no_text_entered (7479685225597344496) -->
+ <skip />
+ <!-- no translation found for spoken_description_unknown (3197434010402179157) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift (244197883292549308) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift_shifted (1681877323344195035) -->
+ <skip />
+ <!-- no translation found for spoken_description_caps_lock (3276478269526304432) -->
+ <skip />
+ <!-- no translation found for spoken_description_delete (8740376944276199801) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_symbol (5486340107500448969) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_alpha (23129338819771807) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_numeric (591752092685161732) -->
+ <skip />
+ <!-- no translation found for spoken_description_settings (4627462689603838099) -->
+ <skip />
+ <!-- no translation found for spoken_description_tab (2667716002663482248) -->
+ <skip />
+ <!-- no translation found for spoken_description_space (2582521050049860859) -->
+ <skip />
+ <!-- no translation found for spoken_description_mic (615536748882611950) -->
+ <skip />
+ <!-- no translation found for spoken_description_smiley (2256309826200113918) -->
+ <skip />
+ <!-- no translation found for spoken_description_return (8178083177238315647) -->
+ <skip />
+ <!-- no translation found for spoken_description_search (1247236163755920808) -->
+ <skip />
+ <!-- no translation found for spoken_description_dot (40711082435231673) -->
+ <skip />
+ <!-- no translation found for spoken_description_language_switch (5507091328222331316) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_next (8636078276664150324) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_previous (800872415009336208) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_on (5700440798609574589) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_locked (593175803181701830) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_off (657219998449174808) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_symbol (7183343879909747642) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_alpha (3528307674390156956) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone (6520207943132026264) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_hidden (8718927835531429807) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_mode (4729081055438508321) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date (3137520166817128102) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date_time (339593358488851072) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_email (6216248078128294262) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_im (1137405089766557048) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_number (7991623440699957069) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_phone (6851627527401433229) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_text (6479436687899701619) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_time (4381856885582143277) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_url (1519819835514911218) -->
+ <skip />
+ <!-- no translation found for voice_input (3583258583521397548) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_symbols_keyboard (7203213240786084067) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_off (3745699748218082014) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_main_keyboard (6586544292900314339) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_symbols_keyboard (5233725927281932391) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_off (63875609591897607) -->
+ <skip />
+ <!-- no translation found for configure_input_method (373356270290742459) -->
+ <skip />
+ <!-- no translation found for language_selection_title (1651299598555326750) -->
+ <skip />
+ <!-- no translation found for send_feedback (1780431884109392046) -->
+ <skip />
+ <!-- no translation found for select_language (3693815588777926848) -->
+ <skip />
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
+ <!-- no translation found for has_dictionary (6071847973466625007) -->
+ <skip />
+ <!-- no translation found for prefs_enable_log (6620424505072963557) -->
+ <skip />
+ <!-- no translation found for prefs_description_log (7525225584555429211) -->
+ <skip />
+ <!-- no translation found for keyboard_layout (8451164783510487501) -->
+ <skip />
+ <!-- no translation found for subtype_en_GB (88170601942311355) -->
+ <skip />
+ <!-- no translation found for subtype_en_US (6160452336634534239) -->
+ <skip />
+ <!-- no translation found for subtype_es_US (5583145191430180200) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_GB (2179097748724725906) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_US (1362581347576714579) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_es_US (6261791057007890189) -->
+ <skip />
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwertz (1177848172397202890) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_azerty (8721460968141187394) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_dvorak (3122976737669823935) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_colemak (4205992994906097244) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_pcqwerty (8840928374394180189) -->
+ <skip />
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
+ <!-- no translation found for custom_input_style_note_message (8826731320846363423) -->
+ <skip />
+ <!-- no translation found for enable (5031294444630523247) -->
+ <skip />
+ <!-- no translation found for not_now (6172462888202790482) -->
+ <skip />
+ <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
+ <skip />
+ <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
+ <skip />
+ <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_vibration_duration_settings (7918341459947439226) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_sound_volume_settings (6027007337036891623) -->
+ <skip />
+ <!-- no translation found for prefs_read_external_dictionary (2588931418575013067) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_no_files_message (4947420942224623792) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_multiple_files_title (7637749044265808628) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_confirm_install_message (6898610163768980870) -->
+ <skip />
+ <!-- no translation found for error (8940763624668513648) -->
+ <skip />
+ <!-- no translation found for button_default (3988017840431881491) -->
+ <skip />
+ <!-- no translation found for setup_welcome_title (6112821709832031715) -->
+ <skip />
+ <!-- no translation found for setup_welcome_additional_description (8150252008545768953) -->
+ <skip />
+ <!-- no translation found for setup_start_action (8936036460897347708) -->
+ <skip />
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <!-- no translation found for setup_steps_title (6400373034871816182) -->
+ <skip />
+ <!-- no translation found for setup_step1_title (3147967630253462315) -->
+ <skip />
+ <!-- no translation found for setup_step1_instruction (2578631936624637241) -->
+ <skip />
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <!-- no translation found for setup_step2_title (6860725447906690594) -->
+ <skip />
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <!-- no translation found for setup_step3_title (3154757183631490281) -->
+ <skip />
+ <!-- no translation found for setup_step3_instruction (8025981829605426000) -->
+ <skip />
+ <!-- no translation found for setup_step3_action (600879797256942259) -->
+ <skip />
+ <!-- no translation found for setup_finish_action (276559243409465389) -->
+ <skip />
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
+ <!-- no translation found for app_name (6320102637491234792) -->
+ <skip />
+ <!-- no translation found for dictionary_provider_name (3027315045397363079) -->
+ <skip />
+ <!-- no translation found for dictionary_service_name (6237472350693511448) -->
+ <skip />
+ <!-- no translation found for download_description (6014835283119198591) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_title (8091417676045693313) -->
+ <skip />
+ <!-- no translation found for dictionary_install_over_metered_network_prompt (3587517870006332980) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_summary (5305694987799824349) -->
+ <skip />
+ <!-- no translation found for user_dictionaries (3582332055892252845) -->
+ <skip />
+ <!-- no translation found for default_user_dict_pref_name (1625055720489280530) -->
+ <skip />
+ <!-- no translation found for dictionary_available (4728975345815214218) -->
+ <skip />
+ <!-- no translation found for dictionary_downloading (2982650524622620983) -->
+ <skip />
+ <!-- no translation found for dictionary_installed (8081558343559342962) -->
+ <skip />
+ <!-- no translation found for dictionary_disabled (8950383219564621762) -->
+ <skip />
+ <!-- no translation found for cannot_connect_to_dict_service (9216933695765732398) -->
+ <skip />
+ <!-- no translation found for no_dictionaries_available (8039920716566132611) -->
+ <skip />
+ <!-- no translation found for check_for_updates_now (8087688440916388581) -->
+ <skip />
+ <!-- no translation found for last_update (730467549913588780) -->
+ <skip />
+ <!-- no translation found for message_updating (4457761393932375219) -->
+ <skip />
+ <!-- no translation found for message_loading (8689096636874758814) -->
+ <skip />
+ <!-- no translation found for main_dict_description (3072821352793492143) -->
+ <skip />
+ <!-- no translation found for cancel (6830980399865683324) -->
+ <skip />
+ <!-- no translation found for install_dict (180852772562189365) -->
+ <skip />
+ <!-- no translation found for cancel_download_dict (7843340278507019303) -->
+ <skip />
+ <!-- no translation found for delete_dict (756853268088330054) -->
+ <skip />
+ <!-- no translation found for should_download_over_metered_prompt (2878629598667658845) -->
+ <skip />
+ <!-- no translation found for download_over_metered (1643065851159409546) -->
+ <skip />
+ <!-- no translation found for do_not_download_over_metered (2176209579313941583) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_title (6514288591959117288) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_description (1075194169443163487) -->
+ <skip />
+ <!-- no translation found for toast_downloading_suggestions (1313027353588566660) -->
+ <skip />
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
+</resources>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index c64543abb..bf54ab909 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Installare questo file per <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Si è verificato un errore"</string>
<string name="button_default" msgid="3988017840431881491">"Predefinito"</string>
- <string name="language_settings" msgid="1671153053201809031">"Lingua e input"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Scegli il metodo di immissione"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Benvenuto in <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"con la Digitazione gestuale"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Inizia"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Passaggio successivo"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurazione di <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Abilita <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Seleziona \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" nelle impostazioni Lingua e immissione per autorizzarne l\'esecuzione sul dispositivo."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Abilita nelle impostazioni"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Passa a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Quindi seleziona \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" come metodo di immissione testo attivo."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Cambia metodo di immissione"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Grazie, adesso sei pronto!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Ora puoi digitare in tutte le tue app preferite con <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configura altre lingue"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Terminato"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Mostra icona proc. guid. config."</string>
<string name="app_name" msgid="6320102637491234792">"Dictionary Provider"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Dictionary Provider"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Servizio dizionario"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"È disponibile un dizionario per <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Premi per esaminare e scaricare"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Download: i suggerimenti per <xliff:g id="LANGUAGE">%1$s</xliff:g> saranno pronti a breve."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index 5b4dbbdbe..bb7c0a673 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"האם באמת להתקין את הקובץ הזה עבור <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"אירעה שגיאה"</string>
<string name="button_default" msgid="3988017840431881491">"ברירת מחדל"</string>
- <string name="language_settings" msgid="1671153053201809031">"שפה וקלט"</string>
- <string name="select_input_method" msgid="4301602374609275003">"בחירת שיטת קלט"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"ברוך הבא אל <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"עם הקלדת החלקה"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"התחל"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"השלב הבא"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"הגדרת <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"הפעל את <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"סמן את \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" בהגדרות השפה והקלט שלך. פעולה זו תאפשר לו לפעול במכשיר שלך."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"הפעל בהגדרות"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"עבור אל <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"בשלב הבא, בחר ב-\'<xliff:g id="APPLICATION_NAME">%s</xliff:g>\' כאמצעי הקלט הפעיל להזנת טקסט."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"החלף שיטות קלט"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"ברכותינו, הכל מוכן!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"כעת תוכל להקליד בכל היישומים המועדפים עליך באמצעות <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"הגדר שפות נוספות"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"סיום"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"הצג את סמל אשף ההגדרות"</string>
<string name="app_name" msgid="6320102637491234792">"ספק המילון"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"ספק המילון"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"שירות מילון"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"יש מילון זמין עבור <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"לחץ כדי לעיין ולהוריד"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"מוריד: הצעות ב<xliff:g id="LANGUAGE">%1$s</xliff:g> יהיו מוכנות בקרוב."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 267148c4b..0aea4b27f 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"この<xliff:g id="LOCALE_NAME">%s</xliff:g>のファイルをインストールしてもよろしいですか?"</string>
<string name="error" msgid="8940763624668513648">"エラーが発生しました"</string>
<string name="button_default" msgid="3988017840431881491">"デフォルト"</string>
- <string name="language_settings" msgid="1671153053201809031">"言語と入力"</string>
- <string name="select_input_method" msgid="4301602374609275003">"入力方法の選択"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>へようこそ"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"ジェスチャー入力の使用"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"開始"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>の設定"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>の有効化"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"[言語と入力]で[<xliff:g id="APPLICATION_NAME">%s</xliff:g>]のチェックボックスをオンにしてください。これで、端末でアプリを実行できるようになります。"</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>への切り替え"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"設定完了"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"これで、お気に入りのすべてのアプリで<xliff:g id="APPLICATION_NAME">%s</xliff:g>を使用して入力できます。"</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"別の言語を設定する"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"完了"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"辞書提供元"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"辞書提供元"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"辞書"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g>の辞書を利用できます"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"押すと確認/ダウンロードできます"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"ダウンロード中: <xliff:g id="LANGUAGE">%1$s</xliff:g>の入力候補をまもなく利用できます。"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ka/strings.xml b/java/res/values-ka/strings.xml
new file mode 100644
index 000000000..9f8bd980c
--- /dev/null
+++ b/java/res/values-ka/strings.xml
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for aosp_android_keyboard_ime_name (8250992613616792321) -->
+ <skip />
+ <!-- no translation found for aosp_android_keyboard_ime_settings (423615877174850267) -->
+ <skip />
+ <!-- no translation found for aosp_spell_checker_service_name (511950477199948048) -->
+ <skip />
+ <!-- no translation found for aosp_android_spell_checker_service_settings (2970535894327288421) -->
+ <skip />
+ <!-- no translation found for english_ime_input_options (3909945612939668554) -->
+ <skip />
+ <!-- no translation found for english_ime_research_log (8492602295696577851) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_summary (8754413382543307713) -->
+ <skip />
+ <!-- no translation found for vibrate_on_keypress (5258079494276955460) -->
+ <skip />
+ <!-- no translation found for sound_on_keypress (6093592297198243644) -->
+ <skip />
+ <!-- no translation found for popup_on_keypress (123894815723512944) -->
+ <skip />
+ <!-- no translation found for general_category (1859088467017573195) -->
+ <skip />
+ <!-- no translation found for correction_category (2236750915056607613) -->
+ <skip />
+ <!-- no translation found for gesture_typing_category (497263612130532630) -->
+ <skip />
+ <!-- no translation found for misc_category (6894192814868233453) -->
+ <skip />
+ <!-- no translation found for advanced_settings (362895144495591463) -->
+ <skip />
+ <!-- no translation found for advanced_settings_summary (4487980456152830271) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key (5915478828318774384) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key_summary (7343403647474265713) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview (6604262359510068370) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview_summary (6340524345729093886) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_delay (6213164897443068248) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_no_delay (2096123151571458064) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_default_delay (2166964333903906734) -->
+ <skip />
+ <!-- no translation found for abbreviation_unit_milliseconds (8700286094028323363) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict (4435317977804180815) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict_summary (6599983334507879959) -->
+ <skip />
+ <!-- no translation found for use_double_space_period (8781529969425082860) -->
+ <skip />
+ <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
+ <skip />
+ <!-- no translation found for auto_cap (1719746674854628252) -->
+ <skip />
+ <!-- no translation found for auto_cap_summary (7934452761022946874) -->
+ <skip />
+ <!-- no translation found for configure_dictionaries_title (4238652338556902049) -->
+ <skip />
+ <!-- no translation found for main_dictionary (4798763781818361168) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions (8026799663445531637) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions_summary (1583132279498502825) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_name (3219916594067551303) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_only_portrait_name (3859783767435239118) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_hide_name (6309143926422234673) -->
+ <skip />
+ <!-- no translation found for auto_correction (7630720885194996950) -->
+ <skip />
+ <!-- no translation found for auto_correction_summary (5625751551134658006) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_off (8470882665417944026) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_modest (8788366690620799097) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_aggeressive (3524029103734923819) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_very_aggeressive (3386782235540547678) -->
+ <skip />
+ <!-- no translation found for bigram_prediction (1084449187723948550) -->
+ <skip />
+ <!-- no translation found for bigram_prediction_summary (3896362682751109677) -->
+ <skip />
+ <!-- no translation found for gesture_input (826951152254563827) -->
+ <skip />
+ <!-- no translation found for gesture_input_summary (9180350639305731231) -->
+ <skip />
+ <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text (4443240334739381053) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text_summary (4472696213996203533) -->
+ <skip />
+ <!-- no translation found for added_word (8993883354622484372) -->
+ <skip />
+ <string name="label_go_key" msgid="1635148082137219148">"გადასვლა"</string>
+ <string name="label_next_key" msgid="362972844525672568">"შემდეგი"</string>
+ <string name="label_previous_key" msgid="1211868118071386787">"წინა"</string>
+ <string name="label_done_key" msgid="2441578748772529288">"შესრულებულია"</string>
+ <string name="label_send_key" msgid="2815056534433717444">"გაგზავნა"</string>
+ <!-- no translation found for label_pause_key (181098308428035340) -->
+ <skip />
+ <!-- no translation found for label_wait_key (6402152600878093134) -->
+ <skip />
+ <!-- no translation found for spoken_use_headphones (896961781287283493) -->
+ <skip />
+ <!-- no translation found for spoken_current_text_is (2485723011272583845) -->
+ <skip />
+ <!-- no translation found for spoken_no_text_entered (7479685225597344496) -->
+ <skip />
+ <!-- no translation found for spoken_description_unknown (3197434010402179157) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift (244197883292549308) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift_shifted (1681877323344195035) -->
+ <skip />
+ <!-- no translation found for spoken_description_caps_lock (3276478269526304432) -->
+ <skip />
+ <!-- no translation found for spoken_description_delete (8740376944276199801) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_symbol (5486340107500448969) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_alpha (23129338819771807) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_numeric (591752092685161732) -->
+ <skip />
+ <!-- no translation found for spoken_description_settings (4627462689603838099) -->
+ <skip />
+ <!-- no translation found for spoken_description_tab (2667716002663482248) -->
+ <skip />
+ <!-- no translation found for spoken_description_space (2582521050049860859) -->
+ <skip />
+ <!-- no translation found for spoken_description_mic (615536748882611950) -->
+ <skip />
+ <!-- no translation found for spoken_description_smiley (2256309826200113918) -->
+ <skip />
+ <!-- no translation found for spoken_description_return (8178083177238315647) -->
+ <skip />
+ <!-- no translation found for spoken_description_search (1247236163755920808) -->
+ <skip />
+ <!-- no translation found for spoken_description_dot (40711082435231673) -->
+ <skip />
+ <!-- no translation found for spoken_description_language_switch (5507091328222331316) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_next (8636078276664150324) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_previous (800872415009336208) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_on (5700440798609574589) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_locked (593175803181701830) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_off (657219998449174808) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_symbol (7183343879909747642) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_alpha (3528307674390156956) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone (6520207943132026264) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_hidden (8718927835531429807) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_mode (4729081055438508321) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date (3137520166817128102) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date_time (339593358488851072) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_email (6216248078128294262) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_im (1137405089766557048) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_number (7991623440699957069) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_phone (6851627527401433229) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_text (6479436687899701619) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_time (4381856885582143277) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_url (1519819835514911218) -->
+ <skip />
+ <!-- no translation found for voice_input (3583258583521397548) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_symbols_keyboard (7203213240786084067) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_off (3745699748218082014) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_main_keyboard (6586544292900314339) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_symbols_keyboard (5233725927281932391) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_off (63875609591897607) -->
+ <skip />
+ <!-- no translation found for configure_input_method (373356270290742459) -->
+ <skip />
+ <!-- no translation found for language_selection_title (1651299598555326750) -->
+ <skip />
+ <!-- no translation found for send_feedback (1780431884109392046) -->
+ <skip />
+ <!-- no translation found for select_language (3693815588777926848) -->
+ <skip />
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
+ <!-- no translation found for has_dictionary (6071847973466625007) -->
+ <skip />
+ <!-- no translation found for prefs_enable_log (6620424505072963557) -->
+ <skip />
+ <!-- no translation found for prefs_description_log (7525225584555429211) -->
+ <skip />
+ <!-- no translation found for keyboard_layout (8451164783510487501) -->
+ <skip />
+ <!-- no translation found for subtype_en_GB (88170601942311355) -->
+ <skip />
+ <!-- no translation found for subtype_en_US (6160452336634534239) -->
+ <skip />
+ <!-- no translation found for subtype_es_US (5583145191430180200) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_GB (2179097748724725906) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_US (1362581347576714579) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_es_US (6261791057007890189) -->
+ <skip />
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwertz (1177848172397202890) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_azerty (8721460968141187394) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_dvorak (3122976737669823935) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_colemak (4205992994906097244) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_pcqwerty (8840928374394180189) -->
+ <skip />
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
+ <!-- no translation found for custom_input_style_note_message (8826731320846363423) -->
+ <skip />
+ <!-- no translation found for enable (5031294444630523247) -->
+ <skip />
+ <!-- no translation found for not_now (6172462888202790482) -->
+ <skip />
+ <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
+ <skip />
+ <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
+ <skip />
+ <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_vibration_duration_settings (7918341459947439226) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_sound_volume_settings (6027007337036891623) -->
+ <skip />
+ <!-- no translation found for prefs_read_external_dictionary (2588931418575013067) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_no_files_message (4947420942224623792) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_multiple_files_title (7637749044265808628) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_confirm_install_message (6898610163768980870) -->
+ <skip />
+ <!-- no translation found for error (8940763624668513648) -->
+ <skip />
+ <!-- no translation found for button_default (3988017840431881491) -->
+ <skip />
+ <!-- no translation found for setup_welcome_title (6112821709832031715) -->
+ <skip />
+ <!-- no translation found for setup_welcome_additional_description (8150252008545768953) -->
+ <skip />
+ <!-- no translation found for setup_start_action (8936036460897347708) -->
+ <skip />
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <!-- no translation found for setup_steps_title (6400373034871816182) -->
+ <skip />
+ <!-- no translation found for setup_step1_title (3147967630253462315) -->
+ <skip />
+ <!-- no translation found for setup_step1_instruction (2578631936624637241) -->
+ <skip />
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <!-- no translation found for setup_step2_title (6860725447906690594) -->
+ <skip />
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <!-- no translation found for setup_step3_title (3154757183631490281) -->
+ <skip />
+ <!-- no translation found for setup_step3_instruction (8025981829605426000) -->
+ <skip />
+ <!-- no translation found for setup_step3_action (600879797256942259) -->
+ <skip />
+ <!-- no translation found for setup_finish_action (276559243409465389) -->
+ <skip />
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
+ <!-- no translation found for app_name (6320102637491234792) -->
+ <skip />
+ <!-- no translation found for dictionary_provider_name (3027315045397363079) -->
+ <skip />
+ <!-- no translation found for dictionary_service_name (6237472350693511448) -->
+ <skip />
+ <!-- no translation found for download_description (6014835283119198591) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_title (8091417676045693313) -->
+ <skip />
+ <!-- no translation found for dictionary_install_over_metered_network_prompt (3587517870006332980) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_summary (5305694987799824349) -->
+ <skip />
+ <!-- no translation found for user_dictionaries (3582332055892252845) -->
+ <skip />
+ <!-- no translation found for default_user_dict_pref_name (1625055720489280530) -->
+ <skip />
+ <!-- no translation found for dictionary_available (4728975345815214218) -->
+ <skip />
+ <!-- no translation found for dictionary_downloading (2982650524622620983) -->
+ <skip />
+ <!-- no translation found for dictionary_installed (8081558343559342962) -->
+ <skip />
+ <!-- no translation found for dictionary_disabled (8950383219564621762) -->
+ <skip />
+ <!-- no translation found for cannot_connect_to_dict_service (9216933695765732398) -->
+ <skip />
+ <!-- no translation found for no_dictionaries_available (8039920716566132611) -->
+ <skip />
+ <!-- no translation found for check_for_updates_now (8087688440916388581) -->
+ <skip />
+ <!-- no translation found for last_update (730467549913588780) -->
+ <skip />
+ <!-- no translation found for message_updating (4457761393932375219) -->
+ <skip />
+ <!-- no translation found for message_loading (8689096636874758814) -->
+ <skip />
+ <!-- no translation found for main_dict_description (3072821352793492143) -->
+ <skip />
+ <!-- no translation found for cancel (6830980399865683324) -->
+ <skip />
+ <!-- no translation found for install_dict (180852772562189365) -->
+ <skip />
+ <!-- no translation found for cancel_download_dict (7843340278507019303) -->
+ <skip />
+ <!-- no translation found for delete_dict (756853268088330054) -->
+ <skip />
+ <!-- no translation found for should_download_over_metered_prompt (2878629598667658845) -->
+ <skip />
+ <!-- no translation found for download_over_metered (1643065851159409546) -->
+ <skip />
+ <!-- no translation found for do_not_download_over_metered (2176209579313941583) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_title (6514288591959117288) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_description (1075194169443163487) -->
+ <skip />
+ <!-- no translation found for toast_downloading_suggestions (1313027353588566660) -->
+ <skip />
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
+</resources>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 7ea31a335..a16fc7949 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"이 파일을 <xliff:g id="LOCALE_NAME">%s</xliff:g>(으)로 설치하시겠습니까?"</string>
<string name="error" msgid="8940763624668513648">"오류 발생"</string>
<string name="button_default" msgid="3988017840431881491">"기본값"</string>
- <string name="language_settings" msgid="1671153053201809031">"언어 및 키보드"</string>
- <string name="select_input_method" msgid="4301602374609275003">"입력 방법 선택"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>에 오신 것을 환영합니다."</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"제스처 타이핑 사용"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"시작하기"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> 설정"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> 사용 설정"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"언어 및 입력 설정에서 \'<xliff:g id="APPLICATION_NAME">%s</xliff:g>\'을(를) 확인하세요. 애플리케이션을 기기에서 실행할 수 있도록 승인합니다."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>(으)로 전환"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"모든 설정이 완료되었습니다."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"이제 즐겨찾는 앱을 <xliff:g id="APPLICATION_NAME">%s</xliff:g>에 입력할 수 있습니다."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"추가 언어 설정"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"완료됨"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"사전 제공업체"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"사전 제공업체"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"사전 서비스"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g> 사전을 사용할 수 있습니다."</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"검토하고 다운로드하려면 누르세요."</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"다운로드 중: <xliff:g id="LANGUAGE">%1$s</xliff:g>에 대한 추천항목이 곧 준비됩니다."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index 283013c28..7fd401464 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Ar tikrai įdiegti šį failą <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Įvyko klaida"</string>
<string name="button_default" msgid="3988017840431881491">"Numatytieji"</string>
- <string name="language_settings" msgid="1671153053201809031">"Kalba ir įvestis"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Pasirinkite įvesties metodą"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Sveiki! Tai „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"naudojant įvestį gestais"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Pradėti"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"„<xliff:g id="APPLICATION_NAME">%s</xliff:g>“ sąranka"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Įgalinkite „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Skiltyje „Kalbos ir įvesties nustatymai“ paž. „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“ (progr. bus įgal. veikti įr.)."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Perjungimas į „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Sveikiname, viską nustatėte!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Dabar galite įvesti visas mėgstamas programas naudodami „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigūruokite papildomas kalbas"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Baigta"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Žodyno teikėjas"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Žodyno teikėjas"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Žodyno paslauga"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Galimas <xliff:g id="LANGUAGE">%1$s</xliff:g> žodynas"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Paspauskite, kad peržiūrėtumėte ir atsisiųstumėte"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Atsisiunčiama. Netrukus bus galimi <xliff:g id="LANGUAGE">%1$s</xliff:g> pasiūlymai."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 84b11f691..be1a0d57b 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Vai instalēt šo failu šādai valodai: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Radās kļūda"</string>
<string name="button_default" msgid="3988017840431881491">"Noklusējums"</string>
- <string name="language_settings" msgid="1671153053201809031">"Valoda un ievade"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Ievades metodes izvēle"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Laipni lūdzam pakalpojumā <xliff:g id="APPLICATION_NAME">%s</xliff:g>,"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"kurā varat izmantot ievadi ar žestiem"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Sākt darbu"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Lietojumprogrammas <xliff:g id="APPLICATION_NAME">%s</xliff:g> iestatīšana"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Lietojumprogrammas <xliff:g id="APPLICATION_NAME">%s</xliff:g> iespējošana"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Valodas un ievades iestatījumos atzīmējiet “<xliff:g id="APPLICATION_NAME">%s</xliff:g>”, autorizējot tās palaišanu ierīcē."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Pārslēgšanās uz lietojumprogrammu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gatavs!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Izmantojot lietojumprogrammu <xliff:g id="APPLICATION_NAME">%s</xliff:g>, varat rakstīt visās iecienītākajās lietotnēs."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurēt papildu valodas"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Pabeigts"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Vārdnīcas nodrošinātājs"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Vārdnīcas nodrošinātājs"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Vārdnīcas pakalpojums"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Ir pieejama vārdnīca šādai valodai: <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Nospiediet, lai pārskatītu un lejupielādētu"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Notiek lejupielāde. Drīz būs pieejami ieteikumi šādai valodai: <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-mk/strings.xml b/java/res/values-mk/strings.xml
new file mode 100644
index 000000000..b054b0e96
--- /dev/null
+++ b/java/res/values-mk/strings.xml
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for aosp_android_keyboard_ime_name (8250992613616792321) -->
+ <skip />
+ <!-- no translation found for aosp_android_keyboard_ime_settings (423615877174850267) -->
+ <skip />
+ <!-- no translation found for aosp_spell_checker_service_name (511950477199948048) -->
+ <skip />
+ <!-- no translation found for aosp_android_spell_checker_service_settings (2970535894327288421) -->
+ <skip />
+ <!-- no translation found for english_ime_input_options (3909945612939668554) -->
+ <skip />
+ <!-- no translation found for english_ime_research_log (8492602295696577851) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_summary (8754413382543307713) -->
+ <skip />
+ <!-- no translation found for vibrate_on_keypress (5258079494276955460) -->
+ <skip />
+ <!-- no translation found for sound_on_keypress (6093592297198243644) -->
+ <skip />
+ <!-- no translation found for popup_on_keypress (123894815723512944) -->
+ <skip />
+ <!-- no translation found for general_category (1859088467017573195) -->
+ <skip />
+ <!-- no translation found for correction_category (2236750915056607613) -->
+ <skip />
+ <!-- no translation found for gesture_typing_category (497263612130532630) -->
+ <skip />
+ <!-- no translation found for misc_category (6894192814868233453) -->
+ <skip />
+ <!-- no translation found for advanced_settings (362895144495591463) -->
+ <skip />
+ <!-- no translation found for advanced_settings_summary (4487980456152830271) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key (5915478828318774384) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key_summary (7343403647474265713) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview (6604262359510068370) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview_summary (6340524345729093886) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_delay (6213164897443068248) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_no_delay (2096123151571458064) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_default_delay (2166964333903906734) -->
+ <skip />
+ <!-- no translation found for abbreviation_unit_milliseconds (8700286094028323363) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict (4435317977804180815) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict_summary (6599983334507879959) -->
+ <skip />
+ <!-- no translation found for use_double_space_period (8781529969425082860) -->
+ <skip />
+ <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
+ <skip />
+ <!-- no translation found for auto_cap (1719746674854628252) -->
+ <skip />
+ <!-- no translation found for auto_cap_summary (7934452761022946874) -->
+ <skip />
+ <!-- no translation found for configure_dictionaries_title (4238652338556902049) -->
+ <skip />
+ <!-- no translation found for main_dictionary (4798763781818361168) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions (8026799663445531637) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions_summary (1583132279498502825) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_name (3219916594067551303) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_only_portrait_name (3859783767435239118) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_hide_name (6309143926422234673) -->
+ <skip />
+ <!-- no translation found for auto_correction (7630720885194996950) -->
+ <skip />
+ <!-- no translation found for auto_correction_summary (5625751551134658006) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_off (8470882665417944026) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_modest (8788366690620799097) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_aggeressive (3524029103734923819) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_very_aggeressive (3386782235540547678) -->
+ <skip />
+ <!-- no translation found for bigram_prediction (1084449187723948550) -->
+ <skip />
+ <!-- no translation found for bigram_prediction_summary (3896362682751109677) -->
+ <skip />
+ <!-- no translation found for gesture_input (826951152254563827) -->
+ <skip />
+ <!-- no translation found for gesture_input_summary (9180350639305731231) -->
+ <skip />
+ <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text (4443240334739381053) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text_summary (4472696213996203533) -->
+ <skip />
+ <!-- no translation found for added_word (8993883354622484372) -->
+ <skip />
+ <string name="label_go_key" msgid="1635148082137219148">"Оди"</string>
+ <string name="label_next_key" msgid="362972844525672568">"Следно"</string>
+ <string name="label_previous_key" msgid="1211868118071386787">"Претходно"</string>
+ <string name="label_done_key" msgid="2441578748772529288">"Готово"</string>
+ <string name="label_send_key" msgid="2815056534433717444">"Испрати"</string>
+ <!-- no translation found for label_pause_key (181098308428035340) -->
+ <skip />
+ <!-- no translation found for label_wait_key (6402152600878093134) -->
+ <skip />
+ <!-- no translation found for spoken_use_headphones (896961781287283493) -->
+ <skip />
+ <!-- no translation found for spoken_current_text_is (2485723011272583845) -->
+ <skip />
+ <!-- no translation found for spoken_no_text_entered (7479685225597344496) -->
+ <skip />
+ <!-- no translation found for spoken_description_unknown (3197434010402179157) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift (244197883292549308) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift_shifted (1681877323344195035) -->
+ <skip />
+ <!-- no translation found for spoken_description_caps_lock (3276478269526304432) -->
+ <skip />
+ <!-- no translation found for spoken_description_delete (8740376944276199801) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_symbol (5486340107500448969) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_alpha (23129338819771807) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_numeric (591752092685161732) -->
+ <skip />
+ <!-- no translation found for spoken_description_settings (4627462689603838099) -->
+ <skip />
+ <!-- no translation found for spoken_description_tab (2667716002663482248) -->
+ <skip />
+ <!-- no translation found for spoken_description_space (2582521050049860859) -->
+ <skip />
+ <!-- no translation found for spoken_description_mic (615536748882611950) -->
+ <skip />
+ <!-- no translation found for spoken_description_smiley (2256309826200113918) -->
+ <skip />
+ <!-- no translation found for spoken_description_return (8178083177238315647) -->
+ <skip />
+ <!-- no translation found for spoken_description_search (1247236163755920808) -->
+ <skip />
+ <!-- no translation found for spoken_description_dot (40711082435231673) -->
+ <skip />
+ <!-- no translation found for spoken_description_language_switch (5507091328222331316) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_next (8636078276664150324) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_previous (800872415009336208) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_on (5700440798609574589) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_locked (593175803181701830) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_off (657219998449174808) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_symbol (7183343879909747642) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_alpha (3528307674390156956) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone (6520207943132026264) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_hidden (8718927835531429807) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_mode (4729081055438508321) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date (3137520166817128102) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date_time (339593358488851072) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_email (6216248078128294262) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_im (1137405089766557048) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_number (7991623440699957069) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_phone (6851627527401433229) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_text (6479436687899701619) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_time (4381856885582143277) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_url (1519819835514911218) -->
+ <skip />
+ <!-- no translation found for voice_input (3583258583521397548) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_symbols_keyboard (7203213240786084067) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_off (3745699748218082014) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_main_keyboard (6586544292900314339) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_symbols_keyboard (5233725927281932391) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_off (63875609591897607) -->
+ <skip />
+ <!-- no translation found for configure_input_method (373356270290742459) -->
+ <skip />
+ <!-- no translation found for language_selection_title (1651299598555326750) -->
+ <skip />
+ <!-- no translation found for send_feedback (1780431884109392046) -->
+ <skip />
+ <!-- no translation found for select_language (3693815588777926848) -->
+ <skip />
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
+ <!-- no translation found for has_dictionary (6071847973466625007) -->
+ <skip />
+ <!-- no translation found for prefs_enable_log (6620424505072963557) -->
+ <skip />
+ <!-- no translation found for prefs_description_log (7525225584555429211) -->
+ <skip />
+ <!-- no translation found for keyboard_layout (8451164783510487501) -->
+ <skip />
+ <!-- no translation found for subtype_en_GB (88170601942311355) -->
+ <skip />
+ <!-- no translation found for subtype_en_US (6160452336634534239) -->
+ <skip />
+ <!-- no translation found for subtype_es_US (5583145191430180200) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_GB (2179097748724725906) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_US (1362581347576714579) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_es_US (6261791057007890189) -->
+ <skip />
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwertz (1177848172397202890) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_azerty (8721460968141187394) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_dvorak (3122976737669823935) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_colemak (4205992994906097244) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_pcqwerty (8840928374394180189) -->
+ <skip />
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
+ <!-- no translation found for custom_input_style_note_message (8826731320846363423) -->
+ <skip />
+ <!-- no translation found for enable (5031294444630523247) -->
+ <skip />
+ <!-- no translation found for not_now (6172462888202790482) -->
+ <skip />
+ <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
+ <skip />
+ <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
+ <skip />
+ <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_vibration_duration_settings (7918341459947439226) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_sound_volume_settings (6027007337036891623) -->
+ <skip />
+ <!-- no translation found for prefs_read_external_dictionary (2588931418575013067) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_no_files_message (4947420942224623792) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_multiple_files_title (7637749044265808628) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_confirm_install_message (6898610163768980870) -->
+ <skip />
+ <!-- no translation found for error (8940763624668513648) -->
+ <skip />
+ <!-- no translation found for button_default (3988017840431881491) -->
+ <skip />
+ <!-- no translation found for setup_welcome_title (6112821709832031715) -->
+ <skip />
+ <!-- no translation found for setup_welcome_additional_description (8150252008545768953) -->
+ <skip />
+ <!-- no translation found for setup_start_action (8936036460897347708) -->
+ <skip />
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <!-- no translation found for setup_steps_title (6400373034871816182) -->
+ <skip />
+ <!-- no translation found for setup_step1_title (3147967630253462315) -->
+ <skip />
+ <!-- no translation found for setup_step1_instruction (2578631936624637241) -->
+ <skip />
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <!-- no translation found for setup_step2_title (6860725447906690594) -->
+ <skip />
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <!-- no translation found for setup_step3_title (3154757183631490281) -->
+ <skip />
+ <!-- no translation found for setup_step3_instruction (8025981829605426000) -->
+ <skip />
+ <!-- no translation found for setup_step3_action (600879797256942259) -->
+ <skip />
+ <!-- no translation found for setup_finish_action (276559243409465389) -->
+ <skip />
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
+ <!-- no translation found for app_name (6320102637491234792) -->
+ <skip />
+ <!-- no translation found for dictionary_provider_name (3027315045397363079) -->
+ <skip />
+ <!-- no translation found for dictionary_service_name (6237472350693511448) -->
+ <skip />
+ <!-- no translation found for download_description (6014835283119198591) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_title (8091417676045693313) -->
+ <skip />
+ <!-- no translation found for dictionary_install_over_metered_network_prompt (3587517870006332980) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_summary (5305694987799824349) -->
+ <skip />
+ <!-- no translation found for user_dictionaries (3582332055892252845) -->
+ <skip />
+ <!-- no translation found for default_user_dict_pref_name (1625055720489280530) -->
+ <skip />
+ <!-- no translation found for dictionary_available (4728975345815214218) -->
+ <skip />
+ <!-- no translation found for dictionary_downloading (2982650524622620983) -->
+ <skip />
+ <!-- no translation found for dictionary_installed (8081558343559342962) -->
+ <skip />
+ <!-- no translation found for dictionary_disabled (8950383219564621762) -->
+ <skip />
+ <!-- no translation found for cannot_connect_to_dict_service (9216933695765732398) -->
+ <skip />
+ <!-- no translation found for no_dictionaries_available (8039920716566132611) -->
+ <skip />
+ <!-- no translation found for check_for_updates_now (8087688440916388581) -->
+ <skip />
+ <!-- no translation found for last_update (730467549913588780) -->
+ <skip />
+ <!-- no translation found for message_updating (4457761393932375219) -->
+ <skip />
+ <!-- no translation found for message_loading (8689096636874758814) -->
+ <skip />
+ <!-- no translation found for main_dict_description (3072821352793492143) -->
+ <skip />
+ <!-- no translation found for cancel (6830980399865683324) -->
+ <skip />
+ <!-- no translation found for install_dict (180852772562189365) -->
+ <skip />
+ <!-- no translation found for cancel_download_dict (7843340278507019303) -->
+ <skip />
+ <!-- no translation found for delete_dict (756853268088330054) -->
+ <skip />
+ <!-- no translation found for should_download_over_metered_prompt (2878629598667658845) -->
+ <skip />
+ <!-- no translation found for download_over_metered (1643065851159409546) -->
+ <skip />
+ <!-- no translation found for do_not_download_over_metered (2176209579313941583) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_title (6514288591959117288) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_description (1075194169443163487) -->
+ <skip />
+ <!-- no translation found for toast_downloading_suggestions (1313027353588566660) -->
+ <skip />
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
+</resources>
diff --git a/java/res/values-mn/strings.xml b/java/res/values-mn/strings.xml
new file mode 100644
index 000000000..186ecb7a4
--- /dev/null
+++ b/java/res/values-mn/strings.xml
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2008, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for aosp_android_keyboard_ime_name (8250992613616792321) -->
+ <skip />
+ <!-- no translation found for aosp_android_keyboard_ime_settings (423615877174850267) -->
+ <skip />
+ <!-- no translation found for aosp_spell_checker_service_name (511950477199948048) -->
+ <skip />
+ <!-- no translation found for aosp_android_spell_checker_service_settings (2970535894327288421) -->
+ <skip />
+ <!-- no translation found for english_ime_input_options (3909945612939668554) -->
+ <skip />
+ <!-- no translation found for english_ime_research_log (8492602295696577851) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
+ <skip />
+ <!-- no translation found for use_contacts_for_spellchecking_option_summary (8754413382543307713) -->
+ <skip />
+ <!-- no translation found for vibrate_on_keypress (5258079494276955460) -->
+ <skip />
+ <!-- no translation found for sound_on_keypress (6093592297198243644) -->
+ <skip />
+ <!-- no translation found for popup_on_keypress (123894815723512944) -->
+ <skip />
+ <!-- no translation found for general_category (1859088467017573195) -->
+ <skip />
+ <!-- no translation found for correction_category (2236750915056607613) -->
+ <skip />
+ <!-- no translation found for gesture_typing_category (497263612130532630) -->
+ <skip />
+ <!-- no translation found for misc_category (6894192814868233453) -->
+ <skip />
+ <!-- no translation found for advanced_settings (362895144495591463) -->
+ <skip />
+ <!-- no translation found for advanced_settings_summary (4487980456152830271) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list (4533689960308565519) -->
+ <skip />
+ <!-- no translation found for include_other_imes_in_language_switch_list_summary (840637129103317635) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key (5915478828318774384) -->
+ <skip />
+ <!-- no translation found for show_language_switch_key_summary (7343403647474265713) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview (6604262359510068370) -->
+ <skip />
+ <!-- no translation found for sliding_key_input_preview_summary (6340524345729093886) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_delay (6213164897443068248) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_no_delay (2096123151571458064) -->
+ <skip />
+ <!-- no translation found for key_preview_popup_dismiss_default_delay (2166964333903906734) -->
+ <skip />
+ <!-- no translation found for abbreviation_unit_milliseconds (8700286094028323363) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict (4435317977804180815) -->
+ <skip />
+ <!-- no translation found for use_contacts_dict_summary (6599983334507879959) -->
+ <skip />
+ <!-- no translation found for use_double_space_period (8781529969425082860) -->
+ <skip />
+ <!-- no translation found for use_double_space_period_summary (6532892187247952799) -->
+ <skip />
+ <!-- no translation found for auto_cap (1719746674854628252) -->
+ <skip />
+ <!-- no translation found for auto_cap_summary (7934452761022946874) -->
+ <skip />
+ <!-- no translation found for configure_dictionaries_title (4238652338556902049) -->
+ <skip />
+ <!-- no translation found for main_dictionary (4798763781818361168) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions (8026799663445531637) -->
+ <skip />
+ <!-- no translation found for prefs_show_suggestions_summary (1583132279498502825) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_name (3219916594067551303) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_show_only_portrait_name (3859783767435239118) -->
+ <skip />
+ <!-- no translation found for prefs_suggestion_visibility_hide_name (6309143926422234673) -->
+ <skip />
+ <!-- no translation found for auto_correction (7630720885194996950) -->
+ <skip />
+ <!-- no translation found for auto_correction_summary (5625751551134658006) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_off (8470882665417944026) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_modest (8788366690620799097) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_aggeressive (3524029103734923819) -->
+ <skip />
+ <!-- no translation found for auto_correction_threshold_mode_very_aggeressive (3386782235540547678) -->
+ <skip />
+ <!-- no translation found for bigram_prediction (1084449187723948550) -->
+ <skip />
+ <!-- no translation found for bigram_prediction_summary (3896362682751109677) -->
+ <skip />
+ <!-- no translation found for gesture_input (826951152254563827) -->
+ <skip />
+ <!-- no translation found for gesture_input_summary (9180350639305731231) -->
+ <skip />
+ <!-- no translation found for gesture_preview_trail (3802333369335722221) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text (4443240334739381053) -->
+ <skip />
+ <!-- no translation found for gesture_floating_preview_text_summary (4472696213996203533) -->
+ <skip />
+ <!-- no translation found for added_word (8993883354622484372) -->
+ <skip />
+ <string name="label_go_key" msgid="1635148082137219148">"Очих"</string>
+ <string name="label_next_key" msgid="362972844525672568">"Дараагийн"</string>
+ <string name="label_previous_key" msgid="1211868118071386787">"Өмнөх"</string>
+ <string name="label_done_key" msgid="2441578748772529288">"Хийгдлээ"</string>
+ <string name="label_send_key" msgid="2815056534433717444">"Илгээх"</string>
+ <!-- no translation found for label_pause_key (181098308428035340) -->
+ <skip />
+ <!-- no translation found for label_wait_key (6402152600878093134) -->
+ <skip />
+ <!-- no translation found for spoken_use_headphones (896961781287283493) -->
+ <skip />
+ <!-- no translation found for spoken_current_text_is (2485723011272583845) -->
+ <skip />
+ <!-- no translation found for spoken_no_text_entered (7479685225597344496) -->
+ <skip />
+ <!-- no translation found for spoken_description_unknown (3197434010402179157) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift (244197883292549308) -->
+ <skip />
+ <!-- no translation found for spoken_description_shift_shifted (1681877323344195035) -->
+ <skip />
+ <!-- no translation found for spoken_description_caps_lock (3276478269526304432) -->
+ <skip />
+ <!-- no translation found for spoken_description_delete (8740376944276199801) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_symbol (5486340107500448969) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_alpha (23129338819771807) -->
+ <skip />
+ <!-- no translation found for spoken_description_to_numeric (591752092685161732) -->
+ <skip />
+ <!-- no translation found for spoken_description_settings (4627462689603838099) -->
+ <skip />
+ <!-- no translation found for spoken_description_tab (2667716002663482248) -->
+ <skip />
+ <!-- no translation found for spoken_description_space (2582521050049860859) -->
+ <skip />
+ <!-- no translation found for spoken_description_mic (615536748882611950) -->
+ <skip />
+ <!-- no translation found for spoken_description_smiley (2256309826200113918) -->
+ <skip />
+ <!-- no translation found for spoken_description_return (8178083177238315647) -->
+ <skip />
+ <!-- no translation found for spoken_description_search (1247236163755920808) -->
+ <skip />
+ <!-- no translation found for spoken_description_dot (40711082435231673) -->
+ <skip />
+ <!-- no translation found for spoken_description_language_switch (5507091328222331316) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_next (8636078276664150324) -->
+ <skip />
+ <!-- no translation found for spoken_description_action_previous (800872415009336208) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_on (5700440798609574589) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_locked (593175803181701830) -->
+ <skip />
+ <!-- no translation found for spoken_description_shiftmode_off (657219998449174808) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_symbol (7183343879909747642) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_alpha (3528307674390156956) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone (6520207943132026264) -->
+ <skip />
+ <!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_hidden (8718927835531429807) -->
+ <skip />
+ <!-- no translation found for announce_keyboard_mode (4729081055438508321) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date (3137520166817128102) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_date_time (339593358488851072) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_email (6216248078128294262) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_im (1137405089766557048) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_number (7991623440699957069) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_phone (6851627527401433229) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_text (6479436687899701619) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_time (4381856885582143277) -->
+ <skip />
+ <!-- no translation found for keyboard_mode_url (1519819835514911218) -->
+ <skip />
+ <!-- no translation found for voice_input (3583258583521397548) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_symbols_keyboard (7203213240786084067) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_off (3745699748218082014) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_main_keyboard (6586544292900314339) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_symbols_keyboard (5233725927281932391) -->
+ <skip />
+ <!-- no translation found for voice_input_modes_summary_off (63875609591897607) -->
+ <skip />
+ <!-- no translation found for configure_input_method (373356270290742459) -->
+ <skip />
+ <!-- no translation found for language_selection_title (1651299598555326750) -->
+ <skip />
+ <!-- no translation found for send_feedback (1780431884109392046) -->
+ <skip />
+ <!-- no translation found for select_language (3693815588777926848) -->
+ <skip />
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
+ <!-- no translation found for has_dictionary (6071847973466625007) -->
+ <skip />
+ <!-- no translation found for prefs_enable_log (6620424505072963557) -->
+ <skip />
+ <!-- no translation found for prefs_description_log (7525225584555429211) -->
+ <skip />
+ <!-- no translation found for keyboard_layout (8451164783510487501) -->
+ <skip />
+ <!-- no translation found for subtype_en_GB (88170601942311355) -->
+ <skip />
+ <!-- no translation found for subtype_en_US (6160452336634534239) -->
+ <skip />
+ <!-- no translation found for subtype_es_US (5583145191430180200) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_GB (2179097748724725906) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_en_US (1362581347576714579) -->
+ <skip />
+ <!-- no translation found for subtype_with_layout_es_US (6261791057007890189) -->
+ <skip />
+ <!-- no translation found for subtype_no_language (141420857808801746) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_qwertz (1177848172397202890) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_azerty (8721460968141187394) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_dvorak (3122976737669823935) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_colemak (4205992994906097244) -->
+ <skip />
+ <!-- no translation found for subtype_no_language_pcqwerty (8840928374394180189) -->
+ <skip />
+ <!-- no translation found for custom_input_styles_title (8429952441821251512) -->
+ <skip />
+ <!-- no translation found for add_style (6163126614514489951) -->
+ <skip />
+ <!-- no translation found for add (8299699805688017798) -->
+ <skip />
+ <!-- no translation found for remove (4486081658752944606) -->
+ <skip />
+ <!-- no translation found for save (7646738597196767214) -->
+ <skip />
+ <!-- no translation found for subtype_locale (8576443440738143764) -->
+ <skip />
+ <!-- no translation found for keyboard_layout_set (4309233698194565609) -->
+ <skip />
+ <!-- no translation found for custom_input_style_note_message (8826731320846363423) -->
+ <skip />
+ <!-- no translation found for enable (5031294444630523247) -->
+ <skip />
+ <!-- no translation found for not_now (6172462888202790482) -->
+ <skip />
+ <!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
+ <skip />
+ <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
+ <skip />
+ <!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_vibration_duration_settings (7918341459947439226) -->
+ <skip />
+ <!-- no translation found for prefs_keypress_sound_volume_settings (6027007337036891623) -->
+ <skip />
+ <!-- no translation found for prefs_read_external_dictionary (2588931418575013067) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_no_files_message (4947420942224623792) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_multiple_files_title (7637749044265808628) -->
+ <skip />
+ <!-- no translation found for read_external_dictionary_confirm_install_message (6898610163768980870) -->
+ <skip />
+ <!-- no translation found for error (8940763624668513648) -->
+ <skip />
+ <!-- no translation found for button_default (3988017840431881491) -->
+ <skip />
+ <!-- no translation found for setup_welcome_title (6112821709832031715) -->
+ <skip />
+ <!-- no translation found for setup_welcome_additional_description (8150252008545768953) -->
+ <skip />
+ <!-- no translation found for setup_start_action (8936036460897347708) -->
+ <skip />
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <!-- no translation found for setup_steps_title (6400373034871816182) -->
+ <skip />
+ <!-- no translation found for setup_step1_title (3147967630253462315) -->
+ <skip />
+ <!-- no translation found for setup_step1_instruction (2578631936624637241) -->
+ <skip />
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <!-- no translation found for setup_step2_title (6860725447906690594) -->
+ <skip />
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <!-- no translation found for setup_step3_title (3154757183631490281) -->
+ <skip />
+ <!-- no translation found for setup_step3_instruction (8025981829605426000) -->
+ <skip />
+ <!-- no translation found for setup_step3_action (600879797256942259) -->
+ <skip />
+ <!-- no translation found for setup_finish_action (276559243409465389) -->
+ <skip />
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
+ <!-- no translation found for app_name (6320102637491234792) -->
+ <skip />
+ <!-- no translation found for dictionary_provider_name (3027315045397363079) -->
+ <skip />
+ <!-- no translation found for dictionary_service_name (6237472350693511448) -->
+ <skip />
+ <!-- no translation found for download_description (6014835283119198591) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_title (8091417676045693313) -->
+ <skip />
+ <!-- no translation found for dictionary_install_over_metered_network_prompt (3587517870006332980) -->
+ <skip />
+ <!-- no translation found for dictionary_settings_summary (5305694987799824349) -->
+ <skip />
+ <!-- no translation found for user_dictionaries (3582332055892252845) -->
+ <skip />
+ <!-- no translation found for default_user_dict_pref_name (1625055720489280530) -->
+ <skip />
+ <!-- no translation found for dictionary_available (4728975345815214218) -->
+ <skip />
+ <!-- no translation found for dictionary_downloading (2982650524622620983) -->
+ <skip />
+ <!-- no translation found for dictionary_installed (8081558343559342962) -->
+ <skip />
+ <!-- no translation found for dictionary_disabled (8950383219564621762) -->
+ <skip />
+ <!-- no translation found for cannot_connect_to_dict_service (9216933695765732398) -->
+ <skip />
+ <!-- no translation found for no_dictionaries_available (8039920716566132611) -->
+ <skip />
+ <!-- no translation found for check_for_updates_now (8087688440916388581) -->
+ <skip />
+ <!-- no translation found for last_update (730467549913588780) -->
+ <skip />
+ <!-- no translation found for message_updating (4457761393932375219) -->
+ <skip />
+ <!-- no translation found for message_loading (8689096636874758814) -->
+ <skip />
+ <!-- no translation found for main_dict_description (3072821352793492143) -->
+ <skip />
+ <!-- no translation found for cancel (6830980399865683324) -->
+ <skip />
+ <!-- no translation found for install_dict (180852772562189365) -->
+ <skip />
+ <!-- no translation found for cancel_download_dict (7843340278507019303) -->
+ <skip />
+ <!-- no translation found for delete_dict (756853268088330054) -->
+ <skip />
+ <!-- no translation found for should_download_over_metered_prompt (2878629598667658845) -->
+ <skip />
+ <!-- no translation found for download_over_metered (1643065851159409546) -->
+ <skip />
+ <!-- no translation found for do_not_download_over_metered (2176209579313941583) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_title (6514288591959117288) -->
+ <skip />
+ <!-- no translation found for dict_available_notification_description (1075194169443163487) -->
+ <skip />
+ <!-- no translation found for toast_downloading_suggestions (1313027353588566660) -->
+ <skip />
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
+</resources>
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 67fdea97c..80a8983d1 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Betul-betul pasang fail ini untuk <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Berlaku ralat"</string>
<string name="button_default" msgid="3988017840431881491">"Lalai"</string>
- <string name="language_settings" msgid="1671153053201809031">"Bahasa &amp; input"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Pilih kaedah input"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Selamat datang ke <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"dengan Taipan Gerak Isyarat"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Bermula"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Menyediakan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Dayakan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Sila semak \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" dlm ttpn Bhs &amp; input. Ini mbnarkn apl djlnkn pd pranti anda."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Beralih ke <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Tahniah, anda sudah sedia!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Kini anda boleh menaip dlm semua apl kegemaran anda dgn <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurasikan bahasa tambahan"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Selesai"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Pembekal Kamus"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Pembekal Kamus"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Perkhidmatan Kamus"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Kamus tersedia untuk <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Tekan untuk mengulas dan memuat turun"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Memuat turun: cadangan untuk <xliff:g id="LANGUAGE">%1$s</xliff:g> akan sedia tidak lama lagi."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index caa98cc6c..834130e08 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Vil du virkelig installere denne filen for <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Det oppsto en feil"</string>
<string name="button_default" msgid="3988017840431881491">"Standard"</string>
- <string name="language_settings" msgid="1671153053201809031">"Språk og inndata"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Velg inndatametode"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Velkommen til <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"med Ordføring"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Startveiledning"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Konfigurerer <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Aktiver <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Sjekk <xliff:g id="APPLICATION_NAME">%s</xliff:g> i Språk og inndata-innstillingene dine. Dette tillater appen å kjøre på enheten."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Bytt til <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gratulerer, du er klar!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nå kan du skrive inn alle favorittappene dine med <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurer flere språk"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Fullført"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Ordlisteleverandør"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Ordlisteleverandør"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Ordlistetjeneste"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"En ordliste er tilgjengelig for <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Trykk for å se gjennom og laste ned"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Laster ned: forslag blir snart tilgjengelige for <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 548043086..ac78a887f 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Wilt u dit bestand voor <xliff:g id="LOCALE_NAME">%s</xliff:g> echt installeren?"</string>
<string name="error" msgid="8940763624668513648">"Er is een fout opgetreden"</string>
<string name="button_default" msgid="3988017840431881491">"Standaard"</string>
- <string name="language_settings" msgid="1671153053201809031">"Taal en invoer"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Invoermethode selecteren"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Welkom bij <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"met Invoer met bewegingen"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Aan de slag"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> instellen"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> inschakelen"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Vink \'<xliff:g id="APPLICATION_NAME">%s</xliff:g>\' aan in \'Instellingen voor taal en invoer\'. De app kan dan worden uitgevoerd op uw apparaat."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Overschakelen naar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gefeliciteerd, u kunt nu aan de slag."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"U kunt nu in al uw favoriete apps typen met <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Extra talen configureren"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Voltooid"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Woordenboekleverancier"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Woordenboekleverancier"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Woordenboekservice"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Er is een woordenboek beschikbaar voor het <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Druk om te controleren en te downloaden"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Downloaden: suggesties voor het <xliff:g id="LANGUAGE">%1$s</xliff:g> zijn straks beschikbaar."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index f971e28e8..04d8b97cd 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Czy na pewno zainstalować ten plik dla języka: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Wystąpił błąd"</string>
<string name="button_default" msgid="3988017840431881491">"Domyślne"</string>
- <string name="language_settings" msgid="1671153053201809031">"Język, klawiatura, głos"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Wybierz metodę wprowadzania"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Witamy w aplikacji <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"z pisaniem gestami"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Rozpocznij"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Konfigurowanie aplikacji <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Włącz aplikację <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Zaznacz aplikację „<xliff:g id="APPLICATION_NAME">%s</xliff:g>” w ustawieniach Język, klawiatura i głos. Umożliwi to jej uruchamianie na urządzeniu."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Przełącz się na aplikację <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Gratulacje! Wszystko gotowe."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Teraz możesz pisać we wszystkich swoich ulubionych aplikacjach, używając aplikacji <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Skonfiguruj dodatkowe języki"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Zakończone"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Dostawca słownika"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Dostawca słownika"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Usługa słownika"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Dostępny jest słownik <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Naciśnij, by sprawdzić i pobrać"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Pobieranie – wkrótce będą dostępne sugestie w tym języku: <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 479ff94d9..a7af0d669 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Instalar mesmo este ficheiro para <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Ocorreu um erro"</string>
<string name="button_default" msgid="3988017840431881491">"Predefinido"</string>
- <string name="language_settings" msgid="1671153053201809031">"Idioma e entrada de som"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Escolher o método de entrada"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Bem-vindo a <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"com a Escrita com Gestos"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Introdução"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Passo seguinte"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Ativar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Marque \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" nas definições de Idioma e introdução para autorizar a execução no dispositivo."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Ativar nas Definições"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Mudar para <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Em seguida, selecione \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" como o seu método de introdução de texto ativo."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Mudar métodos de introdução"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Parabéns, está pronto para começar!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Agora pode escrever em todas as suas aplicações favoritas com <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configurar idiomas adicionais"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Concluído"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Mostrar ícone assist. config."</string>
<string name="app_name" msgid="6320102637491234792">"Fornecedor de Dicionário"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Fornecedor de Dicionário"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Serviço de Dicionário"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Está disponível um dicionário para <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Prima para consultar e transferir"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"A transferir: as sugestões para <xliff:g id="LANGUAGE">%1$s</xliff:g> estarão prontas em breve."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index dc01c5b99..2b6d4f921 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Deseja instalar este arquivo para <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Ocorreu um erro"</string>
<string name="button_default" msgid="3988017840431881491">"Padrão"</string>
- <string name="language_settings" msgid="1671153053201809031">"Idioma e entrada"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Selecione o método de entrada"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Bem-vindo ao <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"com entrada por gestos"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Começar"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Próxima etapa"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurando o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Habilite o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Marque \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" em \"Configurações de idioma e entrada\" para autorizar a execução."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Ativar em \"Configurações\""</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Abra o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Em seguida, selecione \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" como o método de entrada de texto ativo."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Alternar métodos de entrada"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Parabéns, você terminou!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Agora você pode digitar em todos os seus aplicativos favoritos com o <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configurar idiomas adicionais"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Concluído"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Mostrar ícone assist. config."</string>
<string name="app_name" msgid="6320102637491234792">"Provedor de dicionário"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Provedor de dicionário"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Serviço de dicionário"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Há um dicionário disponível para <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pressione para consultar e fazer o download"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Download em andamento: as sugestões para <xliff:g id="LANGUAGE">%1$s</xliff:g> estarão prontas em breve."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 15cd3274a..36f1651b7 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -310,9 +310,37 @@
<skip />
<!-- no translation found for button_default (3988017840431881491) -->
<skip />
- <!-- no translation found for language_settings (1671153053201809031) -->
+ <!-- no translation found for setup_welcome_title (6112821709832031715) -->
<skip />
- <!-- no translation found for select_input_method (4301602374609275003) -->
+ <!-- no translation found for setup_welcome_additional_description (8150252008545768953) -->
+ <skip />
+ <!-- no translation found for setup_start_action (8936036460897347708) -->
+ <skip />
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <!-- no translation found for setup_steps_title (6400373034871816182) -->
+ <skip />
+ <!-- no translation found for setup_step1_title (3147967630253462315) -->
+ <skip />
+ <!-- no translation found for setup_step1_instruction (2578631936624637241) -->
+ <skip />
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <!-- no translation found for setup_step2_title (6860725447906690594) -->
+ <skip />
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <!-- no translation found for setup_step3_title (3154757183631490281) -->
+ <skip />
+ <!-- no translation found for setup_step3_instruction (8025981829605426000) -->
+ <skip />
+ <!-- no translation found for setup_step3_action (600879797256942259) -->
+ <skip />
+ <!-- no translation found for setup_finish_action (276559243409465389) -->
+ <skip />
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
<skip />
<!-- no translation found for app_name (6320102637491234792) -->
<skip />
@@ -373,4 +401,6 @@
<skip />
<!-- no translation found for toast_downloading_suggestions (1313027353588566660) -->
<skip />
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 40656d155..273013342 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Doriți să instalați acest fișier pentru <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"A apărut o eroare"</string>
<string name="button_default" msgid="3988017840431881491">"Prestabilit"</string>
- <string name="language_settings" msgid="1671153053201809031">"Limbă și introducere de text"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Alegeți metoda de introducere de text"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Bun venit la <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"cu Tastarea gestuală"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Începeți"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Configurarea <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Activați <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Bifați „<xliff:g id="APPLICATION_NAME">%s</xliff:g>” din setările Limbă și introducere de text. Astfel, o autorizați să ruleze pe dispozitiv."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Comutați la <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Felicitări, sunteți gata!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Acum, puteți introduce text în toate aplicațiile preferate, utilizând <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Configurați limbi suplimentare"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Finalizat"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Furnizor dicționar"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Furnizor dicționar"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Serviciu dicționar"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Este disponibil un dicționar pentru <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Apăsați pentru examinare și descărcare"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Se descarcă: sugestiile pentru <xliff:g id="LANGUAGE">%1$s</xliff:g> vor fi gata în curând."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index 7bf10aed5..2104edd24 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Установить этот файл для следующего языка: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Ошибка"</string>
<string name="button_default" msgid="3988017840431881491">"По умолчанию"</string>
- <string name="language_settings" msgid="1671153053201809031">"Язык и ввод"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Выберите способ ввода"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Представляем <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"с непрерывным вводом"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Начало работы"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>: настройка"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Включите <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Установите флажок <xliff:g id="APPLICATION_NAME">%s</xliff:g> в меню \"Язык и ввод\", чтобы использовать этот способ ввода на устройстве."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Переключитесь на <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Настройте дополнительные языки."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Теперь вы можете использовать <xliff:g id="APPLICATION_NAME">%s</xliff:g> для набора текста."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Настроить дополнительные языки"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Готово"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Поставщик словарей"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Поставщик словарей"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Служба словарей"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Доступен словарь: <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Нажмите, чтобы просмотреть и загрузить"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Загрузка словаря: <xliff:g id="LANGUAGE">%1$s</xliff:g>…"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index b01e3254d..9d9a33752 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Chcete nainštalovať tento súbor pre jazyk <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Vyskytla sa chyba"</string>
<string name="button_default" msgid="3988017840431881491">"Predvolené"</string>
- <string name="language_settings" msgid="1671153053201809031">"Jazyk &amp; vstup"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Zvoliť metódu vstupu"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Vitajte v aplikácii <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"s funkciou Písanie gestami"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Začať"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Nastavenie aplikácie <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Povoľte aplikáciu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"V nastaveniach vstupu a jazyka začiarknite políčko <xliff:g id="APPLICATION_NAME">%s</xliff:g>. Týmto aplikácii povolíte spustenie v zariadení."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Prepnite na aplikáciu <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Blahoželáme, všetko je nastavené!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Pomocou aplikácie <xliff:g id="APPLICATION_NAME">%s</xliff:g> teraz môžete zadávať text vo všetkých obľúbených aplikáciách."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Nakonfigurujte ďalšie jazyky"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Hotovo"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Poskytovateľ slovníka"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Poskytovateľ slovníka"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Služba slovníka"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"K dispozícii je slovník pre jazyk <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Stlačením skontrolujete a prevezmete"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Preberanie: návrhy pre jazyk <xliff:g id="LANGUAGE">%1$s</xliff:g> budú čoskoro k dispozícii."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 9243b12a8..07475dfa5 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Zares želite namestiti to datoteko za jezik <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Prišlo je do napake"</string>
<string name="button_default" msgid="3988017840431881491">"Privzeto"</string>
- <string name="language_settings" msgid="1671153053201809031">"Jezik in vnos"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Izbira načina vnosa"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Pozdravljeni v aplikaciji <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"s pisanjem s kretnjami"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Začnite"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Nastavitev aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Omogočanje aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"V nastavitvah za jezik in vnos izberite aplikacijo »<xliff:g id="APPLICATION_NAME">%s</xliff:g>«. S tem ji omogočite izvajanje v napravi."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Preklop na aplikacijo <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Čestitamo, pripravljeni ste."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Zdaj lahko z aplikacijo <xliff:g id="APPLICATION_NAME">%s</xliff:g> tipkate v vseh svojih priljubljenih aplikacijah."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfiguracija dodatnih jezikov"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Končano"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Ponudnik slovarja"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Ponudnik slovarja"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Storitev slovarja"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Slovar je na voljo za jezik <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pritisnite za pregled in prenos"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Predlogi za prenos za jezik <xliff:g id="LANGUAGE">%1$s</xliff:g> bodo kmalu pripravljeni."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index cede67cb5..a9b2ddb59 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Желите ли стварно да инсталирате ову датотеку за <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Дошло је до грешке"</string>
<string name="button_default" msgid="3988017840431881491">"Подразумевано"</string>
- <string name="language_settings" msgid="1671153053201809031">"Језик и унос"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Избор метода уноса"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Добро дошли у апликацију <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"помоћу Куцања покретима"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Започнимо"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Подешавање апликације <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Омогућите апликацију <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Потврдите апликацију „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“ у Подешавањима језика и уноса. Тако јој одобравате покретање на уређају."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Пребаците на <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Честитамо, све је спремно!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Сада можете да куцате у свим омиљеним апликацијама помоћу апликације <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Конфигуриши додатне језике"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Завршено"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Добављач речника"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Добављач речника"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Услуга речника"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Речник је доступан за <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Притисните за преглед и преузимање"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Преузимање: Предлози за <xliff:g id="LANGUAGE">%1$s</xliff:g> ће ускоро бити спремни."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 8ac6c2cb0..e0c8f6aa0 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Vill du verkligen installera filen för <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Ett fel uppstod"</string>
<string name="button_default" msgid="3988017840431881491">"Standard"</string>
- <string name="language_settings" msgid="1671153053201809031">"Språk &amp; inmatning"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Välj inmatningsmetod"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Välkommen till <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"med svepskrivning"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Kom igång"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Konfigurera <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Aktivera <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Markera <xliff:g id="APPLICATION_NAME">%s</xliff:g> i inställningarna för språk och inmatning så att appen kan köras."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Byt till <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Grattis! Nu är det klart."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Nu kan du skriva i alla dina favoritappar med <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Konfigurera ytterligare språk"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Slutförda"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Dictionary Provider"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Dictionary Provider"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Ordlistetjänst"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"En ordlista är tillgänglig för <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Tryck om du vill granska och hämta"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Hämtar: förslag för <xliff:g id="LANGUAGE">%1$s</xliff:g> är snart klara."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 870260125..2fad7caba 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Isakinishe faili hii kwa <xliff:g id="LOCALE_NAME">%s</xliff:g> kweli?"</string>
<string name="error" msgid="8940763624668513648">"Kulikuwa na hitilafu"</string>
<string name="button_default" msgid="3988017840431881491">"Chaguo-msingi"</string>
- <string name="language_settings" msgid="1671153053201809031">"Lugha na uingizaji"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Chagua mbinu ya kuingiza data"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Karibu kwenye <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"Kwa Kuandika kwa ishara"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Anza kutumia"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Hatua inayofuata"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Inasanidi <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Washa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Tafadhali angalia \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" katika lugha yako na mipangilio ya kuingiza. Hii itaidhinisha ili iendeshwe kwenye kifaa chako."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Washa katika Mipangilio"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Badilisha kwenda <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Kisha, chagua \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" kama mbinu yako inayotumika ya kuingiza data ya maandishi."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Badilisha mbinu za kuingiza data"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Hongera, uko tayari!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Sasa unaweza kuchapa programu zako zote uzipendazo na <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Sanidi lugha za ziada"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Imemaliza"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Onyesha ikoni ya mlozi wa kusanidi"</string>
<string name="app_name" msgid="6320102637491234792">"Programu ya kamusi"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Programu ya kamusi"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Huduma ya Kamusi"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Kamusi ya <xliff:g id="LANGUAGE">%1$s</xliff:g> inapatikana"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Bonyeza ili kukagua na kupakua"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Inapakua: mapendekezo ya <xliff:g id="LANGUAGE">%1$s</xliff:g> yatakuwa tayari hivi karibuni."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-sw600dp-land/setup-dimens.xml b/java/res/values-sw600dp-land/setup-dimens.xml
index 9aea21423..e5051eac7 100644
--- a/java/res/values-sw600dp-land/setup-dimens.xml
+++ b/java/res/values-sw600dp-land/setup-dimens.xml
@@ -16,5 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<dimen name="setup_title_text_size">64sp</dimen>
+ <dimen name="setup_welcome_description_text_size">36sp</dimen>
<dimen name="setup_horizontal_padding">96dp</dimen>
</resources>
diff --git a/java/res/values-sw768dp-land/setup-dimens.xml b/java/res/values-sw768dp-land/setup-dimens.xml
index 0d2af17e3..34b7f429d 100644
--- a/java/res/values-sw768dp-land/setup-dimens.xml
+++ b/java/res/values-sw768dp-land/setup-dimens.xml
@@ -16,5 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<dimen name="setup_title_text_size">64sp</dimen>
+ <dimen name="setup_welcome_description_text_size">36sp</dimen>
<dimen name="setup_horizontal_padding">192dp</dimen>
</resources>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index b6a0d6680..1bb9fa126 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"ติดตั้งไฟล์นี้สำหรับ <xliff:g id="LOCALE_NAME">%s</xliff:g> จริงๆ หรือ"</string>
<string name="error" msgid="8940763624668513648">"เกิดข้อผิดพลาด"</string>
<string name="button_default" msgid="3988017840431881491">"ค่าเริ่มต้น"</string>
- <string name="language_settings" msgid="1671153053201809031">"ภาษาและการป้อนข้อมูล"</string>
- <string name="select_input_method" msgid="4301602374609275003">"เลือกวิธีการป้อนข้อมูล"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"ยินดีต้อนรับสู่ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"พร้อมการป้อนข้อมูลด้วยท่าทาง"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"เริ่มต้นใช้งาน"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"ขั้นตอนถัดไป"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"การตั้งค่า <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"เปิดใช้งาน <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"โปรดตรวจสอบ \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ในการตั้งค่าภาษาและการป้อนข้อมูลของคุณ ซึ่งจะอนุญาตให้แอปทำงานบนอุปกรณ์ของคุณ"</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"เปิดใช้งานในการตั้งค่า"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"สลับไปใช้ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"ถัดไป เลือก \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" เป็นวิธีการป้อนข้อความที่ใช้งานของคุณ"</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"สลับวิธีการป้อนข้อมูล"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"ยินดีด้วย คุณพร้อมใช้งานแล้ว!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"ตอนนี้คุณสามารถพิมพ์ข้อมูลลงในแอปที่ชื่นชอบทั้งหมดด้วย <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"กำหนดค่าภาษาเพิ่มเติม"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"เสร็จสิ้น"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"แสดงไอคอนวิซาร์ดการตั้งค่า"</string>
<string name="app_name" msgid="6320102637491234792">"ผู้ให้บริการพจนานุกรม"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"ผู้ให้บริการพจนานุกรม"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"บริการพจนานุกรม"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"มีพจนานุกรมให้ใช้งานในภาษา <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"กดเพื่อตรวจสอบและดาวน์โหลด"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"กำลังดาวน์โหลด: คำแนะนำสำหรับ <xliff:g id="LANGUAGE">%1$s</xliff:g> จะพร้อมใช้งานเร็วๆ นี้"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 2560fc7cc..7a12cddc9 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"I-install talaga ang file na ito para sa <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Nagkaroon ng error"</string>
<string name="button_default" msgid="3988017840431881491">"Default"</string>
- <string name="language_settings" msgid="1671153053201809031">"Wika at input"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Pumili ng pamamaraan ng pag-input"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Maligayang pagdating sa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"gamit ang Gesture na Pag-type"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Magsimula"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Susunod na hakbang"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Sine-set up ang <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Paganahin ang <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Paki-check ang \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" sa mga setting mo ng Wika at input. Mapapahintulutan itong tumakbo sa device mo."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"I-enable sa Mga Setting"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Lumipat sa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Susunod, piliin ang \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" bilang iyong aktibong pamamaraan ng pag-input ng teksto."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Magpalit ng pamamaraan ng pag-input"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Binabati kita, handa ka na!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Ngayon, mata-type mo na ang lahat ng paborito mong apps gamit ang <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Mag-configure ng mga karagdagang wika"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Tapos na"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Ipakita ang setup wizard icon"</string>
<string name="app_name" msgid="6320102637491234792">"Provider ng Diksyunaryo"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Provider ng Diksyunaryo"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Serbisyo ng Diksyunaryo"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"May available na diksyunaryo para sa <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Pindutin upang suriin at i-download"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Dina-download: malapit nang maging handa ang mga suhestiyon para sa <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index a0a6a673b..bae37a869 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"<xliff:g id="LOCALE_NAME">%s</xliff:g> için bu dosya gerçekten yüklensin mi?"</string>
<string name="error" msgid="8940763624668513648">"Bir hata oluştu"</string>
<string name="button_default" msgid="3988017840431881491">"Varsayılan"</string>
- <string name="language_settings" msgid="1671153053201809031">"Dil ve giriş"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Giriş yöntemini seçin"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> uygulamasına hoş geldiniz"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"Hareketle Yazmayı içerir"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Başlayın"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> uygulamasını kurma"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> uygulamasını etkinleştirin"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Lütfen \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" uygulamasını kendi Dil ve giriş ayarlarınızda işaretleyin. Bu işlem, uygulamaya cihazınızda çalışma yetkisi verecektir."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> uygulamasına geçin"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Tebrikler, bitirdiniz!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Artık <xliff:g id="APPLICATION_NAME">%s</xliff:g> ile tüm favori uygulamalarınızda yazabilirsiniz."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Ek dilleri yapılandırın"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Tamamlandı"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Sözlük Sağlayıcı"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Sözlük Sağlayıcı"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Sözlük Hizmeti"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g> için kullanılabilecek bir sözlük mevcut"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"İncelemek ve indirmek için basın"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"<xliff:g id="LANGUAGE">%1$s</xliff:g> için önerilerin indirilmesine kısa süre içinde başlanacak."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 36193aa78..2db320a3c 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Справді встановити цей файл для такої мови: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Сталася помилка"</string>
<string name="button_default" msgid="3988017840431881491">"За умовчанням"</string>
- <string name="language_settings" msgid="1671153053201809031">"Мова та введення"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Вибрати метод введення"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Вітаємо в програмі <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"з функцією Ввід жестами"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Розпочати"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Наступний крок"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Налаштування програми <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Увімкніть програму <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Виберіть \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" у налаштуваннях \"Мова та введення\", щоб дозволити запуск цієї програми на пристрої."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Увімкнути в налаштуваннях"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Перейдіть до програми <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Далі виберіть \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" активним методом введення тексту."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Змінити метод введення"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Вітаємо! Налаштування завершено."</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Тепер ви можете вводити текст у всіх своїх улюблених програмах за допомогою <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Налаштувати додаткові мови"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Завершено"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Показ. значок майстра встанов."</string>
<string name="app_name" msgid="6320102637491234792">"Постачальник словника"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Постачальник словника"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Служба словника"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Доступний словник для такої мови: <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Натисніть, щоб переглянути та завантажити"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Скоро почнеться завантаження пропозицій для такої мови: <xliff:g id="LANGUAGE">%1$s</xliff:g>."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-v17/setup-styles.xml b/java/res/values-v17/setup-styles.xml
new file mode 100644
index 000000000..8a9d66477
--- /dev/null
+++ b/java/res/values-v17/setup-styles.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="setupTitleStyle" parent="setupTitleStyleCommon">
+ <item name="android:layout_alignParentStart">true</item>
+ </style>
+ <style name="setupStepActionLabelStyle" parent="setupStepActionLabelStyleCommon">
+ <item name="android:paddingStart">12dp</item>
+ <item name="android:paddingEnd">24dp</item>
+ </style>
+</resources>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index d0626307b..f22427994 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Thực sự cài đặt tệp này cho <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"Đã xảy ra lỗi"</string>
<string name="button_default" msgid="3988017840431881491">"Mặc định"</string>
- <string name="language_settings" msgid="1671153053201809031">"Ngôn ngữ và phương thức nhập"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Chọn phương thức nhập"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Chào mừng bạn đến với <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"với Nhập bằng cử chỉ"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Bắt đầu"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"Thiết lập <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Bật <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Vui lòng kiểm tra \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" trong cài đặt ngôn ngữ và phương thức nhập của bạn. Điều này sẽ ủy quyền cho ứng dụng chạy trên thiết bị của bạn."</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"Chuyển sang <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"Xin chúc mừng, bạn đã cài đặt xong!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Bây giờ bạn có thể nhập vào tất cả ứng dụng yêu thích của mình với <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Định cấu hình các ngôn ngữ khác"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Đã xong"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"Nhà cung cấp từ điển"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Nhà cung cấp từ điển"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Dịch vụ từ điển"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Có sẵn từ điển cho <xliff:g id="LANGUAGE">%1$s</xliff:g>"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Nhấn để xem lại và tải xuống"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Tải xuống: đề xuất đối với <xliff:g id="LANGUAGE">%1$s</xliff:g> sẽ sớm sẵn sàng."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index d06557e6f..d5723bdf5 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -171,8 +171,27 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"确定要为<xliff:g id="LOCALE_NAME">%s</xliff:g>安装此文件吗?"</string>
<string name="error" msgid="8940763624668513648">"出现错误"</string>
<string name="button_default" msgid="3988017840431881491">"默认"</string>
- <string name="language_settings" msgid="1671153053201809031">"语言和输入法"</string>
- <string name="select_input_method" msgid="4301602374609275003">"选择输入法"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"欢迎使用“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"含滑行输入功能"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"开始"</string>
+ <!-- no translation found for setup_next_action (371821437915144603) -->
+ <skip />
+ <string name="setup_steps_title" msgid="6400373034871816182">"正在设置“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"启用“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"请在“语言和输入法”设置中选中“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”,授权这项应用在您的设备上运行。"</string>
+ <!-- no translation found for setup_step1_action (4366513534999901728) -->
+ <skip />
+ <string name="setup_step2_title" msgid="6860725447906690594">"切换到“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”。"</string>
+ <!-- no translation found for setup_step2_instruction (9141481964870023336) -->
+ <skip />
+ <!-- no translation found for setup_step2_action (1660330307159824337) -->
+ <skip />
+ <string name="setup_step3_title" msgid="3154757183631490281">"恭喜,您已完成了设置!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"现在,您可以在自己喜欢的所有应用中使用“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”输入内容。"</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"配置其他语言"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"完成"</string>
+ <!-- no translation found for show_setup_wizard_icon (2098097851427593496) -->
+ <skip />
<string name="app_name" msgid="6320102637491234792">"词典提供程序"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"词典提供程序"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"词典服务"</string>
@@ -203,4 +222,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"<xliff:g id="LANGUAGE">%1$s</xliff:g>词典可供下载"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"按此通知即可查看和下载"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"下载中:很快就能启用<xliff:g id="LANGUAGE">%1$s</xliff:g>的词典建议服务了!"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 26a26c748..3c0436e66 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"準備為<xliff:g id="LOCALE_NAME">%s</xliff:g>版本安裝這個檔案嗎?"</string>
<string name="error" msgid="8940763624668513648">"發生錯誤"</string>
<string name="button_default" msgid="3988017840431881491">"預設"</string>
- <string name="language_settings" msgid="1671153053201809031">"語言與輸入設定"</string>
- <string name="select_input_method" msgid="4301602374609275003">"選擇輸入法"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"歡迎使用 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"含手勢輸入功能"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"開始設定"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"下一步"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"正在設定 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"啟用 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"請在語言與輸入設定中勾選「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」,授權這項應用程式在您的裝置上執行。"</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"在設定中啟用"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"切換至 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"接著,請選取「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」做為目前使用的文字輸入法。"</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"切換輸入法"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"恭喜,您已完成設定!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"現在,您可以在自己喜愛的所有應用程式中使用 <xliff:g id="APPLICATION_NAME">%s</xliff:g> 輸入文字。"</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"設定其他語言"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"完成"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"顯示設定精靈圖示"</string>
<string name="app_name" msgid="6320102637491234792">"字典提供者"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"字典提供者"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"字典服務"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"支援<xliff:g id="LANGUAGE">%1$s</xliff:g>字典"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"按下即可查看並下載"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"下載中:即將啟用<xliff:g id="LANGUAGE">%1$s</xliff:g>字詞建議服務。"</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 146627fb8..34e4506e3 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -171,8 +171,22 @@
<string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Ufuna ukufakela i-<xliff:g id="LOCALE_NAME">%s</xliff:g> leli fayela ngokweqiniso?"</string>
<string name="error" msgid="8940763624668513648">"Kube nephutha"</string>
<string name="button_default" msgid="3988017840431881491">"Okuzenzakalelayo"</string>
- <string name="language_settings" msgid="1671153053201809031">"Ulimi nokokufakwayo"</string>
- <string name="select_input_method" msgid="4301602374609275003">"Khetha indlela yokufaka"</string>
+ <string name="setup_welcome_title" msgid="6112821709832031715">"Siyakwamukela ku-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_welcome_additional_description" msgid="8150252008545768953">"nokuthayipha ngokuthinta"</string>
+ <string name="setup_start_action" msgid="8936036460897347708">"Qalisa"</string>
+ <string name="setup_next_action" msgid="371821437915144603">"Isinyathelo esilandelayo"</string>
+ <string name="setup_steps_title" msgid="6400373034871816182">"Kusethwa i-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_title" msgid="3147967630253462315">"Nika amandla i-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="setup_step1_instruction" msgid="2578631936624637241">"Sicela uhlole i-\"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" ngolimi lwakho nezilungiselelo zokokufaka. Lokhu kuzoyigunyaza ukuthi isebenze kudivayisi yakho."</string>
+ <string name="setup_step1_action" msgid="4366513534999901728">"Nika amandla kuzilungiselelo"</string>
+ <string name="setup_step2_title" msgid="6860725447906690594">"Shintshela ku-<xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step2_instruction" msgid="9141481964870023336">"Okulandelayo, khetha i-\"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" njengendlela yakho yokufaka umbhalo osebenzayo."</string>
+ <string name="setup_step2_action" msgid="1660330307159824337">"Shintsha izindlela zokufaka"</string>
+ <string name="setup_step3_title" msgid="3154757183631490281">"Siyakuhalalisela, usumi ngomumo!"</string>
+ <string name="setup_step3_instruction" msgid="8025981829605426000">"Manje usungathayipha ngokufaka zonke izinhlelo zokusebenza eziyizintandokazi zakho nge-<xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
+ <string name="setup_step3_action" msgid="600879797256942259">"Lungiselela izilimi ezingeziwe"</string>
+ <string name="setup_finish_action" msgid="276559243409465389">"Iqedile"</string>
+ <string name="show_setup_wizard_icon" msgid="2098097851427593496">"Bonisa isithonjana sokusetha isilekeleli"</string>
<string name="app_name" msgid="6320102637491234792">"Umhlinzeki wesichazamazwi"</string>
<string name="dictionary_provider_name" msgid="3027315045397363079">"Umhlinzeki wesichazamazwi"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"Isevisi yesichazamazwi"</string>
@@ -203,4 +217,6 @@
<string name="dict_available_notification_title" msgid="6514288591959117288">"Isichazamazwi se-<xliff:g id="LANGUAGE">%1$s</xliff:g> siyatholakala"</string>
<string name="dict_available_notification_description" msgid="1075194169443163487">"Cindezela ukuze ubuyekeze uphinde ulande"</string>
<string name="toast_downloading_suggestions" msgid="1313027353588566660">"Ukulanda: iziphakamiso ze-<xliff:g id="LANGUAGE">%1$s</xliff:g> zizolunga maduze."</string>
+ <!-- no translation found for version_text (2715354215568469385) -->
+ <skip />
</resources>
diff --git a/java/res/values/config.xml b/java/res/values/config.xml
index d4fff620c..4e2936c5c 100644
--- a/java/res/values/config.xml
+++ b/java/res/values/config.xml
@@ -58,9 +58,11 @@
<bool name="config_sliding_key_input_enabled">true</bool>
<!-- Sliding key input preview parameters -->
<dimen name="config_sliding_key_input_preview_width">8.0dp</dimen>
- <!-- Percentages of sliding key input preview body and shadow, in proportion to the width. -->
- <integer name="config_sliding_key_input_preview_body_ratio">80</integer>
- <integer name="config_sliding_key_input_preview_shadow_ratio">50</integer>
+ <!-- Percentages of sliding key input preview body and shadow, in proportion to the width.
+ A negative value of the shadow ratio disables drawing shadow. -->
+ <!-- TODO: May use the shadow to alleviate rugged trail drawing. -->
+ <integer name="config_sliding_key_input_preview_body_ratio">100</integer>
+ <integer name="config_sliding_key_input_preview_shadow_ratio">-1</integer>
<integer name="config_key_repeat_start_timeout">400</integer>
<integer name="config_key_repeat_interval">50</integer>
<integer name="config_default_longpress_key_timeout">300</integer> <!-- milliseconds -->
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index db33ad812..e9b34aa12 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -103,9 +103,11 @@
<!-- Gesture preview trail parameters -->
<dimen name="gesture_preview_trail_start_width">10.0dp</dimen>
<dimen name="gesture_preview_trail_end_width">2.5dp</dimen>
- <!-- Percentages of gesture preview taril body and shadow, in proportion to the trail width. -->
- <integer name="gesture_preview_trail_body_ratio">80</integer>
- <integer name="gesture_preview_trail_shadow_ratio">50</integer>
+ <!-- Percentages of gesture preview taril body and shadow, in proportion to the trail width.
+ A negative value of the shadow ratio disables drawing shadow. -->
+ <!-- TODO: May use the shadow to alleviate rugged trail drawing. -->
+ <integer name="gesture_preview_trail_body_ratio">100</integer>
+ <integer name="gesture_preview_trail_shadow_ratio">-1</integer>
<!-- Gesture floating preview text parameters -->
<dimen name="gesture_floating_preview_text_size">24dp</dimen>
<dimen name="gesture_floating_preview_text_offset">73dp</dimen>
diff --git a/java/res/values/setup-dimens.xml b/java/res/values/setup-dimens.xml
index 007906dc0..dac544029 100644
--- a/java/res/values/setup-dimens.xml
+++ b/java/res/values/setup-dimens.xml
@@ -16,5 +16,23 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<dimen name="setup_title_text_size">46sp</dimen>
+ <dimen name="setup_welcome_description_text_size">26sp</dimen>
+ <dimen name="setup_step_bullet_text_size">22sp</dimen>
+ <dimen name="setup_step_indicator_height">24dp</dimen>
+ <dimen name="setup_step_title_text_size">22sp</dimen>
+ <dimen name="setup_step_instruction_text_size">14sp</dimen>
+ <dimen name="setup_step_action_text_size">18sp</dimen>
+ <dimen name="setup_vertical_padding">16dp</dimen>
<dimen name="setup_horizontal_padding">16dp</dimen>
+ <dimen name="setup_step_action_height">48dp</dimen>
+ <dimen name="setup_step_horizontal_padding">24dp</dimen>
+ <dimen name="setup_step_horizontal_padding_half">12dp</dimen>
+ <dimen name="setup_step_vertical_padding">16dp</dimen>
+ <dimen name="setup_step_horizontal_line_height">2dp</dimen>
+ <integer name="setup_title_weight_in_screen">40</integer>
+ <integer name="setup_body_weight_in_screen">60</integer>
+ <dimen name="setup_welcome_video_vertical_margin">24dp</dimen>
+ <integer name="setup_welcome_video_weight_in_screen">80</integer>
+ <integer name="setup_welcome_video_left_padding_weight_in_screen">10</integer>
+ <integer name="setup_welcome_video_right_padding_weight_in_screen">10</integer>
</resources>
diff --git a/java/res/values/setup-styles-common.xml b/java/res/values/setup-styles-common.xml
new file mode 100644
index 000000000..f5f59dda8
--- /dev/null
+++ b/java/res/values/setup-styles-common.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+ <style name="setupTitleStyleCommon">
+ <item name="android:textColor">@color/setup_text_dark</item>
+ <item name="android:textSize">@dimen/setup_title_text_size</item>
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ </style>
+ <style name="setupWelcomeDescritpionStyle" parent="setupTitleStyle">
+ <item name="android:textSize">@dimen/setup_welcome_description_text_size</item>
+ </style>
+ <style name="setupStepIndicatorStyle">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">@dimen/setup_step_indicator_height</item>
+ </style>
+ <style name="setupStepBulletStyle">
+ <item name="android:textColor">@color/setup_text_dark</item>
+ <item name="android:textSize">@dimen/setup_step_bullet_text_size</item>
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_weight">1.0</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:gravity">center_horizontal</item>
+ </style>
+ <style name="setupStepBaseStyle">
+ <item name="android:textColor">@color/setup_text_dark</item>
+ <item name="android:background">@color/setup_step_background</item>
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:paddingLeft">@dimen/setup_step_horizontal_padding</item>
+ <item name="android:paddingRight">@dimen/setup_step_horizontal_padding</item>
+ </style>
+ <style name="setupStepTitleStyle" parent="setupStepBaseStyle">
+ <item name="android:textSize">@dimen/setup_step_title_text_size</item>
+ </style>
+ <style name="setupStepInstructionStyle" parent="setupStepBaseStyle">
+ <item name="android:textSize">@dimen/setup_step_instruction_text_size</item>
+ </style>
+ <style name="setupStepStartIndicatorStyle">
+ <item name="android:layout_width">24dp</item>
+ <item name="android:layout_height">@dimen/setup_step_action_height</item>
+ </style>
+ <style name="setupStepActionLabelStyleCommon" parent="setupStepBaseStyle">
+ <item name="android:textColor">@color/setup_step_action_color</item>
+ <item name="android:background">@drawable/setup_step_action_background</item>
+ <item name="android:layout_height">@dimen/setup_step_action_height</item>
+ <item name="android:paddingLeft">@dimen/setup_step_horizontal_padding_half</item>
+ <item name="android:textSize">@dimen/setup_step_action_text_size</item>
+ <item name="android:drawablePadding">@dimen/setup_step_horizontal_padding_half</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="android:clickable">true</item>
+ <item name="android:focusable">true</item>
+ </style>
+ <style name="setupStepStartActionLabelStyleCommon" parent="setupStepActionLabelStyleCommon">
+ <item name="android:paddingLeft">@dimen/setup_step_horizontal_padding</item>
+ <item name="android:paddingRight">@dimen/setup_step_horizontal_padding</item>
+ </style>
+</resources>
diff --git a/java/res/values/setup-styles.xml b/java/res/values/setup-styles.xml
index cfc689a78..1ffe8ca46 100644
--- a/java/res/values/setup-styles.xml
+++ b/java/res/values/setup-styles.xml
@@ -15,31 +15,6 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="setupTitleStyle">
- <item name="android:textColor">@color/setup_text_dark</item>
- <item name="android:textSize">@dimen/setup_title_text_size</item>
- </style>
- <style name="setupStepBulletStyle">
- <item name="android:textColor">@color/setup_text_dark</item>
- <item name="android:textSize">22sp</item>
- <item name="android:layout_width">0dp</item>
- <item name="android:layout_weight">1.0</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:gravity">center_horizontal</item>
- </style>
- <style name="setupStepTitleStyle">
- <item name="android:background">@color/setup_step_background</item>
- <item name="android:textColor">@color/setup_text_dark</item>
- <item name="android:textSize">22sp</item>
- </style>
- <style name="setupStepInstructionStyle">
- <item name="android:background">@color/setup_step_background</item>
- <item name="android:textColor">@color/setup_text_dark</item>
- <item name="android:textSize">14sp</item>
- </style>
- <style name="setupStepActionLabelStyle">
- <item name="android:background">@color/setup_step_background</item>
- <item name="android:textColor">@color/setup_text_action</item>
- <item name="android:textSize">18sp</item>
- </style>
+ <style name="setupTitleStyle" parent="setupTitleStyleCommon" />
+ <style name="setupStepActionLabelStyle" parent="setupStepActionLabelStyleCommon" />
</resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index dbadfabb8..d8a88a8eb 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -107,6 +107,9 @@
<!-- Description for option to enable auto capitalization of sentences -->
<string name="auto_cap_summary">Capitalize the first word of each sentence</string>
+ <!-- Option to edit personal dictionary. [CHAR_LIMIT=30]-->
+ <string name="edit_personal_dictionary">Personal dictionary</string>
+
<!-- Option to configure dictionaries -->
<string name="configure_dictionaries_title">Add-on dictionaries</string>
<!-- Name of the main dictionary, as opposed to auxiliary dictionaries (medical/entertainment/sports...) -->
@@ -442,33 +445,46 @@
<!-- Title of the button to revert to the default value of the device in the settings dialog [CHAR LIMIT=15] -->
<string name="button_default">Default</string>
- <!-- TODO: Remove translatable="false" once wordings are finalized. -->
+ <!-- Title of the setup wizard welcome screen. [CHAR LIMT=40] -->
+ <string name="setup_welcome_title">"Welcome to <xliff:g id="application_name">%s</xliff:g>"</string>
+ <!-- Additional title of the setup wizard welcome screen, just below the setup_welcome_title. [CHAR_LIMIT=64] -->
+ <string name="setup_welcome_additional_description">with Gesture Typing</string>
+ <!-- The label of the button that starts the setup wizard. [CHAR_LIMIT=64] -->
+ <string name="setup_start_action">Get started</string>
+ <!-- The label of the button that navigates the user to the next step of the setup wizard. [CHAR_LIMIT=64] -->
+ <string name="setup_next_action">Next step</string>
<!-- Title of the setup wizard. [CHAR LIMT=40] -->
- <string name="setup_title" translatable="false">"Installing <xliff:g id="application_name">%s</xliff:g>"</string>
+ <string name="setup_steps_title">"Setting up <xliff:g id="application_name">%s</xliff:g>"</string>
<!-- Ordinal number of the 1st step in the setup wizard. [CHAR LIMIT=5] -->
<string name="setup_step1_bullet" translatable="false">1</string>
<!-- Title of the 1st step in the setup wizard. [CHAR LIMIT=64] -->
- <string name="setup_step1_title" translatable="false">"Enable <xliff:g id="application_name">%s</xliff:g> in settings."</string>
- <!-- Detailed instruction of the 1st step in the setup wizard. [CHAR LIMIT=80] -->
- <string name="setup_step1_instruction" translatable="false">"For security, please check \"<xliff:g id="application_name">%s</xliff:g>\""</string>
+ <string name="setup_step1_title">"Enable <xliff:g id="application_name">%s</xliff:g>"</string>
+ <!-- Detailed instruction of the 1st step in the setup wizard. [CHAR LIMIT=120] -->
+ <string name="setup_step1_instruction">"Please check \"<xliff:g id="application_name">%s</xliff:g>\" in your Language &amp; input settings. This will authorize it to run on your device."</string>
+ <!-- The label of the button that triggers the Language & input settings in order to enable the keyboard. [CHAR_LIMIT=64] -->
+ <string name="setup_step1_action">Enable in Settings</string>
<!-- Ordinal number of the 2nd step in the setup wizard. [CHAR LIMIT=5] -->
<string name="setup_step2_bullet" translatable="false">2</string>
<!-- Title of the 2nd step in the setup wizard. [CHAR LIMIT=64] -->
- <string name="setup_step2_title" translatable="false">"Switch to <xliff:g id="application_name">%s</xliff:g>."</string>
- <!-- Detailed instruction of the 2nd step in the setup wizard. [CHAR LIMIT=80] -->
- <string name="setup_step2_instruction" translatable="false">"Now that you've enabled <xliff:g id="application_name">%s</xliff:g>, you can switch to it."</string>
+ <string name="setup_step2_title">"Switch to <xliff:g id="application_name">%s</xliff:g>"</string>
+ <!-- Detailed instruction of the 2nd step in the setup wizard. [CHAR LIMIT=120] -->
+ <string name="setup_step2_instruction">"Next, select \"<xliff:g id="application_name">%s</xliff:g>\" as your active text-input method."</string>
+ <!-- The label of the button that triggers the choose input method dialog in order to select the keyboard. [CHAR_LIMIT=64] -->
+ <string name="setup_step2_action">Switch input methods</string>
<!-- Ordinal number of the 3rd step in the setup wizard. [CHAR LIMIT=5] -->
<string name="setup_step3_bullet" translatable="false">3</string>
<!-- Title of the 3rd step in the setup wizard. [CHAR LIMIT=64] -->
- <string name="setup_step3_title" translatable="false">"Congratulations, you're all set!"</string>
- <!-- Detailed instruction of the 3rd step in the setup wizard. [CHAR LIMIT=80] -->
- <string name="setup_step3_instruction" translatable="false">Configure additional languages</string>
- <!-- Title of the Language & input settings. This should be aligned with msgid="5292716747264442359" -->
- <string name="language_settings">Language &amp; input</string>
- <!-- Title of the Input method picker. This should be aligned with msgid="4653387336791222978" -->
- <string name="select_input_method">Choose input method</string>
+ <string name="setup_step3_title">"Congratulations, you're all set!"</string>
+ <!-- Detailed instruction of the 3rd step in the setup wizard. [CHAR LIMIT=120] -->
+ <string name="setup_step3_instruction">Now you can type in all your favorite apps with <xliff:g id="application_name">%s</xliff:g>.</string>
+ <!-- The label of the button that triggers the screen for configuaring additional languages of the keyboard. [CHAR_LIMIT=64] -->
+ <string name="setup_step3_action">Configure additional languages</string>
+ <!-- The label of the button that finishes the setup wizard. [CHAR_LIMIT=64] -->
+ <string name="setup_finish_action">Finished</string>
<!-- Option to show setup wizard icon. [CHAR LIMIT=30]-->
- <string name="show_setup_wizard_icon" translatable="false">Show setup wizard icon</string>
+ <string name="show_setup_wizard_icon">Show app icon</string>
+ <!-- Description for the option to show setup wizard application icon of this IME in the laucher. [CHAR_LIMIT=65] -->
+ <string name="show_setup_wizard_icon_summary">Display application icon in the launcher</string>
<!-- The dictionary provider application name. Visible in Settings/Applications/Manage applications. -->
<string name="app_name">Dictionary Provider</string>
@@ -498,9 +514,9 @@
<!-- Message about some dictionary indicating the file is installed, but the dictionary is disabled -->
<string name="dictionary_disabled">Installed, disabled</string>
- <!-- Message to display in the dictionaries setting screen when some error prevented us to list installed dictionaries [CHAR LIMIT=50] -->
+ <!-- Message to display in the dictionaries setting screen when some error prevented us to list installed dictionaries [CHAR LIMIT=20] -->
<string name="cannot_connect_to_dict_service">Problem connecting to dictionary service</string>
- <!-- Message to display in the dictionaries setting screen when we found that no dictionaries are available [CHAR LIMIT=50]-->
+ <!-- Message to display in the dictionaries setting screen when we found that no dictionaries are available [CHAR LIMIT=20]-->
<string name="no_dictionaries_available">No dictionaries available</string>
<!-- Title of the options to press to refresh the list (as in, check for updates now) [CHAR_LIMIT=50] -->
@@ -543,4 +559,7 @@ Tip: You can download and remove dictionaries by going to &lt;b>Language &amp; i
<!-- The text of the toast warning a download is starting automatically to enable suggestions for the selected language [CHAR LIMIT=100] -->
<string name="toast_downloading_suggestions">Downloading: suggestions for <xliff:g id="language" example="English">%1$s</xliff:g> will be ready soon.</string>
+
+ <!-- Version text [CHAR LIMIT=30]-->
+ <string name="version_text">Version <xliff:g id="version_number" example="1.0.1864.643521">%1$s</xliff:g></string>
</resources>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 1581e5fa1..eea90f94b 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -54,6 +54,11 @@
android:title="@string/correction_category"
android:key="correction_settings">
<PreferenceScreen
+ android:key="edit_personal_dictionary"
+ android:title="@string/edit_personal_dictionary">
+ <intent android:action="android.settings.USER_DICTIONARY_SETTINGS" />
+ </PreferenceScreen>
+ <PreferenceScreen
android:key="configure_dictionaries_key"
android:title="@string/configure_dictionaries_title">
<intent
@@ -172,16 +177,19 @@
android:key="pref_keypress_sound_volume"
android:title="@string/prefs_keypress_sound_volume_settings"
latin:maxValue="100" /> <!-- percent -->
- <!-- The show setup wizard icon settings shouldn't be persistent and the default value
- is added programmatically. -->
+ <!-- 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:title="@string/show_setup_wizard_icon"
+ android:summary="@string/show_setup_wizard_icon_summary" />
</PreferenceScreen>
<PreferenceScreen
android:key="send_feedback"
android:title="@string/send_feedback" />
<PreferenceScreen
+ android:key="about_keyboard" />
+ <PreferenceScreen
android:key="debug_settings"
android:title="Debug settings"
android:persistent="true"
diff --git a/java/src/com/android/inputmethod/compat/TextViewCompatUtils.java b/java/src/com/android/inputmethod/compat/TextViewCompatUtils.java
index d4f1ea830..f8e1902c0 100644
--- a/java/src/com/android/inputmethod/compat/TextViewCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/TextViewCompatUtils.java
@@ -22,23 +22,23 @@ import android.widget.TextView;
import java.lang.reflect.Method;
public final class TextViewCompatUtils {
- // Note that TextView.setCompoundDrawablesRelative(Drawable,Drawable,Drawable,Drawable) has
- // been introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
- private static final Method METHOD_setCompoundDrawablesRelative = CompatUtils.getMethod(
- TextView.class, "setCompoundDrawablesRelative",
+ // Note that TextView.setCompoundDrawablesRelativeWithIntrinsicBounds(Drawable,Drawable,
+ // Drawable,Drawable) has been introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
+ private static final Method METHOD_setCompoundDrawablesRelativeWithIntrinsicBounds =
+ CompatUtils.getMethod(TextView.class, "setCompoundDrawablesRelativeWithIntrinsicBounds",
Drawable.class, Drawable.class, Drawable.class, Drawable.class);
private TextViewCompatUtils() {
// This utility class is not publicly instantiable.
}
- public static void setCompoundDrawablesRelative(final TextView textView, final Drawable start,
- final Drawable top, final Drawable end, final Drawable bottom) {
- if (METHOD_setCompoundDrawablesRelative == null) {
- textView.setCompoundDrawables(start, top, end, bottom);
+ public static void setCompoundDrawablesRelativeWithIntrinsicBounds(final TextView textView,
+ final Drawable start, final Drawable top, final Drawable end, final Drawable bottom) {
+ if (METHOD_setCompoundDrawablesRelativeWithIntrinsicBounds == null) {
+ textView.setCompoundDrawablesWithIntrinsicBounds(start, top, end, bottom);
return;
}
- CompatUtils.invoke(textView, null, METHOD_setCompoundDrawablesRelative,
+ CompatUtils.invoke(textView, null, METHOD_setCompoundDrawablesRelativeWithIntrinsicBounds,
start, top, end, bottom);
}
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
index df4a52f4e..faf5d3c87 100644
--- a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
+++ b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
@@ -174,7 +174,7 @@ public final class ActionBatch {
final long downloadId = UpdateHandler.registerDownloadRequest(manager, request, db,
mWordList.mId, mWordList.mVersion);
Utils.l("Starting download of", uri, "with id", downloadId);
- PrivateLog.log("Starting download of " + uri + ", id : " + downloadId, context);
+ PrivateLog.log("Starting download of " + uri + ", id : " + downloadId);
}
}
@@ -333,7 +333,7 @@ public final class ActionBatch {
mWordList.mRemoteFilename, mWordList.mLastUpdate, mWordList.mChecksum,
mWordList.mFileSize, mWordList.mVersion, mWordList.mFormatVersion);
PrivateLog.log("Insert 'available' record for " + mWordList.mDescription
- + " and locale " + mWordList.mLocale, context);
+ + " and locale " + mWordList.mLocale);
db.insert(MetadataDbHelper.METADATA_TABLE_NAME, null, values);
}
}
@@ -383,7 +383,7 @@ public final class ActionBatch {
mWordList.mChecksum, mWordList.mFileSize, mWordList.mVersion,
mWordList.mFormatVersion);
PrivateLog.log("Insert 'preinstalled' record for " + mWordList.mDescription
- + " and locale " + mWordList.mLocale, context);
+ + " and locale " + mWordList.mLocale);
db.insert(MetadataDbHelper.METADATA_TABLE_NAME, null, values);
}
}
@@ -424,7 +424,7 @@ public final class ActionBatch {
mWordList.mRemoteFilename, mWordList.mLastUpdate, mWordList.mChecksum,
mWordList.mFileSize, mWordList.mVersion, mWordList.mFormatVersion);
PrivateLog.log("Updating record for " + mWordList.mDescription
- + " and locale " + mWordList.mLocale, context);
+ + " and locale " + mWordList.mLocale);
db.update(MetadataDbHelper.METADATA_TABLE_NAME, values,
MetadataDbHelper.WORDLISTID_COLUMN + " = ? AND "
+ MetadataDbHelper.VERSION_COLUMN + " = ?",
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
index f8d1c4fc9..4fbe16233 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
@@ -189,7 +189,7 @@ public final class DictionaryProvider extends ContentProvider {
*/
@Override
public String getType(final Uri uri) {
- PrivateLog.log("Asked for type of : " + uri, this);
+ PrivateLog.log("Asked for type of : " + uri);
final int match = matchUri(uri);
switch (match) {
case NO_MATCH: return null;
@@ -220,7 +220,7 @@ public final class DictionaryProvider extends ContentProvider {
public Cursor query(final Uri uri, final String[] projection, final String selection,
final String[] selectionArgs, final String sortOrder) {
Utils.l("Uri =", uri);
- PrivateLog.log("Query : " + uri, this);
+ PrivateLog.log("Query : " + uri);
final String clientId = getClientId(uri);
final int match = matchUri(uri);
switch (match) {
@@ -228,7 +228,7 @@ public final class DictionaryProvider extends ContentProvider {
case DICTIONARY_V2_WHOLE_LIST:
final Cursor c = MetadataDbHelper.queryDictionaries(getContext(), clientId);
Utils.l("List of dictionaries with count", c.getCount());
- PrivateLog.log("Returned a list of " + c.getCount() + " items", this);
+ PrivateLog.log("Returned a list of " + c.getCount() + " items");
return c;
case DICTIONARY_V2_DICT_INFO:
// In protocol version 2, we return null if the client is unknown. Otherwise
@@ -248,10 +248,10 @@ public final class DictionaryProvider extends ContentProvider {
// TODO: pass clientId to the following function
DictionaryService.updateNowIfNotUpdatedInAVeryLongTime(getContext());
if (null != dictFiles && dictFiles.size() > 0) {
- PrivateLog.log("Returned " + dictFiles.size() + " files", this);
+ PrivateLog.log("Returned " + dictFiles.size() + " files");
return new ResourcePathCursor(dictFiles);
} else {
- PrivateLog.log("No dictionary files for this URL", this);
+ PrivateLog.log("No dictionary files for this URL");
return new ResourcePathCursor(Collections.<WordListInfo>emptyList());
}
// V2_METADATA and V2_DATAFILE are not supported for query()
@@ -488,7 +488,7 @@ public final class DictionaryProvider extends ContentProvider {
public Uri insert(final Uri uri, final ContentValues values)
throws UnsupportedOperationException {
if (null == uri || null == values) return null; // Should never happen but let's be safe
- PrivateLog.log("Insert, uri = " + uri.toString(), this);
+ PrivateLog.log("Insert, uri = " + uri.toString());
final String clientId = getClientId(uri);
switch (matchUri(uri)) {
case DICTIONARY_V2_METADATA:
@@ -517,7 +517,7 @@ public final class DictionaryProvider extends ContentProvider {
break;
case DICTIONARY_V1_WHOLE_LIST:
case DICTIONARY_V1_DICT_INFO:
- PrivateLog.log("Attempt to insert : " + uri, this);
+ PrivateLog.log("Attempt to insert : " + uri);
throw new UnsupportedOperationException(
"Insertion in the dictionary is not supported in this version");
}
@@ -532,7 +532,7 @@ public final class DictionaryProvider extends ContentProvider {
@Override
public int update(final Uri uri, final ContentValues values, final String selection,
final String[] selectionArgs) throws UnsupportedOperationException {
- PrivateLog.log("Attempt to update : " + uri, this);
+ PrivateLog.log("Attempt to update : " + uri);
throw new UnsupportedOperationException("Updating dictionary words is not supported");
}
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryService.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryService.java
index 5817eb498..46bb5543a 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryService.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryService.java
@@ -21,7 +21,6 @@ import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.os.IBinder;
import android.text.format.DateUtils;
import android.util.Log;
@@ -190,7 +189,7 @@ public final class DictionaryService extends Service {
// is still more recent than UPDATE_FREQUENCY, do nothing.
if (!isLastUpdateAtLeastThisOld(context, UPDATE_FREQUENCY)) return;
- PrivateLog.log("Date changed - registering alarm", context);
+ PrivateLog.log("Date changed - registering alarm");
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
// Best effort to wake between midnight and MAX_ALARM_DELAY in the morning.
@@ -215,7 +214,7 @@ public final class DictionaryService extends Service {
private static boolean isLastUpdateAtLeastThisOld(final Context context, final long time) {
final long now = System.currentTimeMillis();
final long lastUpdate = MetadataDbHelper.getOldestUpdateTime(context);
- PrivateLog.log("Last update was " + lastUpdate, context);
+ PrivateLog.log("Last update was " + lastUpdate);
return lastUpdate + time < now;
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/LogProblemReporter.java b/java/src/com/android/inputmethod/dictionarypack/LogProblemReporter.java
index c127ad540..c9e128d70 100644
--- a/java/src/com/android/inputmethod/dictionarypack/LogProblemReporter.java
+++ b/java/src/com/android/inputmethod/dictionarypack/LogProblemReporter.java
@@ -28,7 +28,8 @@ final class LogProblemReporter implements ProblemReporter {
TAG = tag;
}
+ @Override
public void report(final Exception e) {
- Log.e(TAG, "Reporting problem : " + e);
+ Log.e(TAG, "Reporting problem", e);
}
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index 55f545aad..03ed267c3 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -16,13 +16,11 @@
package com.android.inputmethod.dictionarypack;
-import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
-import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -47,16 +45,16 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
private static final int METADATA_DATABASE_INITIAL_VERSION = 3;
// This is the first released version of the database that implements CLIENTID. It is
// used to identify the versions for upgrades. This should never change going forward.
- private static final int METADATA_DATABASE_VERSION_WITH_CLIENTID = 5;
+ private static final int METADATA_DATABASE_VERSION_WITH_CLIENTID = 6;
// This is the current database version. It should be updated when the database schema
// gets updated. It is passed to the framework constructor of SQLiteOpenHelper, so
// that's what the framework uses to track our database version.
- private static final int METADATA_DATABASE_VERSION = 5;
+ private static final int METADATA_DATABASE_VERSION = 6;
private final static long NOT_A_DOWNLOAD_ID = -1;
public static final String METADATA_TABLE_NAME = "pendingUpdates";
- private static final String CLIENT_TABLE_NAME = "clients";
+ static final String CLIENT_TABLE_NAME = "clients";
public static final String PENDINGID_COLUMN = "pendingid"; // Download Manager ID
public static final String TYPE_COLUMN = "type";
public static final String STATUS_COLUMN = "status";
@@ -75,6 +73,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
private static final String CLIENT_CLIENT_ID_COLUMN = "clientid";
private static final String CLIENT_METADATA_URI_COLUMN = "uri";
+ private static final String CLIENT_METADATA_ADDITIONAL_ID_COLUMN = "additionalid";
private static final String CLIENT_LAST_UPDATE_DATE_COLUMN = "lastupdate";
private static final String CLIENT_PENDINGID_COLUMN = "pendingid"; // Download Manager ID
@@ -130,6 +129,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
"CREATE TABLE IF NOT EXISTS " + CLIENT_TABLE_NAME + " ("
+ CLIENT_CLIENT_ID_COLUMN + " TEXT, "
+ CLIENT_METADATA_URI_COLUMN + " TEXT, "
+ + CLIENT_METADATA_ADDITIONAL_ID_COLUMN + " TEXT, "
+ CLIENT_LAST_UPDATE_DATE_COLUMN + " INTEGER NOT NULL DEFAULT 0, "
+ CLIENT_PENDINGID_COLUMN + " INTEGER, "
+ FLAGS_COLUMN + " INTEGER, "
@@ -284,14 +284,15 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
* @return the string representation of the URI
*/
public static String getMetadataUriAsString(final Context context, final String clientId) {
- SQLiteDatabase defaultDb = getDb(context, null);
- final Cursor cursor = defaultDb.query(CLIENT_TABLE_NAME,
- new String[] { CLIENT_METADATA_URI_COLUMN },
- CLIENT_CLIENT_ID_COLUMN + " = ?", new String[] { clientId },
+ SQLiteDatabase defaultDb = MetadataDbHelper.getDb(context, null);
+ final Cursor cursor = defaultDb.query(MetadataDbHelper.CLIENT_TABLE_NAME,
+ new String[] { MetadataDbHelper.CLIENT_METADATA_URI_COLUMN,
+ MetadataDbHelper.CLIENT_METADATA_ADDITIONAL_ID_COLUMN },
+ MetadataDbHelper.CLIENT_CLIENT_ID_COLUMN + " = ?", new String[] { clientId },
null, null, null, null);
try {
if (!cursor.moveToFirst()) return null;
- return cursor.getString(0); // Only one column, return it
+ return MetadataUriGetter.getUri(context, cursor.getString(0), cursor.getString(1));
} finally {
cursor.close();
}
@@ -300,7 +301,8 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
/**
* Update the last metadata update time for all clients using a particular URI.
*
- * All clients using this metadata URI will be indicated as having been updated now.
+ * This method searches for all clients using a particular URI and updates the last
+ * update time for this client.
* The current time is used as the latest update time. This saved date will be what
* is returned henceforth by {@link #getLastUpdateDateForClient(Context, String)},
* until this method is called again.
@@ -309,13 +311,26 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
* @param uri the metadata URI we just downloaded
*/
public static void saveLastUpdateTimeOfUri(final Context context, final String uri) {
- PrivateLog.log("Save last update time of URI : " + uri + " " + System.currentTimeMillis(),
- context);
+ PrivateLog.log("Save last update time of URI : " + uri + " " + System.currentTimeMillis());
final ContentValues values = new ContentValues();
values.put(CLIENT_LAST_UPDATE_DATE_COLUMN, System.currentTimeMillis());
final SQLiteDatabase defaultDb = getDb(context, null);
- defaultDb.update(CLIENT_TABLE_NAME, values,
- CLIENT_METADATA_URI_COLUMN + " = ?", new String[] { uri });
+ final Cursor cursor = MetadataDbHelper.queryClientIds(context);
+ if (null == cursor) return;
+ try {
+ if (!cursor.moveToFirst()) return;
+ do {
+ final String clientId = cursor.getString(0);
+ final String metadataUri =
+ MetadataDbHelper.getMetadataUriAsString(context, clientId);
+ if (metadataUri.equals(uri)) {
+ defaultDb.update(CLIENT_TABLE_NAME, values,
+ CLIENT_CLIENT_ID_COLUMN + " = ?", new String[] { clientId });
+ }
+ } while (cursor.moveToNext());
+ } finally {
+ cursor.close();
+ }
}
/**
@@ -730,11 +745,13 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
/**
* Updates information relative to a specific client.
*
- * Updatable information includes only the metadata URI, but may be expanded in the future.
+ * Updatable information includes the metadata URI and the additional ID column. It may be
+ * expanded in the future.
* The passed values must include a client ID in the key CLIENT_CLIENT_ID_COLUMN, and it must
- * be equal to the string passed as an argument for clientId.
- * The passed values must also include a non-empty metadata URI in the
- * CLIENT_METADATA_URI_COLUMN column.
+ * be equal to the string passed as an argument for clientId. It may not be empty.
+ * The passed values must also include a non-null metadata URI in the
+ * CLIENT_METADATA_URI_COLUMN column, as well as a non-null additional ID in the
+ * CLIENT_METADATA_ADDITIONAL_ID_COLUMN. Both these strings may be empty.
* If any of the above is not complied with, this function returns without updating data.
*
* @param context the context, to open the database
@@ -746,10 +763,16 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
// Sanity check the content values
final String valuesClientId = values.getAsString(CLIENT_CLIENT_ID_COLUMN);
final String valuesMetadataUri = values.getAsString(CLIENT_METADATA_URI_COLUMN);
- // Empty string is a valid client ID, but external apps may not configure it.
- // Empty string is a valid metadata URI if the client does not want updates.
- if (TextUtils.isEmpty(valuesClientId) || null == valuesMetadataUri) {
- // We need both these columns to be filled in
+ final String valuesMetadataAdditionalId =
+ values.getAsString(CLIENT_METADATA_ADDITIONAL_ID_COLUMN);
+ // Empty string is a valid client ID, but external apps may not configure it, so disallow
+ // both null and empty string.
+ // Empty string is a valid metadata URI if the client does not want updates, so allow
+ // empty string but disallow null.
+ // Empty string is a valid additional ID so allow empty string but disallow null.
+ if (TextUtils.isEmpty(valuesClientId) || null == valuesMetadataUri
+ || null == valuesMetadataAdditionalId) {
+ // We need all these columns to be filled in
Utils.l("Missing parameter for updateClientInfo");
return;
}
@@ -780,8 +803,9 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
* Register a download ID for a specific metadata URI.
*
* This method should be called when a download for a metadata URI is starting. It will
- * register the download ID for all clients using this metadata URI into the database
- * for later retrieval by {@link #getDownloadRecordsForDownloadId(Context, long)}.
+ * search for all clients using this metadata URI and will register for each of them
+ * the download ID into the database for later retrieval by
+ * {@link #getDownloadRecordsForDownloadId(Context, long)}.
*
* @param context a context for opening databases
* @param uri the metadata URI
@@ -792,8 +816,22 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
final ContentValues values = new ContentValues();
values.put(CLIENT_PENDINGID_COLUMN, downloadId);
final SQLiteDatabase defaultDb = getDb(context, "");
- defaultDb.update(CLIENT_TABLE_NAME, values,
- CLIENT_METADATA_URI_COLUMN + " = ?", new String[] { uri });
+ final Cursor cursor = MetadataDbHelper.queryClientIds(context);
+ if (null == cursor) return;
+ try {
+ if (!cursor.moveToFirst()) return;
+ do {
+ final String clientId = cursor.getString(0);
+ final String metadataUri =
+ MetadataDbHelper.getMetadataUriAsString(context, clientId);
+ if (metadataUri.equals(uri)) {
+ defaultDb.update(CLIENT_TABLE_NAME, values,
+ CLIENT_CLIENT_ID_COLUMN + " = ?", new String[] { clientId });
+ }
+ } while (cursor.moveToNext());
+ } finally {
+ cursor.close();
+ }
}
/**
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java b/java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java
new file mode 100644
index 000000000..ed817658e
--- /dev/null
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataUriGetter.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.inputmethod.dictionarypack;
+
+import android.content.Context;
+
+/**
+ * Helper to get the metadata URI from its base URI and the additional ID, if any.
+ */
+public class MetadataUriGetter {
+ private MetadataUriGetter() {
+ // This helper class is not instantiable.
+ }
+
+ public static String getUri(final Context context, final String baseUri,
+ final String additionalId) {
+ return baseUri;
+ }
+}
diff --git a/java/src/com/android/inputmethod/dictionarypack/PrivateLog.java b/java/src/com/android/inputmethod/dictionarypack/PrivateLog.java
index 8593c1c9b..67dd7b9b7 100644
--- a/java/src/com/android/inputmethod/dictionarypack/PrivateLog.java
+++ b/java/src/com/android/inputmethod/dictionarypack/PrivateLog.java
@@ -16,7 +16,6 @@
package com.android.inputmethod.dictionarypack;
-import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
@@ -24,6 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
/**
* Class to keep long-term log. This is inactive in production, and is only for debug purposes.
@@ -44,10 +44,10 @@ public class PrivateLog {
+ COLUMN_EVENT + " TEXT);";
private static final SimpleDateFormat sDateFormat =
- new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.US);
private static PrivateLog sInstance = new PrivateLog();
- private static DebugHelper mDebugHelper = null;
+ private static DebugHelper sDebugHelper = null;
private PrivateLog() {
}
@@ -55,8 +55,8 @@ public class PrivateLog {
public static synchronized PrivateLog getInstance(final Context context) {
if (!DEBUG) return sInstance;
synchronized(PrivateLog.class) {
- if (sInstance.mDebugHelper == null) {
- sInstance.mDebugHelper = new DebugHelper(context);
+ if (sDebugHelper == null) {
+ sDebugHelper = new DebugHelper(context);
}
return sInstance;
}
@@ -94,16 +94,9 @@ public class PrivateLog {
}
- public static void log(String event, Context context) {
+ public static void log(String event) {
if (!DEBUG) return;
- final SQLiteDatabase l = getInstance(context).mDebugHelper.getWritableDatabase();
- mDebugHelper.insert(l, event);
- }
-
- public static void log(String event, ContentProvider provider) {
- if (!DEBUG) return;
- final SQLiteDatabase l =
- getInstance(provider.getContext()).mDebugHelper.getWritableDatabase();
- mDebugHelper.insert(l, event);
+ final SQLiteDatabase l = sDebugHelper.getWritableDatabase();
+ DebugHelper.insert(l, event);
}
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index 3173e911b..a59660954 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -183,7 +183,7 @@ public final class UpdateHandler {
final String clientId = cursor.getString(0);
final String metadataUri =
MetadataDbHelper.getMetadataUriAsString(context, clientId);
- PrivateLog.log("Update for clientId " + Utils.s(clientId), context);
+ PrivateLog.log("Update for clientId " + Utils.s(clientId));
Utils.l("Update for clientId", clientId, " which uses URI ", metadataUri);
uris.add(metadataUri);
} while (cursor.moveToNext());
@@ -211,7 +211,7 @@ public final class UpdateHandler {
*/
private static void updateClientsWithMetadataUri(final Context context,
final boolean updateNow, final String metadataUri) {
- PrivateLog.log("Update for metadata URI " + Utils.s(metadataUri), context);
+ PrivateLog.log("Update for metadata URI " + Utils.s(metadataUri));
final Request metadataRequest = new Request(Uri.parse(metadataUri));
Utils.l("Request =", metadataRequest);
@@ -257,7 +257,7 @@ public final class UpdateHandler {
// method will ignore it.
writeMetadataDownloadId(context, metadataUri, downloadId);
}
- PrivateLog.log("Requested download with id " + downloadId, context);
+ PrivateLog.log("Requested download with id " + downloadId);
}
/**
@@ -404,7 +404,7 @@ public final class UpdateHandler {
/* package */ static void downloadFinished(final Context context, final Intent intent) {
// Get and check the ID of the file that was downloaded
final long fileId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, NOT_AN_ID);
- PrivateLog.log("Download finished with id " + fileId, context);
+ PrivateLog.log("Download finished with id " + fileId);
Utils.l("DownloadFinished with id", fileId);
if (NOT_AN_ID == fileId) return; // Spurious wake-up: ignore
@@ -491,7 +491,7 @@ public final class UpdateHandler {
private static void publishUpdateCycleCompletedEvent(final Context context) {
// Even if this is not successful, we have to publish the new state.
- PrivateLog.log("Publishing update cycle completed event", context);
+ PrivateLog.log("Publishing update cycle completed event");
Utils.l("Publishing update cycle completed event");
for (UpdateEventListener listener : linkedCopyOfList(sUpdateEventListeners)) {
listener.updateCycleCompleted();
@@ -582,7 +582,7 @@ public final class UpdateHandler {
}
Utils.l("Downloaded metadata :", newMetadata);
- PrivateLog.log("Downloaded metadata\n" + newMetadata, context);
+ PrivateLog.log("Downloaded metadata\n" + newMetadata);
final ActionBatch actions = computeUpgradeTo(context, clientId, newMetadata);
// TODO: Check with UX how we should report to the user
@@ -610,7 +610,7 @@ public final class UpdateHandler {
MetadataDbHelper.DESCRIPTION_COLUMN), "for", downloadRecord.mClientId);
PrivateLog.log("Downloaded a new word list with description : "
+ downloadRecord.mAttributes.getAsString(MetadataDbHelper.DESCRIPTION_COLUMN)
- + " for " + downloadRecord.mClientId, context);
+ + " for " + downloadRecord.mClientId);
final String locale =
downloadRecord.mAttributes.getAsString(MetadataDbHelper.LOCALE_COLUMN);
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
index 0d923ae01..93f12d53e 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
@@ -23,7 +23,9 @@ import android.preference.DialogPreference;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewParent;
import android.widget.Button;
+import android.widget.ListView;
import com.android.inputmethod.latin.R;
@@ -42,6 +44,7 @@ public final class WordListPreference extends DialogPreference {
// What to display in the "status" field when we receive unknown data as a status from
// the content provider. Empty string sounds sensible.
static final private String NO_STATUS_MESSAGE = "";
+ static final private int NOT_AN_INDEX = -1;
/// Actions
static final private int ACTION_UNKNOWN = 0;
@@ -64,7 +67,8 @@ public final class WordListPreference extends DialogPreference {
static final private int ANIMATION_IN = 1;
static final private int ANIMATION_OUT = 2;
- private static Button sLastClickedActionButton = null;
+ private static int sLastClickedIndex = NOT_AN_INDEX;
+ private static String sLastClickedWordlistId = null;
private final OnWordListPreferenceClick mPreferenceClickHandler =
new OnWordListPreferenceClick();
private final OnActionButtonClick mActionButtonClickHandler =
@@ -196,7 +200,8 @@ public final class WordListPreference extends DialogPreference {
((ViewGroup)view).setLayoutTransition(null);
final Button button = (Button)view.findViewById(R.id.wordlist_button);
button.setText(getButtonLabel(mStatus));
- button.setVisibility(View.INVISIBLE);
+ // String identity match. This is an ==, not an .equals, on purpose.
+ button.setVisibility(mWordlistId == sLastClickedWordlistId ? View.VISIBLE : View.INVISIBLE);
button.setOnClickListener(mActionButtonClickHandler);
view.setOnClickListener(mPreferenceClickHandler);
}
@@ -205,15 +210,31 @@ public final class WordListPreference extends DialogPreference {
@Override
public void onClick(final View v) {
final Button button = (Button)v.findViewById(R.id.wordlist_button);
- if (null != sLastClickedActionButton) {
- animateButton(sLastClickedActionButton, ANIMATION_OUT);
- }
animateButton(button, ANIMATION_IN);
- sLastClickedActionButton = button;
+ final ViewParent parent = v.getParent();
+ // Just in case something changed in the framework, test for the concrete class
+ if (!(parent instanceof ListView)) return;
+ final ListView listView = (ListView)parent;
+ final int myIndex = listView.indexOfChild(v) + listView.getFirstVisiblePosition();
+ if (NOT_AN_INDEX != sLastClickedIndex) {
+ animateButton(getButtonForIndex(listView, sLastClickedIndex), ANIMATION_OUT);
+ }
+ sLastClickedIndex = myIndex;
+ sLastClickedWordlistId = mWordlistId;
+ }
+ }
+
+ private Button getButtonForIndex(final ListView listView, final int index) {
+ final int indexInChildren = index - listView.getFirstVisiblePosition();
+ if (indexInChildren < 0 || index > listView.getLastVisiblePosition()) {
+ // The view is offscreen.
+ return null;
}
+ return (Button)listView.getChildAt(indexInChildren).findViewById(R.id.wordlist_button);
}
private void animateButton(final Button button, final int direction) {
+ if (null == button) return;
final float outerX = ((View)button.getParent()).getWidth();
final float innerX = button.getX() - button.getTranslationX();
if (View.INVISIBLE == button.getVisibility()) {
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index ba78d014a..d74644d9e 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -1189,10 +1189,12 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
if (ENABLE_USABILITY_STUDY_LOG) {
writeUsabilityStudyLog(me, action, eventTime, i, pointerId, px, py);
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.mainKeyboardView_processMotionEvent(
- me, action, eventTime, i, pointerId, px, py);
- }
+ // TODO: This seems to be no longer necessary, and confusing because it leads to
+ // duplicate MotionEvents being recorded.
+ // if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
+ // ResearchLogger.mainKeyboardView_processMotionEvent(
+ // me, action, eventTime, i, pointerId, px, py);
+ // }
}
} else {
final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 91c4319e7..c1b148dbf 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -318,8 +318,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
// true if keyboard layout has been changed.
private boolean mKeyboardLayoutHasBeenChanged;
- // true if this pointer is no longer tracking touch event.
- private boolean mIsTrackingCanceled;
+ // true if this pointer is no longer triggering any action because it has been canceled.
+ private boolean mIsTrackingForActionDisabled;
// the more keys panel currently being shown. equals null if no panel is active.
private MoreKeysPanel mMoreKeysPanel;
@@ -441,7 +441,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
// Returns true if keyboard has been changed by this callback.
private boolean callListenerOnPressAndCheckKeyboardLayoutChange(final Key key) {
- if (sInGesture || mIsDetectingGesture) {
+ // While gesture input is going on, this method should be a no-operation. But when gesture
+ // input has been canceled, <code>sInGesture</code> and <code>mIsDetectingGesture</code>
+ // are set to false. To keep this method is a no-operation,
+ // <code>mIsTrackingForActionDisabled</code> should also be taken account of.
+ if (sInGesture || mIsDetectingGesture || mIsTrackingForActionDisabled) {
return false;
}
final boolean ignoreModifierKey = mIsInSlidingKeyInput && key.isModifier();
@@ -500,7 +504,8 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
// primaryCode is different from {@link Key#mCode}.
private void callListenerOnRelease(final Key key, final int primaryCode,
final boolean withSliding) {
- if (sInGesture || mIsDetectingGesture) {
+ // See the comment at {@link #callListenerOnPressAndCheckKeyboardLayoutChange(Key}}.
+ if (sInGesture || mIsDetectingGesture || mIsTrackingForActionDisabled) {
return;
}
final boolean ignoreModifierKey = mIsInSlidingKeyInput && key.isModifier();
@@ -745,7 +750,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (key != null) {
updateBatchInput(eventTime);
}
- if (mIsTrackingCanceled) {
+ if (mIsTrackingForActionDisabled) {
return;
}
mDrawingProxy.showGesturePreviewTrail(this);
@@ -777,7 +782,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
sInGesture = false;
sTimeRecorder.onEndBatchInput(eventTime);
mTimerProxy.cancelAllUpdateBatchInputTimers();
- if (!mIsTrackingCanceled) {
+ if (!mIsTrackingForActionDisabled) {
if (DEBUG_LISTENER) {
Log.d(TAG, String.format("[%d] onEndBatchInput : batchPoints=%d",
mPointerId, sAggregratedPointers.getPointerSize()));
@@ -786,7 +791,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
}
- if (mIsTrackingCanceled) {
+ if (mIsTrackingForActionDisabled) {
return;
}
mDrawingProxy.showGesturePreviewTrail(this);
@@ -846,7 +851,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
ResearchLogger.pointerTracker_onDownEvent(deltaT, distance * distance);
}
- cancelTracking();
+ cancelTrackingForAction();
return;
}
}
@@ -887,7 +892,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|| (key != null && key.isModifier())
|| mKeyDetector.alwaysAllowsSlidingInput();
mKeyboardLayoutHasBeenChanged = false;
- mIsTrackingCanceled = false;
+ mIsTrackingForActionDisabled = false;
resetSlidingKeyInput();
if (key != null) {
// This onPress call may have changed keyboard layout. Those cases are detected at
@@ -947,7 +952,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (DEBUG_MOVE_EVENT) {
printTouchEvent("onMoveEvent:", x, y, eventTime);
}
- if (mIsTrackingCanceled) {
+ if (mIsTrackingForActionDisabled) {
return;
}
@@ -985,6 +990,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
key = onMoveKey(x, y);
}
onMoveToNewKey(key, x, y);
+ if (mIsTrackingForActionDisabled) {
+ return;
+ }
startLongPressTimer(key);
setPressedKeyGraphics(key, eventTime);
}
@@ -1069,11 +1077,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
+ " detected sliding finger while multi touching", mPointerId));
}
onUpEvent(x, y, eventTime);
- cancelTracking();
+ cancelTrackingForAction();
setReleasedKeyGraphics(oldKey);
} else {
if (!mIsDetectingGesture) {
- cancelTracking();
+ cancelTrackingForAction();
}
setReleasedKeyGraphics(oldKey);
}
@@ -1087,7 +1095,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
onMoveToNewKey(null, x, y);
} else {
if (!mIsDetectingGesture) {
- cancelTracking();
+ cancelTrackingForAction();
}
}
}
@@ -1155,7 +1163,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
return;
}
onUpEventInternal(mLastX, mLastY, eventTime);
- cancelTracking();
+ cancelTrackingForAction();
}
private void onUpEventInternal(final int x, final int y, final long eventTime) {
@@ -1168,7 +1176,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
setReleasedKeyGraphics(currentKey);
if (isShowingMoreKeysPanel()) {
- if (!mIsTrackingCanceled) {
+ if (!mIsTrackingForActionDisabled) {
final int translatedX = mMoreKeysPanel.translateX(x);
final int translatedY = mMoreKeysPanel.translateY(y);
mMoreKeysPanel.onUpEvent(translatedX, translatedY, mPointerId, eventTime);
@@ -1186,7 +1194,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
return;
}
- if (mIsTrackingCanceled) {
+ if (mIsTrackingForActionDisabled) {
return;
}
if (currentKey != null && !currentKey.isRepeatable()) {
@@ -1203,16 +1211,16 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
@Override
- public void cancelTracking() {
+ public void cancelTrackingForAction() {
if (isShowingMoreKeysPanel()) {
return;
}
- mIsTrackingCanceled = true;
+ mIsTrackingForActionDisabled = true;
}
public void onLongPressed() {
resetSlidingKeyInput();
- cancelTracking();
+ cancelTrackingForAction();
setReleasedKeyGraphics(mCurrentKey);
sPointerTrackerQueue.remove(this);
}
@@ -1316,6 +1324,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
final Key key = mKeyDetector.detectHitKey(x, y);
final String code = KeyDetector.printableCode(key);
Log.d(TAG, String.format("[%d]%s%s %4d %4d %5d %s", mPointerId,
- (mIsTrackingCanceled ? "-" : " "), title, x, y, eventTime, code));
+ (mIsTrackingForActionDisabled ? "-" : " "), title, x, y, eventTime, code));
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 6bc6acc0f..8901f99b7 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -30,7 +30,7 @@ public final class PointerTrackerQueue {
public boolean isModifier();
public boolean isInSlidingKeyInput();
public void onPhantomUpEvent(long eventTime);
- public void cancelTracking();
+ public void cancelTrackingForAction();
}
private static final int INITIAL_CAPACITY = 10;
@@ -206,7 +206,7 @@ public final class PointerTrackerQueue {
final int arraySize = mArraySize;
for (int index = 0; index < arraySize; index++) {
final Element element = expandableArray.get(index);
- element.cancelTracking();
+ element.cancelTrackingForAction();
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 18e712212..dbc2b9082 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -141,7 +141,6 @@ public final class BinaryDictionary extends Dictionary {
mOutputTypes);
final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
for (int j = 0; j < count; ++j) {
- if (composerSize > 0 && mOutputScores[j] < 1) break;
final int start = j * MAX_WORD_LENGTH;
int len = 0;
while (len < MAX_WORD_LENGTH && mOutputCodePoints[start + len] != 0) {
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 42f713697..4a2c3bb80 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -81,6 +81,7 @@ public final class BinaryDictionaryFileDumper {
private static final String QUERY_PATH_METADATA = "metadata";
private static final String INSERT_METADATA_CLIENT_ID_COLUMN = "clientid";
private static final String INSERT_METADATA_METADATA_URI_COLUMN = "uri";
+ private static final String INSERT_METADATA_METADATA_ADDITIONAL_ID_COLUMN = "additionalid";
// Prevents this class to be accidentally instantiated.
private BinaryDictionaryFileDumper() {
@@ -423,6 +424,7 @@ public final class BinaryDictionaryFileDumper {
private static void reinitializeClientRecordInDictionaryContentProvider(final Context context,
final ContentProviderClient client, final String clientId) throws RemoteException {
final String metadataFileUri = MetadataFileUriGetter.getMetadataUri(context);
+ final String metadataAdditionalId = MetadataFileUriGetter.getMetadataAdditionalId(context);
if (TextUtils.isEmpty(metadataFileUri)) return;
// Tell the content provider to reset all information about this client id
final Uri metadataContentUri = getProviderUriBuilder(clientId)
@@ -434,6 +436,7 @@ public final class BinaryDictionaryFileDumper {
final ContentValues metadataValues = new ContentValues();
metadataValues.put(INSERT_METADATA_CLIENT_ID_COLUMN, clientId);
metadataValues.put(INSERT_METADATA_METADATA_URI_COLUMN, metadataFileUri);
+ metadataValues.put(INSERT_METADATA_METADATA_ADDITIONAL_ID_COLUMN, metadataAdditionalId);
client.insert(metadataContentUri, metadataValues);
// Update the dictionary list.
diff --git a/java/src/com/android/inputmethod/latin/DebugSettings.java b/java/src/com/android/inputmethod/latin/DebugSettings.java
index c2aade64d..9d4794121 100644
--- a/java/src/com/android/inputmethod/latin/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/DebugSettings.java
@@ -121,18 +121,8 @@ public final class DebugSettings extends PreferenceFragment
return;
}
boolean isDebugMode = mDebugMode.isChecked();
- String version = "";
- try {
- final Context context = getActivity();
- if (context == null) {
- return;
- }
- final String packageName = context.getPackageName();
- PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
- version = "Version " + info.versionName;
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Could not find version info.");
- }
+ final String version = getResources().getString(
+ R.string.version_text, Utils.getSdkVersion(getActivity()));
if (!isDebugMode) {
mDebugMode.setTitle(version);
mDebugMode.setSummary("");
diff --git a/java/src/com/android/inputmethod/latin/FeedbackUtils.java b/java/src/com/android/inputmethod/latin/FeedbackUtils.java
index 1e5260e34..0582763fe 100644
--- a/java/src/com/android/inputmethod/latin/FeedbackUtils.java
+++ b/java/src/com/android/inputmethod/latin/FeedbackUtils.java
@@ -17,6 +17,7 @@
package com.android.inputmethod.latin;
import android.content.Context;
+import android.content.Intent;
public class FeedbackUtils {
public static boolean isFeedbackFormSupported() {
@@ -25,4 +26,12 @@ public class FeedbackUtils {
public static void showFeedbackForm(Context context) {
}
+
+ public static int getAboutKeyboardTitleResId() {
+ return 0;
+ }
+
+ public static Intent getAboutKeyboardIntent(Context context) {
+ return null;
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/MetadataFileUriGetter.java b/java/src/com/android/inputmethod/latin/MetadataFileUriGetter.java
index e6dc6db8f..a98ecc7b6 100644
--- a/java/src/com/android/inputmethod/latin/MetadataFileUriGetter.java
+++ b/java/src/com/android/inputmethod/latin/MetadataFileUriGetter.java
@@ -19,10 +19,18 @@ package com.android.inputmethod.latin;
import android.content.Context;
/**
- * Helper class to get the metadata URI.
+ * Helper class to get the metadata URI and the additional ID.
*/
public class MetadataFileUriGetter {
- public static String getMetadataUri(Context context) {
+ private MetadataFileUriGetter() {
+ // This helper class is not instantiable.
+ }
+
+ public static String getMetadataUri(final Context context) {
return context.getString(R.string.dictionary_pack_metadata_uri);
}
+
+ public static String getMetadataAdditionalId(final Context context) {
+ return "";
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index e39aae958..3f7be99e5 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;
+import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
@@ -46,6 +47,8 @@ public final class RichInputMethodManager {
private InputMethodManagerCompatWrapper mImmWrapper;
private InputMethodInfo mInputMethodInfoOfThisIme;
+ private static final int INDEX_NOT_FOUND = -1;
+
public static RichInputMethodManager getInstance() {
sInstance.checkInitialized();
return sInstance;
@@ -98,11 +101,100 @@ public final class RichInputMethodManager {
}
public boolean switchToNextInputMethod(final IBinder token, final boolean onlyCurrentIme) {
- final boolean result = mImmWrapper.switchToNextInputMethod(token, onlyCurrentIme);
- if (!result) {
- mImmWrapper.mImm.switchToLastInputMethod(token);
+ if (mImmWrapper.switchToNextInputMethod(token, onlyCurrentIme)) {
+ return true;
+ }
+ // Was not able to call {@link InputMethodManager#switchToNextInputMethodIBinder,boolean)}
+ // because the current device is running ICS or previous and lacks the API.
+ if (switchToNextInputSubtypeInThisIme(token, onlyCurrentIme)) {
+ return true;
+ }
+ return switchToNextInputMethodAndSubtype(token);
+ }
+
+ private boolean switchToNextInputSubtypeInThisIme(final IBinder token,
+ final boolean onlyCurrentIme) {
+ final InputMethodManager imm = mImmWrapper.mImm;
+ final InputMethodSubtype currentSubtype = imm.getCurrentInputMethodSubtype();
+ final List<InputMethodSubtype> enabledSubtypes = imm.getEnabledInputMethodSubtypeList(
+ mInputMethodInfoOfThisIme, true /* allowsImplicitlySelectedSubtypes */);
+ final int currentIndex = getSubtypeIndexInList(currentSubtype, enabledSubtypes);
+ if (currentIndex == INDEX_NOT_FOUND) {
+ Log.w(TAG, "Can't find current subtype in enabled subtypes: subtype="
+ + SubtypeLocale.getSubtypeDisplayName(currentSubtype));
+ return false;
+ }
+ final int nextIndex = (currentIndex + 1) % enabledSubtypes.size();
+ if (nextIndex <= currentIndex && !onlyCurrentIme) {
+ // The current subtype is the last or only enabled one and it needs to switch to
+ // next IME.
return false;
}
+ final InputMethodSubtype nextSubtype = enabledSubtypes.get(nextIndex);
+ setInputMethodAndSubtype(token, nextSubtype);
+ return true;
+ }
+
+ private boolean switchToNextInputMethodAndSubtype(final IBinder token) {
+ final InputMethodManager imm = mImmWrapper.mImm;
+ final List<InputMethodInfo> enabledImis = imm.getEnabledInputMethodList();
+ final int currentIndex = getImiIndexInList(mInputMethodInfoOfThisIme, enabledImis);
+ if (currentIndex == INDEX_NOT_FOUND) {
+ Log.w(TAG, "Can't find current IME in enabled IMEs: IME package="
+ + mInputMethodInfoOfThisIme.getPackageName());
+ return false;
+ }
+ final InputMethodInfo nextImi = getNextNonAuxiliaryIme(currentIndex, enabledImis);
+ final List<InputMethodSubtype> enabledSubtypes = imm.getEnabledInputMethodSubtypeList(
+ nextImi, true /* allowsImplicitlySelectedSubtypes */);
+ if (enabledSubtypes.isEmpty()) {
+ // The next IME has no subtype.
+ imm.setInputMethod(token, nextImi.getId());
+ return true;
+ }
+ final InputMethodSubtype firstSubtype = enabledSubtypes.get(0);
+ imm.setInputMethodAndSubtype(token, nextImi.getId(), firstSubtype);
+ return true;
+ }
+
+ private static int getImiIndexInList(final InputMethodInfo inputMethodInfo,
+ final List<InputMethodInfo> imiList) {
+ final int count = imiList.size();
+ for (int index = 0; index < count; index++) {
+ final InputMethodInfo imi = imiList.get(index);
+ if (imi.equals(inputMethodInfo)) {
+ return index;
+ }
+ }
+ return INDEX_NOT_FOUND;
+ }
+
+ // This method mimics {@link InputMethodManager#switchToNextInputMethod(IBinder,boolean)}.
+ private static InputMethodInfo getNextNonAuxiliaryIme(final int currentIndex,
+ final List<InputMethodInfo> imiList) {
+ final int count = imiList.size();
+ for (int i = 1; i < count; i++) {
+ final int nextIndex = (currentIndex + i) % count;
+ final InputMethodInfo nextImi = imiList.get(nextIndex);
+ if (!isAuxiliaryIme(nextImi)) {
+ return nextImi;
+ }
+ }
+ return imiList.get(currentIndex);
+ }
+
+ // Copied from {@link InputMethodInfo}. See how auxiliary of IME is determined.
+ private static boolean isAuxiliaryIme(final InputMethodInfo imi) {
+ final int count = imi.getSubtypeCount();
+ if (count == 0) {
+ return false;
+ }
+ for (int index = 0; index < count; index++) {
+ final InputMethodSubtype subtype = imi.getSubtypeAt(index);
+ if (!subtype.isAuxiliary()) {
+ return false;
+ }
+ }
return true;
}
@@ -136,24 +228,35 @@ public final class RichInputMethodManager {
private static boolean checkIfSubtypeBelongsToList(final InputMethodSubtype subtype,
final List<InputMethodSubtype> subtypes) {
- for (final InputMethodSubtype ims : subtypes) {
+ return getSubtypeIndexInList(subtype, subtypes) != INDEX_NOT_FOUND;
+ }
+
+ private static int getSubtypeIndexInList(final InputMethodSubtype subtype,
+ final List<InputMethodSubtype> subtypes) {
+ final int count = subtypes.size();
+ for (int index = 0; index < count; index++) {
+ final InputMethodSubtype ims = subtypes.get(index);
if (ims.equals(subtype)) {
- return true;
+ return index;
}
}
- return false;
+ return INDEX_NOT_FOUND;
}
public boolean checkIfSubtypeBelongsToThisIme(final InputMethodSubtype subtype) {
- final InputMethodInfo myImi = mInputMethodInfoOfThisIme;
- final int count = myImi.getSubtypeCount();
- for (int i = 0; i < count; i++) {
- final InputMethodSubtype ims = myImi.getSubtypeAt(i);
+ return getSubtypeIndexInIme(subtype, mInputMethodInfoOfThisIme) != INDEX_NOT_FOUND;
+ }
+
+ private static int getSubtypeIndexInIme(final InputMethodSubtype subtype,
+ final InputMethodInfo imi) {
+ final int count = imi.getSubtypeCount();
+ for (int index = 0; index < count; index++) {
+ final InputMethodSubtype ims = imi.getSubtypeAt(index);
if (ims.equals(subtype)) {
- return true;
+ return index;
}
}
- return false;
+ return INDEX_NOT_FOUND;
}
public InputMethodSubtype getCurrentInputMethodSubtype(
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 72e08700a..22ec01558 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -36,6 +36,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_POPUP_ON = "popup_on";
public static final String PREF_VOICE_MODE = "voice_mode";
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";
@@ -78,6 +79,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
"pref_suppress_language_switch_key";
public static final String PREF_SEND_FEEDBACK = "send_feedback";
+ public static final String PREF_ABOUT_KEYBOARD = "about_keyboard";
private Resources mRes;
private SharedPreferences mPrefs;
diff --git a/java/src/com/android/inputmethod/latin/SettingsFragment.java b/java/src/com/android/inputmethod/latin/SettingsFragment.java
index a96c997c8..88a27144c 100644
--- a/java/src/com/android/inputmethod/latin/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/SettingsFragment.java
@@ -20,6 +20,8 @@ import android.app.backup.BackupManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Bundle;
@@ -29,6 +31,7 @@ import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
+import android.util.Log;
import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.dictionarypack.DictionarySettingsActivity;
@@ -38,6 +41,8 @@ import com.android.inputmethodcommon.InputMethodSettingsFragment;
public final class SettingsFragment extends InputMethodSettingsFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
+ private static final String TAG = SettingsFragment.class.getSimpleName();
+
private ListPreference mVoicePreference;
private ListPreference mShowCorrectionSuggestionsPreference;
private ListPreference mAutoCorrectionThresholdPreference;
@@ -77,10 +82,13 @@ public final class SettingsFragment extends InputMethodSettingsFragment
final Resources res = getResources();
final Context context = getActivity();
- // When we are called from the Settings application but we are not already running, the
- // {@link SubtypeLocale} class may not have been initialized. It is safe to call
- // {@link SubtypeLocale#init(Context)} multiple times.
+ // When we are called from the Settings application but we are not already running, some
+ // singleton and utility classes may not have been initialized. We have to call
+ // initialization method of these classes here. See {@link LatinIME#onCreate()}.
+ SubtypeSwitcher.init(context);
SubtypeLocale.init(context);
+ AudioAndHapticFeedbackManager.init(context);
+
mVoicePreference = (ListPreference) findPreference(Settings.PREF_VOICE_MODE);
mShowCorrectionSuggestionsPreference =
(ListPreference) findPreference(Settings.PREF_SHOW_SUGGESTIONS_SETTING);
@@ -110,6 +118,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
}
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() {
@@ -119,8 +128,11 @@ public final class SettingsFragment extends InputMethodSettingsFragment
return true;
}
});
+ aboutSettings.setTitle(FeedbackUtils.getAboutKeyboardTitleResId());
+ aboutSettings.setIntent(FeedbackUtils.getAboutKeyboardIntent(getActivity()));
} else {
miscSettings.removePreference(feedbackSettings);
+ miscSettings.removePreference(aboutSettings);
}
}
@@ -180,6 +192,16 @@ public final class SettingsFragment extends InputMethodSettingsFragment
textCorrectionGroup.removePreference(dictionaryLink);
}
+ final Preference editPersonalDictionary =
+ findPreference(Settings.PREF_EDIT_PERSONAL_DICTIONARY);
+ final Intent editPersonalDictionaryIntent = editPersonalDictionary.getIntent();
+ final ResolveInfo ri = context.getPackageManager().resolveActivity(
+ editPersonalDictionaryIntent, PackageManager.MATCH_DEFAULT_ONLY);
+ if (ri == null) {
+ // TODO: Set a intent that invokes our own edit personal dictionary activity.
+ Log.w(TAG, "No activity that responds to " + editPersonalDictionaryIntent.getAction());
+ }
+
if (!Settings.readFromBuildConfigIfGestureInputEnabled(res)) {
removePreference(Settings.PREF_GESTURE_SETTINGS, getPreferenceScreen());
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 2f9e34ff1..bef8a3cf1 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -80,6 +80,7 @@ public final class SubtypeSwitcher {
public static void init(final Context context) {
SubtypeLocale.init(context);
+ RichInputMethodManager.init(context);
sInstance.initialize(context);
}
@@ -87,10 +88,13 @@ public final class SubtypeSwitcher {
// Intentional empty constructor for singleton.
}
- private void initialize(final Context service) {
- mResources = service.getResources();
+ private void initialize(final Context context) {
+ if (mResources != null) {
+ return;
+ }
+ mResources = context.getResources();
mRichImm = RichInputMethodManager.getInstance();
- mConnectivityManager = (ConnectivityManager) service.getSystemService(
+ mConnectivityManager = (ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
mNoLanguageSubtype = mRichImm.findSubtypeByLocaleAndKeyboardLayoutSet(
SubtypeLocale.NO_LANGUAGE, SubtypeLocale.QWERTY);
diff --git a/java/src/com/android/inputmethod/latin/Utils.java b/java/src/com/android/inputmethod/latin/Utils.java
index aff5d17d7..fc32bd45e 100644
--- a/java/src/com/android/inputmethod/latin/Utils.java
+++ b/java/src/com/android/inputmethod/latin/Utils.java
@@ -21,6 +21,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.inputmethodservice.InputMethodService;
@@ -473,4 +474,18 @@ public final class Utils {
}
return 0;
}
+
+ public static String getSdkVersion(Context context) {
+ try {
+ if (context == null) {
+ return "";
+ }
+ final String packageName = context.getPackageName();
+ PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
+ return info.versionName;
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Could not find version info.", e);
+ }
+ return "";
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupActivity.java b/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
index 15d0bac37..a7a41719e 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupActivity.java
@@ -17,11 +17,12 @@
package com.android.inputmethod.latin.setup;
import android.app.Activity;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
+import android.media.MediaPlayer;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.provider.Settings;
@@ -29,6 +30,7 @@ import android.view.View;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
+import android.widget.VideoView;
import com.android.inputmethod.compat.TextViewCompatUtils;
import com.android.inputmethod.compat.ViewCompatUtils;
@@ -40,14 +42,23 @@ import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
import java.util.HashMap;
-public final class SetupActivity extends Activity {
+// TODO: Use Fragment to implement welcome screen and setup steps.
+public final class SetupActivity extends Activity implements View.OnClickListener {
+ private View mWelcomeScreen;
+ private View mSetupScreen;
private SetupStepIndicatorView mStepIndicatorView;
- private final SetupStepGroup mSetupSteps = new SetupStepGroup();
+ private Uri mWelcomeVideoUri;
+ private VideoView mWelcomeVideoView;
+ private View mActionStart;
+ private TextView mActionFinish;
+ private final SetupStepGroup mSetupStepGroup = new SetupStepGroup();
private static final String STATE_STEP = "step";
private int mStepNumber;
+ private static final int STEP_0 = 0;
private static final int STEP_1 = 1;
private static final int STEP_2 = 2;
private static final int STEP_3 = 3;
+ private boolean mWasLanguageAndInputSettingsInvoked;
private final SettingsPoolingHandler mHandler = new SettingsPoolingHandler(this);
@@ -109,17 +120,21 @@ public final class SetupActivity extends Activity {
return;
}
- // TODO: Use sans-serif-thin font family depending on the system locale white list and
- // the SDK version.
- final TextView titleView = (TextView)findViewById(R.id.setup_title);
- final int appName = getApplicationInfo().labelRes;
- titleView.setText(getString(R.string.setup_title, getString(appName)));
+ final String applicationName = getResources().getString(getApplicationInfo().labelRes);
+ mWelcomeScreen = findViewById(R.id.setup_welcome_screen);
+ final TextView welcomeTitle = (TextView)findViewById(R.id.setup_welcome_title);
+ welcomeTitle.setText(getString(R.string.setup_welcome_title, applicationName));
+
+ mSetupScreen = findViewById(R.id.setup_steps_screen);
+ final TextView stepsTitle = (TextView)findViewById(R.id.setup_title);
+ stepsTitle.setText(getString(R.string.setup_steps_title, applicationName));
mStepIndicatorView = (SetupStepIndicatorView)findViewById(R.id.setup_step_indicator);
- final SetupStep step1 = new SetupStep(findViewById(R.id.setup_step1),
- appName, R.string.setup_step1_title, R.string.setup_step1_instruction,
- R.drawable.ic_settings_language, R.string.language_settings);
+ final SetupStep step1 = new SetupStep(applicationName,
+ (TextView)findViewById(R.id.setup_step1_bullet), findViewById(R.id.setup_step1),
+ R.string.setup_step1_title, R.string.setup_step1_instruction,
+ R.drawable.ic_setup_step1, R.string.setup_step1_action);
step1.setAction(new Runnable() {
@Override
public void run() {
@@ -127,11 +142,12 @@ public final class SetupActivity extends Activity {
mHandler.startPollingImeSettings();
}
});
- mSetupSteps.addStep(STEP_1, step1);
+ mSetupStepGroup.addStep(STEP_1, step1);
- final SetupStep step2 = new SetupStep(findViewById(R.id.setup_step2),
- appName, R.string.setup_step2_title, R.string.setup_step2_instruction,
- 0 /* actionIcon */, R.string.select_input_method);
+ final SetupStep step2 = new SetupStep(applicationName,
+ (TextView)findViewById(R.id.setup_step2_bullet), findViewById(R.id.setup_step2),
+ R.string.setup_step2_title, R.string.setup_step2_instruction,
+ R.drawable.ic_setup_step2, R.string.setup_step2_action);
step2.setAction(new Runnable() {
@Override
public void run() {
@@ -140,18 +156,52 @@ public final class SetupActivity extends Activity {
.showInputMethodPicker();
}
});
- mSetupSteps.addStep(STEP_2, step2);
+ mSetupStepGroup.addStep(STEP_2, step2);
- final SetupStep step3 = new SetupStep(findViewById(R.id.setup_step3),
- appName, R.string.setup_step3_title, 0 /* instruction */,
- R.drawable.sym_keyboard_language_switch, R.string.setup_step3_instruction);
+ final SetupStep step3 = new SetupStep(applicationName,
+ (TextView)findViewById(R.id.setup_step3_bullet), findViewById(R.id.setup_step3),
+ R.string.setup_step3_title, R.string.setup_step3_instruction,
+ R.drawable.ic_setup_step3, R.string.setup_step3_action);
step3.setAction(new Runnable() {
@Override
public void run() {
invokeSubtypeEnablerOfThisIme();
}
});
- mSetupSteps.addStep(STEP_3, step3);
+ mSetupStepGroup.addStep(STEP_3, step3);
+
+ mWelcomeVideoUri = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
+ .authority(getPackageName())
+ .path(Integer.toString(R.raw.setup_welcome_video))
+ .build();
+ mWelcomeVideoView = (VideoView)findViewById(R.id.setup_welcome_video);
+ mWelcomeVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(final MediaPlayer mp) {
+ mp.start();
+ }
+ });
+
+ mActionStart = findViewById(R.id.setup_start_label);
+ mActionStart.setOnClickListener(this);
+ mActionFinish = (TextView)findViewById(R.id.setup_finish);
+ TextViewCompatUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(mActionFinish,
+ getResources().getDrawable(R.drawable.ic_setup_finish), null, null, null);
+ mActionFinish.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(final View v) {
+ if (v == mActionStart) {
+ mStepNumber = STEP_1;
+ updateSetupStepView();
+ return;
+ }
+ if (v == mActionFinish) {
+ finish();
+ return;
+ }
}
private void invokeSetupWizardOfThisIme() {
@@ -166,7 +216,8 @@ public final class SetupActivity extends Activity {
final Intent intent = new Intent();
intent.setClass(this, SettingsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ | Intent.FLAG_ACTIVITY_CLEAR_TOP
+ | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
}
@@ -175,6 +226,7 @@ public final class SetupActivity extends Activity {
intent.setAction(Settings.ACTION_INPUT_METHOD_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
+ mWasLanguageAndInputSettingsInvoked = true;
}
private void invokeSubtypeEnablerOfThisIme() {
@@ -225,7 +277,7 @@ public final class SetupActivity extends Activity {
private int determineSetupStepNumber() {
mHandler.cancelPollingImeSettings();
if (!isThisImeEnabled(this)) {
- return STEP_1;
+ return mWasLanguageAndInputSettingsInvoked ? STEP_1 : STEP_0;
}
if (!isThisImeCurrent(this)) {
return STEP_2;
@@ -264,6 +316,22 @@ public final class SetupActivity extends Activity {
}
@Override
+ public void onBackPressed() {
+ if (mStepNumber == STEP_1) {
+ mStepNumber = STEP_0;
+ updateSetupStepView();
+ return;
+ }
+ super.onBackPressed();
+ }
+
+ @Override
+ protected void onPause() {
+ mWelcomeVideoView.stopPlayback();
+ super.onPause();
+ }
+
+ @Override
public void onWindowFocusChanged(final boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!hasFocus) {
@@ -274,10 +342,20 @@ public final class SetupActivity extends Activity {
}
private void updateSetupStepView() {
+ final boolean welcomeScreen = (mStepNumber == STEP_0);
+ mWelcomeScreen.setVisibility(welcomeScreen ? View.VISIBLE : View.GONE);
+ mSetupScreen.setVisibility(welcomeScreen ? View.GONE: View.VISIBLE);
+ if (welcomeScreen) {
+ mWelcomeVideoView.setVideoURI(mWelcomeVideoUri);
+ mWelcomeVideoView.start();
+ return;
+ }
+ mWelcomeVideoView.stopPlayback();
final int layoutDirection = ViewCompatUtils.getLayoutDirection(mStepIndicatorView);
mStepIndicatorView.setIndicatorPosition(
- getIndicatorPosition(mStepNumber, mSetupSteps.getTotalStep(), layoutDirection));
- mSetupSteps.enableStep(mStepNumber);
+ getIndicatorPosition(mStepNumber, mSetupStepGroup.getTotalStep(), layoutDirection));
+ mSetupStepGroup.enableStep(mStepNumber);
+ mActionFinish.setVisibility((mStepNumber == STEP_3) ? View.VISIBLE : View.GONE);
}
private static float getIndicatorPosition(final int step, final int totalStep,
@@ -287,20 +365,26 @@ public final class SetupActivity extends Activity {
}
static final class SetupStep implements View.OnClickListener {
- private final View mRootView;
+ private final View mStepView;
+ private final TextView mBulletView;
+ private final int mActivatedColor;
+ private final int mDeactivatedColor;
private final TextView mActionLabel;
private Runnable mAction;
- public SetupStep(final View rootView, final int appName, final int title,
- final int instruction, final int actionIcon, final int actionLabel) {
- mRootView = rootView;
- final Resources res = rootView.getResources();
- final String applicationName = res.getString(appName);
+ public SetupStep(final String applicationName, final TextView bulletView,
+ final View stepView, final int title, final int instruction, final int actionIcon,
+ final int actionLabel) {
+ mStepView = stepView;
+ mBulletView = bulletView;
+ final Resources res = stepView.getResources();
+ mActivatedColor = res.getColor(R.color.setup_text_action);
+ mDeactivatedColor = res.getColor(R.color.setup_text_dark);
- final TextView titleView = (TextView)rootView.findViewById(R.id.setup_step_title);
+ final TextView titleView = (TextView)mStepView.findViewById(R.id.setup_step_title);
titleView.setText(res.getString(title, applicationName));
- final TextView instructionView = (TextView)rootView.findViewById(
+ final TextView instructionView = (TextView)mStepView.findViewById(
R.id.setup_step_instruction);
if (instruction == 0) {
instructionView.setVisibility(View.GONE);
@@ -308,23 +392,20 @@ public final class SetupActivity extends Activity {
instructionView.setText(res.getString(instruction, applicationName));
}
- mActionLabel = (TextView)rootView.findViewById(R.id.setup_step_action_label);
+ mActionLabel = (TextView)mStepView.findViewById(R.id.setup_step_action_label);
mActionLabel.setText(res.getString(actionLabel));
if (actionIcon == 0) {
final int paddingEnd = ViewCompatUtils.getPaddingEnd(mActionLabel);
ViewCompatUtils.setPaddingRelative(mActionLabel, paddingEnd, 0, paddingEnd, 0);
} else {
- final int overrideColor = res.getColor(R.color.setup_text_action);
- final Drawable icon = res.getDrawable(actionIcon);
- icon.setColorFilter(overrideColor, PorterDuff.Mode.MULTIPLY);
- icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
- TextViewCompatUtils.setCompoundDrawablesRelative(
- mActionLabel, icon, null, null, null);
+ TextViewCompatUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(
+ mActionLabel, res.getDrawable(actionIcon), null, null, null);
}
}
public void setEnabled(final boolean enabled) {
- mRootView.setVisibility(enabled ? View.VISIBLE : View.GONE);
+ mStepView.setVisibility(enabled ? View.VISIBLE : View.GONE);
+ mBulletView.setTextColor(enabled ? mActivatedColor : mDeactivatedColor);
}
public void setAction(final Runnable action) {
@@ -334,8 +415,9 @@ public final class SetupActivity extends Activity {
@Override
public void onClick(final View v) {
- if (mAction != null) {
+ if (v == mActionLabel && mAction != null) {
mAction.run();
+ return;
}
}
}
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
new file mode 100644
index 000000000..ca974f6b8
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.inputmethod.latin.setup;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.inputmethod.compat.ViewCompatUtils;
+import com.android.inputmethod.latin.R;
+
+public final class SetupStartIndicatorView extends LinearLayout {
+ public SetupStartIndicatorView(final Context context, final AttributeSet attrs) {
+ super(context, attrs);
+ setOrientation(HORIZONTAL);
+ LayoutInflater.from(context).inflate(R.layout.setup_start_indicator_label, this);
+
+ final LabelView labelView = (LabelView)findViewById(R.id.setup_start_label);
+ labelView.setIndicatorView(findViewById(R.id.setup_start_indicator));
+ }
+
+ public static final class LabelView extends TextView {
+ private View mIndicatorView;
+
+ public LabelView(final Context context, final AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void setIndicatorView(final View indicatorView) {
+ mIndicatorView = indicatorView;
+ }
+
+ @Override
+ public void setPressed(final boolean pressed) {
+ super.setPressed(pressed);
+ if (mIndicatorView != null) {
+ mIndicatorView.setPressed(pressed);
+ }
+ }
+ }
+
+ public static final class IndicatorView extends View {
+ private final Path mIndicatorPath = new Path();
+ private final Paint mIndicatorPaint = new Paint();
+ private final ColorStateList mIndicatorColor;
+
+ public IndicatorView(final Context context, final AttributeSet attrs) {
+ super(context, attrs);
+ mIndicatorColor = getResources().getColorStateList(
+ R.color.setup_step_action_background);
+ mIndicatorPaint.setStyle(Paint.Style.FILL);
+ }
+
+ @Override
+ public void setPressed(final boolean pressed) {
+ super.setPressed(pressed);
+ invalidate();
+ }
+
+ @Override
+ protected void onDraw(final Canvas canvas) {
+ super.onDraw(canvas);
+ final int layoutDirection = ViewCompatUtils.getLayoutDirection(this);
+ final int width = getWidth();
+ final int height = getHeight();
+ final float halfHeight = height / 2.0f;
+ final Path path = mIndicatorPath;
+ path.rewind();
+ if (layoutDirection == ViewCompatUtils.LAYOUT_DIRECTION_RTL) {
+ // Left arrow
+ path.moveTo(width, 0.0f);
+ path.lineTo(0.0f, halfHeight);
+ path.lineTo(width, height);
+ } else { // LAYOUT_DIRECTION_LTR
+ // Right arrow
+ path.moveTo(0.0f, 0.0f);
+ path.lineTo(width, halfHeight);
+ path.lineTo(0.0f, height);
+ }
+ path.close();
+ final int[] stateSet = getDrawableState();
+ final int color = mIndicatorColor.getColorForState(stateSet, 0);
+ mIndicatorPaint.setColor(color);
+ canvas.drawPath(path, mIndicatorPaint);
+ }
+ }
+}
diff --git a/java/src/com/android/inputmethod/research/FeedbackFragment.java b/java/src/com/android/inputmethod/research/FeedbackFragment.java
index 39f9c87a0..a0738292e 100644
--- a/java/src/com/android/inputmethod/research/FeedbackFragment.java
+++ b/java/src/com/android/inputmethod/research/FeedbackFragment.java
@@ -65,12 +65,10 @@ public class FeedbackFragment extends Fragment implements OnClickListener {
mCancelButton.setOnClickListener(this);
if (savedInstanceState != null) {
- Log.d(TAG, "restoring from savedInstanceState");
restoreState(savedInstanceState);
} else {
final Bundle bundle = getActivity().getIntent().getExtras();
if (bundle != null) {
- Log.d(TAG, "restoring from getArguments()");
restoreState(bundle);
}
}
@@ -81,10 +79,7 @@ public class FeedbackFragment extends Fragment implements OnClickListener {
public void onClick(final View view) {
final ResearchLogger researchLogger = ResearchLogger.getInstance();
if (view == mIncludingUserRecordingCheckBox) {
- if (hasUserRecording()) {
- // Remove the recording
- setHasUserRecording(false);
- } else {
+ if (mIncludingUserRecordingCheckBox.isChecked()) {
final Bundle bundle = new Bundle();
onSaveInstanceState(bundle);
@@ -103,9 +98,9 @@ public class FeedbackFragment extends Fragment implements OnClickListener {
R.string.research_feedback_empty_feedback_error_message,
Toast.LENGTH_LONG).show();
} else {
- final boolean isIncludingAccountName = isIncludingAccountName();
- researchLogger.sendFeedback(feedbackContents,
- false /* isIncludingHistory */, isIncludingAccountName, hasUserRecording());
+ final boolean isIncludingAccountName = mIncludingAccountNameCheckBox.isChecked();
+ researchLogger.sendFeedback(feedbackContents, false /* isIncludingHistory */,
+ isIncludingAccountName, mIncludingUserRecordingCheckBox.isChecked());
getActivity().finish();
researchLogger.setFeedbackDialogBundle(null);
researchLogger.onLeavingSendFeedbackDialog();
@@ -125,29 +120,13 @@ public class FeedbackFragment extends Fragment implements OnClickListener {
final String savedFeedbackString = mEditText.getText().toString();
bundle.putString(KEY_FEEDBACK_STRING, savedFeedbackString);
- bundle.putBoolean(KEY_INCLUDE_ACCOUNT_NAME, isIncludingAccountName());
- bundle.putBoolean(KEY_HAS_USER_RECORDING, hasUserRecording());
+ bundle.putBoolean(KEY_INCLUDE_ACCOUNT_NAME, mIncludingAccountNameCheckBox.isChecked());
+ bundle.putBoolean(KEY_HAS_USER_RECORDING, mIncludingUserRecordingCheckBox.isChecked());
}
- public void restoreState(final Bundle bundle) {
+ private void restoreState(final Bundle bundle) {
mEditText.setText(bundle.getString(KEY_FEEDBACK_STRING));
- setIsIncludingAccountName(bundle.getBoolean(KEY_INCLUDE_ACCOUNT_NAME));
- setHasUserRecording(bundle.getBoolean(KEY_HAS_USER_RECORDING));
- }
-
- private boolean hasUserRecording() {
- return mIncludingUserRecordingCheckBox.isChecked();
- }
-
- private void setHasUserRecording(final boolean hasRecording) {
- mIncludingUserRecordingCheckBox.setChecked(hasRecording);
- }
-
- private boolean isIncludingAccountName() {
- return mIncludingAccountNameCheckBox.isChecked();
- }
-
- private void setIsIncludingAccountName(final boolean isIncludingAccountName) {
- mIncludingAccountNameCheckBox.setChecked(isIncludingAccountName);
+ mIncludingAccountNameCheckBox.setChecked(bundle.getBoolean(KEY_INCLUDE_ACCOUNT_NAME));
+ mIncludingUserRecordingCheckBox.setChecked(bundle.getBoolean(KEY_HAS_USER_RECORDING));
}
}
diff --git a/java/src/com/android/inputmethod/research/FixedLogBuffer.java b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
index 78dc59562..4249af544 100644
--- a/java/src/com/android/inputmethod/research/FixedLogBuffer.java
+++ b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
@@ -51,38 +51,35 @@ public class FixedLogBuffer extends LogBuffer {
mNumActualWords = 0;
}
- protected int getNumActualWords() {
- return mNumActualWords;
- }
-
/**
* Adds a new LogUnit to the front of the LIFO queue, evicting existing LogUnit's
* (oldest first) if word capacity is reached.
*/
@Override
public void shiftIn(final LogUnit newLogUnit) {
- if (!newLogUnit.hasWord()) {
- // This LogUnit isn't a word, so it doesn't count toward the word-limit.
+ if (!newLogUnit.hasOneOrMoreWords()) {
+ // This LogUnit doesn't contain any word, so it doesn't count toward the word-limit.
super.shiftIn(newLogUnit);
return;
}
+ final int numWordsIncoming = newLogUnit.getNumWords();
if (mNumActualWords >= mWordCapacity) {
// Give subclass a chance to handle the buffer full condition by shifting out logUnits.
onBufferFull();
// If still full, evict.
if (mNumActualWords >= mWordCapacity) {
- shiftOutWords(1);
+ shiftOutWords(numWordsIncoming);
}
}
super.shiftIn(newLogUnit);
- mNumActualWords++; // Must be a word, or we wouldn't be here.
+ mNumActualWords += numWordsIncoming;
}
@Override
public LogUnit unshiftIn() {
final LogUnit logUnit = super.unshiftIn();
- if (logUnit != null && logUnit.hasWord()) {
- mNumActualWords--;
+ if (logUnit != null && logUnit.hasOneOrMoreWords()) {
+ mNumActualWords -= logUnit.getNumWords();
}
return logUnit;
}
@@ -113,18 +110,30 @@ public class FixedLogBuffer extends LogBuffer {
@Override
public LogUnit shiftOut() {
final LogUnit logUnit = super.shiftOut();
- if (logUnit != null && logUnit.hasWord()) {
- mNumActualWords--;
+ if (logUnit != null && logUnit.hasOneOrMoreWords()) {
+ mNumActualWords -= logUnit.getNumWords();
}
return logUnit;
}
- protected void shiftOutWords(final int numWords) {
- final int targetNumWords = mNumActualWords - numWords;
- final LinkedList<LogUnit> logUnits = getLogUnits();
- while (mNumActualWords > targetNumWords && !logUnits.isEmpty()) {
- shiftOut();
+ /**
+ * Remove LogUnits from the front of the LogBuffer until {@code numWords} have been removed.
+ *
+ * If there are less than {@code numWords} word-containing {@link LogUnit}s, shifts out
+ * all {@code LogUnit}s in the buffer.
+ *
+ * @param numWords the minimum number of word-containing {@link LogUnit}s to shift out
+ * @return the number of actual {@code LogUnit}s shifted out
+ */
+ protected int shiftOutWords(final int numWords) {
+ int numWordContainingLogUnitsShiftedOut = 0;
+ for (LogUnit logUnit = shiftOut(); logUnit != null
+ && numWordContainingLogUnitsShiftedOut < numWords; logUnit = shiftOut()) {
+ if (logUnit.hasOneOrMoreWords()) {
+ numWordContainingLogUnitsShiftedOut += logUnit.getNumWords();
+ }
}
+ return numWordContainingLogUnitsShiftedOut;
}
public void shiftOutAll() {
@@ -136,27 +145,31 @@ public class FixedLogBuffer extends LogBuffer {
}
/**
- * Returns a list of {@link LogUnit}s at the front of the buffer that have associated words. No
- * more than {@code n} LogUnits will have words associated with them. If there are not enough
- * LogUnits in the buffer to meet the word requirement, returns the all LogUnits.
+ * Returns a list of {@link LogUnit}s at the front of the buffer that have words associated with
+ * them.
+ *
+ * There will be no more than {@code n} words in the returned list. So if 2 words are
+ * requested, and the first LogUnit has 3 words, it is not returned. If 2 words are requested,
+ * and the first LogUnit has only 1 word, and the next LogUnit 2 words, only the first LogUnit
+ * is returned. If the first LogUnit has no words associated with it, and the second LogUnit
+ * has three words, then only the first LogUnit (which has no associated words) is returned. If
+ * there are not enough LogUnits in the buffer to meet the word requirement, then all LogUnits
+ * will be returned.
*
* @param n The maximum number of {@link LogUnit}s with words to return.
* @return The list of the {@link LogUnit}s containing the first n words
*/
public ArrayList<LogUnit> peekAtFirstNWords(int n) {
final LinkedList<LogUnit> logUnits = getLogUnits();
- final int length = logUnits.size();
// Allocate space for n*2 logUnits. There will be at least n, one for each word, and
// there may be additional for punctuation, between-word commands, etc. This should be
// enough that reallocation won't be necessary.
- final ArrayList<LogUnit> list = new ArrayList<LogUnit>(n * 2);
- for (int i = 0; i < length && n > 0; i++) {
- final LogUnit logUnit = logUnits.get(i);
- list.add(logUnit);
- if (logUnit.hasWord()) {
- n--;
- }
+ final ArrayList<LogUnit> resultList = new ArrayList<LogUnit>(n * 2);
+ for (final LogUnit logUnit : logUnits) {
+ n -= logUnit.getNumWords();
+ if (n < 0) break;
+ resultList.add(logUnit);
}
- return list;
+ return resultList;
}
}
diff --git a/java/src/com/android/inputmethod/research/LogUnit.java b/java/src/com/android/inputmethod/research/LogUnit.java
index 1c01675bd..4d60bda53 100644
--- a/java/src/com/android/inputmethod/research/LogUnit.java
+++ b/java/src/com/android/inputmethod/research/LogUnit.java
@@ -25,10 +25,10 @@ import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.define.ProductionFlag;
-import java.io.IOException;
-import java.io.StringWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.regex.Pattern;
/**
* A group of log statements related to each other.
@@ -49,27 +49,45 @@ public class LogUnit {
private static final boolean DEBUG = false
&& ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
+ private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+");
+ private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
private final ArrayList<LogStatement> mLogStatementList;
private final ArrayList<Object[]> mValuesList;
// Assume that mTimeList is sorted in increasing order. Do not insert null values into
// mTimeList.
private final ArrayList<Long> mTimeList;
- // Word that this LogUnit generates. Should be null if the LogUnit does not generate a genuine
- // word (i.e. separators alone do not count as a word). Should never be empty.
- private String mWord;
+ // Words that this LogUnit generates. Should be null if the data in the LogUnit does not
+ // generate a genuine word (i.e. separators alone do not count as a word). Should never be
+ // empty. Note that if the user types spaces explicitly, then normally mWords should contain
+ // only a single word; it will only contain space-separate multiple words if the user does not
+ // enter a space, and the system enters one automatically.
+ private String mWords;
+ private String[] mWordArray = EMPTY_STRING_ARRAY;
private boolean mMayContainDigit;
private boolean mIsPartOfMegaword;
private boolean mContainsCorrection;
- // mCorrectionType indicates whether the word was corrected at all, and if so, whether it was
- // to a different word or just a "typo" correction. It is considered a "typo" if the final
- // word was listed in the suggestions available the first time the word was gestured or
- // tapped.
+ // mCorrectionType indicates whether the word was corrected at all, and if so, the nature of the
+ // correction.
private int mCorrectionType;
+ // LogUnits start in this state. If a word is entered without being corrected, it will have
+ // this CorrectiontType.
public static final int CORRECTIONTYPE_NO_CORRECTION = 0;
+ // The LogUnit was corrected manually by the user in an unspecified way.
public static final int CORRECTIONTYPE_CORRECTION = 1;
+ // The LogUnit was corrected manually by the user to a word not in the list of suggestions of
+ // the first word typed here. (Note: this is a heuristic value, it may be incorrect, for
+ // example, if the user repositions the cursor).
public static final int CORRECTIONTYPE_DIFFERENT_WORD = 2;
+ // The LogUnit was corrected manually by the user to a word that was in the list of suggestions
+ // of the first word typed here. (Again, a heuristic). It is probably a typo correction.
public static final int CORRECTIONTYPE_TYPO = 3;
+ // TODO: Rather than just tracking the current state, keep a historical record of the LogUnit's
+ // state and statistics. This should include how many times it has been corrected, whether
+ // other LogUnit edits were done between edits to this LogUnit, etc. Also track when a LogUnit
+ // previously contained a word, but was corrected to empty (because it was deleted, and there is
+ // no known replacement).
private SuggestedWords mSuggestedWords;
@@ -166,7 +184,7 @@ public class LogUnit {
final LogStatement logStatement;
if (canIncludePrivateData) {
LOGSTATEMENT_LOG_UNIT_BEGIN_WITH_PRIVATE_DATA.outputToLocked(jsonWriter,
- SystemClock.uptimeMillis(), getWord(), getCorrectionType());
+ SystemClock.uptimeMillis(), getWordsAsString(), getCorrectionType());
} else {
LOGSTATEMENT_LOG_UNIT_BEGIN_WITHOUT_PRIVATE_DATA.outputToLocked(jsonWriter,
SystemClock.uptimeMillis());
@@ -181,22 +199,22 @@ public class LogUnit {
}
/**
- * Mark the current logUnit as containing data to generate {@code word}.
+ * Mark the current logUnit as containing data to generate {@code newWords}.
*
* If {@code setWord()} was previously called for this LogUnit, then the method will try to
* determine what kind of correction it is, and update its internal state of the correctionType
* accordingly.
*
- * @param word The word this LogUnit generates. Caller should not pass null or the empty
+ * @param newWords The words this LogUnit generates. Caller should not pass null or the empty
* string.
*/
- public void setWord(final String word) {
- if (hasWord()) {
+ public void setWords(final String newWords) {
+ if (hasOneOrMoreWords()) {
// The word was already set once, and it is now being changed. See if the new word
// is close to the old word. If so, then the change is probably a typo correction.
// If not, the user may have decided to enter a different word, so flag it.
if (mSuggestedWords != null) {
- if (isInSuggestedWords(word, mSuggestedWords)) {
+ if (isInSuggestedWords(newWords, mSuggestedWords)) {
mCorrectionType = CORRECTIONTYPE_TYPO;
} else {
mCorrectionType = CORRECTIONTYPE_DIFFERENT_WORD;
@@ -206,38 +224,71 @@ public class LogUnit {
// Mark it as a generic correction.
mCorrectionType = CORRECTIONTYPE_CORRECTION;
}
+ } else {
+ mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
+ }
+ mWords = newWords;
+
+ // Update mWordArray
+ mWordArray = (TextUtils.isEmpty(mWords)) ? EMPTY_STRING_ARRAY
+ : WHITESPACE_PATTERN.split(mWords);
+ if (mWordArray.length > 0 && TextUtils.isEmpty(mWordArray[0])) {
+ // Empty string at beginning of array. Must have been whitespace at the start of the
+ // word. Remove the empty string.
+ mWordArray = Arrays.copyOfRange(mWordArray, 1, mWordArray.length);
}
- mWord = word;
}
- public String getWord() {
- return mWord;
+ public String getWordsAsString() {
+ return mWords;
+ }
+
+ /**
+ * Retuns the words generated by the data in this LogUnit.
+ *
+ * The first word may be an empty string, if the data in the LogUnit started by generating
+ * whitespace.
+ *
+ * @return the array of words. an empty list of there are no words associated with this LogUnit.
+ */
+ public String[] getWordsAsStringArray() {
+ return mWordArray;
+ }
+
+ public boolean hasOneOrMoreWords() {
+ return mWordArray.length >= 1;
}
- public boolean hasWord() {
- return mWord != null && !TextUtils.isEmpty(mWord.trim());
+ public int getNumWords() {
+ return mWordArray.length;
}
+ // TODO: Refactor to eliminate getter/setters
public void setMayContainDigit() {
mMayContainDigit = true;
}
+ // TODO: Refactor to eliminate getter/setters
public boolean mayContainDigit() {
return mMayContainDigit;
}
+ // TODO: Refactor to eliminate getter/setters
public void setContainsCorrection() {
mContainsCorrection = true;
}
+ // TODO: Refactor to eliminate getter/setters
public boolean containsCorrection() {
return mContainsCorrection;
}
+ // TODO: Refactor to eliminate getter/setters
public void setCorrectionType(final int correctionType) {
mCorrectionType = correctionType;
}
+ // TODO: Refactor to eliminate getter/setters
public int getCorrectionType() {
return mCorrectionType;
}
@@ -267,7 +318,7 @@ public class LogUnit {
new ArrayList<Object[]>(laterValues),
new ArrayList<Long>(laterTimes),
true /* isPartOfMegaword */);
- newLogUnit.mWord = null;
+ newLogUnit.mWords = null;
newLogUnit.mMayContainDigit = mMayContainDigit;
newLogUnit.mContainsCorrection = mContainsCorrection;
@@ -287,9 +338,9 @@ public class LogUnit {
mLogStatementList.addAll(logUnit.mLogStatementList);
mValuesList.addAll(logUnit.mValuesList);
mTimeList.addAll(logUnit.mTimeList);
- mWord = null;
- if (logUnit.mWord != null) {
- setWord(logUnit.mWord);
+ mWords = null;
+ if (logUnit.mWords != null) {
+ setWords(logUnit.mWords);
}
mMayContainDigit = mMayContainDigit || logUnit.mMayContainDigit;
mContainsCorrection = mContainsCorrection || logUnit.mContainsCorrection;
diff --git a/java/src/com/android/inputmethod/research/MainLogBuffer.java b/java/src/com/android/inputmethod/research/MainLogBuffer.java
index 3303d2bdb..42ef5d3b6 100644
--- a/java/src/com/android/inputmethod/research/MainLogBuffer.java
+++ b/java/src/com/android/inputmethod/research/MainLogBuffer.java
@@ -25,7 +25,6 @@ import com.android.inputmethod.latin.define.ProductionFlag;
import java.util.ArrayList;
import java.util.LinkedList;
-import java.util.Random;
/**
* MainLogBuffer is a FixedLogBuffer that tracks the state of LogUnits to make privacy guarantees.
@@ -100,10 +99,6 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
return mSuggest.getMainDictionary();
}
- public void resetWordCounter() {
- mNumWordsUntilSafeToSample = mNumWordsBetweenNGrams;
- }
-
public void setIsStopping() {
mIsStopping = true;
}
@@ -131,10 +126,7 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
final int length = logUnits.size();
for (int i = 0; i < length; i++) {
final LogUnit logUnit = logUnits.get(i);
- final String word = logUnit.getWord();
- if (word != null) {
- numWordsInLogUnitList++;
- }
+ numWordsInLogUnitList += logUnit.getNumWords();
}
return numWordsInLogUnitList >= minNGramSize;
}
@@ -158,29 +150,31 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// the complete buffer contents in detail.
int numWordsInLogUnitList = 0;
final int length = logUnits.size();
- for (int i = 0; i < length; i++) {
- final LogUnit logUnit = logUnits.get(i);
- if (!logUnit.hasWord()) {
+ for (final LogUnit logUnit : logUnits) {
+ if (!logUnit.hasOneOrMoreWords()) {
// Digits outside words are a privacy threat.
if (logUnit.mayContainDigit()) {
return false;
}
} else {
- numWordsInLogUnitList++;
- final String word = logUnit.getWord();
- // Words not in the dictionary are a privacy threat.
- if (ResearchLogger.hasLetters(word) && !(dictionary.isValidWord(word))) {
- if (DEBUG) {
- Log.d(TAG, "NOT SAFE!: hasLetters: " + ResearchLogger.hasLetters(word)
- + ", isValid: " + (dictionary.isValidWord(word)));
+ numWordsInLogUnitList += logUnit.getNumWords();
+ final String[] words = logUnit.getWordsAsStringArray();
+ for (final String word : words) {
+ // Words not in the dictionary are a privacy threat.
+ if (ResearchLogger.hasLetters(word) && !(dictionary.isValidWord(word))) {
+ if (DEBUG) {
+ Log.d(TAG, "\"" + word + "\" NOT SAFE!: hasLetters: "
+ + ResearchLogger.hasLetters(word)
+ + ", isValid: " + (dictionary.isValidWord(word)));
+ }
+ return false;
}
- return false;
}
}
}
- // Finally, only return true if the minNGramSize is met.
- return numWordsInLogUnitList >= minNGramSize;
+ // Finally, only return true if the ngram is the right size.
+ return numWordsInLogUnitList == minNGramSize;
}
public void shiftAndPublishAll() {
@@ -201,13 +195,16 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
// Good n-gram at the front of the buffer. Publish it, disclosing details.
publish(logUnits, true /* canIncludePrivateData */);
shiftOutWords(N_GRAM_SIZE);
- resetWordCounter();
+ mNumWordsUntilSafeToSample = mNumWordsBetweenNGrams;
} else {
- // No good n-gram at front, and buffer is full. Shift out the first word (or if there
- // is none, the existing logUnits).
- logUnits = peekAtFirstNWords(1);
+ // No good n-gram at front, and buffer is full. Shift out up through the first logUnit
+ // with associated words (or if there is none, all the existing logUnits).
+ logUnits.clear();
+ for (LogUnit logUnit = shiftOut(); logUnit != null && !logUnit.hasOneOrMoreWords();
+ logUnit = shiftOut()) {
+ logUnits.add(logUnit);
+ }
publish(logUnits, false /* canIncludePrivateData */);
- shiftOutWords(1);
}
}
@@ -224,13 +221,13 @@ public abstract class MainLogBuffer extends FixedLogBuffer {
final boolean canIncludePrivateData);
@Override
- protected void shiftOutWords(final int numWords) {
- final int oldNumActualWords = getNumActualWords();
- super.shiftOutWords(numWords);
- final int numWordsShifted = oldNumActualWords - getNumActualWords();
- mNumWordsUntilSafeToSample -= numWordsShifted;
+ protected int shiftOutWords(final int numWords) {
+ final int numWordContainingLogUnitsShiftedOut = super.shiftOutWords(numWords);
+ mNumWordsUntilSafeToSample = Math.max(0, mNumWordsUntilSafeToSample
+ - numWordContainingLogUnitsShiftedOut);
if (DEBUG) {
Log.d(TAG, "wordsUntilSafeToSample now at " + mNumWordsUntilSafeToSample);
}
+ return numWordContainingLogUnitsShiftedOut;
}
}
diff --git a/java/src/com/android/inputmethod/research/ResearchLog.java b/java/src/com/android/inputmethod/research/ResearchLog.java
index 35a491f2c..18bf7ba54 100644
--- a/java/src/com/android/inputmethod/research/ResearchLog.java
+++ b/java/src/com/android/inputmethod/research/ResearchLog.java
@@ -108,10 +108,14 @@ public class ResearchLog {
@Override
public Object call() throws Exception {
try {
- if (mHasWrittenData) {
- mJsonWriter.endArray();
- mHasWrittenData = false;
+ // TODO: This is necessary to avoid an exception. Better would be to not even
+ // open the JsonWriter if the file is not even opened unless there is valid data
+ // to write.
+ if (!mHasWrittenData) {
+ mJsonWriter.beginArray();
}
+ mJsonWriter.endArray();
+ mHasWrittenData = false;
mJsonWriter.flush();
mJsonWriter.close();
if (DEBUG) {
@@ -159,6 +163,12 @@ public class ResearchLog {
public Object call() throws Exception {
try {
if (mHasWrittenData) {
+ // TODO: This is necessary to avoid an exception. Better would be to not
+ // even open the JsonWriter if the file is not even opened unless there is
+ // valid data to write.
+ if (!mHasWrittenData) {
+ mJsonWriter.beginArray();
+ }
mJsonWriter.endArray();
mJsonWriter.close();
mHasWrittenData = false;
diff --git a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
index 291dea5d0..d156068d6 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
@@ -97,15 +97,17 @@ public class ResearchLogDirectory {
}
}
- public File getLogFilePath(final long time) {
- return new File(mFilesDir, getUniqueFilename(LOG_FILENAME_PREFIX, time));
+ public File getLogFilePath(final long time, final long nanoTime) {
+ return new File(mFilesDir, getUniqueFilename(LOG_FILENAME_PREFIX, time, nanoTime));
}
- public File getUserRecordingFilePath(final long time) {
- return new File(mFilesDir, getUniqueFilename(USER_RECORDING_FILENAME_PREFIX, time));
+ public File getUserRecordingFilePath(final long time, final long nanoTime) {
+ return new File(mFilesDir, getUniqueFilename(USER_RECORDING_FILENAME_PREFIX, time,
+ nanoTime));
}
- private static String getUniqueFilename(final String prefix, final long time) {
- return prefix + "-" + time + FILENAME_SUFFIX;
+ private static String getUniqueFilename(final String prefix, final long time,
+ final long nanoTime) {
+ return prefix + "-" + time + "-" + nanoTime + FILENAME_SUFFIX;
}
}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index 7a23ddb05..1f6845c8b 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -389,7 +389,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
if (mMainLogBuffer == null) {
mMainResearchLog = new ResearchLog(mResearchLogDirectory.getLogFilePath(
- System.currentTimeMillis()), mLatinIME);
+ System.currentTimeMillis(), System.nanoTime()), mLatinIME);
final int numWordsToIgnore = new Random().nextInt(NUMBER_OF_WORDS_BETWEEN_SAMPLES + 1);
mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore,
mSuggest) {
@@ -397,13 +397,14 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
protected void publish(final ArrayList<LogUnit> logUnits,
boolean canIncludePrivateData) {
canIncludePrivateData |= IS_LOGGING_EVERYTHING;
- final int length = logUnits.size();
- for (int i = 0; i < length; i++) {
- final LogUnit logUnit = logUnits.get(i);
- final String word = logUnit.getWord();
- if (word != null && word.length() > 0 && hasLetters(word)) {
- Log.d(TAG, "onPublish: " + word + ", hc: "
- + logUnit.containsCorrection());
+ for (final LogUnit logUnit : logUnits) {
+ if (DEBUG) {
+ final String wordsString = logUnit.getWordsAsString();
+ Log.d(TAG, "onPublish: '" + wordsString
+ + "', hc: " + logUnit.containsCorrection()
+ + ", cipd: " + canIncludePrivateData);
+ }
+ for (final String word : logUnit.getWordsAsStringArray()) {
final Dictionary dictionary = getDictionary();
mStatistics.recordWordEntered(
dictionary != null && dictionary.isValidWord(word),
@@ -420,7 +421,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
private void resetFeedbackLogging() {
mFeedbackLog = new ResearchLog(mResearchLogDirectory.getLogFilePath(
- System.currentTimeMillis()), mLatinIME);
+ System.currentTimeMillis(), System.nanoTime()), mLatinIME);
mFeedbackLogBuffer = new FixedLogBuffer(FEEDBACK_WORD_BUFFER_SIZE);
}
@@ -545,7 +546,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
}
mUserRecordingFile = mResearchLogDirectory.getUserRecordingFilePath(
- System.currentTimeMillis());
+ System.currentTimeMillis(), System.nanoTime());
mUserRecordingLog = new ResearchLog(mUserRecordingFile, mLatinIME);
mUserRecordingLogBuffer = new LogBuffer();
resetRecordingTimer();
@@ -813,7 +814,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// enabled. The dot is actually a zero-width, zero-height rectangle, placed at the
// lower-right corner of the canvas, painted with a non-zero border width.
paint.setStrokeWidth(3);
- canvas.drawRect(width, height, width, height, paint);
+ canvas.drawRect(width - 1, height - 1, width, height, paint);
}
paint.setColor(savedColor);
paint.setStyle(savedStyle);
@@ -852,8 +853,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
/* package for test */ void commitCurrentLogUnit() {
if (DEBUG) {
- Log.d(TAG, "commitCurrentLogUnit" + (mCurrentLogUnit.hasWord() ?
- ": " + mCurrentLogUnit.getWord() : ""));
+ Log.d(TAG, "commitCurrentLogUnit" + (mCurrentLogUnit.hasOneOrMoreWords() ?
+ ": " + mCurrentLogUnit.getWordsAsString() : ""));
}
if (!mCurrentLogUnit.isEmpty()) {
if (mMainLogBuffer != null) {
@@ -893,8 +894,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
// Check that expected word matches.
if (oldLogUnit != null) {
- final String oldLogUnitWord = oldLogUnit.getWord();
- if (!oldLogUnitWord.equals(expectedWord)) {
+ final String oldLogUnitWords = oldLogUnit.getWordsAsString();
+ if (oldLogUnitWords != null && !oldLogUnitWords.equals(expectedWord)) {
return;
}
}
@@ -916,7 +917,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
enqueueEvent(LOGSTATEMENT_UNCOMMIT_CURRENT_LOGUNIT);
if (DEBUG) {
Log.d(TAG, "uncommitCurrentLogUnit (dump=" + dumpCurrentLogUnit + ") back to "
- + (mCurrentLogUnit.hasWord() ? ": '" + mCurrentLogUnit.getWord() + "'" : ""));
+ + (mCurrentLogUnit.hasOneOrMoreWords() ? ": '"
+ + mCurrentLogUnit.getWordsAsString() + "'" : ""));
}
}
@@ -950,8 +952,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
for (LogUnit logUnit : logUnits) {
if (DEBUG) {
- Log.d(TAG, "publishLogBuffer: " + (logUnit.hasWord() ? logUnit.getWord()
- : "<wordless>") + ", correction?: " + logUnit.containsCorrection());
+ Log.d(TAG, "publishLogBuffer: " + (logUnit.hasOneOrMoreWords()
+ ? logUnit.getWordsAsString() : "<wordless>")
+ + ", correction?: " + logUnit.containsCorrection());
}
researchLog.publish(logUnit, canIncludePrivateData);
}
@@ -986,7 +989,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
return;
}
if (word.length() > 0 && hasLetters(word)) {
- mCurrentLogUnit.setWord(word);
+ mCurrentLogUnit.setWords(word);
}
final LogUnit newLogUnit = mCurrentLogUnit.splitByTime(maxTime);
enqueueCommitText(word, isBatchMode);
@@ -1107,7 +1110,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
packageInfo = mLatinIME.getPackageManager().getPackageInfo(mLatinIME.getPackageName(),
0);
final String versionName = packageInfo.versionName;
- return !(developerBuildRegex.matcher(versionName).find());
+ return developerBuildRegex.matcher(versionName).find();
} catch (final NameNotFoundException e) {
Log.e(TAG, "Could not determine package name", e);
return false;
@@ -1478,7 +1481,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
if (originallyTypedWord.length() > 0 && hasLetters(originallyTypedWord)) {
if (logUnit != null) {
- logUnit.setWord(originallyTypedWord);
+ logUnit.setWords(originallyTypedWord);
}
}
researchLogger.enqueueEvent(logUnit != null ? logUnit : researchLogger.mCurrentLogUnit,
@@ -1616,7 +1619,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
* Log a call to LatinIME.commitCurrentAutoCorrection().
*
* SystemResponse: The IME has committed an auto-correction. An auto-correction changes the raw
- * text input to another word that the user more likely desired to type.
+ * text input to another word (or words) that the user more likely desired to type.
*/
private static final LogStatement LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION =
new LogStatement("LatinIMECommitCurrentAutoCorrection", true, true, "typedWord",
@@ -1826,6 +1829,9 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
public static void latinIME_onEndBatchInput(final CharSequence enteredText,
final int enteredWordPos, final SuggestedWords suggestedWords) {
final ResearchLogger researchLogger = getInstance();
+ if (!TextUtils.isEmpty(enteredText) && hasLetters(enteredText.toString())) {
+ researchLogger.mCurrentLogUnit.setWords(enteredText.toString());
+ }
researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONENDBATCHINPUT, enteredText,
enteredWordPos);
researchLogger.mCurrentLogUnit.initializeSuggestions(suggestedWords);
diff --git a/java/src/com/android/inputmethod/research/UploaderService.java b/java/src/com/android/inputmethod/research/UploaderService.java
index 6a9717b7c..d2db34927 100644
--- a/java/src/com/android/inputmethod/research/UploaderService.java
+++ b/java/src/com/android/inputmethod/research/UploaderService.java
@@ -22,6 +22,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.SystemClock;
import com.android.inputmethod.latin.define.ProductionFlag;
@@ -79,28 +80,14 @@ public final class UploaderService extends IntentService {
*/
public static void cancelAndRescheduleUploadingService(final Context context,
final boolean needsRescheduling) {
- final PendingIntent pendingIntent = getPendingIntentForService(context);
+ final Intent intent = new Intent(context, UploaderService.class);
+ final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
final AlarmManager alarmManager = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
- cancelAnyScheduledServiceAlarm(alarmManager, pendingIntent);
+ alarmManager.cancel(pendingIntent);
if (needsRescheduling) {
- scheduleServiceAlarm(alarmManager, pendingIntent);
+ alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()
+ + UploaderService.RUN_INTERVAL, pendingIntent);
}
}
-
- private static PendingIntent getPendingIntentForService(final Context context) {
- final Intent intent = new Intent(context, UploaderService.class);
- return PendingIntent.getService(context, 0, intent, 0);
- }
-
- private static void cancelAnyScheduledServiceAlarm(final AlarmManager alarmManager,
- final PendingIntent pendingIntent) {
- alarmManager.cancel(pendingIntent);
- }
-
- private static void scheduleServiceAlarm(final AlarmManager alarmManager,
- final PendingIntent pendingIntent) {
- alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, UploaderService.RUN_INTERVAL,
- pendingIntent);
- }
}