From 8062b84d95f759e435d6248c3523ac5c94dce743 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Wed, 31 Jan 2024 11:33:16 -0600 Subject: [wallet] List possibleExchanges in exchange selection for withdrawals bug 0008300 --- .../net/taler/wallet/exchanges/SelectExchangeFragment.kt | 13 ++++++++++--- .../main/java/net/taler/wallet/withdraw/WithdrawManager.kt | 10 +++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt b/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt index 61e0db5..732e0c5 100644 --- a/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/exchanges/SelectExchangeFragment.kt @@ -18,6 +18,7 @@ package net.taler.wallet.exchanges import androidx.navigation.fragment.findNavController import net.taler.common.fadeOut +import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails class SelectExchangeFragment : ExchangeListFragment() { @@ -30,17 +31,23 @@ class SelectExchangeFragment : ExchangeListFragment() { override fun onExchangeUpdate(exchanges: List) { ui.progressBar.fadeOut() - super.onExchangeUpdate(exchanges.filter { exchangeItem -> - exchangeItem.currency == exchangeSelection.amount.currency - }) + val status = withdrawManager.withdrawStatus.value + if (status is ReceivedDetails) { + super.onExchangeUpdate(status.possibleExchanges) + } else { + findNavController().navigateUp() + } } override fun onExchangeSelected(item: ExchangeItem) { + val status = withdrawManager.withdrawStatus.value + val exchanges = (status as? ReceivedDetails)?.possibleExchanges ?: emptyList() withdrawManager.getWithdrawalDetails( exchangeBaseUrl = item.exchangeBaseUrl, amount = exchangeSelection.amount, showTosImmediately = true, uri = exchangeSelection.talerWithdrawUri, + possibleExchanges = exchanges, ) findNavController().navigateUp() } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt index ceae7e1..34ae69f 100644 --- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt +++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -52,6 +52,7 @@ sealed class WithdrawStatus { val tosText: String, val tosEtag: String, val showImmediately: Event, + val possibleExchanges: List = emptyList(), ) : WithdrawStatus() data class ReceivedDetails( @@ -61,6 +62,7 @@ sealed class WithdrawStatus { val amountEffective: Amount, val withdrawalAccountList: List, val ageRestrictionOptions: List? = null, + val possibleExchanges: List = emptyList(), ) : WithdrawStatus() data object Withdrawing : WithdrawStatus() @@ -191,6 +193,7 @@ class WithdrawManager( amount = details.amount, showTosImmediately = false, uri = uri, + possibleExchanges = details.possibleExchanges, ) } } @@ -200,6 +203,7 @@ class WithdrawManager( amount: Amount, showTosImmediately: Boolean = false, uri: String? = null, + possibleExchanges: List = emptyList(), ) = scope.launch { withdrawStatus.value = WithdrawStatus.Loading(uri) api.request("getWithdrawalDetailsForAmount", ManualWithdrawalDetails.serializer()) { @@ -216,8 +220,9 @@ class WithdrawManager( amountEffective = details.amountEffective, withdrawalAccountList = details.withdrawalAccountsList, ageRestrictionOptions = details.ageRestrictionOptions, + possibleExchanges = possibleExchanges, ) - } else getExchangeTos(exchangeBaseUrl, details, showTosImmediately, uri) + } else getExchangeTos(exchangeBaseUrl, details, showTosImmediately, uri, possibleExchanges) } } @@ -240,6 +245,7 @@ class WithdrawManager( details: ManualWithdrawalDetails, showImmediately: Boolean, uri: String?, + possibleExchanges: List, ) = scope.launch { api.request("getExchangeTos", TosResponse.serializer()) { put("exchangeBaseUrl", exchangeBaseUrl) @@ -256,6 +262,7 @@ class WithdrawManager( tosText = it.content, tosEtag = it.currentEtag, showImmediately = showImmediately.toEvent(), + possibleExchanges = possibleExchanges, ) } } @@ -278,6 +285,7 @@ class WithdrawManager( amountEffective = s.amountEffective, withdrawalAccountList = s.withdrawalAccountList, ageRestrictionOptions = s.ageRestrictionOptions, + possibleExchanges = s.possibleExchanges, ) } } -- cgit v1.2.3