gnunet-svn
[Top][All Lists]
Advanced

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

[taler-taler-android] branch master updated (63158f57 -> 3deed262)


From: gnunet
Subject: [taler-taler-android] branch master updated (63158f57 -> 3deed262)
Date: Wed, 13 Mar 2024 20:48:47 +0100

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 63158f57 [wallet] Remove deprecated field
     new 1ee82ca8 [wallet] Fix wrong insufficient balance in multiple places
     new 3deed262 [wallet] Make payto:// URIs shareable

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:
 .../src/main/java/net/taler/common/AndroidUtils.kt  | 18 ++++++++++++++++++
 .../src/main/java/net/taler/wallet/MainViewModel.kt | 10 ++++------
 .../net/taler/wallet/balances/BalanceManager.kt     | 10 +++++++---
 .../net/taler/wallet/deposit/PayToUriFragment.kt    |  2 +-
 .../manual/ManualWithdrawSuccessFragment.kt         | 21 +++++++++++++--------
 .../taler/wallet/withdraw/manual/ScreenTransfer.kt  | 13 ++++++++++++-
 wallet/src/main/res/values/strings.xml              |  1 +
 7 files changed, 56 insertions(+), 19 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/MainViewModel.kt 
b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
index c2b04ca0..fe11d6a0 100644
--- a/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
+++ b/wallet/src/main/java/net/taler/wallet/MainViewModel.kt
@@ -119,11 +119,9 @@ class MainViewModel(
     }
 
     @UiThread
-    fun getCurrencies(): List<String> {
-        return balanceManager.balancesOrNull?.map { balanceItem ->
-            balanceItem.currency
-        } ?: emptyList()
-    }
+    fun getCurrencies() = balanceManager.balances.value?.map { balanceItem ->
+        balanceItem.currency
+    } ?: emptyList()
 
     @UiThread
     fun createAmount(amountText: String, currency: String): AmountResult {
@@ -138,7 +136,7 @@ class MainViewModel(
 
     @UiThread
     fun hasSufficientBalance(amount: Amount): Boolean {
-        balanceManager.balancesOrNull?.forEach { balanceItem ->
+        balanceManager.balances.value?.forEach { balanceItem ->
             if (balanceItem.currency == amount.currency) {
                 return balanceItem.available >= amount
             }
diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt 
b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt
index e9648817..2930c77c 100644
--- a/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/balances/BalanceManager.kt
@@ -17,6 +17,7 @@
 package net.taler.wallet.balances
 
 import android.util.Log
+import androidx.annotation.UiThread
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.distinctUntilChanged
@@ -49,13 +50,15 @@ class BalanceManager(
     private val api: WalletBackendApi,
     private val scope: CoroutineScope,
 ) {
+    private val mBalances = MutableLiveData<List<BalanceItem>>(emptyList())
+    val balances: LiveData<List<BalanceItem>> = mBalances
+
     private val mState = MutableLiveData<BalanceState>(BalanceState.None)
     val state: LiveData<BalanceState> = mState.distinctUntilChanged()
 
-    val balancesOrNull get() = (state.value as? BalanceState.Success)?.balances
-
+    @UiThread
     fun loadBalances() {
-        mState.postValue(BalanceState.Loading)
+        mState.value = BalanceState.Loading
         scope.launch {
             val response = api.request("getBalances", 
BalanceResponse.serializer())
             response.onError {
@@ -64,6 +67,7 @@ class BalanceManager(
             }
             response.onSuccess {
                 mState.postValue(BalanceState.Success(it.balances))
+                mBalances.postValue(it.balances)
             }
         }
     }
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt 
b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
index c7a4eb0f..89610161 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
@@ -86,7 +86,7 @@ class PayToUriFragment : Fragment() {
                         text = stringResource(id = 
R.string.payment_balance_insufficient),
                         color = MaterialTheme.colorScheme.error,
                     ) else if (depositManager.isSupportedPayToUri(uri)) 
PayToComposable(
-                        currencies = model.getCurrencies(),
+                        currencies = currencies,
                         getAmount = model::createAmount,
                         onAmountChosen = { amount ->
                             val u = Uri.parse(uri)
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]