Browse Source

Fallback to default viewer properly (closes #5068)

arkon 3 years ago
parent
commit
2a7ed1375a

+ 1 - 10
app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt

@@ -50,10 +50,7 @@ import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
 import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet
 import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
 import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
-import eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer
 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.webtoon.WebtoonViewer
 import eu.kanade.tachiyomi.util.storage.getUriCompat
 import eu.kanade.tachiyomi.util.system.GLUtil
 import eu.kanade.tachiyomi.util.system.hasDisplayCutout
@@ -540,13 +537,7 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>()
         val viewerMode = ReadingModeType.fromPreference(presenter.getMangaReadingMode(resolveDefault = false))
         binding.actionReadingMode.setImageResource(viewerMode.iconRes)
 
-        val newViewer = when (presenter.getMangaReadingMode()) {
-            ReadingModeType.LEFT_TO_RIGHT.prefValue -> L2RPagerViewer(this)
-            ReadingModeType.VERTICAL.prefValue -> VerticalPagerViewer(this)
-            ReadingModeType.WEBTOON.prefValue -> WebtoonViewer(this)
-            ReadingModeType.CONTINUOUS_VERTICAL.prefValue -> WebtoonViewer(this, isContinuous = false)
-            else -> R2LPagerViewer(this)
-        }
+        val newViewer = ReadingModeType.toViewer(presenter.getMangaReadingMode(), this)
 
         setOrientation(presenter.getMangaOrientationType())
 

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt

@@ -501,8 +501,9 @@ class ReaderPresenter(
      */
     fun getMangaReadingMode(resolveDefault: Boolean = true): Int {
         val default = preferences.defaultReadingMode()
+        val readingMode = ReadingModeType.fromPreference(manga?.readingModeType)
         return when {
-            resolveDefault && manga?.readingModeType == ReadingModeType.DEFAULT.flagValue -> default
+            resolveDefault && readingMode == ReadingModeType.DEFAULT -> default
             else -> manga?.readingModeType ?: default
         }
     }

+ 17 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReadingModeType.kt

@@ -3,6 +3,12 @@ package eu.kanade.tachiyomi.ui.reader.setting
 import androidx.annotation.DrawableRes
 import androidx.annotation.StringRes
 import eu.kanade.tachiyomi.R
+import eu.kanade.tachiyomi.ui.reader.ReaderActivity
+import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
+import eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer
+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.webtoon.WebtoonViewer
 
 enum class ReadingModeType(val prefValue: Int, @StringRes val stringRes: Int, @DrawableRes val iconRes: Int, val flagValue: Int) {
     DEFAULT(0, R.string.default_viewer, R.drawable.ic_reader_default_24dp, 0x00000000),
@@ -24,5 +30,16 @@ enum class ReadingModeType(val prefValue: Int, @StringRes val stringRes: Int, @D
         }
 
         fun fromSpinner(position: Int?) = values().find { value -> value.prefValue == position } ?: DEFAULT
+
+        fun toViewer(preference: Int?, activity: ReaderActivity): BaseViewer {
+            return when (fromPreference(preference)) {
+                LEFT_TO_RIGHT -> L2RPagerViewer(activity)
+                RIGHT_TO_LEFT -> R2LPagerViewer(activity)
+                VERTICAL -> VerticalPagerViewer(activity)
+                WEBTOON -> WebtoonViewer(activity)
+                CONTINUOUS_VERTICAL -> WebtoonViewer(activity, isContinuous = false)
+                DEFAULT -> throw IllegalStateException("Preference value must be resolved: $preference")
+            }
+        }
     }
 }