diff --git a/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailScreen.kt b/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailScreen.kt index 33ff1a3..a300113 100644 --- a/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailScreen.kt +++ b/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailScreen.kt @@ -152,7 +152,7 @@ private fun CycleSection( } // Period day-of-period badge - if (state.periodActive && state.periodDayNumber > 0) { + if (state.hasActiveCycle && state.periodDayNumber > 0) { Text( "Period day ${state.periodDayNumber}", style = MaterialTheme.typography.bodySmall, @@ -171,7 +171,7 @@ private fun CycleSection( label = { Text("Period started") }, leadingIcon = { Icon( - if (state.isPeriodStart) Icons.Default.Check else Icons.Default.PlayArrow, + if (state.isPeriodStart || state.hasActiveCycle) Icons.Default.Check else Icons.Default.PlayArrow, contentDescription = null, modifier = Modifier.size(16.dp) ) @@ -180,7 +180,8 @@ private fun CycleSection( FilterChip( selected = state.isPeriodEnd, onClick = onTogglePeriodEnd, - enabled = state.isPeriodStart || state.periodActive || state.isPeriodEnd, + enabled = state.isPeriodEnd || + (state.hasActiveCycle && state.cycleStartDate != null && state.date > state.cycleStartDate), label = { Text("Period ended") }, leadingIcon = { Icon( diff --git a/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailViewModel.kt b/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailViewModel.kt index 48c7b26..aaae3c7 100644 --- a/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailViewModel.kt +++ b/app/src/main/java/com/hsdiary/ui/daydetail/DayDetailViewModel.kt @@ -31,6 +31,8 @@ data class DayDetailUiState( val isPeriodStart: Boolean = false, val isPeriodEnd: Boolean = false, val periodDayNumber: Int = 0, // day-of-period for this date (1 = first day) + val hasActiveCycle: Boolean = false, // a cycle record spans this date (start logged, regardless of which day) + val cycleStartDate: LocalDate? = null, val notes: String = "", val conditions: Map = emptyMap(), val definitions: List = emptyList(), @@ -88,12 +90,11 @@ class DayDetailViewModel @Inject constructor( val isPeriodStart = isFemale && cycleRepository.isPeriodStart(activeProfile.id, dateStr) val isPeriodEnd = isFemale && cycleRepository.isPeriodEnd(activeProfile.id, dateStr) - // Calculate day-of-period: how many days from the period start to this date - val periodDayNumber = if (isFemale && dayLog.periodActive) { - val record = cycleRepository.getRecordContainingDate(activeProfile.id, dateStr) - if (record != null) { - (date.toEpochDay() - LocalDate.parse(record.cycleStart).toEpochDay()).toInt() + 1 - } else 0 + val cycleRecord = if (isFemale) cycleRepository.getRecordContainingDate(activeProfile.id, dateStr) else null + val hasActiveCycle = cycleRecord != null + val cycleStartDate = cycleRecord?.let { LocalDate.parse(it.cycleStart) } + val periodDayNumber = if (cycleRecord != null) { + (date.toEpochDay() - LocalDate.parse(cycleRecord.cycleStart).toEpochDay()).toInt() + 1 } else 0 _uiState.value = DayDetailUiState( @@ -105,6 +106,8 @@ class DayDetailViewModel @Inject constructor( isPeriodStart = isPeriodStart, isPeriodEnd = isPeriodEnd, periodDayNumber = periodDayNumber, + hasActiveCycle = hasActiveCycle, + cycleStartDate = cycleStartDate, notes = dayLog.notes ?: "", conditions = conditions, definitions = defsToShow, @@ -136,6 +139,8 @@ class DayDetailViewModel @Inject constructor( periodActive = false, dayLog = updatedLog, periodDayNumber = 0, + hasActiveCycle = false, + cycleStartDate = null, isDirty = true ) } else { @@ -150,6 +155,8 @@ class DayDetailViewModel @Inject constructor( periodActive = true, dayLog = updatedLog, periodDayNumber = 1, + hasActiveCycle = true, + cycleStartDate = date, isDirty = true ) }