summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/deposit/MakeDepositComposable.kt
diff options
context:
space:
mode:
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.kt116
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")) { _, _, _ ->
}
}
}