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"/>
-
+
+