diff options
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.kt | 41 |
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, |