diff --git a/app/src/main/kotlin/de/justjanne/quasseldroid/ui/components/LoginView.kt b/app/src/main/kotlin/de/justjanne/quasseldroid/ui/components/LoginView.kt index fa3b1a6369a9de858f2dcd809bcff3da0229674c..d3e6aa05ed3b1597a8bb5bfa8348da5fcd00ad04 100644 --- a/app/src/main/kotlin/de/justjanne/quasseldroid/ui/components/LoginView.kt +++ b/app/src/main/kotlin/de/justjanne/quasseldroid/ui/components/LoginView.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import de.justjanne.quasseldroid.service.ConnectionData +import de.justjanne.quasseldroid.util.extensions.handleTabFocus import de.justjanne.quasseldroid.util.saver.TextFieldValueSaver import java.net.InetSocketAddress @@ -55,7 +56,8 @@ fun LoginView( singleLine = true, modifier = Modifier .padding(16.dp) - .fillMaxWidth(), + .fillMaxWidth() + .handleTabFocus(focusManager), label = { Text("Hostname") }, keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { @@ -68,7 +70,8 @@ fun LoginView( singleLine = true, modifier = Modifier .padding(16.dp) - .fillMaxWidth(), + .fillMaxWidth() + .handleTabFocus(focusManager), label = { Text("Port") }, keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { @@ -81,7 +84,8 @@ fun LoginView( singleLine = true, modifier = Modifier .padding(16.dp) - .fillMaxWidth(), + .fillMaxWidth() + .handleTabFocus(focusManager), label = { Text("Username") }, keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { @@ -94,7 +98,8 @@ fun LoginView( singleLine = true, modifier = Modifier .padding(16.dp) - .fillMaxWidth(), + .fillMaxWidth() + .handleTabFocus(focusManager), label = { Text("Password") }, keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { diff --git a/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/ModifierExtensions.kt b/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/ModifierExtensions.kt new file mode 100644 index 0000000000000000000000000000000000000000..e201bd96ef8558bd0227a6bda49c354b6595292c --- /dev/null +++ b/app/src/main/kotlin/de/justjanne/quasseldroid/util/extensions/ModifierExtensions.kt @@ -0,0 +1,24 @@ +package de.justjanne.quasseldroid.util.extensions + +import android.view.KeyEvent +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusManager +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onPreviewKeyEvent + +fun Modifier.handleTabFocus(focusManager: FocusManager): Modifier = + onPreviewKeyEvent { + if (it.key == Key.Tab) { + if (it.nativeKeyEvent.action == KeyEvent.ACTION_UP) { + focusManager.moveFocus( + if (it.nativeKeyEvent.isShiftPressed) FocusDirection.Up + else FocusDirection.Down + ) + } + true + } else { + false + } + }