Clean up reading mode / orientation enum classes

Categorizing the reading modes so we can implement a better
selection UI.

(cherry picked from commit 4502902fb0df21f637c905dc5c4c36625dedc710)

# Conflicts:
#	app/src/main/java/eu/kanade/domain/manga/model/Manga.kt
#	app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
#	app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt
#	app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt
This commit is contained in:
arkon 2023-11-05 10:01:19 -05:00 committed by Jobobby04
parent 44bda0a611
commit e7aa8c31f1
18 changed files with 181 additions and 136 deletions

View File

@ -1,7 +1,7 @@
package eu.kanade.domain.manga.interactor package eu.kanade.domain.manga.interactor
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import tachiyomi.domain.manga.model.MangaUpdate import tachiyomi.domain.manga.model.MangaUpdate
import tachiyomi.domain.manga.repository.MangaRepository import tachiyomi.domain.manga.repository.MangaRepository
@ -14,7 +14,7 @@ class SetMangaViewerFlags(
mangaRepository.update( mangaRepository.update(
MangaUpdate( MangaUpdate(
id = id, id = id,
viewerFlags = manga.viewerFlags.setFlag(flag, ReadingModeType.MASK.toLong()), viewerFlags = manga.viewerFlags.setFlag(flag, ReadingMode.MASK.toLong()),
), ),
) )
} }
@ -24,7 +24,7 @@ class SetMangaViewerFlags(
mangaRepository.update( mangaRepository.update(
MangaUpdate( MangaUpdate(
id = id, id = id,
viewerFlags = manga.viewerFlags.setFlag(flag, OrientationType.MASK.toLong()), viewerFlags = manga.viewerFlags.setFlag(flag, ReaderOrientation.MASK.toLong()),
), ),
) )
} }

View File

@ -3,8 +3,8 @@ package eu.kanade.domain.manga.model
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.util.storage.CbzCrypto import eu.kanade.tachiyomi.util.storage.CbzCrypto
import tachiyomi.core.metadata.comicinfo.ComicInfo import tachiyomi.core.metadata.comicinfo.ComicInfo
import tachiyomi.core.metadata.comicinfo.ComicInfoPublishingStatus import tachiyomi.core.metadata.comicinfo.ComicInfoPublishingStatus
@ -15,11 +15,11 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
// TODO: move these into the domain model // TODO: move these into the domain model
val Manga.readingModeType: Long val Manga.readingMode: Long
get() = viewerFlags and ReadingModeType.MASK.toLong() get() = viewerFlags and ReadingMode.MASK.toLong()
val Manga.orientationType: Long val Manga.readerOrientation: Long
get() = viewerFlags and OrientationType.MASK.toLong() get() = viewerFlags and ReaderOrientation.MASK.toLong()
val Manga.downloadedFilter: TriState val Manga.downloadedFilter: TriState
get() { get() {

View File

@ -10,10 +10,10 @@ import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.Preference
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
import tachiyomi.presentation.core.util.collectAsState import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -37,7 +37,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
pref = readerPref.defaultReadingMode(), pref = readerPref.defaultReadingMode(),
title = stringResource(R.string.pref_viewer_type), title = stringResource(R.string.pref_viewer_type),
entries = ReadingModeType.entries.drop(1) entries = ReadingMode.entries.drop(1)
.associate { it.flagValue to stringResource(it.stringRes) }, .associate { it.flagValue to stringResource(it.stringRes) },
), ),
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
@ -121,7 +121,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
pref = readerPreferences.defaultOrientationType(), pref = readerPreferences.defaultOrientationType(),
title = stringResource(R.string.pref_rotation_type), title = stringResource(R.string.pref_rotation_type),
entries = OrientationType.entries.drop(1) entries = ReaderOrientation.entries.drop(1)
.associate { it.flagValue to stringResource(it.stringRes) }, .associate { it.flagValue to stringResource(it.stringRes) },
), ),
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(

View File

@ -13,28 +13,28 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.domain.manga.model.orientationType import eu.kanade.domain.manga.model.readerOrientation
import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.components.AdaptiveSheet
import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.SettingsIconGrid
import tachiyomi.presentation.core.components.material.IconToggleButton import tachiyomi.presentation.core.components.material.IconToggleButton
import tachiyomi.presentation.core.util.ThemePreviews import tachiyomi.presentation.core.util.ThemePreviews
@Composable @Composable
fun OrientationModeSelectDialog( fun OrientationSelectDialog(
onDismissRequest: () -> Unit, onDismissRequest: () -> Unit,
screenModel: ReaderSettingsScreenModel, screenModel: ReaderSettingsScreenModel,
onChange: (Int) -> Unit, onChange: (Int) -> Unit,
) { ) {
val manga by screenModel.mangaFlow.collectAsState() val manga by screenModel.mangaFlow.collectAsState()
val orientationType = remember(manga) { OrientationType.fromPreference(manga?.orientationType?.toInt()) } val orientation = remember(manga) { ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) }
AdaptiveSheet(onDismissRequest = onDismissRequest) { AdaptiveSheet(onDismissRequest = onDismissRequest) {
DialogContent( DialogContent(
orientationType = orientationType, orientation = orientation,
onChangeOrientation = { onChangeOrientation = {
screenModel.onChangeOrientation(it) screenModel.onChangeOrientation(it)
onChange(it.stringRes) onChange(it.stringRes)
@ -46,14 +46,14 @@ fun OrientationModeSelectDialog(
@Composable @Composable
private fun DialogContent( private fun DialogContent(
orientationType: OrientationType, orientation: ReaderOrientation,
onChangeOrientation: (OrientationType) -> Unit, onChangeOrientation: (ReaderOrientation) -> Unit,
) { ) {
Box(modifier = Modifier.padding(vertical = 16.dp)) { Box(modifier = Modifier.padding(vertical = 16.dp)) {
SettingsIconGrid(R.string.rotation_type) { SettingsIconGrid(R.string.rotation_type) {
items(OrientationType.entries) { mode -> items(ReaderOrientation.entries) { mode ->
IconToggleButton( IconToggleButton(
checked = mode == orientationType, checked = mode == orientation,
onCheckedChange = { onCheckedChange = {
onChangeOrientation(mode) onChangeOrientation(mode)
}, },
@ -71,7 +71,7 @@ private fun DialogContent(
private fun DialogContentPreview() { private fun DialogContentPreview() {
TachiyomiTheme { TachiyomiTheme {
DialogContent( DialogContent(
orientationType = OrientationType.DEFAULT, orientation = ReaderOrientation.DEFAULT,
onChangeOrientation = {}, onChangeOrientation = {},
) )
} }

View File

@ -13,12 +13,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource import androidx.compose.ui.res.vectorResource
import eu.kanade.domain.manga.model.readingModeType import eu.kanade.domain.manga.model.readingMode
import eu.kanade.presentation.components.AdaptiveSheet import eu.kanade.presentation.components.AdaptiveSheet
import eu.kanade.presentation.theme.TachiyomiTheme import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import tachiyomi.presentation.core.components.SettingsIconGrid import tachiyomi.presentation.core.components.SettingsIconGrid
import tachiyomi.presentation.core.components.material.IconToggleButton import tachiyomi.presentation.core.components.material.IconToggleButton
import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.padding
@ -31,7 +31,7 @@ fun ReadingModeSelectDialog(
onChange: (Int) -> Unit, onChange: (Int) -> Unit,
) { ) {
val manga by screenModel.mangaFlow.collectAsState() val manga by screenModel.mangaFlow.collectAsState()
val readingMode = remember(manga) { ReadingModeType.fromPreference(manga?.readingModeType?.toInt()) } val readingMode = remember(manga) { ReadingMode.fromPreference(manga?.readingMode?.toInt()) }
AdaptiveSheet(onDismissRequest = onDismissRequest) { AdaptiveSheet(onDismissRequest = onDismissRequest) {
DialogContent( DialogContent(
@ -47,12 +47,12 @@ fun ReadingModeSelectDialog(
@Composable @Composable
private fun DialogContent( private fun DialogContent(
readingMode: ReadingModeType, readingMode: ReadingMode,
onChangeReadingMode: (ReadingModeType) -> Unit, onChangeReadingMode: (ReadingMode) -> Unit,
) { ) {
Box(modifier = Modifier.padding(vertical = MaterialTheme.padding.medium)) { Box(modifier = Modifier.padding(vertical = MaterialTheme.padding.medium)) {
SettingsIconGrid(R.string.pref_category_reading_mode) { SettingsIconGrid(R.string.pref_category_reading_mode) {
items(ReadingModeType.entries) { mode -> items(ReadingMode.entries) { mode ->
IconToggleButton( IconToggleButton(
checked = mode == readingMode, checked = mode == readingMode,
onCheckedChange = { onCheckedChange = {
@ -72,7 +72,7 @@ private fun DialogContent(
private fun DialogContentPreview() { private fun DialogContentPreview() {
TachiyomiTheme { TachiyomiTheme {
DialogContent( DialogContent(
readingMode = ReadingModeType.DEFAULT, readingMode = ReadingMode.DEFAULT,
onChangeReadingMode = {}, onChangeReadingMode = {},
) )
} }

View File

@ -20,9 +20,9 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
@Composable @Composable
fun BottomReaderBar( fun BottomReaderBar(
@ -30,10 +30,10 @@ fun BottomReaderBar(
enabledButtons: Set<String>, enabledButtons: Set<String>,
// SY <-- // SY <--
backgroundColor: Color, backgroundColor: Color,
readingMode: ReadingModeType, readingMode: ReadingMode,
onClickReadingMode: () -> Unit, onClickReadingMode: () -> Unit,
orientationMode: OrientationType, orientation: ReaderOrientation,
onClickOrientationMode: () -> Unit, onClickOrientation: () -> Unit,
cropEnabled: Boolean, cropEnabled: Boolean,
onClickCropBorder: () -> Unit, onClickCropBorder: () -> Unit,
onClickSettings: () -> Unit, onClickSettings: () -> Unit,
@ -93,8 +93,8 @@ fun BottomReaderBar(
} }
val cropBorders = when (readingMode) { val cropBorders = when (readingMode) {
ReadingModeType.WEBTOON -> ReaderBottomButton.CropBordersWebtoon ReadingMode.WEBTOON -> ReaderBottomButton.CropBordersWebtoon
ReadingModeType.CONTINUOUS_VERTICAL -> ReaderBottomButton.CropBordersContinuesVertical ReadingMode.CONTINUOUS_VERTICAL -> ReaderBottomButton.CropBordersContinuesVertical
else -> ReaderBottomButton.CropBordersPager else -> ReaderBottomButton.CropBordersPager
} }
if (cropBorders.isIn(enabledButtons)) { if (cropBorders.isIn(enabledButtons)) {
@ -107,9 +107,9 @@ fun BottomReaderBar(
} }
if (ReaderBottomButton.Rotation.isIn(enabledButtons)) { if (ReaderBottomButton.Rotation.isIn(enabledButtons)) {
IconButton(onClick = onClickOrientationMode) { IconButton(onClick = onClickOrientation) {
Icon( Icon(
painter = painterResource(orientationMode.iconRes), painter = painterResource(orientation.iconRes),
contentDescription = stringResource(R.string.pref_rotation_type), contentDescription = stringResource(R.string.pref_rotation_type),
) )
} }
@ -118,7 +118,7 @@ fun BottomReaderBar(
if ( if (
!dualPageSplitEnabled && !dualPageSplitEnabled &&
ReaderBottomButton.PageLayout.isIn(enabledButtons) && ReaderBottomButton.PageLayout.isIn(enabledButtons) &&
ReadingModeType.isPagerType(readingMode.flagValue) ReadingMode.isPagerType(readingMode.flagValue)
) { ) {
IconButton(onClick = onClickPageLayout) { IconButton(onClick = onClickPageLayout) {
Icon( Icon(

View File

@ -28,8 +28,8 @@ import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBar
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.Viewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
@ -82,10 +82,10 @@ fun ReaderAppBars(
totalPages: Int, totalPages: Int,
onSliderValueChange: (Int) -> Unit, onSliderValueChange: (Int) -> Unit,
readingMode: ReadingModeType, readingMode: ReadingMode,
onClickReadingMode: () -> Unit, onClickReadingMode: () -> Unit,
orientationMode: OrientationType, orientation: ReaderOrientation,
onClickOrientationMode: () -> Unit, onClickOrientation: () -> Unit,
cropEnabled: Boolean, cropEnabled: Boolean,
onClickCropBorder: () -> Unit, onClickCropBorder: () -> Unit,
onClickSettings: () -> Unit, onClickSettings: () -> Unit,
@ -291,8 +291,8 @@ fun ReaderAppBars(
backgroundColor = backgroundColor, backgroundColor = backgroundColor,
readingMode = readingMode, readingMode = readingMode,
onClickReadingMode = onClickReadingMode, onClickReadingMode = onClickReadingMode,
orientationMode = orientationMode, orientation = orientation,
onClickOrientationMode = onClickOrientationMode, onClickOrientation = onClickOrientation,
cropEnabled = cropEnabled, cropEnabled = cropEnabled,
onClickCropBorder = onClickCropBorder, onClickCropBorder = onClickCropBorder,
onClickSettings = onClickSettings, onClickSettings = onClickSettings,

View File

@ -8,13 +8,13 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import eu.kanade.domain.manga.model.orientationType import eu.kanade.domain.manga.model.readerOrientation
import eu.kanade.domain.manga.model.readingModeType import eu.kanade.domain.manga.model.readingMode
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
import tachiyomi.presentation.core.components.CheckboxItem import tachiyomi.presentation.core.components.CheckboxItem
import tachiyomi.presentation.core.components.HeadingItem import tachiyomi.presentation.core.components.HeadingItem
@ -23,33 +23,29 @@ import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.util.collectAsState import tachiyomi.presentation.core.util.collectAsState
import java.text.NumberFormat import java.text.NumberFormat
private val readingModeOptions = ReadingModeType.entries.map { it.stringRes to it }
private val orientationTypeOptions = OrientationType.entries.map { it.stringRes to it }
private val tappingInvertModeOptions = ReaderPreferences.TappingInvertMode.entries.map { it.titleResId to it }
@Composable @Composable
internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) { internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) {
HeadingItem(R.string.pref_category_for_this_series) HeadingItem(R.string.pref_category_for_this_series)
val manga by screenModel.mangaFlow.collectAsState() val manga by screenModel.mangaFlow.collectAsState()
val readingMode = remember(manga) { ReadingModeType.fromPreference(manga?.readingModeType?.toInt()) } val readingMode = remember(manga) { ReadingMode.fromPreference(manga?.readingMode?.toInt()) }
SettingsChipRow(R.string.pref_category_reading_mode) { SettingsChipRow(R.string.pref_category_reading_mode) {
readingModeOptions.map { (stringRes, it) -> ReadingMode.entries.map {
FilterChip( FilterChip(
selected = it == readingMode, selected = it == readingMode,
onClick = { screenModel.onChangeReadingMode(it) }, onClick = { screenModel.onChangeReadingMode(it) },
label = { Text(stringResource(stringRes)) }, label = { Text(stringResource(it.stringRes)) },
) )
} }
} }
val orientationType = remember(manga) { OrientationType.fromPreference(manga?.orientationType?.toInt()) } val orientation = remember(manga) { ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) }
SettingsChipRow(R.string.rotation_type) { SettingsChipRow(R.string.rotation_type) {
orientationTypeOptions.map { (stringRes, it) -> ReaderOrientation.entries.map {
FilterChip( FilterChip(
selected = it == orientationType, selected = it == orientation,
onClick = { screenModel.onChangeOrientation(it) }, onClick = { screenModel.onChangeOrientation(it) },
label = { Text(stringResource(stringRes)) }, label = { Text(stringResource(it.stringRes)) },
) )
} }
} }
@ -277,11 +273,11 @@ private fun ColumnScope.TapZonesItems(
if (selected != 5) { if (selected != 5) {
SettingsChipRow(R.string.pref_read_with_tapping_inverted) { SettingsChipRow(R.string.pref_read_with_tapping_inverted) {
tappingInvertModeOptions.map { (stringRes, mode) -> ReaderPreferences.TappingInvertMode.entries.map {
FilterChip( FilterChip(
selected = mode == invertMode, selected = it == invertMode,
onClick = { onSelectInvertMode(mode) }, onClick = { onSelectInvertMode(it) },
label = { Text(stringResource(stringRes)) }, label = { Text(stringResource(it.titleResId)) },
) )
} }
} }

View File

@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.track.TrackerManager import eu.kanade.tachiyomi.data.track.TrackerManager
import eu.kanade.tachiyomi.network.NetworkPreferences import eu.kanade.tachiyomi.network.NetworkPreferences
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
@ -172,12 +172,12 @@ object Migrations {
if (oldVersion < 60) { if (oldVersion < 60) {
// Migrate Rotation and Viewer values to default values for viewer_flags // Migrate Rotation and Viewer values to default values for viewer_flags
val newOrientation = when (prefs.getInt("pref_rotation_type_key", 1)) { val newOrientation = when (prefs.getInt("pref_rotation_type_key", 1)) {
1 -> OrientationType.FREE.flagValue 1 -> ReaderOrientation.FREE.flagValue
2 -> OrientationType.PORTRAIT.flagValue 2 -> ReaderOrientation.PORTRAIT.flagValue
3 -> OrientationType.LANDSCAPE.flagValue 3 -> ReaderOrientation.LANDSCAPE.flagValue
4 -> OrientationType.LOCKED_PORTRAIT.flagValue 4 -> ReaderOrientation.LOCKED_PORTRAIT.flagValue
5 -> OrientationType.LOCKED_LANDSCAPE.flagValue 5 -> ReaderOrientation.LOCKED_LANDSCAPE.flagValue
else -> OrientationType.FREE.flagValue else -> ReaderOrientation.FREE.flagValue
} }
// Reading mode flag and prefValue is the same value // Reading mode flag and prefValue is the same value

View File

@ -1,7 +1,7 @@
package eu.kanade.tachiyomi.data.backup.models package eu.kanade.tachiyomi.data.backup.models
import eu.kanade.tachiyomi.source.model.UpdateStrategy import eu.kanade.tachiyomi.source.model.UpdateStrategy
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber import kotlinx.serialization.protobuf.ProtoNumber
import tachiyomi.data.StringListAndColumnAdapter import tachiyomi.data.StringListAndColumnAdapter
@ -134,7 +134,7 @@ data class BackupManga(
favorite = manga.favorite, favorite = manga.favorite,
source = manga.source, source = manga.source,
dateAdded = manga.dateAdded, dateAdded = manga.dateAdded,
viewer = (manga.viewerFlags.toInt() and ReadingModeType.MASK), viewer = (manga.viewerFlags.toInt() and ReadingMode.MASK),
viewer_flags = manga.viewerFlags.toInt(), viewer_flags = manga.viewerFlags.toInt(),
chapterFlags = manga.chapterFlags.toInt(), chapterFlags = manga.chapterFlags.toInt(),
updateStrategy = manga.updateStrategy, updateStrategy = manga.updateStrategy,

View File

@ -50,11 +50,11 @@ import com.google.android.material.elevation.SurfaceColors
import com.google.android.material.transition.platform.MaterialContainerTransform import com.google.android.material.transition.platform.MaterialContainerTransform
import dev.chrisbanes.insetter.applyInsetter import dev.chrisbanes.insetter.applyInsetter
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.manga.model.readingModeType import eu.kanade.domain.manga.model.readingMode
import eu.kanade.presentation.reader.BrightnessOverlay import eu.kanade.presentation.reader.BrightnessOverlay
import eu.kanade.presentation.reader.ChapterListDialog import eu.kanade.presentation.reader.ChapterListDialog
import eu.kanade.presentation.reader.DisplayRefreshHost import eu.kanade.presentation.reader.DisplayRefreshHost
import eu.kanade.presentation.reader.OrientationModeSelectDialog import eu.kanade.presentation.reader.OrientationSelectDialog
import eu.kanade.presentation.reader.PageIndicatorText import eu.kanade.presentation.reader.PageIndicatorText
import eu.kanade.presentation.reader.ReaderPageActionsDialog import eu.kanade.presentation.reader.ReaderPageActionsDialog
import eu.kanade.presentation.reader.ReadingModeSelectDialog import eu.kanade.presentation.reader.ReadingModeSelectDialog
@ -76,10 +76,10 @@ import eu.kanade.tachiyomi.ui.reader.loader.HttpPageLoader
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressIndicator
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
@ -376,8 +376,8 @@ class ReaderActivity : BaseActivity() {
val cropBorderWebtoon by readerPreferences.cropBordersWebtoon().collectAsState() val cropBorderWebtoon by readerPreferences.cropBordersWebtoon().collectAsState()
// SY --> // SY -->
val readingMode = viewModel.getMangaReadingMode() val readingMode = viewModel.getMangaReadingMode()
val isPagerType = ReadingModeType.isPagerType(readingMode) val isPagerType = ReadingMode.isPagerType(readingMode)
val isWebtoon = ReadingModeType.WEBTOON.flagValue == readingMode val isWebtoon = ReadingMode.WEBTOON.flagValue == readingMode
val cropBorderContinuousVertical by readerPreferences.cropBordersContinuousVertical().collectAsState() val cropBorderContinuousVertical by readerPreferences.cropBordersContinuousVertical().collectAsState()
val cropEnabled = if (isPagerType) { val cropEnabled = if (isPagerType) {
cropBorderPaged cropBorderPaged
@ -429,14 +429,14 @@ class ReaderActivity : BaseActivity() {
moveToPageIndex(it) moveToPageIndex(it)
}, },
readingMode = ReadingModeType.fromPreference( readingMode = ReadingMode.fromPreference(
viewModel.getMangaReadingMode(resolveDefault = false), viewModel.getMangaReadingMode(resolveDefault = false),
), ),
onClickReadingMode = viewModel::openReadingModeSelectDialog, onClickReadingMode = viewModel::openReadingModeSelectDialog,
orientationMode = OrientationType.fromPreference( orientation = ReaderOrientation.fromPreference(
viewModel.getMangaOrientationType(resolveDefault = false), viewModel.getMangaOrientation(resolveDefault = false),
), ),
onClickOrientationMode = viewModel::openOrientationModeSelectDialog, onClickOrientation = viewModel::openOrientationModeSelectDialog,
cropEnabled = cropEnabled, cropEnabled = cropEnabled,
onClickCropBorder = { onClickCropBorder = {
val enabled = viewModel.toggleCropBorders() val enabled = viewModel.toggleCropBorders()
@ -525,7 +525,7 @@ class ReaderActivity : BaseActivity() {
) )
} }
is ReaderViewModel.Dialog.OrientationModeSelect -> { is ReaderViewModel.Dialog.OrientationModeSelect -> {
OrientationModeSelectDialog( OrientationSelectDialog(
onDismissRequest = onDismissRequest, onDismissRequest = onDismissRequest,
screenModel = settingsScreenModel, screenModel = settingsScreenModel,
onChange = { stringRes -> onChange = { stringRes ->
@ -789,15 +789,15 @@ class ReaderActivity : BaseActivity() {
*/ */
private fun setManga(manga: Manga) { private fun setManga(manga: Manga) {
val prevViewer = viewModel.state.value.viewer val prevViewer = viewModel.state.value.viewer
val newViewer = ReadingModeType.toViewer(viewModel.getMangaReadingMode(), this) val newViewer = ReadingMode.toViewer(viewModel.getMangaReadingMode(), this)
if (window.sharedElementEnterTransition is MaterialContainerTransform) { if (window.sharedElementEnterTransition is MaterialContainerTransform) {
// Wait until transition is complete to avoid crash on API 26 // Wait until transition is complete to avoid crash on API 26
window.sharedElementEnterTransition.doOnEnd { window.sharedElementEnterTransition.doOnEnd {
setOrientation(viewModel.getMangaOrientationType()) setOrientation(viewModel.getMangaOrientation())
} }
} else { } else {
setOrientation(viewModel.getMangaOrientationType()) setOrientation(viewModel.getMangaOrientation())
} }
// Destroy previous viewer if there was one // Destroy previous viewer if there was one
@ -817,8 +817,15 @@ class ReaderActivity : BaseActivity() {
viewModel.state.value.lastShiftDoubleState?.let { newViewer.config.shiftDoublePage = it } viewModel.state.value.lastShiftDoubleState?.let { newViewer.config.shiftDoublePage = it }
} }
val defaultReaderType = manga.defaultReaderType(manga.mangaType(sourceName = sourceManager.get(manga.source)?.name)) val defaultReaderType = manga.defaultReaderType(
if (readerPreferences.useAutoWebtoon().get() && manga.readingModeType.toInt() == ReadingModeType.DEFAULT.flagValue && defaultReaderType != null && defaultReaderType == ReadingModeType.WEBTOON.flagValue) { manga.mangaType(sourceName = sourceManager.get(manga.source)?.name)
)
if (
readerPreferences.useAutoWebtoon().get() &&
manga.readingMode.toInt() == ReadingMode.DEFAULT.flagValue &&
defaultReaderType != null &&
defaultReaderType == ReadingMode.WEBTOON.flagValue
) {
readingModeToast?.cancel() readingModeToast?.cancel()
readingModeToast = toast(resources.getString(R.string.eh_auto_webtoon_snack)) readingModeToast = toast(resources.getString(R.string.eh_auto_webtoon_snack))
} else if (readerPreferences.showReadingMode().get()) { } else if (readerPreferences.showReadingMode().get()) {
@ -863,7 +870,7 @@ class ReaderActivity : BaseActivity() {
private fun showReadingModeToast(mode: Int) { private fun showReadingModeToast(mode: Int) {
try { try {
readingModeToast?.cancel() readingModeToast?.cancel()
readingModeToast = toast(ReadingModeType.fromPreference(mode).stringRes) readingModeToast = toast(ReadingMode.fromPreference(mode).stringRes)
} catch (e: ArrayIndexOutOfBoundsException) { } catch (e: ArrayIndexOutOfBoundsException) {
logcat(LogPriority.ERROR) { "Unknown reading mode: $mode" } logcat(LogPriority.ERROR) { "Unknown reading mode: $mode" }
} }
@ -1082,7 +1089,7 @@ class ReaderActivity : BaseActivity() {
* Forces the user preferred [orientation] on the activity. * Forces the user preferred [orientation] on the activity.
*/ */
private fun setOrientation(orientation: Int) { private fun setOrientation(orientation: Int) {
val newOrientation = OrientationType.fromPreference(orientation) val newOrientation = ReaderOrientation.fromPreference(orientation)
if (newOrientation.flag != requestedOrientation) { if (newOrientation.flag != requestedOrientation) {
requestedOrientation = newOrientation.flag requestedOrientation = newOrientation.flag
} }

View File

@ -11,8 +11,8 @@ import androidx.lifecycle.viewModelScope
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.chapter.model.toDbChapter import eu.kanade.domain.chapter.model.toDbChapter
import eu.kanade.domain.manga.interactor.SetMangaViewerFlags import eu.kanade.domain.manga.interactor.SetMangaViewerFlags
import eu.kanade.domain.manga.model.orientationType import eu.kanade.domain.manga.model.readerOrientation
import eu.kanade.domain.manga.model.readingModeType import eu.kanade.domain.manga.model.readingMode
import eu.kanade.domain.track.interactor.TrackChapter import eu.kanade.domain.track.interactor.TrackChapter
import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.domain.track.service.TrackPreferences
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
@ -34,9 +34,9 @@ import eu.kanade.tachiyomi.ui.reader.model.InsertPage
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters import eu.kanade.tachiyomi.ui.reader.model.ViewerChapters
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.Viewer import eu.kanade.tachiyomi.ui.reader.viewer.Viewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
@ -829,15 +829,15 @@ class ReaderViewModel @JvmOverloads constructor(
fun getMangaReadingMode(resolveDefault: Boolean = true): Int { fun getMangaReadingMode(resolveDefault: Boolean = true): Int {
val default = readerPreferences.defaultReadingMode().get() val default = readerPreferences.defaultReadingMode().get()
val manga = manga ?: return default val manga = manga ?: return default
val readingMode = ReadingModeType.fromPreference(manga.readingModeType.toInt()) val readingMode = ReadingMode.fromPreference(manga.readingMode.toInt())
// SY --> // SY -->
return when { return when {
resolveDefault && readingMode == ReadingModeType.DEFAULT && readerPreferences.useAutoWebtoon().get() -> { resolveDefault && readingMode == ReadingMode.DEFAULT && readerPreferences.useAutoWebtoon().get() -> {
manga.defaultReaderType(manga.mangaType(sourceName = sourceManager.get(manga.source)?.name)) manga.defaultReaderType(manga.mangaType(sourceName = sourceManager.get(manga.source)?.name))
?: default ?: default
} }
resolveDefault && readingMode == ReadingModeType.DEFAULT -> default resolveDefault && readingMode == ReadingMode.DEFAULT -> default
else -> manga.readingModeType.toInt() else -> manga.readingMode.toInt()
} }
// SY <-- // SY <--
} }
@ -845,10 +845,10 @@ class ReaderViewModel @JvmOverloads constructor(
/** /**
* Updates the viewer position for the open manga. * Updates the viewer position for the open manga.
*/ */
fun setMangaReadingMode(readingModeType: ReadingModeType) { fun setMangaReadingMode(readingMode: ReadingMode) {
val manga = manga ?: return val manga = manga ?: return
runBlocking(Dispatchers.IO) { runBlocking(Dispatchers.IO) {
setMangaViewerFlags.awaitSetReadingMode(manga.id, readingModeType.flagValue.toLong()) setMangaViewerFlags.awaitSetReadingMode(manga.id, readingMode.flagValue.toLong())
val currChapters = state.value.viewerChapters val currChapters = state.value.viewerChapters
if (currChapters != null) { if (currChapters != null) {
// Save current page // Save current page
@ -869,22 +869,22 @@ class ReaderViewModel @JvmOverloads constructor(
/** /**
* Returns the orientation type used by this manga or the default one. * Returns the orientation type used by this manga or the default one.
*/ */
fun getMangaOrientationType(resolveDefault: Boolean = true): Int { fun getMangaOrientation(resolveDefault: Boolean = true): Int {
val default = readerPreferences.defaultOrientationType().get() val default = readerPreferences.defaultOrientationType().get()
val orientation = OrientationType.fromPreference(manga?.orientationType?.toInt()) val orientation = ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt())
return when { return when {
resolveDefault && orientation == OrientationType.DEFAULT -> default resolveDefault && orientation == ReaderOrientation.DEFAULT -> default
else -> manga?.orientationType?.toInt() ?: default else -> manga?.readerOrientation?.toInt() ?: default
} }
} }
/** /**
* Updates the orientation type for the open manga. * Updates the orientation type for the open manga.
*/ */
fun setMangaOrientationType(rotationType: OrientationType) { fun setMangaOrientationType(orientation: ReaderOrientation) {
val manga = manga ?: return val manga = manga ?: return
viewModelScope.launchIO { viewModelScope.launchIO {
setMangaViewerFlags.awaitSetOrientation(manga.id, rotationType.flagValue.toLong()) setMangaViewerFlags.awaitSetOrientation(manga.id, orientation.flagValue.toLong())
val currChapters = state.value.viewerChapters val currChapters = state.value.viewerChapters
if (currChapters != null) { if (currChapters != null) {
// Save current page // Save current page
@ -897,7 +897,7 @@ class ReaderViewModel @JvmOverloads constructor(
viewerChapters = currChapters, viewerChapters = currChapters,
) )
} }
eventChannel.send(Event.SetOrientation(getMangaOrientationType())) eventChannel.send(Event.SetOrientation(getMangaOrientation()))
eventChannel.send(Event.ReloadViewerChapters) eventChannel.send(Event.ReloadViewerChapters)
} }
} }
@ -906,8 +906,8 @@ class ReaderViewModel @JvmOverloads constructor(
// SY --> // SY -->
fun toggleCropBorders(): Boolean { fun toggleCropBorders(): Boolean {
val readingMode = getMangaReadingMode() val readingMode = getMangaReadingMode()
val isPagerType = ReadingModeType.isPagerType(readingMode) val isPagerType = ReadingMode.isPagerType(readingMode)
val isWebtoon = ReadingModeType.WEBTOON.flagValue == readingMode val isWebtoon = ReadingMode.WEBTOON.flagValue == readingMode
return if (isPagerType) { return if (isPagerType) {
readerPreferences.cropBorders().toggle() readerPreferences.cropBorders().toggle()
} else if (isWebtoon) { } else if (isWebtoon) {

View File

@ -5,7 +5,7 @@ import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
enum class OrientationType( enum class ReaderOrientation(
val flag: Int, val flag: Int,
@StringRes val stringRes: Int, @StringRes val stringRes: Int,
@DrawableRes val iconRes: Int, @DrawableRes val iconRes: Int,
@ -58,6 +58,6 @@ enum class OrientationType(
companion object { companion object {
const val MASK = 0x00000038 const val MASK = 0x00000038
fun fromPreference(preference: Int?): OrientationType = entries.find { it.flagValue == preference } ?: DEFAULT fun fromPreference(preference: Int?): ReaderOrientation = entries.find { it.flagValue == preference } ?: DEFAULT
} }
} }

View File

@ -37,12 +37,12 @@ class ReaderPreferences(
fun defaultReadingMode() = preferenceStore.getInt( fun defaultReadingMode() = preferenceStore.getInt(
"pref_default_reading_mode_key", "pref_default_reading_mode_key",
ReadingModeType.RIGHT_TO_LEFT.flagValue, ReadingMode.RIGHT_TO_LEFT.flagValue,
) )
fun defaultOrientationType() = preferenceStore.getInt( fun defaultOrientationType() = preferenceStore.getInt(
"pref_default_orientation_type_key", "pref_default_orientation_type_key",
OrientationType.FREE.flagValue, ReaderOrientation.FREE.flagValue,
) )
fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true) fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true)

View File

@ -14,8 +14,8 @@ import uy.kohesive.injekt.api.get
class ReaderSettingsScreenModel( class ReaderSettingsScreenModel(
readerState: StateFlow<ReaderViewModel.State>, readerState: StateFlow<ReaderViewModel.State>,
val hasDisplayCutout: Boolean, val hasDisplayCutout: Boolean,
val onChangeReadingMode: (ReadingModeType) -> Unit, val onChangeReadingMode: (ReadingMode) -> Unit,
val onChangeOrientation: (OrientationType) -> Unit, val onChangeOrientation: (ReaderOrientation) -> Unit,
val preferences: ReaderPreferences = Injekt.get(), val preferences: ReaderPreferences = Injekt.get(),
) : ScreenModel { ) : ScreenModel {

View File

@ -10,27 +10,59 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
enum class ReadingModeType( enum class ReadingMode(
@StringRes val stringRes: Int, @StringRes val stringRes: Int,
@DrawableRes val iconRes: Int, @DrawableRes val iconRes: Int,
val flagValue: Int, val flagValue: Int,
val direction: Direction? = null,
val type: ViewerType? = null,
) { ) {
DEFAULT(R.string.label_default, R.drawable.ic_reader_default_24dp, 0x00000000), DEFAULT(R.string.label_default, R.drawable.ic_reader_default_24dp, 0x00000000),
LEFT_TO_RIGHT(R.string.left_to_right_viewer, R.drawable.ic_reader_ltr_24dp, 0x00000001), LEFT_TO_RIGHT(
RIGHT_TO_LEFT(R.string.right_to_left_viewer, R.drawable.ic_reader_rtl_24dp, 0x00000002), R.string.left_to_right_viewer,
VERTICAL(R.string.vertical_viewer, R.drawable.ic_reader_vertical_24dp, 0x00000003), R.drawable.ic_reader_ltr_24dp,
WEBTOON(R.string.webtoon_viewer, R.drawable.ic_reader_webtoon_24dp, 0x00000004), 0x00000001,
CONTINUOUS_VERTICAL(R.string.vertical_plus_viewer, R.drawable.ic_reader_continuous_vertical_24dp, 0x00000005), Direction.Horizontal,
ViewerType.Pager,
),
RIGHT_TO_LEFT(
R.string.right_to_left_viewer,
R.drawable.ic_reader_rtl_24dp,
0x00000002,
Direction.Horizontal,
ViewerType.Pager,
),
VERTICAL(
R.string.vertical_viewer,
R.drawable.ic_reader_vertical_24dp,
0x00000003,
Direction.Vertical,
ViewerType.Pager,
),
WEBTOON(
R.string.webtoon_viewer,
R.drawable.ic_reader_webtoon_24dp,
0x00000004,
Direction.Vertical,
ViewerType.Webtoon,
),
CONTINUOUS_VERTICAL(
R.string.vertical_plus_viewer,
R.drawable.ic_reader_continuous_vertical_24dp,
0x00000005,
Direction.Vertical,
ViewerType.Webtoon,
),
; ;
companion object { companion object {
const val MASK = 0x00000007 const val MASK = 0x00000007
fun fromPreference(preference: Int?): ReadingModeType = entries.find { it.flagValue == preference } ?: DEFAULT fun fromPreference(preference: Int?): ReadingMode = entries.find { it.flagValue == preference } ?: DEFAULT
fun isPagerType(preference: Int): Boolean { fun isPagerType(preference: Int): Boolean {
val mode = fromPreference(preference) val mode = fromPreference(preference)
return mode == LEFT_TO_RIGHT || mode == RIGHT_TO_LEFT || mode == VERTICAL return mode.type is ViewerType.Pager
} }
fun toViewer(preference: Int?, activity: ReaderActivity): Viewer { fun toViewer(preference: Int?, activity: ReaderActivity): Viewer {
@ -44,4 +76,14 @@ enum class ReadingModeType(
} }
} }
} }
sealed interface Direction {
data object Horizontal : Direction
data object Vertical : Direction
}
sealed interface ViewerType {
data object Pager : ViewerType
data object Webtoon : ViewerType
}
} }

View File

@ -17,7 +17,7 @@ import eu.kanade.tachiyomi.network.NetworkPreferences
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.online.all.NHentai import eu.kanade.tachiyomi.source.online.all.NHentai
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.workManager import eu.kanade.tachiyomi.util.system.workManager
@ -267,12 +267,12 @@ object EXHMigrations {
if (oldVersion under 17) { if (oldVersion under 17) {
// Migrate Rotation and Viewer values to default values for viewer_flags // Migrate Rotation and Viewer values to default values for viewer_flags
val newOrientation = when (prefs.getInt("pref_rotation_type_key", 1)) { val newOrientation = when (prefs.getInt("pref_rotation_type_key", 1)) {
1 -> OrientationType.FREE.flagValue 1 -> ReaderOrientation.FREE.flagValue
2 -> OrientationType.PORTRAIT.flagValue 2 -> ReaderOrientation.PORTRAIT.flagValue
3 -> OrientationType.LANDSCAPE.flagValue 3 -> ReaderOrientation.LANDSCAPE.flagValue
4 -> OrientationType.LOCKED_PORTRAIT.flagValue 4 -> ReaderOrientation.LOCKED_PORTRAIT.flagValue
5 -> OrientationType.LOCKED_LANDSCAPE.flagValue 5 -> ReaderOrientation.LOCKED_LANDSCAPE.flagValue
else -> OrientationType.FREE.flagValue else -> ReaderOrientation.FREE.flagValue
} }
// Reading mode flag and prefValue is the same value // Reading mode flag and prefValue is the same value

View File

@ -2,7 +2,7 @@ package exh.util
import android.content.Context import android.content.Context
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.source.service.SourceManager import tachiyomi.domain.source.service.SourceManager
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -54,7 +54,7 @@ fun Manga.mangaType(sourceName: String? = Injekt.get<SourceManager>().get(source
*/ */
fun Manga.defaultReaderType(type: MangaType = mangaType()): Int? { fun Manga.defaultReaderType(type: MangaType = mangaType()): Int? {
return if (type == MangaType.TYPE_MANHWA || type == MangaType.TYPE_WEBTOON) { return if (type == MangaType.TYPE_MANHWA || type == MangaType.TYPE_WEBTOON) {
ReadingModeType.WEBTOON.flagValue ReadingMode.WEBTOON.flagValue
} else { } else {
null null
} }