diff options
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt | 85 |
1 files changed, 46 insertions, 39 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 index 3179024..59d405c 100644 --- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt +++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt @@ -17,82 +17,89 @@ package net.taler.wallet.peer import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.padding -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text +import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier 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.wallet.R -import net.taler.wallet.compose.QrCodeUriComposable +import net.taler.wallet.backend.TalerErrorCode.EXCHANGE_GENERIC_KYC_REQUIRED +import net.taler.wallet.backend.TalerErrorInfo import net.taler.wallet.transactions.AmountType import net.taler.wallet.transactions.PeerInfoShort +import net.taler.wallet.transactions.TransactionAction.Abort +import net.taler.wallet.transactions.TransactionAction.Retry +import net.taler.wallet.transactions.TransactionAction.Suspend import net.taler.wallet.transactions.TransactionAmountComposable import net.taler.wallet.transactions.TransactionInfoComposable +import net.taler.wallet.transactions.TransactionMajorState.Pending +import net.taler.wallet.transactions.TransactionMinorState.CreatePurse +import net.taler.wallet.transactions.TransactionMinorState.Ready import net.taler.wallet.transactions.TransactionPeerComposable import net.taler.wallet.transactions.TransactionPeerPullCredit +import net.taler.wallet.transactions.TransactionState @Composable -fun ColumnScope.TransactionPeerPullCreditComposable(t: TransactionPeerPullCredit) { - TransactionAmountComposable( - label = stringResource(id = R.string.receive_amount), - amount = t.amountEffective, - amountType = AmountType.Positive, +fun ColumnScope.TransactionPeerPullCreditComposable(t: TransactionPeerPullCredit, spec: CurrencySpecification?) { + if (t.error == null) PeerQrCode( + state = t.txState, + talerUri = t.talerUri, ) + TransactionAmountComposable( - label = stringResource(id = R.string.amount_chosen), - amount = t.amountRaw, + label = stringResource(id = R.string.amount_invoiced), + amount = t.amountRaw.withSpec(spec), amountType = AmountType.Neutral, ) - val fee = t.amountRaw - t.amountEffective - if (!fee.isZero()) { + + if (t.amountRaw > t.amountEffective) { + val fee = t.amountRaw - t.amountEffective TransactionAmountComposable( - label = stringResource(id = R.string.withdraw_fees), - amount = fee, + label = stringResource(id = R.string.amount_fee), + amount = fee.withSpec(spec), amountType = AmountType.Negative, ) } + + TransactionAmountComposable( + label = stringResource(id = R.string.amount_received), + amount = t.amountEffective.withSpec(spec), + amountType = AmountType.Positive, + ) + TransactionInfoComposable( - label = stringResource(id = R.string.withdraw_manual_ready_subject), + label = stringResource(id = R.string.send_peer_purpose), info = t.info.summary ?: "", ) - if (t.pending) { - QrCodeUriComposable( - talerUri = t.talerUri, - clipBoardLabel = "Invoice", - buttonText = stringResource(id = R.string.copy_uri), - ) { - Text( - modifier = Modifier.padding(horizontal = 16.dp), - style = MaterialTheme.typography.body1, - text = stringResource(id = R.string.receive_peer_invoice_uri), - ) - } - } } @Preview @Composable -fun TransactionPeerPullCreditPreview() { +fun TransactionPeerPullCreditPreview(loading: Boolean = false) { val t = TransactionPeerPullCredit( transactionId = "transactionId", - timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000), - pending = true, + timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60 * 1000), + txState = TransactionState(Pending, if (loading) CreatePurse else Ready), + txActions = listOf(Retry, Suspend, Abort), exchangeBaseUrl = "https://exchange.example.org/", - amountRaw = Amount.fromDouble("TESTKUDOS", 42.23), - amountEffective = Amount.fromDouble("TESTKUDOS", 42.1337), + amountRaw = Amount.fromString("TESTKUDOS", "42.23"), + amountEffective = Amount.fromString("TESTKUDOS", "42.1337"), info = PeerInfoShort( - expiration = Timestamp(System.currentTimeMillis() + 60 * 60 * 1000), + expiration = Timestamp.fromMillis(System.currentTimeMillis() + 60 * 60 * 1000), summary = "test invoice", ), talerUri = "https://exchange.example.org/peer/pull/credit", + error = TalerErrorInfo(code = EXCHANGE_GENERIC_KYC_REQUIRED), ) Surface { - TransactionPeerComposable(t) {} + TransactionPeerComposable(t, true, null) {} } } + +@Preview +@Composable +fun TransactionPeerPullCreditLoadingPreview() { + TransactionPeerPullCreditPreview(loading = true) +}
\ No newline at end of file |