summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/transactions
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-02-20 11:54:14 -0600
committerTorsten Grote <t@grobox.de>2024-03-27 14:26:42 -0300
commite305ddba1455a33e8dec037d4fcef8498e0b21a5 (patch)
treef75da2ad6089b279a17f32dbe565f65ee44c7f3e /wallet/src/main/java/net/taler/wallet/transactions
parentf4956573da5d86e51ebf04b5ff9a94629e62fc93 (diff)
downloadtaler-android-e305ddba1455a33e8dec037d4fcef8498e0b21a5.tar.gz
taler-android-e305ddba1455a33e8dec037d4fcef8498e0b21a5.tar.bz2
taler-android-e305ddba1455a33e8dec037d4fcef8498e0b21a5.zip
[wallet] Display transactions by scopeInfo instead of currency
(cherry picked from commit 04da36054f8996b1e9d70f84506bf8be2ba3abe6)
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions')
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt32
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt7
2 files changed, 21 insertions, 18 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 534ed6c..5399287 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -23,11 +23,15 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.switchMap
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
import net.taler.wallet.TAG
import net.taler.wallet.backend.TalerErrorInfo
import net.taler.wallet.backend.WalletBackendApi
+import net.taler.wallet.balances.ScopeInfo
import net.taler.wallet.transactions.TransactionAction.Delete
import net.taler.wallet.transactions.TransactionMajorState.Pending
+import org.json.JSONObject
import java.util.LinkedList
sealed class TransactionsResult {
@@ -45,34 +49,34 @@ class TransactionManager(
// FIXME if the app gets killed, this will not be restored and thus be unexpected null
// we should keep this in a savable, maybe using Hilt and SavedStateViewModel
- var selectedCurrency: String? = null
+ var selectedScope: ScopeInfo? = null
val searchQuery = MutableLiveData<String>(null)
private val mSelectedTransaction = MutableLiveData<Transaction?>(null)
val selectedTransaction: LiveData<Transaction?> = mSelectedTransaction
- private val allTransactions = HashMap<String, List<Transaction>>()
- private val mTransactions = HashMap<String, MutableLiveData<TransactionsResult>>()
+ private val allTransactions = HashMap<ScopeInfo, List<Transaction>>()
+ private val mTransactions = HashMap<ScopeInfo, MutableLiveData<TransactionsResult>>()
val transactions: LiveData<TransactionsResult>
@UiThread
get() = searchQuery.switchMap { query ->
- val currency = selectedCurrency
- check(currency != null) { "Did not select currency before getting transactions" }
+ val scopeInfo = selectedScope
+ check(scopeInfo != null) { "Did not select scope before getting transactions" }
loadTransactions(query)
- mTransactions[currency]!! // non-null because filled in [loadTransactions]
+ mTransactions[scopeInfo]!! // non-null because filled in [loadTransactions]
}
@UiThread
fun loadTransactions(searchQuery: String? = null) = scope.launch {
- val currency = selectedCurrency ?: return@launch
- val liveData = mTransactions.getOrPut(currency) { MutableLiveData() }
- if (searchQuery == null && allTransactions.containsKey(currency)) {
- liveData.value = TransactionsResult.Success(allTransactions[currency]!!)
+ val scopeInfo = selectedScope ?: return@launch
+ val liveData = mTransactions.getOrPut(scopeInfo) { MutableLiveData() }
+ if (searchQuery == null && allTransactions.containsKey(scopeInfo)) {
+ liveData.value = TransactionsResult.Success(allTransactions[scopeInfo]!!)
}
if (liveData.value == null) mProgress.value = true
api.request("getTransactions", Transactions.serializer()) {
if (searchQuery != null) put("search", searchQuery)
- put("currency", currency)
+ put("scopeInfo", JSONObject(Json.encodeToString(scopeInfo)))
}.onError {
liveData.postValue(TransactionsResult.Error(it))
mProgress.postValue(false)
@@ -91,8 +95,8 @@ class TransactionManager(
mSelectedTransaction.value = it
}
- // update all transactions on UiThread if there was a currency
- if (searchQuery == null) allTransactions[currency] = transactions
+ // update all transactions on UiThread if there was a scope info
+ if (searchQuery == null) allTransactions[scopeInfo] = transactions
}
}
@@ -201,7 +205,7 @@ class TransactionManager(
}
fun deleteTransactions(transactionIds: List<String>, onError: (it: TalerErrorInfo) -> Unit) {
- allTransactions[selectedCurrency]?.filter { transaction ->
+ allTransactions[selectedScope]?.filter { transaction ->
transaction.transactionId in transactionIds
}?.forEach { toBeDeletedTx ->
if (Delete in toBeDeletedTx.txActions) {
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
index 2e97484..5243427 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -59,7 +59,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.
private lateinit var ui: FragmentTransactionsBinding
private val transactionAdapter by lazy { TransactionAdapter(this) }
- private val currency by lazy { transactionManager.selectedCurrency!! }
+ private val scopeInfo by lazy { transactionManager.selectedScope!! }
private var tracker: SelectionTracker<String>? = null
private var actionMode: ActionMode? = null
@@ -114,8 +114,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.
// hide extra fab when in single currency mode (uses MainFragment's FAB)
if (balances.size == 1) ui.mainFab.visibility = INVISIBLE
- // TODO: find via scopeInfo instead of currency
- balances.find { it.currency == currency }?.let { balance ->
+ balances.find { it.scopeInfo == scopeInfo }?.let { balance ->
ui.amount.text = balance.available.toString(showSymbol = false)
transactionAdapter.setCurrencySpec(balance.available.spec)
}
@@ -154,7 +153,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode.
override fun onStart() {
super.onStart()
- requireActivity().title = getString(R.string.transactions_detail_title_currency, currency)
+ requireActivity().title = getString(R.string.transactions_detail_title_currency, scopeInfo.currency)
}
private fun setupSearch(item: MenuItem) {