diff options
author | Iván Ávalos <avalos@disroot.org> | 2023-09-15 12:22:09 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2023-09-26 18:30:53 +0200 |
commit | 1624b995729c4232a6945d359ec7f089866d2a15 (patch) | |
tree | 8d99b3dd49127ca7ac7f0adec69fc64b34440286 /wallet/src/main/java/net | |
parent | 66d96c5b18c878f545c2081ed5526271dd39125b (diff) | |
download | taler-android-1624b995729c4232a6945d359ec7f089866d2a15.tar.gz taler-android-1624b995729c4232a6945d359ec7f089866d2a15.tar.bz2 taler-android-1624b995729c4232a6945d359ec7f089866d2a15.zip |
[wallet] fix: AmountInputField reacts to external changes
Diffstat (limited to 'wallet/src/main/java/net')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt b/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt index a9503d7..9abc03d 100644 --- a/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt +++ b/wallet/src/main/java/net/taler/wallet/compose/AmountInputField.kt @@ -17,11 +17,14 @@ package net.taler.wallet.compose import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text import androidx.compose.material3.TextFieldColors import androidx.compose.material3.TextFieldDefaults import androidx.compose.runtime.Composable @@ -38,6 +41,8 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.OffsetMapping import androidx.compose.ui.text.input.TransformedText import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import net.taler.common.Amount import java.text.DecimalFormat @@ -62,13 +67,22 @@ fun AmountInputField( colors: TextFieldColors = TextFieldDefaults.outlinedTextFieldColors() ) { val decimalSeparator = DecimalFormat().decimalFormatSymbols.decimalSeparator - var intermediate by remember { mutableStateOf(value) } + var tmpIn by remember { mutableStateOf(value) } + + // React to external changes + val tmpOut = remember(tmpIn, value) { + transformOutput(tmpIn, decimalSeparator, '.').let { + if (value != it) value else tmpIn + } + } + OutlinedTextField( - value = intermediate, + value = tmpOut, onValueChange = { input -> val filtered = transformOutput(input, decimalSeparator, '.') if (Amount.isValidAmountStr(filtered)) { - intermediate = transformInput(input, decimalSeparator, '.') + tmpIn = transformInput(input, decimalSeparator, '.') + // tmpIn = input onValueChange(filtered) } }, @@ -143,4 +157,19 @@ private fun transformOutput( it.endsWith(outputDecimalSeparator) -> "${it}0" else -> it } +} + +@Preview +@Composable +fun AmountInputFieldPreview() { + var value by remember { mutableStateOf("0") } + TalerSurface { + Column { + Text(modifier = Modifier.padding(16.dp), text = value) + AmountInputField( + value = value, + onValueChange = { value = it }, + ) + } + } }
\ No newline at end of file |