Status Update
Comments
ma...@google.com <ma...@google.com>
mo...@google.com <mo...@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
sa...@gmail.com <sa...@gmail.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
mo...@google.com <mo...@google.com> #4
Thank you. It doesn't look like this will be a trivial solution as yet. However, one of our team members is just now adding a feature that will make this possible. Because the feature is going to be experimental API, we likely won't be able to use it in the foundation
library for a few months.
va...@google.com <va...@google.com> #5
One potential workaround is applying a windowInsetsPadding
or windowInsets*Height
to an item inside the LazyColumn
, as opposed to using contentPadding
(since that allows using the ModifierLocal
normally. But that may not always be an option (or that has other non-desirable effects).
mo...@google.com <mo...@google.com> #6
Any solution that involves composition means that layout will be delayed by 1 frame.
For the above problem, I think we need something like this:
val consumedNavigationBars by remember { MutableWindowInsets() }
Box(
modifier = Modifier
.consumedWindowInsets(WindowInsets.navigationBars)
.withConsumedWindowInsets {
consumedNavigationBars.insets = WindowInsets.navigationBars.exclude(it)
}
) {
// will have non-zero insets
val insets = consumedNavigationBars.asPaddingValues()
}
class MutableWindowInsets : WindowInsets {
var insets by mutableStateOf(WindowInsets(0, 0, 0, 0))
fun getLeft(density: Density, layoutDirection: LayoutDirection): Int = insets.getLeft(density, layoutDirection)
fun getTop(density: Density): Int = insets.getTop(density)
fun getRight(density: Density, layoutDirection: LayoutDirection): Int = insets.getRight(density, layoutDirection)
fun getBottom(density: Density): Int = insets.getBottom(density)
}
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit f6c646af9c5d6eed33998affaccdba72dcc9b825
Author: George Mount <mount@google.com>
Date: Mon Aug 29 15:55:07 2022
Allow access to consumed WindowInsets
Fixes: 237019262
Fixes: 243119659
Relnote: "Added Modifier.withConsumedWindowInsets() to
to get consumed WindowInsets for use outside windowInsetsPadding.
Added MutableWindowInsets to allow easily changing WindowInsets
without recomposition."
Test: new tests
Change-Id: I7fd28c29953ca10b4182d07996f16b66263548b1
M compose/foundation/foundation-layout/src/test/kotlin/androidx/compose/foundation/layout/WindowInsetsTest.kt
M compose/foundation/foundation-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/WindowInsetsPaddingSample.kt
M compose/foundation/foundation-layout/api/public_plus_experimental_1.3.0-beta02.txt
M compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsPaddingTest.kt
M compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
M compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsets.kt
M compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/WindowInsetsPadding.kt
na...@google.com <na...@google.com> #8
This bug was linked in a change in the following release(s):
androidx.compose.foundation:foundation-layout:1.3.0-beta03
Description
Jetpack Compose version: 1.2.0-rc02
Jetpack Compose component(s) used: Foundation
Android Studio Build: #AI-221.4165.146.2211.8713749
Kotlin version: 1.6.21
When accessing the window insets via
asPaddingValues()
it does not account for the already consumed insets further in the hierarchy. E.g.The
PaddingValues
could be added to aLazyColumn
or similar layout that need extra padding, but only when a parent has not already consumed them. As far as I can tell it is not possible to access the amount of consumed insets, which makes it difficult to achieve this kind of layout.My feature request is either having
asPaddingValues
already account for the consumed insets (just likeModifier.navigationBarPadding()
) or at least provide read-only access to the amount of consumed insets.