gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (54789b6 -> 6d20fda)


From: gnunet
Subject: [taler-taler-android] branch master updated (54789b6 -> 6d20fda)
Date: Fri, 23 Sep 2022 23:29:36 +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 54789b6  [wallet] Support uppercase URIs
     new baca5ec  [wallet] Implement beginning of deposits
     new 6d20fda  [wallet] Update to v0.9.0-dev.24

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:
 wallet/build.gradle                                |  4 +-
 wallet/src/main/AndroidManifest.xml                |  1 +
 .../src/main/java/net/taler/wallet/MainActivity.kt |  7 +--
 .../main/java/net/taler/wallet/UriInputFragment.kt |  3 +-
 .../net/taler/wallet/payment/PaymentManager.kt     | 22 ++++++++-
 ...erFragment.kt => TransactionDepositFragment.kt} | 53 ++--------------------
 .../wallet/transactions/TransactionManager.kt      |  2 +-
 .../net/taler/wallet/transactions/Transactions.kt  | 40 +++++++++++++---
 wallet/src/main/res/navigation/nav_graph.xml       | 10 ++++
 wallet/src/main/res/values/strings.xml             |  1 +
 10 files changed, 78 insertions(+), 65 deletions(-)
 copy 
wallet/src/main/java/net/taler/wallet/transactions/{TransactionPeerFragment.kt 
=> TransactionDepositFragment.kt} (64%)

diff --git a/wallet/build.gradle b/wallet/build.gradle
index c0a9e13..5396bf6 100644
--- a/wallet/build.gradle
+++ b/wallet/build.gradle
@@ -23,8 +23,8 @@ plugins {
     id "de.undercouch.download"
 }
 
-def walletCoreVersion = "v0.9.0-dev.23"
-def walletCoreSha256 = 
"d7c43a7a1d25acb68bae2df955d3c2ff6545496b31ab015c14f755a9babb274e"
+def walletCoreVersion = "v0.9.0-dev.24"
+def walletCoreSha256 = 
"3f6316b58f478a5cec5fb6f11e941b45e1a46c370b7ebacbea3da8999525389d"
 
 static def versionCodeEpoch() {
     return (new Date().getTime() / 1000).toInteger()
diff --git a/wallet/src/main/AndroidManifest.xml 
b/wallet/src/main/AndroidManifest.xml
index 69670c3..68bc321 100644
--- a/wallet/src/main/AndroidManifest.xml
+++ b/wallet/src/main/AndroidManifest.xml
@@ -63,6 +63,7 @@
                 <data
                     android:scheme="TALER"
                     tools:ignore="AppLinkUrlError" />
+                <data android:scheme="payto" />
             </intent-filter>
         </activity>
 
diff --git a/wallet/src/main/java/net/taler/wallet/MainActivity.kt 
b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
index 5597564..cb48c30 100644
--- a/wallet/src/main/java/net/taler/wallet/MainActivity.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainActivity.kt
@@ -203,9 +203,6 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener,
                 }
             }
         } else {
-            if (!scheme.startsWith("taler", ignoreCase = true)) {
-                return actionFound
-            }
             actionFound.postValue(uri.toString())
         }
 
@@ -225,8 +222,8 @@ class MainActivity : AppCompatActivity(), 
OnNavigationItemSelectedListener,
             val action = normalizedURL.substring(
                 if (normalizedURL.startsWith("taler://", ignoreCase = true)) {
                     "taler://".length
-                } else if (normalizedURL.startsWith("taler+http://";,
-                        ignoreCase = true) && model.devMode.value == true
+                } else if (normalizedURL.startsWith("taler+http://";, 
ignoreCase = true) &&
+                    model.devMode.value == true
                 ) {
                     "taler+http://".length
                 } else {
diff --git a/wallet/src/main/java/net/taler/wallet/UriInputFragment.kt 
b/wallet/src/main/java/net/taler/wallet/UriInputFragment.kt
index 8ad1fb7..00ec404 100644
--- a/wallet/src/main/java/net/taler/wallet/UriInputFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/UriInputFragment.kt
@@ -59,7 +59,8 @@ class UriInputFragment : Fragment() {
             }
         }
         ui.okButton.setOnClickListener {
-            if (ui.uriView.text?.startsWith("taler://", ignoreCase = true) == 
true) {
+            if (ui.uriView.text?.startsWith("taler://", ignoreCase = true) == 
true ||
+                ui.uriView.text?.startsWith("payto://", ignoreCase = true) == 
true) {
                 ui.uriLayout.error = null
                 val i = Intent(ACTION_VIEW, 
Uri.parse(ui.uriView.text.toString()))
                 startActivity(i)
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt 
b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
index ae091df..b8918c1 100644
--- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt
@@ -22,11 +22,12 @@ import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
+import kotlinx.serialization.Serializable
 import net.taler.common.Amount
 import net.taler.common.ContractTerms
 import net.taler.wallet.TAG
-import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.backend.TalerErrorInfo
+import net.taler.wallet.backend.WalletBackendApi
 import net.taler.wallet.payment.PayStatus.AlreadyPaid
 import net.taler.wallet.payment.PayStatus.InsufficientBalance
 import net.taler.wallet.payment.PreparePayResponse.AlreadyConfirmedResponse
@@ -119,9 +120,28 @@ class PaymentManager(
         mPayStatus.value = PayStatus.None
     }
 
+    @UiThread
+    fun makeDeposit(url: String, amount: Amount) = scope.launch {
+        // TODO
+        api.request("createDepositGroup", 
CreateDepositGroupResponse.serializer()) {
+            put("depositPaytoUri", url)
+            put("amount", amount.toJSONString())
+        }.onError {
+            Log.e(TAG, "Error createDepositGroup $it")
+        }.onSuccess {
+            Log.e(TAG, "createDepositGroup $it")
+        }
+    }
+
     private fun handleError(operation: String, error: TalerErrorInfo) {
         Log.e(TAG, "got $operation error result $error")
         mPayStatus.value = PayStatus.Error(error.userFacingMsg)
     }
 
 }
+
+@Serializable
+data class CreateDepositGroupResponse(
+    val depositGroupId: String,
+    val transactionId: String,
+)
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
similarity index 64%
copy from 
wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
copy to 
wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
index 749ec30..f721090 100644
--- 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
@@ -43,17 +43,11 @@ 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
-import net.taler.common.Amount
 import net.taler.common.toAbsoluteTime
 import net.taler.wallet.R
-import net.taler.wallet.peer.TransactionPeerPullCreditComposable
-import net.taler.wallet.peer.TransactionPeerPullDebitComposable
-import net.taler.wallet.peer.TransactionPeerPushCreditComposable
-import net.taler.wallet.peer.TransactionPeerPushDebitComposable
 
-class TransactionPeerFragment : TransactionDetailFragment() {
+class TransactionDepositFragment : TransactionDetailFragment() {
 
     override fun onCreateView(
         inflater: LayoutInflater,
@@ -64,7 +58,7 @@ class TransactionPeerFragment : TransactionDetailFragment() {
             MdcTheme {
                 Surface {
                     val t = transaction ?: error("No transaction")
-                    TransactionPeerComposable(t) {
+                    TransactionDepositComposable(t as TransactionDeposit) {
                         onDeleteButtonClicked(t)
                     }
                 }
@@ -74,7 +68,7 @@ class TransactionPeerFragment : TransactionDetailFragment() {
 }
 
 @Composable
-fun TransactionPeerComposable(t: Transaction, onDelete: () -> Unit) {
+fun TransactionDepositComposable(t: TransactionDeposit, onDelete: () -> Unit) {
     val scrollState = rememberScrollState()
     Column(
         modifier = Modifier
@@ -88,13 +82,7 @@ fun TransactionPeerComposable(t: Transaction, onDelete: () 
-> Unit) {
             text = t.timestamp.ms.toAbsoluteTime(context).toString(),
             style = MaterialTheme.typography.body1,
         )
-        when (t) {
-            is TransactionPeerPullCredit -> 
TransactionPeerPullCreditComposable(t)
-            is TransactionPeerPushCredit -> 
TransactionPeerPushCreditComposable(t)
-            is TransactionPeerPullDebit -> 
TransactionPeerPullDebitComposable(t)
-            is TransactionPeerPushDebit -> 
TransactionPeerPushDebitComposable(t)
-            else -> error("unexpected transaction: ${t::class.simpleName}")
-        }
+        // TODO
         Button(
             modifier = Modifier.padding(16.dp),
             colors = ButtonDefaults.buttonColors(backgroundColor = 
colorResource(R.color.red)),
@@ -115,36 +103,3 @@ fun TransactionPeerComposable(t: Transaction, onDelete: () 
-> Unit) {
         }
     }
 }
-
-@Composable
-fun TransactionAmountComposable(label: String, amount: Amount, amountType: 
AmountType) {
-    Text(
-        modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp),
-        text = label,
-        style = MaterialTheme.typography.body2,
-    )
-    Text(
-        modifier = Modifier.padding(top = 8.dp, start = 16.dp, end = 16.dp, 
bottom = 16.dp),
-        text = if (amountType == AmountType.Negative) "-$amount" else 
amount.toString(),
-        fontSize = 24.sp,
-        color = when (amountType) {
-            AmountType.Positive -> colorResource(R.color.green)
-            AmountType.Negative -> colorResource(R.color.red)
-            AmountType.Neutral -> Color.Unspecified
-        },
-    )
-}
-
-@Composable
-fun TransactionInfoComposable(label: String, info: String) {
-    Text(
-        modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp),
-        text = label,
-        style = MaterialTheme.typography.body2,
-    )
-    Text(
-        modifier = Modifier.padding(top = 8.dp, start = 16.dp, end = 16.dp, 
bottom = 16.dp),
-        text = info,
-        fontSize = 24.sp,
-    )
-}
diff --git 
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt 
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
index d1020e2..bbae22b 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt
@@ -89,7 +89,7 @@ class TransactionManager(
         }
     }
 
-    fun deleteTransaction(transactionId: String)  = scope.launch {
+    fun deleteTransaction(transactionId: String) = scope.launch {
         api.request<Unit>("deleteTransaction") {
             put("transactionId", transactionId)
         }.onError {
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 97ac5ea..dcb524e 100644
--- a/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
+++ b/wallet/src/main/java/net/taler/wallet/transactions/Transactions.kt
@@ -75,7 +75,7 @@ class TransactionWithdrawal(
     val withdrawalDetails: WithdrawalDetails,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
-    override val amountEffective: Amount
+    override val amountEffective: Amount,
 ) : Transaction() {
     override val icon = R.drawable.transaction_withdrawal
 
@@ -102,7 +102,7 @@ sealed class WithdrawalDetails {
          *
          * Already contains the amount and message.
          */
-        val exchangePaytoUris: List<String>
+        val exchangePaytoUris: List<String>,
     ) : WithdrawalDetails()
 
     @Serializable
@@ -133,7 +133,7 @@ class TransactionPayment(
     val status: PaymentStatus,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
-    override val amountEffective: Amount
+    override val amountEffective: Amount,
 ) : Transaction() {
     override val icon = R.drawable.ic_cash_usd_outline
     override val detailPageNav = R.id.action_nav_transactions_detail_payment
@@ -192,7 +192,7 @@ class TransactionRefund(
     val amountInvalid: Amount? = null,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
-    override val amountEffective: Amount
+    override val amountEffective: Amount,
 ) : Transaction() {
     override val icon = R.drawable.transaction_refund
     override val detailPageNav = R.id.action_nav_transactions_detail_refund
@@ -216,7 +216,7 @@ class TransactionTip(
     val merchantBaseUrl: String,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
-    override val amountEffective: Amount
+    override val amountEffective: Amount,
 ) : Transaction() {
     override val icon = R.drawable.transaction_tip_accepted // TODO different 
when declined
     override val detailPageNav = 0
@@ -239,7 +239,7 @@ class TransactionRefresh(
     val exchangeBaseUrl: String,
     override val error: TalerErrorInfo? = null,
     override val amountRaw: Amount,
-    override val amountEffective: Amount
+    override val amountEffective: Amount,
 ) : Transaction() {
     override val icon = R.drawable.transaction_refresh
     override val detailPageNav = R.id.action_nav_transactions_detail_refresh
@@ -253,6 +253,30 @@ class TransactionRefresh(
     override val generalTitleRes = R.string.transaction_refresh
 }
 
+@Serializable
+@SerialName("deposit")
+class TransactionDeposit(
+    override val transactionId: String,
+    override val timestamp: Timestamp,
+    override val pending: Boolean,
+    override val error: TalerErrorInfo? = null,
+    override val amountRaw: Amount,
+    override val amountEffective: Amount,
+    val targetPaytoUri: String,
+    val depositGroupId: String,
+) : Transaction() {
+    override val icon = R.drawable.ic_cash_usd_outline
+    override val detailPageNav = R.id.action_nav_transactions_detail_deposit
+
+    @Transient
+    override val amountType = AmountType.Negative
+    override fun getTitle(context: Context): String {
+        return context.getString(R.string.transaction_deposit)
+    }
+
+    override val generalTitleRes = R.string.transaction_deposit
+}
+
 @Serializable
 data class PeerInfoShort(
     val expiration: Timestamp? = null,
@@ -282,6 +306,7 @@ class TransactionPeerPullDebit(
     override fun getTitle(context: Context): String {
         return context.getString(R.string.transaction_peer_pull_debit)
     }
+
     override val generalTitleRes = R.string.transaction_peer_pull_debit
 }
 
@@ -309,6 +334,7 @@ class TransactionPeerPullCredit(
     override fun getTitle(context: Context): String {
         return context.getString(R.string.transaction_peer_pull_credit)
     }
+
     override val generalTitleRes = R.string.transaction_peer_pull_credit
 }
 
@@ -337,6 +363,7 @@ class TransactionPeerPushDebit(
     override fun getTitle(context: Context): String {
         return context.getString(R.string.transaction_peer_push_debit)
     }
+
     override val generalTitleRes = R.string.payment_title
 }
 
@@ -363,5 +390,6 @@ class TransactionPeerPushCredit(
     override fun getTitle(context: Context): String {
         return context.getString(R.string.transaction_peer_push_credit)
     }
+
     override val generalTitleRes = R.string.transaction_peer_push_credit
 }
diff --git a/wallet/src/main/res/navigation/nav_graph.xml 
b/wallet/src/main/res/navigation/nav_graph.xml
index f9060c5..96ca49f 100644
--- a/wallet/src/main/res/navigation/nav_graph.xml
+++ b/wallet/src/main/res/navigation/nav_graph.xml
@@ -198,6 +198,12 @@
         android:label="@string/transactions_detail_title"
         tools:layout="@layout/fragment_transaction_withdrawal" />
 
+    <fragment
+        android:id="@+id/nav_transactions_detail_deposit"
+        android:name="net.taler.wallet.transactions.TransactionDepositFragment"
+        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"
@@ -323,4 +329,8 @@
         android:id="@+id/action_nav_transactions_detail_refresh"
         app:destination="@id/nav_transactions_detail_refresh" />
 
+    <action
+        android:id="@+id/action_nav_transactions_detail_deposit"
+        app:destination="@id/nav_transactions_detail_deposit" />
+
 </navigation>
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index 52700b8..6d5f554 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -96,6 +96,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="transaction_refund_from">Refund from %s</string>
     <string name="transaction_pending">PENDING</string>
     <string name="transaction_refresh">Coin expiry change fee</string>
+    <string name="transaction_deposit">Deposit</string>
     <string name="transaction_peer_push_debit">Push payment</string>
     <string name="transaction_peer_pull_credit">Invoice</string>
     <string name="transaction_peer_pull_debit">Invoice paid</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]