gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (656ab6b -> e90570d)


From: gnunet
Subject: [taler-taler-android] branch master updated (656ab6b -> e90570d)
Date: Thu, 13 Apr 2023 17:33:18 +0200

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

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

    from 656ab6b  [wallet] Clean up compose migration of payment and refund 
transactions
     new 1a9de46  [wallet] Make transaction error dialog scrollable
     new e90570d  [wallet] Render dummy transactions whenever we can't parse a 
transaction

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../transactions/ErrorTransactionComposable.kt     |  9 ++-
 ...ositFragment.kt => TransactionDummyFragment.kt} | 32 +++++++--
 .../net/taler/wallet/transactions/Transactions.kt  | 79 +++++++++++++++++++++-
 wallet/src/main/res/navigation/nav_graph.xml       |  5 ++
 wallet/src/main/res/values/strings.xml             |  1 +
 5 files changed, 118 insertions(+), 8 deletions(-)
 copy 
wallet/src/main/java/net/taler/wallet/transactions/{TransactionDepositFragment.kt
 => TransactionDummyFragment.kt} (58%)

diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/ErrorTransactionComposable.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/ErrorTransactionComposable.kt
index 3cbc9e1..ea875d7 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/ErrorTransactionComposable.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/ErrorTransactionComposable.kt
@@ -19,6 +19,8 @@ package net.taler.wallet.transactions
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Error
 import androidx.compose.material3.AlertDialog
@@ -35,6 +37,7 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.unit.sp
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
 import net.taler.wallet.R
@@ -63,9 +66,13 @@ fun ErrorTransactionButton(
                 Text(stringResource(R.string.nav_error))
             },
             text = {
-                Column {
+                val scrollState = rememberScrollState()
+                Column(
+                    modifier = Modifier.verticalScroll(scrollState),
+                ) {
                     Text(
                         fontFamily = FontFamily.Monospace,
+                        fontSize = 10.sp,
                         text = message,
                     )
                 }
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDummyFragment.kt
similarity index 58%
copy from 
wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
copy to 
wallet/src/main/java/net/taler/wallet/transactions/TransactionDummyFragment.kt
index 3fd37ce..ad5e19c 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDummyFragment.kt
@@ -20,12 +20,20 @@ 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.runtime.Composable
 import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.ui.Alignment.Companion.CenterHorizontally
+import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.unit.dp
 import net.taler.wallet.compose.TalerSurface
-import net.taler.wallet.deposit.TransactionDepositComposable
 
-class TransactionDepositFragment : TransactionDetailFragment() {
+class TransactionDummyFragment : TransactionDetailFragment() {
 
     override fun onCreateView(
         inflater: LayoutInflater,
@@ -34,11 +42,23 @@ class TransactionDepositFragment : 
TransactionDetailFragment() {
     ): View = ComposeView(requireContext()).apply {
         setContent {
             TalerSurface {
-                val t = 
transactionManager.selectedTransaction.observeAsState().value
-                if (t is TransactionDeposit) TransactionDepositComposable(t, 
devMode.value) {
-                    onDeleteButtonClicked(t)
-                }
+                val t = 
transactionManager.selectedTransaction.observeAsState(null).value
+                if (t is DummyTransaction) TransactionDummyComposable(t)
             }
         }
     }
 }
+
+@Composable
+fun TransactionDummyComposable(t: DummyTransaction) {
+    val scrollState = rememberScrollState()
+    Column(
+        modifier = Modifier
+            .fillMaxWidth()
+            .padding(16.dp)
+            .verticalScroll(scrollState),
+        horizontalAlignment = CenterHorizontally,
+    ) {
+            ErrorTransactionButton(error = t.error)
+    }
+}
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 a306685..29c5717 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
@@ -17,24 +17,81 @@
 package net.taler.wallet.transactions
 
 import android.content.Context
+import android.util.Log
 import androidx.annotation.DrawableRes
 import androidx.annotation.IdRes
 import androidx.annotation.StringRes
+import kotlinx.serialization.KSerializer
 import kotlinx.serialization.SerialName
 import kotlinx.serialization.Serializable
+import kotlinx.serialization.SerializationException
 import kotlinx.serialization.Transient
+import kotlinx.serialization.builtins.ListSerializer
+import kotlinx.serialization.builtins.MapSerializer
+import kotlinx.serialization.builtins.serializer
+import kotlinx.serialization.descriptors.SerialDescriptor
+import kotlinx.serialization.encoding.Decoder
+import kotlinx.serialization.encoding.Encoder
+import kotlinx.serialization.json.JsonElement
 import net.taler.common.Amount
 import net.taler.common.ContractMerchant
 import net.taler.common.ContractProduct
 import net.taler.common.Timestamp
 import net.taler.wallet.R
+import net.taler.wallet.TAG
+import net.taler.wallet.backend.TalerErrorCode
 import net.taler.wallet.backend.TalerErrorInfo
 import net.taler.wallet.cleanExchange
 import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer
 import net.taler.wallet.transactions.WithdrawalDetails.TalerBankIntegrationApi
+import java.util.UUID
 
 @Serializable
-data class Transactions(val transactions: List<Transaction>)
+data class Transactions(
+    @Serializable(with = TransactionListSerializer::class)
+    val transactions: List<Transaction>,
+)
+
+class TransactionListSerializer : KSerializer<List<Transaction>> {
+    private val serializer = ListSerializer(TransactionSerializer())
+    override val descriptor: SerialDescriptor = serializer.descriptor
+
+    override fun deserialize(decoder: Decoder): List<Transaction> {
+        return decoder.decodeSerializableValue(serializer)
+    }
+
+    override fun serialize(encoder: Encoder, value: List<Transaction>) {
+        throw NotImplementedError()
+    }
+}
+
+class TransactionSerializer : KSerializer<Transaction> {
+
+    private val serializer = Transaction.serializer()
+    override val descriptor: SerialDescriptor = serializer.descriptor
+    private val jsonSerializer = MapSerializer(String.serializer(), 
JsonElement.serializer())
+
+    override fun deserialize(decoder: Decoder): Transaction {
+        return try {
+            decoder.decodeSerializableValue(serializer)
+        } catch (e: SerializationException) {
+            Log.e(TAG, "Error deserializing transaction.", e)
+            DummyTransaction(
+                transactionId = UUID.randomUUID().toString(),
+                timestamp = Timestamp.now(),
+                error = TalerErrorInfo(
+                    code = TalerErrorCode.UNKNOWN,
+                    message = e.message,
+                    extra = decoder.decodeSerializableValue(jsonSerializer)
+                ),
+            )
+        }
+    }
+
+    override fun serialize(encoder: Encoder, value: Transaction) {
+        throw NotImplementedError()
+    }
+}
 
 @Serializable
 sealed class Transaction {
@@ -420,3 +477,23 @@ class TransactionPeerPushCredit(
 
     override val generalTitleRes = R.string.transaction_peer_push_credit
 }
+
+/**
+ * This represents a transaction that we can not parse for some reason.
+ */
+class DummyTransaction(
+    override val transactionId: String,
+    override val timestamp: Timestamp,
+    override val error: TalerErrorInfo,
+) : Transaction() {
+    override val extendedStatus: ExtendedStatus = ExtendedStatus.Failed
+    override val amountRaw: Amount = Amount.zero("TESTKUDOS")
+    override val amountEffective: Amount = Amount.zero("TESTKUDOS")
+    override val icon: Int = R.drawable.ic_bug_report
+    override val detailPageNav: Int = R.id.nav_transactions_detail_dummy
+    override val amountType: AmountType = AmountType.Neutral
+    override val generalTitleRes: Int = R.string.transaction_dummy_title
+    override fun getTitle(context: Context): String {
+        return context.getString(R.string.transaction_dummy_title)
+    }
+}
diff --git a/wallet/src/main/res/navigation/nav_graph.xml 
b/wallet/src/main/res/navigation/nav_graph.xml
index 966afac..9fd6578 100644
--- a/wallet/src/main/res/navigation/nav_graph.xml
+++ b/wallet/src/main/res/navigation/nav_graph.xml
@@ -263,6 +263,11 @@
         android:name="net.taler.wallet.transactions.TransactionPeerFragment"
         android:label="@string/transactions_detail_title" />
 
+    <fragment
+        android:id="@+id/nav_transactions_detail_dummy"
+        android:name="net.taler.wallet.transactions.TransactionDummyFragment"
+        android:label="@string/transactions_detail_title" />
+
     <fragment
         android:id="@+id/alreadyAccepted"
         android:name="net.taler.wallet.tip.AlreadyAcceptedFragment"
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index 1a16a69..734a233 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -107,6 +107,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="transaction_peer_pull_debit">Invoice paid</string>
     <string name="transaction_peer_push_credit">Push payment</string>
     <string name="transaction_action_kyc">Complete KYC</string>
+    <string name="transaction_dummy_title">Unknown Transaction</string>
 
     <string name="payment_title">Payment</string>
     <string name="payment_fee">+%s payment fee</string>

-- 
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]