From 7fdb5954d018372f47a18e1e25093405aa0d1e21 Mon Sep 17 00:00:00 2001 From: Helium Date: Mon, 21 Mar 2022 08:57:14 +0100 Subject: [PATCH 1/2] hide voice input key and disable setting if not available --- .../openboard/inputmethod/latin/RichInputMethodManager.java | 4 ++++ .../latin/settings/PreferencesSettingsFragment.java | 5 +++-- .../openboard/inputmethod/latin/settings/SettingsValues.java | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java index 605322d89..e0e210074 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/RichInputMethodManager.java @@ -584,6 +584,10 @@ public class RichInputMethodManager { switchToTargetIME(imiId, mShortcutSubtype, context); } + public boolean hasShortcutIme() { + return mShortcutInputMethodInfo != null; + } + private void switchToTargetIME(final String imiId, final InputMethodSubtype subtype, final InputMethodService context) { final IBinder token = context.getWindow().getWindow().getAttributes().token; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/PreferencesSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/PreferencesSettingsFragment.java index a82b885f8..82e348e6c 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/PreferencesSettingsFragment.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/PreferencesSettingsFragment.java @@ -70,8 +70,9 @@ public final class PreferencesSettingsFragment extends SubScreenFragment { final Preference voiceInputKeyOption = findPreference(Settings.PREF_VOICE_INPUT_KEY); if (voiceInputKeyOption != null) { RichInputMethodManager.getInstance().refreshSubtypeCaches(); - voiceInputKeyOption.setEnabled(VOICE_IME_ENABLED); - voiceInputKeyOption.setSummary(VOICE_IME_ENABLED + boolean voiceKeyEnabled = VOICE_IME_ENABLED && RichInputMethodManager.getInstance().hasShortcutIme(); + voiceInputKeyOption.setEnabled(voiceKeyEnabled); + voiceInputKeyOption.setSummary(voiceKeyEnabled ? null : getText(R.string.voice_input_disabled_summary)); } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index 009018892..bcad986a5 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -149,7 +149,7 @@ public class SettingsValues { mKeyPreviewPopupOn = Settings.readKeyPreviewPopupEnabled(prefs, res); mSlidingKeyInputPreviewEnabled = prefs.getBoolean( DebugSettings.PREF_SLIDING_KEY_INPUT_PREVIEW, true); - mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey; + mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey && RichInputMethodManager.getInstance().hasShortcutIme(); mIncludesOtherImesInLanguageSwitchList = !Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS || prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false) /* forcibly */; mShowsNumberRow = prefs.getBoolean(Settings.PREF_SHOW_NUMBER_ROW, false); mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, true); From 9ccea3940c9841876b7d77792281c715f37cb0dd Mon Sep 17 00:00:00 2001 From: Helium Date: Mon, 21 Mar 2022 10:27:04 +0100 Subject: [PATCH 2/2] move hasShortcutIme check to inputAttributes --- .../org/dslul/openboard/inputmethod/latin/InputAttributes.java | 3 ++- .../openboard/inputmethod/latin/settings/SettingsValues.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java index e36a90388..4fdf28315 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java @@ -112,7 +112,8 @@ public final class InputAttributes { final boolean noMicrophone = mIsPasswordField || InputTypeUtils.isEmailVariation(variation) || InputType.TYPE_TEXT_VARIATION_URI == variation - || hasNoMicrophoneKeyOption(); + || hasNoMicrophoneKeyOption() + || !RichInputMethodManager.getInstance().hasShortcutIme(); mShouldShowVoiceInputKey = !noMicrophone; mDisableGestureFloatingPreviewText = InputAttributes.inPrivateImeOptions( diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index bcad986a5..009018892 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -149,7 +149,7 @@ public class SettingsValues { mKeyPreviewPopupOn = Settings.readKeyPreviewPopupEnabled(prefs, res); mSlidingKeyInputPreviewEnabled = prefs.getBoolean( DebugSettings.PREF_SLIDING_KEY_INPUT_PREVIEW, true); - mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey && RichInputMethodManager.getInstance().hasShortcutIme(); + mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) && mInputAttributes.mShouldShowVoiceInputKey; mIncludesOtherImesInLanguageSwitchList = !Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS || prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false) /* forcibly */; mShowsNumberRow = prefs.getBoolean(Settings.PREF_SHOW_NUMBER_ROW, false); mShowsHints = prefs.getBoolean(Settings.PREF_SHOW_HINTS, true);