mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-14 22:12:46 +00:00
change what can be stored in KeyboardLayoutSet subtype extra value
and some more preparations for adjustments related to language/layout settings upgrade
This commit is contained in:
parent
f2f7426ee5
commit
201b430362
25 changed files with 313 additions and 371 deletions
|
@ -11,7 +11,7 @@ object HangulEventDecoder {
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun decodeHardwareKeyEvent(subtype: RichInputMethodSubtype, event: KeyEvent, defaultEvent: () -> Event): Event {
|
fun decodeHardwareKeyEvent(subtype: RichInputMethodSubtype, event: KeyEvent, defaultEvent: () -> Event): Event {
|
||||||
val layout = LAYOUTS[subtype.keyboardLayoutSetName] ?: return defaultEvent()
|
val layout = LAYOUTS[subtype.mainLayoutName] ?: return defaultEvent()
|
||||||
val codePoint = layout[event.keyCode]?.let { if (event.isShiftPressed) it.second else it.first } ?: return defaultEvent()
|
val codePoint = layout[event.keyCode]?.let { if (event.isShiftPressed) it.second else it.first } ?: return defaultEvent()
|
||||||
val hardwareEvent = Event.createHardwareKeypressEvent(codePoint, event.keyCode, event.metaState, null, event.repeatCount != 0)
|
val hardwareEvent = Event.createHardwareKeypressEvent(codePoint, event.keyCode, event.metaState, null, event.repeatCount != 0)
|
||||||
return decodeSoftwareKeyEvent(hardwareEvent)
|
return decodeSoftwareKeyEvent(hardwareEvent)
|
||||||
|
|
|
@ -236,7 +236,7 @@ public final class KeyboardLayoutSet {
|
||||||
final boolean asciiCapable = subtype.getRawSubtype().isAsciiCapable();
|
final boolean asciiCapable = subtype.getRawSubtype().isAsciiCapable();
|
||||||
final boolean forceAscii = (mParams.mEditorInfo.imeOptions & EditorInfo.IME_FLAG_FORCE_ASCII) != 0;
|
final boolean forceAscii = (mParams.mEditorInfo.imeOptions & EditorInfo.IME_FLAG_FORCE_ASCII) != 0;
|
||||||
mParams.mSubtype = (forceAscii && !asciiCapable)
|
mParams.mSubtype = (forceAscii && !asciiCapable)
|
||||||
? RichInputMethodSubtype.getNoLanguageSubtype()
|
? RichInputMethodSubtype.Companion.getNoLanguageSubtype()
|
||||||
: subtype;
|
: subtype;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -326,8 +326,8 @@ public final class KeyboardLayoutSet {
|
||||||
public static KeyboardId getFakeKeyboardId(final int elementId) {
|
public static KeyboardId getFakeKeyboardId(final int elementId) {
|
||||||
final Params params = new Params();
|
final Params params = new Params();
|
||||||
params.mEditorInfo = new EditorInfo();
|
params.mEditorInfo = new EditorInfo();
|
||||||
params.mSubtype = RichInputMethodSubtype.getEmojiSubtype();
|
params.mSubtype = RichInputMethodSubtype.Companion.getEmojiSubtype();
|
||||||
params.mSubtype.getKeyboardLayoutSetName();
|
params.mSubtype.getMainLayoutName();
|
||||||
return new KeyboardId(elementId, params);
|
return new KeyboardId(elementId, params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
try {
|
try {
|
||||||
final InputMethodSubtype qwerty = AdditionalSubtypeUtils.createEmojiCapableAdditionalSubtype(mRichImm.getCurrentSubtypeLocale(), "qwerty", true);
|
final InputMethodSubtype qwerty = AdditionalSubtypeUtils.createEmojiCapableAdditionalSubtype(mRichImm.getCurrentSubtypeLocale(), "qwerty", true);
|
||||||
mKeyboardLayoutSet = builder.setKeyboardGeometry(keyboardWidth, keyboardHeight)
|
mKeyboardLayoutSet = builder.setKeyboardGeometry(keyboardWidth, keyboardHeight)
|
||||||
.setSubtype(new RichInputMethodSubtype(qwerty))
|
.setSubtype(RichInputMethodSubtype.Companion.get(qwerty))
|
||||||
.setVoiceInputKeyEnabled(settingsValues.mShowsVoiceInputKey)
|
.setVoiceInputKeyEnabled(settingsValues.mShowsVoiceInputKey)
|
||||||
.setNumberRowEnabled(settingsValues.mShowsNumberRow)
|
.setNumberRowEnabled(settingsValues.mShowsNumberRow)
|
||||||
.setLanguageSwitchKeyEnabled(settingsValues.isLanguageSwitchKeyEnabled())
|
.setLanguageSwitchKeyEnabled(settingsValues.isLanguageSwitchKeyEnabled())
|
||||||
|
|
|
@ -89,7 +89,7 @@ public final class EmojiPalettesView extends LinearLayout
|
||||||
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(context, null);
|
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(context, null);
|
||||||
final Resources res = context.getResources();
|
final Resources res = context.getResources();
|
||||||
mEmojiLayoutParams = new EmojiLayoutParams(res);
|
mEmojiLayoutParams = new EmojiLayoutParams(res);
|
||||||
builder.setSubtype(RichInputMethodSubtype.getEmojiSubtype());
|
builder.setSubtype(RichInputMethodSubtype.Companion.getEmojiSubtype());
|
||||||
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getInstance().getCurrent()),
|
builder.setKeyboardGeometry(ResourceUtils.getKeyboardWidth(context, Settings.getInstance().getCurrent()),
|
||||||
mEmojiLayoutParams.getEmojiKeyboardHeight());
|
mEmojiLayoutParams.getEmojiKeyboardHeight());
|
||||||
final KeyboardLayoutSet layoutSet = builder.build();
|
final KeyboardLayoutSet layoutSet = builder.build();
|
||||||
|
|
|
@ -311,8 +311,8 @@ class KeyboardParser(private val params: KeyboardParams, private val context: Co
|
||||||
}
|
}
|
||||||
|
|
||||||
// some layouts have different number layout, and there we don't want the numbers on the top row
|
// some layouts have different number layout, and there we don't want the numbers on the top row
|
||||||
// todo: actually should not be in here, but in subtype extra values
|
// todo: this should be derived from main layout and popup / hint order settings
|
||||||
private fun hasNumbersOnTopRow() = params.mId.mSubtype.keyboardLayoutSetName !in listOf("pcqwerty", "lao", "thai", "korean_sebeolsik_390", "korean_sebeolsik_final")
|
private fun hasNumbersOnTopRow() = params.mId.mSubtype.mainLayoutName !in listOf("pcqwerty", "lao", "thai", "korean_sebeolsik_390", "korean_sebeolsik_final")
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "KeyboardParser"
|
private const val TAG = "KeyboardParser"
|
||||||
|
|
|
@ -123,8 +123,8 @@ object RawKeyboardParser {
|
||||||
simpleKeyData.mapIndexedTo(mutableListOf()) { i, row ->
|
simpleKeyData.mapIndexedTo(mutableListOf()) { i, row ->
|
||||||
val newRow = row.toMutableList()
|
val newRow = row.toMutableList()
|
||||||
if (params.mId.isAlphabetKeyboard
|
if (params.mId.isAlphabetKeyboard
|
||||||
&& params.mId.mSubtype.keyboardLayoutSetName.endsWith("+")
|
&& params.mId.mSubtype.mainLayoutName.endsWith("+")
|
||||||
&& "$layoutName+" == params.mId.mSubtype.keyboardLayoutSetName
|
&& "$layoutName+" == params.mId.mSubtype.mainLayoutName
|
||||||
) {
|
) {
|
||||||
params.mLocaleKeyboardInfos.getExtraKeys(i+1)?.let { newRow.addAll(it) }
|
params.mLocaleKeyboardInfos.getExtraKeys(i+1)?.let { newRow.addAll(it) }
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ object RawKeyboardParser {
|
||||||
KeyboardId.ELEMENT_PHONE_SYMBOLS -> LAYOUT_PHONE_SYMBOLS
|
KeyboardId.ELEMENT_PHONE_SYMBOLS -> LAYOUT_PHONE_SYMBOLS
|
||||||
KeyboardId.ELEMENT_EMOJI_BOTTOM_ROW -> LAYOUT_EMOJI_BOTTOM_ROW
|
KeyboardId.ELEMENT_EMOJI_BOTTOM_ROW -> LAYOUT_EMOJI_BOTTOM_ROW
|
||||||
KeyboardId.ELEMENT_CLIPBOARD_BOTTOM_ROW -> LAYOUT_CLIPBOARD_BOTTOM_ROW
|
KeyboardId.ELEMENT_CLIPBOARD_BOTTOM_ROW -> LAYOUT_CLIPBOARD_BOTTOM_ROW
|
||||||
else -> params.mId.mSubtype.keyboardLayoutSetName.substringBeforeLast("+")
|
else -> params.mId.mSubtype.mainLayoutName.substringBeforeLast("+")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFunctionalLayoutName(params: KeyboardParams, context: Context): String {
|
private fun getFunctionalLayoutName(params: KeyboardParams, context: Context): String {
|
||||||
|
|
|
@ -857,7 +857,7 @@ public class LatinIME extends InputMethodService implements
|
||||||
public void onCurrentInputMethodSubtypeChanged(final InputMethodSubtype subtype) {
|
public void onCurrentInputMethodSubtypeChanged(final InputMethodSubtype subtype) {
|
||||||
// Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged()
|
// Note that the calling sequence of onCreate() and onCurrentInputMethodSubtypeChanged()
|
||||||
// is not guaranteed. It may even be called at the same time on a different thread.
|
// is not guaranteed. It may even be called at the same time on a different thread.
|
||||||
if (subtype.hashCode() == 0xf000000f) {
|
if (subtype.hashCode() == 0x7000000f) {
|
||||||
// For some reason sometimes the system wants to set the dummy subtype, which messes with the currently enabled subtype.
|
// For some reason sometimes the system wants to set the dummy subtype, which messes with the currently enabled subtype.
|
||||||
// Now that the dummy subtype has a fixed id, we can easily avoid enabling it.
|
// Now that the dummy subtype has a fixed id, we can easily avoid enabling it.
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -206,14 +206,14 @@ public class RichInputMethodManager {
|
||||||
updateCurrentSubtype(newSubtype);
|
updateCurrentSubtype(newSubtype);
|
||||||
updateShortcutIme();
|
updateShortcutIme();
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.w(TAG, "onSubtypeChanged: " + mCurrentRichInputMethodSubtype.getNameForLogging());
|
Log.w(TAG, "onSubtypeChanged: " + mCurrentRichInputMethodSubtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RichInputMethodSubtype sForcedSubtypeForTesting = null;
|
private static RichInputMethodSubtype sForcedSubtypeForTesting = null;
|
||||||
|
|
||||||
static void forceSubtype(@NonNull final InputMethodSubtype subtype) {
|
static void forceSubtype(@NonNull final InputMethodSubtype subtype) {
|
||||||
sForcedSubtypeForTesting = RichInputMethodSubtype.getRichInputMethodSubtype(subtype);
|
sForcedSubtypeForTesting = RichInputMethodSubtype.Companion.get(subtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@ -357,7 +357,7 @@ public class RichInputMethodManager {
|
||||||
|
|
||||||
private void updateCurrentSubtype(final InputMethodSubtype subtype) {
|
private void updateCurrentSubtype(final InputMethodSubtype subtype) {
|
||||||
SubtypeSettingsKt.setSelectedSubtype(KtxKt.prefs(mContext), subtype);
|
SubtypeSettingsKt.setSelectedSubtype(KtxKt.prefs(mContext), subtype);
|
||||||
mCurrentRichInputMethodSubtype = RichInputMethodSubtype.getRichInputMethodSubtype(subtype);
|
mCurrentRichInputMethodSubtype = RichInputMethodSubtype.Companion.get(subtype);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canSwitchLanguage() {
|
public static boolean canSwitchLanguage() {
|
||||||
|
|
|
@ -1,220 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2014 The Android Open Source Project
|
|
||||||
* modified
|
|
||||||
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package helium314.keyboard.latin;
|
|
||||||
|
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
|
||||||
|
|
||||||
import helium314.keyboard.latin.common.Constants;
|
|
||||||
import helium314.keyboard.latin.common.LocaleUtils;
|
|
||||||
import helium314.keyboard.latin.utils.CustomLayoutUtilsKt;
|
|
||||||
import helium314.keyboard.latin.utils.Log;
|
|
||||||
import helium314.keyboard.latin.utils.SubtypeLocaleUtils;
|
|
||||||
import helium314.keyboard.latin.utils.SubtypeUtilsKt;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import static helium314.keyboard.latin.common.Constants.Subtype.KEYBOARD_MODE;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enrichment class for InputMethodSubtype to enable concurrent multi-lingual input.
|
|
||||||
* <p>
|
|
||||||
* Right now, this returns the extra value of its primary subtype.
|
|
||||||
*/
|
|
||||||
// non final for easy mocking.
|
|
||||||
public class RichInputMethodSubtype {
|
|
||||||
private static final String TAG = RichInputMethodSubtype.class.getSimpleName();
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private final InputMethodSubtype mSubtype;
|
|
||||||
@NonNull
|
|
||||||
private final Locale mLocale;
|
|
||||||
// The subtype is considered RTL if the language of the main subtype is RTL.
|
|
||||||
// Cached because it might get read frequently, e.g. when moving pointer with space bar
|
|
||||||
private final boolean mIsRtl;
|
|
||||||
|
|
||||||
public RichInputMethodSubtype(@NonNull final InputMethodSubtype subtype) {
|
|
||||||
mSubtype = subtype;
|
|
||||||
mLocale = SubtypeUtilsKt.locale(mSubtype);
|
|
||||||
mIsRtl = LocaleUtils.isRtlLanguage(mLocale);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extra values are determined by the primary subtype. This is probably right, but
|
|
||||||
// we may have to revisit this later.
|
|
||||||
public String getExtraValueOf(@NonNull final String key) {
|
|
||||||
return mSubtype.getExtraValueOf(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasExtraValue(@NonNull final String key) {
|
|
||||||
return mSubtype.containsExtraValueKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The mode is also determined by the primary subtype.
|
|
||||||
public String getMode() {
|
|
||||||
return mSubtype.getMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNoLanguage() {
|
|
||||||
return SubtypeLocaleUtils.NO_LANGUAGE.equals(mLocale.getLanguage());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCustom() {
|
|
||||||
return getKeyboardLayoutSetName().startsWith(CustomLayoutUtilsKt.CUSTOM_LAYOUT_PREFIX);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getNameForLogging() {
|
|
||||||
return toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// InputMethodSubtype's display name for spacebar text in its locale.
|
|
||||||
// isAdditionalSubtype (T=true, F=false)
|
|
||||||
// locale layout | Middle Full
|
|
||||||
// ------ ------- - --------- ----------------------
|
|
||||||
// en_US qwerty F English English (US) exception
|
|
||||||
// en_GB qwerty F English English (UK) exception
|
|
||||||
// es_US spanish F Español Español (EE.UU.) exception
|
|
||||||
// fr azerty F Français Français
|
|
||||||
// fr_CA qwerty F Français Français (Canada)
|
|
||||||
// fr_CH swiss F Français Français (Suisse)
|
|
||||||
// de qwertz F Deutsch Deutsch
|
|
||||||
// de_CH swiss T Deutsch Deutsch (Schweiz)
|
|
||||||
// zz qwerty F QWERTY QWERTY
|
|
||||||
// fr qwertz T Français Français
|
|
||||||
// de qwerty T Deutsch Deutsch
|
|
||||||
// en_US azerty T English English (US)
|
|
||||||
// zz azerty T AZERTY AZERTY
|
|
||||||
// Get the RichInputMethodSubtype's full display name in its locale.
|
|
||||||
@NonNull
|
|
||||||
public String getFullDisplayName() {
|
|
||||||
if (isNoLanguage()) {
|
|
||||||
return SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(mSubtype);
|
|
||||||
}
|
|
||||||
return SubtypeLocaleUtils.getSubtypeLocaleDisplayName(mLocale);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the RichInputMethodSubtype's middle display name in its locale.
|
|
||||||
@NonNull
|
|
||||||
public String getMiddleDisplayName() {
|
|
||||||
if (isNoLanguage()) {
|
|
||||||
return SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(mSubtype);
|
|
||||||
}
|
|
||||||
return SubtypeLocaleUtils.getSubtypeLanguageDisplayName(mLocale);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(final Object o) {
|
|
||||||
if (!(o instanceof RichInputMethodSubtype)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final RichInputMethodSubtype other = (RichInputMethodSubtype)o;
|
|
||||||
return mSubtype.equals(other.mSubtype) && mLocale.equals(other.mLocale);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return mSubtype.hashCode() + mLocale.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "Multi-lingual subtype: " + mSubtype + ", " + mLocale;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public Locale getLocale() {
|
|
||||||
return mLocale;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRtlSubtype() {
|
|
||||||
return mIsRtl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: remove this method
|
|
||||||
@NonNull
|
|
||||||
public InputMethodSubtype getRawSubtype() { return mSubtype; }
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public String getKeyboardLayoutSetName() {
|
|
||||||
return SubtypeLocaleUtils.getKeyboardLayoutSetName(mSubtype);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RichInputMethodSubtype getRichInputMethodSubtype(
|
|
||||||
@Nullable final InputMethodSubtype subtype) {
|
|
||||||
if (subtype == null) {
|
|
||||||
return getNoLanguageSubtype();
|
|
||||||
} else {
|
|
||||||
return new RichInputMethodSubtype(subtype);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dummy no language QWERTY subtype. See {@link R.xml.method}.
|
|
||||||
private static final int SUBTYPE_ID_OF_DUMMY_NO_LANGUAGE_SUBTYPE = 0xdde0bfd3;
|
|
||||||
private static final String EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE =
|
|
||||||
"KeyboardLayoutSet=" + SubtypeLocaleUtils.QWERTY
|
|
||||||
+ "," + Constants.Subtype.ExtraValue.ASCII_CAPABLE
|
|
||||||
+ "," + Constants.Subtype.ExtraValue.ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE
|
|
||||||
+ "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE;
|
|
||||||
@NonNull
|
|
||||||
private static final RichInputMethodSubtype DUMMY_NO_LANGUAGE_SUBTYPE =
|
|
||||||
new RichInputMethodSubtype(new InputMethodSubtype.InputMethodSubtypeBuilder()
|
|
||||||
.setSubtypeNameResId(R.string.subtype_no_language_qwerty)
|
|
||||||
.setSubtypeIconResId(R.drawable.ic_ime_switcher)
|
|
||||||
.setSubtypeLocale(SubtypeLocaleUtils.NO_LANGUAGE)
|
|
||||||
.setSubtypeMode(KEYBOARD_MODE)
|
|
||||||
.setSubtypeExtraValue(EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE)
|
|
||||||
.setIsAuxiliary(false)
|
|
||||||
.setOverridesImplicitlyEnabledSubtype(false)
|
|
||||||
.setSubtypeId(SUBTYPE_ID_OF_DUMMY_NO_LANGUAGE_SUBTYPE)
|
|
||||||
.setIsAsciiCapable(true)
|
|
||||||
.build());
|
|
||||||
|
|
||||||
// Caveat: We probably should remove this when we add an Emoji subtype in {@link R.xml.method}.
|
|
||||||
// Dummy Emoji subtype. See {@link R.xml.method}.
|
|
||||||
private static final int SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE = 0xd78b2ed0;
|
|
||||||
private static final String EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE =
|
|
||||||
"KeyboardLayoutSet=" + SubtypeLocaleUtils.EMOJI
|
|
||||||
+ "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE;
|
|
||||||
@NonNull
|
|
||||||
private static final RichInputMethodSubtype DUMMY_EMOJI_SUBTYPE =
|
|
||||||
new RichInputMethodSubtype(new InputMethodSubtype.InputMethodSubtypeBuilder()
|
|
||||||
.setSubtypeNameResId(R.string.subtype_emoji)
|
|
||||||
.setSubtypeIconResId(R.drawable.ic_ime_switcher)
|
|
||||||
.setSubtypeLocale(SubtypeLocaleUtils.NO_LANGUAGE)
|
|
||||||
.setSubtypeMode(KEYBOARD_MODE)
|
|
||||||
.setSubtypeExtraValue(EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE)
|
|
||||||
.setIsAuxiliary(false)
|
|
||||||
.setOverridesImplicitlyEnabledSubtype(false)
|
|
||||||
.setSubtypeId(SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE)
|
|
||||||
.build());
|
|
||||||
private static RichInputMethodSubtype sNoLanguageSubtype;
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public static RichInputMethodSubtype getNoLanguageSubtype() {
|
|
||||||
RichInputMethodSubtype noLanguageSubtype = sNoLanguageSubtype;
|
|
||||||
if (noLanguageSubtype == null) {
|
|
||||||
final InputMethodSubtype rawNoLanguageSubtype = RichInputMethodManager.getInstance()
|
|
||||||
.findSubtypeByLocaleAndKeyboardLayoutSet(LocaleUtils.constructLocale(SubtypeLocaleUtils.NO_LANGUAGE), SubtypeLocaleUtils.QWERTY);
|
|
||||||
if (rawNoLanguageSubtype != null) {
|
|
||||||
noLanguageSubtype = new RichInputMethodSubtype(rawNoLanguageSubtype);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (noLanguageSubtype != null) {
|
|
||||||
sNoLanguageSubtype = noLanguageSubtype;
|
|
||||||
return noLanguageSubtype;
|
|
||||||
}
|
|
||||||
Log.w(TAG, "Can't find any language with QWERTY subtype");
|
|
||||||
Log.w(TAG, "No input method subtype found; returning dummy subtype: " + DUMMY_NO_LANGUAGE_SUBTYPE);
|
|
||||||
return DUMMY_NO_LANGUAGE_SUBTYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
|
||||||
public static RichInputMethodSubtype getEmojiSubtype() {
|
|
||||||
return DUMMY_EMOJI_SUBTYPE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 The Android Open Source Project
|
||||||
|
* modified
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
|
||||||
|
*/
|
||||||
|
package helium314.keyboard.latin
|
||||||
|
|
||||||
|
import android.view.inputmethod.InputMethodSubtype
|
||||||
|
import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder
|
||||||
|
import helium314.keyboard.latin.common.Constants
|
||||||
|
import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET
|
||||||
|
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
||||||
|
import helium314.keyboard.latin.common.LocaleUtils.isRtlLanguage
|
||||||
|
import helium314.keyboard.latin.utils.CUSTOM_LAYOUT_PREFIX
|
||||||
|
import helium314.keyboard.latin.utils.LayoutType
|
||||||
|
import helium314.keyboard.latin.utils.Log
|
||||||
|
import helium314.keyboard.latin.utils.SubtypeLocaleUtils
|
||||||
|
import helium314.keyboard.latin.utils.locale
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enrichment class for InputMethodSubtype that extracts settings from extra values
|
||||||
|
*/
|
||||||
|
class RichInputMethodSubtype private constructor(val rawSubtype: InputMethodSubtype) {
|
||||||
|
val locale: Locale = rawSubtype.locale()
|
||||||
|
|
||||||
|
// The subtype is considered RTL if the language of the main subtype is RTL.
|
||||||
|
val isRtlSubtype: Boolean = isRtlLanguage(locale)
|
||||||
|
|
||||||
|
fun getExtraValueOf(key: String): String? = rawSubtype.getExtraValueOf(key)
|
||||||
|
|
||||||
|
fun hasExtraValue(key: String): Boolean = rawSubtype.containsExtraValueKey(key)
|
||||||
|
|
||||||
|
val isNoLanguage: Boolean get() = SubtypeLocaleUtils.NO_LANGUAGE == locale.language
|
||||||
|
|
||||||
|
val mainLayoutName: String get() = layouts[LayoutType.MAIN] ?: "qwerty"
|
||||||
|
|
||||||
|
val layouts = LayoutType.getLayoutMap(getExtraValueOf(KEYBOARD_LAYOUT_SET) ?: "")
|
||||||
|
|
||||||
|
val isCustom: Boolean get() = mainLayoutName.startsWith(CUSTOM_LAYOUT_PREFIX)
|
||||||
|
|
||||||
|
val fullDisplayName: String get() {
|
||||||
|
if (isNoLanguage) {
|
||||||
|
return SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(rawSubtype)!!
|
||||||
|
}
|
||||||
|
return SubtypeLocaleUtils.getSubtypeLocaleDisplayName(locale)
|
||||||
|
}
|
||||||
|
|
||||||
|
val middleDisplayName: String
|
||||||
|
// Get the RichInputMethodSubtype's middle display name in its locale.
|
||||||
|
get() {
|
||||||
|
if (isNoLanguage) {
|
||||||
|
return SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(rawSubtype)!!
|
||||||
|
}
|
||||||
|
return SubtypeLocaleUtils.getSubtypeLanguageDisplayName(locale)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (other !is RichInputMethodSubtype) return false
|
||||||
|
return rawSubtype == other.rawSubtype && locale == other.locale
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
return rawSubtype.hashCode() + locale.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = rawSubtype.extraValue
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val TAG: String = RichInputMethodSubtype::class.java.simpleName
|
||||||
|
|
||||||
|
fun get(subtype: InputMethodSubtype?): RichInputMethodSubtype =
|
||||||
|
if (subtype == null) noLanguageSubtype
|
||||||
|
else RichInputMethodSubtype(subtype)
|
||||||
|
|
||||||
|
// Dummy no language QWERTY subtype. See method_dummy.xml}.
|
||||||
|
private const val EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE = ("KeyboardLayoutSet=" + SubtypeLocaleUtils.QWERTY
|
||||||
|
+ "," + Constants.Subtype.ExtraValue.ASCII_CAPABLE
|
||||||
|
+ "," + Constants.Subtype.ExtraValue.ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE
|
||||||
|
+ "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE)
|
||||||
|
private val DUMMY_NO_LANGUAGE_SUBTYPE = RichInputMethodSubtype(
|
||||||
|
InputMethodSubtypeBuilder()
|
||||||
|
.setSubtypeNameResId(R.string.subtype_no_language_qwerty)
|
||||||
|
.setSubtypeIconResId(R.drawable.ic_ime_switcher)
|
||||||
|
.setSubtypeLocale(SubtypeLocaleUtils.NO_LANGUAGE)
|
||||||
|
.setSubtypeMode(Constants.Subtype.KEYBOARD_MODE)
|
||||||
|
.setSubtypeExtraValue(EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE)
|
||||||
|
.setIsAuxiliary(false)
|
||||||
|
.setOverridesImplicitlyEnabledSubtype(false)
|
||||||
|
.setSubtypeId(0x7000000f)
|
||||||
|
.setIsAsciiCapable(true)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
|
||||||
|
// Caveat: We probably should remove this when we add an Emoji subtype in {@link R.xml.method}.
|
||||||
|
// Dummy Emoji subtype. See {@link R.xml.method}.
|
||||||
|
private const val SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE = -0x2874d130
|
||||||
|
private const val EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE = ("KeyboardLayoutSet=" + SubtypeLocaleUtils.EMOJI
|
||||||
|
+ "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE)
|
||||||
|
val emojiSubtype: RichInputMethodSubtype = RichInputMethodSubtype(
|
||||||
|
InputMethodSubtypeBuilder()
|
||||||
|
.setSubtypeNameResId(R.string.subtype_emoji)
|
||||||
|
.setSubtypeIconResId(R.drawable.ic_ime_switcher)
|
||||||
|
.setSubtypeLocale(SubtypeLocaleUtils.NO_LANGUAGE)
|
||||||
|
.setSubtypeMode(Constants.Subtype.KEYBOARD_MODE)
|
||||||
|
.setSubtypeExtraValue(EXTRA_VALUE_OF_DUMMY_EMOJI_SUBTYPE)
|
||||||
|
.setIsAuxiliary(false)
|
||||||
|
.setOverridesImplicitlyEnabledSubtype(false)
|
||||||
|
.setSubtypeId(SUBTYPE_ID_OF_DUMMY_EMOJI_SUBTYPE)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
private var sNoLanguageSubtype: RichInputMethodSubtype? = null
|
||||||
|
|
||||||
|
val noLanguageSubtype: RichInputMethodSubtype get() {
|
||||||
|
sNoLanguageSubtype?.let { return it }
|
||||||
|
var noLanguageSubtype = sNoLanguageSubtype
|
||||||
|
val rawNoLanguageSubtype = RichInputMethodManager.getInstance()
|
||||||
|
.findSubtypeByLocaleAndKeyboardLayoutSet(
|
||||||
|
SubtypeLocaleUtils.NO_LANGUAGE.constructLocale(),
|
||||||
|
SubtypeLocaleUtils.QWERTY
|
||||||
|
)
|
||||||
|
if (rawNoLanguageSubtype != null) {
|
||||||
|
noLanguageSubtype = RichInputMethodSubtype(rawNoLanguageSubtype)
|
||||||
|
}
|
||||||
|
if (noLanguageSubtype != null) {
|
||||||
|
sNoLanguageSubtype = noLanguageSubtype
|
||||||
|
return noLanguageSubtype
|
||||||
|
}
|
||||||
|
Log.w(TAG, "Can't find any language with QWERTY subtype")
|
||||||
|
Log.w(TAG, "No input method subtype found; returning dummy subtype: $DUMMY_NO_LANGUAGE_SUBTYPE")
|
||||||
|
return DUMMY_NO_LANGUAGE_SUBTYPE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,35 +41,20 @@ public final class Constants {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Subtype {
|
public static final class Subtype {
|
||||||
/**
|
/** The subtype mode used to indicate that the subtype is a keyboard. */
|
||||||
* The subtype mode used to indicate that the subtype is a keyboard.
|
|
||||||
*/
|
|
||||||
public static final String KEYBOARD_MODE = "keyboard";
|
public static final String KEYBOARD_MODE = "keyboard";
|
||||||
|
|
||||||
// some extra values:
|
// some extra values:
|
||||||
// TrySuppressingImeSwitcher: not documented, but used in Android source
|
// 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?
|
// 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 {
|
||||||
/**
|
/** Indicates that this subtype is capable of entering ASCII characters (not used, but recommended for Android 9 and older). */
|
||||||
* The subtype extra value used to indicate that this subtype is capable of
|
|
||||||
* entering ASCII characters.
|
|
||||||
*/
|
|
||||||
public static final String ASCII_CAPABLE = "AsciiCapable";
|
public static final String ASCII_CAPABLE = "AsciiCapable";
|
||||||
|
|
||||||
/**
|
/** Indicates that this subtype is enabled when the default subtype is not marked as ascii capable (used where?). */
|
||||||
* The subtype extra value used to indicate that this subtype is enabled
|
public static final String ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE = "EnabledWhenDefaultIsNotAsciiCapable";
|
||||||
* when the default subtype is not marked as ascii capable.
|
|
||||||
*/
|
|
||||||
public static final String ENABLED_WHEN_DEFAULT_IS_NOT_ASCII_CAPABLE =
|
|
||||||
"EnabledWhenDefaultIsNotAsciiCapable";
|
|
||||||
|
|
||||||
/**
|
/** Indicates that this subtype is capable of entering emoji characters (always set?). */
|
||||||
* The subtype extra value used to indicate that this subtype is capable of
|
|
||||||
* entering emoji characters.
|
|
||||||
*/
|
|
||||||
public static final String EMOJI_CAPABLE = "EmojiCapable";
|
public static final String EMOJI_CAPABLE = "EmojiCapable";
|
||||||
|
|
||||||
/** Indicates that the subtype does not have a shift key */
|
/** Indicates that the subtype does not have a shift key */
|
||||||
|
@ -84,26 +69,29 @@ public final class Constants {
|
||||||
* this extra value.
|
* this extra value.
|
||||||
* This extra value is supported on JellyBean and later.
|
* This extra value is supported on JellyBean and later.
|
||||||
*/
|
*/
|
||||||
public static final String UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME =
|
public static final String UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME = "UntranslatableReplacementStringInSubtypeName";
|
||||||
"UntranslatableReplacementStringInSubtypeName";
|
|
||||||
|
|
||||||
/**
|
/** Contains the layouts used by this subtype. This extra value is private to LatinIME.*/
|
||||||
* The subtype extra value used to indicate this subtype keyboard layout set name.
|
|
||||||
* This extra value is private to LatinIME.
|
|
||||||
*/
|
|
||||||
public static final String KEYBOARD_LAYOUT_SET = "KeyboardLayoutSet";
|
public static final String KEYBOARD_LAYOUT_SET = "KeyboardLayoutSet";
|
||||||
|
|
||||||
/**
|
/** Indicates that this subtype is an additional subtype that the user defined. This extra value is private to LatinIME. */
|
||||||
* The subtype extra value used to indicate that this subtype is an additional subtype
|
|
||||||
* that the user defined. This extra value is private to LatinIME.
|
|
||||||
*/
|
|
||||||
public static final String IS_ADDITIONAL_SUBTYPE = "isAdditionalSubtype";
|
public static final String IS_ADDITIONAL_SUBTYPE = "isAdditionalSubtype";
|
||||||
|
|
||||||
/**
|
/** The subtype extra value used to specify the combining rules (currently not used). */
|
||||||
* The subtype extra value used to specify the combining rules.
|
|
||||||
*/
|
|
||||||
public static final String COMBINING_RULES = "CombiningRules";
|
public static final String COMBINING_RULES = "CombiningRules";
|
||||||
|
|
||||||
|
/** Overrides the general popup order setting */
|
||||||
|
public static final String POPUP_ORDER = "PopupOrder";
|
||||||
|
|
||||||
|
/** Overrides the general hint order / priority setting */
|
||||||
|
public static final String HINT_ORDER = "HintOrder";
|
||||||
|
|
||||||
|
/** Language tags indicating enabled secondary locales */
|
||||||
|
public static final String SECONDARY_LOCALES = "SecondaryLocales";
|
||||||
|
|
||||||
|
/** Overrides the general "more popups" setting */
|
||||||
|
public static final String MORE_POPUPS = "MorePopups";
|
||||||
|
|
||||||
private ExtraValue() {
|
private ExtraValue() {
|
||||||
// This utility class is not publicly instantiable.
|
// This utility class is not publicly instantiable.
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import helium314.keyboard.dictionarypack.DictionaryPackConstants
|
||||||
import helium314.keyboard.keyboard.KeyboardLayoutSet
|
import helium314.keyboard.keyboard.KeyboardLayoutSet
|
||||||
import helium314.keyboard.keyboard.KeyboardSwitcher
|
import helium314.keyboard.keyboard.KeyboardSwitcher
|
||||||
import helium314.keyboard.latin.R
|
import helium314.keyboard.latin.R
|
||||||
import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET
|
|
||||||
import helium314.keyboard.latin.common.LocaleUtils
|
import helium314.keyboard.latin.common.LocaleUtils
|
||||||
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
||||||
import helium314.keyboard.latin.databinding.LanguageListItemBinding
|
import helium314.keyboard.latin.databinding.LanguageListItemBinding
|
||||||
|
@ -138,10 +137,10 @@ class LanguageSettingsDialog(
|
||||||
val layouts = mutableListOf<String>()
|
val layouts = mutableListOf<String>()
|
||||||
val displayNames = mutableListOf<String>()
|
val displayNames = mutableListOf<String>()
|
||||||
infos.forEach {
|
infos.forEach {
|
||||||
val layoutSetName = it.subtype.getExtraValueOf(KEYBOARD_LAYOUT_SET)
|
val mainLayoutName = it.subtype.mainLayoutName()
|
||||||
if (layoutSetName?.startsWith(CUSTOM_LAYOUT_PREFIX) == false // don't allow copying custom layout (at least for now)
|
if (!mainLayoutName.startsWith(CUSTOM_LAYOUT_PREFIX) // don't allow copying custom layout (at least for now)
|
||||||
&& !layoutSetName.endsWith("+")) { // don't allow copying layouts only defined via extra keys
|
&& !mainLayoutName.endsWith("+")) { // don't allow copying layouts only defined via extra keys
|
||||||
layouts.add(layoutSetName)
|
layouts.add(mainLayoutName)
|
||||||
displayNames.add(it.subtype.displayName(context).toString())
|
displayNames.add(it.subtype.displayName(context).toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,7 +168,7 @@ class LanguageSettingsDialog(
|
||||||
|
|
||||||
private fun addSubtypeToView(subtype: SubtypeInfo) {
|
private fun addSubtypeToView(subtype: SubtypeInfo) {
|
||||||
val row = LayoutInflater.from(context).inflate(R.layout.language_list_item, listView)
|
val row = LayoutInflater.from(context).inflate(R.layout.language_list_item, listView)
|
||||||
val layoutSetName = subtype.subtype.getExtraValueOf(KEYBOARD_LAYOUT_SET) ?: "qwerty"
|
val layoutSetName = subtype.subtype.mainLayoutName()
|
||||||
row.findViewById<TextView>(R.id.language_name).text =
|
row.findViewById<TextView>(R.id.language_name).text =
|
||||||
SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(subtype.subtype)
|
SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(subtype.subtype)
|
||||||
?: subtype.subtype.displayName(context)
|
?: subtype.subtype.displayName(context)
|
||||||
|
|
|
@ -211,7 +211,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
|
||||||
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(this, editorInfo);
|
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(this, editorInfo);
|
||||||
return builder
|
return builder
|
||||||
.setKeyboardGeometry(SPELLCHECKER_DUMMY_KEYBOARD_WIDTH, SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT)
|
.setKeyboardGeometry(SPELLCHECKER_DUMMY_KEYBOARD_WIDTH, SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT)
|
||||||
.setSubtype(RichInputMethodSubtype.getRichInputMethodSubtype(subtype))
|
.setSubtype(RichInputMethodSubtype.Companion.get(subtype))
|
||||||
.setIsSpellChecker(true)
|
.setIsSpellChecker(true)
|
||||||
.disableTouchPositionCorrectionData()
|
.disableTouchPositionCorrectionData()
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -81,7 +81,7 @@ public final class AdditionalSubtypeUtils {
|
||||||
|
|
||||||
private static String getPrefSubtype(final InputMethodSubtype subtype) {
|
private static String getPrefSubtype(final InputMethodSubtype subtype) {
|
||||||
final String keyboardLayoutSetName = SubtypeLocaleUtils.getKeyboardLayoutSetName(subtype);
|
final String keyboardLayoutSetName = SubtypeLocaleUtils.getKeyboardLayoutSetName(subtype);
|
||||||
final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName;
|
final String layoutExtraValue = KEYBOARD_LAYOUT_SET + "=MAIN:" + keyboardLayoutSetName;
|
||||||
final String extraValue = StringUtils.removeFromCommaSplittableTextIfExists(
|
final String extraValue = StringUtils.removeFromCommaSplittableTextIfExists(
|
||||||
layoutExtraValue, StringUtils.removeFromCommaSplittableTextIfExists(
|
layoutExtraValue, StringUtils.removeFromCommaSplittableTextIfExists(
|
||||||
IS_ADDITIONAL_SUBTYPE, subtype.getExtraValue()));
|
IS_ADDITIONAL_SUBTYPE, subtype.getExtraValue()));
|
||||||
|
@ -173,7 +173,7 @@ public final class AdditionalSubtypeUtils {
|
||||||
final String keyboardLayoutSetName, final boolean isAsciiCapable,
|
final String keyboardLayoutSetName, final boolean isAsciiCapable,
|
||||||
final boolean isEmojiCapable) {
|
final boolean isEmojiCapable) {
|
||||||
final ArrayList<String> extraValueItems = new ArrayList<>();
|
final ArrayList<String> extraValueItems = new ArrayList<>();
|
||||||
extraValueItems.add(KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName);
|
extraValueItems.add(KEYBOARD_LAYOUT_SET + "=MAIN:" + keyboardLayoutSetName);
|
||||||
if (isAsciiCapable) {
|
if (isAsciiCapable) {
|
||||||
extraValueItems.add(ASCII_CAPABLE);
|
extraValueItems.add(ASCII_CAPABLE);
|
||||||
}
|
}
|
||||||
|
@ -213,7 +213,7 @@ public final class AdditionalSubtypeUtils {
|
||||||
// - EmojiCapable
|
// - EmojiCapable
|
||||||
// - isAdditionalSubtype
|
// - isAdditionalSubtype
|
||||||
final ArrayList<String> compatibilityExtraValueItems = new ArrayList<>();
|
final ArrayList<String> compatibilityExtraValueItems = new ArrayList<>();
|
||||||
compatibilityExtraValueItems.add(KEYBOARD_LAYOUT_SET + "=" + keyboardLayoutSetName);
|
compatibilityExtraValueItems.add(KEYBOARD_LAYOUT_SET + "=MAIN:" + keyboardLayoutSetName);
|
||||||
compatibilityExtraValueItems.add(ASCII_CAPABLE);
|
compatibilityExtraValueItems.add(ASCII_CAPABLE);
|
||||||
if (SubtypeLocaleUtils.isExceptionalLocale(locale)) {
|
if (SubtypeLocaleUtils.isExceptionalLocale(locale)) {
|
||||||
compatibilityExtraValueItems.add(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME + "=" +
|
compatibilityExtraValueItems.add(UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME + "=" +
|
||||||
|
|
|
@ -224,7 +224,7 @@ fun getCustomFunctionalLayoutName(elementId: Int, subtype: InputMethodSubtype, c
|
||||||
val customFunctionalLayoutNames = getCustomLayoutFiles(context).filter { it.name.contains("functional") }.map { it.name.substringBeforeLast(".") + "." }
|
val customFunctionalLayoutNames = getCustomLayoutFiles(context).filter { it.name.contains("functional") }.map { it.name.substringBeforeLast(".") + "." }
|
||||||
if (customFunctionalLayoutNames.isEmpty()) return null
|
if (customFunctionalLayoutNames.isEmpty()) return null
|
||||||
val languageTag = subtype.locale().toLanguageTag()
|
val languageTag = subtype.locale().toLanguageTag()
|
||||||
val mainLayoutName = subtype.getExtraValueOf(Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET) ?: "qwerty"
|
val mainLayoutName = subtype.mainLayoutName()
|
||||||
|
|
||||||
if (elementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED) {
|
if (elementId == KeyboardId.ELEMENT_SYMBOLS_SHIFTED) {
|
||||||
findMatchingLayout(customFunctionalLayoutNames.filter { it.startsWith(CUSTOM_FUNCTIONAL_LAYOUT_SYMBOLS_SHIFTED) }, mainLayoutName, languageTag)
|
findMatchingLayout(customFunctionalLayoutNames.filter { it.startsWith(CUSTOM_FUNCTIONAL_LAYOUT_SYMBOLS_SHIFTED) }, mainLayoutName, languageTag)
|
||||||
|
|
|
@ -47,7 +47,7 @@ public final class LanguageOnSpacebarUtils {
|
||||||
return FORMAT_TYPE_NONE;
|
return FORMAT_TYPE_NONE;
|
||||||
}
|
}
|
||||||
final String keyboardLanguage = locale.getLanguage();
|
final String keyboardLanguage = locale.getLanguage();
|
||||||
final String keyboardLayout = subtype.getKeyboardLayoutSetName();
|
final String keyboardLayout = subtype.getMainLayoutName();
|
||||||
int sameLanguageAndLayoutCount = 0;
|
int sameLanguageAndLayoutCount = 0;
|
||||||
for (final InputMethodSubtype ims : sEnabledSubtypes) {
|
for (final InputMethodSubtype ims : sEnabledSubtypes) {
|
||||||
final String language = SubtypeUtilsKt.locale(ims).getLanguage();
|
final String language = SubtypeUtilsKt.locale(ims).getLanguage();
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package helium314.keyboard.latin.utils
|
||||||
|
|
||||||
|
import java.util.EnumMap
|
||||||
|
|
||||||
|
enum class LayoutType {
|
||||||
|
MAIN, SYMBOLS, MORE_SYMBOLS, FUNCTIONAL, NUMBER, NUMBER_ROW, NUMPAD,
|
||||||
|
NUMPAD_LANDSCAPE, PHONE, PHONE_SYMBOLS, EMOJI_BOTTOM, CLIPBOARD_BOTTOM;
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun EnumMap<LayoutType, String>.toExtraValue() = map { "${it.key.name}:${it.value}" }.joinToString("|")
|
||||||
|
|
||||||
|
fun getLayoutMap(extraValue: String): EnumMap<LayoutType, String> {
|
||||||
|
val map = EnumMap<LayoutType, String>(LayoutType::class.java)
|
||||||
|
extraValue.split("|").forEach {
|
||||||
|
val s = it.split(":")
|
||||||
|
runCatching { map[LayoutType.valueOf(s[0])] = s[1] }
|
||||||
|
}
|
||||||
|
return map
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,7 +19,6 @@ import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.COMBINING_RULES;
|
import static helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.COMBINING_RULES;
|
||||||
import static helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
|
|
||||||
import static helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME;
|
import static helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.UNTRANSLATABLE_STRING_IN_SUBTYPE_NAME;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
@ -274,7 +273,7 @@ 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 = SubtypeUtilsKt.explicitMainLayoutName(subtype);
|
||||||
if (keyboardLayoutSet == null && subtype.isAsciiCapable()) {
|
if (keyboardLayoutSet == null && subtype.isAsciiCapable()) {
|
||||||
keyboardLayoutSet = QWERTY;
|
keyboardLayoutSet = QWERTY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ fun getAllAvailableSubtypes(): List<InputMethodSubtype> {
|
||||||
|
|
||||||
fun getMatchingLayoutSetNameForLocale(locale: Locale): String {
|
fun getMatchingLayoutSetNameForLocale(locale: Locale): String {
|
||||||
val subtypes = resourceSubtypesByLocale.values.flatten()
|
val subtypes = resourceSubtypesByLocale.values.flatten()
|
||||||
val name = LocaleUtils.getBestMatch(locale, subtypes) { it.locale() }?.getExtraValueOf(Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET)
|
val name = LocaleUtils.getBestMatch(locale, subtypes) { it.locale() }?.explicitMainLayoutName()
|
||||||
if (name != null) return name
|
if (name != null) return name
|
||||||
return when (locale.script()) {
|
return when (locale.script()) {
|
||||||
ScriptUtils.SCRIPT_LATIN -> "qwerty"
|
ScriptUtils.SCRIPT_LATIN -> "qwerty"
|
||||||
|
|
|
@ -3,6 +3,7 @@ package helium314.keyboard.latin.utils
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.view.inputmethod.InputMethodSubtype
|
import android.view.inputmethod.InputMethodSubtype
|
||||||
|
import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET
|
||||||
import helium314.keyboard.latin.common.LocaleUtils
|
import helium314.keyboard.latin.common.LocaleUtils
|
||||||
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
@ -15,6 +16,16 @@ fun InputMethodSubtype.locale(): Locale {
|
||||||
@Suppress("deprecation") return locale.constructLocale()
|
@Suppress("deprecation") return locale.constructLocale()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun InputMethodSubtype.mainLayoutName(): String {
|
||||||
|
val map = LayoutType.getLayoutMap(getExtraValueOf(KEYBOARD_LAYOUT_SET) ?: "")
|
||||||
|
return map[LayoutType.MAIN] ?: "qwerty"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun InputMethodSubtype.explicitMainLayoutName(): String? {
|
||||||
|
val map = LayoutType.getLayoutMap(getExtraValueOf(KEYBOARD_LAYOUT_SET) ?: "")
|
||||||
|
return map[LayoutType.MAIN]
|
||||||
|
}
|
||||||
|
|
||||||
/** Workaround for SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale ignoring custom layout names */
|
/** Workaround for SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale ignoring custom layout names */
|
||||||
// todo (later): this should be done properly and in SubtypeLocaleUtils
|
// todo (later): this should be done properly and in SubtypeLocaleUtils
|
||||||
fun InputMethodSubtype.displayName(context: Context): CharSequence {
|
fun InputMethodSubtype.displayName(context: Context): CharSequence {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||||
import androidx.compose.ui.unit.LayoutDirection
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import androidx.navigation.NavOptions
|
|
||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
@ -57,6 +56,7 @@ fun SettingsNavHost(
|
||||||
onClickGestureTyping = { navController.navigate(SettingsDestination.GestureTyping) },
|
onClickGestureTyping = { navController.navigate(SettingsDestination.GestureTyping) },
|
||||||
onClickAdvanced = { navController.navigate(SettingsDestination.Advanced) },
|
onClickAdvanced = { navController.navigate(SettingsDestination.Advanced) },
|
||||||
onClickAppearance = { navController.navigate(SettingsDestination.Appearance) },
|
onClickAppearance = { navController.navigate(SettingsDestination.Appearance) },
|
||||||
|
onClickLanguage = { navController.navigate(SettingsDestination.Languages) },
|
||||||
onClickBack = ::goBack,
|
onClickBack = ::goBack,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -90,9 +90,7 @@ fun SettingsNavHost(
|
||||||
// )
|
// )
|
||||||
}
|
}
|
||||||
composable(SettingsDestination.Languages) {
|
composable(SettingsDestination.Languages) {
|
||||||
// LanguagesSettingsScreen(
|
// LanguageScreen(onClickBack = ::goBack)
|
||||||
// onClickBack = ::goBack
|
|
||||||
// )
|
|
||||||
}
|
}
|
||||||
composable(SettingsDestination.Colors) {
|
composable(SettingsDestination.Colors) {
|
||||||
ColorsScreen(isNight = false, onClickBack = ::goBack)
|
ColorsScreen(isNight = false, onClickBack = ::goBack)
|
||||||
|
|
|
@ -39,6 +39,7 @@ fun MainSettingsScreen(
|
||||||
onClickGestureTyping: () -> Unit,
|
onClickGestureTyping: () -> Unit,
|
||||||
onClickAdvanced: () -> Unit,
|
onClickAdvanced: () -> Unit,
|
||||||
onClickAppearance: () -> Unit,
|
onClickAppearance: () -> Unit,
|
||||||
|
onClickLanguage: () -> Unit,
|
||||||
onClickBack: () -> Unit,
|
onClickBack: () -> Unit,
|
||||||
) {
|
) {
|
||||||
val ctx = LocalContext.current
|
val ctx = LocalContext.current
|
||||||
|
@ -48,6 +49,17 @@ fun MainSettingsScreen(
|
||||||
settings = emptyList(),
|
settings = emptyList(),
|
||||||
) {
|
) {
|
||||||
Column(Modifier.verticalScroll(rememberScrollState())) {
|
Column(Modifier.verticalScroll(rememberScrollState())) {
|
||||||
|
Preference(
|
||||||
|
name = stringResource(R.string.language_and_layouts_title),
|
||||||
|
onClick = onClickLanguage,
|
||||||
|
icon = R.drawable.ic_settings_languages_foreground
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
painter = painterResource(R.drawable.ic_arrow_left),
|
||||||
|
modifier = Modifier.scale(-1f, 1f),
|
||||||
|
contentDescription = null
|
||||||
|
)
|
||||||
|
}
|
||||||
Preference(
|
Preference(
|
||||||
name = stringResource(R.string.settings_screen_preferences),
|
name = stringResource(R.string.settings_screen_preferences),
|
||||||
onClick = onClickPreferences,
|
onClick = onClickPreferences,
|
||||||
|
@ -169,7 +181,7 @@ fun MainSettingsScreen(
|
||||||
private fun PreviewScreen() {
|
private fun PreviewScreen() {
|
||||||
Theme(true) {
|
Theme(true) {
|
||||||
Surface {
|
Surface {
|
||||||
MainSettingsScreen({}, {}, {}, {}, {}, {}, {}, {})
|
MainSettingsScreen({}, {}, {}, {}, {}, {}, {}, {}, {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@
|
||||||
android:imeSubtypeLocale="ar"
|
android:imeSubtypeLocale="ar"
|
||||||
android:languageTag="ar"
|
android:languageTag="ar"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=arabic,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:arabic,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
android:imeSubtypeLocale="ar"
|
android:imeSubtypeLocale="ar"
|
||||||
android:languageTag="ar"
|
android:languageTag="ar"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=arabic_pc,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:arabic_pc,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -184,7 +184,7 @@
|
||||||
android:imeSubtypeLocale="ar"
|
android:imeSubtypeLocale="ar"
|
||||||
android:languageTag="ar"
|
android:languageTag="ar"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=arabic_hijai,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:arabic_hijai,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -202,7 +202,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=belarusian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:belarusian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -211,7 +211,7 @@
|
||||||
android:imeSubtypeLocale="bg"
|
android:imeSubtypeLocale="bg"
|
||||||
android:languageTag="bg"
|
android:languageTag="bg"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bulgarian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bulgarian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -220,7 +220,7 @@
|
||||||
android:imeSubtypeLocale="bg"
|
android:imeSubtypeLocale="bg"
|
||||||
android:languageTag="bg"
|
android:languageTag="bg"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bulgarian_bds,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bulgarian_bds,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -229,7 +229,7 @@
|
||||||
android:imeSubtypeLocale="bg"
|
android:imeSubtypeLocale="bg"
|
||||||
android:languageTag="bg"
|
android:languageTag="bg"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bulgarian_bekl,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bulgarian_bekl,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -238,7 +238,7 @@
|
||||||
android:imeSubtypeLocale="bn_BD"
|
android:imeSubtypeLocale="bn_BD"
|
||||||
android:languageTag="bn-BD"
|
android:languageTag="bn-BD"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bengali_unijoy,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali_unijoy,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -247,7 +247,7 @@
|
||||||
android:imeSubtypeLocale="bn_BD"
|
android:imeSubtypeLocale="bn_BD"
|
||||||
android:languageTag="bn-BD"
|
android:languageTag="bn-BD"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bengali_akkhor,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali_akkhor,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
android:imeSubtypeLocale="bn_BD"
|
android:imeSubtypeLocale="bn_BD"
|
||||||
android:languageTag="bn-BD"
|
android:languageTag="bn-BD"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bengali_probhat,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali_probhat,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -265,7 +265,7 @@
|
||||||
android:imeSubtypeLocale="bn_IN"
|
android:imeSubtypeLocale="bn_IN"
|
||||||
android:languageTag="bn-IN"
|
android:languageTag="bn-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=bengali,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:bengali,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -274,7 +274,7 @@
|
||||||
android:imeSubtypeLocale="ca"
|
android:imeSubtypeLocale="ca"
|
||||||
android:languageTag="ca"
|
android:languageTag="ca"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -283,7 +283,7 @@
|
||||||
android:imeSubtypeLocale="cs"
|
android:imeSubtypeLocale="cs"
|
||||||
android:languageTag="cs"
|
android:languageTag="cs"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -292,7 +292,7 @@
|
||||||
android:imeSubtypeLocale="cv"
|
android:imeSubtypeLocale="cv"
|
||||||
android:languageTag="cv"
|
android:languageTag="cv"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=chuvash,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:chuvash,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -301,7 +301,7 @@
|
||||||
android:imeSubtypeLocale="da"
|
android:imeSubtypeLocale="da"
|
||||||
android:languageTag="da"
|
android:languageTag="da"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -310,7 +310,7 @@
|
||||||
android:imeSubtypeLocale="de"
|
android:imeSubtypeLocale="de"
|
||||||
android:languageTag="de"
|
android:languageTag="de"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -319,7 +319,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=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -328,7 +328,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=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -337,7 +337,7 @@
|
||||||
android:imeSubtypeLocale="el"
|
android:imeSubtypeLocale="el"
|
||||||
android:languageTag="el"
|
android:languageTag="el"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=greek,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:greek,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -355,7 +355,7 @@
|
||||||
android:imeSubtypeLocale="eo"
|
android:imeSubtypeLocale="eo"
|
||||||
android:languageTag="eo"
|
android:languageTag="eo"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=esperanto,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:esperanto,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -364,7 +364,7 @@
|
||||||
android:imeSubtypeLocale="es"
|
android:imeSubtypeLocale="es"
|
||||||
android:languageTag="es"
|
android:languageTag="es"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -373,7 +373,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=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -382,7 +382,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=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -391,7 +391,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=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -400,7 +400,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=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -409,7 +409,7 @@
|
||||||
android:imeSubtypeLocale="fa"
|
android:imeSubtypeLocale="fa"
|
||||||
android:languageTag="fa"
|
android:languageTag="fa"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=farsi,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:farsi,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -418,7 +418,7 @@
|
||||||
android:imeSubtypeLocale="fi"
|
android:imeSubtypeLocale="fi"
|
||||||
android:languageTag="fi"
|
android:languageTag="fi"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -427,7 +427,7 @@
|
||||||
android:imeSubtypeLocale="fr"
|
android:imeSubtypeLocale="fr"
|
||||||
android:languageTag="fr"
|
android:languageTag="fr"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=azerty,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:azerty,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -445,7 +445,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=qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -454,7 +454,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=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -463,7 +463,7 @@
|
||||||
android:imeSubtypeLocale="gu"
|
android:imeSubtypeLocale="gu"
|
||||||
android:languageTag="gu"
|
android:languageTag="gu"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=gujarati,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:gujarati,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -472,7 +472,7 @@
|
||||||
android:imeSubtypeLocale="hi"
|
android:imeSubtypeLocale="hi"
|
||||||
android:languageTag="hi"
|
android:languageTag="hi"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hindi,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hindi,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
android:imeSubtypeLocale="hi"
|
android:imeSubtypeLocale="hi"
|
||||||
android:languageTag="hi"
|
android:languageTag="hi"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hindi_compact,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hindi_compact,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -490,7 +490,7 @@
|
||||||
android:imeSubtypeLocale="hi"
|
android:imeSubtypeLocale="hi"
|
||||||
android:languageTag="hi"
|
android:languageTag="hi"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hindi_phonetic,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hindi_phonetic,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- This Hinglish keyboard is a preliminary layout.
|
<!-- This Hinglish keyboard is a preliminary layout.
|
||||||
|
@ -511,7 +511,7 @@
|
||||||
android:imeSubtypeLocale="hr"
|
android:imeSubtypeLocale="hr"
|
||||||
android:languageTag="hr"
|
android:languageTag="hr"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -520,7 +520,7 @@
|
||||||
android:imeSubtypeLocale="hu"
|
android:imeSubtypeLocale="hu"
|
||||||
android:languageTag="hu"
|
android:languageTag="hu"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -529,7 +529,7 @@
|
||||||
android:imeSubtypeLocale="hu"
|
android:imeSubtypeLocale="hu"
|
||||||
android:languageTag="hu"
|
android:languageTag="hu"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hungarian_extended_qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hungarian_extended_qwertz,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -538,7 +538,7 @@
|
||||||
android:imeSubtypeLocale="hy_AM"
|
android:imeSubtypeLocale="hy_AM"
|
||||||
android:languageTag="hy-AM"
|
android:languageTag="hy-AM"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=armenian_phonetic,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:armenian_phonetic,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- Java uses the deprecated "in" code instead of the standard "id" code for Indonesian. -->
|
<!-- Java uses the deprecated "in" code instead of the standard "id" code for Indonesian. -->
|
||||||
|
@ -575,7 +575,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=qwertz+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN: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. -->
|
||||||
|
@ -585,7 +585,7 @@
|
||||||
android:imeSubtypeLocale="iw"
|
android:imeSubtypeLocale="iw"
|
||||||
android:languageTag="he"
|
android:languageTag="he"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hebrew,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hebrew,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -594,7 +594,7 @@
|
||||||
android:imeSubtypeLocale="iw"
|
android:imeSubtypeLocale="iw"
|
||||||
android:languageTag="he"
|
android:languageTag="he"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=hebrew_1452_2,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:hebrew_1452_2,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -603,7 +603,7 @@
|
||||||
android:imeSubtypeLocale="kab"
|
android:imeSubtypeLocale="kab"
|
||||||
android:languageTag="kab"
|
android:languageTag="kab"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=kabyle,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:kabyle,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -612,7 +612,7 @@
|
||||||
android:imeSubtypeLocale="ka_GE"
|
android:imeSubtypeLocale="ka_GE"
|
||||||
android:languageTag="ka-GE"
|
android:languageTag="ka-GE"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=georgian,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:georgian,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -621,7 +621,7 @@
|
||||||
android:imeSubtypeLocale="kk"
|
android:imeSubtypeLocale="kk"
|
||||||
android:languageTag="kk"
|
android:languageTag="kk"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=russian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -630,7 +630,7 @@
|
||||||
android:imeSubtypeLocale="km_KH"
|
android:imeSubtypeLocale="km_KH"
|
||||||
android:languageTag="km-KH"
|
android:languageTag="km-KH"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=khmer,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:khmer,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -639,7 +639,7 @@
|
||||||
android:imeSubtypeLocale="kn_IN"
|
android:imeSubtypeLocale="kn_IN"
|
||||||
android:languageTag="kn-IN"
|
android:languageTag="kn-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=kannada,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:kannada,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -648,7 +648,7 @@
|
||||||
android:imeSubtypeLocale="kn_IN"
|
android:imeSubtypeLocale="kn_IN"
|
||||||
android:languageTag="kn-IN"
|
android:languageTag="kn-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=kannada_extended,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:kannada_extended,NoShiftKey,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -657,7 +657,7 @@
|
||||||
android:imeSubtypeLocale="ko"
|
android:imeSubtypeLocale="ko"
|
||||||
android:languageTag="ko"
|
android:languageTag="ko"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=korean,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:korean,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -666,7 +666,7 @@
|
||||||
android:imeSubtypeLocale="ko"
|
android:imeSubtypeLocale="ko"
|
||||||
android:languageTag="ko"
|
android:languageTag="ko"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=korean_sebeolsik_390,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:korean_sebeolsik_390,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -675,7 +675,7 @@
|
||||||
android:imeSubtypeLocale="ko"
|
android:imeSubtypeLocale="ko"
|
||||||
android:languageTag="ko"
|
android:languageTag="ko"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=korean_sebeolsik_final,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:korean_sebeolsik_final,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -684,7 +684,7 @@
|
||||||
android:imeSubtypeLocale="ky"
|
android:imeSubtypeLocale="ky"
|
||||||
android:languageTag="ky"
|
android:languageTag="ky"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=russian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -693,7 +693,7 @@
|
||||||
android:imeSubtypeLocale="dru"
|
android:imeSubtypeLocale="dru"
|
||||||
android:languageTag="dru"
|
android:languageTag="dru"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=dargwa_urakhi,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:dargwa_urakhi,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -702,7 +702,7 @@
|
||||||
android:imeSubtypeLocale="xdq"
|
android:imeSubtypeLocale="xdq"
|
||||||
android:languageTag="xdq"
|
android:languageTag="xdq"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=kaitag,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:kaitag,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -711,7 +711,7 @@
|
||||||
android:imeSubtypeLocale="lb"
|
android:imeSubtypeLocale="lb"
|
||||||
android:languageTag="lb"
|
android:languageTag="lb"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwertz,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz,AsciiCapable,EmojiCapable"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
android:label="@string/subtype_generic"
|
android:label="@string/subtype_generic"
|
||||||
|
@ -719,7 +719,7 @@
|
||||||
android:imeSubtypeLocale="lo_LA"
|
android:imeSubtypeLocale="lo_LA"
|
||||||
android:languageTag="lo-LA"
|
android:languageTag="lo-LA"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=lao,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:lao,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -746,7 +746,7 @@
|
||||||
android:imeSubtypeLocale="mhr"
|
android:imeSubtypeLocale="mhr"
|
||||||
android:languageTag="mhr"
|
android:languageTag="mhr"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=mari,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:mari,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -755,7 +755,7 @@
|
||||||
android:imeSubtypeLocale="mk"
|
android:imeSubtypeLocale="mk"
|
||||||
android:languageTag="mk"
|
android:languageTag="mk"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=macedonian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:macedonian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -764,7 +764,7 @@
|
||||||
android:imeSubtypeLocale="ml_IN"
|
android:imeSubtypeLocale="ml_IN"
|
||||||
android:languageTag="ml-IN"
|
android:languageTag="ml-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=malayalam,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:malayalam,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -773,7 +773,7 @@
|
||||||
android:imeSubtypeLocale="mn_MN"
|
android:imeSubtypeLocale="mn_MN"
|
||||||
android:languageTag="mn-MN"
|
android:languageTag="mn-MN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=mongolian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:mongolian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -782,7 +782,7 @@
|
||||||
android:imeSubtypeLocale="mns"
|
android:imeSubtypeLocale="mns"
|
||||||
android:languageTag="mns"
|
android:languageTag="mns"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=mansi_north,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:mansi_north,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -791,7 +791,7 @@
|
||||||
android:imeSubtypeLocale="mr_IN"
|
android:imeSubtypeLocale="mr_IN"
|
||||||
android:languageTag="mr-IN"
|
android:languageTag="mr-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=marathi,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:marathi,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -809,7 +809,7 @@
|
||||||
android:imeSubtypeLocale="nb"
|
android:imeSubtypeLocale="nb"
|
||||||
android:languageTag="nb"
|
android:languageTag="nb"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -818,7 +818,7 @@
|
||||||
android:imeSubtypeLocale="ne_NP"
|
android:imeSubtypeLocale="ne_NP"
|
||||||
android:languageTag="ne-NP"
|
android:languageTag="ne-NP"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=nepali_romanized,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:nepali_romanized,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -827,7 +827,7 @@
|
||||||
android:imeSubtypeLocale="ne_NP"
|
android:imeSubtypeLocale="ne_NP"
|
||||||
android:languageTag="ne-NP"
|
android:languageTag="ne-NP"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=nepali_traditional,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:nepali_traditional,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -845,7 +845,7 @@
|
||||||
android:imeSubtypeLocale="nl_BE"
|
android:imeSubtypeLocale="nl_BE"
|
||||||
android:languageTag="nl-BE"
|
android:languageTag="nl-BE"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=azerty,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:azerty,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -899,7 +899,7 @@
|
||||||
android:imeSubtypeLocale="ru"
|
android:imeSubtypeLocale="ru"
|
||||||
android:languageTag="ru"
|
android:languageTag="ru"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=russian,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -908,7 +908,7 @@
|
||||||
android:imeSubtypeLocale="ru"
|
android:imeSubtypeLocale="ru"
|
||||||
android:languageTag="ru"
|
android:languageTag="ru"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=russian_student,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:russian_student,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- TODO: This Sinhala keyboard is a preliminary layout.
|
<!-- TODO: This Sinhala keyboard is a preliminary layout.
|
||||||
|
@ -920,7 +920,7 @@
|
||||||
android:imeSubtypeLocale="si_LK"
|
android:imeSubtypeLocale="si_LK"
|
||||||
android:languageTag="si-LK"
|
android:languageTag="si-LK"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=sinhala,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:sinhala,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -947,7 +947,7 @@
|
||||||
android:imeSubtypeLocale="sr"
|
android:imeSubtypeLocale="sr"
|
||||||
android:languageTag="sr"
|
android:languageTag="sr"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=serbian,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:serbian,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- This Serbian Latin keyboard is a preliminary layout.
|
<!-- This Serbian Latin keyboard is a preliminary layout.
|
||||||
|
@ -958,7 +958,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=qwertz+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwertz+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -967,7 +967,7 @@
|
||||||
android:imeSubtypeLocale="sv"
|
android:imeSubtypeLocale="sv"
|
||||||
android:languageTag="sv"
|
android:languageTag="sv"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -985,7 +985,7 @@
|
||||||
android:imeSubtypeLocale="ta_IN"
|
android:imeSubtypeLocale="ta_IN"
|
||||||
android:languageTag="ta-IN"
|
android:languageTag="ta-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:tamil,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- TODO: Enabling/Disabling ta_LK subtype must be aligned with si_LK subtype. -->
|
<!-- TODO: Enabling/Disabling ta_LK subtype must be aligned with si_LK subtype. -->
|
||||||
|
@ -996,7 +996,7 @@
|
||||||
android:imeSubtypeLocale="ta_LK"
|
android:imeSubtypeLocale="ta_LK"
|
||||||
android:languageTag="ta-LK"
|
android:languageTag="ta-LK"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:tamil,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
!-->
|
!-->
|
||||||
|
@ -1006,7 +1006,7 @@
|
||||||
android:imeSubtypeLocale="ta_SG"
|
android:imeSubtypeLocale="ta_SG"
|
||||||
android:languageTag="ta-SG"
|
android:languageTag="ta-SG"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:tamil,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1015,7 +1015,7 @@
|
||||||
android:imeSubtypeLocale="te_IN"
|
android:imeSubtypeLocale="te_IN"
|
||||||
android:languageTag="te-IN"
|
android:languageTag="te-IN"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=telugu,NoShiftKey,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:telugu,NoShiftKey,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1024,7 +1024,7 @@
|
||||||
android:imeSubtypeLocale="th"
|
android:imeSubtypeLocale="th"
|
||||||
android:languageTag="th"
|
android:languageTag="th"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=thai,NoShiftProximityCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:thai,NoShiftProximityCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1033,7 +1033,7 @@
|
||||||
android:imeSubtypeLocale="tl"
|
android:imeSubtypeLocale="tl"
|
||||||
android:languageTag="tl"
|
android:languageTag="tl"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty+,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:qwerty+,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1042,7 +1042,7 @@
|
||||||
android:imeSubtypeLocale="tr"
|
android:imeSubtypeLocale="tr"
|
||||||
android:languageTag="tr"
|
android:languageTag="tr"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=turkish,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:turkish,AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1051,7 +1051,7 @@
|
||||||
android:imeSubtypeLocale="uk"
|
android:imeSubtypeLocale="uk"
|
||||||
android:languageTag="uk"
|
android:languageTag="uk"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=ukrainian,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:ukrainian,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
@ -1060,7 +1060,7 @@
|
||||||
android:imeSubtypeLocale="ur_PK"
|
android:imeSubtypeLocale="ur_PK"
|
||||||
android:languageTag="ur-PK"
|
android:languageTag="ur-PK"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=urdu,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:urdu,EmojiCapable"
|
||||||
android:isAsciiCapable="false"
|
android:isAsciiCapable="false"
|
||||||
/>
|
/>
|
||||||
<!-- This Uzbek keyboard is a preliminary layout.
|
<!-- This Uzbek keyboard is a preliminary layout.
|
||||||
|
@ -1071,7 +1071,7 @@
|
||||||
android:imeSubtypeLocale="uz_UZ"
|
android:imeSubtypeLocale="uz_UZ"
|
||||||
android:languageTag="uz-UZ"
|
android:languageTag="uz-UZ"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:imeSubtypeExtraValue="KeyboardLayoutSet=uzbek,AsciiCapable,EmojiCapable"
|
android:imeSubtypeExtraValue="KeyboardLayoutSet=MAIN:uzbek,AsciiCapable,EmojiCapable"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
|
|
|
@ -24,7 +24,7 @@ the system picker crashes on some devices for unknown reasons.
|
||||||
<subtype android:icon="@drawable/ic_ime_switcher"
|
<subtype android:icon="@drawable/ic_ime_switcher"
|
||||||
android:imeSubtypeExtraValue="dummy"
|
android:imeSubtypeExtraValue="dummy"
|
||||||
android:imeSubtypeMode="keyboard"
|
android:imeSubtypeMode="keyboard"
|
||||||
android:subtypeId="0xf000000f"
|
android:subtypeId="0x7000000f"
|
||||||
android:isAsciiCapable="true"
|
android:isAsciiCapable="true"
|
||||||
/>
|
/>
|
||||||
</input-method>
|
</input-method>
|
||||||
|
|
|
@ -494,7 +494,7 @@ f""", // no newline at the end
|
||||||
val editorInfoField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mEditorInfo").apply { isAccessible = true }
|
val editorInfoField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mEditorInfo").apply { isAccessible = true }
|
||||||
editorInfoField.set(layoutParams, editorInfo)
|
editorInfoField.set(layoutParams, editorInfo)
|
||||||
val subtypeField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mSubtype").apply { isAccessible = true }
|
val subtypeField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mSubtype").apply { isAccessible = true }
|
||||||
subtypeField.set(layoutParams, RichInputMethodSubtype(subtype))
|
subtypeField.set(layoutParams, RichInputMethodSubtype.get(subtype))
|
||||||
val widthField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mKeyboardWidth").apply { isAccessible = true }
|
val widthField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mKeyboardWidth").apply { isAccessible = true }
|
||||||
widthField.setInt(layoutParams, 500)
|
widthField.setInt(layoutParams, 500)
|
||||||
val heightField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mKeyboardHeight").apply { isAccessible = true }
|
val heightField = KeyboardLayoutSet.Params::class.java.getDeclaredField("mKeyboardHeight").apply { isAccessible = true }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue