summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2023-03-04 02:56:23 -0300
committerTorsten Grote <t@grobox.de>2023-03-06 15:22:49 -0300
commit529478734944a60af428fa64e26001881afcf899 (patch)
treed385818490e6f2e3b5073caaf47b0af5f7215339
parent9a30d3f0e7e5afb90593e9183acef99e4186e25e (diff)
downloadtaler-android-529478734944a60af428fa64e26001881afcf899.tar.gz
taler-android-529478734944a60af428fa64e26001881afcf899.tar.bz2
taler-android-529478734944a60af428fa64e26001881afcf899.zip
[wallet] Refresh withdrawal detail screen after confirmation
bug 0007727
-rw-r--r--wallet/build.gradle1
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt12
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt11
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt15
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt34
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt12
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt28
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt38
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt12
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt28
-rw-r--r--wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt2
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)
}
}