[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-android] branch master updated (f94169a -> ab77084)
From: |
gnunet |
Subject: |
[taler-taler-android] branch master updated (f94169a -> ab77084) |
Date: |
Tue, 03 Jan 2023 16:43:37 +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 f94169a [cashier] Fix some lint warnings
new 5764a5c [wallet] Add share button to Peer-Push (and adapt to new API)
new ab77084 [wallet] Add share button to Peer-Pull (and adapt to new API)
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:
.../java/net/taler/wallet/ReceiveFundsFragment.kt | 1 +
.../java/net/taler/wallet/SendFundsFragment.kt | 1 +
wallet/src/main/java/net/taler/wallet/Utils.kt | 12 ----
.../taler/wallet/compose/QrCodeUriComposable.kt | 45 +++++++++++---
.../java/net/taler/wallet/compose/ShareButton.kt | 71 ++++++++++++++++++++++
.../main/java/net/taler/wallet/compose/Utils.kt | 11 ++++
.../net/taler/wallet/deposit/DepositFragment.kt | 2 +-
.../net/taler/wallet/deposit/PayToUriFragment.kt | 2 +-
.../wallet/peer/IncomingPullPaymentFragment.kt | 2 +-
.../wallet/peer/IncomingPushPaymentFragment.kt | 2 +-
.../net/taler/wallet/peer/OutgoingPullFragment.kt | 2 +-
.../wallet/peer/OutgoingPullResultComposable.kt | 63 ++++---------------
.../net/taler/wallet/peer/OutgoingPushFragment.kt | 2 +-
.../wallet/peer/OutgoingPushResultComposable.kt | 63 ++++---------------
.../main/java/net/taler/wallet/peer/PeerManager.kt | 11 +++-
.../taler/wallet/peer/TransactionPeerPullCredit.kt | 2 +-
.../taler/wallet/peer/TransactionPeerPushDebit.kt | 2 +-
.../transactions/TransactionDepositFragment.kt | 2 +-
.../wallet/transactions/TransactionPeerFragment.kt | 2 +-
.../manual/ManualWithdrawSuccessFragment.kt | 2 +-
20 files changed, 166 insertions(+), 134 deletions(-)
create mode 100644 wallet/src/main/java/net/taler/wallet/compose/ShareButton.kt
diff --git a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
index 8ae96ad..ac6b0bd 100644
--- a/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/ReceiveFundsFragment.kt
@@ -56,6 +56,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import net.taler.common.Amount
import net.taler.common.Amount.Companion.isValidAmountStr
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.exchanges.ExchangeItem
class ReceiveFundsFragment : Fragment() {
diff --git a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
index c5348a3..90b4ee0 100644
--- a/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/SendFundsFragment.kt
@@ -53,6 +53,7 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import net.taler.common.Amount
import net.taler.common.Amount.Companion.isValidAmountStr
+import net.taler.wallet.compose.TalerSurface
class SendFundsFragment : Fragment() {
private val model: MainViewModel by activityViewModels()
diff --git a/wallet/src/main/java/net/taler/wallet/Utils.kt
b/wallet/src/main/java/net/taler/wallet/Utils.kt
index 5679f21..7edc694 100644
--- a/wallet/src/main/java/net/taler/wallet/Utils.kt
+++ b/wallet/src/main/java/net/taler/wallet/Utils.kt
@@ -28,10 +28,7 @@ import android.os.Build.VERSION.SDK_INT
import android.widget.Toast
import android.widget.Toast.LENGTH_LONG
import androidx.annotation.RequiresApi
-import androidx.compose.material.Surface
-import androidx.compose.runtime.Composable
import androidx.core.content.getSystemService
-import com.google.accompanist.themeadapter.material.MdcTheme
import net.taler.common.Amount
import net.taler.common.AmountParserException
@@ -88,15 +85,6 @@ private fun connectToWifiDeprecated(context: Context, ssid:
String) {
}
}
-@Composable
-fun TalerSurface(content: @Composable () -> Unit) {
- MdcTheme {
- Surface {
- content()
- }
- }
-}
-
fun cleanExchange(exchange: String) = exchange.let {
if (it.startsWith("https://", ignoreCase = true)) it.substring(8) else it
}.trimEnd('/')
diff --git
a/wallet/src/main/java/net/taler/wallet/compose/QrCodeUriComposable.kt
b/wallet/src/main/java/net/taler/wallet/compose/QrCodeUriComposable.kt
index 3f8ecd1..5359f1a 100644
--- a/wallet/src/main/java/net/taler/wallet/compose/QrCodeUriComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/compose/QrCodeUriComposable.kt
@@ -21,13 +21,17 @@ import android.content.ClipboardManager
import android.content.Context
import androidx.compose.foundation.Image
import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.Button
+import androidx.compose.material.ButtonColors
+import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
@@ -36,11 +40,13 @@ import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.runtime.Composable
import androidx.compose.runtime.produceState
import androidx.compose.ui.Alignment
+import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.ImageBitmap
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.Dp
@@ -58,12 +64,18 @@ fun ColumnScope.QrCodeUriComposable(
inBetween: (@Composable ColumnScope.() -> Unit)? = null,
) {
val qrCodeSize = getQrCodeSize()
- val qrState = produceState<ImageBitmap?>(null) {
+ val qrPlaceHolder = if (LocalInspectionMode.current) {
+ QrCodeManager.makeQrCode(talerUri,
qrCodeSize.value.toInt()).asImageBitmap()
+ } else null
+ val qrState = produceState(qrPlaceHolder) {
value = QrCodeManager.makeQrCode(talerUri,
qrCodeSize.value.toInt()).asImageBitmap()
}
qrState.value?.let { qrCode ->
Image(
- modifier = Modifier.size(qrCodeSize),
+ modifier = Modifier
+ .size(qrCodeSize)
+ .align(CenterHorizontally)
+ .padding(vertical = 8.dp),
bitmap = qrCode,
contentDescription = stringResource(id =
R.string.button_scan_qr_code),
)
@@ -78,12 +90,23 @@ fun ColumnScope.QrCodeUriComposable(
text = talerUri,
)
}
- CopyToClipboardButton(
- modifier = Modifier,
- label = clipBoardLabel,
- content = talerUri,
- buttonText = buttonText,
- )
+ Row(
+ modifier = Modifier
+ .padding(horizontal = 16.dp)
+ .fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceEvenly,
+ ) {
+ CopyToClipboardButton(
+ label = clipBoardLabel,
+ content = talerUri,
+ buttonText = buttonText,
+ colors = ButtonDefaults.buttonColors(backgroundColor =
Color.Transparent)
+ )
+ ShareButton(
+ content = talerUri,
+ colors = ButtonDefaults.buttonColors(backgroundColor =
Color.Transparent)
+ )
+ }
}
@Composable
@@ -100,14 +123,16 @@ fun CopyToClipboardButton(
content: String,
modifier: Modifier = Modifier,
buttonText: String = stringResource(R.string.copy),
+ colors: ButtonColors = ButtonDefaults.buttonColors(),
) {
val context = LocalContext.current
Button(
modifier = modifier,
+ colors = colors,
onClick = { copyToClipBoard(context, label, content) },
) {
Row(verticalAlignment = Alignment.CenterVertically) {
- Icon(Icons.Default.ContentCopy, stringResource(R.string.copy))
+ Icon(Icons.Default.ContentCopy, buttonText)
Text(
modifier = Modifier.padding(start = 8.dp),
text = buttonText,
diff --git a/wallet/src/main/java/net/taler/wallet/compose/ShareButton.kt
b/wallet/src/main/java/net/taler/wallet/compose/ShareButton.kt
new file mode 100644
index 0000000..0ac7048
--- /dev/null
+++ b/wallet/src/main/java/net/taler/wallet/compose/ShareButton.kt
@@ -0,0 +1,71 @@
+/*
+ * This file is part of GNU Taler
+ * (C) 2023 Taler Systems S.A.
+ *
+ * GNU Taler is free software; you can redistribute it and/or modify it under
the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 3, or (at your option) any later version.
+ *
+ * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR
+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+package net.taler.wallet.compose
+
+import android.content.Intent
+import android.content.Intent.ACTION_SEND
+import android.content.Intent.EXTRA_TEXT
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonColors
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Icon
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Share
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment.Companion.CenterVertically
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.core.content.ContextCompat.startActivity
+import net.taler.wallet.R
+
+@Composable
+fun ShareButton(
+ content: String,
+ modifier: Modifier = Modifier,
+ buttonText: String = stringResource(R.string.share),
+ colors: ButtonColors = ButtonDefaults.buttonColors(),
+) {
+ val context = LocalContext.current
+ Button(
+ modifier = modifier,
+ colors = colors,
+ onClick = {
+ val sendIntent: Intent = Intent().apply {
+ action = ACTION_SEND
+ putExtra(EXTRA_TEXT, content)
+ type = "text/plain"
+ }
+ val shareIntent = Intent.createChooser(sendIntent, null)
+ startActivity(context, shareIntent, null)
+ },
+ ) {
+ Row(verticalAlignment = CenterVertically) {
+ Icon(Icons.Default.Share, buttonText)
+ Text(
+ modifier = Modifier.padding(start = 8.dp),
+ text = buttonText,
+ style = MaterialTheme.typography.body1,
+ )
+ }
+ }
+}
diff --git a/wallet/src/main/java/net/taler/wallet/compose/Utils.kt
b/wallet/src/main/java/net/taler/wallet/compose/Utils.kt
index 21b04ed..8e3a032 100644
--- a/wallet/src/main/java/net/taler/wallet/compose/Utils.kt
+++ b/wallet/src/main/java/net/taler/wallet/compose/Utils.kt
@@ -16,6 +16,7 @@
package net.taler.wallet.compose
+import androidx.compose.material.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
@@ -24,6 +25,7 @@ import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.flowWithLifecycle
+import com.google.accompanist.themeadapter.material.MdcTheme
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import kotlin.coroutines.CoroutineContext
@@ -51,3 +53,12 @@ fun <T : R, R> Flow<T>.collectAsStateLifecycleAware(
fun <T> StateFlow<T>.collectAsStateLifecycleAware(
context: CoroutineContext = EmptyCoroutineContext,
): State<T> = collectAsStateLifecycleAware(initial = value, context = context)
+
+@Composable
+fun TalerSurface(content: @Composable () -> Unit) {
+ MdcTheme {
+ Surface {
+ content()
+ }
+ }
+}
diff --git a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
index 1486f08..5d209ac 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/DepositFragment.kt
@@ -57,7 +57,7 @@ import net.taler.common.Amount
import net.taler.common.showError
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.collectAsStateLifecycleAware
class DepositFragment : Fragment() {
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 af43749..47e8cfb 100644
--- a/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/deposit/PayToUriFragment.kt
@@ -66,7 +66,7 @@ import net.taler.common.Amount
import net.taler.wallet.AmountResult
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
class PayToUriFragment : Fragment() {
private val model: MainViewModel by activityViewModels()
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
b/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
index c5c41d7..6a74c30 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/IncomingPullPaymentFragment.kt
@@ -27,7 +27,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.collectAsStateLifecycleAware
class IncomingPullPaymentFragment : Fragment() {
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
index c0fbad9..56734e3 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/IncomingPushPaymentFragment.kt
@@ -27,7 +27,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.collectAsStateLifecycleAware
class IncomingPushPaymentFragment : Fragment() {
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
index 8a226b3..b9634d5 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullFragment.kt
@@ -27,7 +27,7 @@ import androidx.navigation.findNavController
import net.taler.common.Amount
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.collectAsStateLifecycleAware
import net.taler.wallet.exchanges.ExchangeItem
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullResultComposable.kt
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullResultComposable.kt
index 2c4001f..72cf571 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullResultComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPullResultComposable.kt
@@ -17,11 +17,8 @@
package net.taler.wallet.peer
import android.content.res.Configuration.UI_MODE_NIGHT_YES
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
-import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -29,28 +26,21 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.CircularProgressIndicator
-import androidx.compose.material.Icon
-import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.asImageBitmap
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import net.taler.common.QrCodeManager
import net.taler.wallet.R
import net.taler.wallet.backend.TalerErrorInfo
-import net.taler.wallet.compose.copyToClipBoard
+import net.taler.wallet.compose.QrCodeUriComposable
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.getQrCodeSize
import org.json.JSONObject
@@ -95,42 +85,15 @@ private fun ColumnScope.PeerPullCreatingComposable() {
@Composable
private fun ColumnScope.PeerPullResponseComposable(state: OutgoingResponse) {
- val qrCodeSize = getQrCodeSize()
- Image(
- modifier = Modifier
- .size(qrCodeSize)
- .align(CenterHorizontally),
- bitmap = state.qrCode.asImageBitmap(),
- contentDescription = stringResource(id = R.string.button_scan_qr_code),
- )
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = MaterialTheme.typography.body1,
- text = stringResource(id = R.string.receive_peer_invoice_uri),
- )
- val scrollState = rememberScrollState()
- Text(
- modifier = Modifier
- .horizontalScroll(scrollState)
- .padding(16.dp),
- fontFamily = FontFamily.Monospace,
- style = MaterialTheme.typography.body1,
- text = state.talerUri,
- )
- val context = LocalContext.current
- IconButton(
- modifier = Modifier
- .align(CenterHorizontally),
- onClick = { copyToClipBoard(context, "Invoice", state.talerUri) },
+ QrCodeUriComposable(
+ talerUri = state.talerUri,
+ clipBoardLabel = "Invoice",
) {
- Row(verticalAlignment = Alignment.CenterVertically) {
- Icon(Icons.Default.ContentCopy, stringResource(R.string.copy))
- Text(
- modifier = Modifier.padding(start = 8.dp),
- text = stringResource(R.string.copy),
- style = MaterialTheme.typography.body1,
- )
- }
+ Text(
+ modifier = Modifier.padding(horizontal = 16.dp),
+ style = MaterialTheme.typography.body1,
+ text = stringResource(id = R.string.receive_peer_invoice_uri),
+ )
}
}
@@ -154,10 +117,10 @@ fun PeerPullCreatingPreview() {
}
}
-@Preview
+@Preview(uiMode = UI_MODE_NIGHT_YES)
@Composable
fun PeerPullResponsePreview() {
- Surface {
+ TalerSurface {
val talerUri =
"https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen"
val response = OutgoingResponse(talerUri,
QrCodeManager.makeQrCode(talerUri))
OutgoingPullResultComposable(response) {}
@@ -167,7 +130,7 @@ fun PeerPullResponsePreview() {
@Preview(widthDp = 720, uiMode = UI_MODE_NIGHT_YES)
@Composable
fun PeerPullResponseLandscapePreview() {
- Surface {
+ TalerSurface {
val talerUri =
"https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen"
val response = OutgoingResponse(talerUri,
QrCodeManager.makeQrCode(talerUri))
OutgoingPullResultComposable(response) {}
diff --git a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
index c9b3a78..b110876 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushFragment.kt
@@ -27,7 +27,7 @@ import androidx.navigation.findNavController
import net.taler.common.Amount
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.collectAsStateLifecycleAware
class OutgoingPushFragment : Fragment() {
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushResultComposable.kt
b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushResultComposable.kt
index 6d8b5dc..5afac59 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushResultComposable.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/OutgoingPushResultComposable.kt
@@ -17,11 +17,8 @@
package net.taler.wallet.peer
import android.content.res.Configuration.UI_MODE_NIGHT_YES
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
-import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -29,28 +26,21 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.CircularProgressIndicator
-import androidx.compose.material.Icon
-import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.asImageBitmap
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import net.taler.common.QrCodeManager
import net.taler.wallet.R
import net.taler.wallet.backend.TalerErrorInfo
-import net.taler.wallet.compose.copyToClipBoard
+import net.taler.wallet.compose.QrCodeUriComposable
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.compose.getQrCodeSize
import org.json.JSONObject
@@ -95,42 +85,15 @@ private fun ColumnScope.PeerPushCreatingComposable() {
@Composable
private fun ColumnScope.PeerPushResponseComposable(state: OutgoingResponse) {
- val qrCodeSize = getQrCodeSize()
- Image(
- modifier = Modifier
- .size(qrCodeSize)
- .align(CenterHorizontally),
- bitmap = state.qrCode.asImageBitmap(),
- contentDescription = stringResource(id = R.string.button_scan_qr_code),
- )
- Text(
- modifier = Modifier.padding(horizontal = 16.dp),
- style = MaterialTheme.typography.body1,
- text = stringResource(id = R.string.receive_peer_invoice_uri),
- )
- val scrollState = rememberScrollState()
- Text(
- modifier = Modifier
- .horizontalScroll(scrollState)
- .padding(16.dp),
- fontFamily = FontFamily.Monospace,
- style = MaterialTheme.typography.body1,
- text = state.talerUri,
- )
- val context = LocalContext.current
- IconButton(
- modifier = Modifier
- .align(CenterHorizontally),
- onClick = { copyToClipBoard(context, "Invoice", state.talerUri) },
+ QrCodeUriComposable(
+ talerUri = state.talerUri,
+ clipBoardLabel = "Invoice",
) {
- Row(verticalAlignment = Alignment.CenterVertically) {
- Icon(Icons.Default.ContentCopy, stringResource(R.string.copy))
- Text(
- modifier = Modifier.padding(start = 8.dp),
- text = stringResource(R.string.copy),
- style = MaterialTheme.typography.body1,
- )
- }
+ Text(
+ modifier = Modifier.padding(horizontal = 16.dp),
+ style = MaterialTheme.typography.body1,
+ text = stringResource(id = R.string.receive_peer_invoice_uri),
+ )
}
}
@@ -154,10 +117,10 @@ fun PeerPushCreatingPreview() {
}
}
-@Preview
+@Preview(uiMode = UI_MODE_NIGHT_YES)
@Composable
fun PeerPushResponsePreview() {
- Surface {
+ TalerSurface {
val talerUri =
"https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen"
val response = OutgoingResponse(talerUri,
QrCodeManager.makeQrCode(talerUri))
OutgoingPushResultComposable(response) {}
@@ -167,7 +130,7 @@ fun PeerPushResponsePreview() {
@Preview(widthDp = 720, uiMode = UI_MODE_NIGHT_YES)
@Composable
fun PeerPushResponseLandscapePreview() {
- Surface {
+ TalerSurface {
val talerUri =
"https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen"
val response = OutgoingResponse(talerUri,
QrCodeManager.makeQrCode(talerUri))
OutgoingPushResultComposable(response) {}
diff --git a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
index 1e53e7c..e49f368 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
@@ -22,12 +22,16 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
+import kotlinx.serialization.encodeToString
+import kotlinx.serialization.json.Json
import net.taler.common.Amount
import net.taler.common.QrCodeManager
+import net.taler.common.Timestamp
import net.taler.wallet.TAG
import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.exchanges.ExchangeItem
import org.json.JSONObject
+import java.util.concurrent.TimeUnit.DAYS
class PeerManager(
private val api: WalletBackendApi,
@@ -49,11 +53,13 @@ class PeerManager(
fun initiatePullPayment(amount: Amount, summary: String, exchange:
ExchangeItem) {
_outgoingPullState.value = OutgoingCreating
scope.launch(Dispatchers.IO) {
+ val expiry = Timestamp.fromMillis(System.currentTimeMillis() +
DAYS.toMillis(3))
api.request("initiatePeerPullPayment",
InitiatePeerPullPaymentResponse.serializer()) {
put("exchangeBaseUrl", exchange.exchangeBaseUrl)
- put("amount", amount.toJSONString())
put("partialContractTerms", JSONObject().apply {
+ put("amount", amount.toJSONString())
put("summary", summary)
+ put("purse_expiration",
JSONObject(Json.encodeToString(expiry)))
})
}.onSuccess {
val qrCode = QrCodeManager.makeQrCode(it.talerUri)
@@ -72,10 +78,13 @@ class PeerManager(
fun initiatePeerPushPayment(amount: Amount, summary: String) {
_outgoingPushState.value = OutgoingCreating
scope.launch(Dispatchers.IO) {
+ val expiry = Timestamp.fromMillis(System.currentTimeMillis() +
DAYS.toMillis(3))
api.request("initiatePeerPushPayment",
InitiatePeerPushPaymentResponse.serializer()) {
put("amount", amount.toJSONString())
put("partialContractTerms", JSONObject().apply {
+ put("amount", amount.toJSONString())
put("summary", summary)
+ put("purse_expiration",
JSONObject(Json.encodeToString(expiry)))
})
}.onSuccess { response ->
val qrCode = QrCodeManager.makeQrCode(response.talerUri)
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
index 02b3774..92264c7 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPullCredit.kt
@@ -65,7 +65,7 @@ fun ColumnScope.TransactionPeerPullCreditComposable(t:
TransactionPeerPullCredit
QrCodeUriComposable(
talerUri = t.talerUri,
clipBoardLabel = "Invoice",
- buttonText = stringResource(id = R.string.copy_uri),
+ buttonText = stringResource(id = R.string.copy),
) {
Text(
modifier = Modifier.padding(horizontal = 16.dp),
diff --git
a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
index f068fb8..88c27fe 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/TransactionPeerPushDebit.kt
@@ -64,7 +64,7 @@ fun ColumnScope.TransactionPeerPushDebitComposable(t:
TransactionPeerPushDebit)
QrCodeUriComposable(
talerUri = t.talerUri,
clipBoardLabel = "Push payment",
- buttonText = stringResource(id = R.string.copy_uri),
+ buttonText = stringResource(id = R.string.copy),
) {
Text(
modifier = Modifier.padding(horizontal = 16.dp),
diff --git
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
index 0162502..60f9b20 100644
---
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
+++
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDepositFragment.kt
@@ -21,7 +21,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.deposit.TransactionDepositComposable
class TransactionDepositFragment : TransactionDetailFragment() {
diff --git
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
index 52d6095..b7c347f 100644
---
a/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
+++
b/wallet/src/main/java/net/taler/wallet/transactions/TransactionPeerFragment.kt
@@ -39,7 +39,7 @@ import androidx.compose.ui.unit.sp
import net.taler.common.Amount
import net.taler.common.toAbsoluteTime
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.peer.TransactionPeerPullCreditComposable
import net.taler.wallet.peer.TransactionPeerPullDebitComposable
import net.taler.wallet.peer.TransactionPeerPushCreditComposable
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 89ad08b..787a0b0 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
@@ -28,7 +28,7 @@ import androidx.navigation.fragment.findNavController
import net.taler.common.startActivitySafe
import net.taler.wallet.MainViewModel
import net.taler.wallet.R
-import net.taler.wallet.TalerSurface
+import net.taler.wallet.compose.TalerSurface
import net.taler.wallet.withdraw.WithdrawStatus
class ManualWithdrawSuccessFragment : Fragment() {
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-taler-android] branch master updated (f94169a -> ab77084),
gnunet <=