refactor: i18n ReceiveStrings
This commit is contained in:
@@ -56,63 +56,6 @@ val EnHomeStrings = AppStrings(
|
||||
enterValidAmount = "Enter a valid amount",
|
||||
satsUnit = { sats -> "$sats sats" },
|
||||
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Receive",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Error",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Lightning address QR code",
|
||||
lightningAddressLabel = "Lightning Address",
|
||||
shareLightningAddress = "Share Lightning Address",
|
||||
lightningInvoiceQrCode = "Lightning invoice QR code",
|
||||
invoiceLabel = "Invoice",
|
||||
shareInvoice = "Share Invoice",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Amount (sats)",
|
||||
satsRange = { min, max -> "$min – $max sats" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Memo (optional)",
|
||||
memoPlaceholder = "What's this for?",
|
||||
creatingInvoice = "Creating invoice…",
|
||||
createInvoice = "Create Invoice",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Waiting…",
|
||||
invoiceExpired = "Invoice expired",
|
||||
newInvoice = "New Invoice",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Withdraw from",
|
||||
minimumSats = { min -> "Minimum is $min sats" },
|
||||
maximumSats = { max -> "Maximum is $max sats" },
|
||||
withdrawButton = "Withdraw",
|
||||
withdrawButtonAmount = { amount -> "Withdraw $amount sats" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "Payment Received!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reduce brightness",
|
||||
brightnessBoost = "Boost brightness",
|
||||
qrShare = "Share",
|
||||
qrCopy = "Copy",
|
||||
qrNfcStop = "Stop NFC sharing",
|
||||
qrNfcStart = "Share via NFC",
|
||||
openInApp = "Open in app",
|
||||
noAppFound = "No compatible app found",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "Failed to create invoice",
|
||||
receiveVmWithdrawRejected = "Withdraw service rejected the invoice",
|
||||
receiveVmWithdrawFailed = "Withdraw failed",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
send = "Send",
|
||||
paste = "Paste",
|
||||
@@ -327,6 +270,7 @@ val EnHomeStrings = AppStrings(
|
||||
hideAdminKey = "Hide",
|
||||
showAdminKey = "Show",
|
||||
fieldsRequired = "All fields are required.",
|
||||
invalidKeyFormat = "Invalid key format",
|
||||
connect = "Connect",
|
||||
notificationsTitle = "Stay in the loop",
|
||||
notificationsSubtitle = "Get notified instantly when you receive a payment.",
|
||||
@@ -356,6 +300,65 @@ val EnHomeStrings = AppStrings(
|
||||
cancel = "Cancel"
|
||||
),
|
||||
|
||||
receive = ReceiveStrings(
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Receive",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Error",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Lightning address QR code",
|
||||
lightningAddressLabel = "Lightning Address",
|
||||
shareLightningAddress = "Share Lightning Address",
|
||||
lightningInvoiceQrCode = "Lightning invoice QR code",
|
||||
invoiceLabel = "Invoice",
|
||||
shareInvoice = "Share Invoice",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Amount (sats)",
|
||||
satsRange = { min, max -> "$min – $max sats" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Memo (optional)",
|
||||
memoPlaceholder = "What's this for?",
|
||||
creatingInvoice = "Creating invoice…",
|
||||
createInvoice = "Create Invoice",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Waiting…",
|
||||
invoiceExpired = "Invoice expired",
|
||||
newInvoice = "New Invoice",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Withdraw from",
|
||||
minimumSats = { min -> "Minimum is $min sats" },
|
||||
maximumSats = { max -> "Maximum is $max sats" },
|
||||
withdrawButton = "Withdraw",
|
||||
withdrawButtonAmount = { amount -> "Withdraw $amount sats" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "Payment Received!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reduce brightness",
|
||||
brightnessBoost = "Boost brightness",
|
||||
qrShare = "Share",
|
||||
qrCopy = "Copy",
|
||||
qrNfcStop = "Stop NFC sharing",
|
||||
qrNfcStart = "Share via NFC",
|
||||
openInApp = "Open in app",
|
||||
noAppFound = "No compatible app found",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "Failed to create invoice",
|
||||
receiveVmWithdrawRejected = "Withdraw service rejected the invoice",
|
||||
receiveVmWithdrawFailed = "Withdraw failed",
|
||||
),
|
||||
|
||||
nwc = NwcStrings(
|
||||
back = "Back",
|
||||
next = "Next",
|
||||
|
||||
@@ -56,63 +56,6 @@ val EsHomeStrings = AppStrings(
|
||||
enterValidAmount = "Introduce una cantidad válida",
|
||||
satsUnit = { sats -> "$sats sats" },
|
||||
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Recibir",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Error",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Código QR de dirección Lightning",
|
||||
lightningAddressLabel = "Dirección Lightning",
|
||||
shareLightningAddress = "Compartir dirección Lightning",
|
||||
lightningInvoiceQrCode = "Código QR de factura Lightning",
|
||||
invoiceLabel = "Factura",
|
||||
shareInvoice = "Compartir factura",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Cantidad (sats)",
|
||||
satsRange = { min, max -> "$min – $max sats" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Nota (opcional)",
|
||||
memoPlaceholder = "¿Para qué es esto?",
|
||||
creatingInvoice = "Creando factura…",
|
||||
createInvoice = "Crear factura",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Esperando…",
|
||||
invoiceExpired = "Factura expirada",
|
||||
newInvoice = "Nueva factura",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Retirar de",
|
||||
minimumSats = { min -> "Mínimo es $min sats" },
|
||||
maximumSats = { max -> "Máximo es $max sats" },
|
||||
withdrawButton = "Retirar",
|
||||
withdrawButtonAmount = { amount -> "Retirar $amount sats" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "¡Pago recibido!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reducir brillo",
|
||||
brightnessBoost = "Aumentar brillo",
|
||||
qrShare = "Compartir",
|
||||
qrCopy = "Copiar",
|
||||
qrNfcStop = "Detener NFC",
|
||||
qrNfcStart = "Compartir por NFC",
|
||||
openInApp = "Abrir en app",
|
||||
noAppFound = "No hay aplicación compatible",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "No se pudo crear la factura",
|
||||
receiveVmWithdrawRejected = "El servicio de retiro rechazó la factura",
|
||||
receiveVmWithdrawFailed = "Error al retirar",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
send = "Enviar",
|
||||
paste = "Pegar",
|
||||
@@ -328,6 +271,7 @@ val EsHomeStrings = AppStrings(
|
||||
hideAdminKey = "Ocultar",
|
||||
showAdminKey = "Mostrar",
|
||||
fieldsRequired = "Todos los campos son obligatorios.",
|
||||
invalidKeyFormat = "Formato de clave no válido",
|
||||
connect = "Conectar",
|
||||
notificationsTitle = "Mantente al día",
|
||||
notificationsSubtitle = "Recibe notificaciones al instante cuando recibas un pago.",
|
||||
@@ -357,6 +301,65 @@ val EsHomeStrings = AppStrings(
|
||||
cancel = "Cancelar"
|
||||
),
|
||||
|
||||
receive = ReceiveStrings(
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Recibir",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Error",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Código QR de dirección Lightning",
|
||||
lightningAddressLabel = "Dirección Lightning",
|
||||
shareLightningAddress = "Compartir dirección Lightning",
|
||||
lightningInvoiceQrCode = "Código QR de factura Lightning",
|
||||
invoiceLabel = "Factura",
|
||||
shareInvoice = "Compartir factura",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Cantidad (sats)",
|
||||
satsRange = { min, max -> "$min – $max sats" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Nota (opcional)",
|
||||
memoPlaceholder = "¿Para qué es esto?",
|
||||
creatingInvoice = "Creando factura…",
|
||||
createInvoice = "Crear factura",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Esperando…",
|
||||
invoiceExpired = "Factura expirada",
|
||||
newInvoice = "Nueva factura",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Retirar de",
|
||||
minimumSats = { min -> "Mínimo es $min sats" },
|
||||
maximumSats = { max -> "Máximo es $max sats" },
|
||||
withdrawButton = "Retirar",
|
||||
withdrawButtonAmount = { amount -> "Retirar $amount sats" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "¡Pago recibido!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount ${if (amount == 1L) "sat" else "sats"}" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Reducir brillo",
|
||||
brightnessBoost = "Aumentar brillo",
|
||||
qrShare = "Compartir",
|
||||
qrCopy = "Copiar",
|
||||
qrNfcStop = "Detener NFC",
|
||||
qrNfcStart = "Compartir por NFC",
|
||||
openInApp = "Abrir en app",
|
||||
noAppFound = "No hay aplicación compatible",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "No se pudo crear la factura",
|
||||
receiveVmWithdrawRejected = "El servicio de retiro rechazó la factura",
|
||||
receiveVmWithdrawFailed = "Error al retirar",
|
||||
),
|
||||
|
||||
nwc = NwcStrings(
|
||||
// ── Shared ────────────────────────────────────────────────────────────────
|
||||
back = "Atrás",
|
||||
|
||||
@@ -55,63 +55,6 @@ val EuStrings = AppStrings(
|
||||
enterValidAmount = "Sartu zenbateko baliogarri bat",
|
||||
satsUnit = { sats -> "$sats sat" },
|
||||
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Jaso",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Errorea",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Lightning helbidearen QR kodea",
|
||||
lightningAddressLabel = "Lightning helbidea",
|
||||
shareLightningAddress = "Partekatu Lightning helbidea",
|
||||
lightningInvoiceQrCode = "Lightning fakturaren QR kodea",
|
||||
invoiceLabel = "Faktura",
|
||||
shareInvoice = "Partekatu faktura",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Zenbatekoa (sat)",
|
||||
satsRange = { min, max -> "$min – $max sat" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Oharra (aukerakoa)",
|
||||
memoPlaceholder = "Zertarako da hau?",
|
||||
creatingInvoice = "Faktura sortzen…",
|
||||
createInvoice = "Sortu faktura",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Zain…",
|
||||
invoiceExpired = "Faktura iraungita",
|
||||
newInvoice = "Faktura berria",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Atera hemendik:",
|
||||
minimumSats = { min -> "Gutxienekoa $min sat da" },
|
||||
maximumSats = { max -> "Gehienekoa $max sat da" },
|
||||
withdrawButton = "Atera",
|
||||
withdrawButtonAmount = { amount -> "Atera $amount sat" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "Ordainketa jasota!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount sat" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Murriztu distira",
|
||||
brightnessBoost = "Handitu distira",
|
||||
qrShare = "Partekatu",
|
||||
qrCopy = "Kopiatu",
|
||||
qrNfcStop = "Gelditu NFC partekatzea",
|
||||
qrNfcStart = "Partekatu NFC bidez",
|
||||
openInApp = "Ireki aplikazioan",
|
||||
noAppFound = "Ez da aurkitu aplikazio bateragarririk",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "Ezin izan da faktura sortu",
|
||||
receiveVmWithdrawRejected = "Ateratzeko zerbitzuak faktura baztertu du",
|
||||
receiveVmWithdrawFailed = "Ateratzeak huts egin du",
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
send = "Bidali",
|
||||
paste = "Itsatsi",
|
||||
@@ -327,6 +270,7 @@ val EuStrings = AppStrings(
|
||||
hideAdminKey = "Ezkutatu",
|
||||
showAdminKey = "Erakutsi",
|
||||
fieldsRequired = "Eremu guztiak beharrezkoak dira.",
|
||||
invalidKeyFormat = "Gako formatu baliogabea",
|
||||
connect = "Konektatu",
|
||||
notificationsTitle = "Egon eguneratuta",
|
||||
notificationsSubtitle = "Jaso jakinarazpenak berehala transakzio bat jasotzen duzunean.",
|
||||
@@ -355,6 +299,65 @@ val EuStrings = AppStrings(
|
||||
schedule = "Programatu",
|
||||
cancel = "Utzi"
|
||||
),
|
||||
|
||||
receive = ReceiveStrings(
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
receive = "Jaso",
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
receiveError = "Errorea",
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
lightningAddressQrCode = "Lightning helbidearen QR kodea",
|
||||
lightningAddressLabel = "Lightning helbidea",
|
||||
shareLightningAddress = "Partekatu Lightning helbidea",
|
||||
lightningInvoiceQrCode = "Lightning fakturaren QR kodea",
|
||||
invoiceLabel = "Faktura",
|
||||
shareInvoice = "Partekatu faktura",
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
amountInSats = "Zenbatekoa (sat)",
|
||||
satsRange = { min, max -> "$min – $max sat" },
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
memoOptional = "Oharra (aukerakoa)",
|
||||
memoPlaceholder = "Zertarako da hau?",
|
||||
creatingInvoice = "Faktura sortzen…",
|
||||
createInvoice = "Sortu faktura",
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
waiting = "Zain…",
|
||||
invoiceExpired = "Faktura iraungita",
|
||||
newInvoice = "Faktura berria",
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
withdrawFrom = "Atera hemendik:",
|
||||
minimumSats = { min -> "Gutxienekoa $min sat da" },
|
||||
maximumSats = { max -> "Gehienekoa $max sat da" },
|
||||
withdrawButton = "Atera",
|
||||
withdrawButtonAmount = { amount -> "Atera $amount sat" },
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
paymentReceived = "Ordainketa jasota!",
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
amountDisplaySats = { amount -> "$amount sat" },
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
brightnessReduce = "Murriztu distira",
|
||||
brightnessBoost = "Handitu distira",
|
||||
qrShare = "Partekatu",
|
||||
qrCopy = "Kopiatu",
|
||||
qrNfcStop = "Gelditu NFC partekatzea",
|
||||
qrNfcStart = "Partekatu NFC bidez",
|
||||
openInApp = "Ireki aplikazioan",
|
||||
noAppFound = "Ez da aurkitu aplikazio bateragarririk",
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
receiveVmFailedToCreateInvoice = "Ezin izan da faktura sortu",
|
||||
receiveVmWithdrawRejected = "Ateratzeko zerbitzuak faktura baztertu du",
|
||||
receiveVmWithdrawFailed = "Ateratzeak huts egin du",
|
||||
),
|
||||
nwc = NwcStrings(
|
||||
// ── Shared ────────────────────────────────────────────────────────────────
|
||||
back = "Atzera",
|
||||
|
||||
@@ -64,63 +64,6 @@ data class AppStrings(
|
||||
val enterValidAmount : String,
|
||||
val satsUnit : (sats: Long) -> String,
|
||||
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
val receive : String,
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
val receiveError : String,
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
val lightningAddressQrCode : String,
|
||||
val lightningAddressLabel : String,
|
||||
val shareLightningAddress : String,
|
||||
val lightningInvoiceQrCode : String,
|
||||
val invoiceLabel : String,
|
||||
val shareInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
val amountInSats : String, // text field label
|
||||
val satsRange : (min: Long, max: Long) -> String,
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
val memoOptional : String,
|
||||
val memoPlaceholder : String,
|
||||
val creatingInvoice : String,
|
||||
val createInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
val waiting : String,
|
||||
val invoiceExpired : String,
|
||||
val newInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
val withdrawFrom : String,
|
||||
val minimumSats : (min: Long) -> String,
|
||||
val maximumSats : (max: Long) -> String,
|
||||
val withdrawButton : String, // no fixed amount
|
||||
val withdrawButtonAmount : (amountSats: Long) -> String, // fixed amount
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
val paymentReceived : String,
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
val amountDisplaySats : (amount: Long) -> String,
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
val brightnessReduce : String,
|
||||
val brightnessBoost : String,
|
||||
val qrShare : String,
|
||||
val qrCopy : String,
|
||||
val qrNfcStop : String,
|
||||
val qrNfcStart : String,
|
||||
val openInApp : String,
|
||||
val noAppFound : String,
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
val receiveVmFailedToCreateInvoice : String,
|
||||
val receiveVmWithdrawRejected : String,
|
||||
val receiveVmWithdrawFailed : String,
|
||||
|
||||
// ── SendScreen — general ──────────────────────────────────────────────────
|
||||
val send : String,
|
||||
val paste : String,
|
||||
@@ -307,6 +250,7 @@ data class AppStrings(
|
||||
val paymentRowFailed : String,
|
||||
|
||||
val onboarding: OnboardingStrings,
|
||||
val receive: ReceiveStrings,
|
||||
val nwc: NwcStrings
|
||||
)
|
||||
|
||||
@@ -325,6 +269,7 @@ data class OnboardingStrings(
|
||||
val hideAdminKey: String,
|
||||
val connect: String,
|
||||
val fieldsRequired: String,
|
||||
val invalidKeyFormat: String,
|
||||
val back: String,
|
||||
val next: String,
|
||||
val done: String,
|
||||
@@ -356,6 +301,65 @@ data class OnboardingStrings(
|
||||
val cancel: String
|
||||
)
|
||||
|
||||
data class ReceiveStrings(
|
||||
// ── ReceiveScreen — general ───────────────────────────────────────────────
|
||||
val receive : String,
|
||||
|
||||
// ── ReceiveScreen — error ─────────────────────────────────────────────────
|
||||
val receiveError : String,
|
||||
|
||||
// ── ReceiveScreen — QR / share ────────────────────────────────────────────
|
||||
val lightningAddressQrCode : String,
|
||||
val lightningAddressLabel : String,
|
||||
val shareLightningAddress : String,
|
||||
val lightningInvoiceQrCode : String,
|
||||
val invoiceLabel : String,
|
||||
val shareInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — amount step ───────────────────────────────────────────
|
||||
val amountInSats : String, // text field label
|
||||
val satsRange : (min: Long, max: Long) -> String,
|
||||
|
||||
// ── ReceiveScreen — memo step ─────────────────────────────────────────────
|
||||
val memoOptional : String,
|
||||
val memoPlaceholder : String,
|
||||
val creatingInvoice : String,
|
||||
val createInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — invoice ready ─────────────────────────────────────────
|
||||
val waiting : String,
|
||||
val invoiceExpired : String,
|
||||
val newInvoice : String,
|
||||
|
||||
// ── ReceiveScreen — lnurl withdraw ────────────────────────────────────────
|
||||
val withdrawFrom : String,
|
||||
val minimumSats : (min: Long) -> String,
|
||||
val maximumSats : (max: Long) -> String,
|
||||
val withdrawButton : String, // no fixed amount
|
||||
val withdrawButtonAmount : (amountSats: Long) -> String, // fixed amount
|
||||
|
||||
// ── ReceiveScreen — success ───────────────────────────────────────────────
|
||||
val paymentReceived : String,
|
||||
|
||||
// ── AmountDisplay ─────────────────────────────────────────────────────────
|
||||
val amountDisplaySats : (amount: Long) -> String,
|
||||
|
||||
// ── BrightnessToggleButton & QrDisplayCard ────────────────────────────────
|
||||
val brightnessReduce : String,
|
||||
val brightnessBoost : String,
|
||||
val qrShare : String,
|
||||
val qrCopy : String,
|
||||
val qrNfcStop : String,
|
||||
val qrNfcStart : String,
|
||||
val openInApp : String,
|
||||
val noAppFound : String,
|
||||
|
||||
// ── ReceiveViewModel ──────────────────────────────────────────────────────
|
||||
val receiveVmFailedToCreateInvoice : String,
|
||||
val receiveVmWithdrawRejected : String,
|
||||
val receiveVmWithdrawFailed : String,
|
||||
)
|
||||
|
||||
data class NwcStrings(
|
||||
|
||||
// ── Shared / navigation ───────────────────────────────────────────────────
|
||||
|
||||
@@ -121,7 +121,7 @@ internal fun QrDisplayCard(
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Share,
|
||||
contentDescription = strings.qrShare,
|
||||
contentDescription = strings.receive.qrShare,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
}
|
||||
@@ -138,7 +138,7 @@ internal fun QrDisplayCard(
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.ContentCopy,
|
||||
contentDescription = strings.qrCopy,
|
||||
contentDescription = strings.receive.qrCopy,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
}
|
||||
@@ -147,8 +147,8 @@ internal fun QrDisplayCard(
|
||||
FilledTonalIconButton(onClick = onToggleBrightness) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.WbSunny,
|
||||
contentDescription = if (brightnessOn) strings.brightnessReduce
|
||||
else strings.brightnessBoost,
|
||||
contentDescription = if (brightnessOn) strings.receive.brightnessReduce
|
||||
else strings.receive.brightnessBoost,
|
||||
tint = if (brightnessOn) MaterialTheme.colorScheme.primary
|
||||
else MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
@@ -163,8 +163,8 @@ internal fun QrDisplayCard(
|
||||
Icon(
|
||||
imageVector = if (isNfcEmulating) Icons.Filled.Nfc
|
||||
else Icons.Outlined.Nfc,
|
||||
contentDescription = if (isNfcEmulating) strings.qrNfcStop
|
||||
else strings.qrNfcStart,
|
||||
contentDescription = if (isNfcEmulating) strings.receive.qrNfcStop
|
||||
else strings.receive.qrNfcStart,
|
||||
tint = if (isNfcEmulating) MaterialTheme.colorScheme.primary
|
||||
else MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
@@ -176,7 +176,7 @@ internal fun QrDisplayCard(
|
||||
IconButton(onClick = onOpenUri) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Filled.OpenInNew,
|
||||
contentDescription = strings.openInApp,
|
||||
contentDescription = strings.receive.openInApp,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ private const val PAGE_INVOICE = 2
|
||||
private const val PAGE_ADMIN = 3
|
||||
private const val PAGE_NOTIFICATIONS = 4
|
||||
private const val PAGE_BATTERY = 5
|
||||
private const val PAGE_SYNC = 6 // ← new
|
||||
private const val PAGE_COUNT = 7 // ← was 6
|
||||
private const val PAGE_SYNC = 6
|
||||
private const val PAGE_COUNT = 7
|
||||
|
||||
@Composable
|
||||
fun OnboardingScreen(
|
||||
secretStore : SecretStore,
|
||||
syncStore : HistoricalSyncStore, // ← new
|
||||
syncStore : HistoricalSyncStore,
|
||||
onRequestNotificationPermission: () -> Unit,
|
||||
onComplete : () -> Unit
|
||||
) {
|
||||
@@ -46,12 +46,11 @@ fun OnboardingScreen(
|
||||
var adminKey by remember { mutableStateOf("") }
|
||||
var adminVisible by remember { mutableStateOf(false) }
|
||||
var error by remember { mutableStateOf<String?>(null) }
|
||||
var credentialsSaved by remember { mutableStateOf(false) }
|
||||
// var credentialsSaved by remember { mutableStateOf(false) }
|
||||
|
||||
// ── Sync state ────────────────────────────────────────────────────────────
|
||||
val vm: OnboardingViewModel = viewModel(
|
||||
factory = OnboardingViewModelFactory(
|
||||
// LocalContext.current.applicationContext cast to Application
|
||||
app = androidx.compose.ui.platform.LocalContext.current
|
||||
.applicationContext as android.app.Application,
|
||||
secretStore = secretStore,
|
||||
@@ -65,31 +64,33 @@ fun OnboardingScreen(
|
||||
|
||||
LaunchedEffect(pagerState.currentPage) { error = null }
|
||||
|
||||
// var previousPage by remember { mutableIntStateOf(0) }
|
||||
// LaunchedEffect(pagerState.currentPage) {
|
||||
// val current = pagerState.currentPage
|
||||
// if (current > previousPage) {
|
||||
// // User moved forward — save whatever the previous page owned
|
||||
// when (previousPage) {
|
||||
// PAGE_SERVER_URL -> secretStore.saveBaseUrl(baseUrl)
|
||||
// PAGE_INVOICE -> secretStore.saveInvoiceKey(invoiceKey)
|
||||
// PAGE_ADMIN -> secretStore.saveAdminKey(adminKey)
|
||||
// else -> Unit
|
||||
// }
|
||||
// }
|
||||
// previousPage = current
|
||||
// }
|
||||
val hexKeyRegex = Regex("^[0-9a-f]{32}$")
|
||||
|
||||
fun validateCurrentPage(): Boolean {
|
||||
error = when (pagerState.currentPage) {
|
||||
PAGE_SERVER_URL -> if (baseUrl.isBlank()) strings.onboarding.fieldsRequired else null
|
||||
PAGE_INVOICE -> if (invoiceKey.isBlank()) strings.onboarding.fieldsRequired else null
|
||||
PAGE_ADMIN -> if (adminKey.isBlank()) strings.onboarding.fieldsRequired else null
|
||||
else -> null
|
||||
PAGE_SERVER_URL -> when {
|
||||
baseUrl.isBlank() -> strings.onboarding.fieldsRequired
|
||||
else -> null
|
||||
}
|
||||
|
||||
PAGE_INVOICE -> when {
|
||||
invoiceKey.isBlank() -> strings.onboarding.fieldsRequired
|
||||
!hexKeyRegex.matches(invoiceKey) -> strings.onboarding.invalidKeyFormat
|
||||
else -> null
|
||||
}
|
||||
|
||||
PAGE_ADMIN -> when {
|
||||
adminKey.isBlank() -> strings.onboarding.fieldsRequired
|
||||
!hexKeyRegex.matches(adminKey) -> strings.onboarding.invalidKeyFormat
|
||||
else -> null
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
return error == null
|
||||
}
|
||||
|
||||
|
||||
Scaffold { innerPadding ->
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@@ -128,7 +129,7 @@ fun OnboardingScreen(
|
||||
onSchedule = { delayMs -> vm.enqueueHistoricalSync(delayMillis = delayMs) },
|
||||
onContinue = {
|
||||
scope.launch {
|
||||
secretStore.setOnboarded() // moved here from PAGE_BATTERY
|
||||
secretStore.setOnboarded()
|
||||
onComplete()
|
||||
}
|
||||
},
|
||||
@@ -168,7 +169,7 @@ fun OnboardingScreen(
|
||||
Spacer(Modifier.width(1.dp))
|
||||
}
|
||||
|
||||
val isLastPage = pagerState.currentPage == PAGE_BATTERY
|
||||
// val isLastPage = pagerState.currentPage == PAGE_BATTERY
|
||||
|
||||
Button(onClick = {
|
||||
if (!validateCurrentPage()) return@Button
|
||||
|
||||
@@ -25,7 +25,7 @@ internal fun AmountDisplay(
|
||||
val strings = LocalAppStrings.current
|
||||
|
||||
Text(
|
||||
text = strings.amountDisplaySats(amountSats), // ← "1 sat" or "X sats"
|
||||
text = strings.receive.amountDisplaySats(amountSats), // ← "1 sat" or "X sats"
|
||||
style = style,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
|
||||
+2
-2
@@ -20,8 +20,8 @@ internal fun BrightnessToggleButton(
|
||||
Icon(
|
||||
imageVector = if (isOn) Icons.Filled.BrightnessHigh
|
||||
else Icons.Filled.BrightnessLow,
|
||||
contentDescription = if (isOn) strings.brightnessReduce // ← "Reduce brightness"
|
||||
else strings.brightnessBoost, // ← "Boost brightness"
|
||||
contentDescription = if (isOn) strings.receive.brightnessReduce // ← "Reduce brightness"
|
||||
else strings.receive.brightnessBoost, // ← "Boost brightness"
|
||||
tint = if (isOn) MaterialTheme.colorScheme.primary
|
||||
else MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
|
||||
@@ -130,7 +130,7 @@ fun ReceiveScreen(
|
||||
vm.createInvoice(
|
||||
amountSats,
|
||||
memo,
|
||||
failedToCreateInvoice = strings.receiveVmFailedToCreateInvoice
|
||||
failedToCreateInvoice = strings.receive.receiveVmFailedToCreateInvoice
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -145,9 +145,9 @@ fun ReceiveScreen(
|
||||
callback = state.callback,
|
||||
amountSats = amountSats,
|
||||
memo = state.defaultDescription,
|
||||
failedToCreateInvoice = strings.receiveVmFailedToCreateInvoice,
|
||||
withdrawRejected = strings.receiveVmWithdrawRejected,
|
||||
withdrawFailed = strings.receiveVmWithdrawFailed,
|
||||
failedToCreateInvoice = strings.receive.receiveVmFailedToCreateInvoice,
|
||||
withdrawRejected = strings.receive.receiveVmWithdrawRejected,
|
||||
withdrawFailed = strings.receive.receiveVmWithdrawFailed,
|
||||
)
|
||||
},
|
||||
onDismiss = { vm.resetReceiveState() }
|
||||
@@ -172,7 +172,7 @@ fun ReceiveScreen(
|
||||
modifier = Modifier.padding(24.dp)
|
||||
) {
|
||||
Text(
|
||||
text = strings.receiveError, // ← "Error"
|
||||
text = strings.receive.receiveError, // ← "Error"
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.error
|
||||
)
|
||||
@@ -225,8 +225,8 @@ private fun LnurlWithdrawSheet(
|
||||
val parsed = amountText.trim().toLongOrNull()
|
||||
return when {
|
||||
parsed == null || parsed <= 0 -> { amountError = strings.enterValidAmount; null } // ← "Enter a valid amount"
|
||||
parsed < state.minSats -> { amountError = strings.minimumSats(state.minSats); null } // ← "Minimum is X sats"
|
||||
parsed > state.maxSats -> { amountError = strings.maximumSats(state.maxSats); null } // ← "Maximum is X sats"
|
||||
parsed < state.minSats -> { amountError = strings.receive.minimumSats(state.minSats); null } // ← "Minimum is X sats"
|
||||
parsed > state.maxSats -> { amountError = strings.receive.maximumSats(state.maxSats); null } // ← "Maximum is X sats"
|
||||
else -> { amountError = null; parsed }
|
||||
}
|
||||
}
|
||||
@@ -247,7 +247,7 @@ private fun LnurlWithdrawSheet(
|
||||
Spacer(Modifier.size(12.dp))
|
||||
Column {
|
||||
Text(
|
||||
text = strings.withdrawFrom, // ← "Withdraw from"
|
||||
text = strings.receive.withdrawFrom, // ← "Withdraw from"
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
@@ -286,7 +286,7 @@ private fun LnurlWithdrawSheet(
|
||||
color = MaterialTheme.colorScheme.onSecondaryContainer
|
||||
)
|
||||
Text(
|
||||
text = strings.withdrawButtonAmount(state.maxSats), // ← "X sats"
|
||||
text = strings.receive.withdrawButtonAmount(state.maxSats), // ← "X sats"
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.Bold,
|
||||
color = MaterialTheme.colorScheme.onSecondaryContainer
|
||||
@@ -297,12 +297,12 @@ private fun LnurlWithdrawSheet(
|
||||
OutlinedTextField(
|
||||
value = amountText,
|
||||
onValueChange = { amountText = it; amountError = null },
|
||||
label = { Text(strings.amountInSats) }, // ← "Amount (sats)"
|
||||
label = { Text(strings.receive.amountInSats) }, // ← "Amount (sats)"
|
||||
supportingText = {
|
||||
if (amountError != null)
|
||||
Text(amountError!!, color = MaterialTheme.colorScheme.error)
|
||||
else
|
||||
Text(strings.satsRange(state.minSats, state.maxSats)) // ← "X – Y sats"
|
||||
Text(strings.receive.satsRange(state.minSats, state.maxSats)) // ← "X – Y sats"
|
||||
},
|
||||
isError = amountError != null,
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
|
||||
@@ -321,8 +321,8 @@ private fun LnurlWithdrawSheet(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(
|
||||
if (fixedAmount) strings.withdrawButtonAmount(state.maxSats) // ← "Withdraw X sats"
|
||||
else strings.withdrawButton // ← "Withdraw"
|
||||
if (fixedAmount) strings.receive.withdrawButtonAmount(state.maxSats) // ← "Withdraw X sats"
|
||||
else strings.receive.withdrawButton // ← "Withdraw"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -379,7 +379,7 @@ private fun ReceiveIdleContent(
|
||||
horizontalArrangement = Arrangement.SpaceBetween
|
||||
) {
|
||||
Text(
|
||||
text = strings.receive, // ← "Receive"
|
||||
text = strings.receive.receive, // ← "Receive"
|
||||
style = MaterialTheme.typography.headlineSmall
|
||||
)
|
||||
if (lightningAddress != null) {
|
||||
@@ -421,9 +421,9 @@ private fun ReceiveIdleContent(
|
||||
|
||||
QrDisplayCard(
|
||||
content = lightningAddress,
|
||||
contentDescription = strings.lightningAddressQrCode, // ← "Lightning address QR code"
|
||||
clipLabel = strings.lightningAddressLabel, // ← "Lightning Address"
|
||||
shareTitle = strings.shareLightningAddress, // ← "Share Lightning Address"
|
||||
contentDescription = strings.receive.lightningAddressQrCode, // ← "Lightning address QR code"
|
||||
clipLabel = strings.receive.lightningAddressLabel, // ← "Lightning Address"
|
||||
shareTitle = strings.receive.shareLightningAddress, // ← "Share Lightning Address"
|
||||
textToCopy = lightningAddress,
|
||||
brightnessOn = brightnessOn,
|
||||
onToggleBrightness = onToggleBrightness
|
||||
@@ -587,8 +587,8 @@ private fun MemoStepContent(
|
||||
OutlinedTextField(
|
||||
value = memo,
|
||||
onValueChange = { memo = it },
|
||||
label = { Text(strings.memoOptional) }, // ← "Memo (optional)"
|
||||
placeholder = { Text(strings.memoPlaceholder) }, // ← "What's this for?"
|
||||
label = { Text(strings.receive.memoOptional) }, // ← "Memo (optional)"
|
||||
placeholder = { Text(strings.receive.memoPlaceholder) }, // ← "What's this for?"
|
||||
singleLine = true,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
@@ -603,8 +603,8 @@ private fun MemoStepContent(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(
|
||||
if (isLoading) strings.creatingInvoice // ← "Creating invoice…"
|
||||
else strings.createInvoice // ← "Create Invoice"
|
||||
if (isLoading) strings.receive.creatingInvoice // ← "Creating invoice…"
|
||||
else strings.receive.createInvoice // ← "Create Invoice"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -665,9 +665,9 @@ private fun ReceiveInvoiceContent(
|
||||
|
||||
QrDisplayCard(
|
||||
content = state.bolt11.uppercase(),
|
||||
contentDescription = strings.lightningInvoiceQrCode, // ← "Lightning invoice QR code"
|
||||
clipLabel = strings.invoiceLabel, // ← "Invoice"
|
||||
shareTitle = strings.shareInvoice, // ← "Share Invoice"
|
||||
contentDescription = strings.receive.lightningInvoiceQrCode, // ← "Lightning invoice QR code"
|
||||
clipLabel = strings.receive.invoiceLabel, // ← "Invoice"
|
||||
shareTitle = strings.receive.shareInvoice, // ← "Share Invoice"
|
||||
textToCopy = state.bolt11,
|
||||
brightnessOn = brightnessOn,
|
||||
onToggleBrightness = onToggleBrightness,
|
||||
@@ -693,7 +693,7 @@ private fun ReceiveInvoiceContent(
|
||||
if (!isExpired) {
|
||||
CircularProgressIndicator(modifier = Modifier.size(16.dp), strokeWidth = 2.dp)
|
||||
Text(
|
||||
text = strings.waiting, // ← "Waiting…"
|
||||
text = strings.receive.waiting, // ← "Waiting…"
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
@@ -704,7 +704,7 @@ private fun ReceiveInvoiceContent(
|
||||
)
|
||||
} else {
|
||||
Text(
|
||||
text = strings.invoiceExpired, // ← "Invoice expired"
|
||||
text = strings.receive.invoiceExpired, // ← "Invoice expired"
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.error
|
||||
)
|
||||
@@ -716,7 +716,7 @@ private fun ReceiveInvoiceContent(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Text(
|
||||
if (isExpired) strings.newInvoice // ← "New Invoice"
|
||||
if (isExpired) strings.receive.newInvoice // ← "New Invoice"
|
||||
else strings.cancel // ← "Cancel"
|
||||
)
|
||||
}
|
||||
@@ -750,7 +750,7 @@ private fun ReceiveSuccessContent(
|
||||
)
|
||||
Spacer(Modifier.height(16.dp))
|
||||
Text(
|
||||
text = strings.paymentReceived, // ← "Payment Received!"
|
||||
text = strings.receive.paymentReceived, // ← "Payment Received!"
|
||||
style = MaterialTheme.typography.headlineSmall
|
||||
)
|
||||
Spacer(Modifier.height(8.dp))
|
||||
|
||||
@@ -44,7 +44,7 @@ class ReceiveViewModel(
|
||||
// ── Invoice creation ──────────────────────────────────────────────────────
|
||||
/**
|
||||
* @param failedToCreateInvoice Localised error string from the call site,
|
||||
* e.g. `strings.receiveVmFailedToCreateInvoice`
|
||||
* e.g. `strings.receive.receiveVmFailedToCreateInvoice`
|
||||
*/
|
||||
fun createInvoice(
|
||||
amountSats : Long,
|
||||
@@ -104,9 +104,9 @@ class ReceiveViewModel(
|
||||
}
|
||||
|
||||
/**
|
||||
* @param failedToCreateInvoice `strings.receiveVmFailedToCreateInvoice`
|
||||
* @param withdrawRejected `strings.receiveVmWithdrawRejected`
|
||||
* @param withdrawFailed `strings.receiveVmWithdrawFailed`
|
||||
* @param failedToCreateInvoice `strings.receive.receiveVmFailedToCreateInvoice`
|
||||
* @param withdrawRejected `strings.receive.receiveVmWithdrawRejected`
|
||||
* @param withdrawFailed `strings.receive.receiveVmWithdrawFailed`
|
||||
*/
|
||||
fun executeWithdraw(
|
||||
k1 : String,
|
||||
|
||||
@@ -59,7 +59,7 @@ internal fun LnurlPayForm(
|
||||
OutlinedTextField(
|
||||
value = amount,
|
||||
onValueChange = { if (it.all(Char::isDigit)) amount = it },
|
||||
label = { Text(strings.amountInSats) }, // ← "Amount (sats)"
|
||||
label = { Text(strings.receive.amountInSats) }, // ← "Amount (sats)"
|
||||
isError = amount.isNotBlank() && !isAmountValid,
|
||||
supportingText = {
|
||||
when {
|
||||
@@ -88,7 +88,7 @@ internal fun LnurlPayForm(
|
||||
)
|
||||
}
|
||||
// Sats-only range when no fiat rate
|
||||
!isFixed -> Text(strings.satsRange(state.minSats, state.maxSats)) // ← "X – Y sats"
|
||||
!isFixed -> Text(strings.receive.satsRange(state.minSats, state.maxSats)) // ← "X – Y sats"
|
||||
else -> {}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user