diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-02-12 18:47:53 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2024-03-27 14:26:41 -0300 |
commit | c86ae12e55c227e285252271c90b56f35f38858e (patch) | |
tree | 03a33886e08d8211b061c76b85fbcd954d967d08 /wallet/src/main/java/net/taler/wallet/transactions | |
parent | 1e9ee99cb07c595132fa96935e3f2b7c88dd586a (diff) | |
download | taler-android-c86ae12e55c227e285252271c90b56f35f38858e.tar.gz taler-android-c86ae12e55c227e285252271c90b56f35f38858e.tar.bz2 taler-android-c86ae12e55c227e285252271c90b56f35f38858e.zip |
[wallet] DD51: enrich some tx amounts with currencySpecification
bug 0008329
(cherry picked from commit 021e4443bae33abbdc9de21f2708e633e99ca055)
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/transactions')
9 files changed, 36 insertions, 11 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt index 6fade86..22dcc3f 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionAdapter.kt @@ -32,6 +32,7 @@ import androidx.recyclerview.selection.SelectionTracker import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.Adapter import androidx.recyclerview.widget.RecyclerView.ViewHolder +import net.taler.common.CurrencySpecification import net.taler.common.exhaustive import net.taler.common.toRelativeTime import net.taler.wallet.R @@ -47,6 +48,8 @@ internal class TransactionAdapter( ) : Adapter<TransactionViewHolder>() { private var transactions: List<Transaction> = ArrayList() + private var currencySpec: CurrencySpecification? = null + lateinit var tracker: SelectionTracker<String> val keyProvider = TransactionKeyProvider() @@ -67,6 +70,11 @@ internal class TransactionAdapter( holder.bind(transaction, tracker.isSelected(transaction.transactionId)) } + fun setCurrencySpec(spec: CurrencySpecification?) { + this.currencySpec = spec + this.notifyDataSetChanged() + } + fun update(updatedTransactions: List<Transaction>) { this.transactions = updatedTransactions this.notifyDataSetChanged() @@ -183,7 +191,7 @@ internal class TransactionAdapter( } private fun bindAmount(transaction: Transaction) { - val amountStr = transaction.amountEffective.toString(showSymbol = false) + val amountStr = transaction.amountEffective.withSpec(currencySpec).toString(showSymbol = false) when (transaction.amountType) { AmountType.Positive -> { amount.text = context.getString(R.string.amount_positive, amountStr) 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 f23b8d7..d2be3cf 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt @@ -38,6 +38,7 @@ class TransactionDepositFragment : TransactionDetailFragment() { if (t is TransactionDeposit) TransactionDepositComposable( t = t, devMode = devMode, + spec = balanceManager.getSpecForCurrency(t.amountRaw.currency), ) { onTransitionButtonClicked(t, it) } 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 78b728a..09ca05b 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailFragment.kt @@ -39,6 +39,7 @@ abstract class TransactionDetailFragment : Fragment() { private val model: MainViewModel by activityViewModels() protected val transactionManager by lazy { model.transactionManager } + protected val balanceManager by lazy { model.balanceManager } protected val devMode get() = model.devMode.value == true override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 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 27598ab..596a4a9 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPaymentFragment.kt @@ -37,6 +37,7 @@ class TransactionPaymentFragment : TransactionDetailFragment() { TalerSurface { val t = transactionManager.selectedTransaction.observeAsState().value if (t is TransactionPayment) TransactionPaymentComposable(t, devMode, + balanceManager.getSpecForCurrency(t.amountRaw.currency), onFulfill = { url -> launchInAppBrowser(requireContext(), url) }, 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 7feedd1..27809a7 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.res.colorResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import net.taler.common.Amount +import net.taler.common.CurrencySpecification import net.taler.common.toAbsoluteTime import net.taler.wallet.R import net.taler.wallet.compose.TalerSurface @@ -56,7 +57,9 @@ class TransactionPeerFragment : TransactionDetailFragment() { setContent { TalerSurface { val t = transactionManager.selectedTransaction.observeAsState(null).value - if (t != null) TransactionPeerComposable(t, devMode) { + if (t != null) TransactionPeerComposable(t, devMode, + balanceManager.getSpecForCurrency(t.amountRaw.currency), + ) { onTransitionButtonClicked(t, it) } } @@ -68,6 +71,7 @@ class TransactionPeerFragment : TransactionDetailFragment() { fun TransactionPeerComposable( t: Transaction, devMode: Boolean, + spec: CurrencySpecification?, onTransition: (t: TransactionAction) -> Unit, ) { val scrollState = rememberScrollState() @@ -84,10 +88,10 @@ fun TransactionPeerComposable( style = MaterialTheme.typography.bodyLarge, ) when (t) { - is TransactionPeerPullCredit -> TransactionPeerPullCreditComposable(t) - is TransactionPeerPushCredit -> TransactionPeerPushCreditComposable(t) - is TransactionPeerPullDebit -> TransactionPeerPullDebitComposable(t) - is TransactionPeerPushDebit -> TransactionPeerPushDebitComposable(t) + is TransactionPeerPullCredit -> TransactionPeerPullCreditComposable(t, spec) + is TransactionPeerPushCredit -> TransactionPeerPushCreditComposable(t, spec) + is TransactionPeerPullDebit -> TransactionPeerPullDebitComposable(t, spec) + is TransactionPeerPushDebit -> TransactionPeerPushDebitComposable(t, spec) else -> error("unexpected transaction: ${t::class.simpleName}") } TransitionsComposable(t, devMode, onTransition) 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 da4b14d..8f474f9 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefreshFragment.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import net.taler.common.Amount +import net.taler.common.CurrencySpecification import net.taler.common.Timestamp import net.taler.common.toAbsoluteTime import net.taler.wallet.R @@ -59,7 +60,9 @@ class TransactionRefreshFragment : TransactionDetailFragment() { setContent { TalerSurface { val t = transactionManager.selectedTransaction.observeAsState().value - if (t is TransactionRefresh) TransactionRefreshComposable(t, devMode) { + if (t is TransactionRefresh) TransactionRefreshComposable(t, devMode, + balanceManager.getSpecForCurrency(t.amountRaw.currency), + ) { onTransitionButtonClicked(t, it) } } @@ -71,6 +74,7 @@ class TransactionRefreshFragment : TransactionDetailFragment() { private fun TransactionRefreshComposable( t: TransactionRefresh, devMode: Boolean, + spec: CurrencySpecification?, onTransition: (t: TransactionAction) -> Unit, ) { val scrollState = rememberScrollState() @@ -88,7 +92,7 @@ private fun TransactionRefreshComposable( ) TransactionAmountComposable( label = stringResource(id = R.string.withdraw_fees), - amount = t.amountEffective, + amount = t.amountEffective.withSpec(spec), amountType = AmountType.Negative, ) TransitionsComposable(t, devMode, onTransition) @@ -111,6 +115,6 @@ private fun TransactionRefreshComposablePreview() { error = TalerErrorInfo(code = TalerErrorCode.WALLET_WITHDRAWAL_KYC_REQUIRED), ) Surface { - TransactionRefreshComposable(t, true) {} + TransactionRefreshComposable(t, true, null) {} } } 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 cd50be7..7992565 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionRefundFragment.kt @@ -35,7 +35,9 @@ class TransactionRefundFragment : TransactionDetailFragment() { setContent { TalerSurface { val t = transactionManager.selectedTransaction.observeAsState().value - if (t is TransactionRefund) TransactionRefundComposable(t, devMode) { + if (t is TransactionRefund) TransactionRefundComposable(t, devMode, + balanceManager.getSpecForCurrency(t.amountRaw.currency) + ) { onTransitionButtonClicked(t, it) } } 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 969db13..27e59bb 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionWithdrawalFragment.kt @@ -49,6 +49,7 @@ class TransactionWithdrawalFragment : TransactionDetailFragment(), ActionListene if (t is TransactionWithdrawal) TransactionWithdrawalComposable( t = t, devMode = devMode, + spec = balanceManager.getSpecForCurrency(t.amountRaw.currency), actionListener = this@TransactionWithdrawalFragment, ) { onTransitionButtonClicked(t, it) 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 d89fbb5..2e97484 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsFragment.kt @@ -55,6 +55,7 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. private val model: MainViewModel by activityViewModels() private val transactionManager by lazy { model.transactionManager } + private val balanceManager by lazy { model.balanceManager } private lateinit var ui: FragmentTransactionsBinding private val transactionAdapter by lazy { TransactionAdapter(this) } @@ -107,14 +108,16 @@ class TransactionsFragment : Fragment(), OnTransactionClickListener, ActionMode. } }) - model.balanceManager.state.observe(viewLifecycleOwner) { state -> + balanceManager.state.observe(viewLifecycleOwner) { state -> if (state !is Success) return@observe val balances = state.balances // 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 -> ui.amount.text = balance.available.toString(showSymbol = false) + transactionAdapter.setCurrencySpec(balance.available.spec) } } transactionManager.progress.observe(viewLifecycleOwner) { show -> |