Skip to content

Commit

Permalink
refactor(modal): edge-to-edge setup now optin instead of optout (#1450)
Browse files Browse the repository at this point in the history
(cherry picked from commit 32c9872)
  • Loading branch information
soulcramer committed Jan 29, 2025
1 parent 94fec02 commit e5b01e8
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ internal fun ModalSample(
ModalScaffold(
onClose = { showDialog = false },
contentPadding = paddingValues,
inEdgeToEdge = true,
mainButton = if (withButtons) {
{ MainButton(it, coroutineScope, snackbarHostState) }
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ package com.adevinta.spark.components.dialog
import android.app.Activity
import android.content.Context
import android.content.ContextWrapper
import android.os.Build
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import android.widget.FrameLayout
import androidx.annotation.DrawableRes
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand Down Expand Up @@ -56,7 +57,6 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
Expand Down Expand Up @@ -126,7 +126,7 @@ public fun ModalScaffold(
supportButton: (@Composable (Modifier) -> Unit)? = {},
title: @Composable () -> Unit = {},
actions: @Composable RowScope.() -> Unit = {},
inEdgeToEdge: Boolean = true,
inEdgeToEdge: Boolean = false,
content: @Composable (PaddingValues) -> Unit,
) {
val size = LocalWindowSizeClass.current
Expand Down Expand Up @@ -288,25 +288,7 @@ private fun PhonePortraitModalScaffold(
properties = properties,
) {
// Work around for b/246909281 as for now Dialog doesn't pass the drawing insets to its content
val parentView = LocalView.current.parent as View

val activityWindow = getActivityWindow()
val dialogWindow = getDialogWindow()

SideEffect {
if (
activityWindow != null &&
dialogWindow != null &&
inEdgeToEdge
) {
val attributes = WindowManager.LayoutParams()
attributes.copyFrom(activityWindow.attributes)
attributes.type = dialogWindow.attributes.type
dialogWindow.attributes = attributes
parentView.layoutParams =
FrameLayout.LayoutParams(activityWindow.decorView.width, activityWindow.decorView.height)
}
}
SetUpEdgeToEdgeDialog()

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()

Expand Down Expand Up @@ -404,24 +386,7 @@ private fun PhoneLandscapeModalScaffold(
properties = properties,
) {
// Work around for b/246909281 as for now Dialog doesn't pass the drawing insets to its content
val parentView = LocalView.current.parent as View
val activityWindow = getActivityWindow()
val dialogWindow = getDialogWindow()

SideEffect {
if (
activityWindow != null &&
dialogWindow != null &&
inEdgeToEdge
) {
val attributes = WindowManager.LayoutParams()
attributes.copyFrom(activityWindow.attributes)
attributes.type = dialogWindow.attributes.type
dialogWindow.attributes = attributes
parentView.layoutParams =
FrameLayout.LayoutParams(activityWindow.decorView.width, activityWindow.decorView.height)
}
}
SetUpEdgeToEdgeDialog()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()

Scaffold(
Expand Down Expand Up @@ -505,6 +470,20 @@ private fun CloseIconButton(onClose: () -> Unit) {
}
}

@Composable
private fun SetUpEdgeToEdgeDialog() {
val parentView = LocalView.current.parent as View
val window = (parentView as DialogWindowProvider).window

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)

window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.attributes.fitInsetsTypes = 0
window.attributes.fitInsetsSides = 0
}
}

/**
* Merge 2 padding values with each others.
* This was not provided by Google so we're making our own
Expand Down

0 comments on commit e5b01e8

Please sign in to comment.