Add holiday, festival and solar term annotations to DayCell
Replace plain lunar text with priority-based annotations: legal holidays > lunar festivals > solar terms > solar festivals > lunar day. Holiday/festival text uses error color to stand out from regular lunar text.
This commit is contained in:
parent
dfda6fa5a9
commit
055738220c
@ -111,27 +111,68 @@ fun DayCell(
|
|||||||
|
|
||||||
val todayBorderColor = MaterialTheme.colorScheme.primary
|
val todayBorderColor = MaterialTheme.colorScheme.primary
|
||||||
|
|
||||||
val lunarText = remember(date) {
|
data class DayAnnotation(val text: String, val isHighlight: Boolean)
|
||||||
val lunarDay = SolarDay.fromYmd(date.year, date.monthNumber, date.day).getLunarDay()
|
|
||||||
|
val annotation = remember(date) {
|
||||||
|
val solarDay = SolarDay.fromYmd(date.year, date.monthNumber, date.day)
|
||||||
|
val lunarDay = solarDay.getLunarDay()
|
||||||
|
|
||||||
|
// 法定假日优先
|
||||||
|
val legalHoliday = solarDay.getLegalHoliday()
|
||||||
|
if (legalHoliday != null) {
|
||||||
|
val suffix = if (legalHoliday.isWork()) "班" else "休"
|
||||||
|
return@remember DayAnnotation("${legalHoliday.getName()}$suffix", true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 农历传统节日
|
||||||
|
val lunarFestival = lunarDay.getFestival()
|
||||||
|
if (lunarFestival != null) {
|
||||||
|
return@remember DayAnnotation(lunarFestival.getName(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 节气(当天才显示)
|
||||||
|
val termDay = solarDay.getTermDay()
|
||||||
|
if (termDay.getDayIndex() == 0) {
|
||||||
|
return@remember DayAnnotation(termDay.getSolarTerm().getName(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 公历节日
|
||||||
|
val solarFestival = solarDay.getFestival()
|
||||||
|
if (solarFestival != null) {
|
||||||
|
return@remember DayAnnotation(solarFestival.getName(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 默认:农历日期
|
||||||
val name = lunarDay.getName()
|
val name = lunarDay.getName()
|
||||||
if (name == "初一") {
|
val text = if (name == "初一") {
|
||||||
val lunarMonth = lunarDay.getLunarMonth()
|
val lunarMonth = lunarDay.getLunarMonth()
|
||||||
"${lunarMonth.getName()}月"
|
"${lunarMonth.getName()}月"
|
||||||
} else {
|
} else {
|
||||||
name
|
name
|
||||||
}
|
}
|
||||||
|
DayAnnotation(text, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
val lunarColor by transition.animateColor(
|
val lunarColor by transition.animateColor(
|
||||||
transitionSpec = { tween(250, easing = FastOutSlowInEasing) },
|
transitionSpec = { tween(250, easing = FastOutSlowInEasing) },
|
||||||
label = "lunarColor"
|
label = "lunarColor"
|
||||||
) { state ->
|
) { state ->
|
||||||
when (state) {
|
if (annotation.isHighlight) {
|
||||||
DayCellState.SELECTED_TODAY -> MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.7f)
|
when (state) {
|
||||||
DayCellState.SELECTED -> MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.7f)
|
DayCellState.SELECTED_TODAY -> MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.85f)
|
||||||
DayCellState.TODAY -> MaterialTheme.colorScheme.primary.copy(alpha = 0.6f)
|
DayCellState.SELECTED -> MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.85f)
|
||||||
DayCellState.OTHER_MONTH -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.26f)
|
DayCellState.TODAY -> MaterialTheme.colorScheme.primary
|
||||||
DayCellState.NORMAL -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f)
|
DayCellState.OTHER_MONTH -> MaterialTheme.colorScheme.error.copy(alpha = 0.35f)
|
||||||
|
DayCellState.NORMAL -> MaterialTheme.colorScheme.error.copy(alpha = 0.7f)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
when (state) {
|
||||||
|
DayCellState.SELECTED_TODAY -> MaterialTheme.colorScheme.onPrimaryContainer.copy(alpha = 0.7f)
|
||||||
|
DayCellState.SELECTED -> MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.7f)
|
||||||
|
DayCellState.TODAY -> MaterialTheme.colorScheme.primary.copy(alpha = 0.6f)
|
||||||
|
DayCellState.OTHER_MONTH -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.26f)
|
||||||
|
DayCellState.NORMAL -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +215,7 @@ fun DayCell(
|
|||||||
style = MaterialTheme.typography.bodyMedium
|
style = MaterialTheme.typography.bodyMedium
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = lunarText,
|
text = annotation.text,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
color = lunarColor,
|
color = lunarColor,
|
||||||
fontSize = 7.sp,
|
fontSize = 7.sp,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user