Skip to content

Commit 32c9872

Browse files
authored
refactor(modal): edge-to-edge setup now optin instead of optout (#1450)
1 parent da5546b commit 32c9872

File tree

2 files changed

+20
-40
lines changed
  • catalog/src/main/kotlin/com/adevinta/spark/catalog/examples/samples/dialog/modal
  • spark/src/main/kotlin/com/adevinta/spark/components/dialog

2 files changed

+20
-40
lines changed

catalog/src/main/kotlin/com/adevinta/spark/catalog/examples/samples/dialog/modal/ModalSample.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ internal fun ModalSample(
8585
ModalScaffold(
8686
onClose = { showDialog = false },
8787
contentPadding = paddingValues,
88+
inEdgeToEdge = true,
8889
mainButton = if (withButtons) {
8990
{ MainButton(it, coroutineScope, snackbarHostState) }
9091
} else {

spark/src/main/kotlin/com/adevinta/spark/components/dialog/ModalScaffold.kt

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ package com.adevinta.spark.components.dialog
2424
import android.app.Activity
2525
import android.content.Context
2626
import android.content.ContextWrapper
27+
import android.os.Build
2728
import android.view.View
29+
import android.view.ViewGroup
2830
import android.view.Window
2931
import android.view.WindowManager
30-
import android.widget.FrameLayout
3132
import androidx.annotation.DrawableRes
3233
import androidx.compose.foundation.layout.Arrangement
3334
import androidx.compose.foundation.layout.Box
@@ -56,7 +57,6 @@ import androidx.compose.material3.TopAppBarDefaults
5657
import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
5758
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
5859
import androidx.compose.runtime.Composable
59-
import androidx.compose.runtime.SideEffect
6060
import androidx.compose.ui.Alignment
6161
import androidx.compose.ui.Modifier
6262
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -126,7 +126,7 @@ public fun ModalScaffold(
126126
supportButton: (@Composable (Modifier) -> Unit)? = {},
127127
title: @Composable () -> Unit = {},
128128
actions: @Composable RowScope.() -> Unit = {},
129-
inEdgeToEdge: Boolean = true,
129+
inEdgeToEdge: Boolean = false,
130130
content: @Composable (PaddingValues) -> Unit,
131131
) {
132132
val size = LocalWindowSizeClass.current
@@ -288,25 +288,7 @@ private fun PhonePortraitModalScaffold(
288288
properties = properties,
289289
) {
290290
// Work around for b/246909281 as for now Dialog doesn't pass the drawing insets to its content
291-
val parentView = LocalView.current.parent as View
292-
293-
val activityWindow = getActivityWindow()
294-
val dialogWindow = getDialogWindow()
295-
296-
SideEffect {
297-
if (
298-
activityWindow != null &&
299-
dialogWindow != null &&
300-
inEdgeToEdge
301-
) {
302-
val attributes = WindowManager.LayoutParams()
303-
attributes.copyFrom(activityWindow.attributes)
304-
attributes.type = dialogWindow.attributes.type
305-
dialogWindow.attributes = attributes
306-
parentView.layoutParams =
307-
FrameLayout.LayoutParams(activityWindow.decorView.width, activityWindow.decorView.height)
308-
}
309-
}
291+
SetUpEdgeToEdgeDialog()
310292

311293
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
312294

@@ -404,24 +386,7 @@ private fun PhoneLandscapeModalScaffold(
404386
properties = properties,
405387
) {
406388
// Work around for b/246909281 as for now Dialog doesn't pass the drawing insets to its content
407-
val parentView = LocalView.current.parent as View
408-
val activityWindow = getActivityWindow()
409-
val dialogWindow = getDialogWindow()
410-
411-
SideEffect {
412-
if (
413-
activityWindow != null &&
414-
dialogWindow != null &&
415-
inEdgeToEdge
416-
) {
417-
val attributes = WindowManager.LayoutParams()
418-
attributes.copyFrom(activityWindow.attributes)
419-
attributes.type = dialogWindow.attributes.type
420-
dialogWindow.attributes = attributes
421-
parentView.layoutParams =
422-
FrameLayout.LayoutParams(activityWindow.decorView.width, activityWindow.decorView.height)
423-
}
424-
}
389+
SetUpEdgeToEdgeDialog()
425390
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
426391

427392
Scaffold(
@@ -505,6 +470,20 @@ private fun CloseIconButton(onClose: () -> Unit) {
505470
}
506471
}
507472

473+
@Composable
474+
private fun SetUpEdgeToEdgeDialog() {
475+
val parentView = LocalView.current.parent as View
476+
val window = (parentView as DialogWindowProvider).window
477+
478+
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
479+
480+
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
481+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
482+
window.attributes.fitInsetsTypes = 0
483+
window.attributes.fitInsetsSides = 0
484+
}
485+
}
486+
508487
/**
509488
* Merge 2 padding values with each others.
510489
* This was not provided by Google so we're making our own

0 commit comments

Comments
 (0)