diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt | 116 |
1 files changed, 29 insertions, 87 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt index 3c93ed7..9333ce1 100644 --- a/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt +++ b/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt @@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Surface @@ -41,22 +40,23 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import net.taler.common.Amount import net.taler.wallet.R +import net.taler.wallet.transactions.AmountType.Negative +import net.taler.wallet.transactions.AmountType.Positive +import net.taler.wallet.transactions.TransactionAmountComposable -@OptIn(ExperimentalMaterial3Api::class) @Composable fun MakeDepositComposable( state: DepositState, amount: Amount, presetName: String? = null, presetIban: String? = null, - onMakeDeposit: (Amount, String, String, String) -> Unit, + onMakeDeposit: (Amount, String, String) -> Unit, ) { val scrollState = rememberScrollState() Column( @@ -67,18 +67,18 @@ fun MakeDepositComposable( ) { var name by rememberSaveable { mutableStateOf(presetName ?: "") } var iban by rememberSaveable { mutableStateOf(presetIban ?: "") } - var bic by rememberSaveable { mutableStateOf("") } - var bicInvalid by rememberSaveable { mutableStateOf(false) } val focusRequester = remember { FocusRequester() } OutlinedTextField( modifier = Modifier .padding(16.dp) - .focusRequester(focusRequester), + .focusRequester(focusRequester) + .fillMaxWidth(), value = name, enabled = !state.showFees, onValueChange = { input -> name = input }, + singleLine = true, isError = name.isBlank(), label = { Text( @@ -95,8 +95,10 @@ fun MakeDepositComposable( val ibanError = state is DepositState.IbanInvalid OutlinedTextField( modifier = Modifier - .padding(16.dp), + .padding(horizontal = 16.dp) + .fillMaxWidth(), value = iban, + singleLine = true, enabled = !state.showFees, onValueChange = { input -> iban = input.uppercase() @@ -120,46 +122,10 @@ fun MakeDepositComposable( ) } ) - OutlinedTextField( - modifier = Modifier - .padding(16.dp), - value = bic, - enabled = !state.showFees, - onValueChange = { input -> - bicInvalid = false - bic = input - }, - isError = bicInvalid, - supportingText = { - if (bicInvalid) { - Text( - modifier = Modifier.fillMaxWidth(), - text = stringResource(R.string.send_deposit_bic_error), - color = MaterialTheme.colorScheme.error - ) - } - }, - label = { - Text( - text = stringResource(R.string.send_deposit_bic), - ) - } - ) - val amountTitle = if (state.effectiveDepositAmount == null) { - R.string.amount_chosen - } else R.string.send_deposit_amount_effective - Text( - modifier = Modifier.padding(horizontal = 16.dp), - text = stringResource(id = amountTitle), - ) - val shownAmount = if (state.effectiveDepositAmount == null) amount else { - state.effectiveDepositAmount - } - Text( - modifier = Modifier.padding(16.dp), - fontSize = 24.sp, - color = colorResource(R.color.green), - text = shownAmount.toString(), + TransactionAmountComposable( + label = stringResource(R.string.amount_chosen), + amount = amount, + amountType = Positive, ) AnimatedVisibility(visible = state.showFees) { Column( @@ -169,29 +135,17 @@ fun MakeDepositComposable( val totalAmount = state.totalDepositCost ?: amount val effectiveAmount = state.effectiveDepositAmount ?: Amount.zero(amount.currency) val fee = totalAmount - effectiveAmount - Text( - modifier = Modifier.padding(horizontal = 16.dp), - text = stringResource(id = R.string.withdraw_fees), - ) - Text( - modifier = Modifier.padding(16.dp), - fontSize = 24.sp, - color = if (fee.isZero()) colorResource(R.color.green) else MaterialTheme.colorScheme.error, - text = if (fee.isZero()) { - fee.toString() - } else { - stringResource(R.string.amount_negative, fee.toString()) - }, - ) - Text( - modifier = Modifier.padding(horizontal = 16.dp), - text = stringResource(id = R.string.send_amount), + + TransactionAmountComposable( + label = stringResource(R.string.withdraw_fees), + amount = fee.withSpec(amount.spec), + amountType = if (fee.isZero()) Positive else Negative, ) - Text( - modifier = Modifier.padding(16.dp), - fontSize = 24.sp, - color = colorResource(R.color.green), - text = totalAmount.toString(), + + TransactionAmountComposable( + label = stringResource(R.string.send_amount), + amount = effectiveAmount.withSpec(amount.spec), + amountType = Positive, ) } } @@ -200,7 +154,7 @@ fun MakeDepositComposable( modifier = Modifier.padding(16.dp), fontSize = 18.sp, color = MaterialTheme.colorScheme.error, - text = (state as? DepositState.Error)?.msg ?: "", + text = (state as? DepositState.Error)?.error?.userFacingMsg ?: "", ) } val focusManager = LocalFocusManager.current @@ -209,11 +163,7 @@ fun MakeDepositComposable( enabled = iban.isNotBlank(), onClick = { focusManager.clearFocus() - if (isValidBic(bic)) { - onMakeDeposit(amount, name, iban, bic) - } else { - bicInvalid = true - } + onMakeDeposit(amount, name, iban) }, ) { Text( @@ -226,25 +176,17 @@ fun MakeDepositComposable( } } -private val bicRegex = Regex("[a-zA-Z\\d]{8,11}") - -/** - * performs some minimal verification, nothing perfect. - * Allows for empty string. - */ -private fun isValidBic(bic: String): Boolean = bic.isEmpty() || bicRegex.matches(bic) - @Preview @Composable fun PreviewMakeDepositComposable() { Surface { val state = DepositState.FeesChecked( - effectiveDepositAmount = Amount.fromDouble("TESTKUDOS", 42.00), - totalDepositCost = Amount.fromDouble("TESTKUDOS", 42.23), + effectiveDepositAmount = Amount.fromString("TESTKUDOS", "42.00"), + totalDepositCost = Amount.fromString("TESTKUDOS", "42.23"), ) MakeDepositComposable( state = state, - amount = Amount.fromDouble("TESTKUDOS", 42.23)) { _, _, _, _ -> + amount = Amount.fromString("TESTKUDOS", "42.23")) { _, _, _ -> } } } |