taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit 79d52ac4960e99d7b67f6435b03b010ed536e161
parent 005a08ea0f9558bfe92f71fa2da75c0493e61b69
Author: Torsten Grote <t@grobox.de>
Date:   Wed, 22 Feb 2023 09:01:31 -0300

[wallet] Improve selecting transaction after bank withdrawal

Diffstat:
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt | 23++++++++++++++++-------
Mwallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt | 5+----
2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt @@ -90,14 +90,23 @@ class TransactionManager( } /** - * Returns true if given [transactionId] was found for given [currency] and selected. + * Returns true if given [transactionId] was found and selected, false otherwise. */ - fun selectTransaction(currency: String, transactionId: String): Boolean { - val t = allTransactions[currency]?.find { - it.transactionId == transactionId - } ?: return false - selectedTransaction = t - return true + suspend fun selectTransaction(transactionId: String): Boolean { + var transaction: Transaction? = null + api.request("getTransactionById", Transaction.serializer()) { + put("transactionId", transactionId) + }.onError { + Log.e(TAG, "Error getting transaction $it") + }.onSuccess { result -> + transaction = result + } + return if (transaction != null) { + selectedTransaction = transaction + true + } else { + false + } } fun deleteTransaction(transactionId: String) = scope.launch { diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt b/wallet/src/main/java/net/taler/wallet/withdraw/PromptWithdrawFragment.kt @@ -92,11 +92,8 @@ class PromptWithdrawFragment : Fragment() { model.showProgressBar.value = false withdrawManager.withdrawStatus.value = null lifecycleScope.launch { - // FIXME this is hacky and blocks the UI thread, not good for many transactions - // load new transactions first and wait for result - transactionManager.loadTransactions().join() // now select new transaction based on currency and ID - if (transactionManager.selectTransaction(status.currency, status.transactionId)) { + if (transactionManager.selectTransaction(status.transactionId)) { findNavController().navigate(R.id.action_promptWithdraw_to_nav_transactions_detail_withdrawal) } else { findNavController().navigate(R.id.action_promptWithdraw_to_nav_main)