From 985771beba9362b124e069896ea449a9419a0e3e Mon Sep 17 00:00:00 2001 From: Believethehype Date: Wed, 28 Jun 2023 11:49:14 +0200 Subject: [PATCH 1/2] Add copy button to Cashu Rendering, better default error message --- .../amethyst/service/CashuProcessor.kt | 5 +- .../amethyst/ui/components/CashuRedeem.kt | 72 ++++++++++++++----- 2 files changed, 57 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/CashuProcessor.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/CashuProcessor.kt index 14c88a39b..536cc6a0c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/CashuProcessor.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/CashuProcessor.kt @@ -14,6 +14,7 @@ import java.util.Base64 @Immutable data class CashuToken( + val token: String, val mint: String, val totalAmount: Long, val fees: Int, @@ -37,7 +38,7 @@ class CashuProcessor { val fees = Math.max(((totalAmount * 0.02).toInt()), 2) val redeemInvoiceAmount = totalAmount - fees - return GenericLoadable.Loaded(CashuToken(mint, totalAmount, fees, redeemInvoiceAmount, proofs)) + return GenericLoadable.Loaded(CashuToken(cashuToken, mint, totalAmount, fees, redeemInvoiceAmount, proofs)) } catch (e: Exception) { return GenericLoadable.Error("Could not parse this cashu token") } @@ -84,7 +85,7 @@ class CashuProcessor { if (successful) { onSuccess("Redeemed ${token.totalAmount} Sats" + " (Fees: ${token.fees} Sats)") } else { - onError(tree?.get("detail")?.asText()?.split('.')?.getOrNull(0) ?: "Error") + onError(tree?.get("detail")?.asText()?.split('.')?.getOrNull(0) ?: "Cashu: Tokens already spent.") } } catch (e: Exception) { onError("Token melt failure: " + e.message) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/CashuRedeem.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/CashuRedeem.kt index afe48697c..7b4144baa 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/CashuRedeem.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/CashuRedeem.kt @@ -16,9 +16,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDirection import androidx.compose.ui.unit.dp @@ -67,6 +69,7 @@ fun CashuPreview(token: CashuToken, accountViewModel: AccountViewModel) { val useWebService = false val context = LocalContext.current val scope = rememberCoroutineScope() + val clipboardManager = LocalClipboardManager.current Column( modifier = Modifier @@ -114,17 +117,17 @@ fun CashuPreview(token: CashuToken, accountViewModel: AccountViewModel) { ) } - Button( + Row( + modifier = Modifier .fillMaxWidth() - .padding(vertical = 10.dp), - onClick = { - // Just in case we want to use a webservice instead of directly contacting the mint - if (useWebService) { - val url = "https://redeem.cashu.me?token=$token&lightning=$lud16&autopay=true" - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) - startActivity(context, intent, null) - } else { + .padding(bottom = 10.dp) + ) { + Button( + + modifier = Modifier + .padding(vertical = 10.dp).padding(horizontal = 2.dp), + onClick = { if (lud16 != null) { CashuProcessor().melt( token, @@ -142,17 +145,50 @@ fun CashuPreview(token: CashuToken, accountViewModel: AccountViewModel) { ) } else { scope.launch { - Toast.makeText(context, "No Lightning Address set", Toast.LENGTH_SHORT).show() + Toast.makeText( + context, + "No Lightning Address set", + Toast.LENGTH_SHORT + ).show() } } - } - }, - shape = QuoteBorder, - colors = ButtonDefaults.buttonColors( - backgroundColor = MaterialTheme.colors.primary - ) - ) { - Text(stringResource(R.string.cashu_redeem), color = Color.White, fontSize = 20.sp) + }, + shape = QuoteBorder, + colors = ButtonDefaults.buttonColors( + backgroundColor = MaterialTheme.colors.primary + ) + ) { + Text( + stringResource(R.string.cashu_redeem), + color = Color.White, + fontSize = 18.sp + ) + } + Button( + modifier = Modifier + .padding(vertical = 10.dp).padding(horizontal = 1.dp), + onClick = { + if (useWebService) { + // In case we want to use the cashu.me webservice + val url = "https://redeem.cashu.me?token=$token&lightning=$lud16&autopay=false" + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + startActivity(context, intent, null) + } else { + // Copying the token to clipboard for now + var orignaltoken = token.token + clipboardManager.setText(AnnotatedString("$orignaltoken")) + scope.launch { + Toast.makeText(context, "Copied token to clipboard", Toast.LENGTH_SHORT).show() + } + } + }, + shape = QuoteBorder, + colors = ButtonDefaults.buttonColors( + backgroundColor = MaterialTheme.colors.primary + ) + ) { + Text("⎘", color = Color.White, fontSize = 18.sp) + } } } } From 3a70ce158727b28f95067255299a06f18de657e4 Mon Sep 17 00:00:00 2001 From: Zoltan <34719275+ZsZolee@users.noreply.github.com> Date: Wed, 28 Jun 2023 16:52:39 +0200 Subject: [PATCH 2/2] Additional Hungarian translation --- app/src/main/res/values-hu/strings.xml | 36 +++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index cfd733a01..8ef1dbea9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -391,7 +391,7 @@ Az érzékeny tartalmat mindig rejtse el Az érzékeny tartalmat mindig jelenítse meg A tartalomra vonatkozó figyelmeztetéseket mindig jelenítse meg - + Ajánlottak: Idegenektől SPAM szűrése Figyelmeztessen ha a bejegyzések azok által akiket követek jelentve vannak @@ -406,4 +406,38 @@ A ZapGyűjtés %1$s-nál. %2$s sats kell a célig Olvassás a csomópontból Írás a csomópontra + Hiba történt a csomópont információ szerzés közben a %1$s -tól + Tulajdonos + Verzió + Szoftver + Kapcsolat + Támogatott NIP-ek + Csatlakozás díja + Fizetési cím + Korlátok + Országok + Nyelvek + Címkék + Szabályzat + Üzenet hossza + Feliratkozások + Filterek + Feliratkozás azonosítójának hossza + Minimális előtag + Maximális eseménycímkék + Tartalom hossza + Minimális PoW + Azonosítás + Fizetés + Cashu Token + Beváltás + + ÉLŐ + OFFLINE + VÉGE + ÜTEMEZETT + + Az élő közvetítés offline + Az élő közvetítésnek vége + A Kijelentkezés minden helyben tárolt információt töröl. Bizonyosodj meg róla, hogy a privát kulcsod le van mentve, ezzel elkerülve a fiókod elvesztését. Folytatni akarod?