diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt index 5f15189..616c45a 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EnStrings.kt @@ -306,6 +306,7 @@ val EnHomeStrings = AppStrings( paymentRowReceivedCD = "Received", paymentRowNoMemo = "No memo", paymentRowPending = "Pending", + paymentRowFailed = "Failed", onboarding = OnboardingStrings( back = "Back", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt index db89209..a3862d5 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EsStrings.kt @@ -305,6 +305,8 @@ val EsHomeStrings = AppStrings( paymentRowReceivedCD = "Recibido", paymentRowNoMemo = "Sin nota", paymentRowPending = "Pendiente", + paymentRowFailed = "Fallido", + onboarding = OnboardingStrings( back = "Back", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt index 69ecae1..66e31eb 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/EuStrings.kt @@ -305,6 +305,8 @@ val EuStrings = AppStrings( paymentRowReceivedCD = "Jasota", paymentRowNoMemo = "Oharrik gabe", paymentRowPending = "Zain", + paymentRowFailed = "Huts eginda", + onboarding = OnboardingStrings( back = "Back", diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt index 3c6dafc..4ba2048 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/i18n/Strings.kt @@ -302,6 +302,7 @@ data class AppStrings( val paymentRowReceivedCD : String, val paymentRowNoMemo : String, val paymentRowPending : String, + val paymentRowFailed : String, val onboarding: OnboardingStrings ) diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryUtils.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryUtils.kt index 772f6ff..b121f88 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryUtils.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/HistoryUtils.kt @@ -30,6 +30,9 @@ internal fun formatTimestamp(createdAt: Long?, rawTime: String): String { internal fun isPendingStatus(status: String): Boolean = status.lowercase() in setOf("pending", "in_flight", "inflight") +internal fun isFailedStatus(status: String): Boolean = + status.lowercase() in setOf("failed", "error", "expired") + // ── Composable helpers ─────────────────────────────────────────────────────── @Composable @@ -37,6 +40,7 @@ internal fun paymentAmountColor(status: String, isOutgoing: Boolean): Color { val semantic = semanticColors() return when { isPendingStatus(status) -> MaterialTheme.colorScheme.onSurfaceVariant + isFailedStatus(status) -> MaterialTheme.colorScheme.onSurfaceVariant isOutgoing -> MaterialTheme.colorScheme.onSurface else -> semantic.success } diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt index eba07cd..2d2fabb 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/history/PaymentRow.kt @@ -36,6 +36,7 @@ internal fun PaymentRow( ) { val strings = LocalAppStrings.current val isPending = isPendingStatus(payment.status) + val isFailed = isFailedStatus(payment.status) val semantic = semanticColors() val amountColor = paymentAmountColor(payment.status, payment.isOutgoing) val icon = if (payment.isOutgoing) Icons.Default.ArrowUpward @@ -80,15 +81,30 @@ internal fun PaymentRow( style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant ) - if (isPending) { + val statusLabel = when { + isPending -> strings.paymentRowPending + isFailed -> strings.paymentRowFailed + else -> null + } + val statusColor = when { + isPending -> semantic.warningContainer + isFailed -> semantic.errorContainer + else -> semantic.successContainer // fallback, won't be used + } + val statusContentColor = when { + isPending -> semantic.onWarningContainer + isFailed -> semantic.onErrorContainer + else -> semantic.onSuccessContainer + } + if (statusLabel != null) { Spacer(Modifier.height(4.dp)) Surface( shape = MaterialTheme.shapes.extraSmall, - color = semantic.warningContainer, - contentColor = semantic.onWarningContainer + color = statusColor, + contentColor = statusContentColor ) { Text( - text = strings.paymentRowPending, // ← "Pending" + text = statusLabel, style = MaterialTheme.typography.labelSmall, modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp) )