gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] 02/04: [wallet] Refresh withdrawal detail screen a


From: gnunet
Subject: [taler-taler-android] 02/04: [wallet] Refresh withdrawal detail screen after confirmation
Date: Mon, 06 Mar 2023 19:57:08 +0100

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 529478734944a60af428fa64e26001881afcf899
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Sat Mar 4 02:56:23 2023 -0300

    [wallet] Refresh withdrawal detail screen after confirmation
    
    bug 0007727
---
 wallet/build.gradle                                |  1 +
 .../transactions/TransactionDepositFragment.kt     | 12 +++++--
 .../transactions/TransactionDetailFragment.kt      | 11 ++++---
 .../wallet/transactions/TransactionManager.kt      | 15 +++++++--
 .../transactions/TransactionPaymentFragment.kt     | 34 ++++++++++---------
 .../wallet/transactions/TransactionPeerFragment.kt | 12 +++++--
 .../transactions/TransactionRefreshFragment.kt     | 28 ++++++++--------
 .../transactions/TransactionRefundFragment.kt      | 38 ++++++++++++----------
 .../wallet/transactions/TransactionTipFragment.kt  | 12 +++++--
 .../transactions/TransactionWithdrawalFragment.kt  | 28 ++++++++--------
 .../wallet/transactions/TransactionsFragment.kt    |  2 +-
 11 files changed, 116 insertions(+), 77 deletions(-)

diff --git a/wallet/build.gradle b/wallet/build.gradle
index e4a3bf2..99889c0 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -126,6 +126,7 @@ dependencies {
     implementation "androidx.compose.material:material:1.3.1"
     implementation "androidx.compose.material3:material3:1.0.1"
     implementation "androidx.compose.material:material-icons-extended:1.3.1"
+    implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
     implementation 
"androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
     implementation 
"com.google.accompanist:accompanist-themeadapter-material3:0.28.0"
 
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
index 60f9b20..4ca20fd 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
@@ -20,6 +20,8 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.platform.ComposeView
 import net.taler.wallet.compose.TalerSurface
 import net.taler.wallet.deposit.TransactionDepositComposable
@@ -33,9 +35,13 @@ class TransactionDepositFragment : 
TransactionDetailFragment() {
     ): View = ComposeView(requireContext()).apply {
         setContent {
             TalerSurface {
-                val t = transaction ?: error("No transaction")
-                TransactionDepositComposable(t as TransactionDeposit) {
-                    onDeleteButtonClicked(t)
+                val t: Transaction? by 
transactionManager.selectedTransaction.observeAsState()
+                if (t != null) {
+                    TransactionDepositComposable(t as TransactionDeposit) {
+                        onDeleteButtonClicked(t!!)
+                    }
+                } else {
+                    error("No transaction")
                 }
             }
         }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
index b4008b0..1905a05 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt
@@ -37,8 +37,7 @@ import net.taler.wallet.launchInAppBrowser
 abstract class TransactionDetailFragment : Fragment() {
 
     private val model: MainViewModel by activityViewModels()
-    private val transactionManager by lazy { model.transactionManager }
-    protected val transaction: Transaction? get() = 
transactionManager.selectedTransaction
+    val transactionManager by lazy { model.transactionManager }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -48,9 +47,11 @@ abstract class TransactionDetailFragment : Fragment() {
     @Deprecated("Deprecated in Java")
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         super.onActivityCreated(savedInstanceState)
-        requireActivity().apply {
-            transaction?.generalTitleRes?.let {
-                title = getString(it)
+        transactionManager.selectedTransaction.observe(viewLifecycleOwner) {
+            requireActivity().apply {
+                it?.generalTitleRes?.let {
+                    title = getString(it)
+                }
             }
         }
     }
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 2da9ab4..8eac038 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -41,9 +41,9 @@ class TransactionManager(
     val progress: LiveData<Boolean> = mProgress
 
     var selectedCurrency: String? = null
-    var selectedTransaction: Transaction? = null
 
     val searchQuery = MutableLiveData<String>(null)
+    val selectedTransaction = MutableLiveData<Transaction?>(null)
     private val allTransactions = HashMap<String, List<Transaction>>()
     private val mTransactions = HashMap<String, 
MutableLiveData<TransactionsResult>>()
     val transactions: LiveData<TransactionsResult>
@@ -84,6 +84,13 @@ class TransactionManager(
             mProgress.value = false
             liveData.value = TransactionsResult.Success(transactions)
 
+            // update selected transaction
+            transactions.find {
+                it.transactionId == selectedTransaction.value?.transactionId
+            }?.let {
+                selectedTransaction.postValue(it)
+            }
+
             // update all transactions on UiThread if there was a currency
             if (searchQuery == null) allTransactions[currency] = transactions
         }
@@ -102,13 +109,17 @@ class TransactionManager(
             transaction = result
         }
         return if (transaction != null) {
-            selectedTransaction = transaction
+            selectedTransaction.postValue(transaction)
             true
         } else {
             false
         }
     }
 
+    fun selectTransaction(transaction: Transaction) {
+        selectedTransaction.postValue(transaction)
+    }
+
     fun deleteTransaction(transactionId: String) = scope.launch {
         api.request<Unit>("deleteTransaction") {
             put("transactionId", transactionId)
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
index e2e4f9f..ec18c98 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt
@@ -37,22 +37,24 @@ class TransactionPaymentFragment : 
TransactionDetailFragment() {
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        val t = transaction as TransactionPayment
-        ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
-
-        ui.amountPaidWithFeesView.text = t.amountEffective.toString()
-        val fee = t.amountEffective - t.amountRaw
-        bindOrderAndFee(
-            ui.orderSummaryView,
-            ui.orderAmountView,
-            ui.orderIdView,
-            ui.feeView,
-            t.info,
-            t.amountRaw,
-            fee
-        )
-        ui.deleteButton.setOnClickListener {
-            onDeleteButtonClicked(t)
+        transactionManager.selectedTransaction.observe(viewLifecycleOwner) { t 
->
+            if (t !is TransactionPayment) return@observe
+            ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
+
+            ui.amountPaidWithFeesView.text = t.amountEffective.toString()
+            val fee = t.amountEffective - t.amountRaw
+            bindOrderAndFee(
+                ui.orderSummaryView,
+                ui.orderAmountView,
+                ui.orderIdView,
+                ui.feeView,
+                t.info,
+                t.amountRaw,
+                fee
+            )
+            ui.deleteButton.setOnClickListener {
+                onDeleteButtonClicked(t)
+            }
         }
     }
 
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
index f6be5c8..58e8f31 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
@@ -28,6 +28,8 @@ import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.Alignment.Companion.CenterHorizontally
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -54,9 +56,13 @@ class TransactionPeerFragment : TransactionDetailFragment() {
     ): View = ComposeView(requireContext()).apply {
         setContent {
             TalerSurface {
-                val t = transaction ?: error("No transaction")
-                TransactionPeerComposable(t) {
-                    onDeleteButtonClicked(t)
+                val t: Transaction? by 
transactionManager.selectedTransaction.observeAsState(null)
+                if (t != null) {
+                    TransactionPeerComposable(t!!) {
+                        onDeleteButtonClicked(t!!)
+                    }
+                } else {
+                    error("No transaction")
                 }
             }
         }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
index d44db43..4c26449 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt
@@ -40,19 +40,21 @@ class TransactionRefreshFragment : 
TransactionDetailFragment() {
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        val t = transaction as TransactionRefresh
-        ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
-
-        ui.effectiveAmountLabel.visibility = GONE
-        ui.effectiveAmountView.visibility = GONE
-        ui.confirmWithdrawalButton.visibility = GONE
-        ui.chosenAmountLabel.visibility = GONE
-        ui.chosenAmountView.visibility = GONE
-        val fee = t.amountEffective
-        ui.feeView.text = getString(R.string.amount_negative, fee.toString())
-        ui.exchangeView.text = cleanExchange(t.exchangeBaseUrl)
-        ui.deleteButton.setOnClickListener {
-            onDeleteButtonClicked(t)
+        transactionManager.selectedTransaction.observe(viewLifecycleOwner) { t 
->
+            if (t !is TransactionRefresh) return@observe
+            ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
+
+            ui.effectiveAmountLabel.visibility = GONE
+            ui.effectiveAmountView.visibility = GONE
+            ui.confirmWithdrawalButton.visibility = GONE
+            ui.chosenAmountLabel.visibility = GONE
+            ui.chosenAmountView.visibility = GONE
+            val fee = t.amountEffective
+            ui.feeView.text = getString(R.string.amount_negative, 
fee.toString())
+            ui.exchangeView.text = cleanExchange(t.exchangeBaseUrl)
+            ui.deleteButton.setOnClickListener {
+                onDeleteButtonClicked(t)
+            }
         }
     }
 
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
index 5e6eef4..125ae0c 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt
@@ -39,25 +39,27 @@ class TransactionRefundFragment : 
TransactionDetailFragment() {
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        val t = transaction as TransactionRefund
-        ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
+        transactionManager.selectedTransaction.observe(viewLifecycleOwner) { t 
->
+            if (t !is TransactionRefund) return@observe
+            ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
 
-        ui.amountPaidWithFeesLabel.text = 
getString(R.string.transaction_refund)
-        ui.amountPaidWithFeesView.setTextColor(getColor(requireContext(), 
R.color.green))
-        ui.amountPaidWithFeesView.text =
-            getString(R.string.amount_positive, t.amountEffective.toString())
-        val fee = t.amountRaw - t.amountEffective
-        bindOrderAndFee(
-            ui.orderSummaryView,
-            ui.orderAmountView,
-            ui.orderIdView,
-            ui.feeView,
-            t.info,
-            t.amountRaw,
-            fee
-        )
-        ui.deleteButton.setOnClickListener {
-            onDeleteButtonClicked(t)
+            ui.amountPaidWithFeesLabel.text = 
getString(R.string.transaction_refund)
+            ui.amountPaidWithFeesView.setTextColor(getColor(requireContext(), 
R.color.green))
+            ui.amountPaidWithFeesView.text =
+                getString(R.string.amount_positive, 
t.amountEffective.toString())
+            val fee = t.amountRaw - t.amountEffective
+            bindOrderAndFee(
+                ui.orderSummaryView,
+                ui.orderAmountView,
+                ui.orderIdView,
+                ui.feeView,
+                t.info,
+                t.amountRaw,
+                fee
+            )
+            ui.deleteButton.setOnClickListener {
+                onDeleteButtonClicked(t)
+            }
         }
     }
 
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
index e8824ed..1eb7fea 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt
@@ -29,6 +29,8 @@ import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.Alignment.Companion.CenterHorizontally
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.ComposeView
@@ -51,9 +53,13 @@ class TransactionTipFragment : TransactionDetailFragment() {
     ): View = ComposeView(requireContext()).apply {
         setContent {
             TalerSurface {
-                val t = transaction as? TransactionTip ?: error("No or wrong 
transaction")
-                TransactionTipComposable(t) {
-                    onDeleteButtonClicked(t)
+                val t by 
transactionManager.selectedTransaction.observeAsState(null)
+                if (t != null && t is TransactionTip) {
+                    TransactionTipComposable(t as TransactionTip) {
+                        onDeleteButtonClicked(t!!)
+                    }
+                } else {
+                    error("No or wrong transaction")
                 }
             }
         }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
index fe255ad..14b84b2 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt
@@ -51,12 +51,13 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment() {
     }
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
-        val t = transaction as TransactionWithdrawal
-        ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
+        transactionManager.selectedTransaction.observe(viewLifecycleOwner) { t 
->
+            if (t !is TransactionWithdrawal) return@observe
+            ui.timeView.text = t.timestamp.ms.toAbsoluteTime(requireContext())
 
-        ui.effectiveAmountLabel.text = getString(R.string.withdraw_total)
-        ui.effectiveAmountView.text = t.amountEffective.toString()
-        setupConfirmWithdrawalButton(t)
+            ui.effectiveAmountLabel.text = getString(R.string.withdraw_total)
+            ui.effectiveAmountView.text = t.amountEffective.toString()
+            setupConfirmWithdrawalButton(t)
         setupActionButton(t)
         ui.chosenAmountLabel.text = getString(R.string.amount_chosen)
         ui.chosenAmountView.text =
@@ -65,21 +66,22 @@ class TransactionWithdrawalFragment : 
TransactionDetailFragment() {
         ui.feeView.text = getString(R.string.amount_negative, fee.toString())
         ui.exchangeView.text = cleanExchange(t.exchangeBaseUrl)
         if (t.pending) {
-            ui.deleteButton.setIconResource(R.drawable.ic_cancel)
-            ui.deleteButton.setText(R.string.cancel)
-        }
-        ui.deleteButton.setOnClickListener {
-            onDeleteButtonClicked(t)
+                ui.deleteButton.setIconResource(R.drawable.ic_cancel)
+                ui.deleteButton.setText(R.string.cancel)
+            }
+            ui.deleteButton.setOnClickListener {
+                onDeleteButtonClicked(t)
+            }
         }
     }
 
     override val deleteDialogTitle: Int
-        get() = if (transaction?.pending == true) R.string.cancel else 
super.deleteDialogTitle
+        get() = if (transactionManager.selectedTransaction.value?.pending == 
true) R.string.cancel else super.deleteDialogTitle
     override val deleteDialogMessage: Int
-        get() = if (transaction?.pending == true) 
R.string.transactions_cancel_dialog_message
+        get() = if (transactionManager.selectedTransaction.value?.pending == 
true) R.string.transactions_cancel_dialog_message
         else super.deleteDialogMessage
     override val deleteDialogButton: Int
-        get() = if (transaction?.pending == true) R.string.ok else 
super.deleteDialogButton
+        get() = if (transactionManager.selectedTransaction.value?.pending == 
true) R.string.ok else super.deleteDialogButton
 
     private fun setupConfirmWithdrawalButton(t: TransactionWithdrawal) {
         if (t.pending && !t.confirmed) {
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 cd66193..f2a74e2 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt
@@ -175,7 +175,7 @@ class TransactionsFragment : Fragment(), 
OnTransactionClickListener, ActionMode.
     override fun onTransactionClicked(transaction: Transaction) {
         if (actionMode != null) return // don't react on clicks while in 
action mode
         if (transaction.detailPageNav != 0) {
-            transactionManager.selectedTransaction = transaction
+            transactionManager.selectTransaction(transaction)
             findNavController().navigate(transaction.detailPageNav)
         }
     }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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