Fixed
Status Update
Comments
st...@google.com <st...@google.com>
ap...@google.com <ap...@google.com> #2
A couple of questions:
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
Description
implementation("androidx.wear.compose:compose-navigation:1.4.0-alpha07")
SwipeDismissableNavHost
Version used: 1.4.0-alpha07
Device: Samsung SM-890, Android 13, Wear OS 4.0
The following exception is thrown randomly when changing screens on a Wear OS app using the latest compose navigation library:
FATAL EXCEPTION: main
java.lang.IllegalArgumentException: red = 1.0, green = 1.0, blue = 1.0, alpha = -8.34465E-9 outside the range for sRGB IEC61966-2.1 (id=0, model=Rgb)
at androidx.compose.ui.graphics.InlineClassHelperKt.throwIllegalArgumentException(InlineClassHelper.kt:26)
at androidx.compose.ui.graphics.ColorKt.Color(Color.kt:722)
at androidx.compose.ui.graphics.Color.copy-wmQWz5c(Color.kt:259)
at androidx.compose.ui.graphics.Color.copy-wmQWz5c$default(Color.kt:254)
at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$BoxedStackEntryContent$2$2$1.invoke(SwipeDismissableNavHost.kt:499)
at androidx.wear.compose.navigation.SwipeDismissableNavHostKt$BoxedStackEntryContent$2$2$1.invoke(SwipeDismissableNavHost.kt:492)
at androidx.compose.ui.draw.DrawBackgroundModifier.draw(DrawModifier.kt:127)
It looks like the error is in this code inside SwipeDismissableNavHost, that calculates the alpha using lerp. The value is not 0f as expected, but -8.34465E-9 which is not accepted by sRGB IEC61966-2.1
if (layerColor != Color.Unspecified) {
Canvas(Modifier.fillMaxSize()) {
val absoluteProgression =
((animatable.value - 0.25f).coerceAtLeast(0f) / 0.75f).coerceAtMost(1f)
val easedProgression = NAV_HOST_ENTER_TRANSITION_EASING_STANDARD
.transform(absoluteProgression)
val alpha = lerp(0.07f, 0f, easedProgression)
if (isRoundDevice) {
drawCircle(color = layerColor.copy(alpha))
} else {
drawRect(color = layerColor.copy(alpha))
}
}
}