taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit f24cf32c13ad3fe532ddcd672da548a12b95aab7
parent 9a52983f5403b0878ec5073ef135846bf69c3845
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed,  3 Dec 2025 20:53:57 +0100

[wallet] fix #10677

Diffstat:
Mwallet/src/main/java/net/taler/wallet/MainFragment.kt | 18+++++++++++++++---
Mwallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt | 6+++---
Mwallet/src/main/java/net/taler/wallet/balances/Balances.kt | 1+
Mwallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt | 4+++-
Mwallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt | 2+-
Mwallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt | 2+-
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt | 1+
7 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/MainFragment.kt b/wallet/src/main/java/net/taler/wallet/MainFragment.kt @@ -228,11 +228,22 @@ class MainFragment: Fragment() { !online || (balanceState as? BalanceState.Success)?.balances?.isEmpty() ?: true } + val disablePeer = remember(balanceState, viewMode) { + val selectedScope = (viewMode as? ViewMode.Transactions)?.selectedScope + val balances = (balanceState as? BalanceState.Success) + ?.balances + ?.filter { !it.disablePeerPayments } + (balances?.isEmpty() ?: true) || balances + .find { it.scopeInfo == selectedScope } + ?.disablePeerPayments ?: false + } + TalerActionsModal( showSheet = showSheet, sheetState = sheetState, onDismiss = { showSheet = false }, disableActions = disableActions, + disablePeer = disablePeer, onSend = this@MainFragment::onSend, onReceive = this@MainFragment::onReceive, onScanQr = this@MainFragment::onScanQr, @@ -395,6 +406,7 @@ fun TalerActionsModal( showSheet: Boolean, sheetState: SheetState, disableActions: Boolean, + disablePeer: Boolean, onDismiss: () -> Unit, onSend: () -> Unit, onReceive: () -> Unit, @@ -420,7 +432,7 @@ fun TalerActionsModal( ) { GridMenuItem( icon = R.drawable.ic_link, - title = R.string.enter_uri_label, + title = R.string.enter_uri, onClick = { onEnterUri(); onDismiss() }, ) @@ -441,7 +453,7 @@ fun TalerActionsModal( icon = R.drawable.transaction_p2p_incoming, title = R.string.transactions_receive_funds, onClick = { onReceive(); onDismiss() }, - enabled = !disableActions, + enabled = !disableActions && !disablePeer, ) GridMenuItem( @@ -455,7 +467,7 @@ fun TalerActionsModal( icon = R.drawable.transaction_p2p_outgoing, title = R.string.transactions_send_funds, onClick = { onSend(); onDismiss() }, - enabled = !disableActions, + enabled = !disableActions && !disablePeer, ) } } diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt @@ -113,9 +113,9 @@ class BalanceManager( } ?: emptyList() @UiThread - fun getScopes() = balances.value?.map { balanceItem -> - balanceItem.scopeInfo - } ?: emptyList() + fun getScopes(forPeer: Boolean = false) = balances.value?.filter { + !forPeer || it.disablePeerPayments + }?.map { it.scopeInfo } ?: emptyList() @UiThread fun hasSufficientBalance(amount: Amount): Boolean { diff --git a/wallet/src/main/java/net/taler/wallet/balances/Balances.kt b/wallet/src/main/java/net/taler/wallet/balances/Balances.kt @@ -28,6 +28,7 @@ data class BalanceItem( val available: Amount, val pendingIncoming: Amount, val pendingOutgoing: Amount, + val disablePeerPayments: Boolean, ) { val currency: String get() = available.currency } diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt b/wallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt @@ -309,18 +309,21 @@ fun BalancesComposablePreview() { available = Amount.fromJSONString("CHF:10.20"), pendingIncoming = Amount.fromJSONString("CHF:1.20"), pendingOutgoing = Amount.fromJSONString("CHF:0.40"), + disablePeerPayments = false, ), BalanceItem( scopeInfo = Exchange("KUDOS", "https://exchange.demo.taler.net"), available = Amount.fromJSONString("KUDOS:1407.37"), pendingIncoming = Amount.fromJSONString("KUDOS:0"), pendingOutgoing = Amount.fromJSONString("KUDOS:2.15"), + disablePeerPayments = false, ), BalanceItem( scopeInfo = Auditor("MXN", "https://auditor.taler.banxico.org.mx"), available = Amount.fromJSONString("MXN:5.50"), pendingIncoming = Amount.fromJSONString("MXN:1.40"), pendingOutgoing = Amount.fromJSONString("MXN:0"), + disablePeerPayments = false, ), ) @@ -331,7 +334,6 @@ fun BalancesComposablePreview() { year = 2025, amountReceiptsSubmitted = Amount.fromJSONString("KUDOS:10"), amountReceiptsAvailable = Amount.fromJSONString("KUDOS:10"), - ) ) diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt @@ -63,7 +63,7 @@ class OutgoingPullFragment : Fragment() { onCreateInvoice = this@OutgoingPullFragment::onCreateInvoice, onTosAccept = this@OutgoingPullFragment::onTosAccept, defaultScope = remember { (viewMode as? ViewMode.Transactions)?.selectedScope }, - scopes = balanceManager.getScopes(), + scopes = balanceManager.getScopes(true), devMode = devMode == true, getCurrencySpec = exchangeManager::getSpecForScopeInfo, checkPeerPullCredit = { amount, loading -> diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt @@ -73,7 +73,7 @@ class OutgoingPushFragment : Fragment() { OutgoingPushComposable( state = state, defaultScope = remember { (viewMode as? ViewMode.Transactions)?.selectedScope }, - scopes = balanceManager.getScopes(), + scopes = balanceManager.getScopes(true), devMode = devMode == true, getCurrencySpec = exchangeManager::getSpecForScopeInfo, getFees = { diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt @@ -509,6 +509,7 @@ private val previewBalance = BalanceItem( available = Amount.fromJSONString("MXN:5.50"), pendingIncoming = Amount.fromJSONString("MXN:1.40"), pendingOutgoing = Amount.fromJSONString("MXN:0"), + disablePeerPayments = false, ) @Preview