summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt41
1 files changed, 36 insertions, 5 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
index 0f10b5f..0075f95 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositManager.kt
@@ -46,10 +46,36 @@ class DepositManager(
}
@UiThread
- fun onDepositButtonClicked(amount: Amount, receiverName: String, iban: String, bic: String) {
+ fun onDepositButtonClicked(amount: Amount, receiverName: String, iban: String) {
+ if (depositState.value is DepositState.FeesChecked) {
+ // fees already checked, so IBAN was validated, can make deposit directly
+ makeIbanDeposit(amount, receiverName, iban)
+ } else {
+ // validate IBAN first
+ mDepositState.value = DepositState.CheckingFees
+ scope.launch {
+ api.request("validateIban", ValidateIbanResponse.serializer()) {
+ put("iban", iban)
+ }.onError {
+ Log.e(TAG, "Error validateIban $it")
+ mDepositState.value = DepositState.Error(it)
+ }.onSuccess { response ->
+ if (response.valid) {
+ // only prepare/make deposit, if IBAN is valid
+ makeIbanDeposit(amount, receiverName, iban)
+ } else {
+ mDepositState.value = DepositState.IbanInvalid
+ }
+ }
+ }
+ }
+ }
+
+ @UiThread
+ private fun makeIbanDeposit(amount: Amount, receiverName: String, iban: String) {
val paytoUri: String = PaytoUriIban(
iban = iban,
- bic = bic,
+ bic = null,
targetPath = "",
params = mapOf("receiver-name" to receiverName),
).paytoUri
@@ -66,7 +92,7 @@ class DepositManager(
}
private fun makeDeposit(amount: Amount, uri: String) {
- if (depositState.value.showFees) makeDeposit(
+ if (depositState.value is DepositState.FeesChecked) makeDeposit(
paytoUri = uri,
amount = amount,
totalDepositCost = depositState.value.totalDepositCost
@@ -86,7 +112,7 @@ class DepositManager(
put("amount", amount.toJSONString())
}.onError {
Log.e(TAG, "Error prepareDeposit $it")
- mDepositState.value = DepositState.Error(it.userFacingMsg)
+ mDepositState.value = DepositState.Error(it)
}.onSuccess {
mDepositState.value = DepositState.FeesChecked(
totalDepositCost = it.totalDepositCost,
@@ -112,7 +138,7 @@ class DepositManager(
put("amount", amount.toJSONString())
}.onError {
Log.e(TAG, "Error createDepositGroup $it")
- mDepositState.value = DepositState.Error(it.userFacingMsg)
+ mDepositState.value = DepositState.Error(it)
}.onSuccess {
mDepositState.value = DepositState.Success
}
@@ -126,6 +152,11 @@ class DepositManager(
}
@Serializable
+data class ValidateIbanResponse(
+ val valid: Boolean,
+)
+
+@Serializable
data class PrepareDepositResponse(
val totalDepositCost: Amount,
val effectiveDepositAmount: Amount,