Fixed
Status Update
Comments
st...@google.com <st...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
Author: Louis Pullen-Freilich <
Link:
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
Expand for full commit details
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
These APIs allow overscroll to have events dispatched to it by one component, and rendered in a separate component.
Fixes: b/266550551
Fixes: b/204650733
Fixes: b/255554340
Fixes: b/229537244
Test: OverscrollTest
Relnote: "Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling APIs - these APIs create a wrapped instance of the provided overscroll effect that doesn't draw / handle events respectively, which allows for rendering overscroll in a separate component from the component that is dispatching events. For example, disabling drawing the overscroll inside a lazy list, and then drawing the overscroll separately on top / elsewhere."
Change-Id: Idbb3d91546b49c1987a041f959bce4b2b09a9f61
Files:
- M
compose/foundation/foundation/api/current.txt
- M
compose/foundation/foundation/api/restricted_current.txt
- M
compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
- M
compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/OverscrollSample.kt
- M
compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/OverscrollTest.kt
- M
compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
Hash: f64e25b7a473c757d080521e7dd97b3f6670f60d
Date: Fri Nov 01 18:43:56 2024
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))
}
}
}