From 092060be95ec5234f6c0c39e688a1e7c4e120baa Mon Sep 17 00:00:00 2001 From: David Perez Date: Mon, 13 May 2024 11:29:51 -0500 Subject: [PATCH] Add support for keyboard navigation with the slider (#1363) --- .../feature/generator/GeneratorScreen.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt index 932d1f746a..88cc0e696d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt @@ -34,7 +34,11 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext @@ -578,6 +582,7 @@ private fun ColumnScope.PasswordTypeContent( ) } +@Suppress("LongMethod") @Composable private fun PasswordLengthSliderItem( length: Int, @@ -614,6 +619,21 @@ private fun PasswordLengthSliderItem( singleLine = true, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), modifier = Modifier + .onKeyEvent { keyEvent -> + when (keyEvent.key) { + Key.DirectionUp -> { + onPasswordSliderLengthChange(sliderValue + 1, true) + true + } + + Key.DirectionDown -> { + onPasswordSliderLengthChange(sliderValue - 1, true) + true + } + + else -> false + } + } .testTag("PasswordLengthLabel") .wrapContentWidth() .width(labelTextWidth + 16.dp + 16.dp), @@ -636,6 +656,7 @@ private fun PasswordLengthSliderItem( disabledInactiveTickColor = Color.Transparent, ), modifier = Modifier + .focusProperties { canFocus = false } .testTag("PasswordLengthSlider") .weight(1f), )