From 31757f2bf0b6eb1a8ab4fb246edac61a685737c2 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 24 Jul 2026 12:42:54 -0400 Subject: [PATCH] feat(tipping): use a distinct tip-card color inside the tip sheet Introduce `LocalTipCardColor` so the tip card's background can be overridden per surface. `TipCard` reads it and falls back to the theme color when no value is provided (`takeOrElse { CodeTheme.colors.tipCardColor }`), so existing standalone renders are unaffected. The tip sheet (`TipCardScreen`) provides the darker `0xFF101011`, while the default theme `tipCard` color moves to `0xFF2A2620` for standalone rendering. --- .../tipping/internal/screens/TipCardScreen.kt | 12 +++++++++--- .../com/flipcash/app/bills/ScannableRenderer.kt | 16 ++++++++++------ .../app/bills/components/cards/TipCard.kt | 11 ++++++++--- .../app/theme/internal/FlipcashDesignSystem.kt | 2 +- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/apps/flipcash/features/tipping/src/main/kotlin/com/flipcash/app/tipping/internal/screens/TipCardScreen.kt b/apps/flipcash/features/tipping/src/main/kotlin/com/flipcash/app/tipping/internal/screens/TipCardScreen.kt index 0713e4b18..4e4f155da 100644 --- a/apps/flipcash/features/tipping/src/main/kotlin/com/flipcash/app/tipping/internal/screens/TipCardScreen.kt +++ b/apps/flipcash/features/tipping/src/main/kotlin/com/flipcash/app/tipping/internal/screens/TipCardScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.requiredSize import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -21,6 +22,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.flipcash.app.bills.ScannableRenderer +import com.flipcash.app.bills.components.cards.LocalTipCardColor import com.flipcash.app.core.bill.Scannable import com.flipcash.app.core.tipping.TipResult import com.flipcash.app.core.tipping.TipStep @@ -98,9 +100,13 @@ internal fun TipCardScreen() { ) Spacer(Modifier.weight(1f)) state.tipCard?.let { - ScannableRenderer( - scannable = it, - ) + CompositionLocalProvider( + LocalTipCardColor provides Color(0xFF101011) + ) { + ScannableRenderer( + scannable = it, + ) + } } Spacer(Modifier.weight(1f)) } diff --git a/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/ScannableRenderer.kt b/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/ScannableRenderer.kt index 05052459b..c20b4faa3 100644 --- a/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/ScannableRenderer.kt +++ b/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/ScannableRenderer.kt @@ -2,12 +2,14 @@ package com.flipcash.app.bills import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewWrapper import com.flipcash.app.bills.components.bills.CashBill import com.flipcash.app.bills.components.bills.GoldBar +import com.flipcash.app.bills.components.cards.LocalTipCardColor import com.flipcash.app.bills.components.cards.TipCard import com.flipcash.app.core.bill.Scannable import com.flipcash.app.theme.FlipcashThemeWrapper @@ -38,12 +40,14 @@ fun ScannableRenderer( payloadData = scannable.data, amount = scannable.amount.underlyingTokenAmount, ) - is Scannable.TipCard -> TipCard( - modifier = modifier, - payloadData = scannable.data, - user = scannable.user, - contentAlignment = contentAlignment, - ) + is Scannable.TipCard -> { + TipCard( + modifier = modifier, + payloadData = scannable.data, + user = scannable.user, + contentAlignment = contentAlignment, + ) + } } } diff --git a/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/components/cards/TipCard.kt b/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/components/cards/TipCard.kt index b11da54de..243da3f9a 100644 --- a/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/components/cards/TipCard.kt +++ b/apps/flipcash/shared/bills/src/main/kotlin/com/flipcash/app/bills/components/cards/TipCard.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -16,11 +15,14 @@ import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.remember +import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.takeOrElse import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.flipcash.app.bills.components.ScannableCode @@ -30,6 +32,8 @@ import com.flipcash.shared.common.ui.ContactAvatar import com.getcode.theme.CodeTheme import com.getcode.theme.xxl +val LocalTipCardColor = staticCompositionLocalOf { Color.Unspecified } + @OptIn(ExperimentalLayoutApi::class) @Composable internal fun TipCard( @@ -38,6 +42,7 @@ internal fun TipCard( modifier: Modifier = Modifier, contentAlignment: Alignment = Alignment.Center, ) { + val cardColor = LocalTipCardColor.current.takeOrElse { CodeTheme.colors.tipCardColor } BoxWithConstraints( modifier = modifier .windowInsetsPadding(WindowInsets.statusBarsIgnoringVisibility) @@ -50,7 +55,7 @@ internal fun TipCard( Column( modifier = Modifier .background( - CodeTheme.colors.tipCardColor, + color = cardColor, shape = CodeTheme.shapes.xxl, ) .padding(vertical = CodeTheme.dimens.grid.x8, horizontal = CodeTheme.dimens.grid.x7) diff --git a/apps/flipcash/shared/theme/src/main/kotlin/com/flipcash/app/theme/internal/FlipcashDesignSystem.kt b/apps/flipcash/shared/theme/src/main/kotlin/com/flipcash/app/theme/internal/FlipcashDesignSystem.kt index 44de2f2d7..711b1e331 100644 --- a/apps/flipcash/shared/theme/src/main/kotlin/com/flipcash/app/theme/internal/FlipcashDesignSystem.kt +++ b/apps/flipcash/shared/theme/src/main/kotlin/com/flipcash/app/theme/internal/FlipcashDesignSystem.kt @@ -118,7 +118,7 @@ private val colors = with(Flipcash2ColorSpec) { toggleUncheckedTrackColor = Color(0xFF666666), cashBill = cashBill, cashBillDecorColor = Color.White.copy(0.60f), - tipCard = Color(0xFF101011), + tipCard = Color(0xFF2A2620), betaIndicator = BetaIndicator, bannerThemed = bannerThemed, bannerError = Error,