diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt index 11db5cd5f..0e552bc44 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt @@ -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 { error("CompositionLocal LocalNavDrawerState not present!") } val LocalSideSheetState = compositionLocalOf { error("CompositionLocal LocalSideSheetState not present!") } val LocalDrawerLockHandle = compositionLocalOf> { error("CompositionLocal LocalDrawerLockHandle not present!") } -val LocalSnackbarHostState = compositionLocalOf { error("CompositionLocal LocalSnackbarHostState not present!") } -val LocalSnackbarFabPadding = compositionLocalOf> { error("CompositionLocal LocalSnackbarFabPadding not present!") } +val LocalSnackBarHostState = compositionLocalOf { error("CompositionLocal LocalSnackBarHostState not present!") } +val LocalSnackBarFabPadding = compositionLocalOf> { error("CompositionLocal LocalSnackBarFabPadding not present!") } @Composable fun LockDrawer(value: Boolean) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt index bfec2f38f..20edc364b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/FabLayout.kt @@ -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.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( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index e19278adf..d94bd9c38 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -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() } val coroutineScope = rememberCoroutineScope() diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt index 295bb84f8..7b16f5481 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt @@ -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) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt index 2f1ae09b6..fc12ad784 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailScreen.kt @@ -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() } - val snackbarState = LocalSnackbarHostState.current + val snackbarState = LocalSnackBarHostState.current var showReadAction by rememberSaveable { mutableStateOf(true) } LaunchedEffect(args, galleryInfo) { if (showReadAction) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt index a3b408649..f25a64e70 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt @@ -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() } val density = LocalDensity.current val dialogState = LocalDialogState.current diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SnackBarPadding.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SnackBarPadding.kt new file mode 100644 index 000000000..a3e46556d --- /dev/null +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SnackBarPadding.kt @@ -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.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) +}