taler-android

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

commit aa95b912410e6a97b9def4a8e6d045b3c32fb687
parent 36ef5686037c81b12def0509c184d2aa2891fbc6
Author: Iván Ávalos <avalos@disroot.org>
Date:   Fri, 30 Aug 2024 10:55:48 +0200

[wallet] move selected transition updates to separate function and always ensure updates

Diffstat:
Mwallet/src/main/java/net/taler/wallet/MainViewModel.kt | 2++
Mwallet/src/main/java/net/taler/wallet/backend/ApiResponse.kt | 1+
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt | 28+++++++++++++++++-----------
3 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt @@ -162,6 +162,8 @@ class MainViewModel( if (payload.type in transactionNotifications) viewModelScope.launch(Dispatchers.Main) { // TODO notification API should give us a currency to update + // update currently selected transaction + payload.transactionId?.let { transactionManager.updateTransactionIfSelected(it) } // update currently selected transaction list transactionManager.loadTransactions() } diff --git a/wallet/src/main/java/net/taler/wallet/backend/ApiResponse.kt b/wallet/src/main/java/net/taler/wallet/backend/ApiResponse.kt @@ -37,6 +37,7 @@ data class NotificationPayload( val type: String, val id: String? = null, val event: ObservabilityEvent? = null, + val transactionId: String? = null, ) @Serializable diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt @@ -66,6 +66,23 @@ class TransactionManager( } @UiThread + fun updateTransactionIfSelected(id: String) = scope.launch { + val selectedTransaction = selectedTransaction.value + if (selectedTransaction?.transactionId != id) return@launch + mProgress.value = true + api.request("getTransactionById", Transaction.serializer()) { + put("transactionId", id) + }.onError { + mProgress.value = false + }.onSuccess { result -> + mProgress.value = false + if (result.transactionId != selectedTransaction.transactionId) return@onSuccess + Log.d(TAG, "updating selected transaction: ${result.transactionId}") + mSelectedTransaction.value = result + } + } + + @UiThread fun loadTransactions(searchQuery: String? = null) = scope.launch { val scopeInfo = selectedScope ?: return@launch val liveData = mTransactions.getOrPut(scopeInfo) { MutableLiveData() } @@ -89,17 +106,6 @@ class TransactionManager( mProgress.value = false liveData.value = TransactionsResult.Success(transactions) - // update selected transaction on UiThread (if it exists) - val selected = selectedTransaction.value - if (selected != null) transactions.find { - it.transactionId == selected.transactionId - }?.let { - mSelectedTransaction.value = it - Log.d(TAG, "selected transaction (${it.transactionId}) was updated") - } ?: let { - Log.d(TAG, "selected transaction (${selected.transactionId}) was not updated") - } - // update all transactions on UiThread if there was a scope info if (searchQuery == null) allTransactions[scopeInfo] = transactions }