WAI
Status Update
Comments
ma...@google.com <ma...@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
da...@danielzfranklin.org <da...@danielzfranklin.org> #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
ma...@google.com <ma...@google.com> #4
Filed awaitLongPressOrCancellation
separately, thanks!
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-main
commit 4192f52e326cf6e81e6e30202ff00496743b6af1
Author: Jeremy Walker <jewalker@google.com>
Date: Wed Aug 10 15:18:18 2022
Exposing long press await fun as building block for gesture detection.
Bug: 181577176
Test: Manually tested.
Relnote: "Exposed `AwaitPointerEventScope#awaitLongPressOrCancellation` as additional building block for more complex gesture detection"
Change-Id: I04374246211122f86e1235a82a98fa4484381e69
M compose/foundation/foundation/api/public_plus_experimental_current.txt
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
https://android-review.googlesource.com/2182320
Branch: androidx-main
commit 4192f52e326cf6e81e6e30202ff00496743b6af1
Author: Jeremy Walker <jewalker@google.com>
Date: Wed Aug 10 15:18:18 2022
Exposing long press await fun as building block for gesture detection.
Bug: 181577176
Test: Manually tested.
Relnote: "Exposed `AwaitPointerEventScope#awaitLongPressOrCancellation` as additional building block for more complex gesture detection"
Change-Id: I04374246211122f86e1235a82a98fa4484381e69
M compose/foundation/foundation/api/public_plus_experimental_current.txt
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/restricted_current.txt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
je...@google.com <je...@google.com> #6
awaitLongPressOrCancellation()
is now public per
Description
I had code that required detecting a number of different gestures that were possible only in certain states. I started off using the gesture detecting functions and global variables like so:
I eventually traced a number of bugs down to updating the state non-atomically, so I was planning to add a mutex. That reminded me of how coroutines can often be used to solve concurrency issues, and I came up with
I defined a bunch of my own functions on
PointerInputScope
, and the approach solved my concurrency issues in a relatively clean way.The problem is that most of the framework detectors block forever, so they can't be combined. I ended up copying a framework function, editing it to remove the line
forEachGesture {
, and copying over all their private/internal dependencies.I'm suggesting that framework gesture detector functions should (when it makes sense) delegate to another public function that detects only one gesture.
I'm also suggesting that more of the private helpers you use in gesture detection be made public, such as
awaitLongPressOrCancellation
, to enable users to write code that combines small suspending functions to detect complex gestures as cleanly as the framework.