Bug P2
Status Update
Comments
kl...@google.com <kl...@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
ap...@google.com <ap...@google.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-alpha06
androidx.compose.foundation:foundation-android:1.8.0-alpha06
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha06
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-alpha06
kl...@google.com <kl...@google.com> #4
This is no longer blocking me, assigning to Levi to figure out if it's something we want to support.
Description
If
ScrollableState.animateScrollBy
is called and then before it completes it is called again in another coroutine, the first animation will be cancelled before starting the second one. However, unlike calls toAnimatable.animateTo
, the velocity of the previous animation will not be preserved.Possible solutions
This isn't a trivial fix because
ScrollableState
itself does not keep any animation or velocity state –animateScrollBy
is an extension function. It also does not provide any signal about whether it's being scrolled by an animation or the user, so if we track the velocity externally then we could end up in a weird state if the user interrupts an animation.Option 1: Move
animateScrollBy
intoScrollableState
This would allow
ScrollableState
to keep track of animated scroll velocity internally. It should also allow it to be reset to zero when the animation is interrupted by a user scroll. However,ScrollableState
is a public interface so to avoid breaking binary compatibility we would need to wait for Kotlin 1.6.20 and then give it a default implementation. The default implementation could simply be the current implementation.Option 2: Expose scroll velocity from
ScrollableState
I'm not sure how feasible this is – tracking velocity requires tracking timestamps, which
ScrollableState
does not currently do and would probably make the API super gross.