gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] 02/02: [wallet] Make payto:// URIs shareable


From: gnunet
Subject: [taler-taler-android] 02/02: [wallet] Make payto:// URIs shareable
Date: Wed, 13 Mar 2024 20:48:49 +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 3deed262dad10990a68f275f886c36946b43cd4e
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Wed Mar 13 09:09:44 2024 -0600

    [wallet] Make payto:// URIs shareable
    
    bug 0008534
---
 .../src/main/java/net/taler/common/AndroidUtils.kt  | 18 ++++++++++++++++++
 .../manual/ManualWithdrawSuccessFragment.kt         | 21 +++++++++++++--------
 .../taler/wallet/withdraw/manual/ScreenTransfer.kt  | 13 ++++++++++++-
 wallet/src/main/res/values/strings.xml              |  1 +
 4 files changed, 44 insertions(+), 9 deletions(-)

diff --git 
a/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt 
b/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
index 066184c1..8f3e5d5c 100644
--- a/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
+++ b/taler-kotlin-android/src/main/java/net/taler/common/AndroidUtils.kt
@@ -23,6 +23,7 @@ import android.content.Context.CONNECTIVITY_SERVICE
 import android.content.Intent
 import android.net.ConnectivityManager
 import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
+import android.net.Uri
 import android.os.Build.VERSION.SDK_INT
 import android.os.Looper
 import android.text.format.DateUtils.DAY_IN_MILLIS
@@ -120,6 +121,23 @@ fun Context.startActivitySafe(intent: Intent) {
     }
 }
 
+fun Context.openUri(uri: String, title: String) {
+    val intent = Intent(Intent.ACTION_VIEW).apply {
+        data = Uri.parse(uri)
+    }
+
+    startActivitySafe(Intent.createChooser(intent, title))
+}
+
+fun Context.shareText(text: String) {
+    val intent = Intent(Intent.ACTION_SEND).apply {
+        putExtra(Intent.EXTRA_TEXT, text)
+        type = "text/plain"
+    }
+
+    startActivitySafe(Intent.createChooser(intent, null))
+}
+
 fun Fragment.navigate(directions: NavDirections) = 
findNavController().navigate(directions)
 
 fun Long.toRelativeTime(context: Context): CharSequence {
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
 
b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
index 8d834274..f09d275d 100644
--- 
a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
+++ 
b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ManualWithdrawSuccessFragment.kt
@@ -16,8 +16,6 @@
 
 package net.taler.wallet.withdraw.manual
 
-import android.content.Intent
-import android.net.Uri
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -27,7 +25,8 @@ import androidx.compose.ui.platform.ComposeView
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.navigation.fragment.findNavController
-import net.taler.common.startActivitySafe
+import net.taler.common.openUri
+import net.taler.common.shareText
 import net.taler.wallet.MainViewModel
 import net.taler.wallet.R
 import net.taler.wallet.compose.TalerSurface
@@ -68,17 +67,23 @@ class ManualWithdrawSuccessFragment : Fragment() {
                 ScreenTransfer(
                     status = status,
                     bankAppClick = { onBankAppClick(it) },
+                    shareClick = { onShareClick(it) },
                 )
             }
         }
     }
 
     private fun onBankAppClick(transfer: TransferData) {
-        val intent = Intent().apply { data = 
Uri.parse(transfer.withdrawalAccount.paytoUri) }
-        val componentName = 
intent.resolveActivity(requireContext().packageManager)
-        if (componentName != null) {
-            requireContext().startActivitySafe(intent)
-        }
+        requireContext().openUri(
+            uri = transfer.withdrawalAccount.paytoUri,
+            title = requireContext().getString(R.string.share_payment)
+        )
+    }
+
+    private fun onShareClick(transfer: TransferData) {
+        requireContext().shareText(
+            text = transfer.withdrawalAccount.paytoUri,
+        )
     }
 
     override fun onStart() {
diff --git 
a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt 
b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt
index b9fd9ddd..d75c685f 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/manual/ScreenTransfer.kt
@@ -47,6 +47,7 @@ import androidx.compose.ui.unit.dp
 import net.taler.common.Amount
 import net.taler.wallet.CURRENCY_BTC
 import net.taler.wallet.R
+import net.taler.wallet.compose.ShareButton
 import net.taler.wallet.balances.CurrencySpecification
 import net.taler.wallet.compose.copyToClipBoard
 import net.taler.wallet.transactions.AmountType
@@ -59,6 +60,7 @@ import net.taler.wallet.withdraw.WithdrawStatus
 fun ScreenTransfer(
     status: WithdrawStatus.ManualTransferRequired,
     bankAppClick: ((transfer: TransferData) -> Unit)?,
+    shareClick: ((transfer: TransferData) -> Unit)?,
 ) {
     // TODO: show some placeholder
     if (status.withdrawalTransfers.isEmpty()) return
@@ -111,11 +113,19 @@ fun ScreenTransfer(
                 Button(
                     onClick = { bankAppClick(selectedTransfer) },
                     modifier = Modifier
-                        .padding(bottom = 16.dp)
+                        .padding(bottom = 16.dp),
                 ) {
                     Text(text = 
stringResource(R.string.withdraw_manual_ready_bank_button))
                 }
             }
+
+            if (shareClick != null) {
+                ShareButton(
+                    content = selectedTransfer.withdrawalAccount.paytoUri,
+                    modifier = Modifier
+                        .padding(bottom = 16.dp),
+                )
+            }
         }
     }
 }
@@ -296,6 +306,7 @@ fun ScreenTransferPreview() {
                 ),
             ),
             bankAppClick = {},
+            shareClick = {},
         )
     }
 }
\ No newline at end of file
diff --git a/wallet/src/main/res/values/strings.xml 
b/wallet/src/main/res/values/strings.xml
index 48ec647f..82a67b61 100644
--- a/wallet/src/main/res/values/strings.xml
+++ b/wallet/src/main/res/values/strings.xml
@@ -61,6 +61,7 @@ GNU Taler is immune against many types of fraud, such as 
phishing of credit card
     <string name="char_count">%1$d/%2$d</string>
     <string name="import_db">Import</string>
     <string name="reset">Reset</string>
+    <string name="share_payment">Share payment link</string>
 
     <string name="offline">Operation requires internet access. Please ensure 
your internet connection works and try again.</string>
     <string name="offline_banner">No internet access</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]