Browse Source

Respect chapter list filtering when reading (closes #2810)

arkon 5 years ago
parent
commit
a3b660a2c9

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt

@@ -135,6 +135,8 @@ object PreferenceKeys {
 
     const val skipRead = "skip_read"
 
+    const val skipFiltered = "skip_filtered"
+
     const val downloadBadge = "display_download_badge"
 
     const val alwaysShowChapterTransition = "always_show_chapter_transition"

+ 2 - 0
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -208,6 +208,8 @@ class PreferencesHelper(val context: Context) {
 
     fun skipRead() = prefs.getBoolean(Keys.skipRead, false)
 
+    fun skipFiltered() = prefs.getBoolean(Keys.skipFiltered, false)
+
     fun migrateFlags() = rxPrefs.getInteger("migrate_flags", Int.MAX_VALUE)
 
     fun trustedSignatures() = rxPrefs.getStringSet("trusted_signatures", emptySet())

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

@@ -91,8 +91,27 @@ class ReaderPresenter(
                 ?: error("Requested chapter of id $chapterId not found in chapter list")
 
         val chaptersForReader =
-                if (preferences.skipRead()) {
-                    val list = dbChapters.filter { !it.read }.toMutableList()
+                if (preferences.skipRead() || preferences.skipFiltered()) {
+                    val list = dbChapters
+                        .filter {
+                            if (preferences.skipRead() && it.read) {
+                                return@filter false
+                            } else if (preferences.skipFiltered()) {
+                                if (
+                                    (manga.readFilter == Manga.SHOW_READ && !it.read) ||
+                                    (manga.readFilter == Manga.SHOW_UNREAD && it.read) ||
+                                    (manga.downloadedFilter == Manga.SHOW_DOWNLOADED &&
+                                        !downloadManager.isChapterDownloaded(it, manga)) ||
+                                    (manga.bookmarkedFilter == Manga.SHOW_BOOKMARKED && !it.bookmark)
+                                ) {
+                                    return@filter false
+                                }
+                            }
+
+                            true
+                        }
+                        .toMutableList()
+
                     val find = list.find { it.id == chapterId }
                     if (find == null) {
                         list.add(selectedChapter)

+ 100 - 84
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsReaderController.kt

@@ -16,97 +16,111 @@ class SettingsReaderController : SettingsController() {
     override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
         titleRes = R.string.pref_category_reader
 
-        intListPreference {
-            key = Keys.defaultViewer
-            titleRes = R.string.pref_viewer_type
-            entriesRes = arrayOf(R.string.left_to_right_viewer, R.string.right_to_left_viewer,
-                    R.string.vertical_viewer, R.string.webtoon_viewer)
-            entryValues = arrayOf("1", "2", "3", "4")
-            defaultValue = "1"
-            summary = "%s"
-        }
-        intListPreference {
-            key = Keys.imageScaleType
-            titleRes = R.string.pref_image_scale_type
-            entriesRes = arrayOf(R.string.scale_type_fit_screen, R.string.scale_type_stretch,
-                    R.string.scale_type_fit_width, R.string.scale_type_fit_height,
-                    R.string.scale_type_original_size, R.string.scale_type_smart_fit)
-            entryValues = arrayOf("1", "2", "3", "4", "5", "6")
-            defaultValue = "1"
-            summary = "%s"
-        }
-        intListPreference {
-            key = Keys.zoomStart
-            titleRes = R.string.pref_zoom_start
-            entriesRes = arrayOf(R.string.zoom_start_automatic, R.string.zoom_start_left,
-                    R.string.zoom_start_right, R.string.zoom_start_center)
-            entryValues = arrayOf("1", "2", "3", "4")
-            defaultValue = "1"
-            summary = "%s"
-        }
-        intListPreference {
-            key = Keys.rotation
-            titleRes = R.string.pref_rotation_type
-            entriesRes = arrayOf(R.string.rotation_free, R.string.rotation_lock,
-                    R.string.rotation_force_portrait, R.string.rotation_force_landscape)
-            entryValues = arrayOf("1", "2", "3", "4")
-            defaultValue = "1"
-            summary = "%s"
-        }
-        intListPreference {
-            key = Keys.readerTheme
-            titleRes = R.string.pref_reader_theme
-            entriesRes = arrayOf(R.string.white_background, R.string.black_background)
-            entryValues = arrayOf("0", "1")
-            defaultValue = "0"
-            summary = "%s"
-        }
-        intListPreference {
-            key = Keys.doubleTapAnimationSpeed
-            titleRes = R.string.pref_double_tap_anim_speed
-            entries = arrayOf(context.getString(R.string.double_tap_anim_speed_0), context.getString(R.string.double_tap_anim_speed_fast), context.getString(R.string.double_tap_anim_speed_normal))
-            entryValues = arrayOf("1", "250", "500") // using a value of 0 breaks the image viewer, so min is 1
-            defaultValue = "500"
-            summary = "%s"
-        }
-        switchPreference {
-            key = Keys.skipRead
-            titleRes = R.string.pref_skip_read_chapters
-            defaultValue = false
-        }
-        switchPreference {
-            key = Keys.fullscreen
-            titleRes = R.string.pref_fullscreen
-            defaultValue = true
-        }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+        preferenceCategory {
+            titleRes = R.string.pref_category_general
+
+            intListPreference {
+                key = Keys.defaultViewer
+                titleRes = R.string.pref_viewer_type
+                entriesRes = arrayOf(R.string.left_to_right_viewer, R.string.right_to_left_viewer,
+                        R.string.vertical_viewer, R.string.webtoon_viewer)
+                entryValues = arrayOf("1", "2", "3", "4")
+                defaultValue = "1"
+                summary = "%s"
+            }
+            intListPreference {
+                key = Keys.imageScaleType
+                titleRes = R.string.pref_image_scale_type
+                entriesRes = arrayOf(R.string.scale_type_fit_screen, R.string.scale_type_stretch,
+                        R.string.scale_type_fit_width, R.string.scale_type_fit_height,
+                        R.string.scale_type_original_size, R.string.scale_type_smart_fit)
+                entryValues = arrayOf("1", "2", "3", "4", "5", "6")
+                defaultValue = "1"
+                summary = "%s"
+            }
+            intListPreference {
+                key = Keys.zoomStart
+                titleRes = R.string.pref_zoom_start
+                entriesRes = arrayOf(R.string.zoom_start_automatic, R.string.zoom_start_left,
+                        R.string.zoom_start_right, R.string.zoom_start_center)
+                entryValues = arrayOf("1", "2", "3", "4")
+                defaultValue = "1"
+                summary = "%s"
+            }
+            intListPreference {
+                key = Keys.rotation
+                titleRes = R.string.pref_rotation_type
+                entriesRes = arrayOf(R.string.rotation_free, R.string.rotation_lock,
+                        R.string.rotation_force_portrait, R.string.rotation_force_landscape)
+                entryValues = arrayOf("1", "2", "3", "4")
+                defaultValue = "1"
+                summary = "%s"
+            }
+            intListPreference {
+                key = Keys.readerTheme
+                titleRes = R.string.pref_reader_theme
+                entriesRes = arrayOf(R.string.white_background, R.string.black_background)
+                entryValues = arrayOf("0", "1")
+                defaultValue = "0"
+                summary = "%s"
+            }
+            intListPreference {
+                key = Keys.doubleTapAnimationSpeed
+                titleRes = R.string.pref_double_tap_anim_speed
+                entries = arrayOf(context.getString(R.string.double_tap_anim_speed_0), context.getString(R.string.double_tap_anim_speed_fast), context.getString(R.string.double_tap_anim_speed_normal))
+                entryValues = arrayOf("1", "250", "500") // using a value of 0 breaks the image viewer, so min is 1
+                defaultValue = "500"
+                summary = "%s"
+            }
             switchPreference {
-                key = Keys.cutoutShort
-                titleRes = R.string.pref_cutout_short
+                key = Keys.fullscreen
+                titleRes = R.string.pref_fullscreen
                 defaultValue = true
             }
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                switchPreference {
+                    key = Keys.cutoutShort
+                    titleRes = R.string.pref_cutout_short
+                    defaultValue = true
+                }
+            }
+            switchPreference {
+                key = Keys.keepScreenOn
+                titleRes = R.string.pref_keep_screen_on
+                defaultValue = true
+            }
+            switchPreference {
+                key = Keys.showPageNumber
+                titleRes = R.string.pref_show_page_number
+                defaultValue = true
+            }
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                switchPreference {
+                    key = Keys.trueColor
+                    titleRes = R.string.pref_true_color
+                    defaultValue = false
+                }
+            }
         }
-        switchPreference {
-            key = Keys.keepScreenOn
-            titleRes = R.string.pref_keep_screen_on
-            defaultValue = true
-        }
-        switchPreference {
-            key = Keys.showPageNumber
-            titleRes = R.string.pref_show_page_number
-            defaultValue = true
-        }
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+
+        preferenceCategory {
+            titleRes = R.string.pref_category_reading
+
             switchPreference {
-                key = Keys.trueColor
-                titleRes = R.string.pref_true_color
+                key = Keys.skipRead
+                titleRes = R.string.pref_skip_read_chapters
                 defaultValue = false
             }
-        }
-        switchPreference {
-            key = Keys.alwaysShowChapterTransition
-            titleRes = R.string.pref_always_show_chapter_transition
-            defaultValue = true
+            switchPreference {
+                key = Keys.skipFiltered
+                titleRes = R.string.pref_skip_filtered_chapters
+                defaultValue = false
+            }
+            switchPreference {
+                key = Keys.alwaysShowChapterTransition
+                titleRes = R.string.pref_always_show_chapter_transition
+                defaultValue = true
+            }
         }
 
         preferenceCategory {
@@ -123,6 +137,7 @@ class SettingsReaderController : SettingsController() {
                 defaultValue = false
             }
         }
+
         preferenceCategory {
             titleRes = R.string.webtoon_viewer
 
@@ -137,6 +152,7 @@ class SettingsReaderController : SettingsController() {
                 defaultValue = false
             }
         }
+
         preferenceCategory {
             titleRes = R.string.pref_reader_navigation
 

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -234,6 +234,7 @@
     <string name="filter_mode_darken">Burn / Darken</string>
     <string name="pref_keep_screen_on">Keep screen on</string>
     <string name="pref_skip_read_chapters">Skip chapters marked read</string>
+    <string name="pref_skip_filtered_chapters">Skip filtered chapters</string>
     <string name="pref_reader_navigation">Navigation</string>
     <string name="pref_read_with_volume_keys">Volume keys</string>
     <string name="pref_read_with_volume_keys_inverted">Invert volume keys</string>
@@ -275,6 +276,7 @@
     <string name="color_filter_b_value">B</string>
     <string name="color_filter_a_value">A</string>
     <string name="pref_always_show_chapter_transition">Always show chapter transition</string>
+    <string name="pref_category_reading">Reading</string>
 
       <!-- Downloads section -->
     <string name="pref_download_directory">Download location</string>