[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.
- [taler-taler-android] branch master updated (63158f57 -> 3deed262),
gnunet <=