From 72867a9b5e94aa0645c0d677150e5eee7b18104c Mon Sep 17 00:00:00 2001 From: choelzl Date: Wed, 2 Sep 2026 23:58:03 +0200 Subject: [PATCH] Focus Flow --- .../android/bill_edit/EditBillScreen.kt | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt index 50fdd89..c1e32cd 100644 --- a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt +++ b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.* @@ -17,15 +18,18 @@ import androidx.compose.material.icons.filled.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.scale +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign @@ -188,6 +192,7 @@ fun BillBasicInfoSection( ) val context = LocalContext.current + val focusManager = LocalFocusManager.current val currencyDialogTitle = stringResource(R.string.currency_dialog_title, viewModel.mainCurrencyName) @@ -234,7 +239,8 @@ fun BillBasicInfoSection( Icon(Icons.Default.SwapHoriz, contentDescription = "Change Currency") } }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text) + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Phone, imeAction = ImeAction.Next), + keyboardActions = KeyboardActions(onNext = { focusManager.moveFocus(FocusDirection.Next) }) ) Spacer(modifier = Modifier.height(8.dp)) @@ -245,7 +251,9 @@ fun BillBasicInfoSection( enabled = canEdit, placeholder = { Text(stringResource(R.string.label_what)) }, modifier = Modifier.fillMaxWidth(), - leadingIcon = { Icon(Icons.Default.Title, contentDescription = null) } + leadingIcon = { Icon(Icons.Default.Title, contentDescription = null) }, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), + keyboardActions = KeyboardActions(onNext = { focusManager.moveFocus(FocusDirection.Next) }) ) Spacer(modifier = Modifier.height(8.dp)) @@ -445,6 +453,7 @@ fun OwerSelectionSection( Text(member.name, modifier = Modifier.weight(1f)) if (isSelected || viewModel.splitMode != SplitMode.EVEN) { + val focusManager = LocalFocusManager.current val interactionSource = remember { MutableInteractionSource() } val value = if (viewModel.splitMode == SplitMode.PERCENT) { viewModel.owersPercentSplit[member.id] ?: "" @@ -469,7 +478,8 @@ fun OwerSelectionSection( interactionSource = interactionSource, singleLine = true, enabled = viewModel.splitMode != SplitMode.EVEN && canEdit, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number, imeAction = ImeAction.Next), + keyboardActions = KeyboardActions(onNext = { focusManager.moveFocus(FocusDirection.Next) }), cursorBrush = SolidColor(MaterialTheme.colors.onSurface), textStyle = LocalTextStyle.current.copy( textAlign = TextAlign.Right,