0
0
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:
ElishaAz 2022-05-22 11:47:31 +03:00 committed by GitHub
parent 80f7d50770
commit e4df74bbae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 46 additions and 0 deletions

View File

@ -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()

View File

@ -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
}

View File

@ -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()

View File

@ -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",
)
}
}

View File

@ -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),
)

View 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>