gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-android] 02/02: [wallet] Show details of tip transaction


From: gnunet
Subject: [taler-taler-android] 02/02: [wallet] Show details of tip transaction
Date: Thu, 05 Jan 2023 21:14:51 +0100

This is an automated email from the git hooks/post-receive script.

torsten-grote pushed a commit to branch master
in repository taler-android.

commit 6f45cd9e9f4e25df5048854cc421178f1cd66a59
Author: Torsten Grote <t@grobox.de>
AuthorDate: Thu Jan 5 17:14:18 2023 -0300

    [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(-)

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 <http://www.gnu.org/licenses/>
+ */
+
+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" />
 
+    <fragment
+        android:id="@+id/nav_transactions_detail_tip"
+        android:name="net.taler.wallet.transactions.TransactionTipFragment"
+        android:label="@string/transactions_detail_title"
+        tools:layout="@layout/fragment_transaction_withdrawal" />
+
     <fragment
         android:id="@+id/nav_transactions_detail_peer"
         android:name="net.taler.wallet.transactions.TransactionPeerFragment"
@@ -387,6 +393,10 @@
         android:id="@+id/action_nav_transactions_detail_deposit"
         app:destination="@id/nav_transactions_detail_deposit" />
 
+    <action
+        android:id="@+id/action_nav_transactions_detail_tip"
+        app:destination="@id/nav_transactions_detail_tip" />
+
     <action
         android:id="@+id/action_nav_payto_uri"
         app:destination="@id/nav_payto_uri" />

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]