Status Update
Comments
po...@google.com <po...@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
ma...@google.com <ma...@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
[Deleted User] <[Deleted User]> #4
ma...@google.com <ma...@google.com> #5
Could you share a usecase when it is desirable to proxy click action to the parent card/box?
If the button is disabled - it's unavailable and nothing should happen when the user presses it.
[Deleted User] <[Deleted User]> #6
I have a custom layout. When it in the collapsed state - the parent should be clickable. Click on parrent should expand children. In this state children are clickable. Click on child item opens new screen, click on knob collapses the layout.
In previeous realization i had for children:
MoodCardStack(
date = date,
state = state,
itemPadding = Dimens.standard,
modifier = Modifier.padding(vertical = Dimens.small)
) {
if (moods[date]?.size == 1 && state.expanded) {
state.collapse()
}
moods[date]?.forEach { mood ->
key(mood) {
MoodCardItem(
userMood = mood,
modifier = Modifier
.fillMaxWidth()
.height(90.dp)
.clickable(
enabled = state.expanded || moods[date]?.size == 1,
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
onMoodClick(mood.id)
}
)
}
}
}
and for parent
Layout(
content = content,
modifier = Modifier
.clickable(
enabled = state.expanded.not() && collapseProgress.value == 0F,
indication = null,
interactionSource = remember { MutableInteractionSource() }
) { state.expand() }
.constrainAs(container) {
top.linkTo(parent.top)
start.linkTo(dateColumn.end, margin = Dimens.small)
end.linkTo(parent.end, margin = Dimens.standard)
width = Dimension.fillToConstraints
}
) { measurables, constraints ->
```
Now if MoodCardItem .clickable(false), the whole layout is not clickable. I had to dynamically create different modifiers with and without clickables. And this realization looks weird when the previous was more obvious.
ma...@google.com <ma...@google.com> #7
It seems like the card shouldn't be clickable at all when the layout is collapsed.
disabled clickable shouldn't allow other click gestures to go through, as it would be unpredictable for users and developers. Basically, the list goes:
Modifier.clickable(enabled = true)
== I can react to the click gestures and the action is available nowModifier.clickable(enabled = false)
== I can react to the click gestures, and the action is currently unavailable- no clickable modifier == I cannot react to the click gestures, so anyone else up the hierarchy can handle it for me.
I hope that helps.
Description
Jetpack Compose release version: 1.4.30 Android Studio Build: Android Studio Arctic Fox | 2020.3.1 Canary 12
Steps to Reproduce:
The button click does not work, but I don't know if it is correct to propagate to the lower box. If it is an existing ViewGroup, it will not be propagated to the lower part.