commit 824516f292df117427d298239b778500c3884c45 parent b23458e8d3dcdb3b4c5ef2e3ad1a00ee2adff621 Author: Iván Ávalos <avalos@disroot.org> Date: Thu, 19 Sep 2024 12:45:34 +0200 [wallet] improve ToS accept detection bug 0009157 Diffstat:
5 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt @@ -186,6 +186,8 @@ class ExchangeManager( Log.d(TAG, "Error setExchangeTosAccepted: $error") }.onSuccess { success = true + // update exchange list + list() } return success } diff --git a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt @@ -41,6 +41,7 @@ import net.taler.wallet.showError class IncomingPushPaymentFragment : Fragment() { private val model: MainViewModel by activityViewModels() private val peerManager get() = model.peerManager + private val exchangeManager get() = model.exchangeManager override fun onCreateView( inflater: LayoutInflater, @@ -82,15 +83,14 @@ class IncomingPushPaymentFragment : Fragment() { } } } + + exchangeManager.exchanges.observe(viewLifecycleOwner) { exchanges -> + peerManager.refreshPeerPushCreditTos(exchanges) + } } override fun onStart() { super.onStart() activity?.setTitle(R.string.receive_peer_payment_title) } - - override fun onResume() { - super.onResume() - peerManager.refreshPeerPushCreditTos() - } } diff --git a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt @@ -294,12 +294,11 @@ class PeerManager( } @UiThread - fun refreshPeerPushCreditTos() = scope.launch { + fun refreshPeerPushCreditTos(exchanges: List<ExchangeItem>) = scope.launch { _incomingPushState.update { state -> var newState = state if (state is IncomingTosReview) { - // FIXME: better null handling! - exchangeManager.findExchangeByUrl(state.exchangeBaseUrl)?.let { exchange -> + exchanges.find { it.exchangeBaseUrl == state.exchangeBaseUrl }?.let { exchange -> if (exchange.tosStatus == ExchangeTosStatus.Accepted) { newState = IncomingTerms( amountRaw = state.amountRaw, @@ -308,6 +307,8 @@ class PeerManager( id = state.id, ) } + } ?: run { + Log.d(TAG, "could not refresh ToS status, exchange ${state.exchangeBaseUrl} was not found") } } newState diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt @@ -228,12 +228,11 @@ class PromptWithdrawFragment: Fragment() { selectExchangeDialog.exchangeSelection.observe(viewLifecycleOwner, EventObserver { onExchangeSelected(it) }) - } - override fun onResume() { - super.onResume() - // detect ToS acceptation - withdrawManager.refreshTosStatus() + exchangeManager.exchanges.observe(viewLifecycleOwner) { exchanges -> + // detect ToS acceptation + withdrawManager.refreshTosStatus(exchanges) + } } private fun selectExchange() { diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt @@ -331,15 +331,17 @@ class WithdrawManager( } @UiThread - fun refreshTosStatus() = scope.launch { + fun refreshTosStatus(exchanges: List<ExchangeItem>) = scope.launch { _withdrawStatus.update { status -> var newStatus = status status.exchangeBaseUrl?.let { exchangeBaseUrl -> - exchangeManager.findExchangeByUrl(exchangeBaseUrl)?.let { exchange -> + exchanges.find { it.exchangeBaseUrl == exchangeBaseUrl }?.let { exchange -> if (exchange.tosStatus == ExchangeTosStatus.Accepted) { newStatus = status.copy(status = InfoReceived) } } + } ?: run { + Log.d(TAG, "could not refresh ToS status, exchange ${status.exchangeBaseUrl} was not found") } newStatus }