diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt index fef79526..02b61532 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt @@ -18,6 +18,7 @@ import helium314.keyboard.keyboard.internal.KeyboardParams import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyCode.checkAndConvertCode import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyLabel.convertFlorisLabel import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyLabel.rtlLabel +import helium314.keyboard.latin.RichInputMethodManager import helium314.keyboard.latin.common.Constants import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.common.StringUtils @@ -121,7 +122,7 @@ sealed interface KeyData : AbstractKeyData { keys.add("!icon/clipboard_normal_key|!code/key_clipboard") if (!params.mId.mEmojiKeyEnabled && !params.mId.isNumberLayout) keys.add("!icon/emoji_normal_key|!code/key_emoji") - if (!params.mId.mLanguageSwitchKeyEnabled && !params.mId.isNumberLayout) + if (!params.mId.mLanguageSwitchKeyEnabled && !params.mId.isNumberLayout && RichInputMethodManager.getInstance().canSwitchLanguage()) keys.add("!icon/language_switch_key|!code/key_language_switch") if (!params.mId.mOneHandedModeEnabled) keys.add("!icon/start_onehanded_mode_key|!code/key_start_onehanded") diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index 5eb7665a..72b4fbfd 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1412,10 +1412,11 @@ public class LatinIME extends InputMethodService implements if (switchIme && !switchSubtype && switchInputMethod()) return; final boolean hasMoreThanOneSubtype = mRichImm.getMyEnabledInputMethodSubtypeList(false).size() > 1; - // switch subtype if wanted and possible - if (switchSubtype && !switchIme && hasMoreThanOneSubtype) { - // switch to previous subtype if current one was used, otherwise cycle through list - mSubtypeState.switchSubtype(mRichImm); + // switch subtype if wanted, do nothing if no other subtype is available + if (switchSubtype && !switchIme) { + if (hasMoreThanOneSubtype) + // switch to previous subtype if current one was used, otherwise cycle through list + mSubtypeState.switchSubtype(mRichImm); return; } // language key set to switch both, or language key is not shown on keyboard -> switch both diff --git a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java index a4bc4a43..def47a18 100644 --- a/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java +++ b/app/src/main/java/helium314/keyboard/latin/RichInputMethodManager.java @@ -360,6 +360,14 @@ public class RichInputMethodManager { mCurrentRichInputMethodSubtype = RichInputMethodSubtype.getRichInputMethodSubtype(subtype); } + public boolean canSwitchLanguage() { + if (Settings.getInstance().getCurrent().mLanguageSwitchKeyToOtherSubtypes && hasMultipleEnabledSubtypesInThisIme(false)) + return true; + if (Settings.getInstance().getCurrent().mLanguageSwitchKeyToOtherImes && mImm.getEnabledInputMethodList().size() > 1) + return true; + return false; + } + // todo: is shortcutIme only voice input, or can it be something else? // if always voice input, rename it and other things like mHasShortcutKey private void updateShortcutIme() { diff --git a/app/src/main/java/helium314/keyboard/latin/settings/PreferencesSettingsFragment.java b/app/src/main/java/helium314/keyboard/latin/settings/PreferencesSettingsFragment.java index ea2269ce..a0da0073 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/PreferencesSettingsFragment.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/PreferencesSettingsFragment.java @@ -77,7 +77,8 @@ public final class PreferencesSettingsFragment extends SubScreenFragment { if (key == null) return; switch (key) { case Settings.PREF_POPUP_KEYS_ORDER, Settings.PREF_SHOW_POPUP_HINTS, Settings.PREF_SHOW_NUMBER_ROW, - Settings.PREF_POPUP_KEYS_LABELS_ORDER -> mReloadKeyboard = true; + Settings.PREF_POPUP_KEYS_LABELS_ORDER, Settings.PREF_LANGUAGE_SWITCH_KEY, + Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY -> mReloadKeyboard = true; case Settings.PREF_LOCALIZED_NUMBER_ROW -> KeyboardLayoutSet.onSystemLocaleChanged(); case Settings.PREF_SHOW_HINTS -> findPreference(Settings.PREF_POPUP_KEYS_LABELS_ORDER).setVisible(prefs.getBoolean(Settings.PREF_SHOW_HINTS, false));