[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.
- [taler-taler-android] branch master updated (656ab6b -> e90570d),
gnunet <=