diff --git a/app/src/main/java/app/closer/ui/home/HomeScreen.kt b/app/src/main/java/app/closer/ui/home/HomeScreen.kt index 7b2d4a64..364290eb 100644 --- a/app/src/main/java/app/closer/ui/home/HomeScreen.kt +++ b/app/src/main/java/app/closer/ui/home/HomeScreen.kt @@ -34,6 +34,7 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowForward import androidx.compose.material.icons.filled.Favorite +import androidx.compose.material.icons.filled.LocalFireDepartment import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -214,6 +215,11 @@ private fun HomeContent( streakCount = state.streakCount ) + StreakCard( + streakCount = state.streakCount, + partnerName = state.partnerName + ) + when { state.isLoading -> LoadingHomeCard() state.error != null -> ErrorHomeCard(message = state.error, onRefresh = onRefresh) @@ -268,6 +274,76 @@ private fun HomeContent( } } +@Composable +private fun StreakCard( + streakCount: Int, + partnerName: String?, + modifier: Modifier = Modifier +) { + val copy = when (streakCount) { + 0 -> "Start a new streak today" + 1 -> "1 day streak" + else -> "$streakCount day streak" + } + val partnerLine = if (streakCount > 0 && !partnerName.isNullOrBlank()) "with $partnerName" else null + + CloserCard( + modifier = modifier.fillMaxWidth(), + shape = RoundedCornerShape(CloserRadii.FeatureCard), + containerColor = closerCardColor(alpha = 0.92f), + elevation = CloserElevations.Card + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(20.dp), + horizontalArrangement = Arrangement.spacedBy(14.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Surface( + shape = RoundedCornerShape(CloserRadii.Tile), + color = CloserPalette.PinkSoft.copy(alpha = 0.28f), + modifier = Modifier.size(52.dp) + ) { + Box(contentAlignment = Alignment.Center) { + Icon( + imageVector = Icons.Filled.LocalFireDepartment, + contentDescription = null, + tint = CloserPalette.PinkAccentDeep, + modifier = Modifier.size(28.dp) + ) + } + } + Column(verticalArrangement = Arrangement.spacedBy(2.dp)) { + if (streakCount > 0) { + Text( + text = streakCount.toString(), + style = MaterialTheme.typography.displaySmall.copy(fontWeight = FontWeight.SemiBold), + color = MaterialTheme.colorScheme.onSurface, + maxLines = 1 + ) + } + Text( + text = copy, + style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.SemiBold), + color = if (streakCount > 0) MaterialTheme.colorScheme.onSurface else MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + partnerLine?.let { + Text( + text = it, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } + } + } + } +} + @Composable private fun HomeHeader( partnerName: String?,