diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt index ffff90bc..d9fcd678 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/core/PrefHelper.kt @@ -25,7 +25,7 @@ import dev.patrickgold.florisboard.ime.text.gestures.DistanceThreshold import dev.patrickgold.florisboard.ime.text.gestures.SwipeAction import dev.patrickgold.florisboard.ime.text.gestures.VelocityThreshold import dev.patrickgold.florisboard.ime.text.key.KeyHintMode -import dev.patrickgold.florisboard.ime.text.key.SwitchKeyMode +import dev.patrickgold.florisboard.ime.text.key.UtilityKeyAction import dev.patrickgold.florisboard.ime.theme.ThemeMode import dev.patrickgold.florisboard.util.TimeUtil import dev.patrickgold.florisboard.util.VersionName @@ -321,7 +321,8 @@ class PrefHelper( const val POPUP_ENABLED = "keyboard__popup_enabled" const val SOUND_ENABLED = "keyboard__sound_enabled" const val SOUND_VOLUME = "keyboard__sound_volume" - const val SWITCH_KEY_MODE = "keyboard__switch_key_mode" + const val UTILITY_KEY_ACTION = "keyboard__utility_key_action" + const val UTILITY_KEY_ENABLED = "keyboard__utility_key_enabled" const val VIBRATION_ENABLED = "keyboard__vibration_enabled" const val VIBRATION_STRENGTH = "keyboard__vibration_strength" } @@ -366,9 +367,12 @@ class PrefHelper( var soundVolume: Int = 0 get() = prefHelper.getPref(SOUND_VOLUME, -1) private set - var switchKeyMode: SwitchKeyMode - get() = SwitchKeyMode.fromString(prefHelper.getPref(SWITCH_KEY_MODE, SwitchKeyMode.DYNAMIC_LANGUAGE_EMOJI.toString())) - set(v) = prefHelper.setPref(SWITCH_KEY_MODE, v) + var utilityKeyAction: UtilityKeyAction + get() = UtilityKeyAction.fromString(prefHelper.getPref(UTILITY_KEY_ACTION, UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS.toString())) + set(v) = prefHelper.setPref(UTILITY_KEY_ACTION, v) + var utilityKeyEnabled: Boolean + get() = prefHelper.getPref(UTILITY_KEY_ENABLED, true) + set(v) = prefHelper.setPref(UTILITY_KEY_ENABLED, v) var vibrationEnabled: Boolean = false get() = prefHelper.getPref(VIBRATION_ENABLED, true) private set diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt index 49181727..d6d403a4 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/TextInputManager.kt @@ -449,9 +449,9 @@ class TextInputManager private constructor() : CoroutineScope by MainScope(), * FlorisBoard internal or system-wide. */ private fun handleLanguageSwitch() { - when (florisboard.prefs.keyboard.switchKeyMode) { - SwitchKeyMode.DYNAMIC_LANGUAGE_EMOJI, - SwitchKeyMode.ALWAYS_LANGUAGE_INTERNAL -> florisboard.switchToNextSubtype() + when (florisboard.prefs.keyboard.utilityKeyAction) { + UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS, + UtilityKeyAction.SWITCH_LANGUAGE -> florisboard.switchToNextSubtype() else -> florisboard.switchToNextKeyboard() } } diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyView.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyView.kt index 4bb3aa69..2fd8b217 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyView.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/KeyView.kt @@ -589,12 +589,16 @@ class KeyView( when (data.code) { KeyCode.SWITCH_TO_TEXT_CONTEXT, KeyCode.SWITCH_TO_MEDIA_CONTEXT -> { - visibility = when (prefs.keyboard.switchKeyMode) { - SwitchKeyMode.ALWAYS_LANGUAGE_INTERNAL, - SwitchKeyMode.ALWAYS_LANGUAGE_SYSTEM, - SwitchKeyMode.NEVER_SHOW -> GONE - SwitchKeyMode.ALWAYS_EMOJI -> VISIBLE - SwitchKeyMode.DYNAMIC_LANGUAGE_EMOJI -> + val tempUtilityKeyAction = when { + prefs.keyboard.utilityKeyEnabled -> prefs.keyboard.utilityKeyAction + else -> UtilityKeyAction.DISABLED + } + visibility = when (tempUtilityKeyAction) { + UtilityKeyAction.DISABLED, + UtilityKeyAction.SWITCH_LANGUAGE, + UtilityKeyAction.SWITCH_KEYBOARD_APP -> GONE + UtilityKeyAction.SWITCH_TO_EMOJIS -> VISIBLE + UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS -> if (florisboard?.shouldShowLanguageSwitch() == true) { GONE } else { @@ -603,12 +607,16 @@ class KeyView( } } KeyCode.LANGUAGE_SWITCH -> { - visibility = when (prefs.keyboard.switchKeyMode) { - SwitchKeyMode.ALWAYS_EMOJI, - SwitchKeyMode.NEVER_SHOW -> GONE - SwitchKeyMode.ALWAYS_LANGUAGE_INTERNAL, - SwitchKeyMode.ALWAYS_LANGUAGE_SYSTEM -> VISIBLE - SwitchKeyMode.DYNAMIC_LANGUAGE_EMOJI -> + val tempUtilityKeyAction = when { + prefs.keyboard.utilityKeyEnabled -> prefs.keyboard.utilityKeyAction + else -> UtilityKeyAction.DISABLED + } + visibility = when (tempUtilityKeyAction) { + UtilityKeyAction.DISABLED, + UtilityKeyAction.SWITCH_TO_EMOJIS -> GONE + UtilityKeyAction.SWITCH_LANGUAGE, + UtilityKeyAction.SWITCH_KEYBOARD_APP -> VISIBLE + UtilityKeyAction.DYNAMIC_SWITCH_LANGUAGE_EMOJIS -> if (florisboard?.shouldShowLanguageSwitch() == true) { VISIBLE } else { diff --git a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/SwitchKeyMode.kt b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt similarity index 75% rename from app/src/main/java/dev/patrickgold/florisboard/ime/text/key/SwitchKeyMode.kt rename to app/src/main/java/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt index 192f2890..6a22f2c4 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/SwitchKeyMode.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/ime/text/key/UtilityKeyAction.kt @@ -19,17 +19,17 @@ package dev.patrickgold.florisboard.ime.text.key import java.util.* /** - * Enum for declaring the switch key modes. + * Enum for declaring the utility key actions. */ -enum class SwitchKeyMode { - ALWAYS_EMOJI, - ALWAYS_LANGUAGE_INTERNAL, - ALWAYS_LANGUAGE_SYSTEM, - DYNAMIC_LANGUAGE_EMOJI, - NEVER_SHOW; +enum class UtilityKeyAction { + SWITCH_TO_EMOJIS, + SWITCH_LANGUAGE, + SWITCH_KEYBOARD_APP, + DYNAMIC_SWITCH_LANGUAGE_EMOJIS, + DISABLED; companion object { - fun fromString(string: String): SwitchKeyMode { + fun fromString(string: String): UtilityKeyAction { return valueOf(string.toUpperCase(Locale.ENGLISH)) } } diff --git a/app/src/main/java/dev/patrickgold/florisboard/settings/fragments/KeyboardFragment.kt b/app/src/main/java/dev/patrickgold/florisboard/settings/fragments/KeyboardFragment.kt index b5488d94..e4480b3a 100644 --- a/app/src/main/java/dev/patrickgold/florisboard/settings/fragments/KeyboardFragment.kt +++ b/app/src/main/java/dev/patrickgold/florisboard/settings/fragments/KeyboardFragment.kt @@ -18,6 +18,7 @@ package dev.patrickgold.florisboard.settings.fragments import android.content.SharedPreferences import android.os.Bundle +import androidx.preference.ListPreference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import dev.patrickgold.florisboard.R @@ -27,6 +28,7 @@ import dev.patrickgold.florisboard.settings.components.DialogSeekBarPreference class KeyboardFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { private var heightFactorCustom: DialogSeekBarPreference? = null + private var utilityKeyAction: ListPreference? = null private var sharedPrefs: SharedPreferences? = null override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -34,7 +36,9 @@ class KeyboardFragment : PreferenceFragmentCompat(), sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context) heightFactorCustom = findPreference(PrefHelper.Keyboard.HEIGHT_FACTOR_CUSTOM) + utilityKeyAction = findPreference(PrefHelper.Keyboard.UTILITY_KEY_ACTION) onSharedPreferenceChanged(null, PrefHelper.Keyboard.HEIGHT_FACTOR) + onSharedPreferenceChanged(null, PrefHelper.Keyboard.UTILITY_KEY_ENABLED) } override fun onResume() { @@ -50,6 +54,8 @@ class KeyboardFragment : PreferenceFragmentCompat(), override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { if (key == PrefHelper.Keyboard.HEIGHT_FACTOR) { heightFactorCustom?.isVisible = sharedPrefs?.getString(key, "") == "custom" + } else if (key == PrefHelper.Keyboard.UTILITY_KEY_ENABLED) { + utilityKeyAction?.isVisible = sharedPrefs?.getBoolean(key, false) == true } } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9365a4ca..f73a0c65 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -45,19 +45,17 @@ start - - @string/pref__keyboard__switch_key_mode__never_show - @string/pref__keyboard__switch_key_mode__always_emoji - @string/pref__keyboard__switch_key_mode__always_language_internal - @string/pref__keyboard__switch_key_mode__always_language_system - @string/pref__keyboard__switch_key_mode__dynamic_language_emoji + + @string/pref__keyboard__utility_key_action__switch_to_emojis + @string/pref__keyboard__utility_key_action__switch_language + @string/pref__keyboard__utility_key_action__switch_keyboard_app + @string/pref__keyboard__utility_key_action__dynamic_switch_language_emojis - - never_show - always_emoji - always_language_internal - always_language_system - dynamic_language_emoji + + switch_to_emojis + switch_language + switch_keyboard_app + dynamic_switch_language_emojis diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fcbdd21c..fa45abb3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -162,12 +162,13 @@ Enabled (Hint is prioritized) Enabled (Accent is prioritized) Enabled (Smart prioritization) - Switch key mode - Emoji switch - Language switch (Internal) - Language switch (System) - Dynamic emoji / language switch (Internal) - Never show switch + Show utility key + Shows a configurable utility key next to space bar + Utility key action + Switch to emojis + Switch language + Switch keyboard app + Dynamic: Switch to emojis / Switch language Font size multiplier (portrait) Font size multiplier (landscape) Layout diff --git a/app/src/main/res/xml/prefs_keyboard.xml b/app/src/main/res/xml/prefs_keyboard.xml index 29c8fc05..ad5981f4 100644 --- a/app/src/main/res/xml/prefs_keyboard.xml +++ b/app/src/main/res/xml/prefs_keyboard.xml @@ -31,13 +31,20 @@ app:title="@string/pref__keyboard__hinted_symbols_mode__label" app:useSimpleSummaryProvider="true"/> - + +