Kotlin’s coerceIn throws « Cannot coerce value to an empty range » instead of clamping
coerceIn(0, n – 1) is not a safe clamp: when n == 0 the range is empty and Kotlin throws IllegalArgumentException. Floor the upper bound or guard n == 0.
coerceIn(0, n – 1) is not a safe clamp: when n == 0 the range is empty and Kotlin throws IllegalArgumentException. Floor the upper bound or guard n == 0.
Coroutine loops reading MutableState directly wake before the un-pause LaunchedEffect shifts absolute deadlines. Gate loops on the bookkeeping state.
Play’s edge-to-edge warnings come from a static scan of the DEX. R8 full mode erases the enableEdgeToEdge call it looks for; a one-line keep rule puts it back.
getUnclippedBoundsInRoot() was identical with Fit and FillBounds; only captureToImage() showed the barcode filling 7.8 % of its box.
With ContentScale.Fit, a 16:9 photo in a portrait viewer can be panned fully off-screen at 2.8×. The bound must use the image’s fitted size, per axis.
Three build walls in a row: AAR metadata demands AGP 9.1+, kotlin-android dies on a BaseExtension cast even at its latest version, and compileSdk must reach 37.
Compose tweens respect the system animator scale. At 0 they complete instantly, so anything drawn mid-animation never renders.
absoluteOffset stops the offset mirroring but not the Box start edge moving. Pin the whole subtree to Ltr instead.