Apply padding to FabLayout

This commit is contained in:
GG Bond authored and Vladimir Dostoyevskiy committed 2024-02-19 15:29:33 +08:00
1 parent 6aa6ee2810
commit 1761493c8e
2 files changed
+24 -5

No files matched your search

@@ -74,7 +74,6 @@ import androidx.compose.runtime.State
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.currentCompositeKeyHash
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -86,6 +85,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -352,22 +352,25 @@ class MainActivity : EhActivity() {
}
val currentDestination by navController.currentDestinationAsState()
val lockDrawerHandle = remember { mutableStateListOf<Int>() }
var snackbarFabPadding by remember { mutableIntStateOf(0) }
var snackbarFabPadding by remember { mutableStateOf(0.dp) }
val drawerLocked = lockDrawerHandle.isNotEmpty()
val viewConfiguration = LocalViewConfiguration.current
val density = LocalDensity.current
CompositionLocalProvider(
LocalNavDrawerState provides navDrawerState,
LocalSideSheetState provides sideSheetState,
LocalDrawerLockHandle provides lockDrawerHandle,
LocalSnackbarHostState provides snackbarState,
LocalSnackbarFabPadding provides animateDpAsState(snackbarFabPadding.dp, label = "SnackbarFabPadding"),
LocalSnackbarFabPadding provides animateDpAsState(snackbarFabPadding, label = "SnackbarFabPadding"),
) {
Scaffold(
snackbarHost = {
SnackbarHost(
hostState = snackbarState,
modifier = Modifier.onGloballyPositioned {
snackbarFabPadding = it.size.height
with(density) {
snackbarFabPadding = it.size.height.toDp()
}
},
)
},
@@ -9,6 +9,7 @@ import androidx.compose.foundation.MutatePriority
import androidx.compose.foundation.MutatorMutex
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -20,7 +21,9 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.SmallFloatingActionButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -32,8 +35,11 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.layout
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
import com.hippo.ehviewer.ui.LocalSnackbarFabPadding
import com.hippo.ehviewer.ui.tools.delegateSnapshotUpdate
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.CancellationException
@@ -42,6 +48,15 @@ import kotlinx.coroutines.launch
import moe.tarsin.coroutines.onEachLatest
import moe.tarsin.coroutines.runSuspendCatching
@Stable
@ReadOnlyComposable
private fun State<Dp>.asBottomPaddingValues() = object : PaddingValues {
override fun calculateBottomPadding() = value
override fun calculateLeftPadding(layoutDirection: LayoutDirection) = 0.dp
override fun calculateRightPadding(layoutDirection: LayoutDirection) = 0.dp
override fun calculateTopPadding() = 0.dp
}
enum class FabLayoutValue {
Hidden,
Primary,
@@ -108,6 +123,7 @@ fun FabLayout(
rotateWhenExpand: Boolean = true,
fabBuilder: FabBuilder.() -> Unit,
) {
val snackbarPadding = LocalSnackbarFabPadding.current.asBottomPaddingValues()
val updatedHidden by rememberUpdatedState(hidden)
val updatedExpanded by rememberUpdatedState(expanded)
val newState = when {
@@ -142,7 +158,7 @@ fun FabLayout(
}
val appearState by state.appearProgress.asState()
Box(
modifier = Modifier.fillMaxSize().navigationBarsPadding().padding(16.dp),
modifier = Modifier.fillMaxSize().navigationBarsPadding().padding(16.dp).padding(snackbarPadding),
contentAlignment = Alignment.BottomEnd,
) {
Box(