Rebase Scaffold fork (#7929)

This changes content insets handling
This commit is contained in:
Ivan Iskandar 2022-09-03 21:33:22 +07:00 committed by GitHub
parent cc6aef693e
commit 3fa68ed217
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -18,21 +18,10 @@ package eu.kanade.presentation.components
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.SmallTopAppBar
import androidx.compose.material3.Snackbar
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Surface
import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.contentColorFor import androidx.compose.material3.contentColorFor
@ -83,9 +72,9 @@ import androidx.compose.ui.unit.dp
* matching content color for [containerColor], or to the current [LocalContentColor] if * matching content color for [containerColor], or to the current [LocalContentColor] if
* [containerColor] is not a color from the theme. * [containerColor] is not a color from the theme.
* @param content content of the screen. The lambda receives a [PaddingValues] that should be * @param content content of the screen. The lambda receives a [PaddingValues] that should be
* applied to the content root via [Modifier.padding] to properly offset top and bottom bars. If * applied to the content root via [Modifier.padding] and [Modifier.consumeWindowInsets] to
* using [Modifier.verticalScroll], apply this modifier to the child of the scroll, and not on * properly offset top and bottom bars. If using [Modifier.verticalScroll], apply this modifier to
* the scroll itself. * the child of the scroll, and not on the scroll itself.
*/ */
@ExperimentalMaterial3Api @ExperimentalMaterial3Api
@Composable @Composable
@ -101,16 +90,12 @@ fun Scaffold(
content: @Composable (PaddingValues) -> Unit, content: @Composable (PaddingValues) -> Unit,
) { ) {
/** /**
* Tachiyomi: always handle insets and pass scroll behavior to topBar * Tachiyomi: Pass scroll behavior to topBar
*/ */
val insetPaddingValue = WindowInsets.navigationBars
.only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom)
.asPaddingValues()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
Surface( androidx.compose.material3.Surface(
modifier = Modifier modifier = Modifier
.padding(insetPaddingValue)
.nestedScroll(scrollBehavior.nestedScrollConnection) .nestedScroll(scrollBehavior.nestedScrollConnection)
.then(modifier), .then(modifier),
color = containerColor, color = containerColor,
@ -231,9 +216,19 @@ private fun ScaffoldLayout(
* Tachiyomi: Also take account of fab height when providing inner padding * Tachiyomi: Also take account of fab height when providing inner padding
*/ */
val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) { val bodyContentPlaceables = subcompose(ScaffoldLayoutContent.MainContent) {
val insets = WindowInsets.Companion.safeDrawing
.asPaddingValues(this@SubcomposeLayout)
val innerPadding = PaddingValues( val innerPadding = PaddingValues(
top = topBarHeight.toDp(), top =
bottom = bottomBarHeight.toDp() + fabHeight.toDp(), if (topBarHeight == 0) insets.calculateTopPadding()
else topBarHeight.toDp(),
bottom =
(
if (bottomBarHeight == 0) insets.calculateBottomPadding()
else bottomBarHeight.toDp()
) + fabHeight.toDp(),
start = insets.calculateLeftPadding((this@SubcomposeLayout).layoutDirection),
end = insets.calculateRightPadding((this@SubcomposeLayout).layoutDirection),
) )
content(innerPadding) content(innerPadding)
}.map { it.measure(looseConstraints) } }.map { it.measure(looseConstraints) }