gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]