mirror of
https://github.com/florisboard/florisboard.git
synced 2024-09-19 19:42:20 +02:00
Added a button for switching to an IME that supports voice (#1587)
* Added a button for switching to an IME that supports voice * Moved voice input button to the left of clipboard * Improve voice key position and show toast on failure Co-authored-by: Patrick Goldinger <patrick@patrickgold.dev>
This commit is contained in:
parent
80f7d50770
commit
e4df74bbae
@ -32,6 +32,7 @@ import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InlineSuggestionsRequest
|
||||
import android.view.inputmethod.InlineSuggestionsResponse
|
||||
import android.view.inputmethod.InputConnection
|
||||
import android.view.inputmethod.InputMethodInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
@ -95,6 +96,7 @@ import dev.patrickgold.florisboard.lib.android.isOrientationLandscape
|
||||
import dev.patrickgold.florisboard.lib.android.isOrientationPortrait
|
||||
import dev.patrickgold.florisboard.lib.android.launchActivity
|
||||
import dev.patrickgold.florisboard.lib.android.setLocale
|
||||
import dev.patrickgold.florisboard.lib.android.showShortToast
|
||||
import dev.patrickgold.florisboard.lib.android.systemServiceOrNull
|
||||
import dev.patrickgold.florisboard.lib.compose.FlorisButton
|
||||
import dev.patrickgold.florisboard.lib.compose.ProvideLocalizedResources
|
||||
@ -215,6 +217,29 @@ class FlorisImeService : LifecycleInputMethodService() {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun switchToVoiceInputMethod(): Boolean {
|
||||
val ims = FlorisImeServiceReference.get() ?: return false
|
||||
val imm = ims.systemServiceOrNull(InputMethodManager::class) ?: return false
|
||||
val list: List<InputMethodInfo> = imm.enabledInputMethodList
|
||||
for (el in list) {
|
||||
for (i in 0 until el.subtypeCount){
|
||||
if (el.getSubtypeAt(i).mode != "voice") continue
|
||||
if (AndroidVersion.ATLEAST_API28_P) {
|
||||
ims.switchInputMethod(el.id)
|
||||
return true
|
||||
} else {
|
||||
ims.window.window?.let { window ->
|
||||
@Suppress("DEPRECATION")
|
||||
imm.setInputMethod(window.attributes.token, el.id)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ims.showShortToast("Failed to find voice IME, do you have one installed?")
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private val prefs by florisPreferenceModel()
|
||||
|
@ -157,6 +157,9 @@ fun ComputingEvaluator.computeIconResId(data: KeyData): Int? {
|
||||
// TODO: find a better icon for compact mode
|
||||
R.drawable.ic_smartphone
|
||||
}
|
||||
KeyCode.VOICE_INPUT -> {
|
||||
R.drawable.ic_keyboard_voice
|
||||
}
|
||||
KeyCode.DELETE -> {
|
||||
R.drawable.ic_backspace
|
||||
}
|
||||
|
@ -664,6 +664,7 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
|
||||
KeyCode.IME_UI_MODE_TEXT -> activeState.imeUiMode = ImeUiMode.TEXT
|
||||
KeyCode.IME_UI_MODE_MEDIA -> activeState.imeUiMode = ImeUiMode.MEDIA
|
||||
KeyCode.IME_UI_MODE_CLIPBOARD -> activeState.imeUiMode = ImeUiMode.CLIPBOARD
|
||||
KeyCode.VOICE_INPUT -> FlorisImeService.switchToVoiceInputMethod()
|
||||
KeyCode.KANA_SWITCHER -> handleKanaSwitch()
|
||||
KeyCode.KANA_HIRA -> handleKanaHira()
|
||||
KeyCode.KANA_KATA -> handleKanaKata()
|
||||
|
@ -476,6 +476,13 @@ class TextKeyData(
|
||||
code = KeyCode.SETTINGS,
|
||||
label = "settings",
|
||||
)
|
||||
|
||||
/** Predefined key data for [KeyCode.VOICE_INPUT] */
|
||||
val VOICE_INPUT = TextKeyData(
|
||||
type = KeyType.UNSPECIFIED,
|
||||
code = KeyCode.VOICE_INPUT,
|
||||
label = "voice_input",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ private val QuickActionSet = setOf<QuickAction>(
|
||||
QuickAction.Key(TextKeyData.REDO),
|
||||
QuickAction.Key(TextKeyData.SETTINGS),
|
||||
QuickAction.Key(TextKeyData.IME_UI_MODE_MEDIA),
|
||||
QuickAction.Key(TextKeyData.VOICE_INPUT),
|
||||
QuickAction.Key(TextKeyData.COMPACT_LAYOUT_TO_RIGHT),
|
||||
QuickAction.Key(TextKeyData.IME_UI_MODE_CLIPBOARD),
|
||||
)
|
||||
|
9
app/src/main/res/drawable/ic_keyboard_voice.xml
Normal file
9
app/src/main/res/drawable/ic_keyboard_voice.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M12,15c1.66,0 2.99,-1.34 2.99,-3L15,6c0,-1.66 -1.34,-3 -3,-3S9,4.34 9,6v6c0,1.66 1.34,3 3,3zM17.3,12c0,3 -2.54,5.1 -5.3,5.1S6.7,15 6.7,12L5,12c0,3.42 2.72,6.23 6,6.72L11,22h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
|
||||
</vector>
|
Loading…
Reference in New Issue
Block a user