taler-android

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

commit f5ede0c47b27e7aa1ace25eec1a9851c02e42151
parent f24cf32c13ad3fe532ddcd672da548a12b95aab7
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed,  3 Dec 2025 22:20:05 +0100

[wallet] fix crash related to #10677

Diffstat:
Mwallet/src/main/java/net/taler/wallet/MainFragment.kt | 10+++++-----
Mwallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt | 2+-
Mwallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt | 14++++++++++----
Mwallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt | 8+++++---
4 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/MainFragment.kt b/wallet/src/main/java/net/taler/wallet/MainFragment.kt @@ -230,12 +230,12 @@ class MainFragment: Fragment() { val disablePeer = remember(balanceState, viewMode) { val selectedScope = (viewMode as? ViewMode.Transactions)?.selectedScope - val balances = (balanceState as? BalanceState.Success) - ?.balances + val balances = (balanceState as? BalanceState.Success)?.balances ?.filter { !it.disablePeerPayments } - (balances?.isEmpty() ?: true) || balances - .find { it.scopeInfo == selectedScope } - ?.disablePeerPayments ?: false + ?: emptyList() + selectedScope?.let { + balances.find { it.scopeInfo == selectedScope } == null + } ?: balances.isEmpty() } TalerActionsModal( diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt @@ -114,7 +114,7 @@ class BalanceManager( @UiThread fun getScopes(forPeer: Boolean = false) = balances.value?.filter { - !forPeer || it.disablePeerPayments + !forPeer || !it.disablePeerPayments }?.map { it.scopeInfo } ?: emptyList() @UiThread diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullComposable.kt @@ -95,13 +95,13 @@ fun OutgoingPullComposable( val tosReview = checkResult != null && checkResult?.tosStatus != ExchangeTosStatus.Accepted amount.amount.useDebounce { - if (amount.debounce) { + if (amount.debounce && amount.userInput) { checkResult = checkPeerPullCredit(amount, false) } } LaunchedEffect(amount) { - if (!amount.debounce) { + if (!amount.debounce && amount.userInput) { checkResult = checkPeerPullCredit(amount, true) } } @@ -141,11 +141,17 @@ fun OutgoingPullComposable( showAmount = !tosReview, showShortcuts = true, onAmountChanged = { - amount = it.copy(debounce = amount.scope == it.scope) + amount = it.copy( + debounce = amount.scope == it.scope, + userInput = true, + ) shortcutSelected = false }, onShortcutSelected = { - amount = it.copy(debounce = true) + amount = it.copy( + debounce = true, + userInput = true, + ) shortcutSelected = true }, isError = amount.amount.isZero(), diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushComposable.kt @@ -116,7 +116,9 @@ fun OutgoingPushIntroComposable( var hours by rememberSaveable { mutableLongStateOf(DEFAULT_EXPIRY.hours) } amount.useDebounce { - feeResult = getFees(it) ?: None() + if (amount.userInput) { + feeResult = getFees(it) ?: None() + } } val amountFocusRequester = remember { FocusRequester() } @@ -169,11 +171,11 @@ fun OutgoingPushIntroComposable( keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), showShortcuts = true, onAmountChanged = { - amount = it + amount = it.copy(userInput = true) shortcutSelected = false }, onShortcutSelected = { - amount = it + amount = it.copy(userInput = true) shortcutSelected = true }, label = { Text(stringResource(R.string.amount_send)) },