From 074032c61a41b275a32bcebc1ebf280ceb20aeef Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 3 Nov 2022 11:47:20 -0300 Subject: [wallet] Show more deposit info in transaction list item --- .../wallet/deposit/TransactionDepositComposable.kt | 95 ++++++++++++++++++++++ .../transactions/DeleteTransactionComposable.kt | 55 +++++++++++++ .../transactions/TransactionDepositFragment.kt | 61 +------------- .../wallet/transactions/TransactionPeerFragment.kt | 26 +----- 4 files changed, 152 insertions(+), 85 deletions(-) create mode 100644 wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt create mode 100644 wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt (limited to 'wallet') diff --git a/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt new file mode 100644 index 0000000..aa75c56 --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/deposit/TransactionDepositComposable.kt @@ -0,0 +1,95 @@ +/* + * 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.deposit + +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 +import androidx.compose.ui.Modifier +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.transactions.AmountType +import net.taler.wallet.transactions.DeleteTransactionComposable +import net.taler.wallet.transactions.TransactionAmountComposable +import net.taler.wallet.transactions.TransactionDeposit + +@Composable +fun TransactionDepositComposable(t: TransactionDeposit, onDelete: () -> Unit) { + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(scrollState), + horizontalAlignment = Alignment.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.transaction_paid), + amount = t.amountEffective, + amountType = AmountType.Negative, + ) + TransactionAmountComposable( + label = stringResource(id = R.string.transaction_order_total), + amount = t.amountRaw, + amountType = AmountType.Neutral, + ) + val fee = t.amountEffective - t.amountRaw + if (!fee.isZero()) { + TransactionAmountComposable( + label = stringResource(id = R.string.withdraw_fees), + amount = fee, + amountType = AmountType.Negative, + ) + } + DeleteTransactionComposable(onDelete) + } +} + +@Preview +@Composable +fun TransactionDepositComposablePreview() { + val t = TransactionDeposit( + transactionId = "transactionId", + timestamp = Timestamp(System.currentTimeMillis() - 360 * 60 * 1000), + pending = true, + depositGroupId = "fooBar", + amountRaw = Amount.fromDouble("TESTKUDOS", 42.1337), + amountEffective = Amount.fromDouble("TESTKUDOS", 42.23), + targetPaytoUri = "https://exchange.example.org/peer/pull/credit", + ) + Surface { + TransactionDepositComposable(t) {} + } +} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt new file mode 100644 index 0000000..7b69e2b --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/transactions/DeleteTransactionComposable.kt @@ -0,0 +1,55 @@ +/* + * 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 androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import net.taler.wallet.R + +@Composable +fun DeleteTransactionComposable(onDelete: () -> Unit) { + Button( + modifier = Modifier.padding(16.dp), + colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.red)), + onClick = onDelete, + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + painter = painterResource(id = R.drawable.ic_delete), + contentDescription = null, + tint = Color.White, + ) + Text( + modifier = Modifier.padding(start = 8.dp), + text = stringResource(R.string.transactions_delete), + color = Color.White, + ) + } + } +} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt index f721090..5443942 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt @@ -20,32 +20,10 @@ 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.Row -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.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Icon -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.Alignment.Companion.CenterVertically -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp import com.google.android.material.composethemeadapter.MdcTheme -import net.taler.common.toAbsoluteTime -import net.taler.wallet.R +import net.taler.wallet.deposit.TransactionDepositComposable class TransactionDepositFragment : TransactionDetailFragment() { @@ -66,40 +44,3 @@ class TransactionDepositFragment : TransactionDetailFragment() { } } } - -@Composable -fun TransactionDepositComposable(t: TransactionDeposit, 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, - ) - // TODO - Button( - modifier = Modifier.padding(16.dp), - colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.red)), - onClick = onDelete, - ) { - Row(verticalAlignment = CenterVertically) { - Icon( - painter = painterResource(id = R.drawable.ic_delete), - contentDescription = null, - tint = Color.White, - ) - Text( - modifier = Modifier.padding(start = 8.dp), - text = stringResource(R.string.transactions_delete), - color = Color.White, - ) - } - } - } -} diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt index 749ec30..b03eb39 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt @@ -21,27 +21,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row 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.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Icon 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.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.google.android.material.composethemeadapter.MdcTheme @@ -95,24 +88,7 @@ fun TransactionPeerComposable(t: Transaction, onDelete: () -> Unit) { is TransactionPeerPushDebit -> TransactionPeerPushDebitComposable(t) else -> error("unexpected transaction: ${t::class.simpleName}") } - Button( - modifier = Modifier.padding(16.dp), - colors = ButtonDefaults.buttonColors(backgroundColor = colorResource(R.color.red)), - onClick = onDelete, - ) { - Row(verticalAlignment = CenterVertically) { - Icon( - painter = painterResource(id = R.drawable.ic_delete), - contentDescription = null, - tint = Color.White, - ) - Text( - modifier = Modifier.padding(start = 8.dp), - text = stringResource(R.string.transactions_delete), - color = Color.White, - ) - } - } + DeleteTransactionComposable(onDelete) } } -- cgit v1.2.3