commit e87d6fc36aba431a6453fef1987f9c010b4ec12f parent 913287446d6889c0fd571c3428e506eb75fc954c Author: Iván Ávalos <avalos@disroot.org> Date: Mon, 26 Oct 2026 15:25:38 +0100 [wallet] hide fees for aborted credit transactions Diffstat:
5 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt @@ -28,6 +28,7 @@ import net.taler.wallet.R import net.taler.wallet.backend.TalerErrorCode.EXCHANGE_GENERIC_KYC_REQUIRED import net.taler.wallet.backend.TalerErrorInfo import net.taler.wallet.balances.ScopeInfo +import net.taler.wallet.transactions.feeIsMeaningful import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.PeerActions import net.taler.wallet.transactions.PeerInfoShort @@ -68,7 +69,7 @@ fun ColumnScope.TransactionPeerPullCreditComposable( amountType = AmountType.Neutral, ) - if (t.amountRaw > t.amountEffective) { + if (t.amountRaw > t.amountEffective && t.feeIsMeaningful) { val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.amount_fee), diff --git a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushCredit.kt @@ -27,6 +27,7 @@ import net.taler.wallet.R import net.taler.wallet.backend.TalerErrorCode.EXCHANGE_GENERIC_KYC_REQUIRED import net.taler.wallet.backend.TalerErrorInfo import net.taler.wallet.balances.ScopeInfo +import net.taler.wallet.transactions.feeIsMeaningful import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.PeerActions import net.taler.wallet.transactions.PeerInfoShort @@ -53,7 +54,7 @@ fun ColumnScope.TransactionPeerPushCreditComposable( amountType = AmountType.Neutral, ) - if (t.amountRaw > t.amountEffective) { + if (t.amountRaw > t.amountEffective && t.feeIsMeaningful) { val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.amount_fee), diff --git a/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt b/wallet/src/main/java/net/taler/wallet/refund/TransactionRefundComposable.kt @@ -39,6 +39,7 @@ import net.taler.wallet.backend.TalerErrorCode import net.taler.wallet.backend.TalerErrorInfo import net.taler.wallet.balances.ScopeInfo import net.taler.wallet.compose.TalerSurface +import net.taler.wallet.transactions.feeIsMeaningful import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.ErrorTransactionButton import net.taler.wallet.transactions.TransactionAction @@ -87,7 +88,7 @@ fun TransactionRefundComposable( amountType = AmountType.Neutral, ) - if (t.amountRaw > t.amountEffective) { + if (t.amountRaw > t.amountEffective && t.feeIsMeaningful) { val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.amount_fee), diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionState.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionState.kt @@ -185,3 +185,20 @@ object TransactionStateSerializer : KSerializer<TransactionState> { }) } } + +/** + * Whether the difference between a credit's raw and effective amounts is a + * fee. For transactions that never completed, wallet-core zeroes the + * effective amount, which would otherwise make the whole amount look like a + * fee. + */ +val Transaction.feeIsMeaningful: Boolean + get() = when (txState.major) { + TransactionMajorState.Aborted, + TransactionMajorState.Aborting, + TransactionMajorState.SuspendedAborting, + TransactionMajorState.Failed, + TransactionMajorState.Expired, + TransactionMajorState.Deleted -> false + else -> true + } diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt b/wallet/src/main/java/net/taler/wallet/withdraw/TransactionWithdrawalComposable.kt @@ -52,6 +52,7 @@ import net.taler.wallet.backend.TalerErrorCode import net.taler.wallet.backend.TalerErrorInfo import net.taler.wallet.balances.ScopeInfo import net.taler.wallet.cleanExchange +import net.taler.wallet.transactions.feeIsMeaningful import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.ErrorTransactionButton import net.taler.wallet.transactions.TransactionAction @@ -167,7 +168,7 @@ fun TransactionWithdrawalComposable( ) } - if (t.amountRaw > t.amountEffective) { + if (t.amountRaw > t.amountEffective && t.feeIsMeaningful) { val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( label = stringResource(id = R.string.amount_fee),