From 6f45cd9e9f4e25df5048854cc421178f1cd66a59 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 5 Jan 2023 17:14:18 -0300 Subject: [wallet] Show details of tip transaction #0007476 --- .../wallet/transactions/TransactionTipFragment.kt | 119 +++++++++++++++++++++ .../net/taler/wallet/transactions/Transactions.kt | 5 +- wallet/src/main/res/navigation/nav_graph.xml | 10 ++ 3 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt new file mode 100644 index 0000000..3f370c7 --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionTipFragment.kt @@ -0,0 +1,119 @@ +/* + * This file is part of GNU Taler + * (C) 2022 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package net.taler.wallet.transactions + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment.Companion.CenterHorizontally +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.LocalContext +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.Timestamp +import net.taler.common.toAbsoluteTime +import net.taler.wallet.R +import net.taler.wallet.compose.TalerSurface + +class TransactionTipFragment : TransactionDetailFragment() { + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View = ComposeView(requireContext()).apply { + setContent { + TalerSurface { + val t = transaction as? TransactionTip ?: error("No or wrong transaction") + TransactionTipComposable(t) { + onDeleteButtonClicked(t) + } + } + } + } +} + +@Composable +fun TransactionTipComposable(t: TransactionTip, onDelete: () -> Unit) { + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(scrollState), + horizontalAlignment = CenterHorizontally, + ) { + val context = LocalContext.current + Text( + modifier = Modifier.padding(16.dp), + text = t.timestamp.ms.toAbsoluteTime(context).toString(), + style = MaterialTheme.typography.body1, + ) + + TransactionAmountComposable( + label = stringResource(id = R.string.send_peer_payment_amount_received), + amount = t.amountEffective, + amountType = AmountType.Positive, + ) + TransactionAmountComposable( + label = stringResource(id = R.string.send_peer_payment_amount_sent), + amount = t.amountRaw, + amountType = AmountType.Neutral, + ) + val fee = t.amountRaw - t.amountEffective + if (!fee.isZero()) { + TransactionAmountComposable( + label = stringResource(id = R.string.withdraw_fees), + amount = fee, + amountType = AmountType.Negative, + ) + } + TransactionInfoComposable( + label = stringResource(id = R.string.tip_merchant_url), + info = t.merchantBaseUrl, + ) + DeleteTransactionComposable(onDelete) + } +} + +@Preview +@Composable +fun TransactionTipPreview() { + val t = TransactionTip( + transactionId = "transactionId", + timestamp = Timestamp.fromMillis(System.currentTimeMillis() - 360 * 60 * 1000), + pending = true, + merchantBaseUrl = "https://merchant.example.org/", + amountRaw = Amount.fromDouble("TESTKUDOS", 42.23), + amountEffective = Amount.fromDouble("TESTKUDOS", 42.1337), + ) + Surface { + TransactionTipComposable(t) {} + } +} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt index dcb524e..740aab6 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt @@ -212,14 +212,13 @@ class TransactionTip( override val transactionId: String, override val timestamp: Timestamp, override val pending: Boolean, - val frozen: Boolean, val merchantBaseUrl: String, override val error: TalerErrorInfo? = null, override val amountRaw: Amount, override val amountEffective: Amount, ) : Transaction() { - override val icon = R.drawable.transaction_tip_accepted // TODO different when declined - override val detailPageNav = 0 + override val icon = R.drawable.transaction_tip_accepted + override val detailPageNav = R.id.action_nav_transactions_detail_tip @Transient override val amountType = AmountType.Positive diff --git a/wallet/src/main/res/navigation/nav_graph.xml b/wallet/src/main/res/navigation/nav_graph.xml index f1d189f..ec5ec08 100644 --- a/wallet/src/main/res/navigation/nav_graph.xml +++ b/wallet/src/main/res/navigation/nav_graph.xml @@ -258,6 +258,12 @@ android:label="@string/transactions_detail_title" tools:layout="@layout/fragment_transaction_withdrawal" /> + + + + -- cgit v1.2.3