aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/AndroidManifest.xml9
-rw-r--r--java/proguard.flags25
-rw-r--r--java/res/drawable-hdpi/caution.pngbin2451 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/ic_mic_dialog.pngbin4083 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/ic_suggest_strip_microphone.pngbin970 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.pngbin795 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/mic_base.pngbin4347 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/mic_full.pngbin5013 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/mic_slash.pngbin12569 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/vs_dialog_blue.9.pngbin11064 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/vs_dialog_red.9.pngbin10976 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/vs_dialog_yellow.9.pngbin10518 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/vs_popup_mic_edge.pngbin3685 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/caution.pngbin1100 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/ic_mic_dialog.pngbin3312 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_microphone.pngbin398 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.pngbin309 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/mic_base.pngbin2957 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/mic_full.pngbin2935 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/mic_slash.pngbin7595 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/vs_dialog_blue.9.pngbin8275 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/vs_dialog_red.9.pngbin8607 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/vs_dialog_yellow.9.pngbin8151 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/vs_popup_mic_edge.pngbin3685 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/caution.pngbin3207 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/ic_mic_dialog.pngbin4755 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/ic_suggest_strip_microphone.pngbin1334 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.pngbin982 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/mic_base.pngbin6497 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/mic_full.pngbin7100 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/mic_slash.pngbin17757 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/vs_dialog_blue.9.pngbin11547 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/vs_dialog_red.9.pngbin11400 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/vs_dialog_yellow.9.pngbin10921 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/vs_popup_mic_edge.pngbin4670 -> 0 bytes
-rw-r--r--java/res/layout-sw768dp/recognition_status.xml101
-rw-r--r--java/res/layout/recognition_status.xml102
-rw-r--r--java/res/layout/voice_punctuation_hint.xml49
-rw-r--r--java/res/layout/voice_swipe_hint.xml56
-rw-r--r--java/res/values-af/strings.xml23
-rw-r--r--java/res/values-am/strings.xml23
-rw-r--r--java/res/values-ar/strings.xml24
-rw-r--r--java/res/values-be/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-be/strings.xml24
-rw-r--r--java/res/values-bg/strings.xml24
-rw-r--r--java/res/values-ca/strings.xml23
-rw-r--r--java/res/values-cs/strings.xml24
-rw-r--r--java/res/values-da/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-da/strings.xml23
-rw-r--r--java/res/values-de/strings.xml23
-rw-r--r--java/res/values-el/strings.xml25
-rw-r--r--java/res/values-en-rGB/strings.xml24
-rw-r--r--java/res/values-es-rUS/strings.xml24
-rw-r--r--java/res/values-es/strings.xml23
-rw-r--r--java/res/values-et/donottranslate-more-keys.xml8
-rw-r--r--java/res/values-et/strings.xml24
-rw-r--r--java/res/values-fa/strings.xml24
-rw-r--r--java/res/values-fi/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-fi/strings.xml24
-rw-r--r--java/res/values-fr/strings.xml23
-rw-r--r--java/res/values-hi/donottranslate-more-keys.xml51
-rw-r--r--java/res/values-hi/strings.xml24
-rw-r--r--java/res/values-hr/strings.xml24
-rw-r--r--java/res/values-hu/strings.xml24
-rw-r--r--java/res/values-in/strings.xml26
-rw-r--r--java/res/values-is/donottranslate-more-keys.xml6
-rw-r--r--java/res/values-it/strings.xml23
-rw-r--r--java/res/values-iw/strings.xml24
-rw-r--r--java/res/values-ja/strings.xml24
-rw-r--r--java/res/values-ko/strings.xml24
-rw-r--r--java/res/values-ky/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-lt/strings.xml24
-rw-r--r--java/res/values-lv/strings.xml23
-rw-r--r--java/res/values-mk/donottranslate-more-keys.xml9
-rw-r--r--java/res/values-ms/strings.xml26
-rw-r--r--java/res/values-nb/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-nb/strings.xml28
-rw-r--r--java/res/values-nl/donottranslate-more-keys.xml7
-rw-r--r--java/res/values-nl/strings.xml23
-rw-r--r--java/res/values-pl/strings.xml24
-rw-r--r--java/res/values-pt-rPT/strings.xml23
-rw-r--r--java/res/values-pt/strings.xml25
-rw-r--r--java/res/values-rm/strings.xml27
-rw-r--r--java/res/values-ro/strings.xml24
-rw-r--r--java/res/values-ru/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-ru/strings.xml24
-rw-r--r--java/res/values-sk/strings.xml26
-rw-r--r--java/res/values-sl/strings.xml23
-rw-r--r--java/res/values-sr/donottranslate-more-keys.xml47
-rw-r--r--java/res/values-sr/strings.xml24
-rw-r--r--java/res/values-sv/donottranslate-more-keys.xml10
-rw-r--r--java/res/values-sv/strings.xml23
-rw-r--r--java/res/values-sw/strings.xml23
-rw-r--r--java/res/values-th/strings.xml24
-rw-r--r--java/res/values-tl/strings.xml24
-rw-r--r--java/res/values-tr/strings.xml24
-rw-r--r--java/res/values-uk/donottranslate-more-keys.xml12
-rw-r--r--java/res/values-uk/strings.xml23
-rw-r--r--java/res/values-vi/strings.xml24
-rw-r--r--java/res/values-zh-rCN/strings.xml24
-rw-r--r--java/res/values-zh-rTW/strings.xml24
-rw-r--r--java/res/values-zu/strings.xml23
-rw-r--r--java/res/values-zz/donottranslate-more-keys.xml139
-rw-r--r--java/res/values/attrs.xml5
-rw-r--r--java/res/values/donottranslate-more-keys.xml42
-rw-r--r--java/res/values/donottranslate.xml8
-rw-r--r--java/res/values/strings.xml72
-rw-r--r--java/res/xml-ar/keyboard_set.xml3
-rw-r--r--java/res/xml-be/keyboard_set.xml3
-rw-r--r--java/res/xml-bg/keyboard_set.xml3
-rw-r--r--java/res/xml-cs/keyboard_set.xml3
-rw-r--r--java/res/xml-da/keyboard_set.xml3
-rw-r--r--java/res/xml-de-rQY/keyboard_set.xml (renamed from java/res/xml-de-rZZ/keyboard_set.xml)3
-rw-r--r--java/res/xml-de/keyboard_set.xml3
-rw-r--r--java/res/xml-el/keyboard_set.xml3
-rw-r--r--java/res/xml-es/keyboard_set.xml3
-rw-r--r--java/res/xml-et/keyboard_set.xml3
-rw-r--r--java/res/xml-fa/keyboard_set.xml3
-rw-r--r--java/res/xml-fi/keyboard_set.xml3
-rw-r--r--java/res/xml-fr-rCA/keyboard_set.xml3
-rw-r--r--java/res/xml-fr-rCH/keyboard_set.xml3
-rw-r--r--java/res/xml-fr/keyboard_set.xml3
-rw-r--r--java/res/xml-hi/keyboard_set.xml3
-rw-r--r--java/res/xml-hr/keyboard_set.xml3
-rw-r--r--java/res/xml-hu/keyboard_set.xml3
-rw-r--r--java/res/xml-is/keyboard_set.xml3
-rw-r--r--java/res/xml-iw/keyboard_set.xml7
-rw-r--r--java/res/xml-ka/keyboard_set.xml3
-rw-r--r--java/res/xml-ky/keyboard_set.xml3
-rw-r--r--java/res/xml-mk/keyboard_set.xml3
-rw-r--r--java/res/xml-nb/keyboard_set.xml3
-rw-r--r--java/res/xml-pl/keyboard_set.xml3
-rw-r--r--java/res/xml-pt/keyboard_set.xml3
-rw-r--r--java/res/xml-ro/keyboard_set.xml3
-rw-r--r--java/res/xml-ru/keyboard_set.xml3
-rw-r--r--java/res/xml-sk/keyboard_set.xml3
-rw-r--r--java/res/xml-sl/keyboard_set.xml3
-rw-r--r--java/res/xml-sr/keyboard_set.xml3
-rw-r--r--java/res/xml-sv/keyboard_set.xml3
-rw-r--r--java/res/xml-sw600dp/kbd_hebrew_symbols.xml (renamed from java/res/drawable/background_voice.xml)15
-rw-r--r--java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml26
-rw-r--r--java/res/xml-sw600dp/key_shortcut.xml2
-rw-r--r--java/res/xml-sw600dp/rows_hindi.xml2
-rw-r--r--java/res/xml-sw768dp/rows_10_10_7_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml2
-rw-r--r--java/res/xml-sw768dp/rows_arabic.xml8
-rw-r--r--java/res/xml-sw768dp/rows_azerty.xml3
-rw-r--r--java/res/xml-sw768dp/rows_bulgarian.xml11
-rw-r--r--java/res/xml-sw768dp/rows_east_slavic.xml14
-rw-r--r--java/res/xml-sw768dp/rows_farsi.xml6
-rw-r--r--java/res/xml-sw768dp/rows_georgian.xml2
-rw-r--r--java/res/xml-sw768dp/rows_greek.xml2
-rw-r--r--java/res/xml-sw768dp/rows_hebrew.xml12
-rw-r--r--java/res/xml-sw768dp/rows_hindi.xml14
-rw-r--r--java/res/xml-sw768dp/rows_nordic.xml14
-rw-r--r--java/res/xml-sw768dp/rows_qwerty.xml2
-rw-r--r--java/res/xml-sw768dp/rows_qwertz.xml2
-rw-r--r--java/res/xml-sw768dp/rows_south_slavic.xml14
-rw-r--r--java/res/xml-sw768dp/rows_spanish.xml2
-rw-r--r--java/res/xml-sw768dp/rows_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_symbols_shift.xml2
-rw-r--r--java/res/xml-sw768dp/rows_thai_symbols.xml2
-rw-r--r--java/res/xml-sw768dp/rows_thai_symbols_shift.xml2
-rw-r--r--java/res/xml-th/keyboard_set.xml3
-rw-r--r--java/res/xml-tr/keyboard_set.xml3
-rw-r--r--java/res/xml-uk/keyboard_set.xml3
-rw-r--r--java/res/xml-vi/keyboard_set.xml3
-rw-r--r--java/res/xml-zz-rQY/keyboard_set.xml43
-rw-r--r--java/res/xml/kbd_hebrew_symbols.xml26
-rw-r--r--java/res/xml/kbd_hebrew_symbols_shift.xml26
-rw-r--r--java/res/xml/key_styles_common.xml2
-rw-r--r--java/res/xml/keyboard_set.xml3
-rw-r--r--java/res/xml/language_prefs.xml19
-rw-r--r--java/res/xml/method.xml13
-rw-r--r--java/res/xml/rowkeys_azerty2.xml6
-rw-r--r--java/res/xml/rowkeys_azerty3.xml3
-rw-r--r--java/res/xml/rowkeys_east_slavic1.xml2
-rw-r--r--java/res/xml/rowkeys_east_slavic2.xml4
-rw-r--r--java/res/xml/rowkeys_east_slavic3.xml2
-rw-r--r--java/res/xml/rowkeys_hindi1.xml70
-rw-r--r--java/res/xml/rowkeys_hindi3.xml6
-rw-r--r--java/res/xml/rowkeys_nordic1.xml2
-rw-r--r--java/res/xml/rowkeys_nordic2.xml8
-rw-r--r--java/res/xml/rowkeys_qwerty1.xml3
-rw-r--r--java/res/xml/rowkeys_qwerty2.xml6
-rw-r--r--java/res/xml/rowkeys_qwertz1.xml3
-rw-r--r--java/res/xml/rowkeys_south_slavic1.xml2
-rw-r--r--java/res/xml/rowkeys_south_slavic2.xml2
-rw-r--r--java/res/xml/rowkeys_south_slavic3.xml4
-rw-r--r--java/res/xml/rowkeys_thai1.xml40
-rw-r--r--java/res/xml/rows_east_slavic.xml4
-rw-r--r--java/res/xml/rows_hindi.xml4
-rw-r--r--java/res/xml/rows_nordic.xml7
-rw-r--r--java/res/xml/rows_south_slavic.xml4
-rw-r--r--java/src/com/android/inputmethod/compat/ArraysCompatUtils.java61
-rw-r--r--java/src/com/android/inputmethod/compat/CompatUtils.java8
-rw-r--r--java/src/com/android/inputmethod/compat/InputConnectionCompatUtils.java80
-rw-r--r--java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java119
-rw-r--r--java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java4
-rw-r--r--java/src/com/android/inputmethod/compat/SharedPreferencesCompat.java53
-rw-r--r--java/src/com/android/inputmethod/deprecated/LanguageSwitcherProxy.java90
-rw-r--r--java/src/com/android/inputmethod/deprecated/VoiceProxy.java854
-rw-r--r--java/src/com/android/inputmethod/deprecated/compat/VoiceInputLoggerCompatUtils.java36
-rw-r--r--java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java255
-rw-r--r--java/src/com/android/inputmethod/deprecated/languageswitcher/LanguageSwitcher.java234
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/FieldContext.java104
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/Hints.java188
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/RecognitionView.java355
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/SettingsUtil.java110
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/SoundIndicator.java155
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/VoiceInput.java692
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/VoiceInputLogger.java266
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/WaveformImage.java92
-rw-r--r--java/src/com/android/inputmethod/deprecated/voice/Whitelist.java68
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSet.java38
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/ProximityInfo.java25
-rw-r--r--java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java10
-rw-r--r--java/src/com/android/inputmethod/latin/AutoCorrection.java24
-rw-r--r--java/src/com/android/inputmethod/latin/EditingUtils.java17
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableDictionary.java13
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java127
-rw-r--r--java/src/com/android/inputmethod/latin/ResearchLogger.java23
-rw-r--r--java/src/com/android/inputmethod/latin/Settings.java96
-rw-r--r--java/src/com/android/inputmethod/latin/SettingsValues.java7
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeLocale.java12
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java75
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java109
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java75
-rw-r--r--java/src/com/android/inputmethod/latin/VibratorUtils.java (renamed from java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java)29
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java3
231 files changed, 976 insertions, 6120 deletions
diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml
index e663c90f2..9f62e9779 100644
--- a/java/AndroidManifest.xml
+++ b/java/AndroidManifest.xml
@@ -49,15 +49,6 @@
</intent-filter>
</activity>
- <activity android:name="com.android.inputmethod.deprecated.languageswitcher.InputLanguageSelection"
- android:label="@string/language_selection_title">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <action android:name="com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION"/>
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
<receiver android:name="SuggestionSpanPickedNotificationReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.text.style.SUGGESTION_PICKED" />
diff --git a/java/proguard.flags b/java/proguard.flags
index e33706c47..2ee1a263f 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -1,6 +1,10 @@
-keep class com.android.inputmethod.latin.BinaryDictionary {
int mDictLength;
- <init>(...);
+ <init>(...);
+}
+
+-keep class com.android.inputmethod.latin.Flag {
+ *;
}
-keep class com.android.inputmethod.latin.Suggest {
@@ -8,13 +12,6 @@
com.android.inputmethod.latin.SuggestedWords getSuggestions(...);
}
--keep class com.android.inputmethod.latin.UserBigramDictionary {
- void setDatabaseMax(int);
- void setDatabaseDelete(int);
- void waitUntilUpdateDBDone();
- void waitForDictionaryLoading();
-}
-
-keep class com.android.inputmethod.latin.AutoCorrection {
java.lang.CharSequence getAutoCorrectionWord();
}
@@ -23,18 +20,10 @@
boolean equalsIgnoreCase(...);
}
--keep class com.android.inputmethod.latin.spellcheck.SpellChecker {
- *;
-}
-
-keep class com.android.inputmethod.latin.spellcheck.SpellCheckerSettingsFragment {
*;
}
--keep class com.android.inputmethod.latin.SettingsActivity {
- *;
-}
-
-keep class com.android.inputmethod.keyboard.LatinKeyboardView {
# Keep getter/setter methods for ObjectAnimator
int getLanguageOnSpacebarAnimAlpha();
@@ -51,6 +40,10 @@
void setLogFileManager(...);
}
+-keep class com.android.inputmethod.keyboard.KeyboardSet$Builder {
+ void setTouchPositionCorrectionEnabled(...);
+}
+
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
diff --git a/java/res/drawable-hdpi/caution.png b/java/res/drawable-hdpi/caution.png
deleted file mode 100644
index 61eb4dd62..000000000
--- a/java/res/drawable-hdpi/caution.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_mic_dialog.png b/java/res/drawable-hdpi/ic_mic_dialog.png
deleted file mode 100644
index 6107f876e..000000000
--- a/java/res/drawable-hdpi/ic_mic_dialog.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_suggest_strip_microphone.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
deleted file mode 100644
index 189a861fb..000000000
--- a/java/res/drawable-hdpi/ic_suggest_strip_microphone.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
deleted file mode 100644
index b4a6e373b..000000000
--- a/java/res/drawable-hdpi/ic_suggest_strip_microphone_swipe.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/mic_base.png b/java/res/drawable-hdpi/mic_base.png
deleted file mode 100644
index 504a1aa2a..000000000
--- a/java/res/drawable-hdpi/mic_base.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/mic_full.png b/java/res/drawable-hdpi/mic_full.png
deleted file mode 100644
index 3f4a67657..000000000
--- a/java/res/drawable-hdpi/mic_full.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/mic_slash.png b/java/res/drawable-hdpi/mic_slash.png
deleted file mode 100644
index c3b10929b..000000000
--- a/java/res/drawable-hdpi/mic_slash.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/vs_dialog_blue.9.png b/java/res/drawable-hdpi/vs_dialog_blue.9.png
deleted file mode 100644
index 4f813ead3..000000000
--- a/java/res/drawable-hdpi/vs_dialog_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/vs_dialog_red.9.png b/java/res/drawable-hdpi/vs_dialog_red.9.png
deleted file mode 100644
index a2055600e..000000000
--- a/java/res/drawable-hdpi/vs_dialog_red.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/vs_dialog_yellow.9.png b/java/res/drawable-hdpi/vs_dialog_yellow.9.png
deleted file mode 100644
index ce664b676..000000000
--- a/java/res/drawable-hdpi/vs_dialog_yellow.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/vs_popup_mic_edge.png b/java/res/drawable-hdpi/vs_popup_mic_edge.png
deleted file mode 100644
index 4ff6337a2..000000000
--- a/java/res/drawable-hdpi/vs_popup_mic_edge.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/caution.png b/java/res/drawable-mdpi/caution.png
deleted file mode 100644
index eaef53425..000000000
--- a/java/res/drawable-mdpi/caution.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_mic_dialog.png b/java/res/drawable-mdpi/ic_mic_dialog.png
deleted file mode 100644
index 77613ca05..000000000
--- a/java/res/drawable-mdpi/ic_mic_dialog.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_suggest_strip_microphone.png b/java/res/drawable-mdpi/ic_suggest_strip_microphone.png
deleted file mode 100644
index 18f314a61..000000000
--- a/java/res/drawable-mdpi/ic_suggest_strip_microphone.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
deleted file mode 100644
index ff629b674..000000000
--- a/java/res/drawable-mdpi/ic_suggest_strip_microphone_swipe.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/mic_base.png b/java/res/drawable-mdpi/mic_base.png
deleted file mode 100644
index 53e29ff4b..000000000
--- a/java/res/drawable-mdpi/mic_base.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/mic_full.png b/java/res/drawable-mdpi/mic_full.png
deleted file mode 100644
index e3e3dfac3..000000000
--- a/java/res/drawable-mdpi/mic_full.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/mic_slash.png b/java/res/drawable-mdpi/mic_slash.png
deleted file mode 100644
index d04b56344..000000000
--- a/java/res/drawable-mdpi/mic_slash.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/vs_dialog_blue.9.png b/java/res/drawable-mdpi/vs_dialog_blue.9.png
deleted file mode 100644
index cf27e8f43..000000000
--- a/java/res/drawable-mdpi/vs_dialog_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/vs_dialog_red.9.png b/java/res/drawable-mdpi/vs_dialog_red.9.png
deleted file mode 100644
index 6c08d5a30..000000000
--- a/java/res/drawable-mdpi/vs_dialog_red.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/vs_dialog_yellow.9.png b/java/res/drawable-mdpi/vs_dialog_yellow.9.png
deleted file mode 100644
index 2fb06c263..000000000
--- a/java/res/drawable-mdpi/vs_dialog_yellow.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/vs_popup_mic_edge.png b/java/res/drawable-mdpi/vs_popup_mic_edge.png
deleted file mode 100644
index 4ff6337a2..000000000
--- a/java/res/drawable-mdpi/vs_popup_mic_edge.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/caution.png b/java/res/drawable-xhdpi/caution.png
deleted file mode 100644
index cfc3f7547..000000000
--- a/java/res/drawable-xhdpi/caution.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_mic_dialog.png b/java/res/drawable-xhdpi/ic_mic_dialog.png
deleted file mode 100644
index 5d6399c0a..000000000
--- a/java/res/drawable-xhdpi/ic_mic_dialog.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png b/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png
deleted file mode 100644
index d65d28708..000000000
--- a/java/res/drawable-xhdpi/ic_suggest_strip_microphone.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png b/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png
deleted file mode 100644
index 889378a6a..000000000
--- a/java/res/drawable-xhdpi/ic_suggest_strip_microphone_swipe.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/mic_base.png b/java/res/drawable-xhdpi/mic_base.png
deleted file mode 100644
index 5c060bec9..000000000
--- a/java/res/drawable-xhdpi/mic_base.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/mic_full.png b/java/res/drawable-xhdpi/mic_full.png
deleted file mode 100644
index 32ffe124e..000000000
--- a/java/res/drawable-xhdpi/mic_full.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/mic_slash.png b/java/res/drawable-xhdpi/mic_slash.png
deleted file mode 100644
index 18b22542b..000000000
--- a/java/res/drawable-xhdpi/mic_slash.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_blue.9.png b/java/res/drawable-xhdpi/vs_dialog_blue.9.png
deleted file mode 100644
index 3284d78ef..000000000
--- a/java/res/drawable-xhdpi/vs_dialog_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_red.9.png b/java/res/drawable-xhdpi/vs_dialog_red.9.png
deleted file mode 100644
index 5af2465b5..000000000
--- a/java/res/drawable-xhdpi/vs_dialog_red.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/vs_dialog_yellow.9.png b/java/res/drawable-xhdpi/vs_dialog_yellow.9.png
deleted file mode 100644
index 4f50439de..000000000
--- a/java/res/drawable-xhdpi/vs_dialog_yellow.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/vs_popup_mic_edge.png b/java/res/drawable-xhdpi/vs_popup_mic_edge.png
deleted file mode 100644
index 1063cb464..000000000
--- a/java/res/drawable-xhdpi/vs_popup_mic_edge.png
+++ /dev/null
Binary files differ
diff --git a/java/res/layout-sw768dp/recognition_status.xml b/java/res/layout-sw768dp/recognition_status.xml
deleted file mode 100644
index d476651c6..000000000
--- a/java/res/layout-sw768dp/recognition_status.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:background="@drawable/background_voice">
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/popup_layout"
- android:orientation="vertical"
- android:layout_height="371dp"
- android:layout_width="500dp"
- android:layout_centerInParent="true"
- android:background="@drawable/vs_dialog_red">
- <TextView
- android:id="@+id/text"
- android:text="@string/voice_error"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:singleLine="true"
- android:layout_marginTop="10dp"
- android:textSize="28sp"
- android:textColor="#ffffff"
- android:layout_gravity="center"
- android:visibility="invisible"/>
- <RelativeLayout
- android:layout_height="0dp"
- android:layout_width="match_parent"
- android:layout_weight="1.0">
- <com.android.inputmethod.deprecated.voice.SoundIndicator
- android:id="@+id/sound_indicator"
- android:src="@drawable/mic_full"
- android:background="@drawable/mic_base"
- android:adjustViewBounds="true"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_centerInParent="true"
- android:visibility="gone"/>
- <ImageView
- android:id="@+id/image"
- android:src="@drawable/mic_slash"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_centerInParent="true"
- android:visibility="visible"/>
- <ProgressBar
- android:id="@+id/progress"
- android:indeterminate="true"
- android:indeterminateOnly="false"
- android:layout_height="60dp"
- android:layout_width="60dp"
- android:layout_centerInParent="true"
- android:visibility="gone"/>
- </RelativeLayout>
- <!--
- The text is set by the code. We specify a random text (voice_error), so the
- text view does not have a zero height. This is necessary to keep the slash
- mic and the recording mic is the same position
- -->
- <TextView
- android:id="@+id/language"
- android:text="@string/voice_error"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:singleLine="true"
- android:textSize="14sp"
- android:layout_marginBottom="3dp"
- android:layout_gravity="center"
- android:textColor="#ffffff"
- android:visibility="invisible"/>
- <Button
- android:id="@+id/button"
- android:layout_width="match_parent"
- android:layout_height="54dp"
- android:singleLine="true"
- android:focusable="true"
- android:text="@string/cancel"
- android:layout_gravity="center_horizontal"
- android:background="@drawable/btn_center"
- android:textColor="#ffffff"
- android:textSize="19sp" />
- </LinearLayout>
-</RelativeLayout>
diff --git a/java/res/layout/recognition_status.xml b/java/res/layout/recognition_status.xml
deleted file mode 100644
index 578788831..000000000
--- a/java/res/layout/recognition_status.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2009, 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.
-*/
--->
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:background="@drawable/background_voice">
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/popup_layout"
- android:orientation="vertical"
- android:layout_height="371dp"
- android:layout_width="500dp"
- android:layout_centerInParent="true"
- android:background="@drawable/vs_dialog_red">
- <TextView
- android:id="@+id/text"
- android:text="@string/voice_error"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:singleLine="true"
- android:layout_marginTop="10dp"
- android:textSize="20sp"
- android:textColor="#ffffff"
- android:layout_gravity="center"
- android:visibility="invisible"/>
- <RelativeLayout
- android:layout_height="0dp"
- android:layout_width="match_parent"
- android:layout_weight="1.0">
- <com.android.inputmethod.deprecated.voice.SoundIndicator
- android:id="@+id/sound_indicator"
- android:src="@drawable/mic_full"
- android:background="@drawable/mic_base"
- android:adjustViewBounds="true"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_centerInParent="true"
- android:visibility="gone"/>
- <ImageView
- android:id="@+id/image"
- android:src="@drawable/mic_slash"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_centerInParent="true"
- android:visibility="visible"/>
- <ProgressBar
- android:id="@+id/progress"
- android:indeterminate="true"
- android:indeterminateOnly="false"
- android:layout_height="60dp"
- android:layout_width="60dp"
- android:layout_centerInParent="true"
- android:visibility="gone"/>
- </RelativeLayout>
- <!--
- The text is set by the code. We specify a random text (voice_error), so the
- text view does not have a zero height. This is necessary to keep the slash
- mic and the recording mic is the same position
- -->
- <TextView
- android:id="@+id/language"
- android:text="@string/voice_error"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:singleLine="true"
- android:textSize="15sp"
- android:layout_marginTop="3dp"
- android:layout_marginBottom="3dp"
- android:layout_gravity="center"
- android:textColor="#ffffff"
- android:visibility="invisible"/>
- <Button
- android:id="@+id/button"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:singleLine="true"
- android:focusable="true"
- android:text="@string/cancel"
- android:layout_gravity="center_horizontal"
- android:background="@drawable/btn_center"
- android:textColor="#ffffff"
- android:textSize="15sp" />
- </LinearLayout>
-</RelativeLayout>
diff --git a/java/res/layout/voice_punctuation_hint.xml b/java/res/layout/voice_punctuation_hint.xml
deleted file mode 100644
index b32feb6e2..000000000
--- a/java/res/layout/voice_punctuation_hint.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2009, 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:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/keyboard_suggest_strip">
-
- <!-- TODO: Use dark mic icon. -->
- <ImageView android:id="@+id/image"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:paddingLeft="8dp"
- android:paddingRight="8dp"
- android:layout_gravity="center_horizontal"
- android:src="@drawable/ic_suggest_strip_microphone"
- />
-
- <TextView android:id="@+id/text"
- android:text="@string/voice_punctuation_hint"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:paddingTop="2dp"
- android:paddingRight="3dp"
- android:textSize="13sp"
- android:textColor="#888888"
- android:layout_gravity="center_horizontal"
- />
-
-</LinearLayout>
diff --git a/java/res/layout/voice_swipe_hint.xml b/java/res/layout/voice_swipe_hint.xml
deleted file mode 100644
index b1e27c281..000000000
--- a/java/res/layout/voice_swipe_hint.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2009, 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:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/keyboard_suggest_strip"
- android:gravity="center_horizontal"
- android:paddingTop="2dp">
-
- <TextView android:id="@+id/text"
- android:text="@string/voice_swipe_hint"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:paddingTop="10dp"
- android:paddingRight="6dp"
- android:textSize="13sp"
- android:textColor="#888888"
- android:layout_gravity="center_horizontal"
- />
-
- <ImageView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center_horizontal"
- android:src="@drawable/ic_suggest_strip_microphone"
- />
-
- <ImageView
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center_horizontal"
- android:src="@drawable/ic_suggest_strip_microphone_swipe"
- />
-
-
-</LinearLayout>
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index b1f7658d3..b2525ad2d 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Lettermodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Foonmodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Foonsimbool-modus"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Steminvoering"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Steminvoering vir jou taal word nie tans ondersteun nie, maar werk wel in Engels."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Steminvoer gebruik Google se spraakherkenning. "<a href="http://m.google.com/privacy">"Die Mobiel-privaatheidsbeleid"</a>" is van toepassing."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Om steminvoer af te skakel, gaan na invoermetode-instellings."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Om steminvoer te gebruik, druk die mikrofoonknoppie."</string>
- <string name="voice_listening" msgid="467518160751321844">"Praat nou"</string>
- <string name="voice_working" msgid="6666937792815731889">"Werkend"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Fout. Probeer asseblief weer."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Kon nie koppel nie"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Fout, te veel spraak."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Oudioprobleem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Bedienerfout"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Geen spraak gehoor nie"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Geen passings gevind nie"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Stemsoek nie geïnstalleer nie"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Wenk:"</b>" Sleep oor die sleutelbord om te praat"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Wenk:"</b>" Probeer volgende keer om leestekens soos \"punt\", \"komma\" of \"vraagteken\" hardop te sê."</string>
- <string name="cancel" msgid="6830980399865683324">"Kanselleer"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Steminvoerinstellings"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Op hoofsleutelbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Op simbolesleutelbord"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofoon op hoofsleutelbord"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrofoon op simbolesleutelbord"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Steminvoer is gedeaktiveer"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Kies invoermetode"</string>
<string name="configure_input_method" msgid="373356270290742459">"Stel invoermetodes op"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Invoertale"</string>
<string name="select_language" msgid="3693815588777926848">"Invoertale"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Raak weer om te stoor"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak weer om te stoor"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Woordeboek beskikbaar"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktiveer gebruikerterugvoer"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Help hierdie invoermetode-redigeerder te verbeter deur gebruikstatistiek en omvalverslae outomaties na Google te stuur."</string>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index bb0c493b2..927956851 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"የደብዳቤዎች ሁኔታ ላይ"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"የስልክ ሁኔታ ላይ"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"የስልክ ምልክቶች ሁኔታ ላይ"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"የድምፅ ግቤ ት"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"የድምፅ ግቤት በአሁኑ ጊዜ ለእርስዎን ቋንቋ አይደግፍም፣ ግን በእንግሊዘኛ ይሰራል።"</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"የድምፅ ግቤት የGoogleን ንግግር ለይቶ ማወቂያ ይጠቀማል።"<a href="http://m.google.com/privacy">"የተንቀሳቃሽ ስልክ ግላዊ ፖሊሲ"</a>" ይተገበራል።"</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"የድምፅ ግቤት ለማጥፋት፣ወደ ግቤት ሜተድ ቅንብሮች ሂድ።"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"የድምፅግቤት ለመጠቀም፣ የማይክራፎንየድምፅ ማጉያ አዝራር ተጫን።"</string>
- <string name="voice_listening" msgid="467518160751321844">"አሁን ተናገር"</string>
- <string name="voice_working" msgid="6666937792815731889">"ሥራ ላይ"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"ስህተት፣ እባክዎ እንደገና ይሞክሩ።"</string>
- <string name="voice_network_error" msgid="6649556447401862563">"ማያያዝ አልተቻለም"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"ስህተት፣ በጣም ብዙ ንግግር።"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"የድምፅ ችግር"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"የአገልጋይ ስህተት"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"ምንም ንግግር አልተሰማም"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"ምንም ተመሳሳይ አልተገኘም።"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"የድምፅ ፍለጋአልተጫነም"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"ምክር፡"</b>" ለመናገር በቁልፍሰሌዳ ላይ አንሸራት"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"ምክር፡"</b>" ሌላ ጊዜ፣ እንደ \"period\", \"comma\", ወይም \"question mark\" ያሉ ስርዓተ ነጥቦችን ለመናገር ሞክር።"</string>
- <string name="cancel" msgid="6830980399865683324">"ይቅር"</string>
- <string name="ok" msgid="7898366843681727667">"እሺ"</string>
<string name="voice_input" msgid="3583258583521397548">"የድምፅ ግቤት ቁልፍ"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"በዋናቁልፍ ሰሌዳ ላይ"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"በምልክቶች ቁልፍ ሰሌዳ ላይ"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"ድምፅ ማጉያ በዋናው ቁልፍሰሌዳው ላይ"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"የድምፅ ማጉያ ምልክትበቁልፍ ሰሌዳላይ"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"የድምፅ ግቤት ቦዝኗል"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"የግቤት ሜተድ ምረጥ"</string>
<string name="configure_input_method" msgid="373356270290742459">"ግቤት ሜተዶችን አዋቀር"</string>
<string name="language_selection_title" msgid="1651299598555326750">"ቋንቋዎች አግቤት"</string>
<string name="select_language" msgid="3693815588777926848">"ቋንቋዎች አግቤት"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← ለማስቀመጥ ድጋሚ ንካ"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"ለማስቀመጥ እንደገና ንካ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"መዝገበ ቃላት አለ"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"የተጠቃሚ ግብረ ምላሽ አንቃ"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"ወደ Google የተሰናከለ ሪፖርቶች እና አጠቃቀም ስታስቲክስ በራስ ሰር በመላክ ይህን ግቤት ሜተድ አርትኢ እገዛ ያሻሽላል።"</string>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 46c9d8a91..9daa01220 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"وضع الأحرف"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"وضع الهاتف"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"وضع رموز الهاتف"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"الإدخال الصوتي"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"الإدخال الصوتي غير معتمد حاليًا للغتك، ولكنه يعمل باللغة الإنجليزية."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"يستخدم الإدخال الصوتي خاصية التعرف على الكلام من Google. تنطبق "<a href="http://m.google.com/privacy">"سياسة خصوصية الجوال"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"لإيقاف الإدخال الصوتي، انتقل إلى إعدادات طريقة الإدخال."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"لاستخدام الإدخال الصوتي، اضغط على زر الميكروفون."</string>
- <string name="voice_listening" msgid="467518160751321844">"تحدث الآن"</string>
- <string name="voice_working" msgid="6666937792815731889">"العمل"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"خطأ. الرجاء المحاولة مرة أخرى."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"تعذر الاتصال"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"خطأ، كلام أكثر مما ينبغي."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"مشكلة بالإعدادات الصوتية"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"خطأ في الخادم"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"لم يتم سماع كلام"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"لم يتمّ العثور على أية تطابقات"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"لم يتم تثبيت البحث الصوتي"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"تلميح:"</b>" مرر عبر لوحة المفاتيح للتحدث"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"تلميح:"</b>" جرب في المرة التالية نطق الترقيم مثل \"نقطة\" أو \"فاصلة\" أو \"علامة استفهام\"."</string>
- <string name="cancel" msgid="6830980399865683324">"إلغاء"</string>
- <string name="ok" msgid="7898366843681727667">"موافق"</string>
<string name="voice_input" msgid="3583258583521397548">"مفتاح الإدخال الصوتي"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"لوحة مفاتيح رئيسية"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"لوحة مفاتيح الرموز"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"ميكروفون على لوحة مفاتيح رئيسية"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"ميكروفون على لوحة مفاتيح الرموز"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"الإدخال الصوتي مُعطل"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"تحديد طريقة الإرسال"</string>
<string name="configure_input_method" msgid="373356270290742459">"تهيئة طرق الإدخال"</string>
<string name="language_selection_title" msgid="1651299598555326750">"لغات الإدخال"</string>
<string name="select_language" msgid="3693815588777926848">"لغات الإدخال"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← المس مرة أخرى للحفظ"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"القاموس متاح"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"تمكين ملاحظات المستخدم"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"المساعدة في تحسين محرر طريقة الإرسال هذا من خلال إرسال إحصاءات الاستخدام وتقارير الأعطال تلقائيًا إلى Google."</string>
diff --git a/java/res/values-be/donottranslate-more-keys.xml b/java/res/values-be/donottranslate-more-keys.xml
index 1550ddb17..835553a1f 100644
--- a/java/res/values-be/donottranslate-more-keys.xml
+++ b/java/res/values-be/donottranslate-more-keys.xml
@@ -19,7 +19,13 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- U+045E: "ў" CYRILLIC SMALL LETTER SHORT U -->
- <string name="keylabel_for_cyrillic_shcha">&#x045E;</string>
+ <string name="keylabel_for_east_slavic_row1_9">&#x045E;</string>
+ <!-- U+044B: "ы" CYRILLIC SMALL LETTER YERU -->
+ <string name="keylabel_for_east_slavic_row2_1">&#x044B;</string>
<!-- U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
- <string name="keylabel_for_cyrillic_i">&#x0456;</string>
+ <string name="keylabel_for_east_slavic_row3_5">&#x0456;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_ha">&#x044A;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_soft_sign">&#x044A;</string>
</resources>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
index fb72634b0..ab00be926 100644
--- a/java/res/values-be/strings.xml
+++ b/java/res/values-be/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Рэжым лiтар"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Рэжым тэлефона"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Рэжым тэлефонных знакаў"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Галасавы ўвод"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Галасавы ўвод пакуль не падтрымліваецца для вашай мовы, але працуе на англійскай мове."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Галасавы набор выкарыстоўвае распазнанне гаворкі Google. Ужываецца "<a href="http://m.google.com/privacy">"палiтыка прыватнасцi для мабiльных прылад"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Каб адключыць галасавы ўвод, перайдзіце ў налады метаду ўводу."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Каб выкарыстоўваць галасавы ўвод, націсніце кнопку мікрафона."</string>
- <string name="voice_listening" msgid="467518160751321844">"Гаварыце"</string>
- <string name="voice_working" msgid="6666937792815731889">"Апрацоўка"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Памылка. Паспрабуйце яшчэ."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Не атрымалася ўсталяваць падключэнне"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Памылка, зашмат гаворкі."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Праблема з гукам"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Памылка сервера"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Не чуваць гаворку"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Няма супадзенняў"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Галасавы пошук не ўсталяваны"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Падказка:"</b>" Правядзіце пальцам праз клавіятуру, каб казаць"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Падказка:"</b>" У наступны раз паспрабуйце прагаворваць такiя знакі пунктуацыі, як \"кропка\", \"коска\" або \"пытальнік\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Адмяніць"</string>
- <string name="ok" msgid="7898366843681727667">"ОК"</string>
<string name="voice_input" msgid="3583258583521397548">"Ключ галасавога ўводу"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На асн. клавіятуры"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На сімв. клавіятуры"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Мік. на асн. клав."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Мік. на сімв. клав."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Галасавы набор адкл."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Выберыце метад уводу"</string>
<string name="configure_input_method" msgid="373356270290742459">"Налада метадаў уводу"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Мовы ўводу"</string>
<string name="select_language" msgid="3693815588777926848">"Мовы ўводу"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"... Дакраніцеся яшчэ раз, каб захаваць"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Слоўнік даступны"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Уключыць зваротную сувязь з карыстальнікамі"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Дапамажыце палепшыць гэты рэдактар ​​метаду ўводу, аўтаматычна адпраўляючы статыстыку выкарыстання і справаздачы аб збоях Google."</string>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index c92b95c21..c7c7a2510 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим за букви"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим за телефон"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим за символи на телефона"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Гласово въвеждане"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"За вашия език понастоящем не се поддържа гласово въвеждане, но можете да го използвате на английски."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Гласовото въвеждане използва функцията на Google за разпознаване на говор. В сила е "<a href="http://m.google.com/privacy">"Декларацията за поверителност за мобилни устройства"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"За да изключите гласовото въвеждане, отворете настройките за метода за въвеждане."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"За да използвате гласово въвеждане, натиснете бутона на микрофона."</string>
- <string name="voice_listening" msgid="467518160751321844">"Говорете сега"</string>
- <string name="voice_working" msgid="6666937792815731889">"Обработва се"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Грешка. Моля, опитайте отново."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Не можа да се свърже"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Грешка, твърде много речева информация."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Аудиопроблем"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Грешка в сървъра"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Не се чува реч"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Нямаше съответствия"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Не е инсталирано гласово търсене"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Съвет:"</b>" Прокарайте палец през клавиатурата, за да говорите"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Съвет:"</b>" Следващия път опитайте да произнесете знаците за пунктуация, напр. „точка“, „запетая“ или „въпросителен знак“."</string>
- <string name="cancel" msgid="6830980399865683324">"Отказ"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Клавиш за гласово въвеждане"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На осн. клавиатура"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На клав. на симв."</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Микр. на осн. клав."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Микр. на клав. на симв."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Глас. въвежд. е деакт."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Избор на метод на въвеждане"</string>
<string name="configure_input_method" msgid="373356270290742459">"Конфигуриране на въвеждането"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Входни езици"</string>
<string name="select_language" msgid="3693815588777926848">"Езици за въвеждане"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Докоснете отново, за да запазите"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Има достъп до речник"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Активиране на отзивите от потребителите"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Помогнете за подобряването на този редактор за въвеждане чрез автоматично изпращане до Google на статистически данни за употребата и сигнали за сривове."</string>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index 578580320..a530ac16e 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode de lletres"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode de telèfon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode de símbols de telèfon"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Entrada de veu"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Actualment, l\'entrada de veu no és compatible amb el vostre idioma, però funciona en anglès."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"L\'entrada de veu utilitza el reconeixement de veu de Google. S\'hi aplica la "<a href="http://m.google.com/privacy">"Política de privadesa de Google per a mòbils"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Per desactivar l\'entada de veu, vés a la configuració del mètode d\'entrada."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Per utilitzar l\'entrada de veu, prem el botó del micròfon."</string>
- <string name="voice_listening" msgid="467518160751321844">"Parleu ara"</string>
- <string name="voice_working" msgid="6666937792815731889">"S\'està treballant"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Error. Torneu-ho a provar."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"No s\'ha pogut connectar"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Error; s\'ha parlat massa."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema d\'àudio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Error del servidor"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"No s\'escolten paraules"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"No hi ha resultats"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Cerca per veu no instal·lada"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Consell:"</b>" Feu lliscar el dit pel teclat per parlar"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Suggeriment:"</b>" La propera vegada, proveu de dir la puntuació, com ara \"punt\", \"coma\" o \"interrogant\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancel·la"</string>
- <string name="ok" msgid="7898366843681727667">"D\'acord"</string>
<string name="voice_input" msgid="3583258583521397548">"Clau de l\'entrada de veu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Al teclat principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Al tecl. de símb."</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micro en tecl. princ."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micro en tecl. símb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Entr. veu desactiv."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Selecciona el mètode d\'entrada"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configura mètodes d\'entrada"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Idiomes d\'entrada"</string>
<string name="select_language" msgid="3693815588777926848">"Idiomes d\'entrada"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Torna a tocar per desar"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Torna a tocar per desar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Diccionari disponible"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Activa els comentaris de l\'usuari"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ajuda a millorar aquest editor de mètodes d\'entrada enviant automàticament estadístiques d\'ús i informes de bloqueigs a Google."</string>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index d5989d791..0e7ad8bbc 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Režim písmen"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Režim telefonu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Režim telefonních symbolů"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Hlasový vstup"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Pro váš jazyk aktuálně není hlasový vstup podporován, ale funguje v angličtině."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Hlasový vstup používá rozpoznávání hlasu Google a vztahují se na něj "<a href="http://m.google.com/privacy">"Zásady ochrany osobních údajů pro mobilní služby"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Chcete-li vypnout hlasový vstup, přejděte do nastavení metod vstupu."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Chcete-li použít hlasový vstup, stiskněte tlačítko mikrofonu."</string>
- <string name="voice_listening" msgid="467518160751321844">"Mluvte"</string>
- <string name="voice_working" msgid="6666937792815731889">"Probíhá zpracování"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Chyba. Zkuste to prosím znovu."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Připojení se nezdařilo."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Chyba, řeč je příliš dlouhá."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problém se zvukem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Chyba serveru"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nebyla detekována žádná řeč."</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nebyly nalezeny žádné shody"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Hlasové vyhledávání není nainstalováno"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Nápověda:"</b>" Chcete-li aktivovat hlasový vstup, přejeďte prstem přes klávesnici."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Nápověda:"</b>" Příště zkuste vyslovit interpunkci, například „tečka“, „čárka“ nebo „otazník“."</string>
- <string name="cancel" msgid="6830980399865683324">"Zrušit"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Klíč hlasového vstupu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na hlavní klávesnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klávesnici se symb."</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikr. na hlav. kláv."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikr. na kláv. se symb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Hlasový vstup vypnut"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Výběr metody zadávání dat"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurace metod vstupu"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Vstupní jazyky"</string>
<string name="select_language" msgid="3693815588777926848">"Jazyky vstupu"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Dalším dotykem slovo uložíte"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"K dispozici je slovník"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktivovat zasílání statistik užívání a zpráv o selhání"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Automatickým zasíláním statistik o užívání editoru zadávání dat a zpráv o jeho selhání do Googlu můžete přispět k vylepšení tohoto nástroje."</string>
diff --git a/java/res/values-da/donottranslate-more-keys.xml b/java/res/values-da/donottranslate-more-keys.xml
index 739ab09e7..acc0c534d 100644
--- a/java/res/values-da/donottranslate-more-keys.xml
+++ b/java/res/values-da/donottranslate-more-keys.xml
@@ -59,13 +59,13 @@
<!-- U+0142: "ł" LATIN SMALL LETTER L WITH STROKE -->
<string name="more_keys_for_l">&#x0142;</string>
<!-- U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00E5;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00E5;</string>
<!-- U+00E6: "æ" LATIN SMALL LETTER AE -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00E6;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00E6;</string>
<!-- U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00F8;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00F8;</string>
<!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
- <string name="more_keys_for_scandinavia_row2_10">&#x00E4;</string>
+ <string name="more_keys_for_nordic_row2_10">&#x00E4;</string>
<!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
- <string name="more_keys_for_scandinavia_row2_11">&#x00F6;</string>
+ <string name="more_keys_for_nordic_row2_11">&#x00F6;</string>
</resources>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 97dec329b..cccd088da 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bogstavtilstand"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefontilstand"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefonsymboltilstand"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Stemmeinput"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Stemmeinput understøttes i øjeblikket ikke for dit sprog, men fungerer på engelsk."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Stemmeinput anvender Googles stemmegenkendelse. "<a href="http://m.google.com/privacy">"Fortrolighedspolitikken for mobilenheder"</a>" gælder."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Slå stemmeinput fra i indstillingerne for inputmetode."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Brug stemmeinput ved at trykke på mikrofonknappen."</string>
- <string name="voice_listening" msgid="467518160751321844">"Tal nu"</string>
- <string name="voice_working" msgid="6666937792815731889">"Arbejder"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Fejl. Prøv igen."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Kunne ikke oprette forbindelse"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Fejl. For meget tale."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Lydproblem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serverfejl"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Der høres ingen tale"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Der blev ikke fundet nogen matches"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Stemmesøgning er ikke installeret"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Tip:"</b>" Glid hen over tastaturet for at tale"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Tip:"</b>" Næste gang kan du forsøge at sige tegnsætning, f.eks. \"punktum\", \"komma\" eller \"spørgsmålstegn\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Annuller"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Nøgle til stemmeinput"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På hovedtastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På symboltastatur"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mik. på hovedtastatur"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mik. på symboltastatur"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Stemmeinput deaktiveret"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Vælg inputmetode"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurer inputmetoder"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Inputsprog"</string>
<string name="select_language" msgid="3693815588777926848">"Inputsprog"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Tryk igen for at gemme"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Tryk igen for at gemme"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Ordbog er tilgængelig"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktiver brugerfeedback"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Vær med til at forbedre denne inputmetode ved at sende anvendelsesstatistikker og rapporter om nedbrud til Google."</string>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index 75ef10655..cf0678165 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Buchstabenmodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonmodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefon-Symbolmodus"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Spracheingabe"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Spracheingaben werden zurzeit nicht für Ihre Sprache unterstützt, funktionieren jedoch in Englisch."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Die Spracheingabe verwendet die Spracherkennung von Google. Es gelten die "<a href="http://m.google.com/privacy">"Google Mobile-Datenschutzbestimmungen"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Rufen Sie zum Deaktivieren der Spracheingabe die Einstellungen für die Eingabemethode auf."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Drücken Sie zur Verwendung der Spracheingabe die Mikrofonschaltfläche."</string>
- <string name="voice_listening" msgid="467518160751321844">"Jetzt sprechen"</string>
- <string name="voice_working" msgid="6666937792815731889">"Vorgang läuft"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Fehler. Versuchen Sie es erneut.."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Keine Verbindung"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Fehler – Text zu lang"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Audio-Problem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serverfehler"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Keine Sprache zu hören"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Keine Treffer gefunden"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Sprachsuche nicht installiert"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Hinweis:"</b>" Ziehen Sie zum Sprechen den Finger über die Tastatur."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Hinweis:"</b>" Versuchen Sie beim nächsten Mal, Satzzeichen wie \"Punkt\", \"Komma\" oder \"Fragezeichen\" per Sprachbefehl einzugeben."</string>
- <string name="cancel" msgid="6830980399865683324">"Abbrechen"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Taste für Spracheingabe"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Auf Haupttastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Auf Symboltastatur"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikro auf Haupttastatur"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikro auf Symboltastatur"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Spracheingabe deaktiviert"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Eingabemethode auswählen"</string>
<string name="configure_input_method" msgid="373356270290742459">"Eingabemethoden konfigurieren"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Eingabesprachen"</string>
<string name="select_language" msgid="3693815588777926848">"Eingabesprachen"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Zum Speichern erneut berühren"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Zum Speichern erneut berühren"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Wörterbuch verfügbar"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Nutzer-Feedback aktivieren"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Tragen Sie zur Verbesserung dieses Eingabemethodeneditors bei, indem Sie automatisch Nutzungsstatistiken und Absturzberichte an Google senden."</string>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index fb2bff331..da0cb3680 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -39,7 +39,7 @@
<string name="advanced_settings_summary" msgid="4487980456152830271">"Επιλογές για έμπειρους χρήστες"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Άλλη μέθοδος εισόδου"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Το κλειδί αλλαγής γλώσσας καλύπτει και άλλες μεθόδους εισόδου"</string>
- <string name="suppress_language_switch_key" msgid="8003788410354806368">"Κατάργ.κλειδ.αλλαγ.γλωσσ."</string>
+ <string name="suppress_language_switch_key" msgid="8003788410354806368">"Κατάργ. κλειδιού γλώσσας"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Χρόνος εξαφ. αναδ. παραθ."</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Χωρίς καθυστέρ."</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Προεπιλογή"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Λειτουργία γραμμάτων"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Λειτουργία τηλεφώνου"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Λειτουργία συμβόλων τηλεφώνου"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Φωνητική είσοδος"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Η φωνητική είσοδος δεν υποστηρίζεται αυτή τη στιγμή για τη γλώσσα σας, ωστόσο λειτουργεί στα Αγγλικά."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Οι φωνητικές εντολές χρησιμοποιούν την τεχνολογία αναγνώρισης φωνής της Google. Ισχύει "<a href="http://m.google.com/privacy">"η Πολιτική Απορρήτου για κινητά"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Για να απενεργοποιήσετε τις φωνητικές εντολές, μεταβείτε στις ρυθμίσεις της μεθόδου εισαγωγής."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Για τη χρήση φωνητικών εντολών, πατήστε το κουμπί του μικροφώνου."</string>
- <string name="voice_listening" msgid="467518160751321844">"Μιλήστε τώρα"</string>
- <string name="voice_working" msgid="6666937792815731889">"Σε λειτουργία"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Σφάλμα. Δοκιμάστε ξανά."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Δεν ήταν δυνατή η σύνδεση"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Σφάλμα, πολλές λέξεις."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Πρόβλημα ήχου"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Σφάλμα διακομιστή"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Δεν ακούγεται ομιλία"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Δεν βρέθηκε καμία αντιστοίχιση"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Η Φωνητική αναζήτηση δεν εγκαταστάθηκε"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Υπόδειξη:"</b>" Σύρετε κατά μήκος του πληκτρολογίου για να μιλήσετε"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Υπόδειξη:"</b>" Την επόμενη φορά, προσπαθήστε να προφέρετε σημεία στίξης, όπως \"τελεία\", \"κόμμα\" ή \"ερωτηματικό\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Ακύρωση"</string>
- <string name="ok" msgid="7898366843681727667">"ΟΚ"</string>
<string name="voice_input" msgid="3583258583521397548">"Κλειδί φωνητικής εξόδου"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Στο κύριο πληκτρολ."</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Πληκτρ. συμβ. ενερ."</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Μικ. στο κύριο πληκ."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Μικ. στο πληκ. συμβ."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Απεν. φωνητ. είσοδος"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Επιλογή μεθόδου εισόδου"</string>
<string name="configure_input_method" msgid="373356270290742459">"Διαμόρφωση μεθόδων εισαγωγής"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Γλώσσες εισόδου"</string>
<string name="select_language" msgid="3693815588777926848">"Γλώσσες εισόδου"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Αγγίξτε ξανά για αποθήκευση"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Αγγίξτε ξανά για αποθήκευση"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Λεξικό διαθέσιμο"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Ενεργοποίηση σχολίων χρηστών"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Βοηθήστε μας να βελτιώσουμε αυτό το πρόγραμμα επεξεργασίας μεθόδου εισόδου στέλνοντας αυτόματα στατιστικά στοιχεία και αναφορές σφαλμάτων στην Google."</string>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 53d025213..0aae21e38 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Letters mode"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Phone mode"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Phone symbols mode"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Voice input"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Voice input is not currently supported for your language, but does work in English."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Voice input uses Google\'s speech recognition. "<a href="http://m.google.com/privacy">"The Mobile Privacy Policy"</a>" applies."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"To turn off voice input, go to input method settings."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"To use voice input, press the microphone button."</string>
- <string name="voice_listening" msgid="467518160751321844">"Speak now"</string>
- <string name="voice_working" msgid="6666937792815731889">"Working"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Error: Please try again."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Couldn\'t connect"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Error, too much speech."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Audio problem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Server error"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"No speech heard"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"No matches found"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Voice search not installed"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Hint:"</b>" Swipe across keyboard to speak"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Hint:"</b>" Next time, try speaking punctuation marks, like \"full stop\", \"comma\" or \"question mark\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancel"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Voice input key"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"On main keyboard"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"On symbols keyboard"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic on main keyboard"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic on symbols keyboard"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Voice input is disabled"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Select input method"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configure input methods"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Input languages"</string>
<string name="select_language" msgid="3693815588777926848">"Input languages"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Touch again to save"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Dictionary available"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Enable user feedback"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Help improve this input method editor by sending usage statistics and crash reports automatically to Google."</string>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index aec1703a3..b9c4963a4 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo Letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo Teléfono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo Símbolos del teléfono"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Entrada por voz"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"La entrada por voz no está admitida en tu idioma, pero sí funciona en inglés."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"La entrada de voz usa el reconocimiento de voz de Google. "<a href="http://m.google.com/privacy">"Se aplica la política de privacidad para"</a>" celulares."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Para desactivar la entrada de voz, ve a la configuración de métodos de entrada."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Para utilizar entrada de voz, presiona el botón micrófono."</string>
- <string name="voice_listening" msgid="467518160751321844">"Habla ahora"</string>
- <string name="voice_working" msgid="6666937792815731889">"Procesando"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Error. Vuelve a intentarlo."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"No se pudo establecer la conexión."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Error, demasiado discurso."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema de audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Error del servidor"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"No se oyó la voz"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"No se encontraron coincidencias"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Búsqueda por voz no instalada"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Sugerencia:"</b>" Deslizar en el teclado para hablar"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Sugerencia:"</b>" La próxima vez intenta decir la puntuación como \"punto\", \"coma\" o \"signo de pregunta\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancelar"</string>
- <string name="ok" msgid="7898366843681727667">"Aceptar"</string>
<string name="voice_input" msgid="3583258583521397548">"Tecla de entrada por voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"En el teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"En el teclado de símbolos"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micrófono en el teclado principal"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micrófono en el teclado de símbolos"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"La entrada por voz está inhabilitada"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Seleccionar método de entrada"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de entrada"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Tocar de nuevo para guardar"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Diccionario disponible"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Activar los comentarios del usuario"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ayuda a mejorar este editor de método de introducción de texto al enviar las estadísticas de uso y los informes de error a Google."</string>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 3dd151964..a746c3710 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de teléfono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de teléfono"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Introducción de voz"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Actualmente la introducción de voz no está disponible en tu idioma, pero se puede utilizar en inglés."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"La entrada de voz utiliza el reconocimiento de voz de Google. Se aplica la "<a href="http://m.google.com/privacy">"Política de privacidad de Google para móviles"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Para desactivar la función de entrada de voz, accede a los ajustes del método de introducción de texto."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Para utilizar la entrada de voz, pulsa el botón de micrófono."</string>
- <string name="voice_listening" msgid="467518160751321844">"Habla ahora"</string>
- <string name="voice_working" msgid="6666937792815731889">"En curso"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Se ha producido un error. Inténtalo de nuevo."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"No se ha podido establecer conexión."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Se ha producido un error debido a un exceso de introducción de datos de voz."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema de audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Error del servidor"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Ninguna conversación escuchada"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"No se ha encontrado ninguna coincidencia."</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"La búsqueda por voz no está instalada."</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Sugerencia:"</b>" muévete por el teclado para hablar."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Sugerencia:"</b>" la próxima vez, prueba a indicar signos de puntuación como, por ejemplo, \"punto\", \"coma\" o \"signo de interrogación\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancelar"</string>
- <string name="ok" msgid="7898366843681727667">"Aceptar"</string>
<string name="voice_input" msgid="3583258583521397548">"Tecla de entrada de voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"En teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"En teclado de símbolos"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micrófono en teclado principal"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micro en teclado de símbolos"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Entrada de voz inhabilitada"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Selecciona un método de introducción de texto"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de introducción"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas"</string>
<string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Volver a tocar para guardar"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toca otra vez para guardar."</string>
<string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Habilitar comentarios de usuarios"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ayuda a mejorar este editor de método de introducción de texto enviando estadísticas de uso e informes de error a Google."</string>
diff --git a/java/res/values-et/donottranslate-more-keys.xml b/java/res/values-et/donottranslate-more-keys.xml
index be66b42f5..69cf654a6 100644
--- a/java/res/values-et/donottranslate-more-keys.xml
+++ b/java/res/values-et/donottranslate-more-keys.xml
@@ -104,11 +104,11 @@
U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE -->
<string name="more_keys_for_g">&#x0123;,&#x011F;</string>
<!-- U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00FC;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00FC;</string>
<!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00F6;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00F6;</string>
<!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00E4;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00E4;</string>
<!-- U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE -->
- <string name="more_keys_for_scandinavia_row2_10">&#x00F5;</string>
+ <string name="more_keys_for_nordic_row2_10">&#x00F5;</string>
</resources>
diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml
index 010891ce6..1c7f14e17 100644
--- a/java/res/values-et/strings.xml
+++ b/java/res/values-et/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Tähtede režiim"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonirežiim"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefoni sümbolite režiim"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Kõnesisend"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Kõnesisendit ei toetata praegu teie keeles, kuid see töötab inglise keeles."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Kõnesisend kasutab Google\'i kõnetuvastust. Kehtivad "<a href="http://m.google.com/privacy">"Mobile\'i privaatsuseeskirjad"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Kõnesisendi väljalülitamiseks minge sisestusmeetodi seadete juurde."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Kõnesisendi kasutamiseks vajutage mikrofoni nuppu."</string>
- <string name="voice_listening" msgid="467518160751321844">"Alustage rääkimist"</string>
- <string name="voice_working" msgid="6666937792815731889">"Töötab"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Viga. Proovige uuesti."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Ühendamine nurjus."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Viga. Liiga palju kõnet."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Heli probleem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serveri viga"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Kõne pole kuuldav"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Ühtki vastet ei leitud"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Hääleotsing pole installitud"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Vihje:"</b>" rääkimiseks libistage sõrme üle ekraani"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Vihje:"</b>" proovige järgmine kord kirjavahemärkide ütlemist, nt „punkt”, „koma” või „küsimärk”."</string>
- <string name="cancel" msgid="6830980399865683324">"Tühista"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Häälesisendi klahv"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Peamisel klaviatuuril"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sümbol. klaviatuuril"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikr. peam. klaviat."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikr. sümb. klaviat."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Kõnesisend on keelatud"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Sisestusmeet. valim."</string>
<string name="configure_input_method" msgid="373356270290742459">"Sisestusmeetodite seadistamine"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Sisestuskeeled"</string>
<string name="select_language" msgid="3693815588777926848">"Sisestuskeeled"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"←Salvestamiseks puudutage uuesti"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Sõnastik saadaval"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Luba kasutaja tagasiside"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Saatke Google\'ile automaatselt kasutusstatistikat ja krahhiaruandeid ning aidake seda sisestusmeetodi redigeerijat parandada."</string>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 2696ed626..fb3654e83 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -105,26 +105,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"حالت حروف"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"حالت تلفن"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"حالت نمادهای تلفن"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"ورودی صوتی"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"ورودی صوتی در حال حاضر برای زبان شما پشتیبانی نمی شود اما برای زبان انگلیسی فعال است."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"ورودی صوتی از تشخیص صدای Google استفاده می کند. "<a href="http://m.google.com/privacy">"خط مشی رازداری Mobile "</a>" اعمال می شود."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"برای خاموش کردن ورودی صدا، به تنظیمات روش ورودی بروید."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"برای استفاده از ورودی صوتی، دکمه میکروفن را فشار دهید."</string>
- <string name="voice_listening" msgid="467518160751321844">"اکنون صحبت کنید"</string>
- <string name="voice_working" msgid="6666937792815731889">"در حال کار"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"خطا: لطفاً دوباره امتحان کنید."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"متصل نشد"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"خطا، گفتار بسیار زیاد است."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"مشکل صوتی"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"خطای سرور"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"گفتاری شنیده نشد"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"مورد منطبقی یافت نشد"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"جستجوی صوتی نصب نشده است"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"نکته: "</b>" برای صحبت روی صفحه کلید ضربه بزنید"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"نکته: دفعه دیگر، از نشانه گذاری های گفتاری مانند \"نقطه\"، \"کاما\" یا \"علامت سؤال\" استفاده کنید."</b></string>
- <string name="cancel" msgid="6830980399865683324">"لغو"</string>
- <string name="ok" msgid="7898366843681727667">"تأیید"</string>
<string name="voice_input" msgid="3583258583521397548">"کلید ورودی صدا"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"در صفحه کلید اصلی"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"در صفحه کلید نمادها"</string>
@@ -132,11 +112,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"میکروفن در صفحه کلید اصلی"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"میکروفن در صفحه کلید نمادها"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"ورودی صدا غیرفعال است"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"انتخاب روش ورودی"</string>
<string name="configure_input_method" msgid="373356270290742459">"پیکربندی روش های ورودی"</string>
<string name="language_selection_title" msgid="1651299598555326750">"زبان های ورودی"</string>
<string name="select_language" msgid="3693815588777926848">"زبان‌های ورودی"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← جهت ذخیره دوباره لمس کنید"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"دیکشنری موجود است"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"فعال کردن بازخورد کاربر"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"با ارسال خودکار آمارهای کاربرد و گزارش های خرابی به Google، به بهبود این ویرایشگر روش ورودی کمک کنید."</string>
diff --git a/java/res/values-fi/donottranslate-more-keys.xml b/java/res/values-fi/donottranslate-more-keys.xml
index 9b5fa786a..25b785845 100644
--- a/java/res/values-fi/donottranslate-more-keys.xml
+++ b/java/res/values-fi/donottranslate-more-keys.xml
@@ -44,13 +44,13 @@
U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE -->
<string name="more_keys_for_z">&#x017E;,&#x017A;,&#x017C;</string>
<!-- U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00E5;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00E5;</string>
<!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00F6;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00F6;</string>
<!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00E4;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00E4;</string>
<!-- U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE -->
- <string name="more_keys_for_scandinavia_row2_10">&#x00F8;</string>
+ <string name="more_keys_for_nordic_row2_10">&#x00F8;</string>
<!-- U+00E6: "æ" LATIN SMALL LETTER AE -->
- <string name="more_keys_for_scandinavia_row2_11">&#x00E6;</string>
+ <string name="more_keys_for_nordic_row2_11">&#x00E6;</string>
</resources>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 012f628ac..774817872 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Näppäimistötila"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Puhelintila"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Puhelinsymbolit-tila"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Äänisyöte"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Äänisyötettä ei vielä tueta kielelläsi, mutta voit käyttää sitä englanniksi."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Äänisyöte käyttää Googlen puheentunnistusta. "<a href="http://m.google.com/privacy">"Mobile-tietosuojakäytäntö"</a>" on voimassa."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Siirry syöttöasetuksiin poistaaksesi äänisyötteen käytöstä."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Ota äänisyöte käyttöön painamalla mikrofonikuvaketta."</string>
- <string name="voice_listening" msgid="467518160751321844">"Puhu nyt"</string>
- <string name="voice_working" msgid="6666937792815731889">"Työstetään"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Virhe. Yritä uudelleen."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Ei yhteyttä"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Virhe, liikaa puhetta."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Ääniongelma"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Palvelinvirhe"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Puhetta ei kuulu"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Ei vastineita"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Puhehakua ei asennettu"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Vihje:"</b>" liu\'uta sormea näppäimistöllä ja puhu"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Vihje:"</b>" kokeile seuraavalla kerralla puhua välimerkit, kuten \"period\" (piste), \"comma\" (pilkku) tai \"question mark\" (kysymysmerkki)."</string>
- <string name="cancel" msgid="6830980399865683324">"Peruuta"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Ääniohjausavain"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Päänäppäimistössä"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Symbolinäppäimistössä"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikr. päänäppäim."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikr. symbolinäppäim."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Ääniohjaus on pois käytöstä"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Valitse syöttötapa"</string>
<string name="configure_input_method" msgid="373356270290742459">"Määritä syöttötavat"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Syöttökielet"</string>
<string name="select_language" msgid="3693815588777926848">"Syöttökielet"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Tallenna koskettamalla uudelleen"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Sanakirja saatavilla"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Ota käyttäjäpalaute käyttöön"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Auta parantamaan tätä syöttötavan muokkausohjelmaa lähettämällä automaattisesti käyttötietoja ja kaatumisraportteja Googlelle."</string>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 1998be550..f2c7fbe85 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode Lettres"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode Téléphone"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode Symboles du téléphone"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Saisie vocale"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"La saisie vocale n\'est pas encore prise en charge pour votre langue, mais elle fonctionne en anglais."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"La saisie vocale fait appel à la reconnaissance vocale de Google. Les "<a href="http://m.google.com/privacy">"Règles de confidentialité Google Mobile"</a>" s\'appliquent."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Pour désactiver la saisie vocale, accédez aux paramètres du mode de saisie."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Pour utiliser la saisie vocale, appuyez sur la touche du microphone."</string>
- <string name="voice_listening" msgid="467518160751321844">"Parlez maintenant"</string>
- <string name="voice_working" msgid="6666937792815731889">"Traitement en cours"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Erreur. Veuillez réessayer."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Connexion impossible"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Erreur, discours trop long."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problème audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Erreur serveur"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Aucune requête vocale détectée"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Aucune correspondance n\'a été trouvée."</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Recherche vocale non installée"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Astuce :"</b>" Faites glisser votre doigt sur le clavier pour parler."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Astuce :"</b>" La prochaine fois, essayez de prononcer la ponctuation, en énonçant des termes tels que \"point\", \"virgule\" ou \"point d\'interrogation\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Annuler"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Touche de saisie vocale"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Sur clavier principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sur clavier symboles"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micro sur le clavier principal"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micro sur clavier symboles"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Saisie vocale désactivée"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Sélectionner un mode de saisie."</string>
<string name="configure_input_method" msgid="373356270290742459">"Configurer les modes de saisie"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Langues de saisie"</string>
<string name="select_language" msgid="3693815588777926848">"Langues de saisie"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Appuyer de nouveau pour enregistrer"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Appuyer de nouveau pour enregistrer"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Autoriser les commentaires des utilisateurs"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'incident à Google."</string>
diff --git a/java/res/values-hi/donottranslate-more-keys.xml b/java/res/values-hi/donottranslate-more-keys.xml
new file mode 100644
index 000000000..19bcb9dda
--- /dev/null
+++ b/java/res/values-hi/donottranslate-more-keys.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+0967: "१" DEVANAGARI DIGIT ONE -->
+ <string name="keylabel_for_symbols_1">&#x0967;</string>
+ <!-- U+0968: "२" DEVANAGARI DIGIT TWO -->
+ <string name="keylabel_for_symbols_2">&#x0968;</string>
+ <!-- U+0969: "३" DEVANAGARI DIGIT THREE -->
+ <string name="keylabel_for_symbols_3">&#x0969;</string>
+ <!-- U+096A: "४" DEVANAGARI DIGIT FOUR -->
+ <string name="keylabel_for_symbols_4">&#x096A;</string>
+ <!-- U+096B: "५" DEVANAGARI DIGIT FIVE -->
+ <string name="keylabel_for_symbols_5">&#x096B;</string>
+ <!-- U+096C: "६" DEVANAGARI DIGIT SIX -->
+ <string name="keylabel_for_symbols_6">&#x096C;</string>
+ <!-- U+096D: "७" DEVANAGARI DIGIT SEVEN -->
+ <string name="keylabel_for_symbols_7">&#x096D;</string>
+ <!-- U+096E: "८" DEVANAGARI DIGIT EIGHT -->
+ <string name="keylabel_for_symbols_8">&#x096E;</string>
+ <!-- U+096F: "९" DEVANAGARI DIGIT NINE -->
+ <string name="keylabel_for_symbols_9">&#x096F;</string>
+ <!-- U+0966: "०" DEVANAGARI DIGIT ZERO -->
+ <string name="keylabel_for_symbols_0">&#x0966;</string>
+ <string name="additional_more_keys_for_symbols_1">1</string>
+ <string name="additional_more_keys_for_symbols_2">2</string>
+ <string name="additional_more_keys_for_symbols_3">3</string>
+ <string name="additional_more_keys_for_symbols_4">4</string>
+ <string name="additional_more_keys_for_symbols_5">5</string>
+ <string name="additional_more_keys_for_symbols_6">6</string>
+ <string name="additional_more_keys_for_symbols_7">7</string>
+ <string name="additional_more_keys_for_symbols_8">8</string>
+ <string name="additional_more_keys_for_symbols_9">9</string>
+ <string name="additional_more_keys_for_symbols_0">0</string>
+</resources>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 5c5ec884b..2e2b77607 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"अक्षर मोड"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"फ़ोन मोड"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"फ़ोन प्रतीक मोड"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"ध्‍वनि इनपुट"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"ध्‍वनि इनपुट आपकी भाषा के लिए अभी समर्थित नहीं है, पर अंग्रेज़ी में कार्य करता है."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"ध्‍वनि इनपुट Google की वाक् पहचान का उपयोग करता है. "<a href="http://m.google.com/privacy">"मोबाइल गोपनीयता नीति"</a>" लागू होती है."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"ध्‍वनि इनपुट बंद करने के लिए, इनपुट पद्धति सेटिंग पर जाएं."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"ध्‍वनि इनपुट का उपयोग करने के लिए, माइक्रोफ़ोन बटन दबाएं."</string>
- <string name="voice_listening" msgid="467518160751321844">"अब बोलें"</string>
- <string name="voice_working" msgid="6666937792815731889">"कार्य कर रहा है"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"त्रुटि. कृपया पुन: प्रयास करें."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"कनेक्‍ट नहीं कर सका"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"त्रुटि, बहुत अधिक बातचीत."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"ऑडियो समस्या"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"सर्वर त्रुटि"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"कोई बातचीत नहीं सुनाई दी"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"कोई मिलान नहीं मिले"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"ध्‍वनि खोज इंस्टॉल नहीं है"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"संकेत:"</b>" बोलने के लिए कीबोर्ड पर स्‍वाइप करें"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"संकेत:"</b>" अगली बार, विरामचिन्‍ह बोलने का प्रयास करें जैसे \"पूर्णविराम\", \"अल्‍पविराम\", या \"प्रश्‍नचिह्न\"."</string>
- <string name="cancel" msgid="6830980399865683324">"रद्द करें"</string>
- <string name="ok" msgid="7898366843681727667">"ठीक"</string>
<string name="voice_input" msgid="3583258583521397548">"ध्‍वनि‍ इनपुट कुंजी"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"मुख्‍य कीबोर्ड पर"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"प्रतीक कीबोर्ड पर"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"मुख्‍य कीबोर्ड पर माइक"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"प्रतीक कीबोर्ड पर माइक"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"ध्‍वनि इनपुट अक्षम है"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"इनपुट विधि का चयन करें"</string>
<string name="configure_input_method" msgid="373356270290742459">"इनपुट पद्धति कॉन्‍फ़िगर करें"</string>
<string name="language_selection_title" msgid="1651299598555326750">"इनपुट भाषा"</string>
<string name="select_language" msgid="3693815588777926848">"इनपुट भाषाएं"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← सहेजने के लिए फिर से स्‍पर्श करें"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"शब्‍दकोश उपलब्‍ध है"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"उपयोगकर्ता फ़ीडबैक सक्षम करें"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"उपयोग के आंकड़े और क्रैश रिपोर्ट Google को स्वचालित रूप से भेज कर इस इनपुट पद्धति संपादक को बेहतर बनाने में सहायता करें."</string>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 2c227061d..e416816b2 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Način pisanja slova"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonski način rada"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Način unosa telefonskih simbola"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Glasovni ulaz"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Vaš jezik trenutno nije podržan za glasovni unos, ali radi za engleski."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Glasovni unos upotrebljava Googleovo prepoznavanje govora. Primjenjuju se "<a href="http://m.google.com/privacy">"Pravila o privatnosti za uslugu Mobile"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Za isključivanje glasovnog unosa idite na postavke načina unosa."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Za upotrebu glasovnog unosa pritisnite gumb mikrofona."</string>
- <string name="voice_listening" msgid="467518160751321844">"Govorite sad"</string>
- <string name="voice_working" msgid="6666937792815731889">"Obrada"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Pogreška. Pokušajte ponovo."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Spajanje nije bilo moguće"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Pogreška, predugi govor."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problem sa zvukom"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Pogreška na poslužitelju"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nije se čuo govor"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nisu pronađeni rezultati"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Glasovno pretraživanje nije instalirano"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Savjet:"</b>" Prijeđite preko tipkovnice pa govorite"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Savjet:"</b>" Sljedeći put pokušajte izgovoriti znakove interpunkcije poput \"točka, \"zarez\" ili \"upitnik\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Odustani"</string>
- <string name="ok" msgid="7898366843681727667">"U redu"</string>
<string name="voice_input" msgid="3583258583521397548">"Tipka za glasovni unos"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na glavnoj tipkovnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na tipkovnici simb."</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofon na gl. tipkovnici"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mik. na tipk. simb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Glas. unos onemog."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Odabir ulazne metode"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfiguriraj načine ulaza"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Jezici unosa"</string>
<string name="select_language" msgid="3693815588777926848">"Jezici unosa"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Dodirnite opet za spremanje"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Rječnik je dostupan"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Omogući korisničke povratne informacije"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Pomozite u poboljšanju ovog urednika ulazne metode automatskim slanjem statistike upotrebe i padova Googleu."</string>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index e4b63634a..7e466ed40 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"\"Betű\" mód"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"\"Telefon\" mód"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"\"Telefonos szimbólumok\" mód"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Hangbevitel"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"A hangbevitel szolgáltatás jelenleg nem támogatja az Ön nyelvét, ám angolul működik."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"A hangbevitel a Google beszédfelismerő technológiáját használja, amelyre a "<a href="http://m.google.com/privacy">"Mobil adatvédelmi irányelvek"</a>" érvényesek."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"A hangbevitelt a beviteli mód beállításai között lehet kikapcsolni."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"A hangbevitel használatához nyomja meg a mikrofon gombot."</string>
- <string name="voice_listening" msgid="467518160751321844">"Most beszéljen"</string>
- <string name="voice_working" msgid="6666937792815731889">"Feldolgozás"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Hiba történt. Kérjük, próbálja újra."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Nem sikerült kapcsolódni"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Hiba történt; túl sokat beszélt."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Hangprobléma"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Szerverhiba"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nem hallatszott beszéd"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nem található egyezés"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"A hangalapú keresés nincs telepítve"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Tipp:"</b>" húzza végig az ujját a billentyűzeten a beszédhez"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Tipp:"</b>" következő alkalommal próbálja ki az írásjelek kimondását is, pl. \"period\", \"comma\" vagy \"question mark\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Mégse"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Hangbeviteli gomb"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"A fő billentyűzeten"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Szimbólumoknál"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikr. a billentyűzeten"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikr. a szimbólumoknál"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Hangbevivel KI"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Beviteli mód kiválasztása"</string>
<string name="configure_input_method" msgid="373356270290742459">"Beviteli módok beállítása"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Beviteli nyelvek"</string>
<string name="select_language" msgid="3693815588777926848">"Beviteli nyelvek"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Érintse meg újra a mentéshez"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Van elérhető szótár"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Felhasználói visszajelzés engedélyezése"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Segíthet ennek a beviteli módszernek a javításában, ha engedélyezi a használati statisztikák és a hibajelentések elküldését a Google-nak."</string>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index 4456f0860..39b41c021 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -37,7 +37,7 @@
<string name="misc_category" msgid="6894192814868233453">"Opsi lain"</string>
<string name="advanced_settings" msgid="362895144495591463">"Setelan lanjutan"</string>
<string name="advanced_settings_summary" msgid="4487980456152830271">"Opsi untuk ahli"</string>
- <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Alihkn k mtode msukn lain"</string>
+ <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Beralih ke metode masukan lain"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tombol beralih bahasa juga mencakup metode masukan lain"</string>
<string name="suppress_language_switch_key" msgid="8003788410354806368">"Redam tombol alih bahasa"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Tundaan singkir munculan kunci"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode huruf"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode telepon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode simbol telepon"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Masukan suara"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Masukan suara saat ini tidak didukung untuk bahasa Anda, tetapi bekerja dalam Bahasa Inggris."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Masukan suara menggunakan pengenalan ucapan Google. "<a href="http://m.google.com/privacy">"Kebijakan Privasi Seluler"</a>" berlaku."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Untuk mematikan masukan suara, buka setelan metode masukan."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Untuk menggunakan masukan suara, tekan tombol mikrofon."</string>
- <string name="voice_listening" msgid="467518160751321844">"Ucapkan sekarang"</string>
- <string name="voice_working" msgid="6666937792815731889">"Bekerja"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Kesalahan: Coba lagi."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Tidak dapat menyambung"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Kesalahan, terlalu banyak ucapan."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Masalah audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Kesalahan server"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Tidak terdengar ucapan"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Tak ditemukan yang cocok"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Penelusuran suara tidak terpasang"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Petunjuk:"</b>" Gesek keyboard untuk berbicara"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Petunjuk:"</b>" Selanjutnya, coba ucapkan tanda baca seperti \"titik\", \"koma\", atau \"tanda tanya\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Batal"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Tombol masukan suara"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pada keyboard utama"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pada keyboard simbol"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mik pada keyboard utama"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mik pada keyboard simbol"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Masukan suara dinonaktifkan"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Pilih metode masukan"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurasikan metode masukan"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Bahasa masukan"</string>
<string name="select_language" msgid="3693815588777926848">"Bahasa masukan"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Sentuh sekali lagi untuk menyimpan"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Kamus yang tersedia"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktifkan masukan pengguna"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Bantu tingkatkan metode editor masukan dengan mengirim statistik penggunaan dan laporan kerusakan ke Google secara otomatis."</string>
diff --git a/java/res/values-is/donottranslate-more-keys.xml b/java/res/values-is/donottranslate-more-keys.xml
index 2c3fa1e2e..284aae930 100644
--- a/java/res/values-is/donottranslate-more-keys.xml
+++ b/java/res/values-is/donottranslate-more-keys.xml
@@ -65,9 +65,9 @@
<!-- U+00FE: "þ" LATIN SMALL LETTER THORN -->
<string name="more_keys_for_t">&#x00FE;</string>
<!-- U+00F0: "ð" LATIN SMALL LETTER ETH -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00F0;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00F0;</string>
<!-- U+00E6: "æ" LATIN SMALL LETTER AE -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00E6;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00E6;</string>
<!-- U+00FE: "þ" LATIN SMALL LETTER THORN -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00FE;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00FE;</string>
</resources>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index a3f01e157..3e27f4eb8 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modalità lettere"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modalità telefono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modalità simboli telefono"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Comandi vocali"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"I comandi vocali non sono attualmente supportati per la tua lingua ma funzionano in inglese."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"L\'input vocale utilizza il riconoscimento vocale di Google. Sono valide le "<a href="http://m.google.com/privacy">"norme sulla privacy di Google Mobile"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Per disattivare l\'input vocale, vai alle impostazioni del metodo di input."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Per utilizzare l\'input vocale, premi il pulsante del microfono."</string>
- <string name="voice_listening" msgid="467518160751321844">"Parla ora"</string>
- <string name="voice_working" msgid="6666937792815731889">"Elaborazione..."</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Errore. Riprova più tardi."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Impossibile connettersi."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Errore: conversazione troppo lunga."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Errore del server"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nessuna frase vocale rilevata"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nessuna corrispondenza trovata"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Ricerca vocale non installata"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Suggerimento."</b>" Fai scorrere il dito sulla tastiera per parlare"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Suggerimento."</b>" La prossima volta, prova a pronunciare termini relativi alla punteggiatura come \"punto\", \"virgola\" o \"punto di domanda\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Annulla"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Tasto immissione vocale"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Su tastiera principale"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Su tastiera simboli"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic su tastiera principale"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic su tastiera simboli"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Comandi vocali disatt."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Seleziona metodo di inserimento"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configura metodi di immissione"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Lingue comandi"</string>
<string name="select_language" msgid="3693815588777926848">"Lingue comandi"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Tocca di nuovo per salvare"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Tocca di nuovo per salvare"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dizionario disponibile"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Attiva commenti degli utenti"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Aiuta a migliorare l\'editor del metodo di inserimento inviando automaticamente a Google statistiche sull\'utilizzo e segnalazioni sugli arresti anomali."</string>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index dabbd4d05..2d8f8dc1c 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"מצב אותיות"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"מצב טלפון"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"מצב סמלי טלפון"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"קלט קולי"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"קלט קולי אינו נתמך בשלב זה בשפתך, אך הוא פועל באנגלית."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"קלט קולי משתמש בזיהוי דיבור של Google.‏ "<a href="http://m.google.com/privacy">"מדיניות הפרטיות של \'Google לנייד\'"</a>" חלה במקרה זה."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"כדי לכבות את הקלט הקולי, עבור להגדרות של שיטת קלט."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"כדי להשתמש בקלט קולי, לחץ על לחצן המיקרופון."</string>
- <string name="voice_listening" msgid="467518160751321844">"דבר עכשיו"</string>
- <string name="voice_working" msgid="6666937792815731889">"פועל"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"שגיאה. נסה שוב."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"אין אפשרות להתחבר"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"שגיאה, קטע דיבור ארוך מדי."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"בעיה באודיו"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"שגיאת שרת"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"לא ניתן לשמוע דיבור"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"לא נמצאו התאמות"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"חיפוש קולי לא מותקן"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"רמז:"</b>" העבר על המקלדת כדי לדבר"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"רמז:"</b>" בפעם הבאה, נסה לומר את סימני הפיסוק כגון \"נקודה\", \"פסיק\" או \"סימן שאלה\"."</string>
- <string name="cancel" msgid="6830980399865683324">"ביטול"</string>
- <string name="ok" msgid="7898366843681727667">"אישור"</string>
<string name="voice_input" msgid="3583258583521397548">"מקש קלט קולי"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"במקלדת הראשית"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"במקלדת סמלים"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"מיקרופון במקלדת הראשית"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"מיקרופון במקלדת סמלים"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"הקלט הקולי מושבת"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"בחר שיטת קלט"</string>
<string name="configure_input_method" msgid="373356270290742459">"הגדרת שיטות קלט"</string>
<string name="language_selection_title" msgid="1651299598555326750">"שפות קלט"</string>
<string name="select_language" msgid="3693815588777926848">"שפות קלט"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← גע פעם נוספת לשמירה"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"מילון זמין"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"הפוך משוב ממשתמשים לפעיל"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"עזור לשפר את עורך שיטת הקלט על ידי שליחה אוטומטית של סטטיסטיקת שימוש ודוחות קריסת מחשב ל-Google."</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 42b54fb50..439a652e0 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"英数モード"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"電話モード"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"電話記号モード"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"音声入力"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"音声入力は現在英語には対応していますが、日本語には対応していません。"</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"音声入力ではGoogleの音声認識技術を利用します。"<a href="http://m.google.com/privacy">"モバイルプライバシーポリシー"</a>"が適用されます。"</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"音声入力をOFFにするには、入力方法の設定を開きます。"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"音声入力するには、マイクボタンを押してください。"</string>
- <string name="voice_listening" msgid="467518160751321844">"お話しください"</string>
- <string name="voice_working" msgid="6666937792815731889">"処理中"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"エラーです。もう一度お試しください。"</string>
- <string name="voice_network_error" msgid="6649556447401862563">"接続できませんでした"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"音声が長すぎてエラーになりました。"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"オーディオエラー"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"サーバーエラー"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"音声が聞き取れません"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"該当なし"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Voice Searchはインストールされていません"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"ヒント:"</b>" 音声入力するにはキーボードをスワイプします"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"ヒント:"</b>" 次回は句読点として「period」、「comma」、「question mark」などの音声入力を試してみてください。"</string>
- <string name="cancel" msgid="6830980399865683324">"キャンセル"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"音声入力キー"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"メインキーボード上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"記号キーボード上"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"メインキーボードのマイク"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"記号キーボードのマイク"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"音声入力は無効です"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"入力方法の選択"</string>
<string name="configure_input_method" msgid="373356270290742459">"入力方法を設定"</string>
<string name="language_selection_title" msgid="1651299598555326750">"入力言語"</string>
<string name="select_language" msgid="3693815588777926848">"入力言語"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"←保存するにはもう一度タップ"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"辞書を利用できます"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"ユーザーフィードバックを有効にする"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"IMEの機能向上のため、使用統計状況やクラッシュレポートをGoogleに自動送信します。"</string>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 8543f2e85..a2863c7e8 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"문자 모드"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"다이얼 모드"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"전화 기호 모드"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"음성 입력"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"음성 입력은 현재 자국어로 지원되지 않으며 영어로 작동됩니다."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"음성 입력에서는 Google의 음성 인식 기능을 사용합니다. "<a href="http://m.google.com/privacy">"모바일 개인정보취급방침"</a>"이 적용됩니다."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"음성 입력을 사용하지 않으려면 입력 방법 설정으로 이동하세요."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"음성 입력을 사용하려면 마이크 버튼을 누르세요."</string>
- <string name="voice_listening" msgid="467518160751321844">"지금 말하세요."</string>
- <string name="voice_working" msgid="6666937792815731889">"인식 중"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"오류가 발생했습니다. 다시 시도해 보세요."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"연결할 수 없습니다."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"음성을 너무 많이 입력했습니다."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"오디오 문제"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"서버 오류"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"음성이 인식되지 않았습니다."</string>
- <string name="voice_no_match" msgid="4285117547030179174">"일치하는 항목 없음"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"음성 검색이 설치되지 않았습니다."</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"도움말:"</b>" 키보드 위로 손가락을 미끄러지듯 움직이고 나서 말하세요."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"도움말:"</b>" 다음 번에는 \'마침표\', \'쉼표\', \'물음표\'와 같은 구두점을 말해 보세요."</string>
- <string name="cancel" msgid="6830980399865683324">"취소"</string>
- <string name="ok" msgid="7898366843681727667">"확인"</string>
<string name="voice_input" msgid="3583258583521397548">"음성 입력 키"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"기본 키보드"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"기호 키보드"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"기본 키보드의 마이크"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"기호 키보드의 마이크"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"음성 입력이 사용 중지됨"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"입력 방법 선택"</string>
<string name="configure_input_method" msgid="373356270290742459">"입력 방법 설정"</string>
<string name="language_selection_title" msgid="1651299598555326750">"입력 언어"</string>
<string name="select_language" msgid="3693815588777926848">"입력 언어"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← 저장하려면 다시 터치하세요."</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"사전 사용 가능"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"사용자 의견 사용"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"사용 통계 및 충돌 보고서를 Google에 자동으로 전송하여 입력 방법 편집기의 개선에 도움을 줍니다."</string>
diff --git a/java/res/values-ky/donottranslate-more-keys.xml b/java/res/values-ky/donottranslate-more-keys.xml
index b67a9f15d..fd90248b2 100644
--- a/java/res/values-ky/donottranslate-more-keys.xml
+++ b/java/res/values-ky/donottranslate-more-keys.xml
@@ -18,10 +18,20 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+0449: "щ" CYRILLIC SMALL LETTER SHCHA -->
+ <string name="keylabel_for_east_slavic_row1_9">&#x0449;</string>
+ <!-- U+044B: "ы" CYRILLIC SMALL LETTER YERU -->
+ <string name="keylabel_for_east_slavic_row2_1">&#x044B;</string>
+ <!-- U+0438: "и" CYRILLIC SMALL LETTER I -->
+ <string name="keylabel_for_east_slavic_row3_5">&#x0438;</string>
<!-- U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U -->
<string name="more_keys_for_cyrillic_u">&#x04AF;</string>
<!-- U+04A3: "ң" CYRILLIC SMALL LETTER EN WITH DESCENDER -->
<string name="more_keys_for_cyrillic_en">&#x04A3;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_ha">&#x044A;</string>
<!-- U+04E9: "ө" CYRILLIC SMALL LETTER BARRED O -->
<string name="more_keys_for_cyrillic_o">&#x04E9;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_soft_sign">&#x044A;</string>
</resources>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index a0192b859..8349dcdad 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Raidžių režimas"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefono režimas"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefono simbolių režimas"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Balso įvestis"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Šiuo metu balso įvestis jūsų kompiuteryje nepalaikoma, bet ji veikia anglų k."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Balso įvesčiai naudojamas „Google“ kalbos atpažinimas. Taikoma "<a href="http://m.google.com/privacy">"privatumo politika mobiliesiems"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Jei norite išjungti balso įvestį, eikite į įvesties metodo nustatymus."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Jei norite naudoti balso įvestį, paspauskite mikrofono mygtuką."</string>
- <string name="voice_listening" msgid="467518160751321844">"Kalbėkite dabar"</string>
- <string name="voice_working" msgid="6666937792815731889">"Veikia"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Klaida. Bandykite dar kartą."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Nepavyko prijungti"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Klaida, per daug kalbos."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema su garsu"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serverio klaida"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Negirdima jokia kalba"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Atitikmenų nerasta"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Balso paieška neįdiegta"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Užuomina:"</b>" perbraukite klaviatūra, kad galėtumėte kalbėti"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Užuomina:"</b>" kitą kartą pabandykite sakyti skyrybos ženklų pavadinimus, pvz., „taškas“, „kablelis“ arba „klaustukas“."</string>
- <string name="cancel" msgid="6830980399865683324">"Atšaukti"</string>
- <string name="ok" msgid="7898366843681727667">"Gerai"</string>
<string name="voice_input" msgid="3583258583521397548">"Įvesties balsu klavišas"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pagr. klaviatūroje"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Simbolių klaviatūr."</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrof. pagr. klav."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrof. simb. klav."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Balso įv. neleidž."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Pasirinkti įvesties metodą"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigūruoti įvesties metodus"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Įvesties kalbos"</string>
<string name="select_language" msgid="3693815588777926848">"Įvesties kalbos"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Kad išsaugotumėte, dar kartą palieskite"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Žodynas galimas"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Įgalinti naudotojų atsiliepimus"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Padėkite patobulinti šią įvesties metodo redagavimo programą automatiškai „Google“ siųsdami naudojimo statistiką ir strigčių ataskaitas."</string>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 2ba1293ad..b406692dc 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Burtu režīms"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Tālruņa režīms"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Tālruņa simbolu režīms"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Balss ievade"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Balss ievade jūsu valodā pašlaik netiek atbalstīta, taču tā ir pieejama angļu valodā."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Balss ievadei tiek izmantota Google runas atpazīšanas funkcija. Uz šīs funkcijas lietošanu attiecas "<a href="http://m.google.com/privacy">"mobilo sakaru ierīču lietošanas konfidencialitātes politika"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Lai izslēgtu balss ievadi, atveriet ievades metodes iestatījumus."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Lai izmantotu balss ievadi, nospiediet mikrofona taustiņu."</string>
- <string name="voice_listening" msgid="467518160751321844">"Runājiet!"</string>
- <string name="voice_working" msgid="6666937792815731889">"Notiek apstrāde"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Kļūda. Lūdzu, mēģiniet vēlreiz."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Nevar izveidot savienojumu."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Kļūda, pārāk ilga balss ievade."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Audio problēma"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Servera kļūda"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nekas nav dzirdams."</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nav atrasta neviena atbilstība."</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Balss meklēšana nav instalēta."</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Ieteikums:"</b>" slidiniet pirkstu pār tastatūru, lai veiktu balss ievadi."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Ieteikums:"</b>" nākamreiz mēģiniet izrunāt pieturzīmes, piemēram, “punkts”, “komats” vai “jautājuma zīme”."</string>
- <string name="cancel" msgid="6830980399865683324">"Atcelt"</string>
- <string name="ok" msgid="7898366843681727667">"Labi"</string>
<string name="voice_input" msgid="3583258583521397548">"Balss ievades atslēga"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Uz galv. tastatūras"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Uz simbolu tastat."</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikr.uz galv.tastat."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikr.uz simb.tastat."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Balss iev. atspējota"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Atlasīt ievades metodi"</string>
<string name="configure_input_method" msgid="373356270290742459">"Ievades metožu konfigurēšana"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Ievades valodas"</string>
<string name="select_language" msgid="3693815588777926848">"Ievades valodas"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Pieskarieties vēlreiz, lai saglabātu"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Pieskarieties vēlreiz, lai saglabātu."</string>
<string name="has_dictionary" msgid="6071847973466625007">"Ir pieejama vārdnīca."</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Iespējot lietotāju atsauksmes"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Palīdziet uzlabot šo ievades metodes redaktoru, automātiski nosūtot lietojuma statistiku un pārskatus par avārijām uzņēmumam Google."</string>
diff --git a/java/res/values-mk/donottranslate-more-keys.xml b/java/res/values-mk/donottranslate-more-keys.xml
index e96a306b6..d0cccf61b 100644
--- a/java/res/values-mk/donottranslate-more-keys.xml
+++ b/java/res/values-mk/donottranslate-more-keys.xml
@@ -18,15 +18,14 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- NOTE: Macedonian layouts are based on Serbian ones with the following key replacements. -->
<!-- U+0455: "ѕ" CYRILLIC SMALL LETTER DZE -->
- <string name="keylabel_for_cyrillic_ze">&#x0455;</string>
+ <string name="keylabel_for_south_slavic_row1_6">&#x0455;</string>
<!-- U+045C: "ќ" CYRILLIC SMALL LETTER KJE -->
- <string name="keylabel_for_cyrillic_tshe">&#x045C;</string>
+ <string name="keylabel_for_south_slavic_row2_11">&#x045C;</string>
<!-- U+0437: "з" CYRILLIC SMALL LETTER ZE -->
- <string name="keylabel_for_cyrillic_dze">&#x0437;</string>
+ <string name="keylabel_for_south_slavic_row3_1">&#x0437;</string>
<!-- U+0453: "ѓ" CYRILLIC SMALL LETTER GJE -->
- <string name="keylabel_for_cyrillic_dje">&#x0453;</string>
+ <string name="keylabel_for_south_slavic_row3_8">&#x0453;</string>
<!-- U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE -->
<string name="more_keys_for_cyrillic_ie">&#x0450;</string>
<!-- U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE -->
diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml
index 246c4d7a0..71cceff33 100644
--- a/java/res/values-ms/strings.xml
+++ b/java/res/values-ms/strings.xml
@@ -39,7 +39,7 @@
<string name="advanced_settings_summary" msgid="4487980456152830271">"Pilihan untuk pakar"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Tukar ke kaedah input lain"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kunci pertukaran bahasa meliputi kaedah masukan lain juga"</string>
- <string name="suppress_language_switch_key" msgid="8003788410354806368">"Tekan kunci ptukaran bhs"</string>
+ <string name="suppress_language_switch_key" msgid="8003788410354806368">"Tekan kunci alih bahasa"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Pop tmbl knci ketpkn lengah"</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Tiada lengah"</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Lalai"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mod huruf"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mod telefon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mod simbol telefon"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Input suara"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Input suara tidak disokong untuk bahasa anda pada masa ini tetapi ia berfungsi dalam bahasa Inggeris."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Input suara menggunakan pengecaman pertuturan Google. "<a href="http://m.google.com/privacy">"Dasar Privasi Mudah Alih"</a>" digunakan."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Untuk mematikan input suara, pergi ke tetapan kaedah input."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Untuk menggunakan input suara, tekan butang mikrofon."</string>
- <string name="voice_listening" msgid="467518160751321844">"Sebutkan sekarang"</string>
- <string name="voice_working" msgid="6666937792815731889">"Berfungsi"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Ralat. Sila cuba lagi."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Tidak boleh disambungkan"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Ralat, terlalu banyak pertuturan."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Masalah audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Ralat pelayan"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Tiada pertuturan didengari"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Tiada padanan ditemui"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Carian suara tidak dipasang"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021">"Petunjuk"<b>":"</b>" Leret merentasi papan kekunci untuk bercakap"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Petunjuk:"</b>" Lain kali, cuba ucapkan tanda baca seperti \"titik\", \"koma\" atau \"tanda soal\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Batal"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Kunci input suara"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Hidpkn kekunci utama"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pd ppn k’unci simbol"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mik. pd kekunci utma"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mik. pd kekunci smbl"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Input suara dilmphkn"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Pilih kaedah input"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurasikan kaedah input"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Bahasa input"</string>
<string name="select_language" msgid="3693815588777926848">"Bahasa input"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Sentuh sekali lagi untuk menyimpan"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Kamus tersedia"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Dayakan maklum balas pengguna"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Bantu memperbaik editor input ini dengan menghantar statistik penggunaan dan laporan runtuhan kepada Google."</string>
diff --git a/java/res/values-nb/donottranslate-more-keys.xml b/java/res/values-nb/donottranslate-more-keys.xml
index 7248d983e..49e6d5faf 100644
--- a/java/res/values-nb/donottranslate-more-keys.xml
+++ b/java/res/values-nb/donottranslate-more-keys.xml
@@ -48,13 +48,13 @@
U+016B: "ū" LATIN SMALL LETTER U WITH MACRON -->
<string name="more_keys_for_u">&#x00FC;,&#x00FB;,&#x00F9;,&#x00FA;,&#x016B;</string>
<!-- U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00E5;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00E5;</string>
<!-- U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00F8;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00F8;</string>
<!-- U+00E6: "æ" LATIN SMALL LETTER AE -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00E6;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00E6;</string>
<!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
- <string name="more_keys_for_scandinavia_row2_10">&#x00F6;</string>
+ <string name="more_keys_for_nordic_row2_10">&#x00F6;</string>
<!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
- <string name="more_keys_for_scandinavia_row2_11">&#x00E4;</string>
+ <string name="more_keys_for_nordic_row2_11">&#x00E4;</string>
</resources>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 183312806..c412ea0dd 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -38,8 +38,8 @@
<string name="advanced_settings" msgid="362895144495591463">"Avanserte innstillinger"</string>
<string name="advanced_settings_summary" msgid="4487980456152830271">"Alternativer for eksperter"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Bytt inndatametode"</string>
- <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Nøkkelen for språkbytte dekker også andre inndatametoder"</string>
- <string name="suppress_language_switch_key" msgid="8003788410354806368">"Skjul språkbyttenøkkelen"</string>
+ <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Tasten for språkbytte dekker også andre inndatametoder"</string>
+ <string name="suppress_language_switch_key" msgid="8003788410354806368">"Skjul språkbyttetasten"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Tregt tastevindu"</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"U/ forsinkelse"</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Standard"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bokstavmodus"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Ringemodus"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Ringemodus med symboler"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Stemmedata"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Stemmedata håndteres foreløpig ikke på ditt språk, men fungerer på engelsk."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Google Voice bruker Googles talegjenkjenning. "<a href="http://m.google.com/privacy">"Personvernreglene for mobil"</a>" gjelder."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Gå til innstillinger for inndatametode for å slå av stemmedata."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Trykk på mikrofonknappen for å aktivere stemmedata."</string>
- <string name="voice_listening" msgid="467518160751321844">"Snakk nå"</string>
- <string name="voice_working" msgid="6666937792815731889">"Arbeider"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Feil. Prøv på nytt."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Kunne ikke koble til"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Feil – for mye tale"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Lydproblem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Tjenerfeil"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Ingen tale høres"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Ingen treff"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Talesøk ikke installert"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021">"Hint:"<b>" Sveip over tastaturet for å snakke"</b></string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Hint:"</b>" Neste gang kan du prøve å tale inn tegnsettingen ved for eksempel å si «punktum», «komma» eller «spørsmålstegn»."</string>
- <string name="cancel" msgid="6830980399865683324">"Avbryt"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Tast for taleinndata"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På hovedtastatur"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På talltastatur"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofon på hovedtast."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrofon på talltastatur"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Taleinndata er deaktiv."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Velg inndatametode"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurer inndatametoder"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Inndataspråk"</string>
<string name="select_language" msgid="3693815588777926848">"Inndataspråk"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"Trykk på nytt for å lagre"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Ordbok tilgjengelig"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktiver brukertilbakemelding"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ved å sende bruksstatistikk og programstopprapporter til Google automatisk, hjelper du oss med å gjøre redigeringsfunksjonen for denne inndatametoden enda bedre."</string>
diff --git a/java/res/values-nl/donottranslate-more-keys.xml b/java/res/values-nl/donottranslate-more-keys.xml
index 4f5cbee55..73768aff2 100644
--- a/java/res/values-nl/donottranslate-more-keys.xml
+++ b/java/res/values-nl/donottranslate-more-keys.xml
@@ -40,8 +40,9 @@
U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
- U+012B: "ī" LATIN SMALL LETTER I WITH MACRON -->
- <string name="more_keys_for_i">&#x00ED;,&#x00EF;,&#x00EC;,&#x00EE;,&#x012F;,&#x012B;</string>
+ U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
+ U+0133: "ij" LATIN SMALL LIGATURE IJ -->
+ <string name="more_keys_for_i">&#x00ED;,&#x00EF;,&#x00EC;,&#x00EE;,&#x012F;,&#x012B;,&#x0133;</string>
<!-- U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
@@ -60,4 +61,6 @@
<!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE -->
<string name="more_keys_for_n">&#x00F1;,&#x0144;</string>
+ <!-- U+0133: "ij" LATIN SMALL LIGATURE IJ -->
+ <string name="more_keys_for_y">&#x0133;</string>
</resources>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 8f9124ea9..8f33aa963 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Alfanumeriek toetsenbord"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Toetsenbord telefoon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefoonsymbolen"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Spraakinvoer"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Spraakinvoer wordt momenteel niet ondersteund in uw taal, maar is wel beschikbaar in het Engels."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Spraakinvoer maakt gebruik van de spraakherkenning van Google. Het "<a href="http://m.google.com/privacy">"Privacybeleid van Google Mobile"</a>" is van toepassing."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Als u spraakinvoer wilt uitschakelen, gaat u naar de instellingen voor invoermethoden."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Druk op de microfoontoets om spraakinvoer te gebruiken."</string>
- <string name="voice_listening" msgid="467518160751321844">"Nu spreken"</string>
- <string name="voice_working" msgid="6666937792815731889">"Wordt uitgevoerd"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Fout. Probeer het opnieuw."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Kan geen verbinding maken"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Fout, te lange spraakinvoer."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Audioprobleem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serverfout"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Geen spraak te horen"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Geen resultaten gevonden"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Spraakgestuurd zoeken is niet geïnstalleerd"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Hint:"</b>" schuif over het toetsenbord om te spreken"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Hint:"</b>" spreek de volgende keer interpunctie uit, zoals \'period\' (punt), \'comma\' (komma) of \'question mark\' (vraagteken)."</string>
- <string name="cancel" msgid="6830980399865683324">"Annuleren"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Sleutel voor spraakinvoer"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Op hoofdtoetsenbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Op symbooltoetsenb."</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic op hoofdtoetsb."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic op symb.toetsb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Spraakinvoer is uit"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Invoermethode selecteren"</string>
<string name="configure_input_method" msgid="373356270290742459">"Invoermethoden configureren"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Invoertalen"</string>
<string name="select_language" msgid="3693815588777926848">"Invoertalen"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Raak nogmaals aan om op te slaan"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak nogmaals aan om op te slaan"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Woordenboek beschikbaar"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Gebruikersfeedback inschakelen."</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Help deze invoermethode te verbeteren door automatisch gebruiksstatistieken en crashmeldingen naar Google te verzenden."</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 2c91bb5ba..ea358c0c6 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Tryb liter"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Tryb telefonu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Tryb symboli telefonu"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Wprowadzanie głosowe"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Wprowadzanie głosowe obecnie nie jest obsługiwane w Twoim języku, ale działa w języku angielskim."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Funkcja wprowadzania głosowego wykorzystuje mechanizm rozpoznawania mowy. Obowiązuje "<a href="http://m.google.com/privacy">"Polityka prywatności w usługach mobilnych"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Aby wyłączyć rozpoznawanie mowy, przejdź do ustawień sposobu wprowadzania tekstu."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Aby użyć wprowadzania głosowego, naciśnij przycisk mikrofonu."</string>
- <string name="voice_listening" msgid="467518160751321844">"Mów teraz"</string>
- <string name="voice_working" msgid="6666937792815731889">"W toku"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Błąd. Spróbuj ponownie."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Nie można nawiązać połączenia"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Błąd, zbyt długa wypowiedź."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problem z dźwiękiem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Błąd serwera"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nie wykryto mowy"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Brak wyników"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Wyszukiwanie głosowe nie jest zainstalowane"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Wskazówka:"</b>" przesuń palcem po klawiaturze, aby mówić."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Wskazówka:"</b>" następnym razem spróbuj wypowiadać nazwy znaków interpunkcyjnych: „kropka”, „przecinek” lub „pytajnik”."</string>
- <string name="cancel" msgid="6830980399865683324">"Anuluj"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Klawisz rozpoznawania mowy"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na klawiaturze głównej"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klawiaturze z symbolami"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofon na klawiaturze głównej"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrofon na klawiaturze z symbolami"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Wprowadzanie głosowe jest wyłączone"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Wybierz sposób wprowadzania tekstu"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfiguruj metody wprowadzania"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Języki wprowadzania"</string>
<string name="select_language" msgid="3693815588777926848">"Języki wprowadzania"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Dotknij ponownie, aby zapisać"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Słownik dostępny"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Włącz przesyłanie opinii użytkownika"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Pomóż ulepszyć edytor wprowadzania tekstu, automatycznie wysyłając do Google statystyki użycia i raporty o awariach."</string>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 6d59c6eaf..7a0c6c20d 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de letras"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de telemóvel"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de telemóvel"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Entrada de voz"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Actualmente, a entrada de voz não é suportada para o seu idioma, mas funciona em inglês."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"A entrada de voz utiliza o reconhecimento de voz da Google. É aplicável a "<a href="http://m.google.com/privacy">"Política de privacidade do Google Mobile"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Para desactivar a entrada de voz, aceda às definições do método de entrada."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Para utilizar a entrada de voz, prima o botão do microfone."</string>
- <string name="voice_listening" msgid="467518160751321844">"Falar agora"</string>
- <string name="voice_working" msgid="6666937792815731889">"A executar"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Erro. Tente novamente."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Não foi possível ligar"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Erro, discurso demasiado longo."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema de áudio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Erro no servidor"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nenhuma voz ouvida"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Não foram encontradas correspondências"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Pesquisa de voz não instalada"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Sugestão:"</b>" Deslize no teclado para falar"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Sugestão:"</b>" Da próxima vez, experimente dizer a pontuação como \"ponto final\", \"vírgula\" ou \"ponto de interrogação\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancelar"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Chave de entrada de voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"No teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"No teclado símbolos"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic. tecl. principal"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic. tecl. símbolos"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Entr. voz desact."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Selecionar método de entrada"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de introdução"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="select_language" msgid="3693815588777926848">"Idiomas de introdução"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Toque novamente para guardar"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para guardar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Activar comentários do utilizador"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Envie automaticamente estatísticas de utilização e relatórios de falhas para a Google e ajude-nos a melhorar este editor de método de introdução."</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index e89db807f..9a0cf30de 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -38,7 +38,7 @@
<string name="advanced_settings" msgid="362895144495591463">"Configurações avançadas"</string>
<string name="advanced_settings_summary" msgid="4487980456152830271">"Opções para especialistas"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Outros métodos de entrada"</string>
- <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A tecla para mudar o idioma também cobre outro métodos de entrada"</string>
+ <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"A tecla p/ mudar o idioma também cobre outros métodos de entrada"</string>
<string name="suppress_language_switch_key" msgid="8003788410354806368">"Ocult. tecla mudar idioma"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Dispens. atraso chave princ."</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Sem atraso"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modo de cartas"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modo de telefone"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modo de símbolos de telefone"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Entrada de voz"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"A entrada de voz não é suportada no momento para o seu idioma, mas funciona em inglês."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"A entrada de texto por voz usa o reconhecimento de voz do Google. "<a href="http://m.google.com/privacy">"A política de privacidade para celulares"</a>" é aplicada."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Para desativar a entrada de texto por voz, vá para configurações do método de entrada."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Para usar a entrada de texto por voz, pressione o botão do microfone."</string>
- <string name="voice_listening" msgid="467518160751321844">"Fale agora"</string>
- <string name="voice_working" msgid="6666937792815731889">"Trabalhando"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Erro. Tente novamente."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Não foi possível conectar"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Erro, fala muito longa."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema com o áudio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Erro do servidor"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nenhuma fala ouvida"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Não há resultados compatíveis"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"A pesquisa por voz não está instalada"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Dica:"</b>" Deslize sobre o teclado para falar"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Dica:"</b>" Da próxima vez, tente falar o nome da pontuação como \"ponto\", \"vírgula\" ou \"ponto de interrogação\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Cancelar"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Chave de entrada de texto por voz"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"No teclado principal"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"No teclado de símb."</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic. no teclado"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic. no teclado"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Texto por voz desat."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Selecionar método de entrada"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configurar métodos de entrada"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Idiomas de entrada"</string>
<string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Toque novamente para salvar"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para salvar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Ativar comentário do usuário"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ajude a melhorar este editor de método de entrada enviando automaticamente ao Google estatísticas de uso e relatórios de falhas."</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 8fcb67d46..bacb7d47c 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -170,29 +170,6 @@
<skip />
<!-- no translation found for spoken_description_mode_phone_shift (5499629753962641227) -->
<skip />
- <string name="voice_warning_title" msgid="4419354150908395008">"Cumonds vocals"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"\"Cumonds vocals en Vossa lingua na vegnan actualmain betg sustegnids, ma la funcziun è disponibla per englais.\""</string>
- <!-- no translation found for voice_warning_may_not_understand (5596289095878251072) -->
- <skip />
- <!-- no translation found for voice_warning_how_to_turn_off (3190378129944934856) -->
- <skip />
- <!-- no translation found for voice_hint_dialog_message (1420686286820661548) -->
- <skip />
- <string name="voice_listening" msgid="467518160751321844">"Ussa discurrer"</string>
- <string name="voice_working" msgid="6666937792815731889">"Operaziun en progress"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Errur. Empruvai anc ina giada."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Impussibel da connectar."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Errur - discurrì memia ditg."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problem audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Errur dal server"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Betg udì ina frasa vocala"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Betg chattà correspundenzas"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Betg installà la tschertga vocala"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Commentari:"</b>" Stritgai cun il det sur la tastatura per discurrer."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754">"\""<b>"Commentari:"</b>" Empruvai la proxima giada d\'agiuntar segns d\'interpuncziun sco \"\"punct\"\", \"\"comma\"\" u \"\"segn da dumonda\"\" cun cumonds vocals.\""</string>
- <string name="cancel" msgid="6830980399865683324">"Interrumper"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<!-- no translation found for voice_input (3583258583521397548) -->
<skip />
<!-- no translation found for voice_input_modes_main_keyboard (3360660341121083174) -->
@@ -207,14 +184,12 @@
<skip />
<!-- no translation found for voice_input_modes_summary_off (63875609591897607) -->
<skip />
- <!-- no translation found for selectInputMethod (315076553378705821) -->
- <skip />
<!-- no translation found for configure_input_method (373356270290742459) -->
<skip />
<string name="language_selection_title" msgid="1651299598555326750">"Linguas da cumonds vocals"</string>
<!-- no translation found for select_language (3693815588777926848) -->
<skip />
- <!-- no translation found for hint_add_to_dictionary (9006292060636342317) -->
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
<skip />
<string name="has_dictionary" msgid="6071847973466625007">"Dicziunari disponibel"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Activar il feedback da l\'utilisader"</string>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index bd62d62c9..a33805160 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Modul Alfanumeric"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Modul Telefon"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Modul Telefon cu simboluri"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Intrare voce"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Intrarea vocală nu este acceptată în prezent pentru limba dvs., însă funcţionează în limba engleză."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Intrarea vocală utilizează funcţia Google de recunoaştere vocală. Se aplică "<a href="http://m.google.com/privacy">"Politica de confidenţialitate Google Mobil"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Pentru a dezactiva intrarea vocală, accesaţi setările metodei de intrare."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Pentru a utiliza intrarea vocală, apăsaţi pe butonul Microfon."</string>
- <string name="voice_listening" msgid="467518160751321844">"Vorbiţi acum"</string>
- <string name="voice_working" msgid="6666937792815731889">"Se analizează"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Eroare. Încercaţi din nou."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Conectare imposibilă"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Eroare, discurs prea lung."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problemă audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Eroare de server"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nu s-a auzit vorbirea"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nicio potrivire"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Căutarea vocală nu este instalată"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Indiciu:"</b>" glisaţi de-a lungul tastaturii pentru a vorbi"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Indiciu:"</b>" data viitoare, încercaţi să rostiţi şi punctuaţia, cum ar fi „punct”, „virgulă”, sau „semn de întrebare”."</string>
- <string name="cancel" msgid="6830980399865683324">"Anulaţi"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Tastă pentru intrarea vocală"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Pe tastat. princip."</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Pe tastat. simbol."</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic. pe tast. princ."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micr. pe tast. simb."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Intr. vocală dezact."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Selectaţi metoda de introducere a textului"</string>
<string name="configure_input_method" msgid="373356270290742459">"Configuraţi metodele de intrare"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Selectaţi limba"</string>
<string name="select_language" msgid="3693815588777926848">"Limbi de intrare"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Atingeţi din nou pentru a salva"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Dicţionar disponibil"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Activaţi feedback de la utilizatori"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Ajutaţi la îmbunătăţirea acestui instrument de editare a metodelor de introducere a textului trimiţând în mod automat la Google statistici de utilizare şi rapoarte de blocare."</string>
diff --git a/java/res/values-ru/donottranslate-more-keys.xml b/java/res/values-ru/donottranslate-more-keys.xml
index a1a22e5aa..0bb57074c 100644
--- a/java/res/values-ru/donottranslate-more-keys.xml
+++ b/java/res/values-ru/donottranslate-more-keys.xml
@@ -18,6 +18,16 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+0449: "щ" CYRILLIC SMALL LETTER SHCHA -->
+ <string name="keylabel_for_east_slavic_row1_9">&#x0449;</string>
+ <!-- U+044B: "ы" CYRILLIC SMALL LETTER YERU -->
+ <string name="keylabel_for_east_slavic_row2_1">&#x044B;</string>
+ <!-- U+0438: "и" CYRILLIC SMALL LETTER I -->
+ <string name="keylabel_for_east_slavic_row3_5">&#x0438;</string>
<!-- U+0451: "ё" CYRILLIC SMALL LETTER IO -->
<string name="more_keys_for_cyrillic_ye">&#x0451;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_ha">&#x044A;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_soft_sign">&#x044A;</string>
</resources>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index ef759b129..3ec5daf7e 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим ввода текста"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим набора номера"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим телефонных символов"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Голосовой ввод"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"В настоящее время функция голосового ввода не поддерживает ваш язык, но вы можете пользоваться ей на английском."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Голосовой ввод использует алгоритмы распознавания речи Google. Действует "<a href="http://m.google.com/privacy">"политика конфиденциальности для мобильных устройств"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Функция голосового ввода отключается в настройках способа ввода."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Чтобы использовать голосовой ввод, нажмите кнопку микрофона."</string>
- <string name="voice_listening" msgid="467518160751321844">"Говорите"</string>
- <string name="voice_working" msgid="6666937792815731889">"Обработка запроса"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Ошибка. Повторите попытку."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Ошибка подключения"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Слишком длинная фраза"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Неполадка со звуком"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Ошибка сервера"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Речи не слышно"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Ничего не найдено"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Голосовой поиск не установлен"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Совет"</b>". Проведите пальцем по клавиатуре для голосового ввода."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Совет"</b>". В следующий раз проговаривайте знаки препинания, например \"точка\", \"запятая\", \"вопросительный знак\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Отмена"</string>
- <string name="ok" msgid="7898366843681727667">"ОК"</string>
<string name="voice_input" msgid="3583258583521397548">"Ключ голосового ввода"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Значок на основной клавиатуре"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Значок на клавиатуре символов"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Значок на основной клавиатуре"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Значок на клавиатуре символов"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Голосовой ввод откл."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Выбрать способ ввода"</string>
<string name="configure_input_method" msgid="373356270290742459">"Настройка способов ввода"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Языки ввода"</string>
<string name="select_language" msgid="3693815588777926848">"Языки ввода"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Нажмите, чтобы сохранить"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Доступен словарь"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Включить отправку сведений"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Помогите усовершенствовать редактор способа ввода, разрешив отправку статистики и отчетов о сбоях в Google."</string>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 3b06d5a84..95ebad1bf 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -39,7 +39,7 @@
<string name="advanced_settings_summary" msgid="4487980456152830271">"Možnosti pre odborníkov"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Prepnúť na iné metódy vstupu"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Kláves na prepnutie jazyka pokrýva aj ďalšie metódy vstupu"</string>
- <string name="suppress_language_switch_key" msgid="8003788410354806368">"Blok. kláves na prep. jazyka"</string>
+ <string name="suppress_language_switch_key" msgid="8003788410354806368">"Blok. kláves prep. jazyka"</string>
<string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Onesk. zrušenia kľúč. kon. okna"</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Bez oneskorenia"</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Predvolená"</string>
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Režim písmen"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Režim telefónu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Režim telefónnych symbolov"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Hlasový vstup"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Pre váš jazyk aktuálne nie je hlasový vstup podporovaný, ale funguje v angličtine."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Hlasový vstup používa rozpoznávanie hlasu Google. Na používanie hlasového vstupu sa vzťahujú "<a href="http://m.google.com/privacy">"Pravidlá ochrany osobných údajov pre mobilné služby"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Ak chcete vypnúť hlasový vstup, prejdite na nastavenia metódy vstupu."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Ak chcete použiť hlasový vstup, stlačte tlačidlo mikrofón."</string>
- <string name="voice_listening" msgid="467518160751321844">"Hovorte"</string>
- <string name="voice_working" msgid="6666937792815731889">"Prebieha spracovanie"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Chyba. Skúste to znova."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Pripojenie sa nepodarilo."</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Chyba, reč je príliš dlhá."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problém so zvukom"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Chyba servera"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Nebola zistená žiadna reč."</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Nenašli sa žiadne zhody"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Hlasové vyhľadávanie nie je nainštalované"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Tip:"</b>" Ak chcete aktivovať hlasový vstup, prejdite prstom po klávesnici."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Tip:"</b>" Nabudúce skúste vysloviť interpunkciu, napríklad „bodka“, „čiarka“ alebo „otáznik“."</string>
- <string name="cancel" msgid="6830980399865683324">"Zrušiť"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Kľúč hlasového vstupu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na hlavnej klávesnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na klávesnici so symbolmi"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mikrofón na hlavnej klávesnici"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mikrofón na klávesnici so symbolmi"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Hlasový vstup je zakázaný"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Výber metódy vstupu"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurovať metódy vstupu"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Jazyky vstupu"</string>
<string name="select_language" msgid="3693815588777926848">"Jazyky vstupu"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Ďalším dotykom slovo uložíte"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"K dispozícii je slovník"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Povoliť spätnú väzbu od používateľov"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Automatickým zasielaním štatistík o využívaní editora metódy vstupu a správ o jeho zlyhaní do služby Google môžete prispieť k vylepšeniu tohto nástroja."</string>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index be33ff8a1..636894844 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Način črk"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Način telefona"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Način simbolov telefona"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Glasovni vnos"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Glasovni vnos trenutno ni podprt v vašem jeziku, deluje pa v angleščini."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Glasovni vnos uporablja Googlovo prepoznavanje govora. Zanj velja "<a href="http://m.google.com/privacy">"pravilnik o zasebnosti za mobilne naprave"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Glasovni vnos izklopite v nastavitvah načina vnosa."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Če želite uporabljati glasovni vnos, pritisnite gumb z mikrofonom."</string>
- <string name="voice_listening" msgid="467518160751321844">"Začnite govoriti"</string>
- <string name="voice_working" msgid="6666937792815731889">"Obdelava"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Napaka. Poskusite znova."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Povezava ni mogoča"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Napaka, preveč govora."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Težave z zvokom"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Napaka strežnika"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Govora se ne sliši"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Ni rezultatov"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Glasovno iskanje ni nameščeno"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Nasvet:"</b>" za govorjenje s prstom povlecite po tipkovnici"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Nasvet:"</b>" naslednjič poskusite ločila izgovoriti, npr. »pika«, »vejica« ali »vprašaj«."</string>
- <string name="cancel" msgid="6830980399865683324">"Prekliči"</string>
- <string name="ok" msgid="7898366843681727667">"V redu"</string>
<string name="voice_input" msgid="3583258583521397548">"Tipka za glasovni vnos"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Na glavni tipkovnici"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Na tipk. s simboli"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mik. na glavni tipk."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mik. na tipk. s sim."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Glas. vnos je onem."</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Izberite način vnosa"</string>
<string name="configure_input_method" msgid="373356270290742459">"Nastavitev načinov vnosa"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Jeziki vnosa"</string>
<string name="select_language" msgid="3693815588777926848">"Jeziki vnosa"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Še enkrat se dotaknite, da shranite"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Dotaknite se še enkrat, da shranite"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Slovar je na voljo"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Omogoči povratne informacije uporabnikov"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"S samodejnim pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah Googlu nam lahko pomagate izboljšati urejevalnik načina vnosa."</string>
diff --git a/java/res/values-sr/donottranslate-more-keys.xml b/java/res/values-sr/donottranslate-more-keys.xml
new file mode 100644
index 000000000..e85d3d7a2
--- /dev/null
+++ b/java/res/values-sr/donottranslate-more-keys.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+0437: "з" CYRILLIC SMALL LETTER ZE -->
+ <string name="keylabel_for_south_slavic_row1_6">&#x0437;</string>
+ <!-- U+045B: "ћ" CYRILLIC SMALL LETTER TSHE -->
+ <string name="keylabel_for_south_slavic_row2_11">&#x045B;</string>
+ <!-- U+0455: "ѕ" CYRILLIC SMALL LETTER DZE -->
+ <string name="keylabel_for_south_slavic_row3_1">&#x0455;</string>
+ <!-- U+0452: "ђ" CYRILLIC SMALL LETTER DJE -->
+ <string name="keylabel_for_south_slavic_row3_8">&#x0452;</string>
+ <!-- U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE -->
+ <string name="more_keys_for_cyrillic_ie">&#x0450;</string>
+ <!-- U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE -->
+ <string name="more_keys_for_cyrillic_i">&#x045D;</string>
+ <!-- U+2018: "‘" LEFT SINGLE QUOTATION MARK
+ U+2019: "’" RIGHT SINGLE QUOTATION MARK
+ U+201A: "‚" SINGLE LOW-9 QUOTATION MARK
+ U+201B: "‛" SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ U+201C: "“" LEFT DOUBLE QUOTATION MARK
+ U+201D: "”" RIGHT DOUBLE QUOTATION MARK
+ U+201E: "„" DOUBLE LOW-9 QUOTATION MARK
+ U+201F: "‟" DOUBLE HIGH-REVERSED-9 QUOTATION MARK -->
+ <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. -->
+ <!-- <string name="more_keys_for_double_quote">!fixedColumnOrder!6,&#x201E;,&#x201C;,&#x201D;,&#x201F;,&#x00AB;,&#x00BB;</string> -->
+ <string name="more_keys_for_double_quote">!fixedColumnOrder!5,&#x201E;,&#x201C;,&#x201D;,&#x00AB;,&#x00BB;</string>
+ <!-- TODO: Neither DroidSans nor Roboto have the glyph for U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK. -->
+ <!-- <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!6,&#x201C;,&#x201D;,&#x201E;,&#x201F;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string> -->
+ <string name="more_keys_for_tablet_double_quote">!fixedColumnOrder!5,&#x201E;,&#x201C;,&#x201D;,&#x00AB;,&#x00BB;,&#x2018;,&#x2019;,&#x201A;,&#x201B;</string>
+</resources>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 745ed1e33..49aefd156 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим слова"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим телефона"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим симбола телефона"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Гласовни унос"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Гласовни унос тренутно није подржан за ваш језик, али функционише на енглеском."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Гласовни унос користи Google-ову функцију за препознавање гласа. Примењује се "<a href="http://m.google.com/privacy">"политика приватности за мобилне уређаје"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Да бисте искључили гласовни унос, идите на подешавања за начин уноса."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Да бисте користили гласовни унос, притисните дугме за микрофон."</string>
- <string name="voice_listening" msgid="467518160751321844">"Говорите сада"</string>
- <string name="voice_working" msgid="6666937792815731889">"Обрада"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Грешка. Покушајте поново."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Повезивање није могуће"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Грешка, говорите предуго."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Проблем са звуком"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Грешка сервера"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Не чује се говор"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Нема подударања"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Гласовна претрага није инсталирана"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Савет:"</b>" Превуците прстом преко тастатуре за гласовни унос"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Савет:"</b>" Следећи пут покушајте да изговорите знакове интерпункције као што су „тачка“, „зарез“ или „знак питања“."</string>
- <string name="cancel" msgid="6830980399865683324">"Откажи"</string>
- <string name="ok" msgid="7898366843681727667">"Потврди"</string>
<string name="voice_input" msgid="3583258583521397548">"Тастер за гласовни унос"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На главној тастатури"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"На тастатури са симболима"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Микрофон на главној тастатури"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Микрофон на тастатури са симболима"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Гласовни унос је онемогућен"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Изаберите метод уноса"</string>
<string name="configure_input_method" msgid="373356270290742459">"Конфигурисање метода уноса"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Језици за унос"</string>
<string name="select_language" msgid="3693815588777926848">"Језици уноса"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Поново додирните да бисте сачували"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Речник је доступан"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Омогући повратну информацију корисника"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Помозите да се побољша овај уређивач режима уноса тако што ће се аутоматски послати статистика о коришћењу и извештаји о грешкама компанији Google."</string>
diff --git a/java/res/values-sv/donottranslate-more-keys.xml b/java/res/values-sv/donottranslate-more-keys.xml
index e3662df69..d479191f4 100644
--- a/java/res/values-sv/donottranslate-more-keys.xml
+++ b/java/res/values-sv/donottranslate-more-keys.xml
@@ -42,13 +42,13 @@
U+0161: "š" LATIN SMALL LETTER S WITH CARON -->
<string name="more_keys_for_s">&#x00DF;,&#x015B;,&#x0161;</string>
<!-- U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE -->
- <string name="keylabel_for_scandinavia_row1_11">&#x00E5;</string>
+ <string name="keylabel_for_nordic_row1_11">&#x00E5;</string>
<!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_10">&#x00F6;</string>
+ <string name="keylabel_for_nordic_row2_10">&#x00F6;</string>
<!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
- <string name="keylabel_for_scandinavia_row2_11">&#x00E4;</string>
+ <string name="keylabel_for_nordic_row2_11">&#x00E4;</string>
<!-- U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE -->
- <string name="more_keys_for_scandinavia_row2_10">&#x00F8;</string>
+ <string name="more_keys_for_nordic_row2_10">&#x00F8;</string>
<!-- U+00E6: "æ" LATIN SMALL LETTER AE -->
- <string name="more_keys_for_scandinavia_row2_11">&#x00E6;</string>
+ <string name="more_keys_for_nordic_row2_11">&#x00E6;</string>
</resources>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 9cac393e7..3c5ecd526 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Bokstavsläge"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefonläge"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefonsymbolläge"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Röstindata"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Röstindata stöds inte på ditt språk än, men tjänsten fungerar på engelska."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Röstinmatning använder sig av Googles tjänst för taligenkänning. "<a href="http://m.google.com/privacy">"Sekretesspolicyn för mobila enheter"</a>" gäller."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Om du vill stänga av röstinmatning öppnar du inställningarna för inmatningsmetod."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Om du vill använda röstinmatning trycker du på mikrofonknappen."</string>
- <string name="voice_listening" msgid="467518160751321844">"Tala nu"</string>
- <string name="voice_working" msgid="6666937792815731889">"Fungerar"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Fel. Försök igen."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Det gick inte att ansluta"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Fel, för mycket tal."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Ljudproblem"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Serverfel"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Hörde inget tal"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Inga träffar hittades"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Voice Search är inte installerat"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Tips!"</b>" Dra över tangentbordet om du vill tala"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Tips!"</b>" Nästa gång testar du att säga skiljetecknen, som \"punkt\", \"komma\" eller \"frågetecken\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Avbryt"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Röstinmatningsknapp"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"På huvudtangentbord"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"På symboltangentbord"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mick huvudtangentbord"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mick bland symboler"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Röstinmatning inaktiv"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Välj inmatningsmetod"</string>
<string name="configure_input_method" msgid="373356270290742459">"Konfigurera inmatningsmetoder"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Inmatningsspråk"</string>
<string name="select_language" msgid="3693815588777926848">"Inmatningsspråk"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Tryck igen för att spara"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Spara genom att trycka igen"</string>
<string name="has_dictionary" msgid="6071847973466625007">"En ordlista är tillgänglig"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Aktivera synpunkter från användare"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Du kan hjälpa till att förbättra inmatningsmetoden genom att automatiskt skicka användningsstatistik och felrapporter till Google."</string>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 4a7a1ff85..e849ade44 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Hali ya barua"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Hali ya simu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Hali ya alama za simu"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Uingizaji wa sauti"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Uingizaji wa sauti hauhimiliwi kwa lugha yako kwa sasa, lakini inafanya kazi kwa Kiingereza."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Uingizaji wa sauti hutumia utambuaji wa usemi wa Google. "<a href="http://m.google.com/privacy">"Sera ya Faragha ya Simu za mkononi "</a>" hutumika."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Ili kuzima uingizaji sauti, nenda kwa mipangilio ya mbinu ya uingizaji."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Ili kutumia uingizaji wa sauti, bonyeza kitufe cha maikrofoni."</string>
- <string name="voice_listening" msgid="467518160751321844">"Ongea sasa"</string>
- <string name="voice_working" msgid="6666937792815731889">"Inafanya kazi"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Hitilafu. Tafadhali jaribu tena."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Haiwezi kuunganisha"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Hitilafu, usemi ni zaidi."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Tatizo la sauti"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Hitilafu ya Seva"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Hakuna matamshi yaliyosikizwa"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Hakuna zinazolingana zilizopatikana."</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Utafutaji wa sauti haujawekwa"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Kidokezo:"</b>" Telezesha kidole kwenye kibodi ili utamke"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Kidokezo:"</b>" Wakati mwingine, jaribu kutamka uakifishaji kama vile \"kituo\", \"koma\", au \"kiulizio cha swali\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Ghairi"</string>
- <string name="ok" msgid="7898366843681727667">"Sawa"</string>
<string name="voice_input" msgid="3583258583521397548">"Kibao cha kuingizia sauti"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Kwenye kibodi kuu"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Kwenye kibodi ya ishara"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Maikrofoni kwenye kibodi kuu"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Maikrofoni kwenye kibodi ya ishara"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Uingizaji sauti umelemazwa"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Chagua mtindo wa uingizaji"</string>
<string name="configure_input_method" msgid="373356270290742459">"Sanidi mbinu za uingizaji"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Lugha za uingizaji"</string>
<string name="select_language" msgid="3693815588777926848">"Lugha zinazoruhusiwa"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Gusa tena ili kuhifadhi"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Gusa tena ili kuhifadhi"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Kamusi inapatikana"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Wezesha maoni ya watumiaji"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Saidia kuimarisha mbinu ya uingizaji wa kihariri, kwa kutuma takwimu za matumizi na ripoti za kuvurugika kwa Google kiotomatiki."</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index d255f44cf..15157c245 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"โหมดตัวอักษร"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"โหมดโทรศัพท์"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"โหมดสัญลักษณ์โทรศัพท์"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"การป้อนข้อมูลด้วยเสียง"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"ขณะนี้การป้อนข้อมูลด้วยเสียงยังไม่ได้รับการสนับสนุนในภาษาของคุณ แต่ใช้ได้ในภาษาอังกฤษ"</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"ป้อนข้อมูลด้วยเสียงใช้การจดจำคำพูดของ Google "<a href="http://m.google.com/privacy">" นโยบายส่วนบุคคลของมือถือ"</a>"มีผลบังคับใช้"</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"หากต้องการปิดการป้อนข้อมูลด้วยเสียง ไปที่การตั้งค่าวิธีการป้อนข้อมูล"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"หากต้องการใช้การป้อนข้อมูลด้วยเสียง ให้กดปุ่มไมโครโฟน"</string>
- <string name="voice_listening" msgid="467518160751321844">"พูดได้เลย"</string>
- <string name="voice_working" msgid="6666937792815731889">"กำลังทำงาน"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"ข้อผิดพลาด โปรดลองอีกครั้ง"</string>
- <string name="voice_network_error" msgid="6649556447401862563">"ไม่สามารถเชื่อมต่อได้"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"ข้อผิดพลาด คำพูดยาวเกินไป"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"ปัญหาด้านเสียง"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"ข้อผิดพลาดของเซิร์ฟเวอร์"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"ไม่ได้ยินเสียง"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"ไม่พบรายการที่ตรงกัน"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"ไม่ได้ติดตั้ง Voice Search"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"คำแนะนำ:"</b>" กวาดผ่านแป้นพิมพ์เพื่อพูด"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"คำแนะนำ:"</b>" ครั้งต่อไป ให้ลองเอ่ยถึงเครื่องหมายวรรคตอน เช่น \"มหัพภาค\" \"จุลภาค\" หรือ \"เครื่องหมายคำถาม\""</string>
- <string name="cancel" msgid="6830980399865683324">"ยกเลิก"</string>
- <string name="ok" msgid="7898366843681727667">"ตกลง"</string>
<string name="voice_input" msgid="3583258583521397548">"แป้นการป้อนข้อมูลด้วยเสียง"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"บนแป้นพิมพ์หลัก"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"บนแป้นพิมพ์สัญลักษณ์"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"ไมค์บนแป้นพิมพ์หลัก"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"ไมค์บนแป้นพิมพ์สัญลักษณ์"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"ปิดใช้งานป้อนข้อมูลด้วยเสียง"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"เลือกวิธีการป้อนข้อมูล"</string>
<string name="configure_input_method" msgid="373356270290742459">"กำหนดค่าวิธีการป้อนข้อมูล"</string>
<string name="language_selection_title" msgid="1651299598555326750">"ภาษาในการป้อนข้อมูล"</string>
<string name="select_language" msgid="3693815588777926848">"ภาษาสำหรับการป้อนข้อมูล"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← แตะอีกครั้งเพื่อบันทึก"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"มีพจนานุกรมให้ใช้งาน"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"เปิดใช้งานการแสดงความคิดเห็นจากผู้ใช้"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"ช่วยปรับปรุงตัวแก้ไขวิธีการป้อนข้อมูลนี้โดยการส่งสถิติการใช้งานและรายงานการขัดข้องถึง Google โดยอัตโนมัติ"</string>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index 336a0831e..36f9002f4 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Mode ng mga titik"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Mode ng telepono"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Mode ng mga simbolo ng telepono"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Pag-input ng boses"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Hindi kasalukuyang suportado ang pag-input ng boses para sa iyong wika, ngunit gumagana sa Ingles."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Gumagamit ang pag-input ng boses ng speech recognition ng Google. Nalalapat "<a href="http://m.google.com/privacy">"Ang Patakaran sa Privacy ng Mobile"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Upang i-off ang pag-input ng boses, pumunta sa mga setting ng pamamaraan ng pag-input."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Upang gamitin ang pag-input ng boses, pindutin ang pindutan na mikropono."</string>
- <string name="voice_listening" msgid="467518160751321844">"Magsalita ngayon"</string>
- <string name="voice_working" msgid="6666937792815731889">"Nagtatrabaho"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Error. Pakisubukang muli."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Hindi makakonekta"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Error, masyadong maraming pananalita."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Problema sa audio"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Error sa server"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Walang narinig na pananalita"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Walang nakitang mga tugma"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Hindi naka-install ang paghahanap ng boses"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Pahiwatig:"</b>" Mag-swipe sa keyboard upang magsalita"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Pahiwatig:"</b>" Sa susunod, subukang magsalita ng bantas tulad ng \"tuldok\", \"kuwit\", o \"tandang pananong\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Kanselahin"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Voice input key"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Sa pangunahing keyboard"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Sa keyboard ng mga simbolo"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Mic sa pangunahing keyboard"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Mic sa keyboard ng mga simbolo"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Hindi pinagana ang voice input"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Pumili ng paraan ng pag-input"</string>
<string name="configure_input_method" msgid="373356270290742459">"I-configure ang mga pamamaraan ng pag-input"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Mag-input ng mga wika"</string>
<string name="select_language" msgid="3693815588777926848">"Mga wika ng input"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Pinduting muli upang i-save"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Available ang diksyunaryo"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Paganahin ang feedback ng user"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Tumulong na pahusayin ang editor ng paraan ng pag-input na ito sa pamamagitan ng awtomatikong pagpapadala ng mga istatistika ng paggamit at mga ulat ng crash sa Google."</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 8689adcbe..1978a6f1e 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Harf modu"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Telefon modu"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Telefon sembolleri modu"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Ses girişi"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Ses girişi, şu anda sizin diliniz için desteklenmiyor ama İngilizce dilinde kullanılabilir."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Ses girişi Google\'ın konuşma tanıma işlevini kullanır. "<a href="http://m.google.com/privacy">" Mobil Gizlilik Politikası"</a>" geçerlidir."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Ses girişini kapatmak için giriş yöntemi ayarlarına gidin."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Ses girişini kullanmak için mikrofon düğmesine basın."</string>
- <string name="voice_listening" msgid="467518160751321844">"Şimdi konuşun"</string>
- <string name="voice_working" msgid="6666937792815731889">"Çalışıyor"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Hata. Lütfen tekrar deneyin."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Bağlanamadı"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Hata, çok uzun konuşma."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Ses sorunu"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Sunucu hatası"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Konuşma duyulmadı"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Eşleşme bulunamadı"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Sesle arama yüklenmedi"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"İpucu:"</b>" Konuşmak için parmağınızı klavye üzerinde kaydırın"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"İpucu:"</b>" Sonraki sefer, \"nokta\", \"virgül\" veya \"soru işareti\" gibi noktalama işaretlerini telaffuz etmeyi deneyin."</string>
- <string name="cancel" msgid="6830980399865683324">"İptal"</string>
- <string name="ok" msgid="7898366843681727667">"Tamam"</string>
<string name="voice_input" msgid="3583258583521397548">"Ses girişi tuşu"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Ana klavyede"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Simge klavyesinde"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Ana klavyede mikrfn"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Simge klavysnd mikrf"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Sesle grş devre dışı"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Giriş yöntemini seç"</string>
<string name="configure_input_method" msgid="373356270290742459">"Giriş yöntemlerini yapılandır"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Giriş dilleri"</string>
<string name="select_language" msgid="3693815588777926848">"Giriş dilleri"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Kaydetmek için tekrar dokunun"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Sözlük kullanılabilir"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Kullanıcı geri bildirimini etkinleştir"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Kullanım istatistiklerini ve kilitlenme raporlarını Google\'a otomatik olarak göndererek bu giriş yöntemi düzenleyicisinin iyileştirilmesine yardımcı olun."</string>
diff --git a/java/res/values-uk/donottranslate-more-keys.xml b/java/res/values-uk/donottranslate-more-keys.xml
index 323eaafbb..32397049a 100644
--- a/java/res/values-uk/donottranslate-more-keys.xml
+++ b/java/res/values-uk/donottranslate-more-keys.xml
@@ -18,8 +18,16 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+0449: "щ" CYRILLIC SMALL LETTER SHCHA -->
+ <string name="keylabel_for_east_slavic_row1_9">&#x0449;</string>
<!-- U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
- <string name="keylabel_for_cyrillic_yery">&#x0456;</string>
+ <string name="keylabel_for_east_slavic_row2_1">&#x0456;</string>
+ <!-- U+0438: "и" CYRILLIC SMALL LETTER I -->
+ <string name="keylabel_for_east_slavic_row3_5">&#x0438;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_ha">&#x044A;</string>
<!-- U+0457: "ї" CYRILLIC SMALL LETTER YI -->
- <string name="more_keys_for_cyrillic_yery">&#x0457;</string>
+ <string name="more_keys_for_east_slavic_row2_1">&#x0457;</string>
+ <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
+ <string name="more_keys_for_cyrillic_soft_sign">&#x044A;</string>
</resources>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index f449becec..6541c945d 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Режим букв і цифр"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Режим набору номера"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Режим набору символів"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Голос. ввід"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Голос. ввід наразі не підтрим. для вашої мови, але можна користуватися англійською."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Голосовий ввід використовує розпізнавання мовлення Google. Застосовується "<a href="http://m.google.com/privacy">"Політика конфіденційності для мобільних пристроїв"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Щоб вимкнути голосовий ввід, перейдіть до налаштувань методів введення."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Щоб використовувати голосовий ввід, натисніть кнопку мікрофона."</string>
- <string name="voice_listening" msgid="467518160751321844">"Диктуйте"</string>
- <string name="voice_working" msgid="6666937792815731889">"Працює"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Помилка. Спробуйте ще раз."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Неможл. під\'єднатися"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Помилка. Забагато продикт."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Проблема з аудіо"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Помилка сервера"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Не чути диктув."</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Збігів не знайдено"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Голос. пошук не встановлено"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Підк:"</b>" горт. на клавіат., щоб продикт."</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Підказка:"</b>" наступного разу продикт. знаки пункт. такі як \"крапка\", \"кома\" чи \"знак пит\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Скасувати"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Ключ голосового вводу"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"На основ. клавіатурі"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Символьна клавіатура"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Miкр. на осн. клав."</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Miкр. на симв. клавіат."</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Голос. ввід вимкнено"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Вибрати метод введення"</string>
<string name="configure_input_method" msgid="373356270290742459">"Налаштування методів введення"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Мови вводу"</string>
<string name="select_language" msgid="3693815588777926848">"Мови введення"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Торкн. ще, щоб збер."</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Торкніться знову, щоб зберегти"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Словник доступний"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Увімк. відгуки корист."</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Допоможіть покращ. редактор методу введ., автомат. надсилаючи в Google статистику використ. та звіти про збої."</string>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 01179845f..f37372991 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Chế độ chữ cái"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Chế độ điện thoại"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Chế độ biểu tượng điện thoại"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Nhập liệu bằng giọng nói"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Nhập liệu bằng giọng nói hiện không được hỗ trợ cho ngôn ngữ của bạn nhưng hoạt động với ngôn ngữ tiếng Anh."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Nhập liệu bằng giọng nói sử dụng nhận dạng giọng nói của Google. Áp dụng "<a href="http://m.google.com/privacy">"Chính sách bảo mật dành cho điện thoại di động"</a>"."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Để tắt nhập liệu bằng giọng nói, đi tới cài đặt phương pháp nhập liệu."</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Để sử dụng nhập liệu bằng giọng nói, hãy nhấn nút micrô."</string>
- <string name="voice_listening" msgid="467518160751321844">"Nói ngay"</string>
- <string name="voice_working" msgid="6666937792815731889">"Đang hoạt động"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Lỗi. Vui lòng thử lại."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Không thể kết nối"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Lỗi, quá nhiều câu thoại."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Sự cố âm thanh"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Lỗi máy chủ"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Không nghe thấy tiếng nói nào"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Không tìm thấy kết quả phù hợp"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Tìm kiếm bằng giọng nói chưa được cài đặt"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Gợi ý:"</b>" Trượt qua bàn phím để nói"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Gợi ý:"</b>" Lần tới, thử nói dấu câu như \"dấu chấm\", \"dấu phẩy\" hoặc \"dấu hỏi\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Hủy"</string>
- <string name="ok" msgid="7898366843681727667">"OK"</string>
<string name="voice_input" msgid="3583258583521397548">"Khóa nhập giọng nói"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Trên bàn phím chính"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Trên bàn phím biểu tượng"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"Micrô trên bàn phím chính"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Micrô trên bàn phím biểu tượng"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Nhập liệu bằng giọng nói đã bị tắt"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Chọn phương thức nhập"</string>
<string name="configure_input_method" msgid="373356270290742459">"Định cấu hình phương thức nhập"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Ngôn ngữ nhập"</string>
<string name="select_language" msgid="3693815588777926848">"Ngôn ngữ nhập"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Chạm lại để lưu"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"Có sẵn từ điển"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Bật phản hồi của người dùng"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Giúp nâng cao trình chỉnh sửa phương thức nhập này bằng cách tự động gửi thống kê sử dụng và báo cáo sự cố cho Google."</string>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 0e94806a7..876056b96 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"字母模式"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"电话模式"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"电话符号模式"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"语音输入"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"语音输入功能当前还不支持您的语言,您只能输入英语语音。"</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"语音输入采用了 Google 的语音识别技术,因此请遵守"<a href="http://m.google.com/privacy">"“Google 移动”隐私权政策"</a>"。"</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"要关闭语音输入功能,请转至输入法设置。"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"要使用语音输入功能,请按“麦克风”按钮。"</string>
- <string name="voice_listening" msgid="467518160751321844">"请开始说话"</string>
- <string name="voice_working" msgid="6666937792815731889">"正在处理"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"出错,请重试。"</string>
- <string name="voice_network_error" msgid="6649556447401862563">"无法连接"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"出错,语音过长。"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"音频问题"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"服务器出错"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"未听到语音"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"未找到匹配项"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"未安装语音搜索"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"提示:"</b>"在键盘上滑动手指可激活语音功能"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"提示:"</b>"稍后,请尝试使用语音输入标点符号,如“句号”、“逗号”或“问号”。"</string>
- <string name="cancel" msgid="6830980399865683324">"取消"</string>
- <string name="ok" msgid="7898366843681727667">"确定"</string>
<string name="voice_input" msgid="3583258583521397548">"语音输入键"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"主键盘上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"符号键盘上"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"主键盘上的麦克风"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"符号键盘上的麦克风"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"语音输入功能已停用"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"选择输入法"</string>
<string name="configure_input_method" msgid="373356270290742459">"配置输入法"</string>
<string name="language_selection_title" msgid="1651299598555326750">"输入语言"</string>
<string name="select_language" msgid="3693815588777926848">"输入语言"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← 再次触摸即可保存"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"提供字典"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"启用用户反馈"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"自动向 Google 发送使用情况统计信息和崩溃报告,帮助改进该输入法编辑器。"</string>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index ac8da4325..88e53b4d4 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"字母模式"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"撥號模式"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"撥號符號模式"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"語音輸入"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"語音輸入目前不支援您的語言,但是可以辨識英文。"</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"語音輸入使用 Google 的語音辨識功能,並遵循《"<a href="http://m.google.com/privacy">"行動服務隱私權政策"</a>"》。"</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"如要關閉語音輸入,請前往輸入法設定。"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"如要使用語音輸入,請按下麥克風按鈕。"</string>
- <string name="voice_listening" msgid="467518160751321844">"請說話"</string>
- <string name="voice_working" msgid="6666937792815731889">"辨識中"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"發生錯誤,請再試一次。"</string>
- <string name="voice_network_error" msgid="6649556447401862563">"無法連線"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"錯誤:語音內容過長。"</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"音訊問題"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"伺服器錯誤"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"沒有聽到任何聲音"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"找不到相符的項目"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"未安裝語音搜尋"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"提示:"</b>"滑過鍵盤即可說話"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"提示:"</b>"下次可嘗試說出標點符號,例如「句號」、「逗號」或「問號」。"</string>
- <string name="cancel" msgid="6830980399865683324">"取消"</string>
- <string name="ok" msgid="7898366843681727667">"確定"</string>
<string name="voice_input" msgid="3583258583521397548">"語音輸入按鍵"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"主鍵盤上"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"符號鍵盤上"</string>
@@ -128,11 +108,11 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"主鍵盤上的麥克風"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"符號鍵盤上的麥克風"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"語音輸入已停用"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"選擇輸入法"</string>
<string name="configure_input_method" msgid="373356270290742459">"設定輸入法"</string>
<string name="language_selection_title" msgid="1651299598555326750">"輸入語言"</string>
<string name="select_language" msgid="3693815588777926848">"輸入語言"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← 再次輕觸即可儲存"</string>
+ <!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
+ <skip />
<string name="has_dictionary" msgid="6071847973466625007">"可使用字典"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"啟用使用者意見回饋"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"自動將使用統計資料和當機報告傳送給 Google,協助改善這個輸入法編輯器。"</string>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index 799a262b6..79b1f2514 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -101,26 +101,6 @@
<string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Imodi yezinhlamvu"</string>
<string name="spoken_description_mode_phone" msgid="6520207943132026264">"Imodi yefoni"</string>
<string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Imodi yezimpawu zefoni"</string>
- <string name="voice_warning_title" msgid="4419354150908395008">"Okufakwa ngezwi"</string>
- <string name="voice_warning_locale_not_supported" msgid="637923019716442333">"Okufakwa ngezwi akusekelwa olimini lwakho, kodwa kuyasebenza nge-English."</string>
- <string name="voice_warning_may_not_understand" msgid="5596289095878251072">"Okufakwayo ngezwi kusebenzisa ukufanisa izwi kwe-Google. "<a href="http://m.google.com/privacy">"Inqubomgomo Yobumfihlo Yefoni"</a>" iyasebenza."</string>
- <string name="voice_warning_how_to_turn_off" msgid="3190378129944934856">"Ukuvala okufakwayo ngezwi, iya kuzilungiselelo zendlela yokufakwayo"</string>
- <string name="voice_hint_dialog_message" msgid="1420686286820661548">"Ukusebenzisa okufakwayo ngezwi, cindezela inkinobho yemakrofoni."</string>
- <string name="voice_listening" msgid="467518160751321844">"Khuluma manje"</string>
- <string name="voice_working" msgid="6666937792815731889">"Kuyasebenza"</string>
- <string name="voice_initializing" msgid="661962047129906646"></string>
- <string name="voice_error" msgid="5140896300312186162">"Iphutha. Sicela uzame futhi."</string>
- <string name="voice_network_error" msgid="6649556447401862563">"Ayikwazanga ukuxhuma"</string>
- <string name="voice_too_much_speech" msgid="5746973620134227376">"Iphutha, kunamagama amaningi."</string>
- <string name="voice_audio_error" msgid="5072707727016414454">"Inkinga yomsindo"</string>
- <string name="voice_server_error" msgid="7807129913977261644">"Iphutha leseva"</string>
- <string name="voice_speech_timeout" msgid="8461817525075498795">"Awekho amagama azwakele"</string>
- <string name="voice_no_match" msgid="4285117547030179174">"Akukho okufanayo okutholiwe"</string>
- <string name="voice_not_installed" msgid="5552450909753842415">"Ukusesha ngezwi akufakiwe"</string>
- <string name="voice_swipe_hint" msgid="6943546180310682021"><b>"Isexwayiso:"</b>"Shintshela kwikhibhodi ukuze ukhulume"</string>
- <string name="voice_punctuation_hint" msgid="1611389463237317754"><b>"Isixwayiso: "</b>"Esikhathini esilandelayo, zama ukukhuluma izimpimiselo ezinjengo \"isikhathi, \"ikhefu\" noma \"uphawu lombuzo\"."</string>
- <string name="cancel" msgid="6830980399865683324">"Khansela"</string>
- <string name="ok" msgid="7898366843681727667">"KULUNGILE"</string>
<string name="voice_input" msgid="3583258583521397548">"Inkinobho yokufaka izwi"</string>
<string name="voice_input_modes_main_keyboard" msgid="3360660341121083174">"Kwikhibhodi eyisisekelo"</string>
<string name="voice_input_modes_symbols_keyboard" msgid="7203213240786084067">"Ikhibhodi yezimpawu"</string>
@@ -128,11 +108,10 @@
<string name="voice_input_modes_summary_main_keyboard" msgid="6586544292900314339">"I-mic kwikhibhodi eyisisekelo"</string>
<string name="voice_input_modes_summary_symbols_keyboard" msgid="5233725927281932391">"Ikhibhodi yezimpawu ze-mic"</string>
<string name="voice_input_modes_summary_off" msgid="63875609591897607">"Okufakwayo ngezwi kuvinjelwe"</string>
- <string name="selectInputMethod" msgid="315076553378705821">"Khetha indlela yokufaka"</string>
<string name="configure_input_method" msgid="373356270290742459">"Misa izindlela zokufakwayo"</string>
<string name="language_selection_title" msgid="1651299598555326750">"Izilimi zokufakwayo"</string>
<string name="select_language" msgid="3693815588777926848">"Izilimi zokufakwayo"</string>
- <string name="hint_add_to_dictionary" msgid="9006292060636342317">"← Thinta futhi ukulondoloza"</string>
+ <string name="hint_add_to_dictionary" msgid="573678656946085380">"Thinta futhi ukuze ulondoloze"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Isichazamazwi siyatholakala"</string>
<string name="prefs_enable_log" msgid="6620424505072963557">"Vumela impendulo yomsebenzisi"</string>
<string name="prefs_description_log" msgid="5827825607258246003">"Siza ukuthuthukisa lo mhleli wendlela yokufakwa ngokusithumela ngokuzenzakalela izibalo zokusetshenziswa nokukhubeka ku-Google."</string>
diff --git a/java/res/values-zz/donottranslate-more-keys.xml b/java/res/values-zz/donottranslate-more-keys.xml
new file mode 100644
index 000000000..eb984a469
--- /dev/null
+++ b/java/res/values-zz/donottranslate-more-keys.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
+ U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE
+ U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX
+ U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE
+ U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
+ U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
+ U+00E6: "æ" LATIN SMALL LETTER AE
+ U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
+ U+0103: "ă" LATIN SMALL LETTER A WITH BREVE
+ U+0105: "ą" LATIN SMALL LETTER A WITH OGONEK
+ U+00AA: "ª" FEMININE ORDINAL INDICATOR -->
+ <string name="more_keys_for_a">&#x00E0;,&#x00E1;,&#x00E2;,&#x00E3;,&#x00E4;,&#x00E5;,&#x00E6;,&#x00E3;,&#x00E5;,&#x0101;,&#x0103;,&#x0105;,&#x00AA;</string>
+ <!-- U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
+ U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
+ U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX
+ U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS
+ U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
+ U+0115: "ĕ" LATIN SMALL LETTER E WITH BREVE
+ U+0117: "ė" LATIN SMALL LETTER E WITH DOT ABOVE
+ U+0119: "ę" LATIN SMALL LETTER E WITH OGONEK
+ U+011B: "ě" LATIN SMALL LETTER E WITH CARON -->
+ <string name="more_keys_for_e">&#x00E8;,&#x00E9;,&#x00EA;,&#x00EB;,&#x0113;,&#x0115;,&#x0117;,&#x0119;,&#x011B;</string>
+ <!-- U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
+ U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
+ U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
+ U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
+ U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE
+ U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
+ U+012D: "ĭ" LATIN SMALL LETTER I WITH BREVE
+ U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
+ U+0131: "ı" LATIN SMALL LETTER DOTLESS I
+ U+0133: "ij" LATIN SMALL LIGATURE IJ -->
+ <string name="more_keys_for_i">&#x00EC;,&#x00ED;,&#x00EE;,&#x00EF;,&#x0129;,&#x012B;,&#x012D;,&#x012F;,&#x0131;,&#x0133;</string>
+ <!-- U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE
+ U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE
+ U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX
+ U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE
+ U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
+ U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE
+ U+014D: "ō" LATIN SMALL LETTER O WITH MACRON
+ U+014F: "ŏ" LATIN SMALL LETTER O WITH BREVE
+ U+0151: "ő" LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ U+0153: "œ" LATIN SMALL LIGATURE OE
+ U+00BA: "º" MASCULINE ORDINAL INDICATOR -->
+ <string name="more_keys_for_o">&#x00F2;,&#x00F3;,&#x00F4;,&#x00F5;,&#x00F6;,&#x00F8;,&#x014D;,&#x014F;,&#x0151;,&#x0153;,&#x00BA;</string>
+ <!-- U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE
+ U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE
+ U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX
+ U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
+ U+0169: "ũ" LATIN SMALL LETTER U WITH TILDE
+ U+016B: "ū" LATIN SMALL LETTER U WITH MACRON
+ U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
+ U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE
+ U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK -->
+ <string name="more_keys_for_u">&#x00F9;,&#x00FA;,&#x00FB;,&#x00FC;,&#x0169;,&#x016B;,&#x016D;,&#x016F;,&#x0171;,&#x0173;</string>
+ <!-- U+00DF: "ß" LATIN SMALL LETTER SHARP S
+ U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE
+ U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
+ U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
+ U+0161: "š" LATIN SMALL LETTER S WITH CARON
+ U+017F: "ſ" LATIN SMALL LETTER LONG S -->
+ <string name="more_keys_for_s">&#x00DF;,&#x015B;,&#x015D;,&#x015F;,&#x0161;,&#x017F;</string>
+ <!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
+ U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
+ U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
+ U+0148: "ň" LATIN SMALL LETTER N WITH CARON
+ U+0149: "ʼn" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ U+014B: "ŋ" LATIN SMALL LETTER ENG -->
+ <string name="more_keys_for_n">&#x00F1;,&#x0144;,&#x0146;,&#x0148;,&#x0149;,&#x014B;</string>
+ <!-- U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
+ U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
+ U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
+ U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE
+ U+010D: "č" LATIN SMALL LETTER C WITH CARON -->
+ <string name="more_keys_for_c">&#x00E7;,&#x0107;,&#x0109;,&#x010B;,&#x010D;</string>
+ <!-- U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
+ U+0177: "ŷ" LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
+ U+0133: "ij" LATIN SMALL LIGATURE IJ -->
+ <string name="more_keys_for_y">&#x00FD;,&#x0177;,&#x00FF;,&#x0133;</string>
+ <!-- U+010F: "ď" LATIN SMALL LETTER D WITH CARON
+ U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
+ U+00F0: "ð" LATIN SMALL LETTER ETH -->
+ <string name="more_keys_for_d">&#x010F;,&#x0111;,&#x00F0;</string>
+ <!-- U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE
+ U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA
+ U+0159: "ř" LATIN SMALL LETTER R WITH CARON -->
+ <string name="more_keys_for_r">&#x0155;,&#x0157;,&#x0159;</string>
+ <!-- U+00FE: "þ" LATIN SMALL LETTER THORN
+ U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
+ U+0165: "ť" LATIN SMALL LETTER T WITH CARON
+ U+0167: "ŧ" LATIN SMALL LETTER T WITH STROKE -->
+ <string name="more_keys_for_t">&#x00FE;,&#x0163;,&#x0165;,&#x0167;</string>
+ <!-- U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
+ U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
+ U+017E: "ž" LATIN SMALL LETTER Z WITH CARON -->
+ <string name="more_keys_for_z">&#x017A;,&#x017C;,&#x017E;</string>
+ <!-- U+0137: "ķ" LATIN SMALL LETTER K WITH CEDILLA
+ U+0138: "ĸ" LATIN SMALL LETTER KRA -->
+ <string name="more_keys_for_k">&#x0137;,&#x0138;</string>
+ <!-- U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
+ U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
+ U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
+ U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT
+ U+0142: "ł" LATIN SMALL LETTER L WITH STROKE -->
+ <string name="more_keys_for_l">&#x013A;,&#x013C;,&#x013E;,&#x0140;,&#x0142;</string>
+ <!-- U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
+ U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
+ U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE
+ U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA -->
+ <string name="more_keys_for_g">&#x011D;,&#x011F;,&#x0121;,&#x0123;</string>
+ <!-- U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX -->
+ <string name="more_keys_for_h">&#x0125;</string>
+ <!-- U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX -->
+ <string name="more_keys_for_j">&#x0135;</string>
+ <!-- U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX -->
+ <string name="more_keys_for_w">&#x0175;</string>
+</resources>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 3d4e776a7..b3f30c638 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -403,10 +403,9 @@
<attr name="parentStyle" format="string" />
</declare-styleable>
- <!-- TODO: Should be removed. This is no longer required if InputMethodSubtype is supported. -->
<declare-styleable name="KeyboardSet">
- <!-- Locale of the keyboard layouts -->
- <attr name="keyboardLocale" format="string" />
+ <!-- Disable shortcut key. Shortcut key is enabled by default. -->
+ <attr name="disableShortcutKey" format="boolean" />
</declare-styleable>
<declare-styleable name="KeyboardSet_Element">
diff --git a/java/res/values/donottranslate-more-keys.xml b/java/res/values/donottranslate-more-keys.xml
index 79e12f86a..9b2780571 100644
--- a/java/res/values/donottranslate-more-keys.xml
+++ b/java/res/values/donottranslate-more-keys.xml
@@ -35,34 +35,28 @@
<string name="more_keys_for_l"></string>
<string name="more_keys_for_g"></string>
<string name="more_keys_for_v"></string>
- <string name="keylabel_for_scandinavia_row1_11"></string>
- <string name="keylabel_for_scandinavia_row2_10"></string>
- <string name="keylabel_for_scandinavia_row2_11"></string>
- <string name="more_keys_for_scandinavia_row2_10"></string>
- <string name="more_keys_for_scandinavia_row2_11"></string>
- <!-- U+0449: "щ" CYRILLIC SMALL LETTER SHCHA -->
- <string name="keylabel_for_cyrillic_shcha">&#x0449;</string>
- <!-- U+044B: "ы" CYRILLIC SMALL LETTER YERU -->
- <string name="keylabel_for_cyrillic_yery">&#x044B;</string>
- <!-- U+0438: "и" CYRILLIC SMALL LETTER I -->
- <string name="keylabel_for_cyrillic_i">&#x0438;</string>
- <!-- U+0437: "з" CYRILLIC SMALL LETTER ZE -->
- <string name="keylabel_for_cyrillic_ze">&#x0437;</string>
- <!-- U+045B: "ћ" CYRILLIC SMALL LETTER TSHE -->
- <string name="keylabel_for_cyrillic_tshe">&#x045B;</string>
- <!-- U+0455: "ѕ" CYRILLIC SMALL LETTER DZE -->
- <string name="keylabel_for_cyrillic_dze">&#x0455;</string>
- <!-- U+0452: "ђ" CYRILLIC SMALL LETTER DJE -->
- <string name="keylabel_for_cyrillic_dje">&#x0452;</string>
+ <string name="more_keys_for_h"></string>
+ <string name="more_keys_for_j"></string>
+ <string name="more_keys_for_w"></string>
+ <string name="keylabel_for_nordic_row1_11"></string>
+ <string name="keylabel_for_nordic_row2_10"></string>
+ <string name="keylabel_for_nordic_row2_11"></string>
+ <string name="more_keys_for_nordic_row2_10"></string>
+ <string name="more_keys_for_nordic_row2_11"></string>
+ <string name="keylabel_for_east_slavic_row1_9"></string>
+ <string name="keylabel_for_east_slavic_row2_1"></string>
+ <string name="keylabel_for_east_slavic_row3_5"></string>
<string name="more_keys_for_cyrillic_u"></string>
<string name="more_keys_for_cyrillic_ye"></string>
<string name="more_keys_for_cyrillic_en"></string>
- <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
- <string name="more_keys_for_cyrillic_ha">&#x044A;</string>
- <string name="more_keys_for_cyrillic_yery"></string>
+ <string name="more_keys_for_cyrillic_ha"></string>
+ <string name="more_keys_for_east_slavic_row2_1"></string>
<string name="more_keys_for_cyrillic_o"></string>
- <!-- U+044A: "ъ" CYRILLIC SMALL LETTER HARD SIGN -->
- <string name="more_keys_for_cyrillic_soft_sign">&#x044A;</string>
+ <string name="more_keys_for_cyrillic_soft_sign"></string>
+ <string name="keylabel_for_south_slavic_row1_6"></string>
+ <string name="keylabel_for_south_slavic_row2_11"></string>
+ <string name="keylabel_for_south_slavic_row3_1"></string>
+ <string name="keylabel_for_south_slavic_row3_8"></string>
<string name="more_keys_for_cyrillic_ie"></string>
<string name="more_keys_for_cyrillic_i"></string>
<!-- U+00A2: "¢" CENT SIGN
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 74c68464c..68a8cabce 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -156,18 +156,22 @@
<string-array name="subtype_locale_exception_keys">
<item>en_US</item>
<item>en_GB</item>
- <item>de_ZZ</item>
+ <item>de_QY</item>
+ <item>zz_QY</item>
</string-array>
<string-array name="subtype_locale_exception_values">
<item>English (US)</item>
<item>English (UK)</item>
- <item>Deutsch (QWERTY)</item>
+ <item>@string/subtype_generic_qwerty</item>
+ <item>@string/subtype_qwerty</item>
</string-array>
<!-- Generic subtype label -->
<string name="subtype_generic">%s</string>
<!-- Description for generic QWERTY keyboard subtype -->
<string name="subtype_generic_qwerty">%s (QWERTY)</string>
+ <!-- Description for language agnostic QWERTY keyboard subtype -->
+ <string name="subtype_qwerty">QWERTY</string>
<!-- dictionary pack package name /settings activity (for shared prefs and settings) -->
<string name="dictionary_pack_package_name">com.google.android.inputmethod.latin.dictionarypack</string>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index e1ac387fa..4f038e1a5 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -207,75 +207,6 @@
<!-- Spoken feedback after changing to the shifted phone dialer (symbols) keyboard. -->
<string name="spoken_description_mode_phone_shift">Phone symbols mode</string>
- <!-- Voice related labels -->
-
- <!-- Title of the warning dialog that shows when a user initiates voice input for
- the first time. -->
- <string name="voice_warning_title">Voice input</string>
-
- <!-- Message that gets put at the top of the warning dialog if the user is attempting to use
- voice input in a currently unsupported locale. Voice input will work for such a user,
- but it will only recognize them in English. -->
- <string name="voice_warning_locale_not_supported">Voice input is not currently supported for your language, but does work in English.</string>
-
- <!-- Message of the warning dialog that shows when a user initiates voice input for
- the first time, or turns it on in settings. [CHAR LIMIT=200] -->
- <string name="voice_warning_may_not_understand">Voice input uses Google\'s speech recognition. <a href="http://m.google.com/privacy">The Mobile Privacy Policy</a> applies.</string>
-
- <!-- An additional part of the warning dialog for voice input that only shows when the user
- actually initiates voice input, rather than just turning it on in settings. [CHAR LIMIT=200] -->
- <string name="voice_warning_how_to_turn_off">To turn off voice input, go to input method settings.</string>
-
- <!-- Message to show when user enables the voice input settings (which says
- "Press the microphone button"). [CHAR LIMIT=100] -->
- <string name="voice_hint_dialog_message">To use voice input, press the microphone button.</string>
-
- <!-- Short message to tell the user the system is ready for them to speak. -->
- <string name="voice_listening">Speak now</string>
-
- <!-- Short message shown after the user finishes speaking. -->
- <string name="voice_working">Working</string>
-
- <!-- Short message shown before the user should speak. -->
- <string name="voice_initializing"></string>
-
- <!-- Short message shown when a generic error occurs. -->
- <string name="voice_error">Error. Please try again.</string>
-
- <!-- Short message shown for a network error. -->
- <string name="voice_network_error">Couldn\'t connect</string>
-
- <!-- Short message shown for a network error where the utterance was really long,
- in which case we should suggest that the user speak less. -->
- <string name="voice_too_much_speech">Error, too much speech.</string>
-
- <!-- Short message shown for an audio error. -->
- <string name="voice_audio_error">Audio problem</string>
-
- <!-- Short message shown for an error with the voice server. -->
- <string name="voice_server_error">Server error</string>
-
- <!-- Short message shown when no speech is heard. -->
- <string name="voice_speech_timeout">No speech heard</string>
-
- <!-- Short message shown when the server couldn't parse any speech. -->
- <string name="voice_no_match">No matches found</string>
-
- <!-- Short message shown when the user initiates voice and voice search is not installed. -->
- <string name="voice_not_installed">Voice search not installed</string>
-
- <!-- Short hint shown in candidate view to explain voice input. -->
- <string name="voice_swipe_hint"><b>Hint:</b> Swipe across keyboard to speak</string>
-
- <!-- Short hint shown in candidate view to explain that user can speak punctuation. -->
- <string name="voice_punctuation_hint"><b>Hint:</b> Next time, try speaking punctuation like \"period\", \"comma\", or \"question mark\".</string>
-
- <!-- Label on button to stop recognition. Must be short to fit on button. -->
- <string name="cancel">Cancel</string>
-
- <!-- Label on button when an error occurs -->
- <string name="ok">OK</string>
-
<!-- Preferences item for enabling speech input -->
<string name="voice_input">Voice input key</string>
@@ -294,9 +225,6 @@
<!-- On settings screen, voice input pop-up menu summary text to never show voice key [CHAR LIMIT=20] -->
<string name="voice_input_modes_summary_off">Voice input is disabled</string>
- <!-- Title of the dialog for selecting input methods. [CHAR LIMIT=20] -->
- <string name="selectInputMethod">Select input method</string>
-
<!-- Title for configuring input method settings [CHAR LIMIT=35] -->
<string name="configure_input_method">Configure input methods</string>
diff --git a/java/res/xml-ar/keyboard_set.xml b/java/res/xml-ar/keyboard_set.xml
index c37d128d7..88d320144 100644
--- a/java/res/xml-ar/keyboard_set.xml
+++ b/java/res/xml-ar/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="ar" >
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_arabic"
diff --git a/java/res/xml-be/keyboard_set.xml b/java/res/xml-be/keyboard_set.xml
index 1b865ede0..959f644ea 100644
--- a/java/res/xml-be/keyboard_set.xml
+++ b/java/res/xml-be/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="be">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_east_slavic"
diff --git a/java/res/xml-bg/keyboard_set.xml b/java/res/xml-bg/keyboard_set.xml
index e824826b3..593ad977c 100644
--- a/java/res/xml-bg/keyboard_set.xml
+++ b/java/res/xml-bg/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="bg">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_bulgarian"
diff --git a/java/res/xml-cs/keyboard_set.xml b/java/res/xml-cs/keyboard_set.xml
index 6dea17aa5..f9f74516f 100644
--- a/java/res/xml-cs/keyboard_set.xml
+++ b/java/res/xml-cs/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="cs">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
diff --git a/java/res/xml-da/keyboard_set.xml b/java/res/xml-da/keyboard_set.xml
index cc1096f37..0db9b1f59 100644
--- a/java/res/xml-da/keyboard_set.xml
+++ b/java/res/xml-da/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="da">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/xml-de-rZZ/keyboard_set.xml b/java/res/xml-de-rQY/keyboard_set.xml
index e874bda5f..8966ddbb0 100644
--- a/java/res/xml-de-rZZ/keyboard_set.xml
+++ b/java/res/xml-de-rQY/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="de">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-de/keyboard_set.xml b/java/res/xml-de/keyboard_set.xml
index 3b648e521..f9f74516f 100644
--- a/java/res/xml-de/keyboard_set.xml
+++ b/java/res/xml-de/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="de">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
diff --git a/java/res/xml-el/keyboard_set.xml b/java/res/xml-el/keyboard_set.xml
index 5809e7f74..af74e12c5 100644
--- a/java/res/xml-el/keyboard_set.xml
+++ b/java/res/xml-el/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="el">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_greek"
diff --git a/java/res/xml-es/keyboard_set.xml b/java/res/xml-es/keyboard_set.xml
index fd968fceb..4ff5b54f2 100644
--- a/java/res/xml-es/keyboard_set.xml
+++ b/java/res/xml-es/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="es,es_US">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_spanish"
diff --git a/java/res/xml-et/keyboard_set.xml b/java/res/xml-et/keyboard_set.xml
index ddddcc64f..0db9b1f59 100644
--- a/java/res/xml-et/keyboard_set.xml
+++ b/java/res/xml-et/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="et">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/xml-fa/keyboard_set.xml b/java/res/xml-fa/keyboard_set.xml
index 0d16f8d7e..f508f8f29 100644
--- a/java/res/xml-fa/keyboard_set.xml
+++ b/java/res/xml-fa/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="fa" >
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_farsi"
diff --git a/java/res/xml-fi/keyboard_set.xml b/java/res/xml-fi/keyboard_set.xml
index c40e828d6..0db9b1f59 100644
--- a/java/res/xml-fi/keyboard_set.xml
+++ b/java/res/xml-fi/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="fi">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/xml-fr-rCA/keyboard_set.xml b/java/res/xml-fr-rCA/keyboard_set.xml
index 8d780f544..8966ddbb0 100644
--- a/java/res/xml-fr-rCA/keyboard_set.xml
+++ b/java/res/xml-fr-rCA/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="fr_CA">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-fr-rCH/keyboard_set.xml b/java/res/xml-fr-rCH/keyboard_set.xml
index 601d2bc64..f9f74516f 100644
--- a/java/res/xml-fr-rCH/keyboard_set.xml
+++ b/java/res/xml-fr-rCH/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="fr_CH">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
diff --git a/java/res/xml-fr/keyboard_set.xml b/java/res/xml-fr/keyboard_set.xml
index 4b827ca1b..2ac25c91d 100644
--- a/java/res/xml-fr/keyboard_set.xml
+++ b/java/res/xml-fr/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="fr">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_azerty"
diff --git a/java/res/xml-hi/keyboard_set.xml b/java/res/xml-hi/keyboard_set.xml
index cb4dece2d..c1fd0712d 100644
--- a/java/res/xml-hi/keyboard_set.xml
+++ b/java/res/xml-hi/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="hi">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_hindi"
diff --git a/java/res/xml-hr/keyboard_set.xml b/java/res/xml-hr/keyboard_set.xml
index 511644077..f9f74516f 100644
--- a/java/res/xml-hr/keyboard_set.xml
+++ b/java/res/xml-hr/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="hr">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
diff --git a/java/res/xml-hu/keyboard_set.xml b/java/res/xml-hu/keyboard_set.xml
index 2139ac746..f9f74516f 100644
--- a/java/res/xml-hu/keyboard_set.xml
+++ b/java/res/xml-hu/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="hu">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwertz"
diff --git a/java/res/xml-is/keyboard_set.xml b/java/res/xml-is/keyboard_set.xml
index c2ac94489..44edbba3e 100644
--- a/java/res/xml-is/keyboard_set.xml
+++ b/java/res/xml-is/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="is">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/xml-iw/keyboard_set.xml b/java/res/xml-iw/keyboard_set.xml
index d1da41a6b..6c51fb085 100644
--- a/java/res/xml-iw/keyboard_set.xml
+++ b/java/res/xml-iw/keyboard_set.xml
@@ -19,18 +19,17 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="iw">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_hebrew"
latin:enableProximityCharsCorrection="true" />
<Element
latin:elementName="symbols"
- latin:elementKeyboard="@xml/kbd_symbols" />
+ latin:elementKeyboard="@xml/kbd_hebrew_symbols" />
<Element
latin:elementName="symbolsShifted"
- latin:elementKeyboard="@xml/kbd_symbols_shift" />
+ latin:elementKeyboard="@xml/kbd_hebrew_symbols_shift" />
<Element
latin:elementName="phone"
latin:elementKeyboard="@xml/kbd_phone" />
diff --git a/java/res/xml-ka/keyboard_set.xml b/java/res/xml-ka/keyboard_set.xml
index 2be94689f..bc3df1ed0 100644
--- a/java/res/xml-ka/keyboard_set.xml
+++ b/java/res/xml-ka/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="ka">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_georgian"
diff --git a/java/res/xml-ky/keyboard_set.xml b/java/res/xml-ky/keyboard_set.xml
index 0226bda5f..959f644ea 100644
--- a/java/res/xml-ky/keyboard_set.xml
+++ b/java/res/xml-ky/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="ky">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_east_slavic"
diff --git a/java/res/xml-mk/keyboard_set.xml b/java/res/xml-mk/keyboard_set.xml
index 93874892e..6b8b84434 100644
--- a/java/res/xml-mk/keyboard_set.xml
+++ b/java/res/xml-mk/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="mk">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_south_slavic"
diff --git a/java/res/xml-nb/keyboard_set.xml b/java/res/xml-nb/keyboard_set.xml
index 1675ed293..0db9b1f59 100644
--- a/java/res/xml-nb/keyboard_set.xml
+++ b/java/res/xml-nb/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="nb">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/xml-pl/keyboard_set.xml b/java/res/xml-pl/keyboard_set.xml
index fb0d13b98..8966ddbb0 100644
--- a/java/res/xml-pl/keyboard_set.xml
+++ b/java/res/xml-pl/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="pl">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-pt/keyboard_set.xml b/java/res/xml-pt/keyboard_set.xml
index f8140aac1..8966ddbb0 100644
--- a/java/res/xml-pt/keyboard_set.xml
+++ b/java/res/xml-pt/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="pt">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-ro/keyboard_set.xml b/java/res/xml-ro/keyboard_set.xml
index 73030fdc1..8966ddbb0 100644
--- a/java/res/xml-ro/keyboard_set.xml
+++ b/java/res/xml-ro/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="ro">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-ru/keyboard_set.xml b/java/res/xml-ru/keyboard_set.xml
index 393d58ef1..959f644ea 100644
--- a/java/res/xml-ru/keyboard_set.xml
+++ b/java/res/xml-ru/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="ru">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_east_slavic"
diff --git a/java/res/xml-sk/keyboard_set.xml b/java/res/xml-sk/keyboard_set.xml
index db27b6107..8966ddbb0 100644
--- a/java/res/xml-sk/keyboard_set.xml
+++ b/java/res/xml-sk/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="sk">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-sl/keyboard_set.xml b/java/res/xml-sl/keyboard_set.xml
index 31f4714a9..8966ddbb0 100644
--- a/java/res/xml-sl/keyboard_set.xml
+++ b/java/res/xml-sl/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="sl">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-sr/keyboard_set.xml b/java/res/xml-sr/keyboard_set.xml
index f59f3a99d..5098134a7 100644
--- a/java/res/xml-sr/keyboard_set.xml
+++ b/java/res/xml-sr/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="sr">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_south_slavic"
diff --git a/java/res/xml-sv/keyboard_set.xml b/java/res/xml-sv/keyboard_set.xml
index 2b106e0dc..0db9b1f59 100644
--- a/java/res/xml-sv/keyboard_set.xml
+++ b/java/res/xml-sv/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="sv">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_nordic"
diff --git a/java/res/drawable/background_voice.xml b/java/res/xml-sw600dp/kbd_hebrew_symbols.xml
index 49a419110..66254dea0 100644
--- a/java/res/drawable/background_voice.xml
+++ b/java/res/xml-sw600dp/kbd_hebrew_symbols.xml
@@ -2,7 +2,7 @@
<!--
/*
**
-** Copyright 2011, The Android Open Source Project
+** Copyright 2012, 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.
@@ -17,9 +17,10 @@
** limitations under the License.
*/
-->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <gradient
- android:startColor="#ff000000"
- android:endColor="#ff000e29"
- android:angle="90" />
-</shape>
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/rows_10_10_7_symbols" />
+</Keyboard>
diff --git a/java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml b/java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml
new file mode 100644
index 000000000..3c5ed5e09
--- /dev/null
+++ b/java/res/xml-sw600dp/kbd_hebrew_symbols_shift.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/rows_10_10_7_symbols_shift" />
+</Keyboard>
diff --git a/java/res/xml-sw600dp/key_shortcut.xml b/java/res/xml-sw600dp/key_shortcut.xml
index 8869ab930..d4c45ad22 100644
--- a/java/res/xml-sw600dp/key_shortcut.xml
+++ b/java/res/xml-sw600dp/key_shortcut.xml
@@ -28,7 +28,7 @@
>
<Key
latin:keyStyle="shortcutKeyStyle"
- latin:keyLabelFlags="hasPopupHint"
+ latin:keyLabelFlags="hasPopupHint|preserveCase"
latin:moreKeys="@string/settings_as_more_key"
latin:keyWidth="fillBoth" />
</case>
diff --git a/java/res/xml-sw600dp/rows_hindi.xml b/java/res/xml-sw600dp/rows_hindi.xml
index 6bec7f0b5..6c98e080e 100644
--- a/java/res/xml-sw600dp/rows_hindi.xml
+++ b/java/res/xml-sw600dp/rows_hindi.xml
@@ -44,7 +44,7 @@
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="6.923%p"
+ latin:keyWidth="7.5%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
index 9901decec..1d61d999b 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols.xml
@@ -36,7 +36,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillRight" />
</Row>
<Row
@@ -50,7 +49,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
index b6aa20246..d22f8331d 100644
--- a/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_10_10_7_symbols_shift.xml
@@ -36,7 +36,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -50,7 +49,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_arabic.xml b/java/res/xml-sw768dp/rows_arabic.xml
index d5f287e2f..eaa64e5af 100644
--- a/java/res/xml-sw768dp/rows_arabic.xml
+++ b/java/res/xml-sw768dp/rows_arabic.xml
@@ -29,12 +29,11 @@
<Key
latin:keyStyle="tabKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="7.500%p" />
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_arabic1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-11.500%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -43,12 +42,11 @@
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="9.375%p" />
+ latin:keyWidth="11.172%p" />
<include
latin:keyboardLayout="@xml/rowkeys_arabic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-9.375%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -56,7 +54,7 @@
>
<include
latin:keyboardLayout="@xml/rowkeys_arabic3"
- latin:keyXPos="12.750%p" />
+ latin:keyXPos="13.829%p" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_azerty.xml b/java/res/xml-sw768dp/rows_azerty.xml
index 3637ce7d4..1fc1a0630 100644
--- a/java/res/xml-sw768dp/rows_azerty.xml
+++ b/java/res/xml-sw768dp/rows_azerty.xml
@@ -35,7 +35,6 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -49,7 +48,6 @@
latin:keyboardLayout="@xml/rowkeys_azerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -64,7 +62,6 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-13.750%p"
latin:keyWidth="fillBoth" />
</Row>
<include
diff --git a/java/res/xml-sw768dp/rows_bulgarian.xml b/java/res/xml-sw768dp/rows_bulgarian.xml
index 5f59f7087..cb05fd5aa 100644
--- a/java/res/xml-sw768dp/rows_bulgarian.xml
+++ b/java/res/xml-sw768dp/rows_bulgarian.xml
@@ -24,11 +24,12 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.333%p"
+ latin:keyWidth="7.186%p"
>
<Key
latin:keyStyle="tabKeyStyle"
- latin:keyLabelFlags="alignLeft" />
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_bulgarian1"
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
@@ -37,12 +38,12 @@
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.194%p"
+ latin:keyWidth="7.186%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="9.375%p" />
+ latin:keyWidth="11.172%p" />
<include
latin:keyboardLayout="@xml/rowkeys_bulgarian2" />
<Key
@@ -54,7 +55,7 @@
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="14.375%p" />
+ latin:keyWidth="13.829%p" />
<include
latin:keyboardLayout="@xml/rowkeys_bulgarian3" />
<include
diff --git a/java/res/xml-sw768dp/rows_east_slavic.xml b/java/res/xml-sw768dp/rows_east_slavic.xml
index ba57b75c4..480881bb6 100644
--- a/java/res/xml-sw768dp/rows_east_slavic.xml
+++ b/java/res/xml-sw768dp/rows_east_slavic.xml
@@ -24,11 +24,12 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="tabKeyStyle"
- latin:keyLabelFlags="alignLeft" />
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_east_slavic1"
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
@@ -40,25 +41,24 @@
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="9.375%p" />
+ latin:keyWidth="11.172%p" />
<include
latin:keyboardLayout="@xml/rowkeys_east_slavic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-9.375%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="12.750%p" />
+ latin:keyWidth="13.829%p" />
<include
latin:keyboardLayout="@xml/rowkeys_east_slavic3" />
<include
diff --git a/java/res/xml-sw768dp/rows_farsi.xml b/java/res/xml-sw768dp/rows_farsi.xml
index b969ff21c..28ea6fff5 100644
--- a/java/res/xml-sw768dp/rows_farsi.xml
+++ b/java/res/xml-sw768dp/rows_farsi.xml
@@ -24,11 +24,12 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="tabKeyStyle"
- latin:keyLabelFlags="alignLeft" />
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_farsi1" />
<Key
@@ -46,7 +47,6 @@
latin:keyboardLayout="@xml/rowkeys_farsi2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-9.375%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_georgian.xml b/java/res/xml-sw768dp/rows_georgian.xml
index 0471e8f1c..3805b5d88 100644
--- a/java/res/xml-sw768dp/rows_georgian.xml
+++ b/java/res/xml-sw768dp/rows_georgian.xml
@@ -35,7 +35,6 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth"/>
</Row>
<Row
@@ -49,7 +48,6 @@
latin:keyboardLayout="@xml/rowkeys_georgian2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_greek.xml b/java/res/xml-sw768dp/rows_greek.xml
index 983abe14c..c0b38dc15 100644
--- a/java/res/xml-sw768dp/rows_greek.xml
+++ b/java/res/xml-sw768dp/rows_greek.xml
@@ -47,7 +47,6 @@
latin:keyboardLayout="@xml/rowkeys_greek2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -62,7 +61,6 @@
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-13.750%p"
latin:keyWidth="fillBoth" />
</Row>
<include
diff --git a/java/res/xml-sw768dp/rows_hebrew.xml b/java/res/xml-sw768dp/rows_hebrew.xml
index 891872ccc..476071a5e 100644
--- a/java/res/xml-sw768dp/rows_hebrew.xml
+++ b/java/res/xml-sw768dp/rows_hebrew.xml
@@ -36,7 +36,6 @@
latin:keyboardLayout="@xml/rowkeys_hebrew1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-12.000%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -45,20 +44,19 @@
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="11.172%p" />
+ latin:keyWidth="10.167%p" />
<include
latin:keyboardLayout="@xml/rowkeys_hebrew2" />
- </Row>
+ <Key
+ latin:keyStyle="enterKeyStyle"
+ latin:keyWidth="fillBoth" />
+ </Row>
<Row
latin:keyWidth="8.047%p"
>
<include
latin:keyboardLayout="@xml/rowkeys_hebrew3"
latin:keyXPos="13.829%p" />
- <Key
- latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-10.400%p"
- latin:keyWidth="fillBoth" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_hindi.xml b/java/res/xml-sw768dp/rows_hindi.xml
index bb1884227..86e925fb1 100644
--- a/java/res/xml-sw768dp/rows_hindi.xml
+++ b/java/res/xml-sw768dp/rows_hindi.xml
@@ -28,7 +28,8 @@
>
<Key
latin:keyStyle="tabKeyStyle"
- latin:keyLabelFlags="alignLeft" />
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_hindi1"
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
@@ -37,12 +38,12 @@
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.194%p"
+ latin:keyWidth="7.186%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="9.375%p" />
+ latin:keyWidth="11.172%p" />
<include
latin:keyboardLayout="@xml/rowkeys_hindi2" />
<Key
@@ -50,15 +51,18 @@
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.135%p"
+ latin:keyWidth="7.040%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="14.375%p" />
+ latin:keyWidth="13.829%p" />
<include
latin:keyboardLayout="@xml/rowkeys_hindi3" />
<include
latin:keyboardLayout="@xml/keys_comma_period" />
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="fillBoth" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_nordic.xml b/java/res/xml-sw768dp/rows_nordic.xml
index 348972469..fbee1c3f0 100644
--- a/java/res/xml-sw768dp/rows_nordic.xml
+++ b/java/res/xml-sw768dp/rows_nordic.xml
@@ -29,42 +29,40 @@
<Key
latin:keyStyle="tabKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="7.500%p" />
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_nordic1"
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-11.500%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.375%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
latin:keyLabelFlags="alignLeft"
- latin:keyWidth="9.375%p" />
+ latin:keyWidth="11.172%p" />
<include
latin:keyboardLayout="@xml/rowkeys_nordic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-9.375%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.375%p"
+ latin:keyWidth="7.227%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="12.750%p" />
+ latin:keyWidth="13.829%p" />
<include
latin:keyboardLayout="@xml/rowkeys_qwerty3" />
<include
latin:keyboardLayout="@xml/keys_comma_period" />
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyXPos="-12.750%p"
+ latin:keyXPos="-13.750%p"
latin:keyWidth="fillRight" />
</Row>
<include
diff --git a/java/res/xml-sw768dp/rows_qwerty.xml b/java/res/xml-sw768dp/rows_qwerty.xml
index 8f0b762c5..edfb4011d 100644
--- a/java/res/xml-sw768dp/rows_qwerty.xml
+++ b/java/res/xml-sw768dp/rows_qwerty.xml
@@ -35,7 +35,6 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth"/>
</Row>
<Row
@@ -49,7 +48,6 @@
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_qwertz.xml b/java/res/xml-sw768dp/rows_qwertz.xml
index e3d1c61f0..7e755067d 100644
--- a/java/res/xml-sw768dp/rows_qwertz.xml
+++ b/java/res/xml-sw768dp/rows_qwertz.xml
@@ -35,7 +35,6 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth"/>
</Row>
<Row
@@ -49,7 +48,6 @@
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_south_slavic.xml b/java/res/xml-sw768dp/rows_south_slavic.xml
index 0de8ff84c..7ea0ff465 100644
--- a/java/res/xml-sw768dp/rows_south_slavic.xml
+++ b/java/res/xml-sw768dp/rows_south_slavic.xml
@@ -24,21 +24,21 @@
<include
latin:keyboardLayout="@xml/key_styles_common" />
<Row
- latin:keyWidth="7.125%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="tabKeyStyle"
- latin:keyLabelFlags="alignLeft" />
+ latin:keyLabelFlags="alignLeft"
+ latin:keyWidth="7.969%p" />
<include
latin:keyboardLayout="@xml/rowkeys_south_slavic1"
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.250%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="toSymbolKeyStyle"
@@ -48,11 +48,10 @@
latin:keyboardLayout="@xml/rowkeys_south_slavic2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
- latin:keyWidth="7.250%p"
+ latin:keyWidth="7.000%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
@@ -61,6 +60,9 @@
latin:keyboardLayout="@xml/rowkeys_south_slavic3" />
<include
latin:keyboardLayout="@xml/keys_comma_period" />
+ <Key
+ latin:keyStyle="shiftKeyStyle"
+ latin:keyWidth="fillBoth" />
</Row>
<include
latin:keyboardLayout="@xml/row_qwerty4" />
diff --git a/java/res/xml-sw768dp/rows_spanish.xml b/java/res/xml-sw768dp/rows_spanish.xml
index e4690f396..fc3388d53 100644
--- a/java/res/xml-sw768dp/rows_spanish.xml
+++ b/java/res/xml-sw768dp/rows_spanish.xml
@@ -35,7 +35,6 @@
latin:keyLabelFlags="disableAdditionalMoreKeys|disableKeyHintLabel" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth"/>
</Row>
<Row
@@ -49,7 +48,6 @@
latin:keyboardLayout="@xml/rowkeys_spanish2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_symbols.xml b/java/res/xml-sw768dp/rows_symbols.xml
index 3902aef8e..ed2df18d7 100644
--- a/java/res/xml-sw768dp/rows_symbols.xml
+++ b/java/res/xml-sw768dp/rows_symbols.xml
@@ -36,7 +36,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillRight" />
</Row>
<Row
@@ -50,7 +49,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_symbols_shift.xml b/java/res/xml-sw768dp/rows_symbols_shift.xml
index 7cfff3741..30e1df0bf 100644
--- a/java/res/xml-sw768dp/rows_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_symbols_shift.xml
@@ -36,7 +36,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift1" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -50,7 +49,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_thai_symbols.xml b/java/res/xml-sw768dp/rows_thai_symbols.xml
index 4a251b770..20f22bc5b 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols.xml
@@ -33,7 +33,6 @@
latin:keyXPos="7.969%p" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillRight" />
</Row>
<Row
@@ -57,7 +56,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
index 21002c6c8..467dd19ad 100644
--- a/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
+++ b/java/res/xml-sw768dp/rows_thai_symbols_shift.xml
@@ -33,7 +33,6 @@
latin:keyXPos="7.969%p" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyXPos="-9.219%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
@@ -57,7 +56,6 @@
latin:keyboardLayout="@xml/rowkeys_symbols_shift2" />
<Key
latin:keyStyle="enterKeyStyle"
- latin:keyXPos="-15.704%p"
latin:keyWidth="fillBoth" />
</Row>
<Row
diff --git a/java/res/xml-th/keyboard_set.xml b/java/res/xml-th/keyboard_set.xml
index 7362d8724..99e81b85e 100644
--- a/java/res/xml-th/keyboard_set.xml
+++ b/java/res/xml-th/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="th">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_thai"
diff --git a/java/res/xml-tr/keyboard_set.xml b/java/res/xml-tr/keyboard_set.xml
index 01822a933..8966ddbb0 100644
--- a/java/res/xml-tr/keyboard_set.xml
+++ b/java/res/xml-tr/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="tr">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-uk/keyboard_set.xml b/java/res/xml-uk/keyboard_set.xml
index d782c9823..959f644ea 100644
--- a/java/res/xml-uk/keyboard_set.xml
+++ b/java/res/xml-uk/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="uk">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_east_slavic"
diff --git a/java/res/xml-vi/keyboard_set.xml b/java/res/xml-vi/keyboard_set.xml
index e5f744f7a..8966ddbb0 100644
--- a/java/res/xml-vi/keyboard_set.xml
+++ b/java/res/xml-vi/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="vi">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml-zz-rQY/keyboard_set.xml b/java/res/xml-zz-rQY/keyboard_set.xml
new file mode 100644
index 000000000..6fa97017c
--- /dev/null
+++ b/java/res/xml-zz-rQY/keyboard_set.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<KeyboardSet
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+ latin:disableShortcutKey="true" >
+ <Element
+ latin:elementName="alphabet"
+ latin:elementKeyboard="@xml/kbd_qwerty"
+ latin:enableProximityCharsCorrection="true" />
+ <Element
+ latin:elementName="symbols"
+ latin:elementKeyboard="@xml/kbd_symbols" />
+ <Element
+ latin:elementName="symbolsShifted"
+ latin:elementKeyboard="@xml/kbd_symbols_shift" />
+ <Element
+ latin:elementName="phone"
+ latin:elementKeyboard="@xml/kbd_phone" />
+ <Element
+ latin:elementName="phoneSymbols"
+ latin:elementKeyboard="@xml/kbd_phone_symbols" />
+ <Element
+ latin:elementName="number"
+ latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardSet>
diff --git a/java/res/xml/kbd_hebrew_symbols.xml b/java/res/xml/kbd_hebrew_symbols.xml
new file mode 100644
index 000000000..7e075df48
--- /dev/null
+++ b/java/res/xml/kbd_hebrew_symbols.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/rows_symbols" />
+</Keyboard>
diff --git a/java/res/xml/kbd_hebrew_symbols_shift.xml b/java/res/xml/kbd_hebrew_symbols_shift.xml
new file mode 100644
index 000000000..25db3c84d
--- /dev/null
+++ b/java/res/xml/kbd_hebrew_symbols_shift.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, 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.
+*/
+-->
+
+<Keyboard
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+ <include
+ latin:keyboardLayout="@xml/rows_symbols_shift" />
+</Keyboard>
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 66d8d4d9d..d5a9a2629 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -34,7 +34,7 @@
<default>
<key-style
latin:styleName="f1MoreKeysStyle"
- latin:keyLabelFlags="hasPopupHint"
+ latin:keyLabelFlags="hasPopupHint|preserveCase"
latin:moreKeys="@string/settings_as_more_key"
latin:backgroundType="functional" />
</default>
diff --git a/java/res/xml/keyboard_set.xml b/java/res/xml/keyboard_set.xml
index 83f9ea01c..8966ddbb0 100644
--- a/java/res/xml/keyboard_set.xml
+++ b/java/res/xml/keyboard_set.xml
@@ -19,8 +19,7 @@
-->
<KeyboardSet
- xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
- latin:keyboardLocale="en_GB,en_US">
+ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
<Element
latin:elementName="alphabet"
latin:elementKeyboard="@xml/kbd_qwerty"
diff --git a/java/res/xml/language_prefs.xml b/java/res/xml/language_prefs.xml
deleted file mode 100644
index b7a4c07db..000000000
--- a/java/res/xml/language_prefs.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/language_selection_title">
-</PreferenceScreen>
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index d6ded6689..7a21a856b 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -27,7 +27,7 @@
cs: Czech/qwertz
da: Danish/nordic
de: German/qwertz
- de_ZZ: German (QWERTY)/qwerty
+ de_QY: German (QWERTY)/qwerty
el: Greek/greek
en_US: English United States/qwerty
en_GB: English Great Britain/qwerty
@@ -63,6 +63,7 @@
tr: Turkish/qwerty
uk: Ukrainian/east_slavic
vi: Vietnamese/qwerty
+ zz_QY: QWERTY/qwerty
-->
<!-- TODO: use <lang>_keyboard icon instead of a common keyboard icon. -->
<!-- If IME doesn't have an applicable subtype, the first subtype will be used as a default
@@ -74,7 +75,7 @@
android:label="@string/subtype_en_US"
android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard"
- android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable"
+ android:imeSubtypeExtraValue="TrySuppressingImeSwitcher,AsciiCapable"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_en_GB"
@@ -119,7 +120,7 @@
android:label="@string/subtype_generic_qwerty"
android:imeSubtypeLocale="de"
android:imeSubtypeMode="keyboard"
- android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_ZZ"
+ android:imeSubtypeExtraValue="AsciiCapable,KeyboardLocale=de_QY"
/>
<subtype android:icon="@drawable/ic_subtype_keyboard"
android:label="@string/subtype_generic"
@@ -310,4 +311,10 @@
android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable"
/>
+ <subtype android:icon="@drawable/ic_subtype_keyboard"
+ android:label="@string/subtype_qwerty"
+ android:imeSubtypeLocale="zz_QY"
+ android:imeSubtypeMode="keyboard"
+ android:imeSubtypeExtraValue="AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable"
+ />
</input-method>
diff --git a/java/res/xml/rowkeys_azerty2.xml b/java/res/xml/rowkeys_azerty2.xml
index 11bcd67c7..ff0b06240 100644
--- a/java/res/xml/rowkeys_azerty2.xml
+++ b/java/res/xml/rowkeys_azerty2.xml
@@ -35,9 +35,11 @@
latin:keyLabel="g"
latin:moreKeys="@string/more_keys_for_g" />
<Key
- latin:keyLabel="h" />
+ latin:keyLabel="h"
+ latin:moreKeys="@string/more_keys_for_h" />
<Key
- latin:keyLabel="j" />
+ latin:keyLabel="j"
+ latin:moreKeys="@string/more_keys_for_j" />
<Key
latin:keyLabel="k"
latin:moreKeys="@string/more_keys_for_k" />
diff --git a/java/res/xml/rowkeys_azerty3.xml b/java/res/xml/rowkeys_azerty3.xml
index 1a0eaccdc..b81c3c5a1 100644
--- a/java/res/xml/rowkeys_azerty3.xml
+++ b/java/res/xml/rowkeys_azerty3.xml
@@ -22,7 +22,8 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
- latin:keyLabel="w" />
+ latin:keyLabel="w"
+ latin:moreKeys="@string/more_keys_for_w" />
<Key
latin:keyLabel="x" />
<Key
diff --git a/java/res/xml/rowkeys_east_slavic1.xml b/java/res/xml/rowkeys_east_slavic1.xml
index ab83d99ce..04c6ef6ab 100644
--- a/java/res/xml/rowkeys_east_slavic1.xml
+++ b/java/res/xml/rowkeys_east_slavic1.xml
@@ -65,7 +65,7 @@
latin:keyHintLabel="8"
latin:additionalMoreKeys="8" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_shcha"
+ latin:keyLabel="@string/keylabel_for_east_slavic_row1_9"
latin:keyHintLabel="9"
latin:additionalMoreKeys="9" />
<!-- U+0437: "з" CYRILLIC SMALL LETTER ZE -->
diff --git a/java/res/xml/rowkeys_east_slavic2.xml b/java/res/xml/rowkeys_east_slavic2.xml
index 20415bc80..57b037367 100644
--- a/java/res/xml/rowkeys_east_slavic2.xml
+++ b/java/res/xml/rowkeys_east_slavic2.xml
@@ -25,8 +25,8 @@
<Key
latin:keyLabel="&#x0444;" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_yery"
- latin:moreKeys="@string/more_keys_for_cyrillic_yery" />
+ latin:keyLabel="@string/keylabel_for_east_slavic_row2_1"
+ latin:moreKeys="@string/more_keys_for_east_slavic_row2_1" />
<!-- U+0432: "в" CYRILLIC SMALL LETTER VE -->
<Key
latin:keyLabel="&#x0432;" />
diff --git a/java/res/xml/rowkeys_east_slavic3.xml b/java/res/xml/rowkeys_east_slavic3.xml
index bb6722356..b0f7aed7b 100644
--- a/java/res/xml/rowkeys_east_slavic3.xml
+++ b/java/res/xml/rowkeys_east_slavic3.xml
@@ -34,7 +34,7 @@
<Key
latin:keyLabel="&#x043C;" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_i" />
+ latin:keyLabel="@string/keylabel_for_east_slavic_row3_5" />
<!-- U+0442: "т" CYRILLIC SMALL LETTER TE -->
<Key
latin:keyLabel="&#x0442;" />
diff --git a/java/res/xml/rowkeys_hindi1.xml b/java/res/xml/rowkeys_hindi1.xml
index fe54d9ea9..eb99de96d 100644
--- a/java/res/xml/rowkeys_hindi1.xml
+++ b/java/res/xml/rowkeys_hindi1.xml
@@ -26,80 +26,50 @@
latin:keyboardSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted"
>
<!-- U+0914: "औ" DEVANAGARI LETTER AU
- U+0912/U+0902: "ऒं" DEVANAGARI LETTER SHORT O//DEVANAGARI SIGN ANUSVARA
- U+0967: "१" DEVANAGARI DIGIT ONE -->
+ U+0912/U+0902: "ऒं" DEVANAGARI LETTER SHORT O//DEVANAGARI SIGN ANUSVARA -->
<Key
latin:keyLabel="&#x0914;"
- latin:moreKeys="&#x0912;&#x0902;,%"
- latin:keyHintLabel="1"
- latin:additionalMoreKeys="&#x0967;,1" />
+ latin:moreKeys="&#x0912;&#x0902;" />
<!-- U+0910: "ऐ" DEVANAGARI LETTER AI
- U+0910/U+0902: "ऐं" DEVANAGARI LETTER AI/DEVANAGARI SIGN ANUSVARA
- U+0968: "२" DEVANAGARI DIGIT TWO -->
+ U+0910/U+0902: "ऐं" DEVANAGARI LETTER AI/DEVANAGARI SIGN ANUSVARA -->
<Key
latin:keyLabel="&#x0910;"
- latin:moreKeys="&#x0910;&#x0902;,%"
- latin:keyHintLabel="2"
- latin:additionalMoreKeys="&#x0968;,2" />
+ latin:moreKeys="&#x0910;&#x0902;" />
<!-- U+0906: "आ" DEVANAGARI LETTER AA
U+0906/U+0902: "आं" DEVANAGARI LETTER AA/DEVANAGARI SIGN ANUSVARA
- U+0906/U+0901: "आँ" DEVANAGARI LETTER AA/DEVANAGARI SIGN CANDRABINDU
- U+0969: "३" DEVANAGARI DIGIT THREE -->
+ U+0906/U+0901: "आँ" DEVANAGARI LETTER AA/DEVANAGARI SIGN CANDRABINDU -->
<Key
latin:keyLabel="&#x0906;"
- latin:moreKeys="&#x0906;&#x0902;,&#x0906;&#x0901;,%"
- latin:keyHintLabel="3"
- latin:additionalMoreKeys="&#x0969;,3" />
+ latin:moreKeys="&#x0906;&#x0902;,&#x0906;&#x0901;" />
<!-- U+0908: "ई" DEVANAGARI LETTER II
- U+0908/U+0902: "ईं" DEVANAGARI LETTER II/DEVANAGARI SIGN ANUSVARA
- U+096A: "४" DEVANAGARI DIGIT FOUR -->
+ U+0908/U+0902: "ईं" DEVANAGARI LETTER II/DEVANAGARI SIGN ANUSVARA -->
<Key
latin:keyLabel="&#x0908;"
- latin:moreKeys="&#x0908;&#x0902;,%"
- latin:keyHintLabel="4"
- latin:additionalMoreKeys="&#x096A;,4" />
+ latin:moreKeys="&#x0908;&#x0902;" />
<!-- U+090A: "ऊ" DEVANAGARI LETTER UU
U+090A/U+0902: "ऊं" DEVANAGARI LETTER UU/DEVANAGARI SIGN ANUSVARA
- U+090A/U+0901: "ऊँ" DEVANAGARI LETTER UU/DEVANAGARI SIGN CANDRABINDU
- U+096B: "५" DEVANAGARI DIGIT FIVE -->
+ U+090A/U+0901: "ऊँ" DEVANAGARI LETTER UU/DEVANAGARI SIGN CANDRABINDU -->
<Key
latin:keyLabel="&#x090A;"
- latin:moreKeys="&#x090A;&#x0902;,&#x090A;&#x0901;,%"
- latin:keyHintLabel="5"
- latin:additionalMoreKeys="&#x096B;,5" />
- <!-- U+092D: "भ" DEVANAGARI LETTER BHA
- U+096C: "६" DEVANAGARI DIGIT SIX -->
+ latin:moreKeys="&#x090A;&#x0902;,&#x090A;&#x0901;" />
+ <!-- U+092D: "भ" DEVANAGARI LETTER BHA -->
<Key
- latin:keyLabel="&#x092D;"
- latin:keyHintLabel="6"
- latin:additionalMoreKeys="&#x096C;,6" />
- <!-- U+0903: "ः" DEVANAGARI SIGN VISARGA
- U+096D: "७" DEVANAGARI DIGIT SEVEN -->
+ latin:keyLabel="&#x092D;" />
+ <!-- U+0903: "ः" DEVANAGARI SIGN VISARGA -->
<Key
- latin:keyLabel="&#x0903;"
- latin:keyHintLabel="7"
- latin:additionalMoreKeys="&#x096D;,7" />
- <!-- U+0918: "घ" DEVANAGARI LETTER GHA
- U+096E: "८" DEVANAGARI DIGIT EIGHT -->
+ latin:keyLabel="&#x0903;" />
+ <!-- U+0918: "घ" DEVANAGARI LETTER GHA -->
<Key
- latin:keyLabel="&#x0918;"
- latin:keyHintLabel="8"
- latin:additionalMoreKeys="&#x096E;,8" />
+ latin:keyLabel="&#x0918;" />
<!-- U+0927: "ध" DEVANAGARI LETTER DHA
U+0915/U+094D/U+0937: "क्ष" DEVANAGARI LETTER KA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER SSA
- U+0936/U+094D/U+0930: "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA
- U+096F: "९" DEVANAGARI DIGIT NINE -->
+ U+0936/U+094D/U+0930: "श्र" DEVANAGARI LETTER SHA/DEVANAGARI SIGN VIRAMA/DEVANAGARI LETTER RA -->
<Key
latin:keyLabel="&#x0927;"
- latin:moreKeys="&#x0915;&#x094D;&#x0937;,&#x0936;&#x094D;&#x0930;,%"
- latin:keyHintLabel="9"
- latin:additionalMoreKeys="9" />
- <!-- U+091D: "झ" DEVANAGARI LETTER JHA
- U+0966: "०" DEVANAGARI DIGIT ZERO -->
+ latin:moreKeys="&#x0915;&#x094D;&#x0937;,&#x0936;&#x094D;&#x0930;" />
+ <!-- U+091D: "झ" DEVANAGARI LETTER JHA -->
<Key
- latin:keyLabel="&#x091D;"
- latin:keyHintLabel="0"
- latin:additionalMoreKeys="&#x0966;,0" />
+ latin:keyLabel="&#x091D;" />
<!-- U+0922: "ढ" DEVANAGARI LETTER DDHA -->
<Key
latin:keyLabel="&#x0922;" />
diff --git a/java/res/xml/rowkeys_hindi3.xml b/java/res/xml/rowkeys_hindi3.xml
index 7d43d57c7..c023115ee 100644
--- a/java/res/xml/rowkeys_hindi3.xml
+++ b/java/res/xml/rowkeys_hindi3.xml
@@ -28,9 +28,6 @@
<!-- U+0911: "ऑ" DEVANAGARI LETTER CANDRA O -->
<Key
latin:keyLabel="&#x0911;" />
- <!-- U+090E: "ऎ" DEVANAGARI LETTER SHORT E -->
- <Key
- latin:keyLabel="&#x090E;" />
<!-- U+0901: "ँ" DEVANAGARI SIGN CANDRABINDU
U+0945: "ॅ" DEVANAGARI VOWEL SIGN CANDRA E-->
<Key
@@ -66,9 +63,6 @@
<!-- U+0949: "ॉ" DEVANAGARI VOWEL SIGN CANDRA O -->
<Key
latin:keyLabel="&#x0949;" />
- <!-- U+0946: "ॆ" DEVANAGARI VOWEL SIGN SHORT E -->
- <Key
- latin:keyLabel="&#x0946;" />
<!-- U+0902: "ं" DEVANAGARI SIGN ANUSVARA -->
<Key
latin:keyLabel="&#x0902;" />
diff --git a/java/res/xml/rowkeys_nordic1.xml b/java/res/xml/rowkeys_nordic1.xml
index 355b62654..056895f1f 100644
--- a/java/res/xml/rowkeys_nordic1.xml
+++ b/java/res/xml/rowkeys_nordic1.xml
@@ -24,5 +24,5 @@
<include
latin:keyboardLayout="@xml/rowkeys_qwerty1" />
<Key
- latin:keyLabel="@string/keylabel_for_scandinavia_row1_11" />
+ latin:keyLabel="@string/keylabel_for_nordic_row1_11" />
</merge>
diff --git a/java/res/xml/rowkeys_nordic2.xml b/java/res/xml/rowkeys_nordic2.xml
index 58e6bc2e7..0033ea1bb 100644
--- a/java/res/xml/rowkeys_nordic2.xml
+++ b/java/res/xml/rowkeys_nordic2.xml
@@ -24,9 +24,9 @@
<include
latin:keyboardLayout="@xml/rowkeys_qwerty2" />
<Key
- latin:keyLabel="@string/keylabel_for_scandinavia_row2_10"
- latin:moreKeys="@string/more_keys_for_scandinavia_row2_10" />
+ latin:keyLabel="@string/keylabel_for_nordic_row2_10"
+ latin:moreKeys="@string/more_keys_for_nordic_row2_10" />
<Key
- latin:keyLabel="@string/keylabel_for_scandinavia_row2_11"
- latin:moreKeys="@string/more_keys_for_scandinavia_row2_11" />
+ latin:keyLabel="@string/keylabel_for_nordic_row2_11"
+ latin:moreKeys="@string/more_keys_for_nordic_row2_11" />
</merge>
diff --git a/java/res/xml/rowkeys_qwerty1.xml b/java/res/xml/rowkeys_qwerty1.xml
index bd5e9a271..19067a70c 100644
--- a/java/res/xml/rowkeys_qwerty1.xml
+++ b/java/res/xml/rowkeys_qwerty1.xml
@@ -28,7 +28,8 @@
<Key
latin:keyLabel="w"
latin:keyHintLabel="2"
- latin:additionalMoreKeys="2" />
+ latin:additionalMoreKeys="2"
+ latin:moreKeys="@string/more_keys_for_w" />
<Key
latin:keyLabel="e"
latin:keyHintLabel="3"
diff --git a/java/res/xml/rowkeys_qwerty2.xml b/java/res/xml/rowkeys_qwerty2.xml
index 4c983dfce..2fa8214a8 100644
--- a/java/res/xml/rowkeys_qwerty2.xml
+++ b/java/res/xml/rowkeys_qwerty2.xml
@@ -36,9 +36,11 @@
latin:keyLabel="g"
latin:moreKeys="@string/more_keys_for_g" />
<Key
- latin:keyLabel="h" />
+ latin:keyLabel="h"
+ latin:moreKeys="@string/more_keys_for_h" />
<Key
- latin:keyLabel="j" />
+ latin:keyLabel="j"
+ latin:moreKeys="@string/more_keys_for_j" />
<Key
latin:keyLabel="k"
latin:moreKeys="@string/more_keys_for_k" />
diff --git a/java/res/xml/rowkeys_qwertz1.xml b/java/res/xml/rowkeys_qwertz1.xml
index 27b8a7653..3e11a7ab4 100644
--- a/java/res/xml/rowkeys_qwertz1.xml
+++ b/java/res/xml/rowkeys_qwertz1.xml
@@ -28,7 +28,8 @@
<Key
latin:keyLabel="w"
latin:keyHintLabel="2"
- latin:additionalMoreKeys="2" />
+ latin:additionalMoreKeys="2"
+ latin:moreKeys="@string/more_keys_for_w" />
<Key
latin:keyLabel="e"
latin:keyHintLabel="3"
diff --git a/java/res/xml/rowkeys_south_slavic1.xml b/java/res/xml/rowkeys_south_slavic1.xml
index 5485d866e..e3cb89c67 100644
--- a/java/res/xml/rowkeys_south_slavic1.xml
+++ b/java/res/xml/rowkeys_south_slavic1.xml
@@ -48,7 +48,7 @@
latin:keyHintLabel="5"
latin:additionalMoreKeys="5" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_ze"
+ latin:keyLabel="@string/keylabel_for_south_slavic_row1_6"
latin:keyHintLabel="6"
latin:additionalMoreKeys="6" />
<!-- U+0443: "у" CYRILLIC SMALL LETTER U -->
diff --git a/java/res/xml/rowkeys_south_slavic2.xml b/java/res/xml/rowkeys_south_slavic2.xml
index f30f42c1a..5a7ecd46e 100644
--- a/java/res/xml/rowkeys_south_slavic2.xml
+++ b/java/res/xml/rowkeys_south_slavic2.xml
@@ -52,5 +52,5 @@
<Key
latin:keyLabel="&#x0447;" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_tshe" />
+ latin:keyLabel="@string/keylabel_for_south_slavic_row2_11" />
</merge>
diff --git a/java/res/xml/rowkeys_south_slavic3.xml b/java/res/xml/rowkeys_south_slavic3.xml
index 303fad8c7..97ff51ee1 100644
--- a/java/res/xml/rowkeys_south_slavic3.xml
+++ b/java/res/xml/rowkeys_south_slavic3.xml
@@ -22,7 +22,7 @@
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_dze" />
+ latin:keyLabel="@string/keylabel_for_south_slavic_row3_1" />
<!-- U+045F: "џ" CYRILLIC SMALL LETTER DZHE -->
<Key
latin:keyLabel="&#x045F;" />
@@ -42,7 +42,7 @@
<Key
latin:keyLabel="&#x043C;" />
<Key
- latin:keyLabel="@string/keylabel_for_cyrillic_dje" />
+ latin:keyLabel="@string/keylabel_for_south_slavic_row3_8" />
<!-- U+0436: "ж" CYRILLIC SMALL LETTER ZHE -->
<Key
latin:keyLabel="&#x0436;" />
diff --git a/java/res/xml/rowkeys_thai1.xml b/java/res/xml/rowkeys_thai1.xml
index 54ec327b0..943112a1a 100644
--- a/java/res/xml/rowkeys_thai1.xml
+++ b/java/res/xml/rowkeys_thai1.xml
@@ -27,44 +27,28 @@
>
<!-- U+0E0E: "ฎ" THAI CHARACTER DO CHADA -->
<Key
- latin:keyLabel="&#x0E0E;"
- latin:keyHintLabel="1"
- latin:additionalMoreKeys="1" />
+ latin:keyLabel="&#x0E0E;" />
<!-- U+0E11: "ฑ" THAI CHARACTER THO NANGMONTHO -->
<Key
- latin:keyLabel="&#x0E11;"
- latin:keyHintLabel="2"
- latin:additionalMoreKeys="2" />
+ latin:keyLabel="&#x0E11;" />
<!-- U+0E18: "ธ" THAI CHARACTER THO THONG -->
<Key
- latin:keyLabel="&#x0E18;"
- latin:keyHintLabel="3"
- latin:additionalMoreKeys="3" />
+ latin:keyLabel="&#x0E18;" />
<!-- U+0E13: "ณ" THAI CHARACTER NO NEN -->
<Key
- latin:keyLabel="&#x0E13;"
- latin:keyHintLabel="4"
- latin:additionalMoreKeys="4" />
+ latin:keyLabel="&#x0E13;" />
<!-- U+0E0D: "ญ" THAI CHARACTER YO YING -->
<Key
- latin:keyLabel="&#x0E0D;"
- latin:keyHintLabel="5"
- latin:additionalMoreKeys="5" />
+ latin:keyLabel="&#x0E0D;" />
<!-- U+0E10: "ฐ" THAI CHARACTER THO THAN -->
<Key
- latin:keyLabel="&#x0E10;"
- latin:keyHintLabel="6"
- latin:additionalMoreKeys="6" />
+ latin:keyLabel="&#x0E10;" />
<!-- U+0E03: "ฃ" THAI CHARACTER KHO KHUAT -->
<Key
- latin:keyLabel="&#x0E03;"
- latin:keyHintLabel="7"
- latin:additionalMoreKeys="7" />
+ latin:keyLabel="&#x0E03;" />
<!-- U+0E05: "ฅ" THAI CHARACTER KHO KHON -->
<Key
- latin:keyLabel="&#x0E05;"
- latin:keyHintLabel="8"
- latin:additionalMoreKeys="8" />
+ latin:keyLabel="&#x0E05;" />
<!-- U+0E51: "๑" THAI DIGIT ONE
U+0E52: "๒" THAI DIGIT TWO
U+0E53: "๓" THAI DIGIT THREE
@@ -72,9 +56,7 @@
U+0E55: "๕" THAI DIGIT FIVE -->
<Key
latin:keyLabel="&#x0E51;"
- latin:moreKeys="&#x0E52;,&#x0E53;,&#x0E54;,&#x0E55;,%"
- latin:keyHintLabel="9"
- latin:additionalMoreKeys="9" />
+ latin:moreKeys="!fixedColumnOrder!4,&#x0E52;,&#x0E53;,&#x0E54;,&#x0E55;" />
<!-- U+0E56: "๖" THAI DIGIT SIX
U+0E57: "๗" THAI DIGIT SEVEN
U+0E58: "๘" THAI DIGIT EIGHT
@@ -82,9 +64,7 @@
U+0E50: "๐" THAI DIGIT ZERO -->
<Key
latin:keyLabel="&#x0E56;"
- latin:moreKeys="&#x0E57;,&#x0E58;,&#x0E59;,&#x0E50;,%"
- latin:keyHintLabel="0"
- latin:additionalMoreKeys="0" />
+ latin:moreKeys="!fixedColumnOrder!4,&#x0E57;,&#x0E58;,&#x0E59;,&#x0E50;" />
</case>
<default>
<!-- U+0E20: "ภ" THAI CHARACTER PHO SAMPHAO -->
diff --git a/java/res/xml/rows_east_slavic.xml b/java/res/xml/rows_east_slavic.xml
index 019361250..5d3d768f3 100644
--- a/java/res/xml/rows_east_slavic.xml
+++ b/java/res/xml/rows_east_slavic.xml
@@ -36,11 +36,11 @@
latin:keyboardLayout="@xml/rowkeys_east_slavic2" />
</Row>
<Row
- latin:keyWidth="8.5%p"
+ latin:keyWidth="8.711%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="11.75%p" />
+ latin:keyWidth="10.8%p" />
<include
latin:keyboardLayout="@xml/rowkeys_east_slavic3" />
<Key
diff --git a/java/res/xml/rows_hindi.xml b/java/res/xml/rows_hindi.xml
index 42d89b546..5c631ebff 100644
--- a/java/res/xml/rows_hindi.xml
+++ b/java/res/xml/rows_hindi.xml
@@ -36,11 +36,11 @@
latin:keyboardLayout="@xml/rowkeys_hindi2" />
</Row>
<Row
- latin:keyWidth="7.65%p"
+ latin:keyWidth="8.711%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="11.75%p" />
+ latin:keyWidth="10.8%p" />
<include
latin:keyboardLayout="@xml/rowkeys_hindi3" />
<Key
diff --git a/java/res/xml/rows_nordic.xml b/java/res/xml/rows_nordic.xml
index 51d20e83f..3068917f5 100644
--- a/java/res/xml/rows_nordic.xml
+++ b/java/res/xml/rows_nordic.xml
@@ -36,17 +36,20 @@
latin:keyboardLayout="@xml/rowkeys_nordic2" />
</Row>
<Row
- latin:keyWidth="10%p"
+ latin:keyWidth="9.2%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
latin:keyWidth="15%p"
latin:visualInsetsRight="1%p" />
+ <Spacer
+ latin:keyWidth="2.8%p" />
<include
latin:keyboardLayout="@xml/rowkeys_qwerty3" />
<Key
latin:keyStyle="deleteKeyStyle"
- latin:keyWidth="fillBoth"
+ latin:keyXPos="-15%p"
+ latin:keyWidth="fillRight"
latin:visualInsetsLeft="1%p" />
</Row>
<include
diff --git a/java/res/xml/rows_south_slavic.xml b/java/res/xml/rows_south_slavic.xml
index 31bb38984..05442848d 100644
--- a/java/res/xml/rows_south_slavic.xml
+++ b/java/res/xml/rows_south_slavic.xml
@@ -36,11 +36,11 @@
latin:keyboardLayout="@xml/rowkeys_south_slavic2" />
</Row>
<Row
- latin:keyWidth="8.5%p"
+ latin:keyWidth="8.711%p"
>
<Key
latin:keyStyle="shiftKeyStyle"
- latin:keyWidth="11.75%p" />
+ latin:keyWidth="10.8%p" />
<include
latin:keyboardLayout="@xml/rowkeys_south_slavic3" />
<Key
diff --git a/java/src/com/android/inputmethod/compat/ArraysCompatUtils.java b/java/src/com/android/inputmethod/compat/ArraysCompatUtils.java
deleted file mode 100644
index 011473bef..000000000
--- a/java/src/com/android/inputmethod/compat/ArraysCompatUtils.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.compat;
-
-import android.util.Log;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-
-public class ArraysCompatUtils {
- private static final String TAG = ArraysCompatUtils.class.getSimpleName();
-
- private static final Method METHOD_Arrays_binarySearch = CompatUtils
- .getMethod(Arrays.class, "binarySearch", int[].class, int.class, int.class, int.class);
-
- public static int binarySearch(int[] array, int startIndex, int endIndex, int value) {
- if (METHOD_Arrays_binarySearch != null) {
- final Object index = CompatUtils.invoke(null, 0, METHOD_Arrays_binarySearch,
- array, startIndex, endIndex, value);
- return (Integer)index;
- } else {
- return compatBinarySearch(array, startIndex, endIndex, value);
- }
- }
-
- // TODO: Implement fast binary search
- /* package for testing */
- static int compatBinarySearch(int[] array, int startIndex, int endIndex, int value) {
- // Output error log because this method has strict performance penalty.
- // Note that this method has been called only from spell checker and spell checker exists
- // only from IceCreamSandwich and after, so that there is no chance on pre-ICS device to
- // invoke this method.
- Log.e(TAG, "Invoked expensive binarySearch");
-
- if (startIndex > endIndex) throw new IllegalArgumentException();
- if (startIndex < 0 || endIndex > array.length) throw new ArrayIndexOutOfBoundsException();
-
- final int work[] = new int[endIndex - startIndex];
- System.arraycopy(array, startIndex, work, 0, work.length);
- final int index = Arrays.binarySearch(work, value);
- if (index >= 0) {
- return index + startIndex;
- } else {
- return ~(~index + startIndex);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index b42633cd9..ba82a06ac 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -32,8 +32,6 @@ public class CompatUtils {
// TODO: Can these be constants instead of literal String constants?
private static final String INPUT_METHOD_SUBTYPE_SETTINGS =
"android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
- private static final String INPUT_LANGUAGE_SELECTION =
- "com.android.inputmethod.latin.INPUT_LANGUAGE_SELECTION";
public static Intent getInputLanguageSelectionIntent(String inputMethodId,
int flagsForSubtypeSettings) {
@@ -51,11 +49,9 @@ public class CompatUtils {
if (flagsForSubtypeSettings > 0) {
intent.setFlags(flagsForSubtypeSettings);
}
- } else {
- action = INPUT_LANGUAGE_SELECTION;
- intent = new Intent(action);
+ return intent;
}
- return intent;
+ throw new RuntimeException("Language selection doesn't supported on this platform");
}
public static Class<?> getClass(String className) {
diff --git a/java/src/com/android/inputmethod/compat/InputConnectionCompatUtils.java b/java/src/com/android/inputmethod/compat/InputConnectionCompatUtils.java
deleted file mode 100644
index 7d00b6007..000000000
--- a/java/src/com/android/inputmethod/compat/InputConnectionCompatUtils.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.compat;
-
-import com.android.inputmethod.latin.EditingUtils.SelectedWord;
-
-import android.view.inputmethod.InputConnection;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-public class InputConnectionCompatUtils {
- private static final Class<?> CLASS_CorrectionInfo = CompatUtils
- .getClass("android.view.inputmethod.CorrectionInfo");
- private static final Class<?>[] INPUT_TYPE_CorrectionInfo = new Class<?>[] { int.class,
- CharSequence.class, CharSequence.class };
- private static final Constructor<?> CONSTRUCTOR_CorrectionInfo = CompatUtils
- .getConstructor(CLASS_CorrectionInfo, INPUT_TYPE_CorrectionInfo);
- private static final Method METHOD_InputConnection_commitCorrection = CompatUtils
- .getMethod(InputConnection.class, "commitCorrection", CLASS_CorrectionInfo);
- private static final Method METHOD_getSelectedText = CompatUtils
- .getMethod(InputConnection.class, "getSelectedText", int.class);
- private static final Method METHOD_setComposingRegion = CompatUtils
- .getMethod(InputConnection.class, "setComposingRegion", int.class, int.class);
- public static final boolean RECORRECTION_SUPPORTED;
-
- static {
- RECORRECTION_SUPPORTED = METHOD_getSelectedText != null
- && METHOD_setComposingRegion != null;
- }
-
- public static void commitCorrection(InputConnection ic, int offset, CharSequence oldText,
- CharSequence newText) {
- if (ic == null || CONSTRUCTOR_CorrectionInfo == null
- || METHOD_InputConnection_commitCorrection == null) {
- return;
- }
- Object[] args = { offset, oldText, newText };
- Object correctionInfo = CompatUtils.newInstance(CONSTRUCTOR_CorrectionInfo, args);
- if (correctionInfo != null) {
- CompatUtils.invoke(ic, null, METHOD_InputConnection_commitCorrection,
- correctionInfo);
- }
- }
-
-
- /**
- * Returns the selected text between the selStart and selEnd positions.
- */
- public static CharSequence getSelectedText(InputConnection ic, int selStart, int selEnd) {
- // Use reflection, for backward compatibility
- return (CharSequence) CompatUtils.invoke(
- ic, null, METHOD_getSelectedText, 0);
- }
-
- /**
- * Tries to set the text into composition mode if there is support for it in the framework.
- */
- public static void underlineWord(InputConnection ic, SelectedWord word) {
- // Use reflection, for backward compatibility
- // If method not found, there's nothing we can do. It still works but just wont underline
- // the word.
- CompatUtils.invoke(
- ic, null, METHOD_setComposingRegion, word.mStart, word.mEnd);
- }
-}
diff --git a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
index a4ff8238c..3df6bea4b 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
@@ -29,7 +29,6 @@ import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
-import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SubtypeSwitcher;
import com.android.inputmethod.latin.SubtypeUtils;
@@ -68,14 +67,6 @@ public class InputMethodManagerCompatWrapper {
private static final InputMethodManagerCompatWrapper sInstance =
new InputMethodManagerCompatWrapper();
- public static final boolean SUBTYPE_SUPPORTED;
-
- static {
- // This static initializer guarantees that METHOD_getShortcutInputMethodsAndSubtypes is
- // already instantiated.
- SUBTYPE_SUPPORTED = METHOD_getShortcutInputMethodsAndSubtypes != null;
- }
-
// For the compatibility, IMM will create dummy subtypes if subtypes are not found.
// This is required to be false if the current behavior is broken. For now, it's ok to be true.
public static final boolean FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES =
@@ -87,7 +78,6 @@ public class InputMethodManagerCompatWrapper {
private InputMethodManager mImm;
private PackageManager mPackageManager;
private ApplicationInfo mApplicationInfo;
- private LanguageSwitcherProxy mLanguageSwitcherProxy;
private String mLatinImePackageName;
public static InputMethodManagerCompatWrapper getInstance() {
@@ -103,39 +93,20 @@ public class InputMethodManagerCompatWrapper {
sInstance.mLatinImePackageName = service.getPackageName();
sInstance.mPackageManager = service.getPackageManager();
sInstance.mApplicationInfo = service.getApplicationInfo();
- sInstance.mLanguageSwitcherProxy = LanguageSwitcherProxy.getInstance();
}
public InputMethodSubtypeCompatWrapper getCurrentInputMethodSubtype() {
- if (!SUBTYPE_SUPPORTED) {
- return new InputMethodSubtypeCompatWrapper(
- 0, 0, mLanguageSwitcherProxy.getInputLocale().toString(), KEYBOARD_MODE, "");
- }
Object o = CompatUtils.invoke(mImm, null, METHOD_getCurrentInputMethodSubtype);
return new InputMethodSubtypeCompatWrapper(o);
}
public InputMethodSubtypeCompatWrapper getLastInputMethodSubtype() {
- if (!SUBTYPE_SUPPORTED) {
- return new InputMethodSubtypeCompatWrapper(
- 0, 0, mLanguageSwitcherProxy.getInputLocale().toString(), KEYBOARD_MODE, "");
- }
Object o = CompatUtils.invoke(mImm, null, METHOD_getLastInputMethodSubtype);
return new InputMethodSubtypeCompatWrapper(o);
}
public List<InputMethodSubtypeCompatWrapper> getEnabledInputMethodSubtypeList(
InputMethodInfoCompatWrapper imi, boolean allowsImplicitlySelectedSubtypes) {
- if (!SUBTYPE_SUPPORTED) {
- String[] languages = mLanguageSwitcherProxy.getEnabledLanguages(
- allowsImplicitlySelectedSubtypes);
- List<InputMethodSubtypeCompatWrapper> subtypeList =
- new ArrayList<InputMethodSubtypeCompatWrapper>();
- for (String lang: languages) {
- subtypeList.add(new InputMethodSubtypeCompatWrapper(0, 0, lang, KEYBOARD_MODE, ""));
- }
- return subtypeList;
- }
Object retval = CompatUtils.invoke(mImm, null, METHOD_getEnabledInputMethodSubtypeList,
(imi != null ? imi.getInputMethodInfo() : null), allowsImplicitlySelectedSubtypes);
if (retval == null || !(retval instanceof List<?>) || ((List<?>)retval).isEmpty()) {
@@ -228,16 +199,10 @@ public class InputMethodManagerCompatWrapper {
}
public boolean switchToLastInputMethod(IBinder token) {
- if (SubtypeSwitcher.getInstance().isDummyVoiceMode()) {
- return true;
- }
return (Boolean)CompatUtils.invoke(mImm, false, METHOD_switchToLastInputMethod, token);
}
public boolean switchToNextInputMethod(IBinder token, boolean onlyCurrentIme) {
- if (SubtypeSwitcher.getInstance().isDummyVoiceMode()) {
- return true;
- }
return (Boolean)CompatUtils.invoke(mImm, false, METHOD_switchToNextInputMethod, token,
onlyCurrentIme);
}
@@ -253,88 +218,6 @@ public class InputMethodManagerCompatWrapper {
public void showInputMethodPicker() {
if (mImm == null) return;
- if (SUBTYPE_SUPPORTED) {
- mImm.showInputMethodPicker();
- return;
- }
-
- // The code below are based on {@link InputMethodManager#showInputMethodMenuInternal}.
-
- final InputMethodInfoCompatWrapper myImi = SubtypeUtils.getInputMethodInfo(
- mLatinImePackageName);
- final List<InputMethodSubtypeCompatWrapper> myImsList = getEnabledInputMethodSubtypeList(
- myImi, true);
- final InputMethodSubtypeCompatWrapper currentIms = getCurrentInputMethodSubtype();
- final List<InputMethodInfoCompatWrapper> imiList = getEnabledInputMethodList();
- imiList.remove(myImi);
- final PackageManager pm = mPackageManager;
- Collections.sort(imiList, new Comparator<InputMethodInfoCompatWrapper>() {
- @Override
- public int compare(InputMethodInfoCompatWrapper imi1,
- InputMethodInfoCompatWrapper imi2) {
- final CharSequence imiId1 = imi1.loadLabel(pm) + "/" + imi1.getId();
- final CharSequence imiId2 = imi2.loadLabel(pm) + "/" + imi2.getId();
- return imiId1.toString().compareTo(imiId2.toString());
- }
- });
-
- final int myImsCount = myImsList.size();
- final int imiCount = imiList.size();
- final CharSequence[] items = new CharSequence[myImsCount + imiCount];
-
- int checkedItem = 0;
- int index = 0;
- final CharSequence myImiLabel = myImi.loadLabel(mPackageManager);
- for (int i = 0; i < myImsCount; i++) {
- InputMethodSubtypeCompatWrapper ims = myImsList.get(i);
- if (currentIms.equals(ims))
- checkedItem = index;
- final CharSequence title = TextUtils.concat(
- ims.getDisplayName(mService, mLatinImePackageName, mApplicationInfo),
- " (" + myImiLabel, ")");
- items[index] = title;
- index++;
- }
-
- for (int i = 0; i < imiCount; i++) {
- final InputMethodInfoCompatWrapper imi = imiList.get(i);
- final CharSequence title = imi.loadLabel(mPackageManager);
- items[index] = title;
- index++;
- }
-
- final InputMethodServiceCompatWrapper service = mService;
- final OnClickListener buttonListener = new OnClickListener() {
- @Override
- public void onClick(DialogInterface di, int whichButton) {
- final Intent intent = new Intent("android.settings.INPUT_METHOD_SETTINGS");
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- service.startActivity(intent);
- }
- };
- final IBinder token = service.getWindow().getWindow().getAttributes().token;
- final OnClickListener selectionListener = new OnClickListener() {
- @Override
- public void onClick(DialogInterface di, int which) {
- di.dismiss();
- if (which < myImsCount) {
- final int imsIndex = which;
- final InputMethodSubtypeCompatWrapper ims = myImsList.get(imsIndex);
- service.notifyOnCurrentInputMethodSubtypeChanged(ims);
- } else {
- final int imiIndex = which - myImsCount;
- final InputMethodInfoCompatWrapper imi = imiList.get(imiIndex);
- setInputMethodAndSubtype(token, imi.getId(), null);
- }
- }
- };
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(mService)
- .setTitle(mService.getString(R.string.selectInputMethod))
- .setNeutralButton(R.string.configure_input_method, buttonListener)
- .setSingleChoiceItems(items, checkedItem, selectionListener);
- mService.showOptionDialogInternal(builder.create());
+ mImm.showInputMethodPicker();
}
}
diff --git a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
index 8e2ee0f7a..7c15be300 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodServiceCompatWrapper.java
@@ -23,7 +23,6 @@ import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodSubtype;
-import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.SubtypeSwitcher;
@@ -87,9 +86,6 @@ public class InputMethodServiceCompatWrapper extends InputMethodService {
if (subtype != null) {
if (!InputMethodManagerCompatWrapper.FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES
&& !subtype.isDummy()) return;
- if (!InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) {
- LanguageSwitcherProxy.getInstance().setLocale(subtype.getLocale());
- }
SubtypeSwitcher.getInstance().updateSubtype(subtype);
}
}
diff --git a/java/src/com/android/inputmethod/compat/SharedPreferencesCompat.java b/java/src/com/android/inputmethod/compat/SharedPreferencesCompat.java
deleted file mode 100644
index 38736f3a1..000000000
--- a/java/src/com/android/inputmethod/compat/SharedPreferencesCompat.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 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.compat;
-
-import android.content.SharedPreferences;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Reflection utils to call SharedPreferences$Editor.apply when possible,
- * falling back to commit when apply isn't available.
- */
-public class SharedPreferencesCompat {
- private static final Method sApplyMethod = findApplyMethod();
-
- private static Method findApplyMethod() {
- try {
- return SharedPreferences.Editor.class.getMethod("apply");
- } catch (NoSuchMethodException unused) {
- // fall through
- }
- return null;
- }
-
- public static void apply(SharedPreferences.Editor editor) {
- if (sApplyMethod != null) {
- try {
- sApplyMethod.invoke(editor);
- return;
- } catch (InvocationTargetException unused) {
- // fall through
- } catch (IllegalAccessException unused) {
- // fall through
- }
- }
- editor.commit();
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/LanguageSwitcherProxy.java b/java/src/com/android/inputmethod/deprecated/LanguageSwitcherProxy.java
deleted file mode 100644
index 290e6b554..000000000
--- a/java/src/com/android/inputmethod/deprecated/LanguageSwitcherProxy.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.deprecated;
-
-import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.deprecated.languageswitcher.LanguageSwitcher;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.Settings;
-
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-
-import java.util.Locale;
-
-// This class is used only when the IME doesn't use method.xml for language switching.
-public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferenceChangeListener {
- private static final LanguageSwitcherProxy sInstance = new LanguageSwitcherProxy();
- private LatinIME mService;
- private LanguageSwitcher mLanguageSwitcher;
- private SharedPreferences mPrefs;
-
- public static LanguageSwitcherProxy getInstance() {
- if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return null;
- return sInstance;
- }
-
- public static void init(LatinIME service, SharedPreferences prefs) {
- if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return;
- final Configuration conf = service.getResources().getConfiguration();
- sInstance.mLanguageSwitcher = new LanguageSwitcher(service);
- sInstance.mLanguageSwitcher.loadLocales(prefs, conf.locale);
- sInstance.mPrefs = prefs;
- sInstance.mService = service;
- prefs.registerOnSharedPreferenceChangeListener(sInstance);
- }
-
- public static void onConfigurationChanged(Configuration conf) {
- if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return;
- sInstance.mLanguageSwitcher.onConfigurationChanged(conf, sInstance.mPrefs);
- }
-
- public static void loadSettings() {
- if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return;
- sInstance.mLanguageSwitcher.loadLocales(sInstance.mPrefs, null);
- }
-
- public int getLocaleCount() {
- return mLanguageSwitcher.getLocaleCount();
- }
-
- public String[] getEnabledLanguages(boolean allowImplicitlySelectedLanguages) {
- return mLanguageSwitcher.getEnabledLanguages(allowImplicitlySelectedLanguages);
- }
-
- public Locale getInputLocale() {
- return mLanguageSwitcher.getInputLocale();
- }
-
- public void setLocale(String localeStr) {
- mLanguageSwitcher.setLocale(localeStr);
- mLanguageSwitcher.persist(mPrefs);
- }
-
- @Override
- public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
- // PREF_SELECTED_LANGUAGES: enabled input subtypes
- // PREF_INPUT_LANGUAGE: current input subtype
- if (key.equals(Settings.PREF_SELECTED_LANGUAGES)
- || key.equals(Settings.PREF_INPUT_LANGUAGE)) {
- mLanguageSwitcher.loadLocales(prefs, null);
- if (mService != null) {
- mService.onRefreshKeyboard();
- }
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java b/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
deleted file mode 100644
index 87d1c118b..000000000
--- a/java/src/com/android/inputmethod/deprecated/VoiceProxy.java
+++ /dev/null
@@ -1,854 +0,0 @@
-/*
- * Copyright (C) 2010 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.deprecated;
-
-import android.app.AlertDialog;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.IBinder;
-import android.preference.PreferenceManager;
-import android.provider.Browser;
-import android.speech.SpeechRecognizer;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.method.LinkMovementMethod;
-import android.text.style.URLSpan;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.Window;
-import android.view.WindowManager;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.ExtractedTextRequest;
-import android.view.inputmethod.InputConnection;
-import android.widget.TextView;
-
-import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
-import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
-import com.android.inputmethod.compat.SharedPreferencesCompat;
-import com.android.inputmethod.deprecated.voice.FieldContext;
-import com.android.inputmethod.deprecated.voice.Hints;
-import com.android.inputmethod.deprecated.voice.SettingsUtil;
-import com.android.inputmethod.deprecated.voice.VoiceInput;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.LatinKeyboardView;
-import com.android.inputmethod.latin.EditingUtils;
-import com.android.inputmethod.latin.LastComposedWord;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.LatinIME.UIHandler;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.StringUtils;
-import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.Utils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class VoiceProxy implements VoiceInput.UiListener {
- private static final VoiceProxy sInstance = new VoiceProxy();
-
- public static final boolean VOICE_INSTALLED =
- !InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED;
- private static final boolean ENABLE_VOICE_BUTTON = true;
- private static final String PREF_VOICE_MODE = "voice_mode";
- // Whether or not the user has used voice input before (and thus, whether to show the
- // first-run warning dialog or not).
- private static final String PREF_HAS_USED_VOICE_INPUT = "has_used_voice_input";
- // Whether or not the user has used voice input from an unsupported locale UI before.
- // For example, the user has a Chinese UI but activates voice input.
- private static final String PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE =
- "has_used_voice_input_unsupported_locale";
- private static final int RECOGNITIONVIEW_HEIGHT_THRESHOLD_RATIO = 6;
- // TODO: Adjusted on phones for now
- private static final int RECOGNITIONVIEW_MINIMUM_HEIGHT_DIP = 244;
-
- private static final String TAG = VoiceProxy.class.getSimpleName();
- private static final boolean DEBUG = LatinImeLogger.sDBG;
-
- private boolean mAfterVoiceInput;
- private boolean mConfigurationChanging;
- private boolean mHasUsedVoiceInput;
- private boolean mHasUsedVoiceInputUnsupportedLocale;
- private boolean mImmediatelyAfterVoiceInput;
- private boolean mIsShowingHint;
- private boolean mLocaleSupportedForVoiceInput;
- private boolean mPasswordText;
- private boolean mRecognizing;
- private boolean mShowingVoiceSuggestions;
- private boolean mVoiceButtonEnabled;
- private boolean mVoiceButtonOnPrimary;
- private boolean mVoiceInputHighlighted;
-
- private int mMinimumVoiceRecognitionViewHeightPixel;
- private InputMethodManagerCompatWrapper mImm;
- private LatinIME mService;
- private AlertDialog mVoiceWarningDialog;
- private VoiceInput mVoiceInput;
- private final VoiceResults mVoiceResults = new VoiceResults();
- private Hints mHints;
- private UIHandler mHandler;
- private SubtypeSwitcher mSubtypeSwitcher;
-
- // For each word, a list of potential replacements, usually from voice.
- private final Map<String, List<CharSequence>> mWordToSuggestions =
- new HashMap<String, List<CharSequence>>();
-
- public static VoiceProxy init(LatinIME context, SharedPreferences prefs, UIHandler h) {
- sInstance.initInternal(context, prefs, h);
- return sInstance;
- }
-
- public static VoiceProxy getInstance() {
- return sInstance;
- }
-
- private void initInternal(LatinIME service, SharedPreferences prefs, UIHandler h) {
- if (!VOICE_INSTALLED) {
- return;
- }
- mService = service;
- mHandler = h;
- mMinimumVoiceRecognitionViewHeightPixel = Utils.dipToPixel(
- Utils.getDipScale(service), RECOGNITIONVIEW_MINIMUM_HEIGHT_DIP);
- mImm = InputMethodManagerCompatWrapper.getInstance();
- mSubtypeSwitcher = SubtypeSwitcher.getInstance();
- mVoiceInput = new VoiceInput(service, this);
- mHints = new Hints(service, prefs, new Hints.Display() {
- @Override
- public void showHint(int viewResource) {
- View view = LayoutInflater.from(mService).inflate(viewResource, null);
- mIsShowingHint = true;
- }
- });
- }
-
- private VoiceProxy() {
- // Intentional empty constructor for singleton.
- }
-
- public void resetVoiceStates(boolean isPasswordText) {
- mAfterVoiceInput = false;
- mImmediatelyAfterVoiceInput = false;
- mShowingVoiceSuggestions = false;
- mVoiceInputHighlighted = false;
- mPasswordText = isPasswordText;
- }
-
- public void flushVoiceInputLogs() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (!mConfigurationChanging) {
- if (mAfterVoiceInput) {
- mVoiceInput.flushAllTextModificationCounters();
- mVoiceInput.logInputEnded();
- }
- mVoiceInput.flushLogs();
- mVoiceInput.cancel();
- }
- }
-
- public void flushAndLogAllTextModificationCounters(int index, CharSequence suggestion,
- String wordSeparators) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mAfterVoiceInput && mShowingVoiceSuggestions) {
- mVoiceInput.flushAllTextModificationCounters();
- // send this intent AFTER logging any prior aggregated edits.
- mVoiceInput.logTextModifiedByChooseSuggestion(suggestion.toString(), index,
- wordSeparators, mService.getCurrentInputConnection());
- }
- }
-
- private void showVoiceWarningDialog(final boolean swipe, IBinder token) {
- if (mVoiceWarningDialog != null && mVoiceWarningDialog.isShowing()) {
- return;
- }
- AlertDialog.Builder builder = new UrlLinkAlertDialogBuilder(mService);
- builder.setCancelable(true);
- builder.setIcon(R.drawable.ic_mic_dialog);
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- mVoiceInput.logKeyboardWarningDialogOk();
- reallyStartListening(swipe);
- }
- });
- builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- mVoiceInput.logKeyboardWarningDialogCancel();
- switchToLastInputMethod();
- }
- });
- // When the dialog is dismissed by user's cancellation, switch back to the last input method
- builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface arg0) {
- mVoiceInput.logKeyboardWarningDialogCancel();
- switchToLastInputMethod();
- }
- });
-
- final CharSequence message;
- if (mLocaleSupportedForVoiceInput) {
- message = TextUtils.concat(
- mService.getText(R.string.voice_warning_may_not_understand), "\n\n",
- mService.getText(R.string.voice_warning_how_to_turn_off));
- } else {
- message = TextUtils.concat(
- mService.getText(R.string.voice_warning_locale_not_supported), "\n\n",
- mService.getText(R.string.voice_warning_may_not_understand), "\n\n",
- mService.getText(R.string.voice_warning_how_to_turn_off));
- }
- builder.setMessage(message);
- builder.setTitle(R.string.voice_warning_title);
- mVoiceWarningDialog = builder.create();
- final Window window = mVoiceWarningDialog.getWindow();
- final WindowManager.LayoutParams lp = window.getAttributes();
- lp.token = token;
- lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
- window.setAttributes(lp);
- window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
- mVoiceInput.logKeyboardWarningDialogShown();
- mVoiceWarningDialog.show();
- }
-
- private static class UrlLinkAlertDialogBuilder extends AlertDialog.Builder {
- private AlertDialog mAlertDialog;
-
- public UrlLinkAlertDialogBuilder(Context context) {
- super(context);
- }
-
- @Override
- public AlertDialog.Builder setMessage(CharSequence message) {
- return super.setMessage(replaceURLSpan(message));
- }
-
- private Spanned replaceURLSpan(CharSequence message) {
- // Replace all spans with the custom span
- final SpannableStringBuilder ssb = new SpannableStringBuilder(message);
- for (URLSpan span : ssb.getSpans(0, ssb.length(), URLSpan.class)) {
- int spanStart = ssb.getSpanStart(span);
- int spanEnd = ssb.getSpanEnd(span);
- int spanFlags = ssb.getSpanFlags(span);
- ssb.removeSpan(span);
- ssb.setSpan(new ClickableSpan(span.getURL()), spanStart, spanEnd, spanFlags);
- }
- return ssb;
- }
-
- @Override
- public AlertDialog create() {
- final AlertDialog dialog = super.create();
-
- dialog.setOnShowListener(new DialogInterface.OnShowListener() {
- @Override
- public void onShow(DialogInterface dialogInterface) {
- // Make URL in the dialog message click-able.
- TextView textView = (TextView) mAlertDialog.findViewById(android.R.id.message);
- if (textView != null) {
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- }
- }
- });
- mAlertDialog = dialog;
- return dialog;
- }
-
- class ClickableSpan extends URLSpan {
- public ClickableSpan(String url) {
- super(url);
- }
-
- @Override
- public void onClick(View widget) {
- Uri uri = Uri.parse(getURL());
- Context context = widget.getContext();
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- // Add this flag to start an activity from service
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
- // Dismiss the warning dialog and go back to the previous IME.
- // TODO: If we can find a way to bring the new activity to front while keeping
- // the warning dialog, we don't need to dismiss it here.
- mAlertDialog.cancel();
- context.startActivity(intent);
- }
- }
- }
-
- public void showPunctuationHintIfNecessary() {
- if (!VOICE_INSTALLED) {
- return;
- }
- InputConnection ic = mService.getCurrentInputConnection();
- if (!mImmediatelyAfterVoiceInput && mAfterVoiceInput && ic != null) {
- if (mHints.showPunctuationHintIfNecessary(ic)) {
- mVoiceInput.logPunctuationHintDisplayed();
- }
- }
- mImmediatelyAfterVoiceInput = false;
- }
-
- public void hideVoiceWindow() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (!mConfigurationChanging) {
- if (mAfterVoiceInput)
- mVoiceInput.logInputEnded();
- if (mVoiceWarningDialog != null && mVoiceWarningDialog.isShowing()) {
- mVoiceInput.logKeyboardWarningDialogDismissed();
- mVoiceWarningDialog.dismiss();
- mVoiceWarningDialog = null;
- }
- if (VOICE_INSTALLED & mRecognizing) {
- mVoiceInput.cancel();
- }
- }
- mWordToSuggestions.clear();
- }
-
- public void setCursorAndSelection(int newSelEnd, int newSelStart) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mAfterVoiceInput) {
- mVoiceInput.setCursorPos(newSelEnd);
- mVoiceInput.setSelectionSpan(newSelEnd - newSelStart);
- }
- }
-
- public void setVoiceInputHighlighted(boolean b) {
- mVoiceInputHighlighted = b;
- }
-
- public void setShowingVoiceSuggestions(boolean b) {
- mShowingVoiceSuggestions = b;
- }
-
- public boolean isVoiceButtonEnabled() {
- return mVoiceButtonEnabled;
- }
-
- public boolean isVoiceButtonOnPrimary() {
- return mVoiceButtonOnPrimary;
- }
-
- public boolean isVoiceInputHighlighted() {
- return mVoiceInputHighlighted;
- }
-
- public boolean isRecognizing() {
- return mRecognizing;
- }
-
- public boolean needsToShowWarningDialog() {
- return !mHasUsedVoiceInput
- || (!mLocaleSupportedForVoiceInput && !mHasUsedVoiceInputUnsupportedLocale);
- }
-
- public boolean getAndResetIsShowingHint() {
- boolean ret = mIsShowingHint;
- mIsShowingHint = false;
- return ret;
- }
-
- private void revertVoiceInput() {
- InputConnection ic = mService.getCurrentInputConnection();
- if (ic != null) ic.commitText("", 1);
- mService.updateSuggestions();
- mVoiceInputHighlighted = false;
- }
-
- public void commitVoiceInput() {
- if (VOICE_INSTALLED && mVoiceInputHighlighted) {
- InputConnection ic = mService.getCurrentInputConnection();
- if (ic != null) ic.finishComposingText();
- mService.updateSuggestions();
- mVoiceInputHighlighted = false;
- }
- }
-
- public boolean logAndRevertVoiceInput() {
- if (!VOICE_INSTALLED) {
- return false;
- }
- if (mVoiceInputHighlighted) {
- mVoiceInput.incrementTextModificationDeleteCount(
- mVoiceResults.candidates.get(0).toString().length());
- revertVoiceInput();
- return true;
- } else {
- return false;
- }
- }
-
- public void rememberReplacedWord(CharSequence suggestion,String wordSeparators) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mShowingVoiceSuggestions) {
- // Retain the replaced word in the alternatives array.
- String wordToBeReplaced = EditingUtils.getWordAtCursor(
- mService.getCurrentInputConnection(), wordSeparators);
- if (!mWordToSuggestions.containsKey(wordToBeReplaced)) {
- wordToBeReplaced = wordToBeReplaced.toLowerCase();
- }
- if (mWordToSuggestions.containsKey(wordToBeReplaced)) {
- List<CharSequence> suggestions = mWordToSuggestions.get(wordToBeReplaced);
- if (suggestions.contains(suggestion)) {
- suggestions.remove(suggestion);
- }
- suggestions.add(wordToBeReplaced);
- mWordToSuggestions.remove(wordToBeReplaced);
- mWordToSuggestions.put(suggestion.toString(), suggestions);
- }
- }
- }
-
- public void handleBackspace() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mAfterVoiceInput) {
- // Don't log delete if the user is pressing delete at
- // the beginning of the text box (hence not deleting anything)
- if (mVoiceInput.getCursorPos() > 0) {
- // If anything was selected before the delete was pressed, increment the
- // delete count by the length of the selection
- int deleteLen = mVoiceInput.getSelectionSpan() > 0 ?
- mVoiceInput.getSelectionSpan() : 1;
- mVoiceInput.incrementTextModificationDeleteCount(deleteLen);
- }
- }
- }
-
- public void handleCharacter() {
- if (!VOICE_INSTALLED) {
- return;
- }
- commitVoiceInput();
- if (mAfterVoiceInput) {
- // Assume input length is 1. This assumption fails for smiley face insertions.
- mVoiceInput.incrementTextModificationInsertCount(1);
- }
- }
-
- public void handleSeparator() {
- if (!VOICE_INSTALLED) {
- return;
- }
- commitVoiceInput();
- if (mAfterVoiceInput){
- // Assume input length is 1. This assumption fails for smiley face insertions.
- mVoiceInput.incrementTextModificationInsertPunctuationCount(1);
- }
- }
-
- public void handleClose() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mRecognizing) {
- mVoiceInput.cancel();
- }
- }
-
-
- public void handleVoiceResults(boolean capitalizeFirstWord) {
- if (!VOICE_INSTALLED) {
- return;
- }
- mAfterVoiceInput = true;
- mImmediatelyAfterVoiceInput = true;
-
- InputConnection ic = mService.getCurrentInputConnection();
- if (!mService.isFullscreenMode()) {
- // Start listening for updates to the text from typing, etc.
- if (ic != null) {
- ExtractedTextRequest req = new ExtractedTextRequest();
- ic.getExtractedText(req, InputConnection.GET_EXTRACTED_TEXT_MONITOR);
- }
- }
- mService.vibrate();
-
- final List<CharSequence> nBest = new ArrayList<CharSequence>();
- for (String c : mVoiceResults.candidates) {
- if (capitalizeFirstWord) {
- c = Character.toUpperCase(c.charAt(0)) + c.substring(1, c.length());
- }
- nBest.add(c);
- }
- if (nBest.size() == 0) {
- return;
- }
- String bestResult = nBest.get(0).toString();
- mVoiceInput.logVoiceInputDelivered(bestResult.length());
- mHints.registerVoiceResult(bestResult);
-
- if (ic != null) ic.beginBatchEdit(); // To avoid extra updates on committing older text
- mService.commitTyped(ic, LastComposedWord.NOT_A_SEPARATOR);
- EditingUtils.appendText(ic, bestResult);
- if (ic != null) ic.endBatchEdit();
-
- mVoiceInputHighlighted = true;
- mWordToSuggestions.putAll(mVoiceResults.alternatives);
- onCancelVoice();
- }
-
- public void switchToRecognitionStatusView(final Configuration configuration) {
- if (!VOICE_INSTALLED) {
- return;
- }
- mHandler.post(new Runnable() {
- @Override
- public void run() {
-// mService.setCandidatesViewShown(false);
- mRecognizing = true;
- mVoiceInput.newView();
- View v = mVoiceInput.getView();
-
- ViewParent p = v.getParent();
- if (p != null && p instanceof ViewGroup) {
- ((ViewGroup) p).removeView(v);
- }
-
- View keyboardView = KeyboardSwitcher.getInstance().getKeyboardView();
-
- // The full height of the keyboard is difficult to calculate
- // as the dimension is expressed in "mm" and not in "pixel"
- // As we add mm, we don't know how the rounding is going to work
- // thus we may end up with few pixels extra (or less).
- if (keyboardView != null) {
- View popupLayout = v.findViewById(R.id.popup_layout);
- final int displayHeight =
- mService.getResources().getDisplayMetrics().heightPixels;
- final int currentHeight = popupLayout.getLayoutParams().height;
- final int keyboardHeight = keyboardView.getHeight();
- if (mMinimumVoiceRecognitionViewHeightPixel > keyboardHeight
- || mMinimumVoiceRecognitionViewHeightPixel > currentHeight) {
- popupLayout.getLayoutParams().height =
- mMinimumVoiceRecognitionViewHeightPixel;
- } else if (keyboardHeight > currentHeight || keyboardHeight
- > (displayHeight / RECOGNITIONVIEW_HEIGHT_THRESHOLD_RATIO)) {
- popupLayout.getLayoutParams().height = keyboardHeight;
- }
- }
- mService.setInputView(v);
- mService.updateInputViewShown();
-
- if (configuration != null) {
- mVoiceInput.onConfigurationChanged(configuration);
- }
- }});
- }
-
- private void switchToLastInputMethod() {
- if (!VOICE_INSTALLED) {
- return;
- }
- final IBinder token = mService.getWindow().getWindow().getAttributes().token;
- new AsyncTask<Void, Void, Boolean>() {
- @Override
- protected Boolean doInBackground(Void... params) {
- return mImm.switchToLastInputMethod(token);
- }
-
- @Override
- protected void onPostExecute(Boolean result) {
- // Calls in this method need to be done in the same thread as the thread which
- // called switchToLastInputMethod()
- if (!result) {
- if (DEBUG) {
- Log.d(TAG, "Couldn't switch back to last IME.");
- }
- // Because the current IME and subtype failed to switch to any other IME and
- // subtype by switchToLastInputMethod, the current IME and subtype should keep
- // being LatinIME and voice subtype in the next time. And for re-showing voice
- // mode, the state of voice input should be reset and the voice view should be
- // hidden.
- mVoiceInput.reset();
- mService.requestHideSelf(0);
- } else {
- // Notify an event that the current subtype was changed. This event will be
- // handled if "onCurrentInputMethodSubtypeChanged" can't be implemented
- // when the API level is 10 or previous.
- mService.notifyOnCurrentInputMethodSubtypeChanged(null);
- }
- }
- }.execute();
- }
-
- private void reallyStartListening(boolean swipe) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (!mHasUsedVoiceInput) {
- // The user has started a voice input, so remember that in the
- // future (so we don't show the warning dialog after the first run).
- SharedPreferences.Editor editor =
- PreferenceManager.getDefaultSharedPreferences(mService).edit();
- editor.putBoolean(PREF_HAS_USED_VOICE_INPUT, true);
- SharedPreferencesCompat.apply(editor);
- mHasUsedVoiceInput = true;
- }
-
- if (!mLocaleSupportedForVoiceInput && !mHasUsedVoiceInputUnsupportedLocale) {
- // The user has started a voice input from an unsupported locale, so remember that
- // in the future (so we don't show the warning dialog the next time they do this).
- SharedPreferences.Editor editor =
- PreferenceManager.getDefaultSharedPreferences(mService).edit();
- editor.putBoolean(PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE, true);
- SharedPreferencesCompat.apply(editor);
- mHasUsedVoiceInputUnsupportedLocale = true;
- }
-
- // Clear N-best suggestions
- mService.clearSuggestions();
-
- FieldContext context = makeFieldContext();
- mVoiceInput.startListening(context, swipe);
- switchToRecognitionStatusView(null);
- }
-
- public void startListening(final boolean swipe, IBinder token) {
- if (!VOICE_INSTALLED) {
- return;
- }
- // TODO: remove swipe which is no longer used.
- if (needsToShowWarningDialog()) {
- // Calls reallyStartListening if user clicks OK, does nothing if user clicks Cancel.
- showVoiceWarningDialog(swipe, token);
- } else {
- reallyStartListening(swipe);
- }
- }
-
- private boolean fieldCanDoVoice(FieldContext fieldContext) {
- return !mPasswordText
- && mVoiceInput != null
- && !mVoiceInput.isBlacklistedField(fieldContext);
- }
-
- private boolean shouldShowVoiceButton(FieldContext fieldContext, EditorInfo editorInfo) {
- @SuppressWarnings("deprecation")
- final boolean noMic = StringUtils.inPrivateImeOptions(null,
- LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, editorInfo)
- || StringUtils.inPrivateImeOptions(mService.getPackageName(),
- LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo);
- return ENABLE_VOICE_BUTTON && fieldCanDoVoice(fieldContext) && !noMic
- && SpeechRecognizer.isRecognitionAvailable(mService);
- }
-
- public static boolean isRecognitionAvailable(Context context) {
- return SpeechRecognizer.isRecognitionAvailable(context);
- }
-
- public void loadSettings(EditorInfo editorInfo, SharedPreferences sp) {
- if (!VOICE_INSTALLED) {
- return;
- }
- mHasUsedVoiceInput = sp.getBoolean(PREF_HAS_USED_VOICE_INPUT, false);
- mHasUsedVoiceInputUnsupportedLocale =
- sp.getBoolean(PREF_HAS_USED_VOICE_INPUT_UNSUPPORTED_LOCALE, false);
-
- mLocaleSupportedForVoiceInput = SubtypeSwitcher.isVoiceSupported(
- mService, SubtypeSwitcher.getInstance().getInputLocaleStr());
-
- final String voiceMode = sp.getString(PREF_VOICE_MODE,
- mService.getString(R.string.voice_mode_main));
- mVoiceButtonEnabled = !voiceMode.equals(mService.getString(R.string.voice_mode_off))
- && shouldShowVoiceButton(makeFieldContext(), editorInfo);
- mVoiceButtonOnPrimary = voiceMode.equals(mService.getString(R.string.voice_mode_main));
- }
-
- public void destroy() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mVoiceInput != null) {
- mVoiceInput.destroy();
- }
- }
-
- public void onStartInputView(IBinder keyboardViewToken) {
- if (!VOICE_INSTALLED) {
- return;
- }
- // If keyboardViewToken is null, keyboardView is not attached but voiceView is attached.
- IBinder windowToken = keyboardViewToken != null ? keyboardViewToken
- : mVoiceInput.getView().getWindowToken();
- // If IME is in voice mode, but still needs to show the voice warning dialog,
- // keep showing the warning.
- if (mSubtypeSwitcher.isVoiceMode() && windowToken != null) {
- // Close keyboard view if it is been shown.
- final LatinKeyboardView keyboardView = KeyboardSwitcher.getInstance().getKeyboardView();
- if (keyboardView != null && keyboardView.isShown())
- keyboardView.purgeKeyboardAndClosing();
- startListening(false, windowToken);
- }
- // If we have no token, onAttachedToWindow will take care of showing dialog and start
- // listening.
- }
-
- public void onAttachedToWindow() {
- if (!VOICE_INSTALLED) {
- return;
- }
- // After onAttachedToWindow, we can show the voice warning dialog. See startListening()
- // above.
- VoiceInputWrapper.getInstance().setVoiceInput(mVoiceInput, mSubtypeSwitcher);
- }
-
- public void onConfigurationChanged(Configuration configuration) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mRecognizing) {
- switchToRecognitionStatusView(configuration);
- }
- }
-
- @Override
- public void onCancelVoice() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mRecognizing) {
- if (mSubtypeSwitcher.isVoiceMode()) {
- // If voice mode is being canceled within LatinIME (i.e. time-out or user
- // cancellation etc.), onCancelVoice() will be called first. LatinIME thinks it's
- // still in voice mode. LatinIME needs to call switchToLastInputMethod().
- // Note that onCancelVoice() will be called again from SubtypeSwitcher.
- switchToLastInputMethod();
- } else if (mSubtypeSwitcher.isKeyboardMode()) {
- // If voice mode is being canceled out of LatinIME (i.e. by user's IME switching or
- // as a result of switchToLastInputMethod() etc.),
- // onCurrentInputMethodSubtypeChanged() will be called first. LatinIME will know
- // that it's in keyboard mode and SubtypeSwitcher will call onCancelVoice().
- mRecognizing = false;
- mService.switchToKeyboardView();
- }
- }
- }
-
- @Override
- public void onVoiceResults(List<String> candidates,
- Map<String, List<CharSequence>> alternatives) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (!mRecognizing) {
- return;
- }
- mVoiceResults.candidates = candidates;
- mVoiceResults.alternatives = alternatives;
- mHandler.updateVoiceResults();
- }
-
- private FieldContext makeFieldContext() {
- SubtypeSwitcher switcher = SubtypeSwitcher.getInstance();
- return new FieldContext(mService.getCurrentInputConnection(),
- mService.getCurrentInputEditorInfo(), switcher.getInputLocaleStr(),
- switcher.getEnabledLanguages());
- }
-
- // TODO: make this private (proguard issue)
- public static class VoiceResults {
- List<String> candidates;
- Map<String, List<CharSequence>> alternatives;
- }
-
- public static class VoiceInputWrapper {
- private static final VoiceInputWrapper sInputWrapperInstance = new VoiceInputWrapper();
- private VoiceInput mVoiceInput;
- public static VoiceInputWrapper getInstance() {
- return sInputWrapperInstance;
- }
- private void setVoiceInput(VoiceInput voiceInput, SubtypeSwitcher switcher) {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mVoiceInput == null && voiceInput != null) {
- mVoiceInput = voiceInput;
- }
- switcher.setVoiceInputWrapper(this);
- }
-
- private VoiceInputWrapper() {
- }
-
- public void cancel() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mVoiceInput != null) mVoiceInput.cancel();
- }
-
- public void reset() {
- if (!VOICE_INSTALLED) {
- return;
- }
- if (mVoiceInput != null) mVoiceInput.reset();
- }
- }
-
- // A list of locales which are supported by default for voice input, unless we get a
- // different list from Gservices.
- private static final String DEFAULT_VOICE_INPUT_SUPPORTED_LOCALES =
- "en " +
- "en_US " +
- "en_GB " +
- "en_AU " +
- "en_CA " +
- "en_IE " +
- "en_IN " +
- "en_NZ " +
- "en_SG " +
- "en_ZA ";
-
- public static String getSupportedLocalesString (ContentResolver resolver) {
- return SettingsUtil.getSettingsString(
- resolver,
- SettingsUtil.LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES,
- DEFAULT_VOICE_INPUT_SUPPORTED_LOCALES);
- }
-
- public void startChangingConfiguration() {
- mConfigurationChanging = true;
- }
-
- public void finishChangingConfiguration() {
- mConfigurationChanging = false;
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/compat/VoiceInputLoggerCompatUtils.java b/java/src/com/android/inputmethod/deprecated/compat/VoiceInputLoggerCompatUtils.java
deleted file mode 100644
index 488390fbc..000000000
--- a/java/src/com/android/inputmethod/deprecated/compat/VoiceInputLoggerCompatUtils.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.deprecated.compat;
-
-import com.android.common.userhappiness.UserHappinessSignals;
-import com.android.inputmethod.compat.CompatUtils;
-
-import java.lang.reflect.Method;
-
-public class VoiceInputLoggerCompatUtils {
- public static final String EXTRA_TEXT_REPLACED_LENGTH = "length";
- public static final String EXTRA_BEFORE_N_BEST_CHOOSE = "before";
- public static final String EXTRA_AFTER_N_BEST_CHOOSE = "after";
- private static final Method METHOD_UserHappinessSignals_setHasVoiceLoggingInfo =
- CompatUtils.getMethod(UserHappinessSignals.class, "setHasVoiceLoggingInfo",
- boolean.class);
-
- public static void setHasVoiceLoggingInfoCompat(boolean hasLoggingInfo) {
- CompatUtils.invoke(null, null, METHOD_UserHappinessSignals_setHasVoiceLoggingInfo,
- hasLoggingInfo);
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java b/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java
deleted file mode 100644
index 421ee6529..000000000
--- a/java/src/com/android/inputmethod/deprecated/languageswitcher/InputLanguageSelection.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2008-2009 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.deprecated.languageswitcher;
-
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceGroup;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Pair;
-
-import com.android.inputmethod.compat.SharedPreferencesCompat;
-import com.android.inputmethod.keyboard.KeyboardSet;
-import com.android.inputmethod.latin.DictionaryFactory;
-import com.android.inputmethod.latin.LocaleUtils;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.Settings;
-import com.android.inputmethod.latin.StringUtils;
-
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-public class InputLanguageSelection extends PreferenceActivity {
-
- private SharedPreferences mPrefs;
- private String mSelectedLanguages;
- private HashMap<CheckBoxPreference, Locale> mLocaleMap =
- new HashMap<CheckBoxPreference, Locale>();
-
- private static class LocaleEntry implements Comparable<Object> {
- private static Collator sCollator = Collator.getInstance();
-
- private String mLabel;
- public final Locale mLocale;
-
- public LocaleEntry(String label, Locale locale) {
- this.mLabel = label;
- this.mLocale = locale;
- }
-
- @Override
- public String toString() {
- return this.mLabel;
- }
-
- @Override
- public int compareTo(Object o) {
- return sCollator.compare(this.mLabel, ((LocaleEntry) o).mLabel);
- }
- }
-
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- addPreferencesFromResource(R.xml.language_prefs);
- // Get the settings preferences
- mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
- mSelectedLanguages = mPrefs.getString(Settings.PREF_SELECTED_LANGUAGES, "");
- String[] languageList = mSelectedLanguages.split(",");
- ArrayList<LocaleEntry> availableLanguages = getUniqueLocales();
- PreferenceGroup parent = getPreferenceScreen();
- final HashMap<Long, LocaleEntry> dictionaryIdLocaleMap = new HashMap<Long, LocaleEntry>();
- final TreeMap<LocaleEntry, Boolean> localeHasDictionaryMap =
- new TreeMap<LocaleEntry, Boolean>();
- for (int i = 0; i < availableLanguages.size(); i++) {
- LocaleEntry loc = availableLanguages.get(i);
- Locale locale = loc.mLocale;
- final Pair<Long, Boolean> hasDictionaryOrLayout = hasDictionaryOrLayout(locale);
- final Long dictionaryId = hasDictionaryOrLayout.first;
- final boolean hasLayout = hasDictionaryOrLayout.second;
- final boolean hasDictionary = dictionaryId != null;
- // Add this locale to the supported list if:
- // 1) this locale has a layout/ 2) this locale has a dictionary
- // If some locales have no layout but have a same dictionary, the shortest locale
- // will be added to the supported list.
- if (!hasLayout && !hasDictionary) {
- continue;
- }
- if (hasLayout) {
- localeHasDictionaryMap.put(loc, hasDictionary);
- }
- if (!hasDictionary) {
- continue;
- }
- if (dictionaryIdLocaleMap.containsKey(dictionaryId)) {
- final String newLocale = locale.toString();
- final String oldLocale =
- dictionaryIdLocaleMap.get(dictionaryId).mLocale.toString();
- // Check if this locale is more appropriate to be the candidate of the input locale.
- if (oldLocale.length() <= newLocale.length() && !hasLayout) {
- // Don't add this new locale to the map<dictionary id, locale> if:
- // 1) the new locale's name is longer than the existing one, and
- // 2) the new locale doesn't have its layout
- continue;
- }
- }
- dictionaryIdLocaleMap.put(dictionaryId, loc);
- }
-
- for (LocaleEntry localeEntry : dictionaryIdLocaleMap.values()) {
- if (!localeHasDictionaryMap.containsKey(localeEntry)) {
- localeHasDictionaryMap.put(localeEntry, true);
- }
- }
-
- for (Entry<LocaleEntry, Boolean> entry : localeHasDictionaryMap.entrySet()) {
- final LocaleEntry localeEntry = entry.getKey();
- final Locale locale = localeEntry.mLocale;
- final Boolean hasDictionary = entry.getValue();
- CheckBoxPreference pref = new CheckBoxPreference(this);
- pref.setTitle(localeEntry.mLabel);
- boolean checked = isLocaleIn(locale, languageList);
- pref.setChecked(checked);
- if (hasDictionary) {
- pref.setSummary(R.string.has_dictionary);
- }
- mLocaleMap.put(pref, locale);
- parent.addPreference(pref);
- }
- }
-
- private boolean isLocaleIn(Locale locale, String[] list) {
- String lang = get5Code(locale);
- for (int i = 0; i < list.length; i++) {
- if (lang.equalsIgnoreCase(list[i])) return true;
- }
- return false;
- }
-
- private Pair<Long, Boolean> hasDictionaryOrLayout(Locale locale) {
- if (locale == null) return new Pair<Long, Boolean>(null, false);
- final Resources res = getResources();
- final Locale saveLocale = LocaleUtils.setSystemLocale(res, locale);
- final Long dictionaryId = DictionaryFactory.getDictionaryId(this, locale);
- boolean hasLayout = false;
-
- try {
- final String localeStr = locale.toString();
- final String[] layoutCountryCodes = KeyboardSet.parseKeyboardLocale(
- getResources(), R.xml.keyboard_set).split(",", -1);
- if (!TextUtils.isEmpty(localeStr) && layoutCountryCodes.length > 0) {
- for (String s : layoutCountryCodes) {
- if (s.equals(localeStr)) {
- hasLayout = true;
- break;
- }
- }
- }
- } catch (XmlPullParserException e) {
- } catch (IOException e) {
- }
- LocaleUtils.setSystemLocale(res, saveLocale);
- return new Pair<Long, Boolean>(dictionaryId, hasLayout);
- }
-
- private String get5Code(Locale locale) {
- String country = locale.getCountry();
- return locale.getLanguage()
- + (TextUtils.isEmpty(country) ? "" : "_" + country);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- // Save the selected languages
- String checkedLanguages = "";
- PreferenceGroup parent = getPreferenceScreen();
- int count = parent.getPreferenceCount();
- for (int i = 0; i < count; i++) {
- CheckBoxPreference pref = (CheckBoxPreference) parent.getPreference(i);
- if (pref.isChecked()) {
- checkedLanguages += get5Code(mLocaleMap.get(pref)) + ",";
- }
- }
- if (checkedLanguages.length() < 1) checkedLanguages = null; // Save null
- Editor editor = mPrefs.edit();
- editor.putString(Settings.PREF_SELECTED_LANGUAGES, checkedLanguages);
- SharedPreferencesCompat.apply(editor);
- }
-
- public ArrayList<LocaleEntry> getUniqueLocales() {
- String[] locales = getAssets().getLocales();
- Arrays.sort(locales);
- ArrayList<LocaleEntry> uniqueLocales = new ArrayList<LocaleEntry>();
-
- final int origSize = locales.length;
- LocaleEntry[] preprocess = new LocaleEntry[origSize];
- int finalSize = 0;
- for (int i = 0 ; i < origSize; i++ ) {
- String s = locales[i];
- int len = s.length();
- String language = "";
- String country = "";
- if (len == 5) {
- language = s.substring(0, 2);
- country = s.substring(3, 5);
- } else if (len < 5) {
- language = s;
- }
- Locale l = new Locale(language, country);
-
- // Exclude languages that are not relevant to LatinIME
- if (TextUtils.isEmpty(language)) {
- continue;
- }
-
- if (finalSize == 0) {
- preprocess[finalSize++] =
- new LocaleEntry(StringUtils.getFullDisplayName(l, false), l);
- } else {
- if (s.equals("zz_ZZ")) {
- // ignore this locale
- } else {
- final String displayName = StringUtils.getFullDisplayName(l, false);
- preprocess[finalSize++] = new LocaleEntry(displayName, l);
- }
- }
- }
- for (int i = 0; i < finalSize ; i++) {
- uniqueLocales.add(preprocess[i]);
- }
- return uniqueLocales;
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/languageswitcher/LanguageSwitcher.java b/java/src/com/android/inputmethod/deprecated/languageswitcher/LanguageSwitcher.java
deleted file mode 100644
index 7e2627c81..000000000
--- a/java/src/com/android/inputmethod/deprecated/languageswitcher/LanguageSwitcher.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2010 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.deprecated.languageswitcher;
-
-import com.android.inputmethod.compat.SharedPreferencesCompat;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.LocaleUtils;
-import com.android.inputmethod.latin.Settings;
-
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.res.Configuration;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Locale;
-
-/**
- * Keeps track of list of selected input languages and the current
- * input language that the user has selected.
- */
-public class LanguageSwitcher {
- private static final String TAG = LanguageSwitcher.class.getSimpleName();
-
- @SuppressWarnings("unused")
- private static final String KEYBOARD_MODE = "keyboard";
- private static final String[] EMPTY_STIRNG_ARRAY = new String[0];
-
- private final ArrayList<Locale> mLocales = new ArrayList<Locale>();
- private final LatinIME mIme;
- private String[] mSelectedLanguageArray = EMPTY_STIRNG_ARRAY;
- private String mSelectedLanguages;
- private int mCurrentIndex = 0;
- private String mDefaultInputLanguage;
- private Locale mDefaultInputLocale;
- private Locale mSystemLocale;
-
- public LanguageSwitcher(LatinIME ime) {
- mIme = ime;
- }
-
- public int getLocaleCount() {
- return mLocales.size();
- }
-
- public void onConfigurationChanged(Configuration conf, SharedPreferences prefs) {
- final Locale newLocale = conf.locale;
- if (!getSystemLocale().toString().equals(newLocale.toString())) {
- loadLocales(prefs, newLocale);
- }
- }
-
- /**
- * Loads the currently selected input languages from shared preferences.
- * @param sp shared preference for getting the current input language and enabled languages
- * @param systemLocale the current system locale, stored for changing the current input language
- * based on the system current system locale.
- * @return whether there was any change
- */
- public boolean loadLocales(SharedPreferences sp, Locale systemLocale) {
- if (LatinImeLogger.sDBG) {
- Log.d(TAG, "load locales");
- }
- if (systemLocale != null) {
- setSystemLocale(systemLocale);
- }
- String selectedLanguages = sp.getString(Settings.PREF_SELECTED_LANGUAGES, null);
- String currentLanguage = sp.getString(Settings.PREF_INPUT_LANGUAGE, null);
- if (TextUtils.isEmpty(selectedLanguages)) {
- mSelectedLanguageArray = EMPTY_STIRNG_ARRAY;
- mSelectedLanguages = null;
- loadDefaults();
- if (mLocales.size() == 0) {
- return false;
- }
- mLocales.clear();
- return true;
- }
- if (selectedLanguages.equals(mSelectedLanguages)) {
- return false;
- }
- mSelectedLanguageArray = selectedLanguages.split(",");
- mSelectedLanguages = selectedLanguages; // Cache it for comparison later
- constructLocales();
- mCurrentIndex = 0;
- if (currentLanguage != null) {
- // Find the index
- mCurrentIndex = 0;
- for (int i = 0; i < mLocales.size(); i++) {
- if (mSelectedLanguageArray[i].equals(currentLanguage)) {
- mCurrentIndex = i;
- break;
- }
- }
- // If we didn't find the index, use the first one
- }
- return true;
- }
-
- private void loadDefaults() {
- if (LatinImeLogger.sDBG) {
- Log.d(TAG, "load default locales:");
- }
- mDefaultInputLocale = mIme.getResources().getConfiguration().locale;
- String country = mDefaultInputLocale.getCountry();
- mDefaultInputLanguage = mDefaultInputLocale.getLanguage() +
- (TextUtils.isEmpty(country) ? "" : "_" + country);
- }
-
- private void constructLocales() {
- mLocales.clear();
- for (final String lang : mSelectedLanguageArray) {
- final Locale locale = LocaleUtils.constructLocaleFromString(lang);
- mLocales.add(locale);
- }
- }
-
- /**
- * Returns the currently selected input language code, or the display language code if
- * no specific locale was selected for input.
- */
- public String getInputLanguage() {
- if (getLocaleCount() == 0) return mDefaultInputLanguage;
-
- return mSelectedLanguageArray[mCurrentIndex];
- }
-
- /**
- * Returns the list of enabled language codes.
- */
- public String[] getEnabledLanguages(boolean allowImplicitlySelectedLanguages) {
- if (mSelectedLanguageArray.length == 0 && allowImplicitlySelectedLanguages) {
- return new String[] { mDefaultInputLanguage };
- }
- return mSelectedLanguageArray;
- }
-
- /**
- * Returns the currently selected input locale, or the display locale if no specific
- * locale was selected for input.
- */
- public Locale getInputLocale() {
- if (getLocaleCount() == 0) return mDefaultInputLocale;
-
- return mLocales.get(mCurrentIndex);
- }
-
- private int nextLocaleIndex() {
- final int size = mLocales.size();
- return (mCurrentIndex + 1) % size;
- }
-
- private int prevLocaleIndex() {
- final int size = mLocales.size();
- return (mCurrentIndex - 1 + size) % size;
- }
-
- /**
- * Returns the next input locale in the list. Wraps around to the beginning of the
- * list if we're at the end of the list.
- */
- public Locale getNextInputLocale() {
- if (getLocaleCount() == 0) return mDefaultInputLocale;
- return mLocales.get(nextLocaleIndex());
- }
-
- /**
- * Sets the system locale (display UI) used for comparing with the input language.
- * @param locale the locale of the system
- */
- private void setSystemLocale(Locale locale) {
- mSystemLocale = locale;
- }
-
- /**
- * Returns the system locale.
- * @return the system locale
- */
- private Locale getSystemLocale() {
- return mSystemLocale;
- }
-
- /**
- * Returns the previous input locale in the list. Wraps around to the end of the
- * list if we're at the beginning of the list.
- */
- public Locale getPrevInputLocale() {
- if (getLocaleCount() == 0) return mDefaultInputLocale;
- return mLocales.get(prevLocaleIndex());
- }
-
- public void reset() {
- mCurrentIndex = 0;
- }
-
- public void next() {
- mCurrentIndex = nextLocaleIndex();
- }
-
- public void prev() {
- mCurrentIndex = prevLocaleIndex();
- }
-
- public void setLocale(String localeStr) {
- final int N = mLocales.size();
- for (int i = 0; i < N; ++i) {
- if (mLocales.get(i).toString().equals(localeStr)) {
- mCurrentIndex = i;
- }
- }
- }
-
- public void persist(SharedPreferences prefs) {
- Editor editor = prefs.edit();
- editor.putString(Settings.PREF_INPUT_LANGUAGE, getInputLanguage());
- SharedPreferencesCompat.apply(editor);
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/FieldContext.java b/java/src/com/android/inputmethod/deprecated/voice/FieldContext.java
deleted file mode 100644
index fd2cf3d25..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/FieldContext.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.ExtractedText;
-import android.view.inputmethod.ExtractedTextRequest;
-import android.view.inputmethod.InputConnection;
-
-/**
- * Represents information about a given text field, which can be passed
- * to the speech recognizer as context information.
- */
-public class FieldContext {
- private static final boolean DBG = false;
-
- static final String LABEL = "label";
- static final String HINT = "hint";
- static final String PACKAGE_NAME = "packageName";
- static final String FIELD_ID = "fieldId";
- static final String FIELD_NAME = "fieldName";
- static final String SINGLE_LINE = "singleLine";
- static final String INPUT_TYPE = "inputType";
- static final String IME_OPTIONS = "imeOptions";
- static final String SELECTED_LANGUAGE = "selectedLanguage";
- static final String ENABLED_LANGUAGES = "enabledLanguages";
-
- Bundle mFieldInfo;
-
- public FieldContext(InputConnection conn, EditorInfo editorInfo,
- String selectedLanguage, String[] enabledLanguages) {
- mFieldInfo = new Bundle();
- addEditorInfoToBundle(editorInfo, mFieldInfo);
- addInputConnectionToBundle(conn, mFieldInfo);
- addLanguageInfoToBundle(selectedLanguage, enabledLanguages, mFieldInfo);
- if (DBG) Log.i("FieldContext", "Bundle = " + mFieldInfo.toString());
- }
-
- private static String safeToString(Object o) {
- if (o == null) {
- return "";
- }
- return o.toString();
- }
-
- private static void addEditorInfoToBundle(EditorInfo info, Bundle bundle) {
- if (info == null) {
- return;
- }
-
- bundle.putString(LABEL, safeToString(info.label));
- bundle.putString(HINT, safeToString(info.hintText));
- bundle.putString(PACKAGE_NAME, safeToString(info.packageName));
- bundle.putInt(FIELD_ID, info.fieldId);
- bundle.putString(FIELD_NAME, safeToString(info.fieldName));
- bundle.putInt(INPUT_TYPE, info.inputType);
- bundle.putInt(IME_OPTIONS, info.imeOptions);
- }
-
- @SuppressWarnings("static-access")
- private static void addInputConnectionToBundle(
- InputConnection conn, Bundle bundle) {
- if (conn == null) {
- return;
- }
-
- ExtractedText et = conn.getExtractedText(new ExtractedTextRequest(), 0);
- if (et == null) {
- return;
- }
- bundle.putBoolean(SINGLE_LINE, (et.flags & et.FLAG_SINGLE_LINE) > 0);
- }
-
- private static void addLanguageInfoToBundle(
- String selectedLanguage, String[] enabledLanguages, Bundle bundle) {
- bundle.putString(SELECTED_LANGUAGE, selectedLanguage);
- bundle.putStringArray(ENABLED_LANGUAGES, enabledLanguages);
- }
-
- public Bundle getBundle() {
- return mFieldInfo;
- }
-
- @Override
- public String toString() {
- return mFieldInfo.toString();
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/Hints.java b/java/src/com/android/inputmethod/deprecated/voice/Hints.java
deleted file mode 100644
index 17a19bf23..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/Hints.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import com.android.inputmethod.compat.SharedPreferencesCompat;
-import com.android.inputmethod.latin.R;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.view.inputmethod.InputConnection;
-
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Logic to determine when to display hints on usage to the user.
- */
-public class Hints {
- public interface Display {
- public void showHint(int viewResource);
- }
-
- private static final String PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN =
- "voice_hint_num_unique_days_shown";
- private static final String PREF_VOICE_HINT_LAST_TIME_SHOWN =
- "voice_hint_last_time_shown";
- private static final String PREF_VOICE_INPUT_LAST_TIME_USED =
- "voice_input_last_time_used";
- private static final String PREF_VOICE_PUNCTUATION_HINT_VIEW_COUNT =
- "voice_punctuation_hint_view_count";
- private static final int DEFAULT_SWIPE_HINT_MAX_DAYS_TO_SHOW = 7;
- private static final int DEFAULT_PUNCTUATION_HINT_MAX_DISPLAYS = 7;
-
- private final Context mContext;
- private final SharedPreferences mPrefs;
- private final Display mDisplay;
- private boolean mVoiceResultContainedPunctuation;
- private int mSwipeHintMaxDaysToShow;
- private int mPunctuationHintMaxDisplays;
-
- // Only show punctuation hint if voice result did not contain punctuation.
- static final Map<CharSequence, String> SPEAKABLE_PUNCTUATION
- = new HashMap<CharSequence, String>();
- static {
- SPEAKABLE_PUNCTUATION.put(",", "comma");
- SPEAKABLE_PUNCTUATION.put(".", "period");
- SPEAKABLE_PUNCTUATION.put("?", "question mark");
- }
-
- public Hints(Context context, SharedPreferences prefs, Display display) {
- mContext = context;
- mPrefs = prefs;
- mDisplay = display;
-
- ContentResolver cr = mContext.getContentResolver();
- mSwipeHintMaxDaysToShow = SettingsUtil.getSettingsInt(
- cr,
- SettingsUtil.LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS,
- DEFAULT_SWIPE_HINT_MAX_DAYS_TO_SHOW);
- mPunctuationHintMaxDisplays = SettingsUtil.getSettingsInt(
- cr,
- SettingsUtil.LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS,
- DEFAULT_PUNCTUATION_HINT_MAX_DISPLAYS);
- }
-
- public boolean showSwipeHintIfNecessary(boolean fieldRecommended) {
- if (fieldRecommended && shouldShowSwipeHint()) {
- showHint(R.layout.voice_swipe_hint);
- return true;
- }
-
- return false;
- }
-
- public boolean showPunctuationHintIfNecessary(InputConnection ic) {
- if (!mVoiceResultContainedPunctuation
- && ic != null
- && getAndIncrementPref(PREF_VOICE_PUNCTUATION_HINT_VIEW_COUNT)
- < mPunctuationHintMaxDisplays) {
- CharSequence charBeforeCursor = ic.getTextBeforeCursor(1, 0);
- if (SPEAKABLE_PUNCTUATION.containsKey(charBeforeCursor)) {
- showHint(R.layout.voice_punctuation_hint);
- return true;
- }
- }
-
- return false;
- }
-
- public void registerVoiceResult(String text) {
- // Update the current time as the last time voice input was used.
- SharedPreferences.Editor editor = mPrefs.edit();
- editor.putLong(PREF_VOICE_INPUT_LAST_TIME_USED, System.currentTimeMillis());
- SharedPreferencesCompat.apply(editor);
-
- mVoiceResultContainedPunctuation = false;
- for (CharSequence s : SPEAKABLE_PUNCTUATION.keySet()) {
- if (text.indexOf(s.toString()) >= 0) {
- mVoiceResultContainedPunctuation = true;
- break;
- }
- }
- }
-
- private boolean shouldShowSwipeHint() {
- final SharedPreferences prefs = mPrefs;
-
- int numUniqueDaysShown = prefs.getInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, 0);
-
- // If we've already shown the hint for enough days, we'll return false.
- if (numUniqueDaysShown < mSwipeHintMaxDaysToShow) {
-
- long lastTimeVoiceWasUsed = prefs.getLong(PREF_VOICE_INPUT_LAST_TIME_USED, 0);
-
- // If the user has used voice today, we'll return false. (We don't show the hint on
- // any day that the user has already used voice.)
- if (!isFromToday(lastTimeVoiceWasUsed)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Determines whether the provided time is from some time today (i.e., this day, month,
- * and year).
- */
- private boolean isFromToday(long timeInMillis) {
- if (timeInMillis == 0) return false;
-
- Calendar today = Calendar.getInstance();
- today.setTimeInMillis(System.currentTimeMillis());
-
- Calendar timestamp = Calendar.getInstance();
- timestamp.setTimeInMillis(timeInMillis);
-
- return (today.get(Calendar.YEAR) == timestamp.get(Calendar.YEAR) &&
- today.get(Calendar.DAY_OF_MONTH) == timestamp.get(Calendar.DAY_OF_MONTH) &&
- today.get(Calendar.MONTH) == timestamp.get(Calendar.MONTH));
- }
-
- private void showHint(int hintViewResource) {
- final SharedPreferences prefs = mPrefs;
-
- int numUniqueDaysShown = prefs.getInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, 0);
- long lastTimeHintWasShown = prefs.getLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, 0);
-
- // If this is the first time the hint is being shown today, increase the saved values
- // to represent that. We don't need to increase the last time the hint was shown unless
- // it is a different day from the current value.
- if (!isFromToday(lastTimeHintWasShown)) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(PREF_VOICE_HINT_NUM_UNIQUE_DAYS_SHOWN, numUniqueDaysShown + 1);
- editor.putLong(PREF_VOICE_HINT_LAST_TIME_SHOWN, System.currentTimeMillis());
- SharedPreferencesCompat.apply(editor);
- }
-
- if (mDisplay != null) {
- mDisplay.showHint(hintViewResource);
- }
- }
-
- private int getAndIncrementPref(String pref) {
- final SharedPreferences prefs = mPrefs;
- int value = prefs.getInt(pref, 0);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(pref, value + 1);
- SharedPreferencesCompat.apply(editor);
- return value;
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/RecognitionView.java b/java/src/com/android/inputmethod/deprecated/voice/RecognitionView.java
deleted file mode 100644
index ff8b1abce..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/RecognitionView.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.CornerPathEffect;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PathEffect;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.StringUtils;
-import com.android.inputmethod.latin.SubtypeSwitcher;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.ShortBuffer;
-import java.util.Locale;
-
-/**
- * The user interface for the "Speak now" and "working" states.
- * Displays a recognition dialog (with waveform, voice meter, etc.),
- * plays beeps, shows errors, etc.
- */
-public class RecognitionView {
- private static final String TAG = "RecognitionView";
-
- private Handler mUiHandler; // Reference to UI thread
- private View mView;
- private Context mContext;
-
- private TextView mText;
- private ImageView mImage;
- private View mProgress;
- private SoundIndicator mSoundIndicator;
- private TextView mLanguage;
- private Button mButton;
-
- private Drawable mInitializing;
- private Drawable mError;
-
- private static final int INIT = 0;
- private static final int LISTENING = 1;
- private static final int WORKING = 2;
- private static final int READY = 3;
-
- private int mState = INIT;
-
- private final View mPopupLayout;
-
- private final Drawable mListeningBorder;
- private final Drawable mWorkingBorder;
- private final Drawable mErrorBorder;
-
- public RecognitionView(Context context, OnClickListener clickListener) {
- mUiHandler = new Handler();
-
- LayoutInflater inflater = (LayoutInflater) context.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
-
- mView = inflater.inflate(R.layout.recognition_status, null);
-
- mPopupLayout= mView.findViewById(R.id.popup_layout);
-
- // Pre-load volume level images
- Resources r = context.getResources();
-
- mListeningBorder = r.getDrawable(R.drawable.vs_dialog_red);
- mWorkingBorder = r.getDrawable(R.drawable.vs_dialog_blue);
- mErrorBorder = r.getDrawable(R.drawable.vs_dialog_yellow);
-
- mInitializing = r.getDrawable(R.drawable.mic_slash);
- mError = r.getDrawable(R.drawable.caution);
-
- mImage = (ImageView) mView.findViewById(R.id.image);
- mProgress = mView.findViewById(R.id.progress);
- mSoundIndicator = (SoundIndicator) mView.findViewById(R.id.sound_indicator);
-
- mButton = (Button) mView.findViewById(R.id.button);
- mButton.setOnClickListener(clickListener);
- mText = (TextView) mView.findViewById(R.id.text);
- mLanguage = (TextView) mView.findViewById(R.id.language);
-
- mContext = context;
- }
-
- public View getView() {
- return mView;
- }
-
- public void restoreState() {
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- // Restart the spinner
- if (mState == WORKING) {
- ((ProgressBar) mProgress).setIndeterminate(false);
- ((ProgressBar) mProgress).setIndeterminate(true);
- }
- }
- });
- }
-
- public void showInitializing() {
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- mState = INIT;
- prepareDialog(mContext.getText(R.string.voice_initializing), mInitializing,
- mContext.getText(R.string.cancel));
- }
- });
- }
-
- public void showListening() {
- Log.d(TAG, "#showListening");
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- mState = LISTENING;
- prepareDialog(mContext.getText(R.string.voice_listening), null,
- mContext.getText(R.string.cancel));
- }
- });
- }
-
- public void updateVoiceMeter(float rmsdB) {
- mSoundIndicator.setRmsdB(rmsdB);
- }
-
- public void showError(final String message) {
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- mState = READY;
- prepareDialog(message, mError, mContext.getText(R.string.ok));
- }
- });
- }
-
- public void showWorking(
- final ByteArrayOutputStream waveBuffer,
- final int speechStartPosition,
- final int speechEndPosition) {
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- mState = WORKING;
- prepareDialog(mContext.getText(R.string.voice_working), null, mContext
- .getText(R.string.cancel));
- final ShortBuffer buf = ByteBuffer.wrap(waveBuffer.toByteArray()).order(
- ByteOrder.nativeOrder()).asShortBuffer();
- buf.position(0);
- waveBuffer.reset();
- showWave(buf, speechStartPosition / 2, speechEndPosition / 2);
- }
- });
- }
-
- private void prepareDialog(CharSequence text, Drawable image,
- CharSequence btnTxt) {
-
- /*
- * The mic of INIT and of LISTENING has to be displayed in the same position. To accomplish
- * that, some text visibility are not set as GONE but as INVISIBLE.
- */
- switch (mState) {
- case INIT:
- mText.setVisibility(View.INVISIBLE);
-
- mProgress.setVisibility(View.GONE);
-
- mImage.setVisibility(View.VISIBLE);
- mImage.setImageResource(R.drawable.mic_slash);
-
- mSoundIndicator.setVisibility(View.GONE);
- mSoundIndicator.stop();
-
- mLanguage.setVisibility(View.INVISIBLE);
-
- mPopupLayout.setBackgroundDrawable(mListeningBorder);
- break;
- case LISTENING:
- mText.setVisibility(View.VISIBLE);
- mText.setText(text);
-
- mProgress.setVisibility(View.GONE);
-
- mImage.setVisibility(View.GONE);
-
- mSoundIndicator.setVisibility(View.VISIBLE);
- mSoundIndicator.start();
-
- Locale locale = SubtypeSwitcher.getInstance().getInputLocale();
-
- mLanguage.setVisibility(View.VISIBLE);
- mLanguage.setText(StringUtils.getFullDisplayName(locale, true));
-
- mPopupLayout.setBackgroundDrawable(mListeningBorder);
- break;
- case WORKING:
-
- mText.setVisibility(View.VISIBLE);
- mText.setText(text);
-
- mProgress.setVisibility(View.VISIBLE);
-
- mImage.setVisibility(View.VISIBLE);
-
- mSoundIndicator.setVisibility(View.GONE);
- mSoundIndicator.stop();
-
- mLanguage.setVisibility(View.GONE);
-
- mPopupLayout.setBackgroundDrawable(mWorkingBorder);
- break;
- case READY:
- mText.setVisibility(View.VISIBLE);
- mText.setText(text);
-
- mProgress.setVisibility(View.GONE);
-
- mImage.setVisibility(View.VISIBLE);
- mImage.setImageResource(R.drawable.caution);
-
- mSoundIndicator.setVisibility(View.GONE);
- mSoundIndicator.stop();
-
- mLanguage.setVisibility(View.GONE);
-
- mPopupLayout.setBackgroundDrawable(mErrorBorder);
- break;
- default:
- Log.w(TAG, "Unknown state " + mState);
- }
- mPopupLayout.requestLayout();
- mButton.setText(btnTxt);
- }
-
- /**
- * @return an average abs of the specified buffer.
- */
- private static int getAverageAbs(ShortBuffer buffer, int start, int i, int npw) {
- int from = start + i * npw;
- int end = from + npw;
- int total = 0;
- for (int x = from; x < end; x++) {
- total += Math.abs(buffer.get(x));
- }
- return total / npw;
- }
-
-
- /**
- * Shows waveform of input audio.
- *
- * Copied from version in VoiceSearch's RecognitionActivity.
- *
- * TODO: adjust stroke width based on the size of data.
- * TODO: use dip rather than pixels.
- */
- private void showWave(ShortBuffer waveBuffer, int startPosition, int endPosition) {
- final int w = ((View) mImage.getParent()).getWidth();
- final int h = ((View) mImage.getParent()).getHeight();
- if (w <= 0 || h <= 0) {
- // view is not visible this time. Skip drawing.
- return;
- }
- final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- final Canvas c = new Canvas(b);
- final Paint paint = new Paint();
- paint.setColor(0xFFFFFFFF); // 0xAARRGGBB
- paint.setAntiAlias(true);
- paint.setStyle(Paint.Style.STROKE);
- paint.setAlpha(80);
-
- final PathEffect effect = new CornerPathEffect(3);
- paint.setPathEffect(effect);
-
- final int numSamples = waveBuffer.remaining();
- int endIndex;
- if (endPosition == 0) {
- endIndex = numSamples;
- } else {
- endIndex = Math.min(endPosition, numSamples);
- }
-
- int startIndex = startPosition - 2000; // include 250ms before speech
- if (startIndex < 0) {
- startIndex = 0;
- }
- final int numSamplePerWave = 200; // 8KHz 25ms = 200 samples
- final float scale = 10.0f / 65536.0f;
-
- final int count = (endIndex - startIndex) / numSamplePerWave;
- final float deltaX = 1.0f * w / count;
- int yMax = h / 2;
- Path path = new Path();
- c.translate(0, yMax);
- float x = 0;
- path.moveTo(x, 0);
- for (int i = 0; i < count; i++) {
- final int avabs = getAverageAbs(waveBuffer, startIndex, i , numSamplePerWave);
- int sign = ( (i & 01) == 0) ? -1 : 1;
- final float y = Math.min(yMax, avabs * h * scale) * sign;
- path.lineTo(x, y);
- x += deltaX;
- path.lineTo(x, y);
- }
- if (deltaX > 4) {
- paint.setStrokeWidth(2);
- } else {
- paint.setStrokeWidth(Math.max(0, (int) (deltaX -.05)));
- }
- c.drawPath(path, paint);
- mImage.setImageBitmap(b);
- }
-
- public void finish() {
- mUiHandler.post(new Runnable() {
- @Override
- public void run() {
- mSoundIndicator.stop();
- }
- });
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/SettingsUtil.java b/java/src/com/android/inputmethod/deprecated/voice/SettingsUtil.java
deleted file mode 100644
index 855a09a1d..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/SettingsUtil.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import android.content.ContentResolver;
-import android.provider.Settings;
-
-/**
- * Utility for retrieving settings from Settings.Secure.
- */
-public class SettingsUtil {
- /**
- * A whitespace-separated list of supported locales for voice input from the keyboard.
- */
- public static final String LATIN_IME_VOICE_INPUT_SUPPORTED_LOCALES =
- "latin_ime_voice_input_supported_locales";
-
- /**
- * A whitespace-separated list of recommended app packages for voice input from the
- * keyboard.
- */
- public static final String LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES =
- "latin_ime_voice_input_recommended_packages";
-
- /**
- * The maximum number of unique days to show the swipe hint for voice input.
- */
- public static final String LATIN_IME_VOICE_INPUT_SWIPE_HINT_MAX_DAYS =
- "latin_ime_voice_input_swipe_hint_max_days";
-
- /**
- * The maximum number of times to show the punctuation hint for voice input.
- */
- public static final String LATIN_IME_VOICE_INPUT_PUNCTUATION_HINT_MAX_DISPLAYS =
- "latin_ime_voice_input_punctuation_hint_max_displays";
-
- /**
- * Endpointer parameters for voice input from the keyboard.
- */
- public static final String LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS =
- "latin_ime_speech_minimum_length_millis";
- public static final String LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS =
- "latin_ime_speech_input_complete_silence_length_millis";
- public static final String LATIN_IME_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS =
- "latin_ime_speech_input_possibly_complete_silence_length_millis";
-
- /**
- * Min and max volume levels that can be displayed on the "speak now" screen.
- */
- public static final String LATIN_IME_MIN_MICROPHONE_LEVEL =
- "latin_ime_min_microphone_level";
- public static final String LATIN_IME_MAX_MICROPHONE_LEVEL =
- "latin_ime_max_microphone_level";
-
- /**
- * The number of sentence-level alternates to request of the server.
- */
- public static final String LATIN_IME_MAX_VOICE_RESULTS = "latin_ime_max_voice_results";
-
- /**
- * Get a string-valued setting.
- *
- * @param cr The content resolver to use
- * @param key The setting to look up
- * @param defaultValue The default value to use if none can be found
- * @return The value of the setting, or defaultValue if it couldn't be found
- */
- public static String getSettingsString(ContentResolver cr, String key, String defaultValue) {
- String result = Settings.Secure.getString(cr, key);
- return (result == null) ? defaultValue : result;
- }
-
- /**
- * Get an int-valued setting.
- *
- * @param cr The content resolver to use
- * @param key The setting to look up
- * @param defaultValue The default value to use if the setting couldn't be found or parsed
- * @return The value of the setting, or defaultValue if it couldn't be found or parsed
- */
- public static int getSettingsInt(ContentResolver cr, String key, int defaultValue) {
- return Settings.Secure.getInt(cr, key, defaultValue);
- }
-
- /**
- * Get a float-valued setting.
- *
- * @param cr The content resolver to use
- * @param key The setting to look up
- * @param defaultValue The default value to use if the setting couldn't be found or parsed
- * @return The value of the setting, or defaultValue if it couldn't be found or parsed
- */
- public static float getSettingsFloat(ContentResolver cr, String key, float defaultValue) {
- return Settings.Secure.getFloat(cr, key, defaultValue);
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/SoundIndicator.java b/java/src/com/android/inputmethod/deprecated/voice/SoundIndicator.java
deleted file mode 100644
index 25b314085..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/SoundIndicator.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.deprecated.voice;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-import com.android.inputmethod.latin.R;
-
-/**
- * A widget which shows the volume of audio using a microphone icon
- */
-public class SoundIndicator extends ImageView {
- @SuppressWarnings("unused")
- private static final String TAG = "SoundIndicator";
-
- private static final float UP_SMOOTHING_FACTOR = 0.9f;
- private static final float DOWN_SMOOTHING_FACTOR = 0.4f;
-
- private static final float AUDIO_METER_MIN_DB = 7.0f;
- private static final float AUDIO_METER_DB_RANGE = 20.0f;
-
- private static final long FRAME_DELAY = 50;
-
- private Bitmap mDrawingBuffer;
- private Canvas mBufferCanvas;
- private Bitmap mEdgeBitmap;
- private float mLevel = 0.0f;
- private Drawable mFrontDrawable;
- private Paint mClearPaint;
- private Paint mMultPaint;
- private int mEdgeBitmapOffset;
-
- private Handler mHandler;
-
- private Runnable mDrawFrame = new Runnable() {
- public void run() {
- invalidate();
- mHandler.postDelayed(mDrawFrame, FRAME_DELAY);
- }
- };
-
- public SoundIndicator(Context context) {
- this(context, null);
- }
-
- public SoundIndicator(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mFrontDrawable = getDrawable();
- BitmapDrawable edgeDrawable =
- (BitmapDrawable) context.getResources().getDrawable(R.drawable.vs_popup_mic_edge);
- mEdgeBitmap = edgeDrawable.getBitmap();
- mEdgeBitmapOffset = mEdgeBitmap.getHeight() / 2;
-
- mDrawingBuffer =
- Bitmap.createBitmap(mFrontDrawable.getIntrinsicWidth(),
- mFrontDrawable.getIntrinsicHeight(), Config.ARGB_8888);
-
- mBufferCanvas = new Canvas(mDrawingBuffer);
-
- // Initialize Paints.
- mClearPaint = new Paint();
- mClearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
-
- mMultPaint = new Paint();
- mMultPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
-
- mHandler = new Handler();
- }
-
- @Override
- public void onDraw(Canvas canvas) {
- //super.onDraw(canvas);
-
- float w = getWidth();
- float h = getHeight();
-
- // Clear the buffer canvas
- mBufferCanvas.drawRect(0, 0, w, h, mClearPaint);
-
- // Set its clip so we don't draw the front image all the way to the top
- Rect clip = new Rect(0,
- (int) ((1.0 - mLevel) * (h + mEdgeBitmapOffset)) - mEdgeBitmapOffset,
- (int) w,
- (int) h);
-
- mBufferCanvas.save();
- mBufferCanvas.clipRect(clip);
-
- // Draw the front image
- mFrontDrawable.setBounds(new Rect(0, 0, (int) w, (int) h));
- mFrontDrawable.draw(mBufferCanvas);
-
- mBufferCanvas.restore();
-
- // Draw the edge image on top of the buffer image with a multiply mode
- mBufferCanvas.drawBitmap(mEdgeBitmap, 0, clip.top, mMultPaint);
-
- // Draw the buffer image (on top of the background image)
- canvas.drawBitmap(mDrawingBuffer, 0, 0, null);
- }
-
- /**
- * Sets the sound level
- *
- * @param rmsdB The level of the sound, in dB.
- */
- public void setRmsdB(float rmsdB) {
- float level = ((rmsdB - AUDIO_METER_MIN_DB) / AUDIO_METER_DB_RANGE);
-
- level = Math.min(Math.max(0.0f, level), 1.0f);
-
- // We smooth towards the new level
- if (level > mLevel) {
- mLevel = (level - mLevel) * UP_SMOOTHING_FACTOR + mLevel;
- } else {
- mLevel = (level - mLevel) * DOWN_SMOOTHING_FACTOR + mLevel;
- }
- invalidate();
- }
-
- public void start() {
- mHandler.post(mDrawFrame);
- }
-
- public void stop() {
- mHandler.removeCallbacks(mDrawFrame);
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/VoiceInput.java b/java/src/com/android/inputmethod/deprecated/voice/VoiceInput.java
deleted file mode 100644
index 8969a2168..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/VoiceInput.java
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import com.android.inputmethod.latin.EditingUtils;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Message;
-import android.os.Parcelable;
-import android.speech.RecognitionListener;
-import android.speech.RecognizerIntent;
-import android.speech.SpeechRecognizer;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.inputmethod.InputConnection;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * Speech recognition input, including both user interface and a background
- * process to stream audio to the network recognizer. This class supplies a
- * View (getView()), which it updates as recognition occurs. The user of this
- * class is responsible for making the view visible to the user, as well as
- * handling various events returned through UiListener.
- */
-public class VoiceInput implements OnClickListener {
- private static final String TAG = "VoiceInput";
- private static final String EXTRA_RECOGNITION_CONTEXT =
- "android.speech.extras.RECOGNITION_CONTEXT";
- private static final String EXTRA_CALLING_PACKAGE = "calling_package";
- private static final String EXTRA_ALTERNATES = "android.speech.extra.ALTERNATES";
- private static final int MAX_ALT_LIST_LENGTH = 6;
- private static boolean DBG = LatinImeLogger.sDBG;
-
- private static final String DEFAULT_RECOMMENDED_PACKAGES =
- "com.android.mms " +
- "com.google.android.gm " +
- "com.google.android.talk " +
- "com.google.android.apps.googlevoice " +
- "com.android.email " +
- "com.android.browser ";
-
- // WARNING! Before enabling this, fix the problem with calling getExtractedText() in
- // landscape view. It causes Extracted text updates to be rejected due to a token mismatch
- public static boolean ENABLE_WORD_CORRECTIONS = true;
-
- // Dummy word suggestion which means "delete current word"
- public static final String DELETE_SYMBOL = " \u00D7 "; // times symbol
-
- private Whitelist mRecommendedList;
- private Whitelist mBlacklist;
-
- private VoiceInputLogger mLogger;
-
- // Names of a few extras defined in VoiceSearch's RecognitionController
- // Note, the version of voicesearch that shipped in Froyo returns the raw
- // RecognitionClientAlternates protocol buffer under the key "alternates",
- // so a VS market update must be installed on Froyo devices in order to see
- // alternatives.
- private static final String ALTERNATES_BUNDLE = "alternates_bundle";
-
- // This is copied from the VoiceSearch app.
- @SuppressWarnings("unused")
- private static final class AlternatesBundleKeys {
- public static final String ALTERNATES = "alternates";
- public static final String CONFIDENCE = "confidence";
- public static final String LENGTH = "length";
- public static final String MAX_SPAN_LENGTH = "max_span_length";
- public static final String SPANS = "spans";
- public static final String SPAN_KEY_DELIMITER = ":";
- public static final String START = "start";
- public static final String TEXT = "text";
- }
-
- // Names of a few intent extras defined in VoiceSearch's RecognitionService.
- // These let us tweak the endpointer parameters.
- private static final String EXTRA_SPEECH_MINIMUM_LENGTH_MILLIS =
- "android.speech.extras.SPEECH_INPUT_MINIMUM_LENGTH_MILLIS";
- private static final String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS =
- "android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS";
- private static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS =
- "android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS";
-
- // The usual endpointer default value for input complete silence length is 0.5 seconds,
- // but that's used for things like voice search. For dictation-like voice input like this,
- // we go with a more liberal value of 1 second. This value will only be used if a value
- // is not provided from Gservices.
- private static final String INPUT_COMPLETE_SILENCE_LENGTH_DEFAULT_VALUE_MILLIS = "1000";
-
- // Used to record part of that state for logging purposes.
- public static final int DEFAULT = 0;
- public static final int LISTENING = 1;
- public static final int WORKING = 2;
- public static final int ERROR = 3;
-
- private int mAfterVoiceInputDeleteCount = 0;
- private int mAfterVoiceInputInsertCount = 0;
- private int mAfterVoiceInputInsertPunctuationCount = 0;
- private int mAfterVoiceInputCursorPos = 0;
- private int mAfterVoiceInputSelectionSpan = 0;
-
- private int mState = DEFAULT;
-
- private final static int MSG_RESET = 1;
-
- private final UIHandler mHandler = new UIHandler(this);
-
- private static class UIHandler extends StaticInnerHandlerWrapper<VoiceInput> {
- public UIHandler(VoiceInput outerInstance) {
- super(outerInstance);
- }
-
- @Override
- public void handleMessage(Message msg) {
- if (msg.what == MSG_RESET) {
- final VoiceInput voiceInput = getOuterInstance();
- voiceInput.mState = DEFAULT;
- voiceInput.mRecognitionView.finish();
- voiceInput.mUiListener.onCancelVoice();
- }
- }
- };
-
- /**
- * Events relating to the recognition UI. You must implement these.
- */
- public interface UiListener {
-
- /**
- * @param recognitionResults a set of transcripts for what the user
- * spoke, sorted by likelihood.
- */
- public void onVoiceResults(
- List<String> recognitionResults,
- Map<String, List<CharSequence>> alternatives);
-
- /**
- * Called when the user cancels speech recognition.
- */
- public void onCancelVoice();
- }
-
- private SpeechRecognizer mSpeechRecognizer;
- private RecognitionListener mRecognitionListener;
- private RecognitionView mRecognitionView;
- private UiListener mUiListener;
- private Context mContext;
-
- /**
- * @param context the service or activity in which we're running.
- * @param uiHandler object to receive events from VoiceInput.
- */
- public VoiceInput(Context context, UiListener uiHandler) {
- mLogger = VoiceInputLogger.getLogger(context);
- mRecognitionListener = new ImeRecognitionListener();
- mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(context);
- mSpeechRecognizer.setRecognitionListener(mRecognitionListener);
- mUiListener = uiHandler;
- mContext = context;
- newView();
-
- String recommendedPackages = SettingsUtil.getSettingsString(
- context.getContentResolver(),
- SettingsUtil.LATIN_IME_VOICE_INPUT_RECOMMENDED_PACKAGES,
- DEFAULT_RECOMMENDED_PACKAGES);
-
- mRecommendedList = new Whitelist();
- for (String recommendedPackage : recommendedPackages.split("\\s+")) {
- mRecommendedList.addApp(recommendedPackage);
- }
-
- mBlacklist = new Whitelist();
- mBlacklist.addApp("com.google.android.setupwizard");
- }
-
- public void setCursorPos(int pos) {
- mAfterVoiceInputCursorPos = pos;
- }
-
- public int getCursorPos() {
- return mAfterVoiceInputCursorPos;
- }
-
- public void setSelectionSpan(int span) {
- mAfterVoiceInputSelectionSpan = span;
- }
-
- public int getSelectionSpan() {
- return mAfterVoiceInputSelectionSpan;
- }
-
- public void incrementTextModificationDeleteCount(int count){
- mAfterVoiceInputDeleteCount += count;
- // Send up intents for other text modification types
- if (mAfterVoiceInputInsertCount > 0) {
- logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
- mAfterVoiceInputInsertCount = 0;
- }
- if (mAfterVoiceInputInsertPunctuationCount > 0) {
- logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
- mAfterVoiceInputInsertPunctuationCount = 0;
- }
-
- }
-
- public void incrementTextModificationInsertCount(int count){
- mAfterVoiceInputInsertCount += count;
- if (mAfterVoiceInputSelectionSpan > 0) {
- // If text was highlighted before inserting the char, count this as
- // a delete.
- mAfterVoiceInputDeleteCount += mAfterVoiceInputSelectionSpan;
- }
- // Send up intents for other text modification types
- if (mAfterVoiceInputDeleteCount > 0) {
- logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
- mAfterVoiceInputDeleteCount = 0;
- }
- if (mAfterVoiceInputInsertPunctuationCount > 0) {
- logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
- mAfterVoiceInputInsertPunctuationCount = 0;
- }
- }
-
- public void incrementTextModificationInsertPunctuationCount(int count){
- mAfterVoiceInputInsertPunctuationCount += count;
- if (mAfterVoiceInputSelectionSpan > 0) {
- // If text was highlighted before inserting the char, count this as
- // a delete.
- mAfterVoiceInputDeleteCount += mAfterVoiceInputSelectionSpan;
- }
- // Send up intents for aggregated non-punctuation insertions
- if (mAfterVoiceInputDeleteCount > 0) {
- logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
- mAfterVoiceInputDeleteCount = 0;
- }
- if (mAfterVoiceInputInsertCount > 0) {
- logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
- mAfterVoiceInputInsertCount = 0;
- }
- }
-
- public void flushAllTextModificationCounters() {
- if (mAfterVoiceInputInsertCount > 0) {
- logTextModifiedByTypingInsertion(mAfterVoiceInputInsertCount);
- mAfterVoiceInputInsertCount = 0;
- }
- if (mAfterVoiceInputDeleteCount > 0) {
- logTextModifiedByTypingDeletion(mAfterVoiceInputDeleteCount);
- mAfterVoiceInputDeleteCount = 0;
- }
- if (mAfterVoiceInputInsertPunctuationCount > 0) {
- logTextModifiedByTypingInsertionPunctuation(mAfterVoiceInputInsertPunctuationCount);
- mAfterVoiceInputInsertPunctuationCount = 0;
- }
- }
-
- /**
- * The configuration of the IME changed and may have caused the views to be layed out
- * again. Restore the state of the recognition view.
- */
- public void onConfigurationChanged(Configuration configuration) {
- mRecognitionView.restoreState();
- mRecognitionView.getView().dispatchConfigurationChanged(configuration);
- }
-
- /**
- * @return true if field is blacklisted for voice
- */
- public boolean isBlacklistedField(FieldContext context) {
- return mBlacklist.matches(context);
- }
-
- /**
- * Used to decide whether to show voice input hints for this field, etc.
- *
- * @return true if field is recommended for voice
- */
- public boolean isRecommendedField(FieldContext context) {
- return mRecommendedList.matches(context);
- }
-
- /**
- * Start listening for speech from the user. This will grab the microphone
- * and start updating the view provided by getView(). It is the caller's
- * responsibility to ensure that the view is visible to the user at this stage.
- *
- * @param context the same FieldContext supplied to voiceIsEnabled()
- * @param swipe whether this voice input was started by swipe, for logging purposes
- */
- public void startListening(FieldContext context, boolean swipe) {
- if (DBG) {
- Log.d(TAG, "startListening: " + context);
- }
-
- if (mState != DEFAULT) {
- Log.w(TAG, "startListening in the wrong status " + mState);
- }
-
- // If everything works ok, the voice input should be already in the correct state. As this
- // class can be called by third-party, we call reset just to be on the safe side.
- reset();
-
- Locale locale = Locale.getDefault();
- String localeString = locale.getLanguage() + "-" + locale.getCountry();
-
- mLogger.start(localeString, swipe);
-
- mState = LISTENING;
-
- mRecognitionView.showInitializing();
- startListeningAfterInitialization(context);
- }
-
- /**
- * Called only when the recognition manager's initialization completed
- *
- * @param context context with which {@link #startListening(FieldContext, boolean)} was executed
- */
- private void startListeningAfterInitialization(FieldContext context) {
- Intent intent = makeIntent();
- intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "");
- intent.putExtra(EXTRA_RECOGNITION_CONTEXT, context.getBundle());
- intent.putExtra(EXTRA_CALLING_PACKAGE, "VoiceIME");
- intent.putExtra(EXTRA_ALTERNATES, true);
- intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,
- SettingsUtil.getSettingsInt(
- mContext.getContentResolver(),
- SettingsUtil.LATIN_IME_MAX_VOICE_RESULTS,
- 1));
- // Get endpointer params from Gservices.
- // TODO: Consider caching these values for improved performance on slower devices.
- final ContentResolver cr = mContext.getContentResolver();
- putEndpointerExtra(
- cr,
- intent,
- SettingsUtil.LATIN_IME_SPEECH_MINIMUM_LENGTH_MILLIS,
- EXTRA_SPEECH_MINIMUM_LENGTH_MILLIS,
- null /* rely on endpointer default */);
- putEndpointerExtra(
- cr,
- intent,
- SettingsUtil.LATIN_IME_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,
- EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS,
- INPUT_COMPLETE_SILENCE_LENGTH_DEFAULT_VALUE_MILLIS
- /* our default value is different from the endpointer's */);
- putEndpointerExtra(
- cr,
- intent,
- SettingsUtil.
- LATIN_IME_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,
- EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS,
- null /* rely on endpointer default */);
-
- mSpeechRecognizer.startListening(intent);
- }
-
- /**
- * Gets the value of the provided Gservices key, attempts to parse it into a long,
- * and if successful, puts the long value as an extra in the provided intent.
- */
- private void putEndpointerExtra(ContentResolver cr, Intent i,
- String gservicesKey, String intentExtraKey, String defaultValue) {
- long l = -1;
- String s = SettingsUtil.getSettingsString(cr, gservicesKey, defaultValue);
- if (s != null) {
- try {
- l = Long.valueOf(s);
- } catch (NumberFormatException e) {
- Log.e(TAG, "could not parse value for " + gservicesKey + ": " + s);
- }
- }
-
- if (l != -1) i.putExtra(intentExtraKey, l);
- }
-
- public void destroy() {
- mSpeechRecognizer.destroy();
- }
-
- /**
- * Creates a new instance of the view that is returned by {@link #getView()}
- * Clients should use this when a previously returned view is stuck in a
- * layout that is being thrown away and a new one is need to show to the
- * user.
- */
- public void newView() {
- mRecognitionView = new RecognitionView(mContext, this);
- }
-
- /**
- * @return a view that shows the recognition flow--e.g., "Speak now" and
- * "working" dialogs.
- */
- public View getView() {
- return mRecognitionView.getView();
- }
-
- /**
- * Handle the cancel button.
- */
- @Override
- public void onClick(View view) {
- switch(view.getId()) {
- case R.id.button:
- cancel();
- break;
- }
- }
-
- public void logTextModifiedByTypingInsertion(int length) {
- mLogger.textModifiedByTypingInsertion(length);
- }
-
- public void logTextModifiedByTypingInsertionPunctuation(int length) {
- mLogger.textModifiedByTypingInsertionPunctuation(length);
- }
-
- public void logTextModifiedByTypingDeletion(int length) {
- mLogger.textModifiedByTypingDeletion(length);
- }
-
- public void logTextModifiedByChooseSuggestion(String suggestion, int index,
- String wordSeparators, InputConnection ic) {
- String wordToBeReplaced = EditingUtils.getWordAtCursor(ic, wordSeparators);
- // If we enable phrase-based alternatives, only send up the first word
- // in suggestion and wordToBeReplaced.
- mLogger.textModifiedByChooseSuggestion(suggestion.length(), wordToBeReplaced.length(),
- index, wordToBeReplaced, suggestion);
- }
-
- public void logKeyboardWarningDialogShown() {
- mLogger.keyboardWarningDialogShown();
- }
-
- public void logKeyboardWarningDialogDismissed() {
- mLogger.keyboardWarningDialogDismissed();
- }
-
- public void logKeyboardWarningDialogOk() {
- mLogger.keyboardWarningDialogOk();
- }
-
- public void logKeyboardWarningDialogCancel() {
- mLogger.keyboardWarningDialogCancel();
- }
-
- public void logSwipeHintDisplayed() {
- mLogger.swipeHintDisplayed();
- }
-
- public void logPunctuationHintDisplayed() {
- mLogger.punctuationHintDisplayed();
- }
-
- public void logVoiceInputDelivered(int length) {
- mLogger.voiceInputDelivered(length);
- }
-
- public void logInputEnded() {
- mLogger.inputEnded();
- }
-
- public void flushLogs() {
- mLogger.flush();
- }
-
- private static Intent makeIntent() {
- Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
-
- // On Cupcake, use VoiceIMEHelper since VoiceSearch doesn't support.
- // On Donut, always use VoiceSearch, since VoiceIMEHelper and
- // VoiceSearch may conflict.
- if (Build.VERSION.RELEASE.equals("1.5")) {
- intent = intent.setClassName(
- "com.google.android.voiceservice",
- "com.google.android.voiceservice.IMERecognitionService");
- } else {
- intent = intent.setClassName(
- "com.google.android.voicesearch",
- "com.google.android.voicesearch.RecognitionService");
- }
-
- return intent;
- }
-
- /**
- * Reset the current voice recognition.
- */
- public void reset() {
- if (mState != DEFAULT) {
- mState = DEFAULT;
-
- // Remove all pending tasks (e.g., timers to cancel voice input)
- mHandler.removeMessages(MSG_RESET);
-
- mSpeechRecognizer.cancel();
- mRecognitionView.finish();
- }
- }
-
- /**
- * Cancel in-progress speech recognition.
- */
- public void cancel() {
- switch (mState) {
- case LISTENING:
- mLogger.cancelDuringListening();
- break;
- case WORKING:
- mLogger.cancelDuringWorking();
- break;
- case ERROR:
- mLogger.cancelDuringError();
- break;
- }
-
- reset();
- mUiListener.onCancelVoice();
- }
-
- private int getErrorStringId(int errorType, boolean endpointed) {
- switch (errorType) {
- // We use CLIENT_ERROR to signify that voice search is not available on the device.
- case SpeechRecognizer.ERROR_CLIENT:
- return R.string.voice_not_installed;
- case SpeechRecognizer.ERROR_NETWORK:
- return R.string.voice_network_error;
- case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
- return endpointed ?
- R.string.voice_network_error : R.string.voice_too_much_speech;
- case SpeechRecognizer.ERROR_AUDIO:
- return R.string.voice_audio_error;
- case SpeechRecognizer.ERROR_SERVER:
- return R.string.voice_server_error;
- case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
- return R.string.voice_speech_timeout;
- case SpeechRecognizer.ERROR_NO_MATCH:
- return R.string.voice_no_match;
- default: return R.string.voice_error;
- }
- }
-
- private void onError(int errorType, boolean endpointed) {
- Log.i(TAG, "error " + errorType);
- mLogger.error(errorType);
- onError(mContext.getString(getErrorStringId(errorType, endpointed)));
- }
-
- private void onError(String error) {
- mState = ERROR;
- mRecognitionView.showError(error);
- // Wait a couple seconds and then automatically dismiss message.
- mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_RESET), 2000);
- }
-
- private class ImeRecognitionListener implements RecognitionListener {
- // Waveform data
- final ByteArrayOutputStream mWaveBuffer = new ByteArrayOutputStream();
- int mSpeechStart;
- private boolean mEndpointed = false;
-
- @Override
- public void onReadyForSpeech(Bundle noiseParams) {
- mRecognitionView.showListening();
- }
-
- @Override
- public void onBeginningOfSpeech() {
- mEndpointed = false;
- mSpeechStart = mWaveBuffer.size();
- }
-
- @Override
- public void onRmsChanged(float rmsdB) {
- mRecognitionView.updateVoiceMeter(rmsdB);
- }
-
- @Override
- public void onBufferReceived(byte[] buf) {
- try {
- mWaveBuffer.write(buf);
- } catch (IOException e) {
- // ignore.
- }
- }
-
- @Override
- public void onEndOfSpeech() {
- mEndpointed = true;
- mState = WORKING;
- mRecognitionView.showWorking(mWaveBuffer, mSpeechStart, mWaveBuffer.size());
- }
-
- @Override
- public void onError(int errorType) {
- mState = ERROR;
- VoiceInput.this.onError(errorType, mEndpointed);
- }
-
- @Override
- public void onResults(Bundle resultsBundle) {
- List<String> results = resultsBundle
- .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
- // VS Market update is needed for IME froyo clients to access the alternatesBundle
- // TODO: verify this.
- Bundle alternatesBundle = resultsBundle.getBundle(ALTERNATES_BUNDLE);
- mState = DEFAULT;
-
- final Map<String, List<CharSequence>> alternatives =
- new HashMap<String, List<CharSequence>>();
-
- if (ENABLE_WORD_CORRECTIONS && alternatesBundle != null && results.size() > 0) {
- // Use the top recognition result to map each alternative's start:length to a word.
- String[] words = results.get(0).split(" ");
- Bundle spansBundle = alternatesBundle.getBundle(AlternatesBundleKeys.SPANS);
- for (String key : spansBundle.keySet()) {
- // Get the word for which these alternates correspond to.
- Bundle spanBundle = spansBundle.getBundle(key);
- int start = spanBundle.getInt(AlternatesBundleKeys.START);
- int length = spanBundle.getInt(AlternatesBundleKeys.LENGTH);
- // Only keep single-word based alternatives.
- if (length == 1 && start < words.length) {
- // Get the alternatives associated with the span.
- // If a word appears twice in a recognition result,
- // concatenate the alternatives for the word.
- List<CharSequence> altList = alternatives.get(words[start]);
- if (altList == null) {
- altList = new ArrayList<CharSequence>();
- alternatives.put(words[start], altList);
- }
- Parcelable[] alternatesArr = spanBundle
- .getParcelableArray(AlternatesBundleKeys.ALTERNATES);
- for (int j = 0; j < alternatesArr.length &&
- altList.size() < MAX_ALT_LIST_LENGTH; j++) {
- Bundle alternateBundle = (Bundle) alternatesArr[j];
- String alternate = alternateBundle.getString(AlternatesBundleKeys.TEXT);
- // Don't allow duplicates in the alternates list.
- if (!altList.contains(alternate)) {
- altList.add(alternate);
- }
- }
- }
- }
- }
-
- if (results.size() > 5) {
- results = results.subList(0, 5);
- }
- mUiListener.onVoiceResults(results, alternatives);
- mRecognitionView.finish();
- }
-
- @Override
- public void onPartialResults(final Bundle partialResults) {
- // currently - do nothing
- }
-
- @Override
- public void onEvent(int eventType, Bundle params) {
- // do nothing - reserved for events that might be added in the future
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/VoiceInputLogger.java b/java/src/com/android/inputmethod/deprecated/voice/VoiceInputLogger.java
deleted file mode 100644
index 22e8207bf..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/VoiceInputLogger.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package com.android.inputmethod.deprecated.voice;
-
-import com.android.common.speech.LoggingEvents;
-import com.android.inputmethod.deprecated.compat.VoiceInputLoggerCompatUtils;
-
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Provides the logging facility for voice input events. This fires broadcasts back to
- * the voice search app which then logs on our behalf.
- *
- * Note that debug console logging does not occur in this class. If you want to
- * see console output of these logging events, there is a boolean switch to turn
- * on on the VoiceSearch side.
- */
-public class VoiceInputLogger {
- @SuppressWarnings("unused")
- private static final String TAG = VoiceInputLogger.class.getSimpleName();
-
- private static VoiceInputLogger sVoiceInputLogger;
-
- private final Context mContext;
-
- // The base intent used to form all broadcast intents to the logger
- // in VoiceSearch.
- private final Intent mBaseIntent;
-
- // This flag is used to indicate when there are voice events that
- // need to be flushed.
- private boolean mHasLoggingInfo = false;
-
- /**
- * Returns the singleton of the logger.
- *
- * @param contextHint a hint context used when creating the logger instance.
- * Ignored if the singleton instance already exists.
- */
- public static synchronized VoiceInputLogger getLogger(Context contextHint) {
- if (sVoiceInputLogger == null) {
- sVoiceInputLogger = new VoiceInputLogger(contextHint);
- }
- return sVoiceInputLogger;
- }
-
- public VoiceInputLogger(Context context) {
- mContext = context;
-
- mBaseIntent = new Intent(LoggingEvents.ACTION_LOG_EVENT);
- mBaseIntent.putExtra(LoggingEvents.EXTRA_APP_NAME, LoggingEvents.VoiceIme.APP_NAME);
- }
-
- private Intent newLoggingBroadcast(int event) {
- Intent i = new Intent(mBaseIntent);
- i.putExtra(LoggingEvents.EXTRA_EVENT, event);
- return i;
- }
-
- public void flush() {
- if (hasLoggingInfo()) {
- Intent i = new Intent(mBaseIntent);
- i.putExtra(LoggingEvents.EXTRA_FLUSH, true);
- mContext.sendBroadcast(i);
- setHasLoggingInfo(false);
- }
- }
-
- public void keyboardWarningDialogShown() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_SHOWN));
- }
-
- public void keyboardWarningDialogDismissed() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_DISMISSED));
- }
-
- public void keyboardWarningDialogOk() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_OK));
- }
-
- public void keyboardWarningDialogCancel() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_CANCEL));
- }
-
- public void settingsWarningDialogShown() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_SHOWN));
- }
-
- public void settingsWarningDialogDismissed() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_DISMISSED));
- }
-
- public void settingsWarningDialogOk() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_OK));
- }
-
- public void settingsWarningDialogCancel() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_CANCEL));
- }
-
- public void swipeHintDisplayed() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.SWIPE_HINT_DISPLAYED));
- }
-
- public void cancelDuringListening() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_LISTENING));
- }
-
- public void cancelDuringWorking() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_WORKING));
- }
-
- public void cancelDuringError() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_ERROR));
- }
-
- public void punctuationHintDisplayed() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.PUNCTUATION_HINT_DISPLAYED));
- }
-
- public void error(int code) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.ERROR);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_ERROR_CODE, code);
- mContext.sendBroadcast(i);
- }
-
- public void start(String locale, boolean swipe) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.START);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_LOCALE, locale);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_SWIPE, swipe);
- i.putExtra(LoggingEvents.EXTRA_TIMESTAMP, System.currentTimeMillis());
- mContext.sendBroadcast(i);
- }
-
- public void voiceInputDelivered(int length) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
- mContext.sendBroadcast(i);
- }
-
- public void textModifiedByTypingInsertion(int length) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
- LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_INSERTION);
- mContext.sendBroadcast(i);
- }
-
- public void textModifiedByTypingInsertionPunctuation(int length) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
- LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_INSERTION_PUNCTUATION);
- mContext.sendBroadcast(i);
- }
-
- public void textModifiedByTypingDeletion(int length) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
- LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_TYPING_DELETION);
-
- mContext.sendBroadcast(i);
- }
-
-
- public void textModifiedByChooseSuggestion(int suggestionLength, int replacedPhraseLength,
- int index, String before, String after) {
- setHasLoggingInfo(true);
- Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, suggestionLength);
- i.putExtra(VoiceInputLoggerCompatUtils.EXTRA_TEXT_REPLACED_LENGTH, replacedPhraseLength);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
- LoggingEvents.VoiceIme.TEXT_MODIFIED_TYPE_CHOOSE_SUGGESTION);
- i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index);
- i.putExtra(VoiceInputLoggerCompatUtils.EXTRA_BEFORE_N_BEST_CHOOSE, before);
- i.putExtra(VoiceInputLoggerCompatUtils.EXTRA_AFTER_N_BEST_CHOOSE, after);
- mContext.sendBroadcast(i);
- }
-
- public void inputEnded() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.INPUT_ENDED));
- }
-
- public void voiceInputSettingEnabled() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_ENABLED));
- }
-
- public void voiceInputSettingDisabled() {
- setHasLoggingInfo(true);
- mContext.sendBroadcast(newLoggingBroadcast(
- LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_DISABLED));
- }
-
- private void setHasLoggingInfo(boolean hasLoggingInfo) {
- mHasLoggingInfo = hasLoggingInfo;
- // If applications that call UserHappinessSignals.userAcceptedImeText
- // make that call after VoiceInputLogger.flush() calls this method with false, we
- // will lose those happiness signals. For example, consider the gmail sequence:
- // 1. compose message
- // 2. speak message into message field
- // 3. type subject into subject field
- // 4. press send
- // We will NOT get the signal that the user accepted the voice inputted message text
- // because when the user tapped on the subject field, the ime's flush will be triggered
- // and the hasLoggingInfo will be then set to false. So by the time the user hits send
- // we have essentially forgotten about any voice input.
- // However the following (more common) use case is properly logged
- // 1. compose message
- // 2. type subject in subject field
- // 3. speak message in message field
- // 4. press send
- VoiceInputLoggerCompatUtils.setHasVoiceLoggingInfoCompat(hasLoggingInfo);
- }
-
- private boolean hasLoggingInfo(){
- return mHasLoggingInfo;
- }
-
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/WaveformImage.java b/java/src/com/android/inputmethod/deprecated/voice/WaveformImage.java
deleted file mode 100644
index 8ed279f42..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/WaveformImage.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2008-2009 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.deprecated.voice;
-
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.ShortBuffer;
-
-/**
- * Utility class to draw a waveform into a bitmap, given a byte array
- * that represents the waveform as a sequence of 16-bit integers.
- * Adapted from RecognitionActivity.java.
- */
-public class WaveformImage {
- private static final int SAMPLING_RATE = 8000;
-
- private WaveformImage() {
- // Intentional empty constructor.
- }
-
- public static Bitmap drawWaveform(
- ByteArrayOutputStream waveBuffer, int w, int h, int start, int end) {
- final Bitmap b = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- final Canvas c = new Canvas(b);
- final Paint paint = new Paint();
- paint.setColor(0xFFFFFFFF); // 0xRRGGBBAA
- paint.setAntiAlias(true);
- paint.setStrokeWidth(0);
-
- final ShortBuffer buf = ByteBuffer
- .wrap(waveBuffer.toByteArray())
- .order(ByteOrder.nativeOrder())
- .asShortBuffer();
- buf.position(0);
-
- final int numSamples = waveBuffer.size() / 2;
- final int delay = (SAMPLING_RATE * 100 / 1000);
- int endIndex = end / 2 + delay;
- if (end == 0 || endIndex >= numSamples) {
- endIndex = numSamples;
- }
- int index = start / 2 - delay;
- if (index < 0) {
- index = 0;
- }
- final int size = endIndex - index;
- int numSamplePerPixel = 32;
- int delta = size / (numSamplePerPixel * w);
- if (delta == 0) {
- numSamplePerPixel = size / w;
- delta = 1;
- }
-
- final float scale = 3.5f / 65536.0f;
- // do one less column to make sure we won't read past
- // the buffer.
- try {
- for (int i = 0; i < w - 1 ; i++) {
- final float x = i;
- for (int j = 0; j < numSamplePerPixel; j++) {
- final short s = buf.get(index);
- final float y = (h / 2) - (s * h * scale);
- c.drawPoint(x, y, paint);
- index += delta;
- }
- }
- } catch (IndexOutOfBoundsException e) {
- // this can happen, but we don't care
- }
-
- return b;
- }
-}
diff --git a/java/src/com/android/inputmethod/deprecated/voice/Whitelist.java b/java/src/com/android/inputmethod/deprecated/voice/Whitelist.java
deleted file mode 100644
index 6c5f52ae2..000000000
--- a/java/src/com/android/inputmethod/deprecated/voice/Whitelist.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2009 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.deprecated.voice;
-
-import android.os.Bundle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A set of text fields where speech has been explicitly enabled.
- */
-public class Whitelist {
- private List<Bundle> mConditions;
-
- public Whitelist() {
- mConditions = new ArrayList<Bundle>();
- }
-
- public Whitelist(List<Bundle> conditions) {
- this.mConditions = conditions;
- }
-
- public void addApp(String app) {
- Bundle bundle = new Bundle();
- bundle.putString("packageName", app);
- mConditions.add(bundle);
- }
-
- /**
- * @return true if the field is a member of the whitelist.
- */
- public boolean matches(FieldContext context) {
- for (Bundle condition : mConditions) {
- if (matches(condition, context.getBundle())) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return true of all values in condition are matched by a value
- * in target.
- */
- private boolean matches(Bundle condition, Bundle target) {
- for (String key : condition.keySet()) {
- if (!condition.getString(key).equals(target.getString(key))) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
index 1bf2fc04e..f0c773ff4 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
@@ -98,6 +98,7 @@ public class KeyboardSet {
int mMode;
EditorInfo mEditorInfo;
boolean mTouchPositionCorrectionEnabled;
+ boolean mDisableShortcutKey;
boolean mVoiceKeyEnabled;
boolean mVoiceKeyOnMain;
boolean mNoSettingsKey;
@@ -200,11 +201,11 @@ public class KeyboardSet {
final Params params = mParams;
final boolean isSymbols = (keyboardSetElementId == KeyboardId.ELEMENT_SYMBOLS
|| keyboardSetElementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED);
- final boolean hasShortcutKey = params.mVoiceKeyEnabled
- && (isSymbols != params.mVoiceKeyOnMain);
+ final boolean voiceKeyEnabled = params.mVoiceKeyEnabled && !params.mDisableShortcutKey;
+ final boolean hasShortcutKey = voiceKeyEnabled && (isSymbols != params.mVoiceKeyOnMain);
return new KeyboardId(keyboardSetElementId, params.mLocale, params.mOrientation,
params.mWidth, params.mMode, params.mEditorInfo, params.mNoSettingsKey,
- params.mVoiceKeyEnabled, hasShortcutKey, params.mLanguageSwitchKeyEnabled);
+ voiceKeyEnabled, hasShortcutKey, params.mLanguageSwitchKeyEnabled);
}
public static class Builder {
@@ -293,6 +294,11 @@ public class KeyboardSet {
if (event == XmlPullParser.START_TAG) {
final String tag = parser.getName();
if (TAG_KEYBOARD_SET.equals(tag)) {
+ final TypedArray a = mResources.obtainAttributes(
+ Xml.asAttributeSet(parser), R.styleable.KeyboardSet);
+ mParams.mDisableShortcutKey = a.getBoolean(
+ R.styleable.KeyboardSet_disableShortcutKey, false);
+ a.recycle();
parseKeyboardSetContent(parser);
} else {
throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET);
@@ -390,30 +396,4 @@ public class KeyboardSet {
}
}
}
-
- // TODO: Should be removed. This is no longer required if {@link InputMethodSubtype} is
- // supported.
- public static String parseKeyboardLocale(Resources res, int resId)
- throws XmlPullParserException, IOException {
- final XmlPullParser parser = res.getXml(resId);
- if (parser == null)
- return "";
- int event;
- while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
- if (event == XmlPullParser.START_TAG) {
- final String tag = parser.getName();
- if (TAG_KEYBOARD_SET.equals(tag)) {
- final TypedArray keyboardSetAttr = res.obtainAttributes(
- Xml.asAttributeSet(parser), R.styleable.KeyboardSet);
- final String locale = keyboardSetAttr.getString(
- R.styleable.KeyboardSet_keyboardLocale);
- keyboardSetAttr.recycle();
- return locale;
- } else {
- throw new XmlParseUtils.IllegalStartTag(parser, TAG_KEYBOARD_SET);
- }
- }
- }
- return "";
- }
}
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 7194cced3..62bcf6ca8 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -39,7 +39,6 @@ import android.widget.PopupWindow;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
-import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
@@ -828,12 +827,6 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
}
}
- @Override
- protected void onAttachedToWindow() {
- // Token is available from here.
- VoiceProxy.getInstance().onAttachedToWindow();
- }
-
/**
* Receives hover events from the input framework. This method overrides
* View.dispatchHoverEvent(MotionEvent) on SDK version ICS or higher. On
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index 5c1808613..6b59a8dae 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -213,6 +213,31 @@ public class ProximityInfo {
touchPositionCorrection);
}
+ public void fillArrayWithNearestKeyCodes(int x, int y, int primaryKeyCode, int[] dest) {
+ final int destLength = dest.length;
+ if (destLength < 1) {
+ return;
+ }
+ int index = 0;
+ if (primaryKeyCode > Keyboard.CODE_SPACE) {
+ dest[index++] = primaryKeyCode;
+ }
+ final Key[] nearestKeys = getNearestKeys(x, y);
+ for (Key key : nearestKeys) {
+ if (index >= destLength) {
+ break;
+ }
+ final int code = key.mCode;
+ if (code <= Keyboard.CODE_SPACE) {
+ break;
+ }
+ dest[index++] = code;
+ }
+ if (index < destLength) {
+ dest[index] = KeyDetector.NOT_A_CODE;
+ }
+ }
+
public Key[] getNearestKeys(int x, int y) {
if (mGridNeighbors == null) {
return EMPTY_KEY_ARRAY;
diff --git a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java
index 9c5ccc76b..55664d411 100644
--- a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java
+++ b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java
@@ -21,8 +21,8 @@ import android.media.AudioManager;
import android.view.HapticFeedbackConstants;
import android.view.View;
-import com.android.inputmethod.compat.VibratorCompatWrapper;
import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.VibratorUtils;
/**
* This class gathers audio feedback and haptic feedback functions.
@@ -33,13 +33,13 @@ import com.android.inputmethod.keyboard.Keyboard;
public class AudioAndHapticFeedbackManager {
final private SettingsValues mSettingsValues;
final private AudioManager mAudioManager;
- final private VibratorCompatWrapper mVibrator;
+ final private VibratorUtils mVibratorUtils;
private boolean mSoundOn;
public AudioAndHapticFeedbackManager(final LatinIME latinIme,
final SettingsValues settingsValues) {
mSettingsValues = settingsValues;
- mVibrator = VibratorCompatWrapper.getInstance(latinIme);
+ mVibratorUtils = VibratorUtils.getInstance(latinIme);
mAudioManager = (AudioManager) latinIme.getSystemService(Context.AUDIO_SERVICE);
mSoundOn = reevaluateIfSoundIsOn();
}
@@ -93,8 +93,8 @@ public class AudioAndHapticFeedbackManager {
HapticFeedbackConstants.KEYBOARD_TAP,
HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
}
- } else if (mVibrator != null) {
- mVibrator.vibrate(mSettingsValues.mKeypressVibrationDuration);
+ } else if (mVibratorUtils != null) {
+ mVibratorUtils.vibrate(mSettingsValues.mKeypressVibrationDuration);
}
}
diff --git a/java/src/com/android/inputmethod/latin/AutoCorrection.java b/java/src/com/android/inputmethod/latin/AutoCorrection.java
index ef88f9906..38444a10c 100644
--- a/java/src/com/android/inputmethod/latin/AutoCorrection.java
+++ b/java/src/com/android/inputmethod/latin/AutoCorrection.java
@@ -16,6 +16,8 @@
package com.android.inputmethod.latin;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+
import android.text.TextUtils;
import android.util.Log;
@@ -30,8 +32,9 @@ public class AutoCorrection {
// Purely static class: can't instantiate.
}
- public static CharSequence computeAutoCorrectionWord(HashMap<String, Dictionary> dictionaries,
- WordComposer wordComposer, ArrayList<CharSequence> suggestions, int[] sortedScores,
+ public static CharSequence computeAutoCorrectionWord(
+ HashMap<String, Dictionary> dictionaries,
+ WordComposer wordComposer, ArrayList<SuggestedWordInfo> suggestions,
CharSequence consideredWord, double autoCorrectionThreshold,
CharSequence whitelistedWord) {
if (hasAutoCorrectionForWhitelistedWord(whitelistedWord)) {
@@ -40,8 +43,8 @@ public class AutoCorrection {
dictionaries, wordComposer, suggestions, consideredWord)) {
return consideredWord;
} else if (hasAutoCorrectionForBinaryDictionary(wordComposer, suggestions,
- sortedScores, consideredWord, autoCorrectionThreshold)) {
- return suggestions.get(0);
+ consideredWord, autoCorrectionThreshold)) {
+ return suggestions.get(0).mWord;
}
return null;
}
@@ -89,22 +92,23 @@ public class AutoCorrection {
private static boolean hasAutoCorrectionForConsideredWord(
HashMap<String, Dictionary> dictionaries, WordComposer wordComposer,
- ArrayList<CharSequence> suggestions, CharSequence consideredWord) {
+ ArrayList<SuggestedWordInfo> suggestions, CharSequence consideredWord) {
if (TextUtils.isEmpty(consideredWord)) return false;
return wordComposer.size() > 1 && suggestions.size() > 0
&& !allowsToBeAutoCorrected(dictionaries, consideredWord, false);
}
private static boolean hasAutoCorrectionForBinaryDictionary(WordComposer wordComposer,
- ArrayList<CharSequence> suggestions, int[] sortedScores,
+ ArrayList<SuggestedWordInfo> suggestions,
CharSequence consideredWord, double autoCorrectionThreshold) {
- if (wordComposer.size() > 1 && suggestions.size() > 0 && sortedScores.length > 0) {
- final CharSequence autoCorrectionSuggestion = suggestions.get(0);
- final int autoCorrectionSuggestionScore = sortedScores[0];
+ if (wordComposer.size() > 1 && suggestions.size() > 0) {
+ final SuggestedWordInfo autoCorrectionSuggestion = suggestions.get(0);
+ //final int autoCorrectionSuggestionScore = sortedScores[0];
+ final int autoCorrectionSuggestionScore = autoCorrectionSuggestion.mScore;
// TODO: when the normalized score of the first suggestion is nearly equals to
// the normalized score of the second suggestion, behave less aggressive.
final double normalizedScore = BinaryDictionary.calcNormalizedScore(
- consideredWord.toString(), autoCorrectionSuggestion.toString(),
+ consideredWord.toString(), autoCorrectionSuggestion.mWord.toString(),
autoCorrectionSuggestionScore);
if (DBG) {
Log.d(TAG, "Normalized " + consideredWord + "," + autoCorrectionSuggestion + ","
diff --git a/java/src/com/android/inputmethod/latin/EditingUtils.java b/java/src/com/android/inputmethod/latin/EditingUtils.java
index 1e8ad1840..b3f613bae 100644
--- a/java/src/com/android/inputmethod/latin/EditingUtils.java
+++ b/java/src/com/android/inputmethod/latin/EditingUtils.java
@@ -1,12 +1,12 @@
/*
* Copyright (C) 2009 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
@@ -16,8 +16,6 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.compat.InputConnectionCompatUtils;
-
import android.text.TextUtils;
import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
@@ -246,7 +244,7 @@ public class EditingUtils {
if (selStart == selEnd) {
// There is just a cursor, so get the word at the cursor
// getWordRangeAtCursor returns null if the connection is null
- EditingUtils.Range range = getWordRangeAtCursor(ic, wordSeparators);
+ final EditingUtils.Range range = getWordRangeAtCursor(ic, wordSeparators);
if (range != null && !TextUtils.isEmpty(range.mWord)) {
return new SelectedWord(selStart - range.mCharsBefore, selEnd + range.mCharsAfter,
range.mWord);
@@ -254,20 +252,19 @@ public class EditingUtils {
} else {
if (null == ic) return null;
// Is the previous character empty or a word separator? If not, return null.
- CharSequence charsBefore = ic.getTextBeforeCursor(1, 0);
+ final CharSequence charsBefore = ic.getTextBeforeCursor(1, 0);
if (!isWordBoundary(charsBefore, wordSeparators)) {
return null;
}
// Is the next character empty or a word separator? If not, return null.
- CharSequence charsAfter = ic.getTextAfterCursor(1, 0);
+ final CharSequence charsAfter = ic.getTextAfterCursor(1, 0);
if (!isWordBoundary(charsAfter, wordSeparators)) {
return null;
}
// Extract the selection alone
- CharSequence touching = InputConnectionCompatUtils.getSelectedText(
- ic, selStart, selEnd);
+ final CharSequence touching = ic.getSelectedText(0);
if (TextUtils.isEmpty(touching)) return null;
// Is any part of the selection a separator? If so, return null.
final int length = touching.length();
diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 098913bef..46d11fa37 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.content.Context;
+import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.ProximityInfo;
@@ -209,13 +210,19 @@ public class ExpandableDictionary extends Dictionary {
@SuppressWarnings("unused") final ProximityInfo proximityInfo) {
mInputLength = codes.size();
if (mCodes.length < mInputLength) mCodes = new int[mInputLength][];
+ final int[] xCoordinates = codes.getXCoordinates();
+ final int[] yCoordinates = codes.getYCoordinates();
// Cache the codes so that we don't have to lookup an array list
for (int i = 0; i < mInputLength; i++) {
// TODO: Calculate proximity info here.
if (mCodes[i] == null || mCodes[i].length < 1) {
- mCodes[i] = new int[1];
+ mCodes[i] = new int[ProximityInfo.MAX_PROXIMITY_CHARS_SIZE];
}
- mCodes[i][0] = codes.getCodeAt(i);
+ final int x = xCoordinates != null && i < xCoordinates.length ?
+ xCoordinates[i] : WordComposer.NOT_A_COORDINATE;
+ final int y = xCoordinates != null && i < yCoordinates.length ?
+ yCoordinates[i] : WordComposer.NOT_A_COORDINATE;
+ proximityInfo.fillArrayWithNearestKeyCodes(x, y, codes.getCodeAt(i), mCodes[i]);
}
mMaxDepth = mInputLength * 3;
getWordsRec(mRoots, codes, mWordBuilder, 0, false, 1, 0, -1, callback);
@@ -328,7 +335,7 @@ public class ExpandableDictionary extends Dictionary {
for (int j = 0; j < alternativesSize; j++) {
final int addedAttenuation = (j > 0 ? 1 : 2);
final int currentChar = currentChars[j];
- if (currentChar == -1) {
+ if (currentChar == KeyDetector.NOT_A_CODE) {
break;
}
if (currentChar == lowerC || currentChar == c) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index e6094d9e1..69780d0fd 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -46,22 +46,18 @@ import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
import android.view.inputmethod.CompletionInfo;
+import android.view.inputmethod.CorrectionInfo;
import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.InputConnection;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.accessibility.AccessibleKeyboardViewProxy;
import com.android.inputmethod.compat.CompatUtils;
import com.android.inputmethod.compat.EditorInfoCompatUtils;
-import com.android.inputmethod.compat.InputConnectionCompatUtils;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
-import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.compat.SuggestionSpanUtils;
-import com.android.inputmethod.deprecated.LanguageSwitcherProxy;
-import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.KeyboardId;
@@ -193,7 +189,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private SharedPreferences mPrefs;
/* package for tests */ final KeyboardSwitcher mKeyboardSwitcher;
private final SubtypeSwitcher mSubtypeSwitcher;
- private VoiceProxy mVoiceProxy;
private boolean mShouldSwitchToLastSubtype = true;
private UserDictionary mUserDictionary;
@@ -234,7 +229,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public static class UIHandler extends StaticInnerHandlerWrapper<LatinIME> {
private static final int MSG_UPDATE_SHIFT_STATE = 1;
- private static final int MSG_VOICE_RESULTS = 2;
private static final int MSG_SPACE_TYPED = 4;
private static final int MSG_SET_BIGRAM_PREDICTIONS = 5;
private static final int MSG_PENDING_IMS_CALLBACK = 6;
@@ -272,11 +266,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
case MSG_SET_BIGRAM_PREDICTIONS:
latinIme.updateBigramPredictions();
break;
- case MSG_VOICE_RESULTS:
- final Keyboard keyboard = switcher.getKeyboard();
- latinIme.mVoiceProxy.handleVoiceResults(latinIme.preferCapitalization()
- || (keyboard != null && keyboard.isShiftedOrShiftLocked()));
- break;
}
}
@@ -311,10 +300,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
removeMessages(MSG_SET_BIGRAM_PREDICTIONS);
}
- public void updateVoiceResults() {
- sendMessage(obtainMessage(MSG_VOICE_RESULTS));
- }
-
public void startDoubleSpacesTimer() {
removeMessages(MSG_SPACE_TYPED);
sendMessageDelayed(obtainMessage(MSG_SPACE_TYPED), mDoubleSpacesTurnIntoPeriodTimeout);
@@ -436,7 +421,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (ProductionFlag.IS_EXPERIMENTAL) {
ResearchLogger.init(this, prefs);
}
- LanguageSwitcherProxy.init(this, prefs);
InputMethodManagerCompatWrapper.init(this);
SubtypeSwitcher.init(this);
KeyboardSwitcher.init(this, prefs);
@@ -476,7 +460,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
registerReceiver(mReceiver, filter);
- mVoiceProxy = VoiceProxy.init(this, prefs, mHandler);
final IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
@@ -577,7 +560,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
unregisterReceiver(mReceiver);
unregisterReceiver(mDictionaryPackInstallReceiver);
- mVoiceProxy.destroy();
LatinImeLogger.commit();
LatinImeLogger.onDestroy();
super.onDestroy();
@@ -596,14 +578,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (isShowingOptionDialog())
mOptionsDialog.dismiss();
}
-
- mVoiceProxy.startChangingConfiguration();
super.onConfigurationChanged(conf);
- mVoiceProxy.onConfigurationChanged(conf);
- mVoiceProxy.finishChangingConfiguration();
-
- // This will work only when the subtype is not supported.
- LanguageSwitcherProxy.onConfigurationChanged(conf);
}
@Override
@@ -698,13 +673,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mSubtypeSwitcher.updateParametersOnStartInputView();
- // Most such things we decide below in initializeInputAttributesAndGetMode, but we need to
- // know now whether this is a password text field, because we need to know now whether we
- // want to enable the voice button.
- final int inputType = editorInfo.inputType;
- mVoiceProxy.resetVoiceStates(InputTypeCompatUtils.isPasswordInputType(inputType)
- || InputTypeCompatUtils.isVisiblePasswordInputType(inputType));
-
// The EditorInfo might have a flag that affects fullscreen mode.
// Note: This call should be done by InputMethodService?
updateFullscreenMode();
@@ -726,9 +694,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (mSuggest != null && mSettingsValues.mAutoCorrectEnabled) {
mSuggest.setAutoCorrectionThreshold(mSettingsValues.mAutoCorrectionThreshold);
}
- mVoiceProxy.loadSettings(editorInfo, mPrefs);
- // This will work only when the subtype is not supported.
- LanguageSwitcherProxy.loadSettings();
if (mSubtypeSwitcher.isKeyboardMode()) {
switcher.loadKeyboard(editorInfo, mSettingsValues);
@@ -746,8 +711,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mSettingsValues.mKeyPreviewPopupDismissDelay);
inputView.setProximityCorrectionEnabled(true);
- mVoiceProxy.onStartInputView(inputView.getWindowToken());
-
if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
}
@@ -763,8 +726,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
LatinImeLogger.commit();
- mVoiceProxy.flushVoiceInputLogs();
-
KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
if (inputView != null) inputView.closing();
if (mUserHistoryDictionary != null) mUserHistoryDictionary.flushPendingWrites();
@@ -780,18 +741,25 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
@Override
- public void onUpdateExtractedText(int token, ExtractedText text) {
- super.onUpdateExtractedText(token, text);
- mVoiceProxy.showPunctuationHintIfNecessary();
- }
-
- @Override
public void onUpdateSelection(int oldSelStart, int oldSelEnd,
int newSelStart, int newSelEnd,
int composingSpanStart, int composingSpanEnd) {
super.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd,
composingSpanStart, composingSpanEnd);
+ if (ProductionFlag.IS_EXPERIMENTAL) {
+ if (ResearchLogger.UnsLogGroup.ON_UPDATE_SELECTION.isEnabled) {
+ final String s = "onUpdateSelection: oss=" + oldSelStart
+ + ", ose=" + oldSelEnd
+ + ", lss=" + mLastSelectionStart
+ + ", lse=" + mLastSelectionEnd
+ + ", nss=" + newSelStart
+ + ", nse=" + newSelEnd
+ + ", cs=" + composingSpanStart
+ + ", ce=" + composingSpanEnd;
+ ResearchLogger.logUnstructured(ResearchLogger.UnsLogGroup.ON_UPDATE_SELECTION, s);
+ }
+ }
if (DEBUG) {
Log.i(TAG, "onUpdateSelection: oss=" + oldSelStart
+ ", ose=" + oldSelEnd
@@ -803,8 +771,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
+ ", ce=" + composingSpanEnd);
}
- mVoiceProxy.setCursorAndSelection(newSelEnd, newSelStart);
-
// TODO: refactor the following code to be less contrived.
// "newSelStart != composingSpanEnd" || "newSelEnd != composingSpanEnd" means
// that the cursor is not at the end of the composing span, or there is a selection.
@@ -892,7 +858,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mOptionsDialog.dismiss();
mOptionsDialog = null;
}
- mVoiceProxy.hideVoiceWindow();
super.hideWindow();
}
@@ -1081,7 +1046,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (ic != null) {
ic.finishComposingText();
}
- mVoiceProxy.setVoiceInputHighlighted(false);
}
private void resetComposingState(final boolean alsoResetLastComposedWord) {
@@ -1171,14 +1135,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private void onSettingsKeyPressed() {
if (isShowingOptionDialog()) return;
- if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) {
- showSubtypeSelectorAndSettings();
- } else if (SubtypeUtils.hasMultipleEnabledIMEsOrSubtypes(
- false /* exclude aux subtypes */)) {
- showOptionsMenu();
- } else {
- launchSettings();
- }
+ showSubtypeSelectorAndSettings();
}
// Virtual codes representing custom requests. These are used in onCustomRequest() below.
@@ -1338,7 +1295,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override
public void onTextInput(CharSequence text) {
- mVoiceProxy.commitVoiceInput();
final InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
ic.beginBatchEdit();
@@ -1383,7 +1339,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
private void handleBackspace(final int spaceState) {
- if (mVoiceProxy.logAndRevertVoiceInput()) return;
final InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
ic.beginBatchEdit();
@@ -1393,8 +1348,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// "ic" may not be null.
private void handleBackspaceWhileInBatchEdit(final int spaceState, final InputConnection ic) {
- mVoiceProxy.handleBackspace();
-
// In many cases, we may have to put the keyboard in auto-shift state again.
mHandler.postUpdateShiftState();
@@ -1493,7 +1446,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private void handleCharacter(final int primaryCode, final int x,
final int y, final int spaceState) {
- mVoiceProxy.handleCharacter();
final InputConnection ic = getCurrentInputConnection();
if (null != ic) ic.beginBatchEdit();
// TODO: if ic is null, does it make any sense to call this?
@@ -1569,8 +1521,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// Returns true if we did an autocorrection, false otherwise.
private boolean handleSeparator(final int primaryCode, final int x, final int y,
final int spaceState) {
- mVoiceProxy.handleSeparator();
-
// Should dismiss the "Touch again to save" message when handling separator
if (mSuggestionsView != null && mSuggestionsView.dismissAddToDictionaryHint()) {
mHandler.cancelUpdateBigramPredictions();
@@ -1656,7 +1606,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
private void handleClose() {
commitTyped(getCurrentInputConnection(), LastComposedWord.NOT_A_SEPARATOR);
- mVoiceProxy.handleClose();
requestHideSelf(0);
LatinKeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
if (inputView != null)
@@ -1736,8 +1685,7 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
public void updateSuggestions() {
// Check if we have a suggestion engine attached.
- if ((mSuggest == null || !isSuggestionsRequested())
- && !mVoiceProxy.isVoiceInputHighlighted()) {
+ if ((mSuggest == null || !isSuggestionsRequested())) {
if (mWordComposer.isComposingWord()) {
Log.w(TAG, "Called updateSuggestions but suggestions were not requested!");
mWordComposer.setAutoCorrection(mWordComposer.getTypedWord());
@@ -1837,8 +1785,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (!typedWord.equals(autoCorrection) && null != ic) {
// This will make the correction flash for a short while as a visual clue
// to the user that auto-correction happened.
- InputConnectionCompatUtils.commitCorrection(ic,
- mLastSelectionEnd - typedWord.length(), typedWord, autoCorrection);
+ ic.commitCorrection(new CorrectionInfo(mLastSelectionEnd - typedWord.length(),
+ typedWord, autoCorrection));
}
}
}
@@ -1846,8 +1794,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
@Override
public void pickSuggestionManually(final int index, final CharSequence suggestion) {
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
- mVoiceProxy.flushAndLogAllTextModificationCounters(index, suggestion,
- mSettingsValues.mWordSeparators);
if (SPACE_STATE_PHANTOM == mSpaceState && suggestion.length() > 0) {
int firstChar = Character.codePointAt(suggestion, 0);
@@ -1940,7 +1886,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
final int separatorCode) {
final InputConnection ic = getCurrentInputConnection();
if (ic != null) {
- mVoiceProxy.rememberReplacedWord(bestWord, mSettingsValues.mWordSeparators);
if (mSettingsValues.mEnableSuggestionSpanInsertion) {
final SuggestedWords suggestedWords = mSuggestionsView.getSuggestions();
ic.commitText(SuggestionSpanUtils.getTextWithSuggestionSpan(
@@ -2193,11 +2138,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
// Notify that language or mode have been changed and toggleLanguage will update KeyboardID
// according to new language or mode.
public void onRefreshKeyboard() {
- if (!CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) {
- // Before Honeycomb, Voice IME is in LatinIME and it changes the current input view,
- // so that we need to re-create the keyboard input view here.
- setInputView(mKeyboardSwitcher.onCreateInputView());
- }
// When the device locale is changed in SetupWizard etc., this method may get called via
// onConfigurationChanged before SoftInputWindow is shown.
if (mKeyboardSwitcher.getKeyboardView() != null) {
@@ -2256,11 +2196,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
}
};
- // TODO: remove this method when VoiceProxy has been removed
- public void vibrate() {
- mFeedbackManager.vibrate(mKeyboardSwitcher.getKeyboardView());
- }
-
private void updateCorrectionMode() {
// TODO: cleanup messy flags
final boolean shouldAutoCorrect = mSettingsValues.mAutoCorrectEnabled
@@ -2328,32 +2263,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
showOptionDialogInternal(builder.create());
}
- private void showOptionsMenu() {
- final CharSequence title = getString(R.string.english_ime_input_options);
- final CharSequence[] items = new CharSequence[] {
- getString(R.string.selectInputMethod),
- getString(R.string.english_ime_settings),
- };
- final DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface di, int position) {
- di.dismiss();
- switch (position) {
- case 0:
- mImm.showInputMethodPicker();
- break;
- case 1:
- launchSettings();
- break;
- }
- }
- };
- final AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setItems(items, listener)
- .setTitle(title);
- showOptionDialogInternal(builder.create());
- }
-
@Override
protected void dump(FileDescriptor fd, PrintWriter fout, String[] args) {
super.dump(fd, fout, args);
diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java
index 570333cb7..c5fb61f78 100644
--- a/java/src/com/android/inputmethod/latin/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java
@@ -259,20 +259,33 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
write(LogGroup.STATE_CHANGE, subgroup + "\t" + details);
}
+ public static enum UnsLogGroup {
+ // TODO: expand to include one flag per log point
+ // TODO: support selective enabling of flags
+ ON_UPDATE_SELECTION;
+
+ public boolean isEnabled = true;
+ }
+
+ public static void logUnstructured(UnsLogGroup logGroup, String details) {
+ }
+
private void write(final LogGroup logGroup, final String log) {
+ // TODO: rewrite in native for better performance
mLoggingHandler.post(new Runnable() {
@Override
public void run() {
final long currentTime = System.currentTimeMillis();
- mDate.setTime(currentTime);
final long upTime = SystemClock.uptimeMillis();
-
- final String printString = String.format("%s\t%d\t%s\t%s\n",
- mDateFormat.format(mDate), upTime, logGroup.mLogString, log);
+ final StringBuilder builder = new StringBuilder();
+ builder.append(currentTime);
+ builder.append('\t'); builder.append(upTime);
+ builder.append('\t'); builder.append(logGroup.mLogString);
+ builder.append('\t'); builder.append(log);
if (LatinImeLogger.sDBG) {
Log.d(TAG, "Write: " + '[' + logGroup.mLogString + ']' + log);
}
- if (mLogFileManager.append(printString)) {
+ if (mLogFileManager.append(builder.toString())) {
// success
} else {
if (LatinImeLogger.sDBG) {
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 110264892..fd61292df 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -44,16 +44,14 @@ import android.widget.TextView;
import com.android.inputmethod.compat.CompatUtils;
import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
-import com.android.inputmethod.compat.VibratorCompatWrapper;
-import com.android.inputmethod.deprecated.VoiceProxy;
+import com.android.inputmethod.latin.VibratorUtils;
import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethodcommon.InputMethodSettingsActivity;
import java.util.Locale;
public class Settings extends InputMethodSettingsActivity
- implements SharedPreferences.OnSharedPreferenceChangeListener,
- DialogInterface.OnDismissListener, OnPreferenceClickListener {
+ implements SharedPreferences.OnSharedPreferenceChangeListener, OnPreferenceClickListener {
private static final String TAG = Settings.class.getSimpleName();
public static final boolean ENABLE_EXPERIMENTAL_SETTINGS = false;
@@ -92,9 +90,6 @@ public class Settings extends InputMethodSettingsActivity
public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
public static final String PREF_DEBUG_SETTINGS = "debug_settings";
- // Dialog ids
- private static final int VOICE_INPUT_CONFIRM_DIALOG = 0;
-
private PreferenceScreen mInputLanguageSelection;
private PreferenceScreen mKeypressVibrationDurationSettingsPref;
private PreferenceScreen mKeypressSoundVolumeSettingsPref;
@@ -113,7 +108,6 @@ public class Settings extends InputMethodSettingsActivity
private TextView mKeypressVibrationDurationSettingsTextView;
private TextView mKeypressSoundVolumeSettingsTextView;
- private boolean mOkClicked = false;
private String mVoiceModeOff;
private void ensureConsistencyOfAutoCorrectionSettings() {
@@ -185,7 +179,7 @@ public class Settings extends InputMethodSettingsActivity
generalSettings.removePreference(mVoicePreference);
}
- if (!VibratorCompatWrapper.getInstance(context).hasVibrator()) {
+ if (!VibratorUtils.getInstance(context).hasVibrator()) {
generalSettings.removePreference(findPreference(PREF_VIBRATE_ON));
}
@@ -291,9 +285,7 @@ public class Settings extends InputMethodSettingsActivity
public void onResume() {
super.onResume();
final boolean isShortcutImeEnabled = SubtypeSwitcher.getInstance().isShortcutImeEnabled();
- if (isShortcutImeEnabled
- || (VoiceProxy.VOICE_INSTALLED
- && VoiceProxy.isRecognitionAvailable(getActivityInternal()))) {
+ if (isShortcutImeEnabled) {
updateVoiceModeSummary();
} else {
getPreferenceScreen().removePreference(mVoicePreference);
@@ -312,13 +304,7 @@ public class Settings extends InputMethodSettingsActivity
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
(new BackupManager(getActivityInternal())).dataChanged();
- // If turning on voice input, show dialog
- if (key.equals(PREF_VOICE_MODE) && !mVoiceOn) {
- if (!prefs.getString(PREF_VOICE_MODE, mVoiceModeOff)
- .equals(mVoiceModeOff)) {
- showVoiceConfirmation();
- }
- } else if (key.equals(PREF_POPUP_ON)) {
+ if (key.equals(PREF_POPUP_ON)) {
final ListPreference popupDismissDelay =
(ListPreference)findPreference(PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY);
if (null != popupDismissDelay) {
@@ -363,84 +349,16 @@ public class Settings extends InputMethodSettingsActivity
lp.setSummary(lp.getEntries()[lp.findIndexOfValue(lp.getValue())]);
}
- private void showVoiceConfirmation() {
- mOkClicked = false;
- getActivityInternal().showDialog(VOICE_INPUT_CONFIRM_DIALOG);
- // Make URL in the dialog message clickable
- if (mDialog != null) {
- TextView textView = (TextView) mDialog.findViewById(android.R.id.message);
- if (textView != null) {
- textView.setMovementMethod(LinkMovementMethod.getInstance());
- }
- }
- }
-
private void updateVoiceModeSummary() {
mVoicePreference.setSummary(
getResources().getStringArray(R.array.voice_input_modes_summary)
[mVoicePreference.findIndexOfValue(mVoicePreference.getValue())]);
}
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case VOICE_INPUT_CONFIRM_DIALOG:
- DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- if (whichButton == DialogInterface.BUTTON_NEGATIVE) {
- mVoicePreference.setValue(mVoiceModeOff);
- } else if (whichButton == DialogInterface.BUTTON_POSITIVE) {
- mOkClicked = true;
- }
- }
- };
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivityInternal())
- .setTitle(R.string.voice_warning_title)
- .setPositiveButton(android.R.string.ok, listener)
- .setNegativeButton(android.R.string.cancel, listener);
-
- // Get the current list of supported locales and check the current locale against
- // that list, to decide whether to put a warning that voice input will not work in
- // the current language as part of the pop-up confirmation dialog.
- boolean localeSupported = SubtypeSwitcher.isVoiceSupported(
- this, Locale.getDefault().toString());
-
- final CharSequence message;
- if (localeSupported) {
- message = TextUtils.concat(
- getText(R.string.voice_warning_may_not_understand), "\n\n",
- getText(R.string.voice_hint_dialog_message));
- } else {
- message = TextUtils.concat(
- getText(R.string.voice_warning_locale_not_supported), "\n\n",
- getText(R.string.voice_warning_may_not_understand), "\n\n",
- getText(R.string.voice_hint_dialog_message));
- }
- builder.setMessage(message);
- AlertDialog dialog = builder.create();
- mDialog = dialog;
- dialog.setOnDismissListener(this);
- return dialog;
- default:
- Log.e(TAG, "unknown dialog " + id);
- return null;
- }
- }
-
- @Override
- public void onDismiss(DialogInterface dialog) {
- if (!mOkClicked) {
- // This assumes that onPreferenceClick gets called first, and this if the user
- // agreed after the warning, we set the mOkClicked value to true.
- mVoicePreference.setValue(mVoiceModeOff);
- }
- }
-
private void refreshEnablingsOfKeypressSoundAndVibrationSettings(
SharedPreferences sp, Resources res) {
if (mKeypressVibrationDurationSettingsPref != null) {
- final boolean hasVibrator = VibratorCompatWrapper.getInstance(this).hasVibrator();
+ final boolean hasVibrator = VibratorUtils.getInstance(this).hasVibrator();
final boolean vibrateOn = hasVibrator && sp.getBoolean(Settings.PREF_VIBRATE_ON,
res.getBoolean(R.bool.config_default_vibration_enabled));
mKeypressVibrationDurationSettingsPref.setEnabled(vibrateOn);
@@ -503,7 +421,7 @@ public class Settings extends InputMethodSettingsActivity
@Override
public void onStopTrackingTouch(SeekBar arg0) {
final int tempMs = arg0.getProgress();
- VibratorCompatWrapper.getInstance(context).vibrate(tempMs);
+ VibratorUtils.getInstance(context).vibrate(tempMs);
}
});
sb.setProgress(currentMs);
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index c1335fdfe..f76cc7e44 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -23,8 +23,9 @@ import android.util.Log;
import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.compat.InputTypeCompatUtils;
-import com.android.inputmethod.compat.VibratorCompatWrapper;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.VibratorUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -162,7 +163,7 @@ public class SettingsValues {
if (puncs != null) {
for (final String puncSpec : puncs) {
puncList.add(new SuggestedWords.SuggestedWordInfo(
- KeySpecParser.getLabel(puncSpec)));
+ KeySpecParser.getLabel(puncSpec), SuggestedWordInfo.MAX_SCORE));
}
}
return new SuggestedWords(puncList,
@@ -187,7 +188,7 @@ public class SettingsValues {
private static boolean isVibrateOn(final Context context, final SharedPreferences prefs,
final Resources res) {
- final boolean hasVibrator = VibratorCompatWrapper.getInstance(context).hasVibrator();
+ final boolean hasVibrator = VibratorUtils.getInstance(context).hasVibrator();
return hasVibrator && prefs.getBoolean(Settings.PREF_VIBRATE_ON,
res.getBoolean(R.bool.config_default_vibration_enabled));
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeLocale.java b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
index 917521c40..66c13bd2e 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeLocale.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeLocale.java
@@ -36,10 +36,16 @@ public class SubtypeLocale {
}
public static String getFullDisplayName(Locale locale) {
- String localeCode = locale.toString();
+ final String localeCode = locale.toString();
for (int index = 0; index < sExceptionKeys.length; index++) {
- if (sExceptionKeys[index].equals(localeCode))
- return sExceptionValues[index];
+ if (sExceptionKeys[index].equals(localeCode)) {
+ final String value = sExceptionValues[index];
+ if (value.indexOf("%s") >= 0) {
+ final String languageName = locale.getDisplayLanguage(locale);
+ return String.format(value, languageName);
+ }
+ return value;
+ }
}
return locale.getDisplayName(locale);
}
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index 3524c72f6..de2e8be3d 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -33,7 +33,6 @@ import android.util.Log;
import com.android.inputmethod.compat.InputMethodInfoCompatWrapper;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.compat.InputMethodSubtypeCompatWrapper;
-import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import java.util.ArrayList;
@@ -76,7 +75,6 @@ public class SubtypeSwitcher {
private Locale mSystemLocale;
private Locale mInputLocale;
private String mInputLocaleStr;
- private VoiceProxy.VoiceInputWrapper mVoiceInputWrapper;
/*-----------------------------------------------------------*/
private boolean mIsNetworkConnected;
@@ -108,7 +106,6 @@ public class SubtypeSwitcher {
mInputLocaleStr = null;
mCurrentSubtype = null;
mAllEnabledSubtypesOfCurrentInputMethod = null;
- mVoiceInputWrapper = null;
final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
mIsNetworkConnected = (info != null && info.isConnected());
@@ -234,34 +231,12 @@ public class SubtypeSwitcher {
}
mCurrentSubtype = newSubtype;
- // If the old mode is voice input, we need to reset or cancel its status.
- // We cancel its status when we change mode, while we reset otherwise.
if (isKeyboardMode()) {
- if (modeChanged) {
- if (VOICE_MODE.equals(oldMode) && mVoiceInputWrapper != null) {
- mVoiceInputWrapper.cancel();
- }
- }
if (modeChanged || languageChanged) {
updateShortcutIME();
mService.onRefreshKeyboard();
}
- } else if (isVoiceMode() && mVoiceInputWrapper != null) {
- if (VOICE_MODE.equals(oldMode)) {
- mVoiceInputWrapper.reset();
- }
- // If needsToShowWarningDialog is true, voice input need to show warning before
- // show recognition view.
- if (languageChanged || modeChanged
- || VoiceProxy.getInstance().needsToShowWarningDialog()) {
- triggerVoiceIME();
- }
} else {
- if (VOICE_MODE.equals(oldMode) && mVoiceInputWrapper != null) {
- // We need to reset the voice input to release the resources and to reset its status
- // as it is not the current input mode.
- mVoiceInputWrapper.reset();
- }
final String packageName = mService.getPackageName();
int version = -1;
try {
@@ -270,7 +245,7 @@ public class SubtypeSwitcher {
} catch (NameNotFoundException e) {
}
Log.w(TAG, "Unknown subtype mode: " + newMode + "," + version + ", " + packageName
- + ", " + mVoiceInputWrapper + ". IME is already changed to other IME.");
+ + ". IME is already changed to other IME.");
if (newSubtype != null) {
Log.w(TAG, "Subtype mode:" + newSubtype.getMode());
Log.w(TAG, "Subtype locale:" + newSubtype.getLocale());
@@ -477,40 +452,6 @@ public class SubtypeSwitcher {
return KEYBOARD_MODE.equals(getCurrentSubtypeMode());
}
-
- ///////////////////////////
- // Voice Input functions //
- ///////////////////////////
-
- public boolean setVoiceInputWrapper(VoiceProxy.VoiceInputWrapper vi) {
- if (mVoiceInputWrapper == null && vi != null) {
- mVoiceInputWrapper = vi;
- if (isVoiceMode()) {
- if (DBG) {
- Log.d(TAG, "Set and call voice input.: " + getInputLocaleStr());
- }
- triggerVoiceIME();
- return true;
- }
- }
- return false;
- }
-
- public boolean isVoiceMode() {
- return null == mCurrentSubtype ? false : VOICE_MODE.equals(getCurrentSubtypeMode());
- }
-
- public boolean isDummyVoiceMode() {
- return mCurrentSubtype != null && mCurrentSubtype.getOriginalObject() == null
- && VOICE_MODE.equals(getCurrentSubtypeMode());
- }
-
- private void triggerVoiceIME() {
- if (!mService.isInputViewShown()) return;
- VoiceProxy.getInstance().startListening(false,
- KeyboardSwitcher.getInstance().getKeyboardView().getWindowToken());
- }
-
public String getInputLanguageName() {
return StringUtils.getDisplayLanguage(getInputLocale());
}
@@ -537,18 +478,4 @@ public class SubtypeSwitcher {
public String getCurrentSubtypeMode() {
return null != mCurrentSubtype ? mCurrentSubtype.getMode() : KEYBOARD_MODE;
}
-
-
- public static boolean isVoiceSupported(Context context, String locale) {
- // Get the current list of supported locales and check the current locale against that
- // list. We cache this value so as not to check it every time the user starts a voice
- // input. Because this method is called by onStartInputView, this should mean that as
- // long as the locale doesn't change while the user is keeping the IME open, the
- // value should never be stale.
- String supportedLocalesString = VoiceProxy.getSupportedLocalesString(
- context.getContentResolver());
- List<String> voiceInputSupportedLocales = Arrays.asList(
- supportedLocalesString.split("\\s+"));
- return voiceInputSupportedLocales.contains(locale);
- }
}
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 9ae2506f4..b31f3019c 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -26,7 +26,6 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.io.File;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
@@ -93,11 +92,9 @@ public class Suggest implements Dictionary.WordCallback {
private static final int PREF_MAX_BIGRAMS = 60;
private double mAutoCorrectionThreshold;
- private int[] mScores = new int[mPrefMaxSuggestions];
- private int[] mBigramScores = new int[PREF_MAX_BIGRAMS];
- private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>();
- private ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>();
+ private ArrayList<SuggestedWordInfo> mSuggestions = new ArrayList<SuggestedWordInfo>();
+ private ArrayList<SuggestedWordInfo> mBigramSuggestions = new ArrayList<SuggestedWordInfo>();
private CharSequence mConsideredWord;
// TODO: Remove these member variables by passing more context to addWord() callback method
@@ -230,10 +227,8 @@ public class Suggest implements Dictionary.WordCallback {
return sb;
}
- protected void addBigramToSuggestions(CharSequence bigram) {
- final StringBuilder sb = new StringBuilder(getApproxMaxWordLength());
- sb.append(bigram);
- mSuggestions.add(sb);
+ protected void addBigramToSuggestions(SuggestedWordInfo bigram) {
+ mSuggestions.add(bigram);
}
private static final WordComposer sEmptyWordComposer = new WordComposer();
@@ -242,15 +237,13 @@ public class Suggest implements Dictionary.WordCallback {
mIsFirstCharCapitalized = false;
mIsAllUpperCase = false;
mTrailingSingleQuotesCount = 0;
- mSuggestions = new ArrayList<CharSequence>(mPrefMaxSuggestions);
- Arrays.fill(mScores, 0);
+ mSuggestions = new ArrayList<SuggestedWordInfo>(mPrefMaxSuggestions);
// Treating USER_TYPED as UNIGRAM suggestion for logging now.
LatinImeLogger.onAddSuggestedWord("", Suggest.DIC_USER_TYPED, Dictionary.UNIGRAM);
mConsideredWord = "";
- Arrays.fill(mBigramScores, 0);
- mBigramSuggestions = new ArrayList<CharSequence>(PREF_MAX_BIGRAMS);
+ mBigramSuggestions = new ArrayList<SuggestedWordInfo>(PREF_MAX_BIGRAMS);
CharSequence lowerPrevWord = prevWordForBigram.toString().toLowerCase();
if (mMainDict != null && mMainDict.isValidWord(lowerPrevWord)) {
@@ -265,9 +258,9 @@ public class Suggest implements Dictionary.WordCallback {
addBigramToSuggestions(mBigramSuggestions.get(i));
}
- StringUtils.removeDupes(mSuggestions);
+ SuggestedWordInfo.removeDups(mSuggestions);
- return new SuggestedWords(SuggestedWords.getFromCharSequenceList(mSuggestions),
+ return new SuggestedWords(mSuggestions,
false /* typedWordValid */,
false /* hasAutoCorrectionCandidate */,
false /* allowsToBeAutoCorrected */,
@@ -283,8 +276,7 @@ public class Suggest implements Dictionary.WordCallback {
mIsFirstCharCapitalized = wordComposer.isFirstCharCapitalized();
mIsAllUpperCase = wordComposer.isAllUpperCase();
mTrailingSingleQuotesCount = wordComposer.trailingSingleQuotesCount();
- mSuggestions = new ArrayList<CharSequence>(mPrefMaxSuggestions);
- Arrays.fill(mScores, 0);
+ mSuggestions = new ArrayList<SuggestedWordInfo>(mPrefMaxSuggestions);
final String typedWord = wordComposer.getTypedWord();
final String consideredWord = mTrailingSingleQuotesCount > 0
@@ -296,8 +288,7 @@ public class Suggest implements Dictionary.WordCallback {
if (wordComposer.size() <= 1 && (correctionMode == CORRECTION_FULL_BIGRAM)) {
// At first character typed, search only the bigrams
- Arrays.fill(mBigramScores, 0);
- mBigramSuggestions = new ArrayList<CharSequence>(PREF_MAX_BIGRAMS);
+ mBigramSuggestions = new ArrayList<SuggestedWordInfo>(PREF_MAX_BIGRAMS);
if (!TextUtils.isEmpty(prevWordForBigram)) {
CharSequence lowerPrevWord = prevWordForBigram.toString().toLowerCase();
@@ -317,12 +308,14 @@ public class Suggest implements Dictionary.WordCallback {
// Word entered: return only bigrams that match the first char of the typed word
final char currentChar = consideredWord.charAt(0);
// TODO: Must pay attention to locale when changing case.
+ // TODO: Use codepoint instead of char
final char currentCharUpper = Character.toUpperCase(currentChar);
int count = 0;
final int bigramSuggestionSize = mBigramSuggestions.size();
for (int i = 0; i < bigramSuggestionSize; i++) {
- final CharSequence bigramSuggestion = mBigramSuggestions.get(i);
- final char bigramSuggestionFirstChar = bigramSuggestion.charAt(0);
+ final SuggestedWordInfo bigramSuggestion = mBigramSuggestions.get(i);
+ final char bigramSuggestionFirstChar =
+ (char)bigramSuggestion.codePointAt(0);
if (bigramSuggestionFirstChar == currentChar
|| bigramSuggestionFirstChar == currentCharUpper) {
addBigramToSuggestions(bigramSuggestion);
@@ -359,7 +352,7 @@ public class Suggest implements Dictionary.WordCallback {
if (CORRECTION_FULL == correctionMode || CORRECTION_FULL_BIGRAM == correctionMode) {
final CharSequence autoCorrection =
AutoCorrection.computeAutoCorrectionWord(mUnigramDictionaries, wordComposer,
- mSuggestions, mScores, consideredWord, mAutoCorrectionThreshold,
+ mSuggestions, consideredWord, mAutoCorrectionThreshold,
whitelistedWord);
hasAutoCorrection = (null != autoCorrection);
} else {
@@ -372,20 +365,22 @@ public class Suggest implements Dictionary.WordCallback {
for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
sb.appendCodePoint(Keyboard.CODE_SINGLE_QUOTE);
}
- mSuggestions.add(0, sb.toString());
+ mSuggestions.add(0, new SuggestedWordInfo(
+ sb.toString(), SuggestedWordInfo.MAX_SCORE));
} else {
- mSuggestions.add(0, whitelistedWord);
+ mSuggestions.add(0, new SuggestedWordInfo(
+ whitelistedWord, SuggestedWordInfo.MAX_SCORE));
}
}
- mSuggestions.add(0, typedWord);
- StringUtils.removeDupes(mSuggestions);
+ mSuggestions.add(0, new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE));
+ SuggestedWordInfo.removeDups(mSuggestions);
final ArrayList<SuggestedWordInfo> suggestionsList;
if (DBG) {
- suggestionsList = getSuggestionsInfoListWithDebugInfo(typedWord, mSuggestions, mScores);
+ suggestionsList = getSuggestionsInfoListWithDebugInfo(typedWord, mSuggestions);
} else {
- suggestionsList = SuggestedWords.getFromCharSequenceList(mSuggestions);
+ suggestionsList = mSuggestions;
}
// TODO: Change this scheme - a boolean is not enough. A whitelisted word may be "valid"
@@ -415,50 +410,45 @@ public class Suggest implements Dictionary.WordCallback {
false /* isObsoleteSuggestions */);
}
- // This assumes the scores[] array is at least as long as suggestions.size() - 1.
private static ArrayList<SuggestedWordInfo> getSuggestionsInfoListWithDebugInfo(
- final String typedWord, final ArrayList<CharSequence> suggestions, final int[] scores) {
- // TODO: this doesn't take into account the fact that removing dupes from mSuggestions
- // may have made mScores[] and mSuggestions out of sync.
- final CharSequence autoCorrectionSuggestion = suggestions.get(0);
+ final String typedWord, final ArrayList<SuggestedWordInfo> suggestions) {
+ final SuggestedWordInfo typedWordInfo = suggestions.get(0);
+ typedWordInfo.setDebugString("+");
double normalizedScore = BinaryDictionary.calcNormalizedScore(
- typedWord, autoCorrectionSuggestion.toString(), scores[0]);
+ typedWord, typedWordInfo.toString(), typedWordInfo.mScore);
final int suggestionsSize = suggestions.size();
final ArrayList<SuggestedWordInfo> suggestionsList =
new ArrayList<SuggestedWordInfo>(suggestionsSize);
- suggestionsList.add(new SuggestedWordInfo(autoCorrectionSuggestion, "+"));
+ suggestionsList.add(typedWordInfo);
// Note: i here is the index in mScores[], but the index in mSuggestions is one more
// than i because we added the typed word to mSuggestions without touching mScores.
- for (int i = 0; i < scores.length && i < suggestionsSize - 1; ++i) {
+ for (int i = 0; i < suggestionsSize - 1; ++i) {
+ final SuggestedWordInfo cur = suggestions.get(i + 1);
final String scoreInfoString;
if (normalizedScore > 0) {
- scoreInfoString = String.format("%d (%4.2f)", scores[i], normalizedScore);
+ scoreInfoString = String.format("%d (%4.2f)", cur.mScore, normalizedScore);
normalizedScore = 0.0;
} else {
- scoreInfoString = Integer.toString(scores[i]);
+ scoreInfoString = Integer.toString(cur.mScore);
}
- suggestionsList.add(new SuggestedWordInfo(suggestions.get(i + 1), scoreInfoString));
- }
- for (int i = scores.length; i < suggestionsSize; ++i) {
- suggestionsList.add(new SuggestedWordInfo(suggestions.get(i), "--"));
+ cur.setDebugString(scoreInfoString);
+ suggestionsList.add(cur);
}
return suggestionsList;
}
+ // TODO: Use codepoint instead of char
@Override
public boolean addWord(final char[] word, final int offset, final int length, int score,
final int dicTypeId, final int dataType) {
int dataTypeForLog = dataType;
- final ArrayList<CharSequence> suggestions;
- final int[] sortedScores;
+ final ArrayList<SuggestedWordInfo> suggestions;
final int prefMaxSuggestions;
if (dataType == Dictionary.BIGRAM) {
suggestions = mBigramSuggestions;
- sortedScores = mBigramScores;
prefMaxSuggestions = PREF_MAX_BIGRAMS;
} else {
suggestions = mSuggestions;
- sortedScores = mScores;
prefMaxSuggestions = mPrefMaxSuggestions;
}
@@ -469,13 +459,13 @@ public class Suggest implements Dictionary.WordCallback {
// TODO: remove this surrounding if clause and move this logic to
// getSuggestedWordBuilder.
if (suggestions.size() > 0) {
- final String currentHighestWord = suggestions.get(0).toString();
+ final SuggestedWordInfo currentHighestWord = suggestions.get(0);
// If the current highest word is also equal to typed word, we need to compare
// frequency to determine the insertion position. This does not ensure strictly
// correct ordering, but ensures the top score is on top which is enough for
// removing duplicates correctly.
- if (StringUtils.equalsIgnoreCase(currentHighestWord, word, offset, length)
- && score <= sortedScores[0]) {
+ if (StringUtils.equalsIgnoreCase(currentHighestWord.mWord, word, offset, length)
+ && score <= currentHighestWord.mScore) {
pos = 1;
}
}
@@ -486,7 +476,7 @@ public class Suggest implements Dictionary.WordCallback {
if(bigramSuggestion >= 0) {
dataTypeForLog = Dictionary.BIGRAM;
// turn freq from bigram into multiplier specified above
- double multiplier = (((double) mBigramScores[bigramSuggestion])
+ double multiplier = (((double) mBigramSuggestions.get(bigramSuggestion).mScore)
/ MAXIMUM_BIGRAM_FREQUENCY)
* (BIGRAM_MULTIPLIER_MAX - BIGRAM_MULTIPLIER_MIN)
+ BIGRAM_MULTIPLIER_MIN;
@@ -500,10 +490,12 @@ public class Suggest implements Dictionary.WordCallback {
}
// Check the last one's score and bail
- if (sortedScores[prefMaxSuggestions - 1] >= score) return true;
- while (pos < prefMaxSuggestions) {
- if (sortedScores[pos] < score
- || (sortedScores[pos] == score && length < suggestions.get(pos).length())) {
+ if (suggestions.size() >= prefMaxSuggestions
+ && suggestions.get(prefMaxSuggestions - 1).mScore >= score) return true;
+ while (pos < suggestions.size()) {
+ final int curScore = suggestions.get(pos).mScore;
+ if (curScore < score
+ || (curScore == score && length < suggestions.get(pos).codePointCount())) {
break;
}
pos++;
@@ -513,8 +505,6 @@ public class Suggest implements Dictionary.WordCallback {
return true;
}
- System.arraycopy(sortedScores, pos, sortedScores, pos + 1, prefMaxSuggestions - pos - 1);
- sortedScores[pos] = score;
final StringBuilder sb = new StringBuilder(getApproxMaxWordLength());
// TODO: Must pay attention to locale when changing case.
if (mIsAllUpperCase) {
@@ -530,7 +520,7 @@ public class Suggest implements Dictionary.WordCallback {
for (int i = mTrailingSingleQuotesCount - 1; i >= 0; --i) {
sb.appendCodePoint(Keyboard.CODE_SINGLE_QUOTE);
}
- suggestions.add(pos, sb);
+ suggestions.add(pos, new SuggestedWordInfo(sb, score));
if (suggestions.size() > prefMaxSuggestions) {
suggestions.remove(prefMaxSuggestions);
} else {
@@ -539,15 +529,16 @@ public class Suggest implements Dictionary.WordCallback {
return true;
}
+ // TODO: Use codepoint instead of char
private int searchBigramSuggestion(final char[] word, final int offset, final int length) {
// TODO This is almost O(n^2). Might need fix.
// search whether the word appeared in bigram data
int bigramSuggestSize = mBigramSuggestions.size();
for (int i = 0; i < bigramSuggestSize; i++) {
- if (mBigramSuggestions.get(i).length() == length) {
+ if (mBigramSuggestions.get(i).codePointCount() == length) {
boolean chk = true;
for (int j = 0; j < length; j++) {
- if (mBigramSuggestions.get(i).charAt(j) != word[offset+j]) {
+ if (mBigramSuggestions.get(i).codePointAt(j) != word[offset+j]) {
chk = false;
break;
}
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index ef8e58e0c..0c0ce182f 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -56,6 +56,10 @@ public class SuggestedWords {
return mSuggestedWordInfoList.get(pos).mWord;
}
+ public SuggestedWordInfo getWordInfo(int pos) {
+ return mSuggestedWordInfoList.get(pos);
+ }
+
public SuggestedWordInfo getInfo(int pos) {
return mSuggestedWordInfoList.get(pos);
}
@@ -79,20 +83,12 @@ public class SuggestedWords {
+ " words=" + Arrays.toString(mSuggestedWordInfoList.toArray());
}
- public static ArrayList<SuggestedWordInfo> getFromCharSequenceList(
- final ArrayList<CharSequence> wordList) {
- final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
- for (CharSequence word : wordList) {
- if (null != word) result.add(new SuggestedWordInfo(word));
- }
- return result;
- }
-
public static ArrayList<SuggestedWordInfo> getFromApplicationSpecifiedCompletions(
final CompletionInfo[] infos) {
final ArrayList<SuggestedWordInfo> result = new ArrayList<SuggestedWordInfo>();
for (CompletionInfo info : infos) {
- if (null != info) result.add(new SuggestedWordInfo(info.getText()));
+ if (null != info) result.add(new SuggestedWordInfo(info.getText(),
+ SuggestedWordInfo.MAX_SCORE));
}
return result;
}
@@ -103,14 +99,15 @@ public class SuggestedWords {
final CharSequence typedWord, final SuggestedWords previousSuggestions) {
final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<SuggestedWordInfo>();
final HashSet<String> alreadySeen = new HashSet<String>();
- suggestionsList.add(new SuggestedWordInfo(typedWord));
+ suggestionsList.add(new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE));
alreadySeen.add(typedWord.toString());
final int previousSize = previousSuggestions.size();
for (int pos = 1; pos < previousSize; pos++) {
- final String prevWord = previousSuggestions.getWord(pos).toString();
+ final SuggestedWordInfo prevWordInfo = previousSuggestions.getWordInfo(pos);
+ final String prevWord = prevWordInfo.mWord.toString();
// Filter out duplicate suggestion.
if (!alreadySeen.contains(prevWord)) {
- suggestionsList.add(new SuggestedWordInfo(prevWord));
+ suggestionsList.add(prevWordInfo);
alreadySeen.add(prevWord);
}
}
@@ -118,30 +115,64 @@ public class SuggestedWords {
}
public static class SuggestedWordInfo {
+ public static final int MAX_SCORE = Integer.MAX_VALUE;
+ private final String mWordStr;
public final CharSequence mWord;
- private final String mDebugString;
+ public final int mScore;
+ public final int mCodePointCount;
+ private String mDebugString = "";
- public SuggestedWordInfo(final CharSequence word) {
+ public SuggestedWordInfo(final CharSequence word, final int score) {
+ mWordStr = word.toString();
mWord = word;
- mDebugString = "";
+ mScore = score;
+ mCodePointCount = mWordStr.codePointCount(0, mWordStr.length());
}
- public SuggestedWordInfo(final CharSequence word, final String debugString) {
- mWord = word;
- if (null == debugString) throw new NullPointerException("");
- mDebugString = debugString;
+
+ public void setDebugString(String str) {
+ if (null == str) throw new NullPointerException("Debug info is null");
+ mDebugString = str;
}
public String getDebugString() {
return mDebugString;
}
+ public int codePointCount() {
+ return mCodePointCount;
+ }
+
+ public int codePointAt(int i) {
+ return mWordStr.codePointAt(i);
+ }
+
@Override
public String toString() {
if (TextUtils.isEmpty(mDebugString)) {
- return mWord.toString();
+ return mWordStr;
} else {
- return mWord.toString() + " (" + mDebugString.toString() + ")";
+ return mWordStr + " (" + mDebugString.toString() + ")";
+ }
+ }
+
+ // TODO: Consolidate this method and StringUtils.removeDupes() in the future.
+ public static void removeDups(ArrayList<SuggestedWordInfo> candidates) {
+ if (candidates.size() <= 1) {
+ return;
+ }
+ int i = 1;
+ while(i < candidates.size()) {
+ final SuggestedWordInfo cur = candidates.get(i);
+ for (int j = 0; j < i; ++j) {
+ final SuggestedWordInfo previous = candidates.get(j);
+ if (TextUtils.equals(cur.mWord, previous.mWord)) {
+ candidates.remove(cur.mScore < previous.mScore ? i : j);
+ --i;
+ break;
+ }
+ }
+ ++i;
}
}
}
diff --git a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java b/java/src/com/android/inputmethod/latin/VibratorUtils.java
index 2fb8b8710..33ffdd9c9 100644
--- a/java/src/com/android/inputmethod/compat/VibratorCompatWrapper.java
+++ b/java/src/com/android/inputmethod/latin/VibratorUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2012 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.
@@ -14,38 +14,37 @@
* limitations under the License.
*/
-package com.android.inputmethod.compat;
+package com.android.inputmethod.latin;
import android.content.Context;
import android.os.Vibrator;
-import java.lang.reflect.Method;
-
-public class VibratorCompatWrapper {
- private static final Method METHOD_hasVibrator = CompatUtils.getMethod(Vibrator.class,
- "hasVibrator");
-
- private static final VibratorCompatWrapper sInstance = new VibratorCompatWrapper();
+public class VibratorUtils {
+ private static final VibratorUtils sInstance = new VibratorUtils();
private Vibrator mVibrator;
- private VibratorCompatWrapper() {
+ private VibratorUtils() {
+ // This utility class is not publicly instantiable.
}
- public static VibratorCompatWrapper getInstance(Context context) {
+ public static VibratorUtils getInstance(Context context) {
if (sInstance.mVibrator == null) {
- sInstance.mVibrator =
- (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+ sInstance.mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
}
return sInstance;
}
public boolean hasVibrator() {
- if (mVibrator == null)
+ if (mVibrator == null) {
return false;
- return (Boolean) CompatUtils.invoke(mVibrator, true, METHOD_hasVibrator);
+ }
+ return mVibrator.hasVibrator();
}
public void vibrate(long milliseconds) {
+ if (mVibrator == null) {
+ return;
+ }
mVibrator.vibrate(milliseconds);
}
}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 5a173857e..7b13e40c2 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -26,7 +26,6 @@ import android.util.Log;
import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;
-import com.android.inputmethod.compat.ArraysCompatUtils;
import com.android.inputmethod.compat.SuggestionsInfoCompatUtils;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.BinaryDictionary;
@@ -237,7 +236,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService
@Override
synchronized public boolean addWord(char[] word, int wordOffset, int wordLength, int score,
int dicTypeId, int dataType) {
- final int positionIndex = ArraysCompatUtils.binarySearch(mScores, 0, mLength, score);
+ final int positionIndex = Arrays.binarySearch(mScores, 0, mLength, score);
// binarySearch returns the index if the element exists, and -<insertion index> - 1
// if it doesn't. See documentation for binarySearch.
final int insertIndex = positionIndex >= 0 ? positionIndex : -positionIndex - 1;