taler-android

Android apps for GNU Taler (wallet, PoS, cashier)
Log | Files | Refs | README | LICENSE

commit f861958b275347fabe058a258e924f2d76eed63f
parent 0ac9851f6db6ae3d45105ee76c5f574acc84deb0
Author: Iván Ávalos <avalos@disroot.org>
Date:   Wed, 29 Apr 2026 23:38:13 +0200

[wallet] improved green/success colors

Diffstat:
Mwallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt | 4++--
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt | 4++--
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt | 5+++--
Mwallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt | 5++---
Mwallet/src/main/java/net/taler/wallet/ui/theme/Color.kt | 13+++++++++++++
Mwallet/src/main/java/net/taler/wallet/ui/theme/Theme.kt | 49+++++++++++++++++++++++++++++++++++++++++++++----
6 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/wallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt b/wallet/src/main/java/net/taler/wallet/balances/BalancesComposable.kt @@ -44,7 +44,6 @@ import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -60,6 +59,7 @@ import net.taler.wallet.compose.LoadingScreen import net.taler.wallet.compose.TalerSurface import net.taler.wallet.compose.cardPaddings import net.taler.wallet.donau.DonauSummaryItem +import net.taler.wallet.ui.theme.TalerTheme // TODO: rename to AssetsComposable @Composable @@ -252,7 +252,7 @@ fun PendingComposable( R.string.balances_inbound_amount, balance.pendingIncoming.toString(showSymbol = false), ), - color = colorResource(R.color.green), + color = TalerTheme.extraColors.success, ) } diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionDetailScreen.kt @@ -46,7 +46,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -76,6 +75,7 @@ import net.taler.wallet.peer.TransactionPeerPullDebitComposable import net.taler.wallet.peer.TransactionPeerPushCreditComposable import net.taler.wallet.peer.TransactionPeerPushDebitComposable import net.taler.wallet.refund.TransactionRefundComposable +import net.taler.wallet.ui.theme.TalerTheme import net.taler.wallet.withdraw.TransactionWithdrawalComposable @Composable @@ -441,7 +441,7 @@ fun TransactionAmountComposable( textAlign = TextAlign.Center, fontSize = 24.sp, color = when (amountType) { - AmountType.Positive -> colorResource(R.color.green) + AmountType.Positive -> TalerTheme.extraColors.success AmountType.Negative -> MaterialTheme.colorScheme.error AmountType.Neutral -> Color.Unspecified }, diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionStateComposable.kt @@ -54,6 +54,7 @@ import net.taler.wallet.transactions.TransactionMinorState.KycInit import net.taler.wallet.transactions.TransactionMinorState.KycRequired import net.taler.wallet.transactions.TransactionMinorState.Repurchase import net.taler.wallet.transactions.WithdrawalDetails.ManualTransfer +import net.taler.wallet.ui.theme.TalerTheme @Composable fun TransactionStateComposable( @@ -85,7 +86,7 @@ fun TransactionStateComposable( } val cardColor = when (state) { - TransactionState(Done) -> colorResource(R.color.green) + TransactionState(Done) -> TalerTheme.extraColors.successContainer TransactionState(Pending), TransactionState(Suspended), TransactionState(Failed, Repurchase), @@ -98,7 +99,7 @@ fun TransactionStateComposable( } val textColor = when (state) { - TransactionState(Done) -> Color.White + TransactionState(Done) -> TalerTheme.extraColors.onSuccessContainer TransactionState(Pending), TransactionState(Suspended), TransactionState(Failed, Repurchase), diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionsComposable.kt @@ -55,7 +55,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -75,7 +74,6 @@ import net.taler.wallet.balances.ScopeInfo.Exchange import net.taler.wallet.cleanExchange import net.taler.wallet.compose.Banner import net.taler.wallet.compose.LoadingScreen -import net.taler.wallet.compose.NewMenuItem import net.taler.wallet.compose.TalerSurface import net.taler.wallet.compose.cardPaddings import net.taler.wallet.main.ViewMode @@ -101,6 +99,7 @@ import net.taler.wallet.transactions.TransactionStateFilter.Nonfinal import net.taler.wallet.transactions.TransactionsResult.Error import net.taler.wallet.transactions.TransactionsResult.None import net.taler.wallet.transactions.TransactionsResult.Success +import net.taler.wallet.ui.theme.TalerTheme @Composable fun TransactionsComposable( @@ -376,7 +375,7 @@ fun TransactionAmountInfo( Positive -> Text( stringResource(R.string.amount_positive, amountStr), color = if (tx.txState.major == Pending || tx.txState.major == Dialog) - Color.Unspecified else colorResource(R.color.green), + Color.Unspecified else TalerTheme.extraColors.success, ) Negative -> Text( stringResource(R.string.amount_negative, amountStr), diff --git a/wallet/src/main/java/net/taler/wallet/ui/theme/Color.kt b/wallet/src/main/java/net/taler/wallet/ui/theme/Color.kt @@ -54,6 +54,12 @@ val surfaceContainerLight = Color(0xFFF0F2F7) val surfaceContainerHighLight = Color(0xFFEAECEF) val surfaceContainerHighestLight = Color(0xFFE3E6EB) +// extra colors +val successLight = Color(0xFF228B22) +val onSuccessLight = Color(0xFFFFFFFF) +val successContainerLight = Color(0xFFC1FFC1) +val onSuccessContainerLight = Color(0xFF003900) + val primaryDark = Color(0xFFB4C5FF) val onPrimaryDark = Color(0xFF002A78) val primaryContainerDark = Color(0xFF0042B3) @@ -89,3 +95,9 @@ val surfaceContainerLowDark = Color(0xFF1C1B1B) val surfaceContainerDark = Color(0xFF201F1F) val surfaceContainerHighDark = Color(0xFF2A2A2A) val surfaceContainerHighestDark = Color(0xFF353434) + +// extra colors +val successDark = Color(0xFF81C784) +val onSuccessDark = Color(0xFF003300) +val successContainerDark = Color(0xFF005300) +val onSuccessContainerDark = Color(0xFFADFFAD) +\ No newline at end of file diff --git a/wallet/src/main/java/net/taler/wallet/ui/theme/Theme.kt b/wallet/src/main/java/net/taler/wallet/ui/theme/Theme.kt @@ -24,6 +24,10 @@ import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext private val lightScheme = lightColorScheme( @@ -102,6 +106,35 @@ private val darkScheme = darkColorScheme( surfaceContainerHighest = surfaceContainerHighestDark, ) +@Immutable +data class TalerColorScheme( + val success: Color = Color.Unspecified, + val onSuccess: Color = Color.Unspecified, + val successContainer: Color = Color.Unspecified, + val onSuccessContainer: Color = Color.Unspecified, +) + +private val talerLightScheme = TalerColorScheme( + success = successLight, + onSuccess = onSuccessLight, + successContainer = successContainerLight, + onSuccessContainer = onSuccessContainerLight, +) + +private val talerDarkScheme = TalerColorScheme( + success = successDark, + onSuccess = onSuccessDark, + successContainer = successContainerDark, + onSuccessContainer = onSuccessContainerDark, +) + +val LocalTalerColorScheme = staticCompositionLocalOf { talerLightScheme } + +object TalerTheme { + val extraColors: TalerColorScheme@Composable + get() = LocalTalerColorScheme.current +} + @Composable fun TalerTheme( darkTheme: Boolean = isSystemInDarkTheme(), @@ -119,8 +152,16 @@ fun TalerTheme( else -> lightScheme } - MaterialTheme( - colorScheme = colorScheme, - content = content - ) + val talerColorScheme = if(darkTheme) { + talerDarkScheme + } else { + talerLightScheme + } + + CompositionLocalProvider(LocalTalerColorScheme provides talerColorScheme) { + MaterialTheme( + colorScheme = colorScheme, + content = content + ) + } }