Fix reader padding and progress indicator theme

This commit is contained in:
FooIbar authored and renovate[bot] committed 2024-09-06 10:00:21 +08:00
1 parent 63ec1aa217
commit 188a236a90
7 files changed
+71 -68

No files matched your search

@@ -5,6 +5,7 @@ import androidx.activity.compose.setContent
import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
@@ -19,7 +20,7 @@ import soup.compose.material.motion.animation.materialSharedAxisXOut
import soup.compose.material.motion.animation.rememberSlideDistance
inline fun ComponentActivity.setMD3Content(crossinline content: @Composable () -> Unit) = setContent {
EhTheme {
EhTheme(useDarkTheme = isSystemInDarkTheme()) {
ProvideVectorPainterCache {
val dialogState = remember { DialogState() }
dialogState.Intercept()
@@ -1,6 +1,5 @@
package com.hippo.ehviewer.ui.reader
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.pager.PagerState
@@ -44,7 +43,6 @@ fun GalleryPager(
onSelectPage: (ReaderPage) -> Unit,
onMenuRegionClick: () -> Unit,
modifier: Modifier = Modifier,
contentPadding: PaddingValues = PaddingValues(0.dp),
) {
val isPagerType = !ReadingModeType.isWebtoon(type)
val pagerNavigation by Settings.readerPagerNav.collectAsState()
@@ -84,7 +82,6 @@ fun GalleryPager(
navigator = { navigator },
onSelectPage = onSelectPage,
onMenuRegionClick = onMenuRegionClick,
contentPadding = contentPadding,
modifier = modifier.pointerInput(channel) {
awaitPointerEventScope {
while (true) {
@@ -103,7 +100,6 @@ fun GalleryPager(
navigator = { navigator },
onSelectPage = onSelectPage,
onMenuRegionClick = onMenuRegionClick,
contentPadding = contentPadding,
modifier = modifier,
)
}
@@ -2,7 +2,6 @@ package com.hippo.ehviewer.ui.reader
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.PagerState
@@ -58,7 +57,6 @@ fun PagerViewer(
navigator: () -> NavigationRegions,
onSelectPage: (ReaderPage) -> Unit,
onMenuRegionClick: () -> Unit,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
val scope = rememberCoroutineScope()
@@ -76,7 +74,6 @@ fun PagerViewer(
VerticalPager(
state = pagerState,
modifier = modifier,
contentPadding = contentPadding,
key = { it },
) { index ->
val page = items[index]
@@ -100,7 +97,6 @@ fun PagerViewer(
HorizontalPager(
state = pagerState,
modifier = modifier,
contentPadding = contentPadding,
reverseLayout = isRtl xor isRtlLayout,
key = { it },
) { index ->
@@ -10,10 +10,8 @@ import androidx.compose.foundation.gestures.awaitEachGesture
import androidx.compose.foundation.gestures.waitForUpOrCancellation
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.displayCutout
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBarsPadding
@@ -49,7 +47,6 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.view.WindowInsetsControllerCompat
import arrow.core.Either
import arrow.core.raise.ensure
@@ -64,8 +61,10 @@ import com.hippo.ehviewer.gallery.ArchivePageLoader
import com.hippo.ehviewer.gallery.EhPageLoader
import com.hippo.ehviewer.gallery.PageLoader2
import com.hippo.ehviewer.ui.composing
import com.hippo.ehviewer.ui.theme.EhTheme
import com.hippo.ehviewer.ui.tools.Await
import com.hippo.ehviewer.ui.tools.DialogState
import com.hippo.ehviewer.ui.tools.EmptyWindowInsets
import com.hippo.ehviewer.util.displayString
import com.hippo.files.toOkioPath
import com.ramcosta.composedestinations.annotation.Destination
@@ -75,6 +74,7 @@ import eu.kanade.tachiyomi.ui.reader.PageIndicatorText
import eu.kanade.tachiyomi.ui.reader.ReaderAppBars
import eu.kanade.tachiyomi.ui.reader.ReaderContentOverlay
import eu.kanade.tachiyomi.ui.reader.ReaderPageSheetMeta
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withIOContext
@@ -93,6 +93,14 @@ sealed interface ReaderScreenArgs : Parcelable {
data class Archive(val uri: Uri) : ReaderScreenArgs
}
@Composable
private fun Background(
color: Color,
content: @Composable () -> Unit,
) = Box(Modifier.fillMaxSize().background(color), contentAlignment = Alignment.Center) {
EhTheme(useDarkTheme = color != Color.White, content = content)
}
@Destination<RootGraph>
@Composable
fun AnimatedVisibilityScope.ReaderScreen(args: ReaderScreenArgs, navigator: DestinationsNavigator) = composing(navigator) {
@@ -124,7 +132,7 @@ fun AnimatedVisibilityScope.ReaderScreen(args: ReaderScreenArgs, navigator: Dest
}.fold({ it.displayString() }, { it })
},
placeholder = {
Box(Modifier.fillMaxSize().background(bgColor), contentAlignment = Alignment.Center) {
Background(bgColor) {
CircularProgressIndicator()
}
},
@@ -135,7 +143,7 @@ fun AnimatedVisibilityScope.ReaderScreen(args: ReaderScreenArgs, navigator: Dest
ReaderScreen(pageLoader, info, navigator)
}
} else {
Box(Modifier.fillMaxSize().background(bgColor), contentAlignment = Alignment.Center) {
Background(bgColor) {
Text(
text = error,
color = MaterialTheme.colorScheme.error,
@@ -203,57 +211,60 @@ fun AnimatedVisibilityScope.ReaderScreen(pageLoader: PageLoader2, info: BaseGall
Settings.showNavigationOverlayNewUser.value = false
mutableStateOf(showOnStart)
}
GalleryPager(
type = readingMode,
pagerState = pagerState,
lazyListState = lazyListState,
pageLoader = pageLoader,
showNavigationOverlay = showNavigationOverlay,
onNavigationModeChange = { showNavigationOverlay = true },
onSelectPage = { page ->
if (Settings.readerLongTapAction.value) {
launch {
dialog { cont ->
fun dispose() = cont.resume(Unit)
val state = rememberModalBottomSheetState()
ModalBottomSheet(
onDismissRequest = { dispose() },
modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Top)),
sheetState = state,
contentWindowInsets = { WindowInsets(0) },
) {
ReaderPageSheetMeta(
retry = { pageLoader.retryPage(page.index) },
retryOrigin = { pageLoader.retryPage(page.index, true) },
share = { launchIO { with(pageLoader) { shareImage(page, info) } } },
copy = { launchIO { with(pageLoader) { copy(page) } } },
save = { launchIO { with(pageLoader) { save(page) } } },
saveTo = { launchIO { with(pageLoader) { saveTo(page) } } },
dismiss = { launch { state.hide().also { dispose() } } },
)
}
val onSelectPage = { page: ReaderPage ->
if (Settings.readerLongTapAction.value) {
launch {
dialog { cont ->
fun dispose() = cont.resume(Unit)
val state = rememberModalBottomSheetState()
ModalBottomSheet(
onDismissRequest = { dispose() },
modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Top)),
sheetState = state,
contentWindowInsets = { WindowInsets(0) },
) {
ReaderPageSheetMeta(
retry = { pageLoader.retryPage(page.index) },
retryOrigin = { pageLoader.retryPage(page.index, true) },
share = { launchIO { with(pageLoader) { shareImage(page, info) } } },
copy = { launchIO { with(pageLoader) { copy(page) } } },
save = { launchIO { with(pageLoader) { save(page) } } },
saveTo = { launchIO { with(pageLoader) { saveTo(page) } } },
dismiss = { launch { state.hide().also { dispose() } } },
)
}
}
}
},
onMenuRegionClick = { appbarVisible = !appbarVisible },
modifier = Modifier.background(bgColor).pointerInput(syncState) {
awaitEachGesture {
waitForUpOrCancellation()
syncState.reset()
showNavigationOverlay = false
}
},
contentPadding = if (fullscreen) {
}
}
EhTheme(useDarkTheme = bgColor != Color.White) {
val insets = if (fullscreen) {
if (cutoutShort) {
PaddingValues(0.dp)
EmptyWindowInsets
} else {
WindowInsets.displayCutout.asPaddingValues()
WindowInsets.displayCutout
}
} else {
WindowInsets.systemBars.asPaddingValues()
},
)
WindowInsets.systemBars
}
GalleryPager(
type = readingMode,
pagerState = pagerState,
lazyListState = lazyListState,
pageLoader = pageLoader,
showNavigationOverlay = showNavigationOverlay,
onNavigationModeChange = { showNavigationOverlay = true },
onSelectPage = onSelectPage,
onMenuRegionClick = { appbarVisible = !appbarVisible },
modifier = Modifier.background(bgColor).pointerInput(syncState) {
awaitEachGesture {
waitForUpOrCancellation()
syncState.reset()
showNavigationOverlay = false
}
}.fillMaxSize().windowInsetsPadding(insets),
)
}
val brightness by Settings.customBrightness.collectAsState()
val brightnessValue by Settings.customBrightnessValue.collectAsState()
val colorOverlayEnabled by Settings.colorFilter.collectAsState()
@@ -36,7 +36,6 @@ fun WebtoonViewer(
navigator: () -> NavigationRegions,
onSelectPage: (ReaderPage) -> Unit,
onMenuRegionClick: () -> Unit,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
val scope = rememberCoroutineScope()
@@ -72,17 +71,14 @@ fun WebtoonViewer(
val info = lazyListState.layoutInfo.visibleItemsInfo.find { info ->
info.offset <= ofs.y && info.offset + info.size > ofs.y
}
if (info == null && withGaps) {
// Maybe user long-click on gaps? ¯\_(ツ)_/¯
return@zoomable
if (info != null) {
onSelectPage(items[info.index])
}
info ?: error("Internal error finding long click item!!! offset:$ofs")
onSelectPage(items[info.index])
},
onDoubleClick = DoubleTapZoom,
),
state = lazyListState,
contentPadding = contentPadding + PaddingValues(horizontal = sidePadding),
contentPadding = PaddingValues(horizontal = sidePadding),
verticalArrangement = Arrangement.spacedBy(if (withGaps) 15.dp else 0.dp),
) {
items(items, key = { it.index }) { page ->
@@ -1,6 +1,5 @@
package com.hippo.ehviewer.ui.theme
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.scrollbar.LocalScrollbarStyle
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
@@ -19,8 +18,7 @@ import com.hippo.ehviewer.ui.tools.scrollbarStyle
import com.hippo.ehviewer.util.isAtLeastS
@Composable
fun EhTheme(content: @Composable () -> Unit) {
val useDarkTheme = isSystemInDarkTheme()
fun EhTheme(useDarkTheme: Boolean, content: @Composable () -> Unit) {
val amoled by Settings.blackDarkTheme.collectAsState()
val context = LocalContext.current
val colors = if (useDarkTheme) {
@@ -0,0 +1,5 @@
package com.hippo.ehviewer.ui.tools
import androidx.compose.foundation.layout.WindowInsets
val EmptyWindowInsets = WindowInsets(0, 0, 0, 0)