[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] 08/13: [wallet] cache transactions per currency
From: |
gnunet |
Subject: |
[taler-taler-android] 08/13: [wallet] cache transactions per currency |
Date: |
Mon, 18 May 2020 14:47:25 +0200 |
This is an automated email from the git hooks/post-receive script.
torsten-grote pushed a commit to branch master
in repository taler-android.
commit 6028376333344c90ba8dbaa75aad759b2915962d
Author: Torsten Grote <address@hidden>
AuthorDate: Fri May 15 11:06:46 2020 -0300
[wallet] cache transactions per currency
---
.../src/main/java/net/taler/common/AndroidUtils.kt | 5 ++++
.../main/java/net/taler/wallet/MainViewModel.kt | 6 ++--
.../wallet/transactions/TransactionManager.kt | 35 ++++++++++++++++------
3 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
b/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
index f171039..3ab45ad 100644
--- a/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
+++ b/taler-kotlin-common/src/main/java/net/taler/common/AndroidUtils.kt
@@ -23,6 +23,7 @@ import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY
import android.net.ConnectivityManager
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
import android.os.Build.VERSION.SDK_INT
+import android.os.Looper
import android.text.format.DateUtils.DAY_IN_MILLIS
import android.text.format.DateUtils.FORMAT_ABBREV_ALL
import android.text.format.DateUtils.FORMAT_ABBREV_MONTH
@@ -60,6 +61,10 @@ fun View.fadeOut(endAction: () -> Unit = {}) {
}.start()
}
+fun assertUiThread() {
+ check(Looper.getMainLooper().thread == Thread.currentThread())
+}
+
/**
* Use this with 'when' expressions when you need it to handle all
possibilities/branches.
*/
diff --git a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
index 8276823..f10666e 100644
--- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
@@ -28,13 +28,13 @@ import
com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PRO
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.KotlinModule
import net.taler.common.Amount
+import net.taler.common.assertUiThread
import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.history.DevHistoryManager
import net.taler.wallet.payment.PaymentManager
import net.taler.wallet.pending.PendingOperationsManager
import net.taler.wallet.refund.RefundManager
import net.taler.wallet.transactions.TransactionManager
-import net.taler.wallet.transactions.TransactionsResult
import net.taler.wallet.withdraw.WithdrawManager
import org.json.JSONObject
@@ -72,7 +72,9 @@ class MainViewModel(val app: Application) :
AndroidViewModel(app) {
Log.i(TAG, "Received notification from wallet-core:
${payload.toString(2)}")
loadBalances()
if (payload.optString("type") in transactionNotifications) {
- // update transaction list
+ assertUiThread()
+ // TODO notification API should give us a currency to update
+ // update currently selected transaction list
transactionManager.loadTransactions()
}
// refresh pending ops and history with each notification
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))
}
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [taler-taler-android] branch master updated (4a6630d -> a94022d), gnunet, 2020/05/18
- [taler-taler-android] 02/13: [wallet] render transaction list from new transactions API, gnunet, 2020/05/18
- [taler-taler-android] 04/13: [wallet] Remove success pages for withdrawal and payment, gnunet, 2020/05/18
- [taler-taler-android] 06/13: [wallet] provide extra info in transactions when withdrawal requires confirmation, gnunet, 2020/05/18
- [taler-taler-android] 03/13: [wallet] clean up old history code that not needed anymore, gnunet, 2020/05/18
- [taler-taler-android] 05/13: [wallet] add clickable actions to transaction details screen, gnunet, 2020/05/18
- [taler-taler-android] 08/13: [wallet] cache transactions per currency,
gnunet <=
- [taler-taler-android] 11/13: [wallet] remove unused strings after moving to new transaction API, gnunet, 2020/05/18
- [taler-taler-android] 12/13: [wallet] show generic transaction titles in detail action bar, gnunet, 2020/05/18
- [taler-taler-android] 10/13: [wallet] show a pending badge next to balances with pending transactions, gnunet, 2020/05/18
- [taler-taler-android] 13/13: [wallet] upgrade to latest core and fix sorting bug, gnunet, 2020/05/18
- [taler-taler-android] 07/13: [wallet] remove workarounds for fixed core bugs, gnunet, 2020/05/18
- [taler-taler-android] 01/13: [wallet] separate history and transactions UI, gnunet, 2020/05/18
- [taler-taler-android] 09/13: [wallet] show currency's transaction list after successful operations, gnunet, 2020/05/18