Status Update
Comments
se...@google.com <se...@google.com>
ma...@google.com <ma...@google.com> #2
Branch: androidx-main
commit 46eea23c96f45f0ee1e57d8aef2f1375507b0dec
Author: José Figueroa Santos <serniebanders@google.com>
Date: Tue Apr 11 14:38:58 2023
[M3][ModalBottomSheet] Enable edge to edge functionality for ModalBottomSheet
Bug: 274872542
Bug: 272973615
Bug: 272334475
Bug: 268432129
Bug: 275849044
Bug: 275486106
Bug: 268433162
RelNote: Add window insets parameter to ModalBottomSheet.
RelNote: Scrim for ModalBottomSheet may now be drawn behind status bar with windowInsets set to zero
RelNote: Updated default ModalBottomSheet functionality to stay outside of system bars including navigation
RelNote: Status bar inset handling is provided by drag handle in edge-to-edge mode.
RelNote: BottomSheetDefaults includes window insets for BottomSheetWindow.
Test: Parameterizes existing tests to work with and without edgeToEdge enabled.
Test: Manual EdgeToEdge testing on various devices and android APIs
Change-Id: I312008e48573ebd21326f77216be0bcd0372aa78
M compose/material3/material3/api/public_plus_experimental_current.txt
M compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt
M compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
M compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
M compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/Strings.android.kt
M compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
jw...@gmail.com <jw...@gmail.com> #3
Tested with 1.2-alpha02. There are some improvements but the cases still all have problems.
Pixel 4a landscape is not clipping the bottom of the sheet anymore, but a white box is appearing on the right side of the screen the size of the system navigation buttons when not using gesture navigation.
Pixel C API33 emulator in landscape the bottomsheet is now sized so all the items would be visible, IF it was appearing over top the system navigation bar, but the bottom is behind it still in that tablet case. On a Pixel C API29 emulator in landscape the bottomsheet appears on top of the system navigation bar, but taps are not being recognized on that are. (don't have samsung s5e tablet with android 9 to test right now)
in the sample and our usage, we are not using edge to edge mode or full scaffold infrastructure (actual app usage is with a ComposeView thats not full screen)
jw...@gmail.com <jw...@gmail.com> #4
This is really a big problem. So unfortunately we cannot use the ModalBottomSheet productively yet.
When can we expect a correction?
jw...@gmail.com <jw...@gmail.com> #5
ja...@gopuff.com <ja...@gopuff.com> #6
Any updates on this?
ge...@gmail.com <ge...@gmail.com> #7
co...@google.com <co...@google.com> #8
Some news about that?
ja...@gopuff.com <ja...@gopuff.com> #9
ma...@google.com <ma...@google.com>
ap...@google.com <ap...@google.com> #10
Without edge-to-edge enabled (`decorFitsSystemWindows` is true) material ModalBottomSheet works incorrect, it always overlaps navigation bar.
I tried different solutions, but the only one that works for me is very ugly:
```
@Composable
@SuppressLint("DiscouragedApi")
// todo:
private fun rememberDimensionByName(name: String): Int {
val resources = LocalContext.current.resources
return remember {
val id = resources.getIdentifier(name, "dimen", "android")
if (id == 0) 0 else resources.getDimensionPixelSize(id)
}
}
<...>
val topInsets = WindowInsets(top = rememberDimensionByName("status_bar_height"))
val bottomInsets = WindowInsets(bottom = rememberDimensionByName("navigation_bar_height"))
ModalBottomSheet(
...
windowInsets = topInsets,
content = {
Box(Modifier.padding(bottomInsets.asPaddingValues())) {
...
}
},
)
```
android plugin "8.2.2"
kotlin version "1.9.22"
kotlinCompilerExtensionVersion = "1.5.8"
androidx.activity:activity-compose:1.8.2
androidx.compose.ui:ui:1.6.0
androidx.compose.material3:material3:1.1.2
ja...@gopuff.com <ja...@gopuff.com> #11
ma...@google.com <ma...@google.com> #12
Yes, I still see the issue as well even with edge to edge enabled.
ja...@gopuff.com <ja...@gopuff.com> #13
ap...@google.com <ap...@google.com> #14
ma...@google.com <ma...@google.com> #15
ja...@gopuff.com <ja...@gopuff.com> #16
ap...@google.com <ap...@google.com> #17
Any update on this?
na...@google.com <na...@google.com> #18
We are working on moving the underlying logic to a dialog implementation which should improve this experience in a variety of devices. Apologies for the delay on this. In the meantime, I have the first iteration of this change here:
Would appreciate any and all eyes on this, and especially any manual testing that can be done on a variety of devices/edge cases.
pr...@google.com <pr...@google.com> #19
Branch: androidx-main
commit 33c32f65dd7879954cfa7a46a76eb959c977e291
Author: Jose Figueroa <serniebanders@google.com>
Date: Tue Mar 19 17:08:01 2024
[M3][BottomSheet] Migrate bottom sheet to dialog implementation from popup.
Dialog provides access to the new window created, which allows for system bars styling, setDecorFitsSystemWindows for edge to edge functionality, and unconsumed window insets for proper content padding.
Bug: 274872542
Bug: 300280229
Bug: 290893168
Test: "Existing tests now check for dialog, toggle decorFitsSystemWindows for edge to edge. Added Unit Test for content window inset consumption. Manual testing on API 28, 31, 33, 34 on Pixel 4a, 7, 8, Tablet, and Samsung Galaxy S24"
RelNote: "ModalBottomSheet more accurately draws scrim over status bar when edge to edge is enabled. Modal bottom sheet content can now consume window insets, allowing for visible content above navigation bar. ModalBottomSheet parameter windowInsets renamed to contentWindowInsets to specify where the insets will be applied, these are no longer tied to window logic. contentWindowInsets type has been changed to a function which returns WindowInsets, to allow it to be resolved within its new window."
Change-Id: I39630f2d9a1b159ef27fa62750ffa26b00e078a0
M compose/material3/material3/api/current.txt
M compose/material3/material3/api/restricted_current.txt
M compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/ui/common/CatalogScaffold.kt
M compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/BottomSheetSamples.kt
M compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ModalBottomSheetTest.kt
M compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ModalBottomSheet.android.kt
M compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SheetDefaults.kt
A compose/material3/material3/src/main/res/values-v30/styles.xml
A compose/material3/material3/src/main/res/values/styles.xml
Description
Versions
Kotlin Compiler extension: 1.5.8
Jetpack Compose bom version: 2024.01.00
androidx.compose.material3:material3 version: 1.2.0-alpha06 - 1.2.0-rc01
Jetpack Compose component used: ExposedDropdownMenuBox / ExposedDropdownMenu / DropdownMenuItem
Android Studio Build: Android Studio Hedgehog | 2023.1.1 Patch 2
Kotlin version: 1.9.22
Issue
We use appium to run our instrumented tests on browserstack, which uses the accessibility functionality to find elements on the screen. Up until alpha05 this worked fine for our dropdown text field (also inside the appium layout inspector, this allowed us to see and select the specific dropdown items). To achieve this, we set the semantics modifier on the DropdownMenuItems.
After material3:1.2.0-alpha06 this changed, and the DropDownMenu was no longer selectable through appium. Seen that the changelog of alpha06 specifically mentions the DropDownMenu, maybe something was accidentally removed here?
If there was a change in how we should approach a drop-down text field after alpha06, I'd like to be referred to that documentation. :)
Note that there is no issue in normal user-use of the composable, just the automated ui tests, that rely on the accessibility functionality.
Steps to Reproduce or Code Sample to Reproduce:
Stack trace (if applicable):
Not available.