diff --git a/jetpacker/android/app/src/main/kotlin/com/example/jetpacker/MainActivity.kt b/jetpacker/android/app/src/main/kotlin/com/example/jetpacker/MainActivity.kt
index 8577136a..8e9ca881 100644
--- a/jetpacker/android/app/src/main/kotlin/com/example/jetpacker/MainActivity.kt
+++ b/jetpacker/android/app/src/main/kotlin/com/example/jetpacker/MainActivity.kt
@@ -23,6 +23,7 @@ import android.hardware.SensorManager
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
+import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
@@ -45,7 +46,10 @@ import dagger.hilt.android.AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- enableEdgeToEdge()
+ enableEdgeToEdge(
+ statusBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT),
+ navigationBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT),
+ )
handleFeatureFlags()
setContent {
diff --git a/jetpacker/android/app/src/main/res/values-night/colors.xml b/jetpacker/android/app/src/main/res/values-night/colors.xml
index bf225f5a..882bb001 100644
--- a/jetpacker/android/app/src/main/res/values-night/colors.xml
+++ b/jetpacker/android/app/src/main/res/values-night/colors.xml
@@ -16,5 +16,27 @@
-->
- #141412
+ #131314
+
+
+ #FF01AF57
+ #FF061B0E
+ #FF0A3D22
+ #FFB9F6CA
+ #FF26C6DA
+ #FF052329
+ #FF183A9C
+ #FFD0E4FF
+ #FF3DDC84
+ #FF061B0E
+ #FFFF6E6E
+ #FF3B080A
+ #FF4A151B
+ #FF131314
+ #FFFFFFFF
+ #FF22262B
+ #FFC4C7C5
+ #FF01AF57
+ #FF2A3038
+ #FF1E2226
diff --git a/jetpacker/android/app/src/main/res/values/colors.xml b/jetpacker/android/app/src/main/res/values/colors.xml
index 19351f15..effca8bd 100644
--- a/jetpacker/android/app/src/main/res/values/colors.xml
+++ b/jetpacker/android/app/src/main/res/values/colors.xml
@@ -23,5 +23,27 @@
#FF018786
#FF000000
#FFFFFFFF
- #FCF8E5
-
\ No newline at end of file
+ #131314
+
+
+ #FF01AF57
+ #FF061B0E
+ #FF0A3D22
+ #FFB9F6CA
+ #FF26C6DA
+ #FF052329
+ #FF183A9C
+ #FFD0E4FF
+ #FF3DDC84
+ #FF061B0E
+ #FFFF6E6E
+ #FF3B080A
+ #FF4A151B
+ #FF131314
+ #FFFFFFFF
+ #FF22262B
+ #FFC4C7C5
+ #FF01AF57
+ #FF2A3038
+ #FF1E2226
+
diff --git a/jetpacker/android/app/src/main/res/values/themes.xml b/jetpacker/android/app/src/main/res/values/themes.xml
index b572d416..2f525058 100644
--- a/jetpacker/android/app/src/main/res/values/themes.xml
+++ b/jetpacker/android/app/src/main/res/values/themes.xml
@@ -15,7 +15,7 @@
-->
-
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Color.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Color.kt
index 328a6b86..29bb2f5b 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Color.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Color.kt
@@ -16,83 +16,99 @@
package com.example.jetpacker.core.ui
+import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
-val primaryLight = Color(0xFF72DAEC)
-val onPrimaryLight = Color(0xFFF1F2F3F)
-val primaryContainerLight = Color(0xFF72DAEC)
-val onPrimaryContainerLight = Color(0xFF1F2F3F)
-val secondaryLight = Color(0xFF306DAC)
-val onSecondaryLight = Color(0xFFEDF1FF)
-val secondaryContainerLight = Color(0xFF306DAC)
-val onSecondaryContainerLight = Color(0xFFEDF1FF)
-val tertiaryLight = Color(0xFFFF5314)
-val onTertiaryLight = Color(0xFFfcf8e5)
-val tertiaryContainerLight = Color(0xFFFF5314)
-val onTertiaryContainerLight = Color(0xFFfcf8e5)
-val errorLight = Color(0xFFB51A25)
-val onErrorLight = Color(0xFFFFFFFF)
-val errorContainerLight = Color(0xFFd8373b)
-val onErrorContainerLight = Color(0xFFfffbff)
-val backgroundLight = Color(0xFFf6fafb)
-val onBackgroundLight = Color(0xFF171c1d)
-val surfaceLight = Color(0xFFFCF8E5)
-val onSurfaceLight = Color(0xFF1f2f3f)
-val surfaceVariantLight = Color(0xFFe6e2d7)
-val onSurfaceVariantLight = Color(0xFF48473f)
-val outlineLight = Color(0xFF1f2f3f)
-val outlineVariantLight = Color(0xFFb0c4d8)
+// Android Dev Summit brand & accent tokens
+val AdsBackground = Color(0xFF131314)
+val AdsGreen = Color(0xFF01AF57)
+val AdsGreenBright = Color(0xFF3DDC84)
+val AdsPink = Color(0xFFFDADEE)
+val AdsBlue = Color(0xFF183A9C)
+val AdsCyan = Color(0xFF26C6DA)
+val AdsIconBadgeLight = Color(0xFFEEEEEE)
+val AdsIconBadgeDark = Color(0xFF131314)
+
+val AdsBorderBrush: Brush = SolidColor(AdsBlue)
+val AdsToolbarBorderBrush: Brush = SolidColor(AdsGreen)
+val AdsLoadingBorderBrush: Brush = Brush.horizontalGradient(listOf(AdsBlue, AdsGreen))
+val AdsGlowColors = listOf(AdsGreen, AdsCyan, AdsBlue)
+
+val primaryLight = Color(0xFF01AF57)
+val onPrimaryLight = Color(0xFF061B0E)
+val primaryContainerLight = Color(0xFF0B3820)
+val onPrimaryContainerLight = Color(0xFF6FF9B4)
+val secondaryLight = Color(0xFF26C6DA)
+val onSecondaryLight = Color(0xFF062024)
+val secondaryContainerLight = Color(0xFF102E38)
+val onSecondaryContainerLight = Color(0xFF9CEFFF)
+val tertiaryLight = Color(0xFF3DDC84)
+val onTertiaryLight = Color(0xFF061B0E)
+val tertiaryContainerLight = Color(0xFF0D3B23)
+val onTertiaryContainerLight = Color(0xFF8CF5B7)
+val errorLight = Color(0xFFFF897D)
+val onErrorLight = Color(0xFF4C0002)
+val errorContainerLight = Color(0xFF3B1518)
+val onErrorContainerLight = Color(0xFFFFB4AB)
+val backgroundLight = Color(0xFF131314)
+val onBackgroundLight = Color(0xFFF1F3F4)
+val surfaceLight = Color(0xFF131314)
+val onSurfaceLight = Color(0xFFF1F3F4)
+val surfaceVariantLight = Color(0xFF23272C)
+val onSurfaceVariantLight = Color(0xFFA8AEB5)
+val outlineLight = AdsBlue
+val outlineVariantLight = Color(0xFF2C333A)
val scrimLight = Color(0xFF000000)
-val inverseSurfaceLight = Color(0xFF1f2f3f)
-val inverseOnSurfaceLight = Color(0xFFf4f0ed)
-val inversePrimaryLight = Color(0xFF6dd5e7)
-val surfaceDimLight = Color(0xFF72daec)
-val surfaceBrightLight = Color(0xFF72daec)
-val surfaceContainerLowestLight = Color(0xFFFFFFFF)
-val surfaceContainerLowLight = Color(0xFFe8dff)
-val surfaceContainerLight = Color(0xFFedf1ff)
-val surfaceContainerHighLight = Color(0xFFd1dbff)
-val surfaceContainerHighestLight = Color(0xFFc6d2ff)
+val inverseSurfaceLight = Color(0xFFEEEEEE)
+val inverseOnSurfaceLight = Color(0xFF131314)
+val inversePrimaryLight = Color(0xFF006D35)
+val surfaceDimLight = Color(0xFF0E0F10)
+val surfaceBrightLight = Color(0xFF2C3137)
+val surfaceContainerLowestLight = Color(0xFF0D0E10)
+val surfaceContainerLowLight = Color(0xFF181A1D)
+val surfaceContainerLight = Color(0xFF1D2024)
+val surfaceContainerHighLight = Color(0xFF25292E)
+val surfaceContainerHighestLight = Color(0xFF2E3339)
-val primaryDark = Color(0xFF044B57)
-val onPrimaryDark = Color(0xFFFAFEFF)
-val primaryContainerDark = Color(0xFF72DAEC)
-val onPrimaryContainerDark = Color(0xFF005f6a)
-val secondaryDark = Color(0xFFa1d0ff)
-val onSecondaryDark = Color(0xFF00325A)
-val secondaryContainerDark = Color(0xFF306DAC)
-val onSecondaryContainerDark = Color(0xFFA1D0FF)
-val tertiaryDark = Color(0xFFFFB59F)
-val onTertiaryDark = Color(0xFF5E1700)
-val tertiaryContainerDark = Color(0xFFF47549FDC2B1)
-val onTertiaryContainerDark = Color(0xFF5E1700)
-val errorDark = Color(0xFFFFB3AE)
-val onErrorDark = Color(0xFF68000C)
-val errorContainerDark = Color(0xFFFF5353)
-val onErrorContainerDark = Color(0xFF5B0009)
-val backgroundDark = Color(0xFF0F1415)
-val onBackgroundDark = Color(0xFFDFE3E4)
-val surfaceDark = Color(0xFF3C392B)
-val onSurfaceDark = Color(0xFFE6E2DF)
-val surfaceVariantDark = Color(0xFF48473F)
-val onSurfaceVariantDark = Color(0xFFCAC6BC)
-val outlineDark = Color(0xFF939187)
-val outlineVariantDark = Color(0xFF48473F)
+val primaryDark = Color(0xFF01AF57)
+val onPrimaryDark = Color(0xFF061B0E)
+val primaryContainerDark = Color(0xFF0B3820)
+val onPrimaryContainerDark = Color(0xFF6FF9B4)
+val secondaryDark = Color(0xFF26C6DA)
+val onSecondaryDark = Color(0xFF062024)
+val secondaryContainerDark = Color(0xFF102E38)
+val onSecondaryContainerDark = Color(0xFF9CEFFF)
+val tertiaryDark = Color(0xFF3DDC84)
+val onTertiaryDark = Color(0xFF061B0E)
+val tertiaryContainerDark = Color(0xFF0D3B23)
+val onTertiaryContainerDark = Color(0xFF8CF5B7)
+val errorDark = Color(0xFFFF897D)
+val onErrorDark = Color(0xFF4C0002)
+val errorContainerDark = Color(0xFF3B1518)
+val onErrorContainerDark = Color(0xFFFFB4AB)
+val backgroundDark = Color(0xFF131314)
+val onBackgroundDark = Color(0xFFF1F3F4)
+val surfaceDark = Color(0xFF131314)
+val onSurfaceDark = Color(0xFFF1F3F4)
+val surfaceVariantDark = Color(0xFF23272C)
+val onSurfaceVariantDark = Color(0xFFA8AEB5)
+val outlineDark = AdsBlue
+val outlineVariantDark = Color(0xFF2C333A)
val scrimDark = Color(0xFF000000)
-val inverseSurfaceDark = Color(0xFFA2CCF7)
-val inverseOnSurfaceDark = Color(0xFF31302F)
-val inversePrimaryDark = Color(0xFF006875)
-val surfaceDimDark = Color(0xFF121214)
-val surfaceBrightDark = Color(0xFF37383a)
-val surfaceContainerLowestDark = Color(0xFF0d0d0f)
-val surfaceContainerLowDark = Color(0xFF1A1A1C)
-val surfaceContainerDark = Color(0xFF1E1E20)
-val surfaceContainerHighDark = Color(0xFF28292B)
-val surfaceContainerHighestDark = Color(0xFF333436)
+val inverseSurfaceDark = Color(0xFFEEEEEE)
+val inverseOnSurfaceDark = Color(0xFF131314)
+val inversePrimaryDark = Color(0xFF006D35)
+val surfaceDimDark = Color(0xFF0E0F10)
+val surfaceBrightDark = Color(0xFF2C3137)
+val surfaceContainerLowestDark = Color(0xFF0D0E10)
+val surfaceContainerLowDark = Color(0xFF181A1D)
+val surfaceContainerDark = Color(0xFF1D2024)
+val surfaceContainerHighDark = Color(0xFF25292E)
+val surfaceContainerHighestDark = Color(0xFF2E3339)
// Semantic colors
-val StarRatingGold = Color(0xFFFFB300)
-val ShimmerPlaceholderGray = Color(0xFFE0E0E0)
-val TimelineNodeBorderGreen = Color(0xFFDDF8D8)
-val TimelineAudioBorderBlue = Color(0xFF299EAF)
-
+val StarRatingGold = Color(0xFFFFC107)
+val ShimmerPlaceholderGray = Color(0xFF2E3339)
+val TimelineNodeBorderGreen = Color(0xFF0B3820)
+val TimelineAudioBorderBlue = Color(0xFFFDADEE)
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/EventColors.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/EventColors.kt
index 979f9edd..583a85a8 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/EventColors.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/EventColors.kt
@@ -21,11 +21,11 @@ import androidx.compose.ui.graphics.Color
data class EventColor(val container: Color, val content: Color)
object EventColors {
- val Flight = EventColor(container = Color(0xFFF3E5F5), content = Color(0xFF8523C2))
- val Hotel = EventColor(container = Color(0xFFE3F2FD), content = Color(0xFF1976D2))
- val Activity = EventColor(container = Color(0xFFFFF3E0), content = Color(0xFFE65100))
- val Museum = EventColor(container = Color(0xFFFFF3E0), content = Color(0xFF8BC34A))
- val Food = EventColor(container = Color(0xFFE8F5E9), content = Color(0xFF2E7D32))
- val Shopping = EventColor(container = Color(0xFFFCE4EC), content = Color(0xFFC2185B))
- val Entertainment = EventColor(container = Color(0xFFFFFDE7), content = Color(0xFFFBC02D))
+ val Flight = EventColor(container = Color(0xFF102A4C), content = Color(0xFF60A5FA))
+ val Hotel = EventColor(container = Color(0xFF0D333B), content = Color(0xFF26C6DA))
+ val Activity = EventColor(container = Color(0xFF0B3820), content = Color(0xFF3DDC84))
+ val Museum = EventColor(container = Color(0xFF12362C), content = Color(0xFF38D9A9))
+ val Food = EventColor(container = Color(0xFF0A3622), content = Color(0xFF01AF57))
+ val Shopping = EventColor(container = Color(0xFF3E1F38), content = Color(0xFFFDADEE))
+ val Entertainment = EventColor(container = Color(0xFF241B4B), content = Color(0xFFA78BFA))
}
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Theme.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Theme.kt
index ce1a01b2..9f5eb893 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Theme.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/Theme.kt
@@ -102,7 +102,7 @@ private val LightColorScheme =
@Composable
fun JetPackerTheme(
- darkTheme: Boolean = isSystemInDarkTheme(),
+ darkTheme: Boolean = true,
content: @Composable () -> Unit,
) {
val colorScheme =
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerExtendedFloatingActionButton.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerExtendedFloatingActionButton.kt
index 229c75b9..18a8b7da 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerExtendedFloatingActionButton.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerExtendedFloatingActionButton.kt
@@ -61,6 +61,8 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.example.jetpacker.core.ui.AdsGreen
+import com.example.jetpacker.core.ui.AdsGreenBright
import com.example.jetpacker.core.ui.JetPackerTheme
@Composable
@@ -74,19 +76,18 @@ fun JetPackerExtendedFloatingActionButton(
trailingContent: @Composable (RowScope.() -> Unit)? = null,
) {
val shape = CircleShape
- val inverseSurface = MaterialTheme.colorScheme.inverseSurface
Row(
modifier =
modifier
.dropShadow(shape = shape) {
- radius = 0f
+ radius = 16.dp.toPx()
spread = 0f
- offset = Offset(x = 2.dp.toPx(), y = 3.dp.toPx())
- color = inverseSurface
+ offset = Offset(x = 0f, y = 4.dp.toPx())
+ color = AdsGreen.copy(alpha = 0.35f)
}
.background(MaterialTheme.colorScheme.primary, shape)
- .border(1.dp, MaterialTheme.colorScheme.onSurfaceVariant, shape)
+ .border(1.dp, AdsGreenBright.copy(alpha = 0.45f), shape)
.clip(shape)
.padding(horizontal = 8.dp, vertical = 12.dp)
.height(IntrinsicSize.Min),
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerFab.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerFab.kt
index 0535f535..0e11c55d 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerFab.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerFab.kt
@@ -43,6 +43,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import com.example.jetpacker.core.ui.AdsToolbarBorderBrush
import com.example.jetpacker.core.ui.JetPackerTheme
@Composable
@@ -51,22 +52,22 @@ fun JetPackerFab(
icon: ImageVector,
contentDescription: String?,
modifier: Modifier = Modifier,
- containerColor: Color = MaterialTheme.colorScheme.tertiary,
- contentColor: Color = MaterialTheme.colorScheme.onTertiary,
+ containerColor: Color = MaterialTheme.colorScheme.primary,
+ contentColor: Color = MaterialTheme.colorScheme.onPrimary,
) {
val shape = RoundedCornerShape(16.dp)
Box(
modifier = modifier
.sizeIn(minWidth = 56.dp, minHeight = 56.dp)
- .border(1.dp, MaterialTheme.colorScheme.onSurface, shape = shape)
.dropShadow(shape = shape) {
- radius = 0f
+ radius = 12.dp.toPx()
spread = 0f
- offset = Offset(x = 2.dp.toPx(), y = 3.dp.toPx())
- color = Color(0xFF20290A)
+ offset = Offset(x = 0f, y = 4.dp.toPx())
+ color = Color.Black.copy(alpha = 0.5f)
}
.background(containerColor, shape)
+ .border(1.5.dp, AdsToolbarBorderBrush, shape = shape)
.clip(shape)
.clickable { onClick() },
contentAlignment = Alignment.Center,
diff --git a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerToolbar.kt b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerToolbar.kt
index acca5fd4..d23ab8fb 100644
--- a/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerToolbar.kt
+++ b/jetpacker/android/core/ui/src/main/kotlin/com/example/jetpacker/core/ui/components/JetPackerToolbar.kt
@@ -20,6 +20,7 @@ import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.animateOffsetAsState
import androidx.compose.animation.core.animateSizeAsState
import androidx.compose.foundation.background
+import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -62,6 +63,7 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
+import com.example.jetpacker.core.ui.AdsToolbarBorderBrush
import com.example.jetpacker.core.ui.JetPackerTheme
import kotlin.math.roundToInt
@@ -92,17 +94,12 @@ fun JetPackerToolbar(modifier: Modifier = Modifier, content: @Composable RowScop
modifier =
modifier
.dropShadow(shape = shape) {
- radius = 3.dp.toPx()
- offset = Offset(0f, 1.dp.toPx())
- color = Color.Black.copy(alpha = 0.3f)
- }
- .dropShadow(shape = shape) {
- radius = 8.dp.toPx()
+ radius = 12.dp.toPx()
offset = Offset(0f, 4.dp.toPx())
- spread = 3.dp.toPx()
- color = Color.Black.copy(alpha = 0.15f)
+ color = Color.Black.copy(alpha = 0.55f)
}
- .background(MaterialTheme.colorScheme.onSurface, shape)
+ .background(MaterialTheme.colorScheme.surfaceContainerLow, shape)
+ .border(1.5.dp, AdsToolbarBorderBrush, shape)
.onGloballyPositioned { state.toolbarCoords = it }
) {
if (state.selectedBounds != null) {
@@ -144,8 +141,8 @@ fun JetPackerToolbarAction(
val contentColor by
animateColorAsState(
targetValue =
- if (selected) MaterialTheme.colorScheme.onSurfaceVariant
- else MaterialTheme.colorScheme.surfaceContainer,
+ if (selected) MaterialTheme.colorScheme.onPrimary
+ else MaterialTheme.colorScheme.onSurfaceVariant,
label = "contentColor",
)
diff --git a/jetpacker/android/feature/appfunctions/src/main/java/com/example/jetpacker/feature/appfunctions/JetPackerAppFunctionService.kt b/jetpacker/android/feature/appfunctions/src/main/java/com/example/jetpacker/feature/appfunctions/JetPackerAppFunctionService.kt
index 96e67a02..c1b18e04 100644
--- a/jetpacker/android/feature/appfunctions/src/main/java/com/example/jetpacker/feature/appfunctions/JetPackerAppFunctionService.kt
+++ b/jetpacker/android/feature/appfunctions/src/main/java/com/example/jetpacker/feature/appfunctions/JetPackerAppFunctionService.kt
@@ -145,11 +145,11 @@ abstract class BaseJetPackerAppFunctionService : Hilt_BaseJetPackerAppFunctionSe
/**
* Adds an expense to a trip. Call this ONLY when the user explicitly asks to add, log, or record
- * an expense (e.g., 'Please add 45 dollars for the airport Uber to Mountain View' or in a
+ * an expense (e.g., 'Please add 45 dollars for the airport taxi to Mountain View' or in a
* follow-up turn 'Great, I just bought it, can you add that to my expenses?'). Do NOT call this
* when the user is only asking how much budget they have left or whether they can afford an item.
*
- * @param title The title or description of the expense (e.g., 'Airport Uber to Mountain View',
+ * @param title The title or description of the expense (e.g., 'Airport taxi to Mountain View',
* 'SFMOMA Museum Ticket', 'Mechanical Keyboard').
* @param amount The numeric amount of the expense (e.g., 45.0, 25.0, 180.0).
* @param currency The currency code of the expense (e.g., 'USD', 'EUR', 'JPY', 'GBP'). Extract
diff --git a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/documents/DocumentsScreen.kt b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/documents/DocumentsScreen.kt
index 9ba7260d..304bd307 100644
--- a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/documents/DocumentsScreen.kt
+++ b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/documents/DocumentsScreen.kt
@@ -144,6 +144,9 @@ import androidx.compose.ui.unit.dp
import androidx.core.content.FileProvider
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsIconBadgeDark
+import com.example.jetpacker.core.ui.AdsIconBadgeLight
import com.example.jetpacker.core.ui.components.JetPackerFabConfig
import com.example.jetpacker.data.itinerary.TimelineEvent
import com.example.jetpacker.data.itinerary.TravelDocument
@@ -1050,7 +1053,7 @@ private fun DocumentCard(
shape = RoundedCornerShape(20.dp),
colors =
CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainerLow),
- border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f)),
+ border = BorderStroke(1.dp, AdsBorderBrush),
) {
Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
// Top header row: Icon + Title/Subtitle + Overflow Menu
@@ -1061,16 +1064,16 @@ private fun DocumentCard(
) {
Row(modifier = Modifier.weight(1f), verticalAlignment = Alignment.CenterVertically) {
Surface(
- shape = RoundedCornerShape(12.dp),
- color = MaterialTheme.colorScheme.secondaryContainer,
- modifier = Modifier.size(44.dp),
+ shape = CircleShape,
+ color = AdsIconBadgeLight,
+ modifier = Modifier.size(40.dp),
) {
Box(contentAlignment = Alignment.Center) {
Icon(
imageVector = icon,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onSecondaryContainer,
- modifier = Modifier.size(24.dp),
+ tint = AdsIconBadgeDark,
+ modifier = Modifier.size(22.dp),
)
}
}
@@ -1232,7 +1235,7 @@ private fun DocumentCard(
DocumentValidity.EXPIRING_SOON -> {
Surface(
shape = RoundedCornerShape(8.dp),
- color = MaterialTheme.colorScheme.tertiaryContainer,
+ color = Color(0xFF3B2A08),
) {
Row(
modifier = Modifier.padding(horizontal = 8.dp, vertical = 3.dp),
@@ -1241,14 +1244,14 @@ private fun DocumentCard(
Icon(
imageVector = Icons.Default.Warning,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onTertiaryContainer,
+ tint = Color(0xFFFFD54F),
modifier = Modifier.size(13.dp),
)
Spacer(modifier = Modifier.width(4.dp))
Text(
text = "Expires soon (${formatExpiryDate(document.expiryDate)})",
style = MaterialTheme.typography.labelSmall,
- color = MaterialTheme.colorScheme.onTertiaryContainer,
+ color = Color(0xFFFFD54F),
fontWeight = FontWeight.SemiBold,
)
}
@@ -1257,7 +1260,7 @@ private fun DocumentCard(
DocumentValidity.EXPIRED -> {
Surface(
shape = RoundedCornerShape(8.dp),
- color = MaterialTheme.colorScheme.errorContainer,
+ color = Color(0xFF421114),
) {
Row(
modifier = Modifier.padding(horizontal = 8.dp, vertical = 3.dp),
@@ -1266,25 +1269,43 @@ private fun DocumentCard(
Icon(
imageVector = Icons.Default.Warning,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onErrorContainer,
+ tint = Color(0xFFFFB4AB),
modifier = Modifier.size(13.dp),
)
Spacer(modifier = Modifier.width(4.dp))
Text(
text = "Expired (${formatExpiryDate(document.expiryDate)})",
style = MaterialTheme.typography.labelSmall,
- color = MaterialTheme.colorScheme.onErrorContainer,
+ color = Color(0xFFFFB4AB),
fontWeight = FontWeight.SemiBold,
)
}
}
}
DocumentValidity.VALID -> {
- Text(
- text = "Valid ยท ${formatExpiryDate(document.expiryDate)}",
- style = MaterialTheme.typography.labelSmall,
- color = MaterialTheme.colorScheme.onSurfaceVariant,
- )
+ Surface(
+ shape = RoundedCornerShape(8.dp),
+ color = Color(0xFF063E20),
+ ) {
+ Row(
+ modifier = Modifier.padding(horizontal = 8.dp, vertical = 3.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ imageVector = Icons.Default.CheckCircle,
+ contentDescription = null,
+ tint = Color(0xFF6DD58C),
+ modifier = Modifier.size(13.dp),
+ )
+ Spacer(modifier = Modifier.width(4.dp))
+ Text(
+ text = "Valid (${formatExpiryDate(document.expiryDate)})",
+ style = MaterialTheme.typography.labelSmall,
+ color = Color(0xFF6DD58C),
+ fontWeight = FontWeight.SemiBold,
+ )
+ }
+ }
}
DocumentValidity.NONE -> {}
}
diff --git a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/history/ChatHistoryScreen.kt b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/history/ChatHistoryScreen.kt
index 7a1f3fea..539bcdea 100644
--- a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/history/ChatHistoryScreen.kt
+++ b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/history/ChatHistoryScreen.kt
@@ -155,7 +155,7 @@ fun ChatHistoryScreen(
style =
MaterialTheme.typography.titleLarge.copy(
fontFamily = SekuyaFontFamily,
- fontSize = 22.sp,
+ fontSize = 17.sp,
),
color = MaterialTheme.colorScheme.onSurface,
)
@@ -553,7 +553,7 @@ private fun ActionStepPill(step: UserActionStep) {
Icon(
imageVector = Icons.Rounded.CheckCircle,
contentDescription = "Completed",
- tint = Color(0xFF2E7D32),
+ tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(16.dp),
)
}
@@ -613,10 +613,10 @@ private fun EmptyChatHistoryView(
onClick = onStartChat,
colors =
ButtonDefaults.buttonColors(
- containerColor = MaterialTheme.colorScheme.secondary,
- contentColor = MaterialTheme.colorScheme.onSecondary,
+ containerColor = MaterialTheme.colorScheme.primary,
+ contentColor = MaterialTheme.colorScheme.onPrimary,
),
- shape = RoundedCornerShape(16.dp),
+ shape = RoundedCornerShape(24.dp),
contentPadding = PaddingValues(horizontal = 20.dp, vertical = 12.dp),
) {
Icon(
diff --git a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/ui/TravelAssistantCard.kt b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/ui/TravelAssistantCard.kt
index ba743f01..8b49ac2d 100644
--- a/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/ui/TravelAssistantCard.kt
+++ b/jetpacker/android/feature/assistant/src/main/kotlin/com/example/jetpacker/feature/assistant/ui/TravelAssistantCard.kt
@@ -98,6 +98,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsLoadingBorderBrush
import com.example.jetpacker.feature.assistant.TravelAssistantViewModel
import com.example.jetpacker.feature.assistant.model.ActionStepCategory
import com.example.jetpacker.feature.assistant.model.ActionStepStatus
@@ -156,11 +158,17 @@ fun TravelAssistantCard(
}
}
+ val isAssistantLoading = uiState is Thinking || uiState is ExecutingTool || voiceState.isListening
+
Card(
modifier = modifier.fillMaxWidth(),
shape = MaterialTheme.shapes.large,
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface),
- border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline),
+ border =
+ BorderStroke(
+ if (isAssistantLoading) 1.5.dp else 1.dp,
+ if (isAssistantLoading) AdsLoadingBorderBrush else AdsBorderBrush,
+ ),
) {
Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
// Header: Assistant title, Nano badge, Documents button, and Reset button
@@ -992,6 +1000,13 @@ fun AmbientTripAssistantSheet(
}
}
+ val isSheetLoading =
+ displayOverlayState is AssistantOverlayState.PerformingActions ||
+ displayOverlayState is AssistantOverlayState.Listening ||
+ uiState is Thinking ||
+ uiState is ExecutingTool ||
+ voiceState.isListening
+
val sheetShape = RoundedCornerShape(24.dp)
Surface(
modifier =
@@ -1007,7 +1022,11 @@ fun AmbientTripAssistantSheet(
color = MaterialTheme.colorScheme.surfaceContainerHigh,
tonalElevation = 6.dp,
shadowElevation = 0.dp,
- border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant),
+ border =
+ BorderStroke(
+ if (isSheetLoading) 1.5.dp else 1.dp,
+ if (isSheetLoading) AdsLoadingBorderBrush else AdsBorderBrush,
+ ),
) {
Box(
modifier =
diff --git a/jetpacker/android/feature/create_trip/src/main/kotlin/com/example/jetpacker/feature/create_trip/CreateTripPanel.kt b/jetpacker/android/feature/create_trip/src/main/kotlin/com/example/jetpacker/feature/create_trip/CreateTripPanel.kt
index f8c01607..fa042f16 100644
--- a/jetpacker/android/feature/create_trip/src/main/kotlin/com/example/jetpacker/feature/create_trip/CreateTripPanel.kt
+++ b/jetpacker/android/feature/create_trip/src/main/kotlin/com/example/jetpacker/feature/create_trip/CreateTripPanel.kt
@@ -156,7 +156,7 @@ fun CreateTripPanelContent(
fontSize = 22.sp,
fontFamily = SekuyaFontFamily,
),
- color = MaterialTheme.colorScheme.secondary,
+ color = MaterialTheme.colorScheme.onSurface,
)
}
},
diff --git a/jetpacker/android/feature/detail/hotel_chat/src/main/kotlin/com/example/jetpacker/feature/detail/hotel_chat/HotelSupportChat.kt b/jetpacker/android/feature/detail/hotel_chat/src/main/kotlin/com/example/jetpacker/feature/detail/hotel_chat/HotelSupportChat.kt
index 6eb061a1..c3136094 100644
--- a/jetpacker/android/feature/detail/hotel_chat/src/main/kotlin/com/example/jetpacker/feature/detail/hotel_chat/HotelSupportChat.kt
+++ b/jetpacker/android/feature/detail/hotel_chat/src/main/kotlin/com/example/jetpacker/feature/detail/hotel_chat/HotelSupportChat.kt
@@ -253,7 +253,11 @@ fun UserMessageRowFixed(message: SupportChatMessage) {
.background(UserBubble)
.padding(16.dp)
) {
- Text(text = message.text, color = Color.White, style = MaterialTheme.typography.bodyMedium)
+ Text(
+ text = message.text,
+ color = Color(0xFF061B0E),
+ style = MaterialTheme.typography.bodyMedium,
+ )
}
Spacer(modifier = Modifier.width(8.dp))
Icon(
@@ -276,9 +280,9 @@ fun BotMessageRowFixed(
Icon(
Icons.Filled.Face,
contentDescription = "Other",
- tint = TextSecondary,
+ tint = Color(0xFF131314),
modifier =
- Modifier.size(32.dp).clip(CircleShape).background(Color(0xFFE2E8F0)).padding(4.dp),
+ Modifier.size(32.dp).clip(CircleShape).background(Color(0xFFEEEEEE)).padding(4.dp),
)
Spacer(modifier = Modifier.width(8.dp))
Text(
@@ -316,11 +320,11 @@ fun BotMessageRowFixed(
}
}
-val PrimaryBlue = Color(0xFF0F172A)
-val UserBubble = Color(0xFF0F172A)
-val BotBubble = Color(0xFFF1F5F9)
-val TextPrimary = Color(0xFF1E293B)
-val TextSecondary = Color(0xFF64748B)
+val PrimaryBlue = Color(0xFF01AF57)
+val UserBubble = Color(0xFF01AF57)
+val BotBubble = Color(0xFF1E2024)
+val TextPrimary = Color(0xFFF1F3F4)
+val TextSecondary = Color(0xFF9AA0A6)
@Composable
fun InputBar(
@@ -334,7 +338,7 @@ fun InputBar(
modifier =
Modifier.padding(16.dp)
.clip(RoundedCornerShape(32.dp))
- .background(Color(0xFFF1F5F9))
+ .background(Color(0xFF1E2024))
.padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
diff --git a/jetpacker/android/feature/detail/museum_assistant/src/main/kotlin/com/example/jetpacker/feature/detail/museum_assistant/ChatbotScreen.kt b/jetpacker/android/feature/detail/museum_assistant/src/main/kotlin/com/example/jetpacker/feature/detail/museum_assistant/ChatbotScreen.kt
index 043cb81e..5ffdc9e3 100644
--- a/jetpacker/android/feature/detail/museum_assistant/src/main/kotlin/com/example/jetpacker/feature/detail/museum_assistant/ChatbotScreen.kt
+++ b/jetpacker/android/feature/detail/museum_assistant/src/main/kotlin/com/example/jetpacker/feature/detail/museum_assistant/ChatbotScreen.kt
@@ -69,11 +69,11 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-val PrimaryBlue = Color(0xFF0F172A)
-val UserBubble = Color(0xFF0F172A)
-val BotBubble = Color(0xFFF1F5F9)
-val TextPrimary = Color(0xFF1E293B)
-val TextSecondary = Color(0xFF64748B)
+val PrimaryBlue = Color(0xFF01AF57)
+val UserBubble = Color(0xFF01AF57)
+val BotBubble = Color(0xFF1E2024)
+val TextPrimary = Color(0xFFF1F3F4)
+val TextSecondary = Color(0xFF9AA0A6)
data class ChatMessage(val id: Int, val text: String, val isUser: Boolean, val sender: String)
@@ -180,7 +180,11 @@ fun UserMessageRow(message: ChatMessage) {
.background(UserBubble)
.padding(16.dp)
) {
- Text(text = message.text, color = Color.White, style = MaterialTheme.typography.bodyMedium)
+ Text(
+ text = message.text,
+ color = Color(0xFF061B0E),
+ style = MaterialTheme.typography.bodyMedium,
+ )
}
Spacer(modifier = Modifier.width(8.dp))
Icon(Icons.Filled.AccountCircle, contentDescription = "User", modifier = Modifier.size(32.dp))
@@ -234,7 +238,7 @@ fun InputBar(
modifier =
Modifier.padding(16.dp)
.clip(RoundedCornerShape(32.dp))
- .background(Color(0xFFF1F5F9))
+ .background(Color(0xFF1E2024))
.padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {
diff --git a/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/MuseumDetailScreen.kt b/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/MuseumDetailScreen.kt
index 5e79c190..7a7fb408 100644
--- a/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/MuseumDetailScreen.kt
+++ b/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/MuseumDetailScreen.kt
@@ -315,13 +315,13 @@ fun MuseumDetailScreen(
Modifier.fillMaxWidth()
.height(120.dp)
.clip(RoundedCornerShape(16.dp))
- .background(Color(0xFFE0E0E0)),
+ .background(MaterialTheme.colorScheme.surfaceContainerHighest),
contentAlignment = Alignment.Center,
) {
Icon(
Icons.Rounded.Map,
contentDescription = "Map Placeholder",
- tint = Color.Gray,
+ tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(48.dp),
)
}
@@ -347,7 +347,7 @@ fun MuseumDetailScreen(
modifier = Modifier.height(56.dp).fillMaxWidth(),
colors =
ButtonDefaults.buttonColors(
- containerColor = MaterialTheme.colorScheme.tertiary,
+ containerColor = MaterialTheme.colorScheme.primary,
contentColor = MaterialTheme.colorScheme.onPrimary,
),
) {
diff --git a/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/TourDetailScreen.kt b/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/TourDetailScreen.kt
index 91a1996b..ac49e2b0 100644
--- a/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/TourDetailScreen.kt
+++ b/jetpacker/android/feature/detail/src/main/kotlin/com/example/jetpacker/feature/detail/TourDetailScreen.kt
@@ -270,13 +270,13 @@ fun TourDetailScreen(
Modifier.fillMaxWidth()
.height(120.dp)
.clip(RoundedCornerShape(16.dp))
- .background(Color(0xFFE0E0E0)),
+ .background(MaterialTheme.colorScheme.surfaceContainerHighest),
contentAlignment = Alignment.Center,
) {
Icon(
Icons.Rounded.Map,
contentDescription = "Map Placeholder",
- tint = Color.Gray,
+ tint = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.size(48.dp),
)
}
diff --git a/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/SectionHeader.kt b/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/SectionHeader.kt
index 9b4ce4bd..44e3875b 100644
--- a/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/SectionHeader.kt
+++ b/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/SectionHeader.kt
@@ -21,6 +21,7 @@ import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.togetherWith
+import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -54,6 +55,7 @@ import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInParent
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
+import com.example.jetpacker.core.ui.AdsBorderBrush
import com.example.jetpacker.core.ui.SekuyaFontFamily
@Composable
@@ -119,7 +121,9 @@ fun SectionHeader(
if (isExpandable) {
Box(
modifier =
- Modifier.size(40.dp).border(2.dp, MaterialTheme.colorScheme.outline, CircleShape),
+ Modifier.size(40.dp)
+ .background(MaterialTheme.colorScheme.surfaceContainerLow, CircleShape)
+ .border(1.5.dp, AdsBorderBrush, CircleShape),
contentAlignment = Alignment.Center,
) {
AnimatedContent(
diff --git a/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/components/TripCard.kt b/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/components/TripCard.kt
index ad37eacb..59711a9b 100644
--- a/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/components/TripCard.kt
+++ b/jetpacker/android/feature/home/src/main/kotlin/com/example/jetpacker/feature/home/components/TripCard.kt
@@ -73,6 +73,9 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsIconBadgeDark
+import com.example.jetpacker.core.ui.AdsIconBadgeLight
import com.example.jetpacker.core.ui.JetPackerTheme
import com.example.jetpacker.core.ui.R as CoreUiR
import com.example.jetpacker.core.ui.SekuyaFontFamily
@@ -163,8 +166,8 @@ fun TripCard(
Modifier.fillMaxWidth()
.clip(RoundedCornerShape(40.dp))
.then(modifier)
- .background(MaterialTheme.colorScheme.surface)
- .border(1.dp, MaterialTheme.colorScheme.outline, RoundedCornerShape(40.dp))
+ .background(MaterialTheme.colorScheme.surfaceContainerLow)
+ .border(1.5.dp, AdsBorderBrush, RoundedCornerShape(40.dp))
.clickable(onClick = onClick)
.padding(16.dp),
config = {
@@ -275,19 +278,19 @@ private fun TripInfoItem(icon: ImageVector, text: String, modifier: Modifier = M
Row(
modifier = modifier,
verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(8.dp),
+ horizontalArrangement = Arrangement.spacedBy(10.dp),
) {
Surface(
modifier = Modifier.size(32.dp),
- color = MaterialTheme.colorScheme.primary,
- shape = RoundedCornerShape(12.dp),
+ color = AdsIconBadgeLight,
+ shape = CircleShape,
) {
Box(contentAlignment = Alignment.Center) {
Icon(
imageVector = icon,
contentDescription = null,
- modifier = Modifier.size(20.dp),
- tint = MaterialTheme.colorScheme.onPrimary,
+ modifier = Modifier.size(18.dp),
+ tint = AdsIconBadgeDark,
)
}
}
diff --git a/jetpacker/android/feature/trip/booking_assistant/src/main/kotlin/com/example/jetpacker/feature/booking_assistant/BookingAssistantScreen.kt b/jetpacker/android/feature/trip/booking_assistant/src/main/kotlin/com/example/jetpacker/feature/booking_assistant/BookingAssistantScreen.kt
index 4f4d6f99..8f5f4b74 100644
--- a/jetpacker/android/feature/trip/booking_assistant/src/main/kotlin/com/example/jetpacker/feature/booking_assistant/BookingAssistantScreen.kt
+++ b/jetpacker/android/feature/trip/booking_assistant/src/main/kotlin/com/example/jetpacker/feature/booking_assistant/BookingAssistantScreen.kt
@@ -105,9 +105,9 @@ fun BookingAssistantScreen(
Scaffold(
modifier = modifier.fillMaxSize(),
- containerColor = MaterialTheme.colorScheme.primary,
+ containerColor = MaterialTheme.colorScheme.background,
topBar = {
- Column(modifier = Modifier.background(MaterialTheme.colorScheme.primary)) {
+ Column(modifier = Modifier.background(MaterialTheme.colorScheme.background)) {
TopAppBar(
title = {
Text(
@@ -115,10 +115,9 @@ fun BookingAssistantScreen(
style =
MaterialTheme.typography.titleLarge.copy(
fontFamily = SekuyaFontFamily,
- fontSize = 24.sp,
- letterSpacing = 0.5.sp,
+ fontSize = 17.sp,
),
- color = Color(0xFF1E293B),
+ color = MaterialTheme.colorScheme.onSurface,
)
},
navigationIcon = {
@@ -126,7 +125,7 @@ fun BookingAssistantScreen(
Icon(
imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
contentDescription = "Back",
- tint = Color(0xFF1E293B),
+ tint = MaterialTheme.colorScheme.onSurface,
)
}
},
@@ -135,19 +134,19 @@ fun BookingAssistantScreen(
Icon(
imageVector = Icons.Rounded.Refresh,
contentDescription = "Reset Bookings",
- tint = Color(0xFF1E293B).copy(alpha = 0.4f),
+ tint = MaterialTheme.colorScheme.onSurface,
)
}
},
colors =
TopAppBarDefaults.topAppBarColors(
- containerColor = MaterialTheme.colorScheme.primary,
+ containerColor = MaterialTheme.colorScheme.background,
),
)
if (isStreaming) {
LinearProgressIndicator(
- modifier = Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.secondary,
+ modifier = Modifier.fillMaxWidth().height(3.dp),
+ color = MaterialTheme.colorScheme.primary,
trackColor = Color.Transparent,
)
}
diff --git a/jetpacker/android/feature/trip/expenses/src/main/kotlin/com/example/jetpacker/feature/expenses/ManageExpensesScreen.kt b/jetpacker/android/feature/trip/expenses/src/main/kotlin/com/example/jetpacker/feature/expenses/ManageExpensesScreen.kt
index 91de3a09..8b5f40ef 100644
--- a/jetpacker/android/feature/trip/expenses/src/main/kotlin/com/example/jetpacker/feature/expenses/ManageExpensesScreen.kt
+++ b/jetpacker/android/feature/trip/expenses/src/main/kotlin/com/example/jetpacker/feature/expenses/ManageExpensesScreen.kt
@@ -28,6 +28,7 @@ import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
+import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -113,6 +114,10 @@ import androidx.compose.ui.unit.sp
import androidx.graphics.shapes.toPath
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsIconBadgeDark
+import com.example.jetpacker.core.ui.AdsIconBadgeLight
+import com.example.jetpacker.core.ui.AdsLoadingBorderBrush
import com.example.jetpacker.core.ui.EventColors
import com.example.jetpacker.core.ui.SekuyaFontFamily
import com.example.jetpacker.data.itinerary.Expense
@@ -241,7 +246,7 @@ fun ManageExpensesScreen(
title = {
Text(
"Expenses",
- style = MaterialTheme.typography.titleLarge,
+ style = MaterialTheme.typography.titleLarge.copy(fontSize = 17.sp),
color = MaterialTheme.colorScheme.onSurface,
fontFamily = SekuyaFontFamily,
)
@@ -283,7 +288,16 @@ fun ManageExpensesScreen(
) {
val totalText = "$${"%.2f".format(totalSpent)}"
- Surface(shape = RoundedCornerShape(30.dp), color = MaterialTheme.colorScheme.surface) {
+ Surface(
+ shape = RoundedCornerShape(30.dp),
+ color = MaterialTheme.colorScheme.surfaceContainerLow,
+ modifier =
+ Modifier.border(
+ 1.5.dp,
+ if (isProcessing.value) AdsLoadingBorderBrush else AdsBorderBrush,
+ RoundedCornerShape(30.dp),
+ ),
+ ) {
Text(
text = totalText,
style =
@@ -312,14 +326,14 @@ fun ManageExpensesScreen(
Spacer(modifier = Modifier.width(8.dp))
Surface(
shape = RoundedCornerShape(30.dp),
- color = MaterialTheme.colorScheme.onSurface,
+ color = MaterialTheme.colorScheme.primary,
modifier = Modifier.clickable { isBudgetSheetVisible = true },
) {
Text(
text = "$${budget.toInt()}",
style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.Black,
- color = MaterialTheme.colorScheme.surface,
+ color = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier.padding(horizontal = 16.dp, vertical = 12.dp),
)
}
@@ -407,7 +421,7 @@ fun ManageExpensesScreen(
}
@Composable
-fun ShimmerExpenseItem() {
+fun ShimmerExpenseItem(modifier: Modifier = Modifier) {
val shimmerColors =
listOf(
Color.LightGray.copy(alpha = 0.6f),
@@ -436,7 +450,8 @@ fun ShimmerExpenseItem() {
)
Card(
- modifier = Modifier.fillMaxWidth(),
+ modifier =
+ modifier.fillMaxWidth().border(1.5.dp, AdsLoadingBorderBrush, RoundedCornerShape(12.dp)),
shape = RoundedCornerShape(12.dp),
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer),
) {
@@ -541,29 +556,21 @@ fun ExpenseItem(
},
) {
Card(
- modifier = Modifier.fillMaxWidth(),
+ modifier = Modifier.fillMaxWidth().border(1.dp, AdsBorderBrush, RoundedCornerShape(12.dp)),
shape = RoundedCornerShape(12.dp),
onClick = onClick,
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer),
) {
Row(modifier = Modifier.padding(16.dp), verticalAlignment = Alignment.CenterVertically) {
- Box(modifier = Modifier.size(50.dp), contentAlignment = Alignment.Center) {
- val shape = MaterialShapes.SoftBoom
- Box(
- modifier =
- Modifier.fillMaxSize().drawWithCache {
- val path = shape.toPath().asComposePath()
- val matrix = Matrix()
- matrix.scale(size.width, size.height)
- path.transform(matrix)
- onDrawBehind { drawPath(path, color = color.content) }
- }
- )
+ Box(
+ modifier = Modifier.size(48.dp).background(AdsIconBadgeLight, CircleShape),
+ contentAlignment = Alignment.Center,
+ ) {
Icon(
imageVector = icon,
contentDescription = null,
- tint = MaterialTheme.colorScheme.surface,
- modifier = Modifier.size(16.dp),
+ tint = AdsIconBadgeDark,
+ modifier = Modifier.size(22.dp),
)
}
diff --git a/jetpacker/android/feature/trip/itinerary/enrichment/src/main/kotlin/com/example/jetpacker/feature/itinerary_enrichment/TripSummaryAndTipsCard.kt b/jetpacker/android/feature/trip/itinerary/enrichment/src/main/kotlin/com/example/jetpacker/feature/itinerary_enrichment/TripSummaryAndTipsCard.kt
index 39a69c03..b44a3872 100644
--- a/jetpacker/android/feature/trip/itinerary/enrichment/src/main/kotlin/com/example/jetpacker/feature/itinerary_enrichment/TripSummaryAndTipsCard.kt
+++ b/jetpacker/android/feature/trip/itinerary/enrichment/src/main/kotlin/com/example/jetpacker/feature/itinerary_enrichment/TripSummaryAndTipsCard.kt
@@ -80,6 +80,9 @@ import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsGlowColors
+import com.example.jetpacker.core.ui.AdsLoadingBorderBrush
import com.example.jetpacker.data.trips.DummyData
import com.example.jetpacker.data.trips.Trip
import java.time.ZoneId
@@ -118,12 +121,7 @@ fun TripSummaryAndTipsCard(modifier: Modifier = Modifier, isLoading: Boolean, su
val xOffset = width * (rotation / 360f)
Brush.linearGradient(
- colors =
- listOf(
- Color(0xFF9CEFFF), // Cyan
- Color(0xFFD2E4FF), // Blue
- Color(0xFFFFB59F), // Pink
- ),
+ colors = AdsGlowColors,
start = Offset(xOffset - width, 0f),
end = Offset(xOffset, 0f),
tileMode = TileMode.Mirror,
@@ -140,13 +138,13 @@ fun TripSummaryAndTipsCard(modifier: Modifier = Modifier, isLoading: Boolean, su
if (isLoaded) {
brush = glowBrush
radius = 24.dp.toPx()
- offset = Offset(x = 0f, y = 16.dp.toPx())
+ offset = Offset(x = 0f, y = 12.dp.toPx())
}
}
- .background(MaterialTheme.colorScheme.surface, RoundedCornerShape(24.dp))
+ .background(MaterialTheme.colorScheme.surfaceContainer, RoundedCornerShape(24.dp))
.border(
- 2.dp,
- if (isLoaded) Color.Transparent else Color.Black.copy(alpha = 0.45f),
+ 1.5.dp,
+ if (isLoading) AdsLoadingBorderBrush else AdsBorderBrush,
RoundedCornerShape(24.dp),
)
.clip(RoundedCornerShape(24.dp))
@@ -245,7 +243,7 @@ fun TripSummaryAndTipsCard(modifier: Modifier = Modifier, isLoading: Boolean, su
.height(40.dp)
.background(
Brush.verticalGradient(
- listOf(Color.Transparent, MaterialTheme.colorScheme.surfaceBright)
+ listOf(Color.Transparent, MaterialTheme.colorScheme.surfaceContainer)
)
)
)
diff --git a/jetpacker/android/feature/trip/itinerary/src/main/kotlin/com/example/jetpacker/feature/itinerary/ItineraryScreen.kt b/jetpacker/android/feature/trip/itinerary/src/main/kotlin/com/example/jetpacker/feature/itinerary/ItineraryScreen.kt
index 21792c1c..1b3b87af 100644
--- a/jetpacker/android/feature/trip/itinerary/src/main/kotlin/com/example/jetpacker/feature/itinerary/ItineraryScreen.kt
+++ b/jetpacker/android/feature/trip/itinerary/src/main/kotlin/com/example/jetpacker/feature/itinerary/ItineraryScreen.kt
@@ -155,6 +155,10 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.compose.AsyncImage
import com.example.jetpacker.core.flags.FeatureFlags
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsIconBadgeDark
+import com.example.jetpacker.core.ui.AdsIconBadgeLight
+import com.example.jetpacker.core.ui.AdsLoadingBorderBrush
import com.example.jetpacker.core.ui.EventColors
import com.example.jetpacker.core.ui.JetPackerTheme
import com.example.jetpacker.core.ui.R
@@ -199,8 +203,8 @@ fun ItineraryScreen(
LocalContext.current
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
- val fabContainerColor = MaterialTheme.colorScheme.secondary
- val fabContentColor = MaterialTheme.colorScheme.onSecondary
+ val fabContainerColor = MaterialTheme.colorScheme.primary
+ val fabContentColor = MaterialTheme.colorScheme.onPrimary
var eventToDelete by remember { mutableStateOf(null) }
@@ -243,19 +247,19 @@ fun ItineraryScreen(
uiState.trip?.title?.uppercase() ?: "ITINERARY",
style =
MaterialTheme.typography.titleLarge.copy(
- fontSize = 22.sp,
+ fontSize = 17.sp,
fontFamily = SekuyaFontFamily,
),
- color = MaterialTheme.colorScheme.secondary,
+ color = MaterialTheme.colorScheme.onSurface,
maxLines = 1,
- autoSize = TextAutoSize.StepBased(minFontSize = 12.sp, maxFontSize = 22.sp),
+ autoSize = TextAutoSize.StepBased(minFontSize = 12.sp, maxFontSize = 17.sp),
)
uiState.trip?.location?.let { location ->
Text(
location,
style = MaterialTheme.typography.labelMedium,
- color = MaterialTheme.colorScheme.onSurface,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}
@@ -272,7 +276,7 @@ fun ItineraryScreen(
},
scrollBehavior = scrollBehavior,
colors =
- TopAppBarDefaults.topAppBarColors(containerColor = MaterialTheme.colorScheme.primary),
+ TopAppBarDefaults.topAppBarColors(containerColor = MaterialTheme.colorScheme.surface),
)
},
containerColor = Color.Transparent,
@@ -645,7 +649,11 @@ fun TimelineItemCard(
) {
Card(
onClick = onClick,
- modifier = modifier.fillMaxWidth().padding(bottom = 16.dp),
+ modifier =
+ modifier
+ .fillMaxWidth()
+ .padding(bottom = 16.dp)
+ .border(1.dp, AdsBorderBrush, RoundedCornerShape(12.dp)),
shape = RoundedCornerShape(12.dp),
colors =
CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer),
@@ -665,23 +673,23 @@ fun TimelineItemCard(
Box(
modifier =
- Modifier.size(50.dp)
+ Modifier.size(48.dp)
.clip(CircleShape)
- .background(MaterialTheme.colorScheme.secondary, MaterialShapes.Burst.toShape()),
+ .background(AdsIconBadgeLight, CircleShape),
contentAlignment = Alignment.Center,
) {
Icon(
imageVector = icon,
contentDescription = null,
- tint = MaterialTheme.colorScheme.onSecondary,
- modifier = Modifier.size(18.dp),
+ tint = AdsIconBadgeDark,
+ modifier = Modifier.size(22.dp),
)
}
Spacer(modifier = Modifier.width(16.dp))
Column(modifier = Modifier.weight(1f)) {
- val tagColor = MaterialTheme.colorScheme.surface
+ val tagColor = eventColors.container
val tagTextColor = eventColors.content
Text(
@@ -691,7 +699,7 @@ fun TimelineItemCard(
color = tagTextColor,
modifier =
Modifier.background(tagColor, RoundedCornerShape(16.dp))
- .border(1.dp, tagTextColor, RoundedCornerShape(16.dp))
+ .border(1.dp, tagTextColor.copy(alpha = 0.6f), RoundedCornerShape(16.dp))
.padding(horizontal = 8.dp, vertical = 2.dp),
)
@@ -775,7 +783,10 @@ fun TimelineShimmerItem(modifier: Modifier = Modifier) {
// Content column
Card(
- modifier = Modifier.fillMaxWidth().padding(bottom = 24.dp),
+ modifier =
+ Modifier.fillMaxWidth()
+ .padding(bottom = 24.dp)
+ .border(1.5.dp, AdsLoadingBorderBrush, MaterialTheme.shapes.medium),
shape = MaterialTheme.shapes.medium,
colors = CardDefaults.elevatedCardColors(),
) {
@@ -841,11 +852,11 @@ fun rememberShimmerBrush(): Brush {
@Composable
fun DashedLine(modifier: Modifier = Modifier) {
- val dashedLineColor = MaterialTheme.colorScheme.onSurface
+ val dashedLineColor = MaterialTheme.colorScheme.onSurfaceVariant
Canvas(modifier = modifier.width(2.dp)) {
- val dashLength = 12.dp.toPx()
- val gapLength = 2.dp.toPx()
+ val dashLength = 8.dp.toPx()
+ val gapLength = 5.dp.toPx()
drawLine(
color = dashedLineColor,
start = Offset(size.width / 2, 0f),
diff --git a/jetpacker/android/feature/trip/src/main/kotlin/com/example/jetpacker/feature/trip/TripScreen.kt b/jetpacker/android/feature/trip/src/main/kotlin/com/example/jetpacker/feature/trip/TripScreen.kt
index fdcb2972..825407c0 100644
--- a/jetpacker/android/feature/trip/src/main/kotlin/com/example/jetpacker/feature/trip/TripScreen.kt
+++ b/jetpacker/android/feature/trip/src/main/kotlin/com/example/jetpacker/feature/trip/TripScreen.kt
@@ -137,8 +137,8 @@ fun TripScreen(
)
},
contentDescription = "Trip Assistant",
- containerColor = MaterialTheme.colorScheme.secondary,
- contentColor = MaterialTheme.colorScheme.onSecondary,
+ containerColor = MaterialTheme.colorScheme.primary,
+ contentColor = MaterialTheme.colorScheme.onPrimary,
)
val assistantEnabled = FeatureFlags.ENABLE_TRAVEL_ASSISTANT
@@ -152,7 +152,7 @@ fun TripScreen(
tabFabConfig ?: if (assistantAvailableOnTab) assistantFabConfig else null
Scaffold(
- containerColor = MaterialTheme.colorScheme.primary,
+ containerColor = MaterialTheme.colorScheme.background,
bottomBar = {
TripBottomBarContainer(
showAssistantOverlay = showAssistantOverlay,
@@ -381,8 +381,8 @@ fun JetPackerBottomBar(
onClick = displayFab.onClick,
icon = displayFab.icon,
contentDescription = displayFab.contentDescription,
- containerColor = displayFab.containerColor ?: MaterialTheme.colorScheme.tertiary,
- contentColor = displayFab.contentColor ?: MaterialTheme.colorScheme.onTertiary,
+ containerColor = displayFab.containerColor ?: MaterialTheme.colorScheme.primary,
+ contentColor = displayFab.contentColor ?: MaterialTheme.colorScheme.onPrimary,
)
}
}
diff --git a/jetpacker/android/feature/trip/voice_notes/src/main/kotlin/com/example/jetpacker/feature/voice_notes/VoiceNotesScreen.kt b/jetpacker/android/feature/trip/voice_notes/src/main/kotlin/com/example/jetpacker/feature/voice_notes/VoiceNotesScreen.kt
index 8133d4b3..a14026bf 100644
--- a/jetpacker/android/feature/trip/voice_notes/src/main/kotlin/com/example/jetpacker/feature/voice_notes/VoiceNotesScreen.kt
+++ b/jetpacker/android/feature/trip/voice_notes/src/main/kotlin/com/example/jetpacker/feature/voice_notes/VoiceNotesScreen.kt
@@ -115,6 +115,8 @@ import androidx.compose.ui.unit.sp
import androidx.core.content.ContextCompat
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.example.jetpacker.core.ui.AdsBorderBrush
+import com.example.jetpacker.core.ui.AdsLoadingBorderBrush
import com.example.jetpacker.core.ui.JetPackerTheme
import com.example.jetpacker.core.ui.SekuyaFontFamily
import com.example.jetpacker.data.itinerary.TimelineEvent
@@ -179,17 +181,17 @@ fun VoiceNotesScreen(
)
}
- val secondary = MaterialTheme.colorScheme.secondary
+ val primary = MaterialTheme.colorScheme.primary
val tertiary = MaterialTheme.colorScheme.tertiary
- val onSecondary = MaterialTheme.colorScheme.onSecondary
+ val onPrimary = MaterialTheme.colorScheme.onPrimary
val onTertiary = MaterialTheme.colorScheme.onTertiary
LaunchedEffect(voiceInputState.isReady, voiceInputState.isListening, voiceInputState.statusText) {
onFabConfigChange(
JetPackerFabConfig(
onClick = handleListenToggle,
- containerColor = if (voiceInputState.isListening) tertiary else secondary,
- contentColor = if (voiceInputState.isListening) onTertiary else onSecondary,
+ containerColor = if (voiceInputState.isListening) tertiary else primary,
+ contentColor = if (voiceInputState.isListening) onTertiary else onPrimary,
icon = if (voiceInputState.isListening) Icons.Rounded.Stop else Icons.Rounded.Mic,
contentDescription = if (voiceInputState.isListening) "Stop" else "Record",
)
@@ -215,7 +217,7 @@ fun VoiceNotesScreen(
style =
MaterialTheme.typography.titleLarge.copy(
fontFamily = SekuyaFontFamily,
- fontSize = 22.sp,
+ fontSize = 17.sp,
),
color = MaterialTheme.colorScheme.onSurface,
)
@@ -326,7 +328,7 @@ fun VoiceModeOverlay(
label = "animation_progress",
)
- JetPackerTheme(darkTheme = false) {
+ JetPackerTheme {
Box(modifier = Modifier.fillMaxSize().clickable { onDismiss() }) {
// 60% Surface Overlay (Scrim)
Box(
@@ -459,14 +461,12 @@ fun ProcessingVoiceNoteItem(placeholder: VoiceNotePlaceholder) {
val shape = RoundedCornerShape(12.dp)
Card(
modifier =
- Modifier.fillMaxWidth().border(1.dp, MaterialTheme.colorScheme.outline, shape).dropShadow(
- shape = shape
- ) {
- radius = 0f
- spread = 0f
- offset = Offset(x = 4.dp.toPx(), y = 6.dp.toPx())
- color = Color(0xFF20290A)
- },
+ Modifier.fillMaxWidth()
+ .border(
+ if (placeholder.isError) 1.dp else 1.5.dp,
+ if (placeholder.isError) AdsBorderBrush else AdsLoadingBorderBrush,
+ shape,
+ ),
shape = shape,
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer),
) {
@@ -576,13 +576,7 @@ fun VoiceNoteItem(
modifier =
Modifier.fillMaxWidth()
.padding(bottom = 16.dp)
- .border(1.dp, MaterialTheme.colorScheme.outline, shape)
- .dropShadow(shape = shape) {
- radius = 0f
- spread = 0f
- offset = Offset(x = 4.dp.toPx(), y = 6.dp.toPx())
- color = Color(0xFF20290A)
- },
+ .border(1.dp, AdsBorderBrush, shape),
shape = shape,
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer),
) {
@@ -607,7 +601,7 @@ fun VoiceNoteItem(
Surface(
shape = CircleShape,
color = MaterialTheme.colorScheme.surface,
- border = BorderStroke(1.dp, Color(0xFF299EAF)),
+ border = BorderStroke(1.dp, AdsBorderBrush),
modifier = Modifier.padding(bottom = 8.dp),
) {
Text(