diff options
author | Torsten Grote <t@grobox.de> | 2022-09-07 16:28:04 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2022-09-07 16:44:16 -0300 |
commit | e350d497abe560aeeef88081ae93d73135ece00f (patch) | |
tree | 0d13269331b16875e56fbafb8af8f9bdf3cfba77 /wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt | |
parent | 6876951cb30f057a852937a533d5d51d26645680 (diff) | |
download | taler-android-e350d497abe560aeeef88081ae93d73135ece00f.tar.gz taler-android-e350d497abe560aeeef88081ae93d73135ece00f.tar.bz2 taler-android-e350d497abe560aeeef88081ae93d73135ece00f.zip |
[wallet] implement prototype for handling incoming pay-pull URI
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt b/wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt deleted file mode 100644 index d37ca4b..0000000 --- a/wallet/src/main/java/net/taler/wallet/peer/PeerPullResultComposable.kt +++ /dev/null @@ -1,185 +0,0 @@ -/* - * This file is part of GNU Taler - * (C) 2022 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.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 -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.getQrCodeSize -import org.json.JSONObject - -@Composable -fun PeerPullResultComposable(state: PeerOutgoingState, onClose: () -> Unit) { - val scrollState = rememberScrollState() - Column( - modifier = Modifier - .fillMaxWidth() - .verticalScroll(scrollState), - ) { - Text( - modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp), - style = MaterialTheme.typography.h6, - text = stringResource(id = R.string.receive_peer_invoice_instruction), - ) - when (state) { - PeerOutgoingIntro -> error("Result composable with PullPaymentIntro") - is PeerOutgoingCreating -> PeerPullCreatingComposable() - is PeerOutgoingResponse -> PeerPullResponseComposable(state) - is PeerOutgoingError -> PeerPullErrorComposable(state) - } - Button(modifier = Modifier - .padding(16.dp) - .align(CenterHorizontally), - onClick = onClose) { - Text(text = stringResource(R.string.close)) - } - } -} - -@Composable -private fun ColumnScope.PeerPullCreatingComposable() { - val qrCodeSize = getQrCodeSize() - CircularProgressIndicator( - modifier = Modifier - .padding(32.dp) - .size(qrCodeSize) - .align(CenterHorizontally), - ) -} - -@Composable -private fun ColumnScope.PeerPullResponseComposable(state: PeerOutgoingResponse) { - 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) }, - ) { - 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, - ) - } - } -} - -@Composable -private fun ColumnScope.PeerPullErrorComposable(state: PeerOutgoingError) { - Text( - modifier = Modifier - .align(CenterHorizontally) - .padding(16.dp), - color = colorResource(R.color.red), - style = MaterialTheme.typography.body1, - text = state.info.userFacingMsg, - ) -} - -@Preview -@Composable -fun PeerPullCreatingPreview() { - Surface { - PeerPullResultComposable(PeerOutgoingCreating) {} - } -} - -@Preview -@Composable -fun PeerPullResponsePreview() { - Surface { - val talerUri = "https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen" - val response = PeerOutgoingResponse(talerUri, QrCodeManager.makeQrCode(talerUri)) - PeerPullResultComposable(response) {} - } -} - -@Preview(widthDp = 720, uiMode = UI_MODE_NIGHT_YES) -@Composable -fun PeerPullResponseLandscapePreview() { - Surface { - val talerUri = "https://example.org/foo/bar/can/be/very/long/url/so/fit/it/on/screen" - val response = PeerOutgoingResponse(talerUri, QrCodeManager.makeQrCode(talerUri)) - PeerPullResultComposable(response) {} - } -} - -@Preview -@Composable -fun PeerPullErrorPreview() { - Surface { - val json = JSONObject().apply { put("foo", "bar") } - val response = PeerOutgoingError(TalerErrorInfo(42, "hint", "message", json)) - PeerPullResultComposable(response) {} - } -} |