diff options
author | Iván Ávalos <avalos@disroot.org> | 2024-03-13 09:09:44 -0600 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2024-03-13 16:48:39 -0300 |
commit | 3deed262dad10990a68f275f886c36946b43cd4e (patch) | |
tree | 3af093e955d2fac6d0a077d4666467633dd21e89 | |
parent | 1ee82ca8a03886fc5b466d294b4927406cee8d9d (diff) | |
download | taler-android-3deed262dad10990a68f275f886c36946b43cd4e.tar.gz taler-android-3deed262dad10990a68f275f886c36946b43cd4e.tar.bz2 taler-android-3deed262dad10990a68f275f886c36946b43cd4e.zip |
[wallet] Make payto:// URIs shareable
bug 0008534
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 066184c..8f3e5d5 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 8d83427..f09d275 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 b9fd9dd..d75c685 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 48ec647..82a67b6 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> |