From 201de6a6db0795c1e3e38f8d84173ef05839a8c1 Mon Sep 17 00:00:00 2001 From: Patrick Goldinger Date: Sun, 21 Aug 2022 23:03:21 +0200 Subject: [PATCH] Adjust and fix keyboard height calculation (#1561) --- .../ime/keyboard/FlorisImeSizing.kt | 11 ++++++--- .../ime/keyboard/KeyboardManager.kt | 5 ++++ .../florisboard/ime/smartbar/Smartbar.kt | 2 +- .../ime/smartbar/quickaction/QuickAction.kt | 3 ++- .../quickaction/QuickActionsOverflowPanel.kt | 2 +- .../smartbar/quickaction/QuickActionsRow.kt | 2 +- .../ime/text/keyboard/TextKeyboardLayout.kt | 24 +++++++++---------- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/FlorisImeSizing.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/FlorisImeSizing.kt index 0beb6b9d..bb85692c 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/FlorisImeSizing.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/FlorisImeSizing.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt index ceca9e49..e3cbe3a5 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/keyboard/KeyboardManager.kt @@ -101,6 +101,8 @@ class KeyboardManager(context: Context) : InputKeyEventReceiver { val activeEvaluator get() = _activeEvaluator.asStateFlow() private val _activeSmartbarEvaluator = MutableStateFlow(DefaultComputingEvaluator) val activeSmartbarEvaluator get() = _activeSmartbarEvaluator.asStateFlow() + private val _lastCharactersEvaluator = MutableStateFlow(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 + } } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt index bf79d0ff..cb461f7e 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/Smartbar.kt @@ -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( diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickAction.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickAction.kt index 2a6e1d32..645d8ca9 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickAction.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickAction.kt @@ -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 } } diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt index cc7cd71c..bcdd4d53 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsOverflowPanel.kt @@ -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 diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt index 0c46a656..3935ed97 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/smartbar/quickaction/QuickActionsRow.kt @@ -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() diff --git a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt index 8b367605..c9326b4b 100644 --- a/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt +++ b/app/src/main/kotlin/dev/patrickgold/florisboard/ime/text/keyboard/TextKeyboardLayout.kt @@ -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)