pull/1865/merge
henni 3 months ago committed by GitHub
commit 4b90e4a889
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -18,10 +18,13 @@ package com.google.samples.apps.nowinandroid.ui
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
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.WindowInsetsSides
import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.safeDrawing
@ -42,6 +45,7 @@ import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
@ -52,6 +56,10 @@ import androidx.compose.ui.composed
import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.findRootCoordinates
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
@ -185,7 +193,8 @@ internal fun NiaApp(
snackbarHost = { snackbarHost = {
SnackbarHost( SnackbarHost(
snackbarHostState, snackbarHostState,
modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing), modifier = Modifier
.refinedImePadding(),
) )
}, },
) { padding -> ) { padding ->
@ -276,3 +285,23 @@ private fun NavDestination?.isRouteInHierarchy(route: KClass<*>) =
this?.hierarchy?.any { this?.hierarchy?.any {
it.hasRoute(route) it.hasRoute(route)
} ?: false } ?: false
fun Modifier.refinedImePadding() = composed {
var consumePadding by remember { mutableIntStateOf(0) }
val density = LocalDensity.current
val navigationBars = WindowInsets.navigationBars
onGloballyPositioned { coordinates ->
consumePadding = coordinates.findRootCoordinates().size.height -
(coordinates.positionInWindow().y + coordinates.size.height).toInt()
}
.consumeWindowInsets(
PaddingValues(
bottom = with(LocalDensity.current) {
maxOf(0.dp, (consumePadding - navigationBars.getBottom(density)).toDp())
},
),
)
.imePadding()
}

Loading…
Cancel
Save