gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]