From 0eb413334533df81550f8fcc6b2ed359d104824a Mon Sep 17 00:00:00 2001 From: Johann Date: Fri, 3 Jul 2026 23:22:56 -0600 Subject: [PATCH] fix(dashboard): render verificado en dispositivo EMUI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Header reestructurado: en el Huawei de prueba el Row con Alignment.Bottom + SpaceBetween medía ~270dp fantasma, aplastando la lista de hábitos a altura 0 (las tarjetas ni se componían). Ahora es columna simple con chips en fila propia y maxLines acotados. - LazyColumn con weight(1f) en vez de fillMaxSize dentro de Column sin peso. - Singular '1 día de racha' / '1 día' (antes '1 días'). --- .../rachita/ui/dashboard/DashboardScreen.kt | 64 +++++++++---------- .../ui/dashboard/components/RightColumn.kt | 6 +- .../ui/dashboard/components/Sidebar.kt | 6 +- app/app/src/main/res/values/strings.xml | 2 + 4 files changed, 42 insertions(+), 36 deletions(-) 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