summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-05-12 15:26:44 -0300
committerTorsten Grote <t@grobox.de>2020-05-15 14:26:41 -0300
commite74f39ee86f32b4e0324405af1f0c7be061fb372 (patch)
tree484a9e2f6ad3d8d6c9662ff5f41c6f254d218b30 /wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
parent4a6630d1d147ae35358272dc5222964831c234ab (diff)
downloadtaler-android-e74f39ee86f32b4e0324405af1f0c7be061fb372.tar.gz
taler-android-e74f39ee86f32b4e0324405af1f0c7be061fb372.tar.bz2
taler-android-e74f39ee86f32b4e0324405af1f0c7be061fb372.zip
[wallet] separate history and transactions UI
The history with its JSON payload is only shown in dev mode while the transactions are prepared to move to the new API.
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt72
1 files changed, 32 insertions, 40 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 549b2a8..850a3bb 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -18,70 +18,62 @@ package net.taler.wallet.transactions
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.asLiveData
-import androidx.lifecycle.switchMap
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.channels.awaitClose
-import kotlinx.coroutines.flow.callbackFlow
-import kotlinx.coroutines.flow.onCompletion
-import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
import net.taler.wallet.backend.WalletBackendApi
+import net.taler.wallet.history.History
+import net.taler.wallet.history.HistoryEvent
+import org.json.JSONObject
sealed class TransactionsResult {
object Error : TransactionsResult()
- class Success(val transactions: Transactions) : TransactionsResult()
+ class Success(val transactions: History) : TransactionsResult()
}
-@Suppress("EXPERIMENTAL_API_USAGE")
class TransactionManager(
private val walletBackendApi: WalletBackendApi,
+ private val scope: CoroutineScope,
private val mapper: ObjectMapper
) {
private val mProgress = MutableLiveData<Boolean>()
val progress: LiveData<Boolean> = mProgress
- val showAll = MutableLiveData<Boolean>()
-
var selectedCurrency: String? = null
- var selectedEvent: Transaction? = null
+ var selectedEvent: HistoryEvent? = null
- val transactions: LiveData<TransactionsResult> = showAll.switchMap { showAll ->
- loadTransactions(showAll)
- .onStart { mProgress.postValue(true) }
- .onCompletion { mProgress.postValue(false) }
- .asLiveData(Dispatchers.IO)
- }
+ private val mTransactions = MutableLiveData<TransactionsResult>()
+ val transactions: LiveData<TransactionsResult> = mTransactions
- private fun loadTransactions(showAll: Boolean) = callbackFlow {
+ fun loadTransactions() {
+ mProgress.postValue(true)
walletBackendApi.sendRequest("getHistory", null) { isError, result ->
- launch(Dispatchers.Default) {
- if (isError) {
- offer(TransactionsResult.Error)
- close()
- return@launch
- }
- val transactions = Transactions()
- val json = result.getJSONArray("history")
- val currency = selectedCurrency
- for (i in 0 until json.length()) {
- val event: Transaction = mapper.readValue(json.getString(i))
- event.json = json.getJSONObject(i)
- if (currency == null || event.isCurrency(currency)) {
- transactions.add(event)
- }
- }
- transactions.reverse() // show latest first
- val filtered =
- if (showAll) transactions else transactions.filter { it.showToUser } as Transactions
- offer(TransactionsResult.Success(filtered))
- close()
+ scope.launch(Dispatchers.Default) {
+ onTransactionsLoaded(isError, result)
+ }
+ }
+ }
+
+ private fun onTransactionsLoaded(isError: Boolean, result: JSONObject) {
+ if (isError) {
+ mTransactions.postValue(TransactionsResult.Error)
+ return
+ }
+ val transactions = History()
+ val json = result.getJSONArray("history")
+ val currency = selectedCurrency
+ for (i in 0 until json.length()) {
+ val event: HistoryEvent = mapper.readValue(json.getString(i))
+ if (event.showToUser && (currency == null || event.isCurrency(currency))) {
+ transactions.add(event)
}
}
- awaitClose()
+ transactions.reverse() // show latest first
+ mProgress.postValue(false)
+ mTransactions.postValue(TransactionsResult.Success(transactions))
}
}