Use webtoon mode by default for webtoon galleries
This commit is contained in:
1 parent
31be34f551
commit
1ca960995f
8 files changed
+35
-51
No files matched your search
@@ -158,8 +158,8 @@ object Settings : DataStorePreferences(null) {
|
||||
val colorFilterMode = intPref("color_filter_mode", 0)
|
||||
val customBrightness = boolPref("pref_custom_brightness_key", false)
|
||||
val customBrightnessValue = intPref("custom_brightness_value", 0)
|
||||
val readingMode = intPref("pref_default_reading_mode_key", ReadingModeType.LEFT_TO_RIGHT.flagValue)
|
||||
val orientationMode = intPref("pref_default_orientation_type_key", OrientationType.FREE.flagValue)
|
||||
val readingMode = intPref("pref_default_reading_mode_key", ReadingModeType.DEFAULT.prefValue)
|
||||
val orientationMode = intPref("pref_default_orientation_type_key", OrientationType.DEFAULT.prefValue)
|
||||
val showReaderSeekbar = boolPref("pref_show_reader_seekbar", true)
|
||||
val showPageNumber = boolPref("pref_show_page_number_key", true)
|
||||
val readerTheme = intPref("pref_reader_theme_key", 1)
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringArrayResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
@@ -20,11 +19,9 @@ import androidx.compose.ui.unit.dp
|
||||
import com.ehviewer.core.i18n.R
|
||||
import com.hippo.ehviewer.Settings
|
||||
import com.hippo.ehviewer.asMutableState
|
||||
import com.hippo.ehviewer.collectAsState
|
||||
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
|
||||
|
||||
@Composable
|
||||
fun ReaderModeSetting() = Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) {
|
||||
fun ReaderModeSetting(isWebtoon: Boolean) = Column(modifier = Modifier.verticalScroll(rememberScrollState()).navigationBarsPadding()) {
|
||||
SpinnerChoice(
|
||||
title = stringResource(id = R.string.pref_category_reading_mode),
|
||||
entries = stringArrayResource(id = com.hippo.ehviewer.R.array.viewers_selector),
|
||||
@@ -38,14 +35,11 @@ fun ReaderModeSetting() = Column(modifier = Modifier.verticalScroll(rememberScro
|
||||
field = Settings.orientationMode.asMutableState(),
|
||||
)
|
||||
Spacer(modifier = Modifier.size(16.dp))
|
||||
val isPager by Settings.readingMode.collectAsState { value ->
|
||||
ReadingModeType.isPagerType(value)
|
||||
}
|
||||
Crossfade(targetState = isPager, label = "Pager") { pager ->
|
||||
if (pager) {
|
||||
PagerSetting()
|
||||
} else {
|
||||
Crossfade(targetState = isWebtoon, label = "Setting") { webtoon ->
|
||||
if (webtoon) {
|
||||
WebtoonSetting()
|
||||
} else {
|
||||
PagerSetting()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,8 +199,15 @@ fun ReaderScreen(pageLoader: PageLoader, info: BaseGalleryInfo?) {
|
||||
}
|
||||
}
|
||||
}
|
||||
val defaultToWebtoon = remember(info) {
|
||||
// Tags in database may or may not have the prefix "other:"
|
||||
info?.simpleTags?.any { it.endsWith("webtoon") } == true
|
||||
}
|
||||
val showSeekbar by Settings.showReaderSeekbar.collectAsState()
|
||||
val readingMode by Settings.readingMode.collectAsState { ReadingModeType.fromPreference(it) }
|
||||
val readingMode by Settings.readingMode.collectAsState {
|
||||
val mode = ReadingModeType.fromPreference(it)
|
||||
if (mode == ReadingModeType.DEFAULT && defaultToWebtoon) ReadingModeType.WEBTOON else mode
|
||||
}
|
||||
val volumeKeysEnabled by Settings.readWithVolumeKeys.collectAsState()
|
||||
val volumeKeysInverted by Settings.readWithVolumeKeysInverted.collectAsState()
|
||||
val fullscreen by Settings.fullscreen.collectAsState()
|
||||
@@ -366,7 +373,7 @@ fun ReaderScreen(pageLoader: PageLoader, info: BaseGalleryInfo?) {
|
||||
dragHandle = null,
|
||||
contentWindowInsets = { WindowInsets() },
|
||||
) {
|
||||
SettingsPager(modifier = Modifier.fillMaxSize()) { page ->
|
||||
SettingsPager(isWebtoon = isWebtoon, modifier = Modifier.fillMaxSize()) { page ->
|
||||
isColorFilter = page == 2
|
||||
appbarVisible = !isColorFilter
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ private val tabs = intArrayOf(
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun SettingsPager(modifier: Modifier = Modifier, onPageSelected: (Int) -> Unit) {
|
||||
fun SettingsPager(isWebtoon: Boolean, modifier: Modifier = Modifier, onPageSelected: (Int) -> Unit) {
|
||||
val pagerState = rememberPagerState { tabs.size }
|
||||
LaunchedEffect(onPageSelected) {
|
||||
snapshotFlow { pagerState.currentPage }.collect { page ->
|
||||
@@ -53,7 +53,7 @@ fun SettingsPager(modifier: Modifier = Modifier, onPageSelected: (Int) -> Unit)
|
||||
) { page ->
|
||||
ProvideTextStyle(value = MaterialTheme.typography.labelLarge) {
|
||||
when (page) {
|
||||
0 -> ReaderModeSetting()
|
||||
0 -> ReaderModeSetting(isWebtoon)
|
||||
1 -> ReaderGeneralSetting()
|
||||
2 -> ColorFilterSetting()
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ fun BottomReaderBar(onClickSettings: () -> Unit, containerColor: Color) = Flexib
|
||||
menuItems = ReadingModeType.entries,
|
||||
selectedItem = readingMode,
|
||||
onSelectedItemChange = {
|
||||
Settings.readingMode.value = it.flagValue
|
||||
Settings.readingMode.value = it.prefValue
|
||||
},
|
||||
minMenuWidth = 192.dp,
|
||||
)
|
||||
@@ -59,7 +59,7 @@ fun BottomReaderBar(onClickSettings: () -> Unit, containerColor: Color) = Flexib
|
||||
menuItems = OrientationType.entries,
|
||||
selectedItem = orientationMode,
|
||||
onSelectedItemChange = {
|
||||
Settings.orientationMode.value = it.flagValue
|
||||
Settings.orientationMode.value = it.prefValue
|
||||
},
|
||||
minMenuWidth = 192.dp,
|
||||
)
|
||||
|
||||
@@ -15,22 +15,17 @@ enum class OrientationType(
|
||||
val flag: Int,
|
||||
override val stringRes: Int,
|
||||
override val icon: ImageVector,
|
||||
override val flagValue: Int,
|
||||
) : PreferenceType {
|
||||
DEFAULT(0, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.label_default, EhIcons.Reader.ScreenRotation, 0x00000000),
|
||||
FREE(1, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.rotation_free, EhIcons.Reader.ScreenRotation, 0x00000008),
|
||||
PORTRAIT(2, ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, R.string.rotation_portrait, EhIcons.Reader.Portrait, 0x00000010),
|
||||
LANDSCAPE(3, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, R.string.rotation_landscape, EhIcons.Reader.Landscape, 0x00000018),
|
||||
LOCKED_PORTRAIT(4, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, R.string.rotation_force_portrait, EhIcons.Reader.PortraitLocked, 0x00000020),
|
||||
LOCKED_LANDSCAPE(5, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, R.string.rotation_force_landscape, EhIcons.Reader.LandscapeLocked, 0x00000028),
|
||||
REVERSE_PORTRAIT(6, ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, R.string.rotation_reverse_portrait, EhIcons.Reader.Portrait, 0x00000030),
|
||||
DEFAULT(0, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.label_default, EhIcons.Reader.ScreenRotation),
|
||||
FREE(1, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.rotation_free, EhIcons.Reader.ScreenRotation),
|
||||
PORTRAIT(2, ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, R.string.rotation_portrait, EhIcons.Reader.Portrait),
|
||||
LANDSCAPE(3, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, R.string.rotation_landscape, EhIcons.Reader.Landscape),
|
||||
LOCKED_PORTRAIT(4, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, R.string.rotation_force_portrait, EhIcons.Reader.PortraitLocked),
|
||||
LOCKED_LANDSCAPE(5, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, R.string.rotation_force_landscape, EhIcons.Reader.LandscapeLocked),
|
||||
REVERSE_PORTRAIT(6, ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT, R.string.rotation_reverse_portrait, EhIcons.Reader.Portrait),
|
||||
;
|
||||
|
||||
companion object {
|
||||
const val MASK = 0x00000038
|
||||
|
||||
fun fromPreference(preference: Int?): OrientationType = entries.find { it.flagValue == preference } ?: FREE
|
||||
|
||||
fun fromSpinner(position: Int?) = entries.find { value -> value.prefValue == position } ?: DEFAULT
|
||||
fun fromPreference(preference: Int): OrientationType = entries.find { it.prefValue == preference } ?: DEFAULT
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,4 @@ interface PreferenceType {
|
||||
val stringRes: Int
|
||||
|
||||
val icon: ImageVector
|
||||
|
||||
val flagValue: Int
|
||||
}
|
||||
@@ -16,14 +16,13 @@ enum class ReadingModeType(
|
||||
override val prefValue: Int,
|
||||
override val stringRes: Int,
|
||||
override val icon: ImageVector,
|
||||
override val flagValue: Int,
|
||||
) : PreferenceType {
|
||||
DEFAULT(0, R.string.label_default, EhIcons.Reader.Default, 0x00000000),
|
||||
LEFT_TO_RIGHT(1, R.string.left_to_right_viewer, EhIcons.Reader.LeftToRight, 0x00000001),
|
||||
RIGHT_TO_LEFT(2, R.string.right_to_left_viewer, EhIcons.Reader.RightToLeft, 0x00000002),
|
||||
VERTICAL(3, R.string.vertical_viewer, EhIcons.Reader.Vertical, 0x00000003),
|
||||
WEBTOON(4, R.string.webtoon_viewer, EhIcons.Reader.Webtoon, 0x00000004),
|
||||
CONTINUOUS_VERTICAL(5, R.string.vertical_plus_viewer, EhIcons.Reader.ContinuousVertical, 0x00000005),
|
||||
DEFAULT(0, R.string.label_default, EhIcons.Reader.Default),
|
||||
LEFT_TO_RIGHT(1, R.string.left_to_right_viewer, EhIcons.Reader.LeftToRight),
|
||||
RIGHT_TO_LEFT(2, R.string.right_to_left_viewer, EhIcons.Reader.RightToLeft),
|
||||
VERTICAL(3, R.string.vertical_viewer, EhIcons.Reader.Vertical),
|
||||
WEBTOON(4, R.string.webtoon_viewer, EhIcons.Reader.Webtoon),
|
||||
CONTINUOUS_VERTICAL(5, R.string.vertical_plus_viewer, EhIcons.Reader.ContinuousVertical),
|
||||
;
|
||||
|
||||
companion object {
|
||||
@@ -38,15 +37,6 @@ enum class ReadingModeType(
|
||||
VERTICAL, WEBTOON, CONTINUOUS_VERTICAL -> true
|
||||
}
|
||||
|
||||
const val MASK = 0x00000007
|
||||
|
||||
fun fromPreference(preference: Int?): ReadingModeType = entries.find { it.flagValue == preference } ?: DEFAULT
|
||||
|
||||
fun isPagerType(preference: Int): Boolean {
|
||||
val mode = fromPreference(preference)
|
||||
return mode == LEFT_TO_RIGHT || mode == RIGHT_TO_LEFT || mode == VERTICAL || mode == DEFAULT
|
||||
}
|
||||
|
||||
fun fromSpinner(position: Int?) = entries.find { value -> value.prefValue == position } ?: DEFAULT
|
||||
fun fromPreference(preference: Int): ReadingModeType = entries.find { it.prefValue == preference } ?: DEFAULT
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user