Month widget: require font scale for lane fitting (#491)

This commit is contained in:
makiolaj committed 2026-11-09 18:51:00 +01:00
1 parent fb434f3f15
commit 726dbbbaf3
2 files changed
+10 -11

No files matched your search

@@ -76,7 +76,7 @@ internal data class LaneFit(val lanes: Int, val compact: Boolean = false)
* [MAX_LANES] so a tall widget's payload stays bounded (#214). A row too short
* for one full lane still gets a compact one when its text fits at [fontScale] (#491).
*/
internal fun lanesFitting(weekHeight: Dp, fontScale: Float = 1f): LaneFit {
internal fun lanesFitting(weekHeight: Dp, fontScale: Float): LaneFit {
val room = weekHeight.value - DAY_ROW_DP - LANES_TOP_DP
val full = (room / LANE_ROW_DP).toInt().coerceIn(0, MAX_LANES)
val compactFits = room >= COMPACT_LANE_ROW_DP && fontScale <= COMPACT_MAX_FONT_SCALE
@@ -90,8 +90,7 @@ internal fun lanesFitting(weekHeight: Dp, fontScale: Float = 1f): LaneFit {
*/
internal fun fitWeeks(weeks: List<MonthWeek>, fit: LaneFit): List<WeekLayout> = weeks.map { week ->
val lanes = fit.lanes
if (lanes == 0) return@map WeekLayout(week, laneCap = 0, showsOverflow = false)
if (fit.compact) return@map WeekLayout(week, laneCap = lanes, showsOverflow = false, compact = true)
if (lanes == 0 || fit.compact) return@map WeekLayout(week, laneCap = lanes, showsOverflow = false, compact = fit.compact)
val needed = WeekLayout(week, UNCAPPED_LANES).usedLanes
WeekLayout(week, if (needed <= lanes) lanes else lanes - 1)
}
@@ -56,17 +56,17 @@ class MonthGridTest {
@Test
fun `a taller week fits more lanes`() {
assertThat(lanesFitting(19.dp)).isEqualTo(LaneFit(0))
assertThat(lanesFitting(50.dp)).isEqualTo(LaneFit(2))
assertThat(lanesFitting(100.dp)).isEqualTo(LaneFit(5))
assertThat(lanesFitting(19.dp, fontScale = 1f)).isEqualTo(LaneFit(0))
assertThat(lanesFitting(50.dp, fontScale = 1f)).isEqualTo(LaneFit(2))
assertThat(lanesFitting(100.dp, fontScale = 1f)).isEqualTo(LaneFit(5))
}
@Test
fun `a row too short for a full lane gets a compact one`() {
assertThat(lanesFitting(34.dp)).isEqualTo(LaneFit(1, compact = true))
assertThat(lanesFitting(32.dp)).isEqualTo(LaneFit(1, compact = true))
assertThat(lanesFitting(31.dp)).isEqualTo(LaneFit(0))
assertThat(lanesFitting(35.dp)).isEqualTo(LaneFit(1))
assertThat(lanesFitting(34.dp, fontScale = 1f)).isEqualTo(LaneFit(1, compact = true))
assertThat(lanesFitting(32.dp, fontScale = 1f)).isEqualTo(LaneFit(1, compact = true))
assertThat(lanesFitting(31.dp, fontScale = 1f)).isEqualTo(LaneFit(0))
assertThat(lanesFitting(35.dp, fontScale = 1f)).isEqualTo(LaneFit(1))
}
@Test
@@ -89,7 +89,7 @@ class MonthGridTest {
@Test
fun `lanes stop at the cap however tall the week`() {
assertThat(lanesFitting(1000.dp)).isEqualTo(LaneFit(MAX_LANES))
assertThat(lanesFitting(1000.dp, fontScale = 1f)).isEqualTo(LaneFit(MAX_LANES))
}
@Test