From 5764a5c9228cf25662da697668a246fc3a4eedeb Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 3 Jan 2023 12:35:33 -0300 Subject: [wallet] Add share button to Peer-Push (and adapt to new API) #0007471 --- .../wallet/peer/IncomingPullPaymentFragment.kt | 2 +- .../wallet/peer/IncomingPushPaymentFragment.kt | 2 +- .../net/taler/wallet/peer/OutgoingPullFragment.kt | 2 +- .../net/taler/wallet/peer/OutgoingPushFragment.kt | 2 +- .../wallet/peer/OutgoingPushResultComposable.kt | 63 +++++----------------- .../main/java/net/taler/wallet/peer/PeerManager.kt | 9 +++- .../taler/wallet/peer/TransactionPeerPullCredit.kt | 2 +- .../taler/wallet/peer/TransactionPeerPushDebit.kt | 2 +- 8 files changed, 27 insertions(+), 57 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet/peer') 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/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..5f26119 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, @@ -51,8 +55,8 @@ class PeerManager( scope.launch(Dispatchers.IO) { api.request("initiatePeerPullPayment", InitiatePeerPullPaymentResponse.serializer()) { put("exchangeBaseUrl", exchange.exchangeBaseUrl) - put("amount", amount.toJSONString()) put("partialContractTerms", JSONObject().apply { + put("amount", amount.toJSONString()) put("summary", summary) }) }.onSuccess { @@ -72,10 +76,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), -- cgit v1.2.3