Flux Hourglass v1.9.1 Release Notes
Flux Hourglass v1.9.1 is a bug-fix release that hardens the Setup Screen layout so the time picker and START button can never be pushed off-screen and lost.
The Bug
The Setup Screen content was laid out in a fixed Column(Modifier.fillMaxSize()) with verticalArrangement = Arrangement.SpaceBetween and no scroll fallback. When the total content height exceeded the viewport — short/small screens, split-screen, a large accessibility font scale, tall system-bar insets, or any future growth of the object filmstrip — SpaceBetween placed the lower children (Quick Presets, the HR/MIN/SEC picker, and the START button) below the bottom edge with no way to scroll to them. The controls silently disappeared, leaving only the header and the object selector visible.
The Fix
- Min-height scroll container. The content is now wrapped in a
BoxWithConstraintswhoseColumnusesModifier.heightIn(min = viewportHeight).verticalScroll(rememberScrollState()).- When the content fits (the common case), the column is exactly the viewport height, so
Arrangement.SpaceBetweenspreads the children exactly as before — the layout is pixel-identical and never scrolls. - When the content overflows, the column grows past the viewport and becomes scrollable, so every control stays reachable instead of being clipped away.
- When the content fits (the common case), the column is exactly the viewport height, so
- No visual change on screens where the content already fit.
Technical Notes
- Added imports:
androidx.compose.foundation.verticalScroll,androidx.compose.foundation.rememberScrollState,androidx.compose.foundation.layout.heightIn. statusBarsPadding()/navigationBarsPadding()/background(PureBlack)moved to the outerBoxWithConstraints, somaxHeightreflects the true content area used as the column's minimum height.- All
testTags (mode_column,mode_scroller,preset_row,start_button, themode_*object tags, picker tags) are unchanged. - No data-model, schema, or persistence changes; saved durations and object preferences carry over.
- Verification. The golden
setup.pngRoborazzi test still passes in compare mode (verifyRoborazziDebug), proving no visual regression when content fits. A separate overflow-forcing render (tiny viewport + 1.8× font) confirmsSTARTcan be scrolled into view (performScrollTo().assertIsDisplayed()), which was impossible before the fix. - versionCode 10 → 11, versionName 1.9.0 → 1.9.1.