From fd3c87be2297d8b6f0f3bdb65d96a24bf144b73d Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:08:56 +0800 Subject: [PATCH] Make reader bottom sheet scrollable and fix insets --- .../ehviewer/ui/reader/ColorFilterSetting.kt | 5 ++++- .../ehviewer/ui/reader/ReaderGeneralSetting.kt | 6 +++++- .../ehviewer/ui/reader/ReaderModeSetting.kt | 5 ++++- .../hippo/ehviewer/ui/reader/ReaderScreen.kt | 9 ++++----- .../tachiyomi/ui/reader/ReaderActivity.kt | 9 +++------ .../tachiyomi/ui/reader/ReaderPageSheet.kt | 18 ++++++++++++------ 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ColorFilterSetting.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ColorFilterSetting.kt index 6c22ce28b..0a635baa0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ColorFilterSetting.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ColorFilterSetting.kt @@ -2,7 +2,10 @@ package com.hippo.ehviewer.ui.reader import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Brightness5 import androidx.compose.material3.Icon @@ -25,7 +28,7 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.asMutableState @Composable -fun ColorFilterSetting() = Column { +fun ColorFilterSetting() = Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) { val customBrightness = Settings.customBrightness.asMutableState() SwitchChoice( title = stringResource(id = R.string.pref_custom_brightness), diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt index 6426d9c9d..d7f79d36c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderGeneralSetting.kt @@ -2,8 +2,12 @@ package com.hippo.ehviewer.ui.reader import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import com.hippo.ehviewer.R @@ -11,7 +15,7 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.asMutableState @Composable -fun ReaderGeneralSetting() = Column { +fun ReaderGeneralSetting() = Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) { SpinnerChoice( title = stringResource(id = R.string.pref_reader_theme), entries = stringArrayResource(id = R.array.reader_themes), diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderModeSetting.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderModeSetting.kt index 5ca47f062..2e24dfdc2 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderModeSetting.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderModeSetting.kt @@ -4,8 +4,11 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -21,7 +24,7 @@ import com.hippo.ehviewer.collectAsState import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType @Composable -fun ReaderModeSetting() = Column { +fun ReaderModeSetting() = Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) { SpinnerChoice( title = stringResource(id = R.string.pref_category_reading_mode), entries = stringArrayResource(id = R.array.viewers_selector), diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index cad858ede..f1107346c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -4,10 +4,10 @@ import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.statusBarsIgnoringVisibility import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.BottomSheetDefaults @@ -112,7 +112,7 @@ fun ReaderScreen(info: BaseGalleryInfo, page: Int = -1, navigator: DestinationsN ModalBottomSheet( onDismissRequest = { dispose() }, sheetState = state, - windowInsets = WindowInsets(0), + windowInsets = WindowInsets.statusBarsIgnoringVisibility, ) { ReaderPageSheetMeta( retry = { pageLoader.retryPage(page.index) }, @@ -123,7 +123,6 @@ fun ReaderScreen(info: BaseGalleryInfo, page: Int = -1, navigator: DestinationsN saveTo = { launchIO { with(pageLoader) { saveTo(page) } } }, dismiss = { launch { state.hide().also { dispose() } } }, ) - Spacer(modifier = Modifier.navigationBarsPadding()) } } } @@ -183,12 +182,12 @@ fun ReaderScreen(info: BaseGalleryInfo, page: Int = -1, navigator: DestinationsN // Yeah, I know color state should not be read here, but we have to do it... scrimColor = scrim, dragHandle = null, - windowInsets = WindowInsets(0), + windowInsets = WindowInsets.statusBarsIgnoringVisibility, ) { SettingsPager(modifier = Modifier.fillMaxSize()) { page -> isColorFilter = page == 2 + appbarVisible = !isColorFilter } - Spacer(modifier = Modifier.navigationBarsPadding()) } } } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 1cc96680f..a9307ac55 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -43,10 +43,9 @@ import androidx.annotation.RequiresApi import androidx.annotation.StringRes import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.statusBarsIgnoringVisibility import androidx.compose.material3.BottomSheetDefaults import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme @@ -319,13 +318,12 @@ class ReaderActivity : EhActivity() { dragHandle = null, // Yeah, I know color state should not be read here, but we have to do it... scrimColor = scrim, - windowInsets = WindowInsets(0), + windowInsets = WindowInsets.statusBarsIgnoringVisibility, ) { SettingsPager(modifier = Modifier.fillMaxSize()) { page -> isColorFilter = page == 2 setMenuVisibility(!isColorFilter) } - Spacer(modifier = Modifier.navigationBarsPadding()) } } } @@ -650,10 +648,9 @@ class ReaderActivity : EhActivity() { dialogState.dialog { ModalBottomSheet( onDismissRequest = { it.cancel() }, - windowInsets = WindowInsets(0), + windowInsets = WindowInsets.statusBarsIgnoringVisibility, ) { ReaderPageSheet(page) { it.cancel() } - Spacer(modifier = Modifier.navigationBarsPadding()) } } } diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt index 3ae3faa35..2f6384aa6 100644 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt +++ b/app/src/main/kotlin/eu/kanade/tachiyomi/ui/reader/ReaderPageSheet.kt @@ -2,12 +2,16 @@ package eu.kanade.tachiyomi.ui.reader import androidx.annotation.StringRes import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.FileCopy import androidx.compose.material.icons.filled.Refresh @@ -47,12 +51,14 @@ fun ReaderPageSheetMeta( Spacer(modifier = Modifier.size(32.dp)) Text(text = stringResource(id = text)) } - Item(icon = Icons.Default.Refresh, text = R.string.refresh, onClick = retry) - Item(icon = Icons.Default.Refresh, text = R.string.refresh_original, onClick = retryOrigin) - Item(icon = Icons.Default.Share, text = R.string.action_share, onClick = share) - Item(icon = Icons.Default.FileCopy, text = R.string.action_copy, onClick = copy) - Item(icon = Icons.Default.Save, text = R.string.action_save, onClick = save) - Item(icon = Icons.Default.Save, text = R.string.action_save_to, onClick = saveTo) + Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) { + Item(icon = Icons.Default.Refresh, text = R.string.refresh, onClick = retry) + Item(icon = Icons.Default.Refresh, text = R.string.refresh_original, onClick = retryOrigin) + Item(icon = Icons.Default.Share, text = R.string.action_share, onClick = share) + Item(icon = Icons.Default.FileCopy, text = R.string.action_copy, onClick = copy) + Item(icon = Icons.Default.Save, text = R.string.action_save, onClick = save) + Item(icon = Icons.Default.Save, text = R.string.action_save_to, onClick = saveTo) + } } @Composable