Skip to content

Commit 65e9925

Browse files
authored
Merge pull request #13 from holixfactory/support-edge-to-edge
Support edge to edge.
2 parents 2acc513 + b6ce009 commit 65e9925

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

app/src/main/kotlin/com/holix/android/bottomsheetdialogcomposedemo/MainActivity.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class MainActivity : AppCompatActivity() {
4747
var dismissWithAnimation by remember {
4848
mutableStateOf(false)
4949
}
50+
var enableEdgeToEdge by remember {
51+
mutableStateOf(false)
52+
}
5053
// NavigationBarProperties
5154
val surfaceColor = MaterialTheme.colors.surface
5255
var navigationBarColor by remember(surfaceColor) {
@@ -102,6 +105,7 @@ class MainActivity : AppCompatActivity() {
102105
dismissOnBackPress = dismissOnBackPress,
103106
dismissOnClickOutside = dismissOnClickOutside,
104107
dismissWithAnimation = dismissWithAnimation,
108+
enableEdgeToEdge = enableEdgeToEdge,
105109
navigationBarProperties = NavigationBarProperties(
106110
color = navigationBarColor,
107111
darkIcons = when (darkIcons) {
@@ -131,9 +135,10 @@ class MainActivity : AppCompatActivity() {
131135
) {
132136
Column(
133137
modifier = Modifier
138+
.verticalScroll(rememberScrollState())
139+
.navigationBarsPadding() // for enableEdgeToEdge = true
134140
.fillMaxWidth()
135-
.padding(16.dp)
136-
.verticalScroll(rememberScrollState()),
141+
.padding(16.dp),
137142
verticalArrangement = Arrangement.spacedBy(16.dp)
138143
) {
139144
Text(text = "Title", style = MaterialTheme.typography.h5)
@@ -179,6 +184,13 @@ class MainActivity : AppCompatActivity() {
179184
},
180185
label = "dismissWithAnimation"
181186
)
187+
BooleanPreference(
188+
value = enableEdgeToEdge,
189+
onValueChange = {
190+
enableEdgeToEdge = it
191+
},
192+
label = "enableEdgeToEdge"
193+
)
182194
PreferenceCategory("NavigationBarProperties")
183195
ColorPreference(
184196
value = navigationBarColor,

app/src/main/kotlin/com/holix/android/bottomsheetdialogcomposedemo/preferences/ColorPreference.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.github.skydoves.colorpicker.compose.*
2020
import com.holix.android.bottomsheetdialog.compose.BottomSheetBehaviorProperties
2121
import com.holix.android.bottomsheetdialog.compose.BottomSheetDialog
2222
import com.holix.android.bottomsheetdialog.compose.BottomSheetDialogProperties
23+
import com.holix.android.bottomsheetdialog.compose.NavigationBarProperties
2324

2425
@Composable
2526
fun ColorPreference(
@@ -42,6 +43,9 @@ fun ColorPreference(
4243
behaviorProperties = BottomSheetBehaviorProperties(
4344
state = BottomSheetBehaviorProperties.State.Expanded,
4445
skipCollapsed = true
46+
),
47+
navigationBarProperties = NavigationBarProperties(
48+
color = targetColor
4549
)
4650
)
4751
) {

bottomsheetdialog-compose/src/main/kotlin/com/holix/android/bottomsheetdialog/compose/BottomSheetDialog.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class BottomSheetDialogProperties constructor(
5252
val dismissOnBackPress: Boolean = true,
5353
val dismissOnClickOutside: Boolean = true,
5454
val dismissWithAnimation: Boolean = false,
55+
val enableEdgeToEdge: Boolean = false,
5556
val securePolicy: SecureFlagPolicy = SecureFlagPolicy.Inherit,
5657
val navigationBarProperties: NavigationBarProperties = NavigationBarProperties(),
5758
val behaviorProperties: BottomSheetBehaviorProperties = BottomSheetBehaviorProperties()
@@ -68,6 +69,7 @@ class BottomSheetDialogProperties constructor(
6869
dismissOnBackPress,
6970
dismissOnClickOutside,
7071
dismissWithAnimation,
72+
false,
7173
securePolicy,
7274
NavigationBarProperties(color = navigationBarColor)
7375
)
@@ -79,6 +81,7 @@ class BottomSheetDialogProperties constructor(
7981
if (dismissOnBackPress != other.dismissOnBackPress) return false
8082
if (dismissOnClickOutside != other.dismissOnClickOutside) return false
8183
if (dismissWithAnimation != other.dismissWithAnimation) return false
84+
if (enableEdgeToEdge != other.enableEdgeToEdge) return false
8285
if (securePolicy != other.securePolicy) return false
8386
if (navigationBarProperties != other.navigationBarProperties) return false
8487
if (behaviorProperties != other.behaviorProperties) return false
@@ -90,6 +93,7 @@ class BottomSheetDialogProperties constructor(
9093
var result = dismissOnBackPress.hashCode()
9194
result = 31 * result + dismissOnClickOutside.hashCode()
9295
result = 31 * result + dismissWithAnimation.hashCode()
96+
result = 31 * result + enableEdgeToEdge.hashCode()
9397
result = 31 * result + securePolicy.hashCode()
9498
result = 31 * result + navigationBarProperties.hashCode()
9599
result = 31 * result + behaviorProperties.hashCode()
@@ -339,11 +343,14 @@ private class BottomSheetDialogWrapper(
339343
density: Density,
340344
dialogId: UUID
341345
) : BottomSheetDialog(
342-
/**
343-
* [Window.setClipToOutline] is only available from 22+, but the style attribute exists on 21.
344-
* So use a wrapped context that sets this attribute for compatibility back to 21.
345-
*/
346-
ContextThemeWrapper(composeView.context, R.style.TransparentBottomSheetTheme)
346+
ContextThemeWrapper(
347+
composeView.context,
348+
if (properties.enableEdgeToEdge) {
349+
R.style.TransparentEdgeToEdgeEnabledBottomSheetTheme
350+
} else {
351+
R.style.TransparentEdgeToEdgeDisabledBottomSheetTheme
352+
}
353+
)
347354
),
348355
ViewRootForInspector {
349356
private val bottomSheetDialogLayout: BottomSheetDialogLayout

bottomsheetdialog-compose/src/main/res/values/styles.xml

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<style name="TransparentBottomSheetTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
4-
<item name="bottomSheetDialogTheme">@style/TransparentBottomSheetDialog</item>
3+
<style name="TransparentEdgeToEdgeEnabledBottomSheetTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
4+
<item name="bottomSheetDialogTheme">@style/TransparentEdgeToEdgeEnabledBottomSheetDialog</item>
5+
</style>
6+
<style name="TransparentEdgeToEdgeDisabledBottomSheetTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
7+
<item name="bottomSheetDialogTheme">@style/TransparentEdgeToEdgeDisabledBottomSheetDialog</item>
8+
</style>
9+
10+
<style name="TransparentEdgeToEdgeEnabledBottomSheetDialog" parent="BaseTransparentBottomSheetDialog">
11+
<item name="enableEdgeToEdge">true</item>
12+
<item name="paddingBottomSystemWindowInsets">false</item>
13+
<item name="paddingLeftSystemWindowInsets">true</item>
14+
<item name="paddingRightSystemWindowInsets">true</item>
15+
<item name="paddingTopSystemWindowInsets">true</item>
16+
</style>
17+
18+
<style name="TransparentEdgeToEdgeDisabledBottomSheetDialog" parent="BaseTransparentBottomSheetDialog">
19+
<item name="enableEdgeToEdge">false</item>
20+
<item name="paddingBottomSystemWindowInsets">true</item>
21+
<item name="paddingLeftSystemWindowInsets">true</item>
22+
<item name="paddingRightSystemWindowInsets">true</item>
23+
<item name="paddingTopSystemWindowInsets">true</item>
524
</style>
625

7-
<style name="TransparentBottomSheetDialog" parent="ThemeOverlay.MaterialComponents.BottomSheetDialog">
26+
<style name="BaseTransparentBottomSheetDialog" parent="ThemeOverlay.MaterialComponents.BottomSheetDialog">
827
<item name="bottomSheetStyle">@style/TransparentBottomSheet</item>
928
<item name="android:windowClipToOutline">false</item>
1029
<item name="android:windowBackground">@android:color/transparent</item>

0 commit comments

Comments
 (0)