diff options
author | Torsten Grote <t@grobox.de> | 2020-05-15 11:06:46 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-05-15 14:26:43 -0300 |
commit | 6028376333344c90ba8dbaa75aad759b2915962d (patch) | |
tree | 5536f4acf72aa432ec316228a28d8f125f2a240e /wallet/src/main/java/net/taler/wallet/transactions | |
parent | 3565fc05bca6e55896ff7b5115e6b8021f2a9d4e (diff) | |
download | taler-android-6028376333344c90ba8dbaa75aad759b2915962d.tar.gz taler-android-6028376333344c90ba8dbaa75aad759b2915962d.tar.bz2 taler-android-6028376333344c90ba8dbaa75aad759b2915962d.zip |
[wallet] cache transactions per currency
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt | 35 |
1 files changed, 26 insertions, 9 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 index c6c1ecd..f830aa1 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt @@ -17,6 +17,8 @@ package net.taler.wallet.transactions import android.util.Log +import androidx.annotation.UiThread +import androidx.annotation.WorkerThread import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.fasterxml.jackson.databind.ObjectMapper @@ -45,23 +47,38 @@ class TransactionManager( var selectedCurrency: String? = null var selectedTransaction: Transaction? = null - // TODO maybe cache transactions per currency? - private val mTransactions = MutableLiveData<TransactionsResult>() - val transactions: LiveData<TransactionsResult> = mTransactions + private val mTransactions = HashMap<String, MutableLiveData<TransactionsResult>>() + val transactions: LiveData<TransactionsResult> + @UiThread + get() { + val currency = selectedCurrency + check(currency != null) { "Did not select currency before getting transactions" } + return mTransactions.getOrPut(currency) { MutableLiveData() } + } + @UiThread fun loadTransactions() { - mProgress.postValue(true) - val request = JSONObject(mapOf("currency" to selectedCurrency)) + val currency = selectedCurrency ?: return + val liveData = mTransactions.getOrPut(currency) { + MutableLiveData<TransactionsResult>() + } + if (liveData.value == null) mProgress.value = true + val request = JSONObject(mapOf("currency" to currency)) walletBackendApi.sendRequest("getTransactions", request) { isError, result -> scope.launch(Dispatchers.Default) { - onTransactionsLoaded(isError, result) + onTransactionsLoaded(liveData, isError, result) } } } - private fun onTransactionsLoaded(isError: Boolean, result: JSONObject) { + @WorkerThread + private fun onTransactionsLoaded( + liveData: MutableLiveData<TransactionsResult>, + isError: Boolean, + result: JSONObject + ) { if (isError) { - mTransactions.postValue(TransactionsResult.Error) + liveData.postValue(TransactionsResult.Error) return } Log.e("TEST", result.toString(2)) // TODO remove once API finalized @@ -69,7 +86,7 @@ class TransactionManager( val transactions: LinkedList<Transaction> = mapper.readValue(transactionsArray) transactions.reverse() // show latest first mProgress.postValue(false) - mTransactions.postValue(TransactionsResult.Success(transactions)) + liveData.postValue(TransactionsResult.Success(transactions)) } } |