Fixed
Status Update
Comments
st...@google.com <st...@google.com>
ap...@google.com <ap...@google.com> #2
Hi - It's likely that the code is missing use of the HierarchicalFocusCoordinator to set the focus on the ScalingLazyColumn when switching pages. Please could you provide some cutdown sample code that demonstrates the issue (looks like the code in the video would be sufficient).
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))
}
}
}