0
0
mirror of https://github.com/florisboard/florisboard.git synced 2024-09-20 03:52:18 +02:00

Adjust and fix keyboard height calculation (#1561)

This commit is contained in:
Patrick Goldinger 2022-08-21 23:03:21 +02:00
parent f65b11bc6d
commit 201de6a6db
No known key found for this signature in database
GPG Key ID: 533467C3DC7B9262
7 changed files with 29 additions and 20 deletions

View File

@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.staticCompositionLocalOf
@ -33,6 +34,8 @@ import dev.patrickgold.florisboard.app.florisPreferenceModel
import dev.patrickgold.florisboard.ime.onehanded.OneHandedMode
import dev.patrickgold.florisboard.ime.smartbar.ExtendedActionsPlacement
import dev.patrickgold.florisboard.ime.smartbar.SmartbarLayout
import dev.patrickgold.florisboard.ime.text.keyboard.TextKeyboard
import dev.patrickgold.florisboard.keyboardManager
import dev.patrickgold.florisboard.lib.android.isOrientationLandscape
import dev.patrickgold.florisboard.lib.observeAsTransformingState
import dev.patrickgold.florisboard.lib.util.ViewUtils
@ -54,9 +57,11 @@ object FlorisImeSizing {
@Composable
fun keyboardUiHeight(): Dp {
val prefs by florisPreferenceModel()
val numberRowEnabled by prefs.keyboard.numberRow.observeAsState()
return (keyboardRowBaseHeight * (if (numberRowEnabled) 5 else 4))
val context = LocalContext.current
val keyboardManager by context.keyboardManager()
val evaluator by keyboardManager.lastCharactersEvaluator.collectAsState()
val rowCount = (evaluator.keyboard as TextKeyboard).rowCount.coerceAtLeast(4)
return (keyboardRowBaseHeight * rowCount)
}
@Composable

View File

@ -101,6 +101,8 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
val activeEvaluator get() = _activeEvaluator.asStateFlow()
private val _activeSmartbarEvaluator = MutableStateFlow<ComputingEvaluator>(DefaultComputingEvaluator)
val activeSmartbarEvaluator get() = _activeSmartbarEvaluator.asStateFlow()
private val _lastCharactersEvaluator = MutableStateFlow<ComputingEvaluator>(DefaultComputingEvaluator)
val lastCharactersEvaluator get() = _lastCharactersEvaluator.asStateFlow()
val inputEventDispatcher = InputEventDispatcher.new(
repeatableKeyCodes = intArrayOf(
@ -185,6 +187,9 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver {
}
_activeEvaluator.value = computingEvaluator
_activeSmartbarEvaluator.value = computingEvaluator.asSmartbarQuickActionsEvaluator()
if (computingEvaluator.keyboard.mode == KeyboardMode.CHARACTERS) {
_lastCharactersEvaluator.value = computingEvaluator
}
}
}

View File

@ -310,7 +310,7 @@ private fun StickyAction() {
val keyboardManager by context.keyboardManager()
val actionArrangement by prefs.smartbar.actionArrangement.observeAsState()
val evaluator by keyboardManager.activeEvaluator.collectAsState()
val evaluator by keyboardManager.activeSmartbarEvaluator.collectAsState()
if (actionArrangement.stickyAction != null) {
QuickActionButton(

View File

@ -47,7 +47,8 @@ sealed class QuickAction {
override fun onPointerUp(context: Context) {
val keyboardManager by context.keyboardManager()
keyboardManager.inputEventDispatcher.sendUp(data)
if (!keyboardManager.inputEventDispatcher.isRepeatable(data) && data.code != KeyCode.TOGGLE_ACTIONS_OVERFLOW) {
if (!keyboardManager.inputEventDispatcher.isRepeatable(data) &&
data.code != KeyCode.TOGGLE_ACTIONS_OVERFLOW && data.code != KeyCode.CLIPBOARD_SELECT_ALL) {
keyboardManager.activeState.isActionsOverflowVisible = false
}
}

View File

@ -47,7 +47,7 @@ fun QuickActionsOverflowPanel() {
val keyboardManager by context.keyboardManager()
val actionArrangement by prefs.smartbar.actionArrangement.observeAsState()
val evaluator by keyboardManager.activeEvaluator.collectAsState()
val evaluator by keyboardManager.activeSmartbarEvaluator.collectAsState()
val dynamicActionsCountToShow =
actionArrangement.dynamicActions.size - keyboardManager.smartbarVisibleDynamicActionsCount

View File

@ -49,7 +49,7 @@ fun QuickActionsRow(
val keyboardManager by context.keyboardManager()
val flipToggles by prefs.smartbar.flipToggles.observeAsState()
val evaluator by keyboardManager.activeEvaluator.collectAsState()
val evaluator by keyboardManager.activeSmartbarEvaluator.collectAsState()
val smartbarLayout by prefs.smartbar.layout.observeAsState()
val actionArrangement by prefs.smartbar.actionArrangement.observeAsState()

View File

@ -115,15 +115,6 @@ fun TextKeyboardLayout(
val glideTypingManager by context.glideTypingManager()
val keyboard = evaluator.keyboard as TextKeyboard
val numberRowEnabled by prefs.keyboard.numberRow.observeAsTransformingState { numberRowEnabled ->
when (keyboard.mode) {
KeyboardMode.CHARACTERS,
KeyboardMode.NUMERIC_ADVANCED,
KeyboardMode.SYMBOLS,
KeyboardMode.SYMBOLS2 -> numberRowEnabled
else -> false
}
}
val glideEnabledInternal by prefs.glide.enabled.observeAsState()
val glideEnabled = glideEnabledInternal && evaluator.editorInfo.isRichInputEditor &&
evaluator.state.keyVariation != KeyVariation.PASSWORD
@ -173,8 +164,7 @@ fun TextKeyboardLayout(
if (isSmartbarKeyboard) {
FlorisImeSizing.smartbarHeight
} else {
FlorisImeSizing.keyboardRowBaseHeight *
keyboard.rowCount.coerceAtLeast(if (numberRowEnabled) 5 else 4)
FlorisImeSizing.keyboardUiHeight()
}
)
.onGloballyPositioned { coords ->
@ -240,8 +230,16 @@ fun TextKeyboardLayout(
height = FlorisImeSizing.smartbarHeight.toPx()
} else {
width = keyboardWidth / 10f
height = FlorisImeSizing.keyboardRowBaseHeight.toPx() *
(if (numberRowEnabled && keyboard.mode != KeyboardMode.CHARACTERS) 1.12f else 1f)
height = when (keyboard.mode) {
KeyboardMode.CHARACTERS,
KeyboardMode.NUMERIC_ADVANCED,
KeyboardMode.SYMBOLS,
KeyboardMode.SYMBOLS2 -> {
(FlorisImeSizing.keyboardUiHeight() / keyboard.rowCount)
.coerceAtMost(FlorisImeSizing.keyboardRowBaseHeight * 1.12f).toPx()
}
else -> FlorisImeSizing.keyboardRowBaseHeight.toPx() * keyboard.rowCount
}
}
}
desiredKey.visibleBounds.applyFrom(desiredKey.touchBounds).deflateBy(keyMarginH, keyMarginV)