aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2023-01-03 12:41:07 -0300
committerTorsten Grote <t@grobox.de>2023-01-03 12:41:07 -0300
commitab77084575b76f9cbd517ff5817a2a5655133136 (patch)
tree3b97f8c3ea4dfcdd42bf36f6ab7e1541dde6bd7f
parent5764a5c9228cf25662da697668a246fc3a4eedeb (diff)
downloadtaler-android-ab77084575b76f9cbd517ff5817a2a5655133136.tar.gz
taler-android-ab77084575b76f9cbd517ff5817a2a5655133136.tar.bz2
taler-android-ab77084575b76f9cbd517ff5817a2a5655133136.zip
[wallet] Add share button to Peer-Pull (and adapt to new API)
#0007471
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/OutgoingPullResultComposable.kt63
-rw-r--r--wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt2
2 files changed, 15 insertions, 50 deletions
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/PeerManager.kt b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
index 5f26119..e49f368 100644
--- a/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/peer/PeerManager.kt
@@ -53,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("partialContractTerms", JSONObject().apply {
put("amount", amount.toJSONString())
put("summary", summary)
+ put("purse_expiration", JSONObject(Json.encodeToString(expiry)))
})
}.onSuccess {
val qrCode = QrCodeManager.makeQrCode(it.talerUri)