diff --git a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/DashboardScreen.kt b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/DashboardScreen.kt index 4e6817f..96ed496 100644 --- a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/DashboardScreen.kt +++ b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/DashboardScreen.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size @@ -100,39 +101,41 @@ private fun CenterColumn( onToggleHabit: (String) -> Unit, modifier: Modifier = Modifier, ) { - Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(12.dp)) { + // Header laid out as a plain top-anchored column with height-bounded rows. + // On the EMUI test device the previous Bottom-aligned SpaceBetween header + // measured ~270 dp tall (giant invisible text box), crushing the habit list + // to zero height — see STATUS.md session 2. + val pendingText = when (uiState.pendingCount) { + 0 -> stringResource(R.string.dashboard_pending_zero) + 1 -> stringResource(R.string.dashboard_pending_one) + else -> stringResource(R.string.dashboard_pending_many, uiState.pendingCount) + } + Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(10.dp)) { + Text( + text = stringResource(R.string.dashboard_greeting, uiState.childName), + style = MaterialTheme.typography.headlineMedium, + maxLines = 1, + ) + Text( + text = "${uiState.dateLine} · $pendingText", + style = MaterialTheme.typography.bodyMedium.copy(color = WarmGreyDeep), + maxLines = 2, + ) Row( modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.Bottom, - horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), ) { - Column { - Text( - text = stringResource(R.string.dashboard_greeting, uiState.childName), - style = MaterialTheme.typography.headlineMedium, - ) - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(10.dp), - ) { - Text( - text = "${uiState.dateLine} · ${pendingLine(uiState.pendingCount)}", - style = MaterialTheme.typography.bodyMedium.copy(color = WarmGreyDeep), - ) - BackgroundChip() - } - } - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(8.dp), - ) { - uiState.battery?.let { BatteryChip(it) } - TodayCounterPill(done = uiState.doneCount, total = uiState.totalCount) - } + BackgroundChip() + Spacer(modifier = Modifier.weight(1f)) + uiState.battery?.let { BatteryChip(it) } + TodayCounterPill(done = uiState.doneCount, total = uiState.totalCount) } LazyColumn( - modifier = Modifier.fillMaxSize(), + modifier = Modifier + .fillMaxWidth() + .weight(1f), verticalArrangement = Arrangement.spacedBy(12.dp), ) { items(count = uiState.habits.size, key = { uiState.habits[it].id }) { index -> @@ -143,13 +146,6 @@ private fun CenterColumn( } } -@Composable -private fun pendingLine(pending: Int): String = when (pending) { - 0 -> stringResource(R.string.dashboard_pending_zero) - 1 -> stringResource(R.string.dashboard_pending_one) - else -> stringResource(R.string.dashboard_pending_many, pending) -} - @Composable private fun BackgroundChip() { Row( diff --git a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/RightColumn.kt b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/RightColumn.kt index f60af8a..71b0dce 100644 --- a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/RightColumn.kt +++ b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/RightColumn.kt @@ -96,7 +96,11 @@ private fun StreakCard(streak: Int, week: List, securedToday: Boolean style = MaterialTheme.typography.displaySmall.copy(color = CoralIntense), ) Text( - text = stringResource(R.string.dashboard_streak_days), + text = if (streak == 1) { + stringResource(R.string.dashboard_streak_day_singular) + } else { + stringResource(R.string.dashboard_streak_days) + }, style = MaterialTheme.typography.bodyMedium.copy(color = WarmGreyDeep), ) WeekRow(week = week) diff --git a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/Sidebar.kt b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/Sidebar.kt index a155f6e..4081611 100644 --- a/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/Sidebar.kt +++ b/app/app/src/main/java/mx/paputec/rachita/ui/dashboard/components/Sidebar.kt @@ -151,7 +151,11 @@ private fun StreakRow(streak: Int) { ) { StreakFlame(modifier = Modifier.size(26.dp, 32.dp)) Text( - text = stringResource(R.string.dashboard_streak_sidebar, streak), + text = if (streak == 1) { + stringResource(R.string.dashboard_streak_sidebar_singular) + } else { + stringResource(R.string.dashboard_streak_sidebar, streak) + }, style = MaterialTheme.typography.labelLarge.copy(color = CoralIntense), ) } diff --git a/app/app/src/main/res/values/strings.xml b/app/app/src/main/res/values/strings.xml index 0f4984e..4fc36af 100644 --- a/app/app/src/main/res/values/strings.xml +++ b/app/app/src/main/res/values/strings.xml @@ -33,7 +33,9 @@ ¡Hecho! Tu racha días + día %1$d días de racha + 1 día de racha ¡Racha asegurada hoy! 🔥 Nv. %1$d Nivel %1$d