Extract a snackBarPadding Modifier

This commit is contained in:
GG Bond authored and Vladimir Dostoyevskiy committed 2024-02-19 15:55:41 +08:00
1 parent 1761493c8e
commit b2fded76d5
7 files changed
+44 -29

No files matched your search

@@ -360,8 +360,8 @@ class MainActivity : EhActivity() {
LocalNavDrawerState provides navDrawerState,
LocalSideSheetState provides sideSheetState,
LocalDrawerLockHandle provides lockDrawerHandle,
LocalSnackbarHostState provides snackbarState,
LocalSnackbarFabPadding provides animateDpAsState(snackbarFabPadding, label = "SnackbarFabPadding"),
LocalSnackBarHostState provides snackbarState,
LocalSnackBarFabPadding provides animateDpAsState(snackbarFabPadding, label = "SnackbarFabPadding"),
) {
Scaffold(
snackbarHost = {
@@ -529,8 +529,8 @@ class MainActivity : EhActivity() {
val LocalNavDrawerState = compositionLocalOf<DrawerState2> { error("CompositionLocal LocalNavDrawerState not present!") }
val LocalSideSheetState = compositionLocalOf<DrawerState2> { error("CompositionLocal LocalSideSheetState not present!") }
val LocalDrawerLockHandle = compositionLocalOf<SnapshotStateList<Int>> { error("CompositionLocal LocalDrawerLockHandle not present!") }
val LocalSnackbarHostState = compositionLocalOf<SnackbarHostState> { error("CompositionLocal LocalSnackbarHostState not present!") }
val LocalSnackbarFabPadding = compositionLocalOf<State<Dp>> { error("CompositionLocal LocalSnackbarFabPadding not present!") }
val LocalSnackBarHostState = compositionLocalOf<SnackbarHostState> { error("CompositionLocal LocalSnackBarHostState not present!") }
val LocalSnackBarFabPadding = compositionLocalOf<State<Dp>> { error("CompositionLocal LocalSnackBarFabPadding not present!") }
@Composable
fun LockDrawer(value: Boolean) {
@@ -9,7 +9,6 @@ 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
@@ -21,9 +20,7 @@ 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
@@ -35,12 +32,10 @@ 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 com.hippo.ehviewer.ui.tools.snackBarPadding
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.flow.first
@@ -48,15 +43,6 @@ 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,
@@ -123,7 +109,6 @@ 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 {
@@ -158,7 +143,7 @@ fun FabLayout(
}
val appearState by state.appearProgress.asState()
Box(
modifier = Modifier.fillMaxSize().navigationBarsPadding().padding(16.dp).padding(snackbarPadding),
modifier = Modifier.fillMaxSize().navigationBarsPadding().padding(16.dp).snackBarPadding(),
contentAlignment = Alignment.BottomEnd,
) {
Box(
@@ -66,7 +66,7 @@ import com.hippo.ehviewer.collectAsState
import com.hippo.ehviewer.icons.EhIcons
import com.hippo.ehviewer.icons.filled.GoTo
import com.hippo.ehviewer.ui.LocalSideSheetState
import com.hippo.ehviewer.ui.LocalSnackbarHostState
import com.hippo.ehviewer.ui.LocalSnackBarHostState
import com.hippo.ehviewer.ui.LockDrawer
import com.hippo.ehviewer.ui.MainActivity
import com.hippo.ehviewer.ui.main.FAB_ANIMATE_TIME
@@ -122,7 +122,7 @@ fun FavouritesScreen(navigator: DestinationsNavigator) {
}
val context = LocalContext.current
val density = LocalDensity.current
val snackbarState = LocalSnackbarHostState.current
val snackbarState = LocalSnackBarHostState.current
val dialogState = LocalDialogState.current
val activity = remember(context) { context.findActivity<MainActivity>() }
val coroutineScope = rememberCoroutineScope()
@@ -82,7 +82,7 @@ import com.hippo.ehviewer.client.data.GalleryComment
import com.hippo.ehviewer.client.data.ListUrlBuilder
import com.hippo.ehviewer.dao.Filter
import com.hippo.ehviewer.dao.FilterMode
import com.hippo.ehviewer.ui.LocalSnackbarHostState
import com.hippo.ehviewer.ui.LocalSnackBarHostState
import com.hippo.ehviewer.ui.LockDrawer
import com.hippo.ehviewer.ui.MainActivity
import com.hippo.ehviewer.ui.jumpToReaderByPage
@@ -153,7 +153,7 @@ fun GalleryCommentsScreen(gid: Long, navigator: DestinationsNavigator) {
LockDrawer(true)
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
val dialogState = LocalDialogState.current
val snackbarState = LocalSnackbarHostState.current
val snackbarState = LocalSnackBarHostState.current
val coroutineScope = rememberCoroutineScope()
var commenting by rememberSaveable { mutableStateOf(false) }
@@ -118,7 +118,7 @@ import com.hippo.ehviewer.download.DownloadManager as EhDownloadManager
import com.hippo.ehviewer.ktbuilder.imageRequest
import com.hippo.ehviewer.spider.SpiderDen
import com.hippo.ehviewer.ui.GalleryInfoBottomSheet
import com.hippo.ehviewer.ui.LocalSnackbarHostState
import com.hippo.ehviewer.ui.LocalSnackBarHostState
import com.hippo.ehviewer.ui.LockDrawer
import com.hippo.ehviewer.ui.MainActivity
import com.hippo.ehviewer.ui.confirmRemoveDownload
@@ -229,7 +229,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: DestinationsNa
val galleryDetailUrl = remember { EhUrl.getGalleryDetailUrl(gid, token, 0, false) }
val context = LocalContext.current
val activity = remember(context) { context.findActivity<MainActivity>() }
val snackbarState = LocalSnackbarHostState.current
val snackbarState = LocalSnackBarHostState.current
var showReadAction by rememberSaveable { mutableStateOf(true) }
LaunchedEffect(args, galleryInfo) {
if (showReadAction) {
@@ -112,7 +112,7 @@ import com.hippo.ehviewer.icons.EhIcons
import com.hippo.ehviewer.icons.filled.GoTo
import com.hippo.ehviewer.image.Image.Companion.decodeBitmap
import com.hippo.ehviewer.ui.LocalSideSheetState
import com.hippo.ehviewer.ui.LocalSnackbarHostState
import com.hippo.ehviewer.ui.LocalSnackBarHostState
import com.hippo.ehviewer.ui.MainActivity
import com.hippo.ehviewer.ui.destinations.ProgressScreenDestination
import com.hippo.ehviewer.ui.doGalleryInfoAction
@@ -216,7 +216,7 @@ fun GalleryListScreen(lub: ListUrlBuilder, navigator: DestinationsNavigator) {
animationSpec = tween(FAB_ANIMATE_TIME * 2),
) { showSearchLayout = false }
val context = LocalContext.current
val snackbarState = LocalSnackbarHostState.current
val snackbarState = LocalSnackBarHostState.current
val activity = remember { context.findActivity<MainActivity>() }
val density = LocalDensity.current
val dialogState = LocalDialogState.current
@@ -0,0 +1,30 @@
package com.hippo.ehviewer.ui.tools
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.hippo.ehviewer.ui.LocalSnackBarFabPadding
@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
}
@ReadOnlyComposable
@Composable
@Stable
fun Modifier.snackBarPadding(): Modifier {
val snackBarPadding = LocalSnackBarFabPadding.current.asBottomPaddingValues()
return padding(snackBarPadding)
}