rename some keyboard layouts, simplify layout names, enable "hidden" layouts

This commit is contained in:
Helium314 2023-12-21 18:27:49 +01:00
parent c943082f98
commit 461eb2a551
8 changed files with 142 additions and 232 deletions

View file

@ -35,7 +35,7 @@ import java.util.Locale
* Functional keys are pre-defined and can't be changed, with exception of comma, period and similar * Functional keys are pre-defined and can't be changed, with exception of comma, period and similar
* keys in symbol layouts. * keys in symbol layouts.
* By default, all normal keys have the same width and flags, which may cause issues with the * By default, all normal keys have the same width and flags, which may cause issues with the
* requirements of certain non-latin languages. todo: add labelFlags to Json parser, or determine automatically? * requirements of certain non-latin languages.
*/ */
abstract class KeyboardParser(private val params: KeyboardParams, private val context: Context) { abstract class KeyboardParser(private val params: KeyboardParams, private val context: Context) {
private val infos = layoutInfos(params) private val infos = layoutInfos(params)
@ -754,7 +754,7 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
fun parseFromAssets(params: KeyboardParams, context: Context): ArrayList<ArrayList<KeyParams>> { fun parseFromAssets(params: KeyboardParams, context: Context): ArrayList<ArrayList<KeyParams>> {
val id = params.mId val id = params.mId
val layoutName = params.mId.mSubtype.keyboardLayoutSetName val layoutName = params.mId.mSubtype.keyboardLayoutSetName.substringBefore("+")
val layoutFileNames = context.assets.list("layouts")!! val layoutFileNames = context.assets.list("layouts")!!
return when { return when {
id.mElementId == KeyboardId.ELEMENT_SYMBOLS && ScriptUtils.getScriptFromSpellCheckerLocale(params.mId.locale) == ScriptUtils.SCRIPT_ARABIC id.mElementId == KeyboardId.ELEMENT_SYMBOLS && ScriptUtils.getScriptFromSpellCheckerLocale(params.mId.locale) == ScriptUtils.SCRIPT_ARABIC
@ -769,22 +769,12 @@ abstract class KeyboardParser(private val params: KeyboardParams, private val co
id.mElementId == KeyboardId.ELEMENT_PHONE -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone") id.mElementId == KeyboardId.ELEMENT_PHONE -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone")
id.mElementId == KeyboardId.ELEMENT_PHONE_SYMBOLS -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone_symbols") id.mElementId == KeyboardId.ELEMENT_PHONE_SYMBOLS -> JsonKeyboardParser(params, context).parseLayoutFromAssets("phone_symbols")
layoutFileNames.contains("$layoutName.json") -> JsonKeyboardParser(params, context).parseLayoutFromAssets(layoutName) layoutFileNames.contains("$layoutName.json") -> JsonKeyboardParser(params, context).parseLayoutFromAssets(layoutName)
layoutFileNames.contains("${getSimpleLayoutName(layoutName, params)}.txt") layoutFileNames.contains("$layoutName.txt")
-> SimpleKeyboardParser(params, context).parseLayoutFromAssets(layoutName) -> SimpleKeyboardParser(params, context).parseLayoutFromAssets(layoutName)
else -> throw IllegalStateException("can't parse layout $layoutName with id $id and elementId ${id.mElementId}") else -> throw IllegalStateException("can't parse layout $layoutName with id $id and elementId ${id.mElementId}")
} }
} }
@JvmStatic // unsupported without JvmStatic
// todo: should be removed in the end (after removing old parser), and the internal layout names changed for easier finding
// currently it's spread out everywhere... method.xml, locale_and_extra_value_to_keyboard_layout_set_map, getKeyboardLayoutNameForLocale, ...
protected fun getSimpleLayoutName(layoutName: String, params: KeyboardParams): String = when (layoutName) {
"swiss", "german", "serbian_qwertz" -> "qwertz"
"nordic", "spanish" -> if (params.mId.locale.language == "eo") "eo" else "qwerty"
"south_slavic", "east_slavic" -> params.mId.locale.language // layouts are split per language now, much less convoluted
else -> layoutName
}
// todo: layoutInfos should be stored in method.xml (imeSubtypeExtraValue) // todo: layoutInfos should be stored in method.xml (imeSubtypeExtraValue)
// or somewhere else... some replacement for keyboard_layout_set xml maybe // or somewhere else... some replacement for keyboard_layout_set xml maybe
// move it after old parser is removed // move it after old parser is removed

View file

@ -6,6 +6,7 @@ import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardParams
import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.KeyData import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.KeyData
import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.toTextKey import org.dslul.openboard.inputmethod.keyboard.internal.keyboard_parser.floris.toTextKey
import org.dslul.openboard.inputmethod.latin.common.splitOnWhitespace import org.dslul.openboard.inputmethod.latin.common.splitOnWhitespace
import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils
/** /**
* Parser for simple layouts, defined only as rows of (normal) keys with moreKeys. * Parser for simple layouts, defined only as rows of (normal) keys with moreKeys.
@ -14,12 +15,10 @@ import org.dslul.openboard.inputmethod.latin.common.splitOnWhitespace
* merged with defaults. * merged with defaults.
*/ */
class SimpleKeyboardParser(private val params: KeyboardParams, private val context: Context) : KeyboardParser(params, context) { class SimpleKeyboardParser(private val params: KeyboardParams, private val context: Context) : KeyboardParser(params, context) {
private val addExtraKeys = // todo (after removing old parser): add turkish layout that maps to qwerty, but enables extra keys private val addExtraKeys = params.mId.mSubtype.keyboardLayoutSetName.endsWith("+")
params.mId.isAlphabetKeyboard && params.mId.locale.language != "eo"
&& params.mId.mSubtype.keyboardLayoutSetName in listOf("nordic", "spanish", "german", "swiss", "serbian_qwertz")
override fun getLayoutFromAssets(layoutName: String) = override fun getLayoutFromAssets(layoutName: String) =
context.assets.open("layouts/${getSimpleLayoutName(layoutName, params)}.txt").reader().readText() context.assets.open("layouts/$layoutName.txt").reader().readText()
override fun parseCoreLayout(layoutContent: String): MutableList<List<KeyData>> { override fun parseCoreLayout(layoutContent: String): MutableList<List<KeyData>> {
val rowStrings = layoutContent.replace("\r\n", "\n").split("\n\n") val rowStrings = layoutContent.replace("\r\n", "\n").split("\n\n")

View file

@ -65,6 +65,12 @@ public final class Constants {
*/ */
public static final String KEYBOARD_MODE = "keyboard"; public static final String KEYBOARD_MODE = "keyboard";
// some extra values:
// TrySuppressingImeSwitcher: not documented, but used in Android source
// AsciiCapable: not used, but recommended for Android 9- because of known issues
// SupportTouchPositionCorrection: never read, never used outside AOSP keyboard -> can be removed?
// EmojiCapable: there is some description in Constants, but actually it's never read
// KeyboardLayoutSet: obvious
public static final class ExtraValue { public static final class ExtraValue {
/** /**
* The subtype extra value used to indicate that this subtype is capable of * The subtype extra value used to indicate that this subtype is capable of

View file

@ -56,20 +56,7 @@ fun addEnabledSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) {
/** returns whether subtype was actually removed, does not remove last subtype */ /** returns whether subtype was actually removed, does not remove last subtype */
fun removeEnabledSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) { fun removeEnabledSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) {
require(initialized) require(initialized)
val subtypeString = subtype.prefString() removeEnabledSubtype(prefs, subtype.prefString())
val oldSubtypeString = prefs.getString(Settings.PREF_ENABLED_INPUT_STYLES, "")!!
val newString = (oldSubtypeString.split(SUBTYPE_SEPARATOR) - subtypeString).joinToString(SUBTYPE_SEPARATOR)
if (newString == oldSubtypeString)
return // already removed
prefs.edit { putString(Settings.PREF_ENABLED_INPUT_STYLES, newString) }
if (subtypeString == prefs.getString(Settings.PREF_SELECTED_INPUT_STYLE, "")) {
// switch subtype if the currently used one has been disabled
val nextSubtype = RichInputMethodManager.getInstance().getNextSubtypeInThisIme(true)
if (subtypeString == nextSubtype?.prefString())
KeyboardSwitcher.getInstance().switchToSubtype(getDefaultEnabledSubtypes().first())
else
KeyboardSwitcher.getInstance().switchToSubtype(nextSubtype)
}
enabledSubtypes.remove(subtype) enabledSubtypes.remove(subtype)
RichInputMethodManager.getInstance().refreshSubtypeCaches() RichInputMethodManager.getInstance().refreshSubtypeCaches()
} }
@ -246,6 +233,8 @@ private fun loadEnabledSubtypes(context: Context) {
if (subtype == null) { if (subtype == null) {
if (DebugFlags.DEBUG_ENABLED) if (DebugFlags.DEBUG_ENABLED)
Toast.makeText(context, "subtype $localeAndLayout could not be loaded", Toast.LENGTH_LONG).show() Toast.makeText(context, "subtype $localeAndLayout could not be loaded", Toast.LENGTH_LONG).show()
else // don't remove in debug mode
removeEnabledSubtype(prefs, localeAndLayout.joinToString(LOCALE_LAYOUT_SEPARATOR))
continue continue
} }
@ -253,6 +242,22 @@ private fun loadEnabledSubtypes(context: Context) {
} }
} }
private fun removeEnabledSubtype(prefs: SharedPreferences, subtypeString: String) {
val oldSubtypeString = prefs.getString(Settings.PREF_ENABLED_INPUT_STYLES, "")!!
val newString = (oldSubtypeString.split(SUBTYPE_SEPARATOR) - subtypeString).joinToString(SUBTYPE_SEPARATOR)
if (newString == oldSubtypeString)
return // already removed
prefs.edit { putString(Settings.PREF_ENABLED_INPUT_STYLES, newString) }
if (subtypeString == prefs.getString(Settings.PREF_SELECTED_INPUT_STYLE, "")) {
// switch subtype if the currently used one has been disabled
val nextSubtype = RichInputMethodManager.getInstance().getNextSubtypeInThisIme(true)
if (subtypeString == nextSubtype?.prefString())
KeyboardSwitcher.getInstance().switchToSubtype(getDefaultEnabledSubtypes().first())
else
KeyboardSwitcher.getInstance().switchToSubtype(nextSubtype)
}
}
var initialized = false var initialized = false
private set private set
private val enabledSubtypes = mutableListOf<InputMethodSubtype>() private val enabledSubtypes = mutableListOf<InputMethodSubtype>()

View file

@ -92,33 +92,23 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
return mRecommendedThreshold; return mRecommendedThreshold;
} }
// todo: this needs to be adjusted!
private static String getKeyboardLayoutNameForLocale(final Locale locale) { private static String getKeyboardLayoutNameForLocale(final Locale locale) {
// See b/19963288. // See b/19963288.
if (locale.getLanguage().equals("sr") || locale.getLanguage().equals("mk")) { if (locale.getLanguage().equals("sr") || locale.getLanguage().equals("mk")) {
return "south_slavic"; return locale.getLanguage();
} }
final int script = ScriptUtils.getScriptFromSpellCheckerLocale(locale); final int script = ScriptUtils.getScriptFromSpellCheckerLocale(locale);
switch (script) { return switch (script) {
case ScriptUtils.SCRIPT_LATIN: case ScriptUtils.SCRIPT_LATIN -> "qwerty";
return "qwerty"; case ScriptUtils.SCRIPT_ARMENIAN -> "armenian_phonetic";
case ScriptUtils.SCRIPT_ARMENIAN: case ScriptUtils.SCRIPT_CYRILLIC -> "ru";
return "armenian_phonetic"; case ScriptUtils.SCRIPT_GREEK -> "greek";
case ScriptUtils.SCRIPT_CYRILLIC: case ScriptUtils.SCRIPT_HEBREW -> "hebrew";
return "east_slavic"; case ScriptUtils.SCRIPT_BULGARIAN -> "bulgarian";
case ScriptUtils.SCRIPT_GREEK: case ScriptUtils.SCRIPT_GEORGIAN -> "georgian";
return "greek"; case ScriptUtils.SCRIPT_BENGALI -> "bengali_unijoy";
case ScriptUtils.SCRIPT_HEBREW: default -> throw new RuntimeException("Wrong script supplied: " + script);
return "hebrew"; };
case ScriptUtils.SCRIPT_BULGARIAN:
return "bulgarian";
case ScriptUtils.SCRIPT_GEORGIAN:
return "georgian";
case ScriptUtils.SCRIPT_BENGALI:
return "bengali_unijoy";
default:
throw new RuntimeException("Wrong script supplied: " + script);
}
} }
@Override @Override

View file

@ -8,7 +8,6 @@ package org.dslul.openboard.inputmethod.latin.utils;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import org.dslul.openboard.inputmethod.latin.utils.Log;
import android.view.inputmethod.InputMethodSubtype; import android.view.inputmethod.InputMethodSubtype;
import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.R;
@ -51,27 +50,16 @@ public final class SubtypeLocaleUtils {
// Keyboard layout to subtype name resource id map. // Keyboard layout to subtype name resource id map.
private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap = new HashMap<>(); private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap = new HashMap<>();
// Exceptional locale whose name should be displayed in Locale.ROOT. // Exceptional locale whose name should be displayed in Locale.ROOT.
private static final HashMap<String, Integer> sExceptionalLocaleDisplayedInRootLocale = private static final HashMap<String, Integer> sExceptionalLocaleDisplayedInRootLocale = new HashMap<>();
new HashMap<>();
// Exceptional locale to subtype name resource id map. // Exceptional locale to subtype name resource id map.
private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap = new HashMap<>(); private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap = new HashMap<>();
// Exceptional locale to subtype name with layout resource id map. // Exceptional locale to subtype name with layout resource id map.
private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap = private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap = new HashMap<>();
new HashMap<>(); private static final String SUBTYPE_NAME_RESOURCE_PREFIX = "string/subtype_";
private static final String SUBTYPE_NAME_RESOURCE_PREFIX = private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX = "string/subtype_generic_";
"string/subtype_"; private static final String SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX = "string/subtype_with_layout_";
private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX = private static final String SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX = "string/subtype_no_language_";
"string/subtype_generic_"; private static final String SUBTYPE_NAME_RESOURCE_IN_ROOT_LOCALE_PREFIX = "string/subtype_in_root_locale_";
private static final String SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX =
"string/subtype_with_layout_";
private static final String SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX =
"string/subtype_no_language_";
private static final String SUBTYPE_NAME_RESOURCE_IN_ROOT_LOCALE_PREFIX =
"string/subtype_in_root_locale_";
// Keyboard layout set name for the subtypes that don't have a keyboardLayoutSet extra value.
// This is for compatibility to keep the same subtype ids as pre-JellyBean.
private static final HashMap<String, String> sLocaleAndExtraValueToKeyboardLayoutSetMap =
new HashMap<>();
private SubtypeLocaleUtils() { private SubtypeLocaleUtils() {
// Intentional empty constructor for utility class. // Intentional empty constructor for utility class.
@ -80,7 +68,7 @@ public final class SubtypeLocaleUtils {
// Note that this initialization method can be called multiple times. // Note that this initialization method can be called multiple times.
public static void init(final Context context) { public static void init(final Context context) {
synchronized (sInitializeLock) { synchronized (sInitializeLock) {
if (sInitialized == false) { if (!sInitialized) {
initLocked(context); initLocked(context);
sInitialized = true; sInitialized = true;
} }
@ -93,8 +81,7 @@ public final class SubtypeLocaleUtils {
sResources = res; sResources = res;
final String[] predefinedLayoutSet = res.getStringArray(R.array.predefined_layouts); final String[] predefinedLayoutSet = res.getStringArray(R.array.predefined_layouts);
final String[] layoutDisplayNames = res.getStringArray( final String[] layoutDisplayNames = res.getStringArray(R.array.predefined_layout_display_names);
R.array.predefined_layout_display_names);
for (int i = 0; i < predefinedLayoutSet.length; i++) { for (int i = 0; i < predefinedLayoutSet.length; i++) {
final String layoutName = predefinedLayoutSet[i]; final String layoutName = predefinedLayoutSet[i];
sKeyboardLayoutToDisplayNameMap.put(layoutName, layoutDisplayNames[i]); sKeyboardLayoutToDisplayNameMap.put(layoutName, layoutDisplayNames[i]);
@ -103,42 +90,27 @@ public final class SubtypeLocaleUtils {
sKeyboardLayoutToNameIdsMap.put(layoutName, resId); sKeyboardLayoutToNameIdsMap.put(layoutName, resId);
// Register subtype name resource id of "No language" with key "zz_<layout>" // Register subtype name resource id of "No language" with key "zz_<layout>"
final String noLanguageResName = SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX + layoutName; final String noLanguageResName = SUBTYPE_NAME_RESOURCE_NO_LANGUAGE_PREFIX + layoutName;
final int noLanguageResId = res.getIdentifier( final int noLanguageResId = res.getIdentifier(noLanguageResName, null, RESOURCE_PACKAGE_NAME);
noLanguageResName, null, RESOURCE_PACKAGE_NAME);
final String key = getNoLanguageLayoutKey(layoutName); final String key = getNoLanguageLayoutKey(layoutName);
sKeyboardLayoutToNameIdsMap.put(key, noLanguageResId); sKeyboardLayoutToNameIdsMap.put(key, noLanguageResId);
} }
final String[] exceptionalLocaleInRootLocale = res.getStringArray( final String[] exceptionalLocaleInRootLocale = res.getStringArray(R.array.subtype_locale_displayed_in_root_locale);
R.array.subtype_locale_displayed_in_root_locale); for (final String localeString : exceptionalLocaleInRootLocale) {
for (int i = 0; i < exceptionalLocaleInRootLocale.length; i++) {
final String localeString = exceptionalLocaleInRootLocale[i];
final String resourceName = SUBTYPE_NAME_RESOURCE_IN_ROOT_LOCALE_PREFIX + localeString; final String resourceName = SUBTYPE_NAME_RESOURCE_IN_ROOT_LOCALE_PREFIX + localeString;
final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME); final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME);
sExceptionalLocaleDisplayedInRootLocale.put(localeString, resId); sExceptionalLocaleDisplayedInRootLocale.put(localeString, resId);
} }
final String[] exceptionalLocales = res.getStringArray( final String[] exceptionalLocales = res.getStringArray(R.array.subtype_locale_exception_keys);
R.array.subtype_locale_exception_keys); for (final String localeString : exceptionalLocales) {
for (int i = 0; i < exceptionalLocales.length; i++) {
final String localeString = exceptionalLocales[i];
final String resourceName = SUBTYPE_NAME_RESOURCE_PREFIX + localeString; final String resourceName = SUBTYPE_NAME_RESOURCE_PREFIX + localeString;
final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME); final int resId = res.getIdentifier(resourceName, null, RESOURCE_PACKAGE_NAME);
sExceptionalLocaleToNameIdsMap.put(localeString, resId); sExceptionalLocaleToNameIdsMap.put(localeString, resId);
final String resourceNameWithLayout = final String resourceNameWithLayout = SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX + localeString;
SUBTYPE_NAME_RESOURCE_WITH_LAYOUT_PREFIX + localeString; final int resIdWithLayout = res.getIdentifier(resourceNameWithLayout, null, RESOURCE_PACKAGE_NAME);
final int resIdWithLayout = res.getIdentifier(
resourceNameWithLayout, null, RESOURCE_PACKAGE_NAME);
sExceptionalLocaleToWithLayoutNameIdsMap.put(localeString, resIdWithLayout); sExceptionalLocaleToWithLayoutNameIdsMap.put(localeString, resIdWithLayout);
} }
final String[] keyboardLayoutSetMap = res.getStringArray(
R.array.locale_and_extra_value_to_keyboard_layout_set_map);
for (int i = 0; i + 1 < keyboardLayoutSetMap.length; i += 2) {
final String key = keyboardLayoutSetMap[i];
final String keyboardLayoutSet = keyboardLayoutSetMap[i + 1];
sLocaleAndExtraValueToKeyboardLayoutSetMap.put(key, keyboardLayoutSet);
}
} }
public static boolean isExceptionalLocale(final String localeString) { public static boolean isExceptionalLocale(final String localeString) {
@ -304,8 +276,7 @@ public final class SubtypeLocaleUtils {
} }
@Nullable @Nullable
public static String getKeyboardLayoutSetDisplayName( public static String getKeyboardLayoutSetDisplayName(@NonNull final InputMethodSubtype subtype) {
@NonNull final InputMethodSubtype subtype) {
final String layoutName = getKeyboardLayoutSetName(subtype); final String layoutName = getKeyboardLayoutSetName(subtype);
return getKeyboardLayoutSetDisplayName(layoutName); return getKeyboardLayoutSetDisplayName(layoutName);
} }
@ -318,17 +289,12 @@ public final class SubtypeLocaleUtils {
@NonNull @NonNull
public static String getKeyboardLayoutSetName(final InputMethodSubtype subtype) { public static String getKeyboardLayoutSetName(final InputMethodSubtype subtype) {
String keyboardLayoutSet = subtype.getExtraValueOf(KEYBOARD_LAYOUT_SET); String keyboardLayoutSet = subtype.getExtraValueOf(KEYBOARD_LAYOUT_SET);
if (keyboardLayoutSet == null) { if (keyboardLayoutSet == null && subtype.isAsciiCapable()) {
// This subtype doesn't have a keyboardLayoutSet extra value, so lookup its keyboard keyboardLayoutSet = QWERTY;
// layout set in sLocaleAndExtraValueToKeyboardLayoutSetMap to keep it compatible with
// pre-JellyBean.
final String key = subtype.getLocale() + ":" + subtype.getExtraValue();
keyboardLayoutSet = sLocaleAndExtraValueToKeyboardLayoutSetMap.get(key);
} }
// TODO: Remove this null check when InputMethodManager.getCurrentInputMethodSubtype is // TODO: Remove this null check when InputMethodManager.getCurrentInputMethodSubtype is fixed.
// fixed.
if (keyboardLayoutSet == null) { if (keyboardLayoutSet == null) {
android.util.Log.w(TAG, "KeyboardLayoutSet not found, use QWERTY: " + Log.w(TAG, "KeyboardLayoutSet not found, use QWERTY: " +
"locale=" + subtype.getLocale() + " extraValue=" + subtype.getExtraValue()); "locale=" + subtype.getLocale() + " extraValue=" + subtype.getExtraValue());
return QWERTY; return QWERTY;
} }

View file

@ -82,51 +82,6 @@
<!-- Description for Arabic (PC) subtype. --> <!-- Description for Arabic (PC) subtype. -->
<string name="subtype_arabic_pc" translatable="false">%s (PC)</string> <string name="subtype_arabic_pc" translatable="false">%s (PC)</string>
<!-- Compatibility map from subtypeLocale:subtypeExtraValue to keyboardLayoutSet -->
<string-array name="locale_and_extra_value_to_keyboard_layout_set_map">
<item>en_US:TrySuppressingImeSwitcher,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>en_GB:TrySuppressingImeSwitcher,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>ar:SupportTouchPositionCorrection,EmojiCapable</item>
<item>arabic</item>
<item>cs:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwertz</item>
<item>da:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>nordic</item>
<item>de:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwertz</item>
<item>es:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>spanish</item>
<item>fi:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>nordic</item>
<item>fr:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>azerty</item>
<item>fr_CA:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>hr:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwertz</item>
<item>hu:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwertz</item>
<item>it:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>iw:SupportTouchPositionCorrection,EmojiCapable</item>
<item>hebrew</item>
<item>nb:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>nordic</item>
<item>nl:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>pl:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
<item>ru:SupportTouchPositionCorrection,EmojiCapable</item>
<item>east_slavic</item>
<item>sr:SupportTouchPositionCorrection,EmojiCapable</item>
<item>south_slavic</item>
<item>sv:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>nordic</item>
<item>tr:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
</string-array>
<!-- permission name as string to avoid issues with debug build --> <!-- permission name as string to avoid issues with debug build -->
<string name="hide_soft_input_permission">org.dslul.openboard.inputmethod.latin.HIDE_SOFT_INPUT</string> <string name="hide_soft_input_permission">org.dslul.openboard.inputmethod.latin.HIDE_SOFT_INPUT</string>
<!-- App slogan--> <!-- App slogan-->

View file

@ -14,36 +14,36 @@
ar: Arabic/arabic ar: Arabic/arabic
ar: Arabic/arabic_pc ar: Arabic/arabic_pc
az_AZ: Azerbaijani (Azerbaijan)/qwerty az_AZ: Azerbaijani (Azerbaijan)/qwerty
be_BY: Belarusian (Belarus)/east_slavic be_BY: Belarusian (Belarus)/be
bg: Bulgarian/bulgarian bg: Bulgarian/bulgarian
bg: Bulgarian/bulgarian_bds bg: Bulgarian/bulgarian_bds
bg: Bulgarian/bulgarian_bekl bg: Bulgarian/bulgarian_bekl
bn_BD: Bengali (Bangladesh)/bengali_unijoy bn_BD: Bengali (Bangladesh)/bengali_unijoy
bn_BD: Bengali (Bangladesh) (Akkhor)/bengali_akkhor bn_BD: Bengali (Bangladesh) (Akkhor)/bengali_akkhor
bn_IN: Bengali (India)/bengali bn_IN: Bengali (India)/bengali
ca: Catalan/spanish ca: Catalan/qwerty+
cs: Czech/qwertz cs: Czech/qwertz
da: Danish/nordic da: Danish/qwerty+
de: German/qwertz de: German/qwertz
de_DE: German (Germany)/german de_DE: German (Germany)/qwertz+
de_CH: German (Switzerland)/swiss de_CH: German (Switzerland)/qwertz+
el: Greek/greek el: Greek/greek
en_AU: English (Australia)/qwerty en_AU: English (Australia)/qwerty
en_IN: English (India)/qwerty en_IN: English (India)/qwerty
en_US: English (United States)/qwerty en_US: English (United States)/qwerty
en_GB: English (Great Britain)/qwerty en_GB: English (Great Britain)/qwerty
eo: Esperanto/spanish eo: Esperanto/qwerty+
es: Spanish/spanish es: Spanish/qwerty+
es_US: Spanish (United States)/spanish es_US: Spanish (United States)/qwerty+
es_419: Spanish (Latin America)/spanish es_419: Spanish (Latin America)/qwerty+
et_EE: Estonian (Estonia)/nordic et_EE: Estonian (Estonia)/qwerty+
eu_ES: Basque (Spain)/spanish eu_ES: Basque (Spain)/qwerty+
fa: Persian/farsi fa: Persian/farsi
fi: Finnish/nordic fi: Finnish/qwerty+
fr: French/azerty fr: French/azerty
fr_CA: French (Canada)/qwerty fr_CA: French (Canada)/qwerty
fr_CH: French (Switzerland)/swiss fr_CH: French (Switzerland)/qwertz+
gl_ES: Galician (Spain)/spanish gl_ES: Galician (Spain)/qwerty+
hi: Hindi/hindi hi: Hindi/hindi
hi: Hindi/hindi_compact hi: Hindi/hindi_compact
hi_ZZ: Hinglish/qwerty # This is a preliminary keyboard layout. hi_ZZ: Hinglish/qwerty # This is a preliminary keyboard layout.
@ -54,22 +54,22 @@
in: Indonesian/qwerty # "id" is the official language code of Indonesian. in: Indonesian/qwerty # "id" is the official language code of Indonesian.
is: Icelandic/qwerty is: Icelandic/qwerty
it: Italian/qwerty it: Italian/qwerty
it_CH: Italian (Switzerland)/swiss it_CH: Italian (Switzerland)/qwertz+
iw: Hebrew/hebrew # "he" is the official language code of Hebrew. iw: Hebrew/hebrew # "he" is the official language code of Hebrew.
ka_GE: Georgian (Georgia)/georgian ka_GE: Georgian (Georgia)/georgian
kk: Kazakh/east_slavic kk: Kazakh/kk
km_KH: Khmer (Cambodia)/khmer km_KH: Khmer (Cambodia)/khmer
kn_IN: Kannada (India)/kannada kn_IN: Kannada (India)/kannada
ky: Kyrgyz/east_slavic ky: Kyrgyz/ky
lo_LA: Lao (Laos)/lao lo_LA: Lao (Laos)/lao
lt: Lithuanian/qwerty lt: Lithuanian/qwerty
lv: Latvian/qwerty lv: Latvian/qwerty
mk: Macedonian/south_slavic mk: Macedonian/mk
ml_IN: Malayalam (India)/malayalam ml_IN: Malayalam (India)/malayalam
mn_MN: Mongolian (Mongolia)/mongolian mn_MN: Mongolian (Mongolia)/mongolian
mr_IN: Marathi (India)/marathi mr_IN: Marathi (India)/marathi
ms_MY: Malay (Malaysia)/qwerty ms_MY: Malay (Malaysia)/qwerty
nb: Norwegian Bokmål/nordic nb: Norwegian Bokmål/qwerty+
ne_NP: Nepali (Nepal) Romanized/nepali_romanized ne_NP: Nepali (Nepal) Romanized/nepali_romanized
ne_NP: Nepali (Nepal) Traditional/nepali_traditional ne_NP: Nepali (Nepal) Traditional/nepali_traditional
nl: Dutch/qwerty nl: Dutch/qwerty
@ -78,23 +78,23 @@
pt_BR: Portuguese (Brazil)/qwerty pt_BR: Portuguese (Brazil)/qwerty
pt_PT: Portuguese (Portugal)/qwerty pt_PT: Portuguese (Portugal)/qwerty
ro: Romanian/qwerty ro: Romanian/qwerty
ru: Russian/east_slavic ru: Russian/ru
si_LK: Sinhala (Sri Lanka)/sinhala # This is a preliminary keyboard layout. si_LK: Sinhala (Sri Lanka)/sinhala # This is a preliminary keyboard layout.
sk: Slovak/qwerty sk: Slovak/qwerty
sl: Slovenian/qwerty sl: Slovenian/qwerty
sr: Serbian/south_slavic sr: Serbian/sr
sr_ZZ: Serbian (Latin)/serbian_qwertz # This is a preliminary keyboard layout. sr_ZZ: Serbian (Latin)/serbian_qwertz # This is a preliminary keyboard layout.
sv: Swedish/nordic sv: Swedish/qwerty+
sw: Swahili/qwerty sw: Swahili/qwerty
ta_IN: Tamil (India)/tamil ta_IN: Tamil (India)/tamil
ta_LK: Tamil (Sri Lanka)/tamil # Disabled in conjunction with si_LK. ta_LK: Tamil (Sri Lanka)/tamil # Disabled in conjunction with si_LK.
ta_SG: Tamil (Singapore)/tamil ta_SG: Tamil (Singapore)/tamil
te_IN: Telugu (India)/telugu te_IN: Telugu (India)/telugu
th: Thai/thai th: Thai/thai
tl: Tagalog/spanish tl: Tagalog/qwerty+
tr: Turkish/qwerty tr: Turkish/qwerty
ur_PK: Urdu Pakistan ur_PK: Urdu Pakistan
uk: Ukrainian/east_slavic uk: Ukrainian/uk
uz_UZ: Uzbek (Uzbekistan)/uzbek # This is a preliminary keyboard layout. uz_UZ: Uzbek (Uzbekistan)/uzbek # This is a preliminary keyboard layout.
vi: Vietnamese/qwerty vi: Vietnamese/qwerty
zu: Zulu/qwerty zu: Zulu/qwerty
@ -144,7 +144,7 @@
android:imeSubtypeLocale="af" android:imeSubtypeLocale="af"
android:languageTag="af" android:languageTag="af"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -153,7 +153,7 @@
android:imeSubtypeLocale="ar" android:imeSubtypeLocale="ar"
android:languageTag="ar" android:languageTag="ar"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=arabic,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -171,7 +171,7 @@
android:imeSubtypeLocale="az_AZ" android:imeSubtypeLocale="az_AZ"
android:languageTag="az-AZ" android:languageTag="az-AZ"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -180,7 +180,7 @@
android:imeSubtypeLocale="be_BY" android:imeSubtypeLocale="be_BY"
android:languageTag="be-BY" android:languageTag="be-BY"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=be,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -243,7 +243,7 @@
android:imeSubtypeLocale="ca" android:imeSubtypeLocale="ca"
android:languageTag="ca" android:languageTag="ca"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -252,7 +252,7 @@
android:imeSubtypeLocale="cs" android:imeSubtypeLocale="cs"
android:languageTag="cs" android:languageTag="cs"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -261,7 +261,7 @@
android:imeSubtypeLocale="da" android:imeSubtypeLocale="da"
android:languageTag="da" android:languageTag="da"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -270,7 +270,7 @@
android:imeSubtypeLocale="de" android:imeSubtypeLocale="de"
android:languageTag="de" android:languageTag="de"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -279,7 +279,7 @@
android:imeSubtypeLocale="de_CH" android:imeSubtypeLocale="de_CH"
android:languageTag="de-CH" android:languageTag="de-CH"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=swiss,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -288,7 +288,7 @@
android:imeSubtypeLocale="de_DE" android:imeSubtypeLocale="de_DE"
android:languageTag="de-DE" android:languageTag="de-DE"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=german,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -306,7 +306,7 @@
android:imeSubtypeLocale="en_IN" android:imeSubtypeLocale="en_IN"
android:languageTag="en-IN" android:languageTag="en-IN"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -315,8 +315,8 @@
android:imeSubtypeLocale="eo" android:imeSubtypeLocale="eo"
android:languageTag="eo" android:languageTag="eo"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=eo,AsciiCapable,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
@ -324,7 +324,7 @@
android:imeSubtypeLocale="es" android:imeSubtypeLocale="es"
android:languageTag="es" android:languageTag="es"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -333,7 +333,7 @@
android:imeSubtypeLocale="es_US" android:imeSubtypeLocale="es_US"
android:languageTag="es-US" android:languageTag="es-US"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -342,7 +342,7 @@
android:imeSubtypeLocale="es_419" android:imeSubtypeLocale="es_419"
android:languageTag="es-419" android:languageTag="es-419"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -351,7 +351,7 @@
android:imeSubtypeLocale="et_EE" android:imeSubtypeLocale="et_EE"
android:languageTag="et-EE" android:languageTag="et-EE"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=nordic,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -360,7 +360,7 @@
android:imeSubtypeLocale="eu_ES" android:imeSubtypeLocale="eu_ES"
android:languageTag="eu-ES" android:languageTag="eu-ES"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -378,7 +378,7 @@
android:imeSubtypeLocale="fi" android:imeSubtypeLocale="fi"
android:languageTag="fi" android:languageTag="fi"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -387,7 +387,7 @@
android:imeSubtypeLocale="fr" android:imeSubtypeLocale="fr"
android:languageTag="fr" android:languageTag="fr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=azerty,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -405,7 +405,7 @@
android:imeSubtypeLocale="fr_CH" android:imeSubtypeLocale="fr_CH"
android:languageTag="fr-CH" android:languageTag="fr-CH"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=swiss,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -414,7 +414,7 @@
android:imeSubtypeLocale="gl_ES" android:imeSubtypeLocale="gl_ES"
android:languageTag="gl-ES" android:languageTag="gl-ES"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -444,7 +444,7 @@
android:imeSubtypeLocale="hi_ZZ" android:imeSubtypeLocale="hi_ZZ"
android:languageTag="hi-ZZ" android:languageTag="hi-ZZ"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,KeyboardLayoutSet=qwerty,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -453,7 +453,7 @@
android:imeSubtypeLocale="hr" android:imeSubtypeLocale="hr"
android:languageTag="hr" android:languageTag="hr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -462,7 +462,7 @@
android:imeSubtypeLocale="hu" android:imeSubtypeLocale="hu"
android:languageTag="hu" android:languageTag="hu"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -481,7 +481,7 @@
android:imeSubtypeLocale="in" android:imeSubtypeLocale="in"
android:languageTag="id" android:languageTag="id"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -490,7 +490,7 @@
android:imeSubtypeLocale="is" android:imeSubtypeLocale="is"
android:languageTag="is" android:languageTag="is"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -508,7 +508,7 @@
android:imeSubtypeLocale="it_CH" android:imeSubtypeLocale="it_CH"
android:languageTag="it-CH" android:languageTag="it-CH"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=swiss,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. --> <!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. -->
@ -518,7 +518,7 @@
android:imeSubtypeLocale="iw" android:imeSubtypeLocale="iw"
android:languageTag="he" android:languageTag="he"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=hebrew,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -536,7 +536,7 @@
android:imeSubtypeLocale="kk" android:imeSubtypeLocale="kk"
android:languageTag="kk" android:languageTag="kk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=kk,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -590,7 +590,7 @@
android:imeSubtypeLocale="ky" android:imeSubtypeLocale="ky"
android:languageTag="ky" android:languageTag="ky"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=ky,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -616,7 +616,7 @@
android:imeSubtypeLocale="lt" android:imeSubtypeLocale="lt"
android:languageTag="lt" android:languageTag="lt"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -625,7 +625,7 @@
android:imeSubtypeLocale="lv" android:imeSubtypeLocale="lv"
android:languageTag="lv" android:languageTag="lv"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -634,7 +634,7 @@
android:imeSubtypeLocale="mk" android:imeSubtypeLocale="mk"
android:languageTag="mk" android:languageTag="mk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=south_slavic,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=mk,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -670,7 +670,7 @@
android:imeSubtypeLocale="ms_MY" android:imeSubtypeLocale="ms_MY"
android:languageTag="ms-MY" android:languageTag="ms-MY"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -679,7 +679,7 @@
android:imeSubtypeLocale="nb" android:imeSubtypeLocale="nb"
android:languageTag="nb" android:languageTag="nb"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -733,7 +733,7 @@
android:imeSubtypeLocale="pt_BR" android:imeSubtypeLocale="pt_BR"
android:languageTag="pt-BR" android:languageTag="pt-BR"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -742,7 +742,7 @@
android:imeSubtypeLocale="pt_PT" android:imeSubtypeLocale="pt_PT"
android:languageTag="pt-PT" android:languageTag="pt-PT"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -751,7 +751,7 @@
android:imeSubtypeLocale="ro" android:imeSubtypeLocale="ro"
android:languageTag="ro" android:languageTag="ro"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -760,13 +760,13 @@
android:imeSubtypeLocale="ru" android:imeSubtypeLocale="ru"
android:languageTag="ru" android:languageTag="ru"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="SKeyboardLayoutSet=ru,upportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<!-- TODO: This Sinhala keyboard is a preliminary layout. <!-- TODO: This Sinhala keyboard is a preliminary layout.
This isn't based on the final specification. --> This isn't based on the final specification. -->
<!-- si_LK is currently disabled due to lack of combination rules. <!-- si_LK is currently disabled due to lack of combination rules. -->
<subtype android:icon="@drawable/ic_ime_switcher_dark" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
android:subtypeId="0x5c6b3bde" android:subtypeId="0x5c6b3bde"
android:imeSubtypeLocale="si_LK" android:imeSubtypeLocale="si_LK"
@ -775,14 +775,13 @@
android:imeSubtypeExtraValue="KeyboardLayoutSet=sinhala,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=sinhala,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
-->
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
android:label="@string/subtype_generic" android:label="@string/subtype_generic"
android:subtypeId="0x8e94d413" android:subtypeId="0x8e94d413"
android:imeSubtypeLocale="sk" android:imeSubtypeLocale="sk"
android:languageTag="sk" android:languageTag="sk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -791,7 +790,7 @@
android:imeSubtypeLocale="sl" android:imeSubtypeLocale="sl"
android:languageTag="sl" android:languageTag="sl"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -800,7 +799,7 @@
android:imeSubtypeLocale="sr" android:imeSubtypeLocale="sr"
android:languageTag="sr" android:languageTag="sr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=sr,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<!-- TODO: This Serbian Latin keyboard is a preliminary layout. <!-- TODO: This Serbian Latin keyboard is a preliminary layout.
@ -811,7 +810,7 @@
android:imeSubtypeLocale="sr_ZZ" android:imeSubtypeLocale="sr_ZZ"
android:languageTag="sr-Latn" android:languageTag="sr-Latn"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=serbian_qwertz,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -820,7 +819,7 @@
android:imeSubtypeLocale="sv" android:imeSubtypeLocale="sv"
android:languageTag="sv" android:languageTag="sv"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -829,7 +828,7 @@
android:imeSubtypeLocale="sw" android:imeSubtypeLocale="sw"
android:languageTag="sw" android:languageTag="sw"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -886,7 +885,7 @@
android:imeSubtypeLocale="tl" android:imeSubtypeLocale="tl"
android:languageTag="fil" android:languageTag="fil"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=spanish,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -895,7 +894,7 @@
android:imeSubtypeLocale="tr" android:imeSubtypeLocale="tr"
android:languageTag="tr" android:languageTag="tr"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -904,7 +903,7 @@
android:imeSubtypeLocale="uk" android:imeSubtypeLocale="uk"
android:languageTag="uk" android:languageTag="uk"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic,EmojiCapable" android:imeSubtypeExtraValue="KeyboardLayoutSet=uk,EmojiCapable"
android:isAsciiCapable="false" android:isAsciiCapable="false"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -933,7 +932,7 @@
android:imeSubtypeLocale="vi" android:imeSubtypeLocale="vi"
android:languageTag="vi" android:languageTag="vi"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -942,7 +941,7 @@
android:imeSubtypeLocale="zu" android:imeSubtypeLocale="zu"
android:languageTag="zu" android:languageTag="zu"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<subtype android:icon="@drawable/ic_ime_switcher" <subtype android:icon="@drawable/ic_ime_switcher"
@ -951,7 +950,7 @@
android:imeSubtypeLocale="zz" android:imeSubtypeLocale="zz"
android:languageTag="zz" android:languageTag="zz"
android:imeSubtypeMode="keyboard" android:imeSubtypeMode="keyboard"
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable,EmojiCapable" android:imeSubtypeExtraValue="AsciiCapable,EnabledWhenDefaultIsNotAsciiCapable,EmojiCapable"
android:isAsciiCapable="true" android:isAsciiCapable="true"
/> />
<!-- Emoji subtype has to be an addtional subtype added at boot time because ICS doesn't <!-- Emoji subtype has to be an addtional subtype added at boot time because ICS doesn't