Fixed
Status Update
Comments
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-main
commit 869a12e043be7113ecf7b1dfc01733ba2ad2afbd
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Fri Jan 27 02:35:36 2023
Fixes pullRefresh not consuming velocity, causing overscroll to show
Fixes: b/266874741
Test: PullRefreshStateTest
Relnote: "Fixes an issue where pullRefresh was not consuming velocity, causing overscroll to show. Also changed the API signature of the onRelease lambda in Modifier.pullRefresh to return a Float for consumed velocity"
Change-Id: I7db6562a865f6ea870a57102f81d04e3d8289c0e
M compose/material/material/api/public_plus_experimental_current.txt
M compose/material/material/samples/src/main/java/androidx/compose/material/samples/PullRefreshSamples.kt
M compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/pullrefresh/PullRefreshStateTest.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/pullrefresh/PullRefresh.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/pullrefresh/PullRefreshState.kt
https://android-review.googlesource.com/2404397
Branch: androidx-main
commit 869a12e043be7113ecf7b1dfc01733ba2ad2afbd
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Fri Jan 27 02:35:36 2023
Fixes pullRefresh not consuming velocity, causing overscroll to show
Fixes:
Test: PullRefreshStateTest
Relnote: "Fixes an issue where pullRefresh was not consuming velocity, causing overscroll to show. Also changed the API signature of the onRelease lambda in Modifier.pullRefresh to return a Float for consumed velocity"
Change-Id: I7db6562a865f6ea870a57102f81d04e3d8289c0e
M compose/material/material/api/public_plus_experimental_current.txt
M compose/material/material/samples/src/main/java/androidx/compose/material/samples/PullRefreshSamples.kt
M compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/pullrefresh/PullRefreshStateTest.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/pullrefresh/PullRefresh.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/pullrefresh/PullRefreshState.kt
pr...@google.com <pr...@google.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.annotation:annotation-jvm:1.6.0-rc01
androidx.compose.material:material:1.4.0-beta01
Description
If you drag pull refresh, and release / fling downwards with some velocity, overscroll will show on top of the pull refresh animation.
Previously scrollable used to check if overscroll should dispatch (if the list can scroll in either direction) before dispatching preFling and dispatching postFling - sincehttps://android-review.googlesource.com/c/platform/frameworks/support/+/2384227 we now only check before the overall pass, so if preFling / the scrolling fling causes this to change (such as causing the list to refresh and now have no items) then the behaviour change is we now will dispatch postFling to overscroll, and show overscroll because pullRefresh did not consume.
Separately we might want to consider adding that check again and consuming all the velocity before we return from the lambda if the list can no longer scroll (but still calling it for correctness, so overscroll can clean up - before we might only call preFling and then never postFling), but the proper fix for pull refresh is to consume positive velocity if pull refresh is showing.
Theoretically in the future we may want to consider also consuming delta / velocity while pull refresh is showing, but at least for now it makes more sense to remain consistent with SwipeRefreshLayout, which does not do this.