Reduce redundancy in some preference declarations

The remaining ones could also be converted to FlowPreferences for this, but it's not really necessary.
This commit is contained in:
arkon 2021-12-26 12:44:38 -05:00
parent 5500762acd
commit f3718257f5
21 changed files with 174 additions and 371 deletions

View File

@ -5,140 +5,28 @@ package eu.kanade.tachiyomi.data.preference
*/ */
object PreferenceKeys { object PreferenceKeys {
const val themeMode = "pref_theme_mode_key"
const val appTheme = "pref_app_theme"
const val themeDarkAmoled = "pref_theme_dark_amoled_key"
const val confirmExit = "pref_confirm_exit" const val confirmExit = "pref_confirm_exit"
const val hideBottomBarOnScroll = "pref_hide_bottom_bar_on_scroll"
const val sideNavIconAlignment = "pref_side_nav_icon_alignment"
const val enableTransitions = "pref_enable_transitions_key"
const val doubleTapAnimationSpeed = "pref_double_tap_anim_speed"
const val showPageNumber = "pref_show_page_number_key"
const val dualPageSplitPaged = "pref_dual_page_split"
const val dualPageSplitWebtoon = "pref_dual_page_split_webtoon"
const val dualPageInvertPaged = "pref_dual_page_invert"
const val dualPageInvertWebtoon = "pref_dual_page_invert_webtoon"
const val showReadingMode = "pref_show_reading_mode" const val showReadingMode = "pref_show_reading_mode"
const val trueColor = "pref_true_color_key"
const val fullscreen = "fullscreen"
const val cutoutShort = "cutout_short"
const val keepScreenOn = "pref_keep_screen_on_key"
const val customBrightness = "pref_custom_brightness_key"
const val customBrightnessValue = "custom_brightness_value"
const val colorFilter = "pref_color_filter_key"
const val colorFilterValue = "color_filter_value"
const val colorFilterMode = "color_filter_mode"
const val grayscale = "pref_grayscale"
const val invertedColors = "pref_inverted_colors"
const val defaultReadingMode = "pref_default_reading_mode_key" const val defaultReadingMode = "pref_default_reading_mode_key"
const val defaultOrientationType = "pref_default_orientation_type_key" const val defaultOrientationType = "pref_default_orientation_type_key"
const val imageScaleType = "pref_image_scale_type_key"
const val zoomStart = "pref_zoom_start_key"
const val readerTheme = "pref_reader_theme_key"
const val cropBorders = "crop_borders"
const val cropBordersWebtoon = "crop_borders_webtoon"
const val readWithTapping = "reader_tap"
const val pagerNavInverted = "reader_tapping_inverted"
const val webtoonNavInverted = "reader_tapping_inverted_webtoon"
const val readWithLongTap = "reader_long_tap"
const val readWithVolumeKeys = "reader_volume_keys"
const val readWithVolumeKeysInverted = "reader_volume_keys_inverted"
const val navigationModePager = "reader_navigation_mode_pager"
const val navigationModeWebtoon = "reader_navigation_mode_webtoon"
const val showNavigationOverlayNewUser = "reader_navigation_overlay_new_user"
const val showNavigationOverlayOnStart = "reader_navigation_overlay_on_start"
const val readerHideThreshold = "reader_hide_threshold"
const val webtoonSidePadding = "webtoon_side_padding"
const val portraitColumns = "pref_library_columns_portrait_key"
const val landscapeColumns = "pref_library_columns_landscape_key"
const val jumpToChapters = "jump_to_chapters" const val jumpToChapters = "jump_to_chapters"
const val autoUpdateTrack = "pref_auto_update_manga_sync_key" const val autoUpdateTrack = "pref_auto_update_manga_sync_key"
const val lastUsedSource = "last_catalogue_source"
const val lastUsedCategory = "last_used_category"
const val sourceDisplayMode = "pref_display_mode_catalogue"
const val enabledLanguages = "source_languages"
const val backupDirectory = "backup_directory"
const val downloadsDirectory = "download_directory"
const val downloadOnlyOverWifi = "pref_download_only_over_wifi_key" const val downloadOnlyOverWifi = "pref_download_only_over_wifi_key"
const val folderPerManga = "create_folder_per_manga" const val folderPerManga = "create_folder_per_manga"
const val numberOfBackups = "backup_slots"
const val backupInterval = "backup_interval"
const val removeAfterReadSlots = "remove_after_read_slots" const val removeAfterReadSlots = "remove_after_read_slots"
const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key" const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key"
const val removeBookmarkedChapters = "pref_remove_bookmarked" const val removeBookmarkedChapters = "pref_remove_bookmarked"
const val libraryUpdateInterval = "pref_library_update_interval_key"
const val libraryUpdateDeviceRestriction = "library_update_restriction"
const val libraryUpdateMangaRestriction = "library_update_manga_restriction"
const val showUpdatesNavBadge = "library_update_show_tab_badge"
const val libraryUpdateCategories = "library_update_categories"
const val libraryUpdateCategoriesExclude = "library_update_categories_exclude"
const val downloadedOnly = "pref_downloaded_only"
const val filterDownloaded = "pref_filter_library_downloaded" const val filterDownloaded = "pref_filter_library_downloaded"
const val filterUnread = "pref_filter_library_unread" const val filterUnread = "pref_filter_library_unread"
@ -153,59 +41,22 @@ object PreferenceKeys {
const val migrationSortingMode = "pref_migration_sorting" const val migrationSortingMode = "pref_migration_sorting"
const val migrationSortingDirection = "pref_migration_direction" const val migrationSortingDirection = "pref_migration_direction"
const val automaticExtUpdates = "automatic_ext_updates"
const val showNsfwSource = "show_nsfw_source"
const val startScreen = "start_screen" const val startScreen = "start_screen"
const val useAuthenticator = "use_biometric_lock"
const val lockAppAfter = "lock_app_after"
const val lastAppUnlock = "last_app_unlock"
const val secureScreen = "secure_screen"
const val hideNotificationContent = "hide_notification_content" const val hideNotificationContent = "hide_notification_content"
const val autoUpdateMetadata = "auto_update_metadata" const val autoUpdateMetadata = "auto_update_metadata"
const val autoUpdateTrackers = "auto_update_trackers" const val autoUpdateTrackers = "auto_update_trackers"
const val downloadNew = "download_new"
const val downloadNewCategories = "download_new_categories"
const val downloadNewCategoriesExclude = "download_new_categories_exclude"
const val removeExcludeCategories = "remove_exclude_categories"
const val libraryDisplayMode = "pref_display_mode_library"
const val relativeTime: String = "relative_time"
const val dateFormat = "app_date_format" const val dateFormat = "app_date_format"
const val defaultCategory = "default_category" const val defaultCategory = "default_category"
const val categorizedDisplay = "categorized_display"
const val skipRead = "skip_read" const val skipRead = "skip_read"
const val skipFiltered = "skip_filtered" const val skipFiltered = "skip_filtered"
const val downloadBadge = "display_download_badge"
const val unreadBadge = "display_unread_badge"
const val languageBadge = "display_language_badge"
const val localBadge = "display_local_badge"
const val categoryTabs = "display_category_tabs"
const val categoryNumberOfItems = "display_number_of_items"
const val alwaysShowChapterTransition = "always_show_chapter_transition"
const val searchPinnedSourcesOnly = "search_pinned_sources_only" const val searchPinnedSourcesOnly = "search_pinned_sources_only"
const val dohProvider = "doh_provider" const val dohProvider = "doh_provider"
@ -222,12 +73,6 @@ object PreferenceKeys {
const val defaultChapterDisplayByNameOrNumber = "default_chapter_display_by_name_or_number" const val defaultChapterDisplayByNameOrNumber = "default_chapter_display_by_name_or_number"
const val incognitoMode = "incognito_mode"
const val tabletUiMode = "tablet_ui_mode"
const val extensionInstaller = "extension_installer"
const val verboseLogging = "verbose_logging" const val verboseLogging = "verbose_logging"
const val autoClearChapterCache = "auto_clear_chapter_cache" const val autoClearChapterCache = "auto_clear_chapter_cache"

View File

@ -1,15 +1,16 @@
package eu.kanade.tachiyomi.data.preference package eu.kanade.tachiyomi.data.preference
import android.content.Context import android.content.Context
import android.os.Build
import android.os.Environment import android.os.Environment
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.google.android.material.color.DynamicColors
import com.tfcporciuncula.flow.FlowSharedPreferences import com.tfcporciuncula.flow.FlowSharedPreferences
import com.tfcporciuncula.flow.Preference import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferenceValues.ThemeMode.system
import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.TrackService
import eu.kanade.tachiyomi.data.track.anilist.Anilist import eu.kanade.tachiyomi.data.track.anilist.Anilist
import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrationSourcesController import eu.kanade.tachiyomi.ui.browse.migration.sources.MigrationSourcesController
@ -69,17 +70,17 @@ class PreferencesHelper(val context: Context) {
fun confirmExit() = prefs.getBoolean(Keys.confirmExit, false) fun confirmExit() = prefs.getBoolean(Keys.confirmExit, false)
fun hideBottomBarOnScroll() = flowPrefs.getBoolean(Keys.hideBottomBarOnScroll, true) fun hideBottomBarOnScroll() = flowPrefs.getBoolean("pref_hide_bottom_bar_on_scroll", true)
fun sideNavIconAlignment() = flowPrefs.getInt(Keys.sideNavIconAlignment, 0) fun sideNavIconAlignment() = flowPrefs.getInt("pref_side_nav_icon_alignment", 0)
fun useAuthenticator() = flowPrefs.getBoolean(Keys.useAuthenticator, false) fun useAuthenticator() = flowPrefs.getBoolean("use_biometric_lock", false)
fun lockAppAfter() = flowPrefs.getInt(Keys.lockAppAfter, 0) fun lockAppAfter() = flowPrefs.getInt("lock_app_after", 0)
fun lastAppUnlock() = flowPrefs.getLong(Keys.lastAppUnlock, 0) fun lastAppUnlock() = flowPrefs.getLong("last_app_unlock", 0)
fun secureScreen() = flowPrefs.getBoolean(Keys.secureScreen, false) fun secureScreen() = flowPrefs.getBoolean("secure_screen", false)
fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false) fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false)
@ -87,107 +88,113 @@ class PreferencesHelper(val context: Context) {
fun autoUpdateTrackers() = prefs.getBoolean(Keys.autoUpdateTrackers, false) fun autoUpdateTrackers() = prefs.getBoolean(Keys.autoUpdateTrackers, false)
fun themeMode() = flowPrefs.getEnum(Keys.themeMode, system) fun themeMode() = flowPrefs.getEnum(
"pref_theme_mode_key",
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Values.ThemeMode.system } else { Values.ThemeMode.light }
)
fun appTheme() = flowPrefs.getEnum(Keys.appTheme, Values.AppTheme.DEFAULT) fun appTheme() = flowPrefs.getEnum(
"pref_app_theme",
if (DynamicColors.isDynamicColorAvailable()) { Values.AppTheme.MONET } else { Values.AppTheme.DEFAULT }
)
fun themeDarkAmoled() = flowPrefs.getBoolean(Keys.themeDarkAmoled, false) fun themeDarkAmoled() = flowPrefs.getBoolean("pref_theme_dark_amoled_key", false)
fun pageTransitions() = flowPrefs.getBoolean(Keys.enableTransitions, true) fun pageTransitions() = flowPrefs.getBoolean("pref_enable_transitions_key", true)
fun doubleTapAnimSpeed() = flowPrefs.getInt(Keys.doubleTapAnimationSpeed, 500) fun doubleTapAnimSpeed() = flowPrefs.getInt("pref_double_tap_anim_speed", 500)
fun showPageNumber() = flowPrefs.getBoolean(Keys.showPageNumber, true) fun showPageNumber() = flowPrefs.getBoolean("pref_show_page_number_key", true)
fun dualPageSplitPaged() = flowPrefs.getBoolean(Keys.dualPageSplitPaged, false) fun dualPageSplitPaged() = flowPrefs.getBoolean("pref_dual_page_split", false)
fun dualPageSplitWebtoon() = flowPrefs.getBoolean(Keys.dualPageSplitWebtoon, false) fun dualPageSplitWebtoon() = flowPrefs.getBoolean("pref_dual_page_split_webtoon", false)
fun dualPageInvertPaged() = flowPrefs.getBoolean(Keys.dualPageInvertPaged, false) fun dualPageInvertPaged() = flowPrefs.getBoolean("pref_dual_page_invert", false)
fun dualPageInvertWebtoon() = flowPrefs.getBoolean(Keys.dualPageInvertWebtoon, false) fun dualPageInvertWebtoon() = flowPrefs.getBoolean("pref_dual_page_invert_webtoon", false)
fun showReadingMode() = prefs.getBoolean(Keys.showReadingMode, true) fun showReadingMode() = prefs.getBoolean(Keys.showReadingMode, true)
fun trueColor() = flowPrefs.getBoolean(Keys.trueColor, false) fun trueColor() = flowPrefs.getBoolean("pref_true_color_key", false)
fun fullscreen() = flowPrefs.getBoolean(Keys.fullscreen, true) fun fullscreen() = flowPrefs.getBoolean("fullscreen", true)
fun cutoutShort() = flowPrefs.getBoolean(Keys.cutoutShort, true) fun cutoutShort() = flowPrefs.getBoolean("cutout_short", true)
fun keepScreenOn() = flowPrefs.getBoolean(Keys.keepScreenOn, true) fun keepScreenOn() = flowPrefs.getBoolean("pref_keep_screen_on_key", true)
fun customBrightness() = flowPrefs.getBoolean(Keys.customBrightness, false) fun customBrightness() = flowPrefs.getBoolean("pref_custom_brightness_key", false)
fun customBrightnessValue() = flowPrefs.getInt(Keys.customBrightnessValue, 0) fun customBrightnessValue() = flowPrefs.getInt("custom_brightness_value", 0)
fun colorFilter() = flowPrefs.getBoolean(Keys.colorFilter, false) fun colorFilter() = flowPrefs.getBoolean("pref_color_filter_key", false)
fun colorFilterValue() = flowPrefs.getInt(Keys.colorFilterValue, 0) fun colorFilterValue() = flowPrefs.getInt("color_filter_value", 0)
fun colorFilterMode() = flowPrefs.getInt(Keys.colorFilterMode, 0) fun colorFilterMode() = flowPrefs.getInt("color_filter_mode", 0)
fun grayscale() = flowPrefs.getBoolean(Keys.grayscale, false) fun grayscale() = flowPrefs.getBoolean("pref_grayscale", false)
fun invertedColors() = flowPrefs.getBoolean(Keys.invertedColors, false) fun invertedColors() = flowPrefs.getBoolean("pref_inverted_colors", false)
fun defaultReadingMode() = prefs.getInt(Keys.defaultReadingMode, ReadingModeType.RIGHT_TO_LEFT.flagValue) fun defaultReadingMode() = prefs.getInt(Keys.defaultReadingMode, ReadingModeType.RIGHT_TO_LEFT.flagValue)
fun defaultOrientationType() = prefs.getInt(Keys.defaultOrientationType, OrientationType.FREE.flagValue) fun defaultOrientationType() = prefs.getInt(Keys.defaultOrientationType, OrientationType.FREE.flagValue)
fun imageScaleType() = flowPrefs.getInt(Keys.imageScaleType, 1) fun imageScaleType() = flowPrefs.getInt("pref_image_scale_type_key", 1)
fun zoomStart() = flowPrefs.getInt(Keys.zoomStart, 1) fun zoomStart() = flowPrefs.getInt("pref_zoom_start_key", 1)
fun readerTheme() = flowPrefs.getInt(Keys.readerTheme, 1) fun readerTheme() = flowPrefs.getInt("pref_reader_theme_key", 1)
fun alwaysShowChapterTransition() = flowPrefs.getBoolean(Keys.alwaysShowChapterTransition, true) fun alwaysShowChapterTransition() = flowPrefs.getBoolean("always_show_chapter_transition", true)
fun cropBorders() = flowPrefs.getBoolean(Keys.cropBorders, false) fun cropBorders() = flowPrefs.getBoolean("crop_borders", false)
fun cropBordersWebtoon() = flowPrefs.getBoolean(Keys.cropBordersWebtoon, false) fun cropBordersWebtoon() = flowPrefs.getBoolean("crop_borders_webtoon", false)
fun webtoonSidePadding() = flowPrefs.getInt(Keys.webtoonSidePadding, 0) fun webtoonSidePadding() = flowPrefs.getInt("webtoon_side_padding", 0)
fun readWithTapping() = flowPrefs.getBoolean(Keys.readWithTapping, true) fun readWithTapping() = flowPrefs.getBoolean("reader_tap", true)
fun pagerNavInverted() = flowPrefs.getEnum(Keys.pagerNavInverted, Values.TappingInvertMode.NONE) fun pagerNavInverted() = flowPrefs.getEnum("reader_tapping_inverted", Values.TappingInvertMode.NONE)
fun webtoonNavInverted() = flowPrefs.getEnum(Keys.webtoonNavInverted, Values.TappingInvertMode.NONE) fun webtoonNavInverted() = flowPrefs.getEnum("reader_tapping_inverted_webtoon", Values.TappingInvertMode.NONE)
fun readWithLongTap() = flowPrefs.getBoolean(Keys.readWithLongTap, true) fun readWithLongTap() = flowPrefs.getBoolean("reader_long_tap", true)
fun readWithVolumeKeys() = flowPrefs.getBoolean(Keys.readWithVolumeKeys, false) fun readWithVolumeKeys() = flowPrefs.getBoolean("reader_volume_keys", false)
fun readWithVolumeKeysInverted() = flowPrefs.getBoolean(Keys.readWithVolumeKeysInverted, false) fun readWithVolumeKeysInverted() = flowPrefs.getBoolean("reader_volume_keys_inverted", false)
fun navigationModePager() = flowPrefs.getInt(Keys.navigationModePager, 0) fun navigationModePager() = flowPrefs.getInt("reader_navigation_mode_pager", 0)
fun navigationModeWebtoon() = flowPrefs.getInt(Keys.navigationModeWebtoon, 0) fun navigationModeWebtoon() = flowPrefs.getInt("reader_navigation_mode_webtoon", 0)
fun showNavigationOverlayNewUser() = flowPrefs.getBoolean(Keys.showNavigationOverlayNewUser, true) fun showNavigationOverlayNewUser() = flowPrefs.getBoolean("reader_navigation_overlay_new_user", true)
fun showNavigationOverlayOnStart() = flowPrefs.getBoolean(Keys.showNavigationOverlayOnStart, false) fun showNavigationOverlayOnStart() = flowPrefs.getBoolean("reader_navigation_overlay_on_start", false)
fun readerHideTreshold() = flowPrefs.getEnum(Keys.readerHideThreshold, Values.ReaderHideThreshold.LOW) fun readerHideThreshold() = flowPrefs.getEnum("reader_hide_threshold", Values.ReaderHideThreshold.LOW)
fun portraitColumns() = flowPrefs.getInt(Keys.portraitColumns, 0) fun portraitColumns() = flowPrefs.getInt("pref_library_columns_portrait_key", 0)
fun landscapeColumns() = flowPrefs.getInt(Keys.landscapeColumns, 0) fun landscapeColumns() = flowPrefs.getInt("pref_library_columns_landscape_key", 0)
fun jumpToChapters() = prefs.getBoolean(Keys.jumpToChapters, false) fun jumpToChapters() = prefs.getBoolean(Keys.jumpToChapters, false)
fun autoUpdateTrack() = prefs.getBoolean(Keys.autoUpdateTrack, true) fun autoUpdateTrack() = prefs.getBoolean(Keys.autoUpdateTrack, true)
fun lastUsedSource() = flowPrefs.getLong(Keys.lastUsedSource, -1) fun lastUsedSource() = flowPrefs.getLong("last_catalogue_source", -1)
fun lastUsedCategory() = flowPrefs.getInt(Keys.lastUsedCategory, 0) fun lastUsedCategory() = flowPrefs.getInt("last_used_category", 0)
fun lastVersionCode() = flowPrefs.getInt("last_version_code", 0) fun lastVersionCode() = flowPrefs.getInt("last_version_code", 0)
fun sourceDisplayMode() = flowPrefs.getEnum(Keys.sourceDisplayMode, DisplayModeSetting.COMPACT_GRID) fun sourceDisplayMode() = flowPrefs.getEnum("pref_display_mode_catalogue", DisplayModeSetting.COMPACT_GRID)
fun enabledLanguages() = flowPrefs.getStringSet(Keys.enabledLanguages, setOf("all", "en", Locale.getDefault().language)) fun enabledLanguages() = flowPrefs.getStringSet("source_languages", setOf("all", "en", Locale.getDefault().language))
fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "") fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "")
@ -204,24 +211,24 @@ class PreferencesHelper(val context: Context) {
fun anilistScoreType() = flowPrefs.getString("anilist_score_type", Anilist.POINT_10) fun anilistScoreType() = flowPrefs.getString("anilist_score_type", Anilist.POINT_10)
fun backupsDirectory() = flowPrefs.getString(Keys.backupDirectory, defaultBackupDir.toString()) fun backupsDirectory() = flowPrefs.getString("backup_directory", defaultBackupDir.toString())
fun relativeTime() = flowPrefs.getInt(Keys.relativeTime, 7) fun relativeTime() = flowPrefs.getInt("relative_time", 7)
fun dateFormat(format: String = flowPrefs.getString(Keys.dateFormat, "").get()): DateFormat = when (format) { fun dateFormat(format: String = flowPrefs.getString(Keys.dateFormat, "").get()): DateFormat = when (format) {
"" -> DateFormat.getDateInstance(DateFormat.SHORT) "" -> DateFormat.getDateInstance(DateFormat.SHORT)
else -> SimpleDateFormat(format, Locale.getDefault()) else -> SimpleDateFormat(format, Locale.getDefault())
} }
fun downloadsDirectory() = flowPrefs.getString(Keys.downloadsDirectory, defaultDownloadsDir.toString()) fun downloadsDirectory() = flowPrefs.getString("download_directory", defaultDownloadsDir.toString())
fun downloadOnlyOverWifi() = prefs.getBoolean(Keys.downloadOnlyOverWifi, true) fun downloadOnlyOverWifi() = prefs.getBoolean(Keys.downloadOnlyOverWifi, true)
fun folderPerManga() = prefs.getBoolean(Keys.folderPerManga, false) fun folderPerManga() = prefs.getBoolean(Keys.folderPerManga, false)
fun numberOfBackups() = flowPrefs.getInt(Keys.numberOfBackups, 1) fun numberOfBackups() = flowPrefs.getInt("backup_slots", 1)
fun backupInterval() = flowPrefs.getInt(Keys.backupInterval, 0) fun backupInterval() = flowPrefs.getInt("backup_interval", 0)
fun removeAfterReadSlots() = prefs.getInt(Keys.removeAfterReadSlots, -1) fun removeAfterReadSlots() = prefs.getInt(Keys.removeAfterReadSlots, -1)
@ -229,34 +236,34 @@ class PreferencesHelper(val context: Context) {
fun removeBookmarkedChapters() = prefs.getBoolean(Keys.removeBookmarkedChapters, false) fun removeBookmarkedChapters() = prefs.getBoolean(Keys.removeBookmarkedChapters, false)
fun removeExcludeCategories() = flowPrefs.getStringSet(Keys.removeExcludeCategories, emptySet()) fun removeExcludeCategories() = flowPrefs.getStringSet("remove_exclude_categories", emptySet())
fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24) fun libraryUpdateInterval() = flowPrefs.getInt("pref_library_update_interval_key", 24)
fun libraryUpdateDeviceRestriction() = flowPrefs.getStringSet(Keys.libraryUpdateDeviceRestriction, setOf(DEVICE_ONLY_ON_WIFI)) fun libraryUpdateDeviceRestriction() = flowPrefs.getStringSet("library_update_restriction", setOf(DEVICE_ONLY_ON_WIFI))
fun libraryUpdateMangaRestriction() = flowPrefs.getStringSet(Keys.libraryUpdateMangaRestriction, setOf(MANGA_FULLY_READ, MANGA_ONGOING)) fun libraryUpdateMangaRestriction() = flowPrefs.getStringSet("library_update_manga_restriction", setOf(MANGA_FULLY_READ, MANGA_ONGOING))
fun showUpdatesNavBadge() = flowPrefs.getBoolean(Keys.showUpdatesNavBadge, false) fun showUpdatesNavBadge() = flowPrefs.getBoolean("library_update_show_tab_badge", false)
fun unreadUpdatesCount() = flowPrefs.getInt("library_unread_updates_count", 0) fun unreadUpdatesCount() = flowPrefs.getInt("library_unread_updates_count", 0)
fun libraryUpdateCategories() = flowPrefs.getStringSet(Keys.libraryUpdateCategories, emptySet()) fun libraryUpdateCategories() = flowPrefs.getStringSet("library_update_categories", emptySet())
fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet(Keys.libraryUpdateCategoriesExclude, emptySet()) fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet("library_update_categories_exclude", emptySet())
fun libraryDisplayMode() = flowPrefs.getEnum(Keys.libraryDisplayMode, DisplayModeSetting.COMPACT_GRID) fun libraryDisplayMode() = flowPrefs.getEnum("pref_display_mode_library", DisplayModeSetting.COMPACT_GRID)
fun downloadBadge() = flowPrefs.getBoolean(Keys.downloadBadge, false) fun downloadBadge() = flowPrefs.getBoolean("display_download_badge", false)
fun localBadge() = flowPrefs.getBoolean(Keys.localBadge, true) fun localBadge() = flowPrefs.getBoolean("display_local_badge", true)
fun downloadedOnly() = flowPrefs.getBoolean(Keys.downloadedOnly, false) fun downloadedOnly() = flowPrefs.getBoolean("pref_downloaded_only", false)
fun unreadBadge() = flowPrefs.getBoolean(Keys.unreadBadge, true) fun unreadBadge() = flowPrefs.getBoolean("display_unread_badge", true)
fun languageBadge() = flowPrefs.getBoolean(Keys.languageBadge, false) fun languageBadge() = flowPrefs.getBoolean("display_language_badge", false)
fun categoryTabs() = flowPrefs.getBoolean(Keys.categoryTabs, true) fun categoryTabs() = flowPrefs.getBoolean("display_category_tabs", true)
fun categoryNumberOfItems() = flowPrefs.getBoolean(Keys.categoryNumberOfItems, false) fun categoryNumberOfItems() = flowPrefs.getBoolean("display_number_of_items", false)
fun filterDownloaded() = flowPrefs.getInt(Keys.filterDownloaded, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value) fun filterDownloaded() = flowPrefs.getInt(Keys.filterDownloaded, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
@ -272,9 +279,9 @@ class PreferencesHelper(val context: Context) {
fun migrationSortingMode() = flowPrefs.getEnum(Keys.migrationSortingMode, MigrationSourcesController.SortSetting.ALPHABETICAL) fun migrationSortingMode() = flowPrefs.getEnum(Keys.migrationSortingMode, MigrationSourcesController.SortSetting.ALPHABETICAL)
fun migrationSortingDirection() = flowPrefs.getEnum(Keys.migrationSortingDirection, MigrationSourcesController.DirectionSetting.ASCENDING) fun migrationSortingDirection() = flowPrefs.getEnum(Keys.migrationSortingDirection, MigrationSourcesController.DirectionSetting.ASCENDING)
fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true) fun automaticExtUpdates() = flowPrefs.getBoolean("automatic_ext_updates", true)
fun showNsfwSource() = flowPrefs.getBoolean(Keys.showNsfwSource, true) fun showNsfwSource() = flowPrefs.getBoolean("show_nsfw_source", true)
fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0) fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
@ -287,14 +294,14 @@ class PreferencesHelper(val context: Context) {
fun pinnedSources() = flowPrefs.getStringSet("pinned_catalogues", emptySet()) fun pinnedSources() = flowPrefs.getStringSet("pinned_catalogues", emptySet())
fun downloadNew() = flowPrefs.getBoolean(Keys.downloadNew, false) fun downloadNew() = flowPrefs.getBoolean("download_new", false)
fun downloadNewCategories() = flowPrefs.getStringSet(Keys.downloadNewCategories, emptySet()) fun downloadNewCategories() = flowPrefs.getStringSet("download_new_categories", emptySet())
fun downloadNewCategoriesExclude() = flowPrefs.getStringSet(Keys.downloadNewCategoriesExclude, emptySet()) fun downloadNewCategoriesExclude() = flowPrefs.getStringSet("download_new_categories_exclude", emptySet())
fun defaultCategory() = prefs.getInt(Keys.defaultCategory, -1) fun defaultCategory() = prefs.getInt(Keys.defaultCategory, -1)
fun categorisedDisplaySettings() = flowPrefs.getBoolean(Keys.categorizedDisplay, false) fun categorizedDisplaySettings() = flowPrefs.getBoolean("categorized_display", false)
fun skipRead() = prefs.getBoolean(Keys.skipRead, false) fun skipRead() = prefs.getBoolean(Keys.skipRead, false)
@ -320,12 +327,12 @@ class PreferencesHelper(val context: Context) {
fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, Manga.CHAPTER_SORT_DESC) fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, Manga.CHAPTER_SORT_DESC)
fun incognitoMode() = flowPrefs.getBoolean(Keys.incognitoMode, false) fun incognitoMode() = flowPrefs.getBoolean("incognito_mode", false)
fun tabletUiMode() = flowPrefs.getEnum(Keys.tabletUiMode, Values.TabletUiMode.AUTOMATIC) fun tabletUiMode() = flowPrefs.getEnum("tablet_ui_mode", Values.TabletUiMode.AUTOMATIC)
fun extensionInstaller() = flowPrefs.getEnum( fun extensionInstaller() = flowPrefs.getEnum(
Keys.extensionInstaller, "extension_installer",
if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER
) )

View File

@ -67,8 +67,10 @@ open class ExtensionPresenter(
.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name })) .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name }))
val installedSorted = installed.filter { !it.hasUpdate && (showNsfwSources || !it.isNsfw) } val installedSorted = installed.filter { !it.hasUpdate && (showNsfwSources || !it.isNsfw) }
.sortedWith(compareBy<Extension.Installed> { !it.isObsolete } .sortedWith(
.thenBy(String.CASE_INSENSITIVE_ORDER) { it.name }) compareBy<Extension.Installed> { !it.isObsolete }
.thenBy(String.CASE_INSENSITIVE_ORDER) { it.name }
)
val untrustedSorted = untrusted.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name })) val untrustedSorted = untrusted.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name }))

View File

@ -49,7 +49,7 @@ class LibraryAdapter(
private var boundViews = arrayListOf<View>() private var boundViews = arrayListOf<View>()
private val isPerCategory by lazy { preferences.categorisedDisplaySettings().get() } private val isPerCategory by lazy { preferences.categorizedDisplaySettings().get() }
private var currentDisplayMode = preferences.libraryDisplayMode().get() private var currentDisplayMode = preferences.libraryDisplayMode().get()
init { init {

View File

@ -195,7 +195,7 @@ class LibraryController(
is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged() is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged()
is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged() is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged()
is LibrarySettingsSheet.Display.DisplayGroup -> { is LibrarySettingsSheet.Display.DisplayGroup -> {
val delay = if (preferences.categorisedDisplaySettings().get()) 125L else 0L val delay = if (preferences.categorizedDisplaySettings().get()) 125L else 0L
Observable.timer(delay, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread()) Observable.timer(delay, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.subscribe { .subscribe {

View File

@ -369,7 +369,7 @@ class LibraryPresenter(
*/ */
private fun getLibraryMangasObservable(): Observable<LibraryMap> { private fun getLibraryMangasObservable(): Observable<LibraryMap> {
val defaultLibraryDisplayMode = preferences.libraryDisplayMode() val defaultLibraryDisplayMode = preferences.libraryDisplayMode()
val shouldSetFromCategory = preferences.categorisedDisplaySettings() val shouldSetFromCategory = preferences.categorizedDisplaySettings()
return db.getLibraryMangas().asRxObservable() return db.getLibraryMangas().asRxObservable()
.map { list -> .map { list ->
list.map { libraryManga -> list.map { libraryManga ->

View File

@ -245,7 +245,7 @@ class LibrarySettingsSheet(
SortDirectionSetting.DESCENDING SortDirectionSetting.DESCENDING
} }
if (preferences.categorisedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { if (preferences.categorizedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) {
currentCategory?.sortDirection = flag.flag currentCategory?.sortDirection = flag.flag
db.insertCategory(currentCategory!!).executeAsBlocking() db.insertCategory(currentCategory!!).executeAsBlocking()
@ -267,7 +267,7 @@ class LibrarySettingsSheet(
else -> throw NotImplementedError("Unknown display mode") else -> throw NotImplementedError("Unknown display mode")
} }
if (preferences.categorisedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { if (preferences.categorizedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) {
currentCategory?.sortMode = flag.flag currentCategory?.sortMode = flag.flag
db.insertCategory(currentCategory!!).executeAsBlocking() db.insertCategory(currentCategory!!).executeAsBlocking()
@ -304,7 +304,7 @@ class LibrarySettingsSheet(
// Gets user preference of currently selected display mode at current category // Gets user preference of currently selected display mode at current category
private fun getDisplayModePreference(): DisplayModeSetting { private fun getDisplayModePreference(): DisplayModeSetting {
return if (preferences.categorisedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { return if (preferences.categorizedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) {
DisplayModeSetting.fromFlag(currentCategory?.displayMode) DisplayModeSetting.fromFlag(currentCategory?.displayMode)
} else { } else {
preferences.libraryDisplayMode().get() preferences.libraryDisplayMode().get()
@ -353,7 +353,7 @@ class LibrarySettingsSheet(
else -> throw NotImplementedError("Unknown display mode") else -> throw NotImplementedError("Unknown display mode")
} }
if (preferences.categorisedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { if (preferences.categorizedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) {
currentCategory?.displayMode = flag.flag currentCategory?.displayMode = flag.flag
db.insertCategory(currentCategory!!).executeAsBlocking() db.insertCategory(currentCategory!!).executeAsBlocking()

View File

@ -15,7 +15,7 @@ enum class SortDirectionSetting(val flag: Int) {
} }
fun get(preferences: PreferencesHelper, category: Category?): SortDirectionSetting { fun get(preferences: PreferencesHelper, category: Category?): SortDirectionSetting {
return if (preferences.categorisedDisplaySettings().get() && category != null && category.id != 0) { return if (preferences.categorizedDisplaySettings().get() && category != null && category.id != 0) {
fromFlag(category.sortDirection) fromFlag(category.sortDirection)
} else { } else {
preferences.librarySortingAscending().get() preferences.librarySortingAscending().get()

View File

@ -22,7 +22,7 @@ enum class SortModeSetting(val flag: Int) {
} }
fun get(preferences: PreferencesHelper, category: Category?): SortModeSetting { fun get(preferences: PreferencesHelper, category: Category?): SortModeSetting {
return if (preferences.categorisedDisplaySettings().get() && category != null && category.id != 0) { return if (preferences.categorizedDisplaySettings().get() && category != null && category.id != 0) {
fromFlag(category.sortMode) fromFlag(category.sortMode)
} else { } else {
preferences.librarySortingMode().get() preferences.librarySortingMode().get()

View File

@ -18,7 +18,7 @@ import eu.kanade.tachiyomi.ui.setting.SettingsBackupController
import eu.kanade.tachiyomi.ui.setting.SettingsController import eu.kanade.tachiyomi.ui.setting.SettingsController
import eu.kanade.tachiyomi.ui.setting.SettingsMainController import eu.kanade.tachiyomi.ui.setting.SettingsMainController
import eu.kanade.tachiyomi.util.preference.add import eu.kanade.tachiyomi.util.preference.add
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.iconRes import eu.kanade.tachiyomi.util.preference.iconRes
import eu.kanade.tachiyomi.util.preference.iconTint import eu.kanade.tachiyomi.util.preference.iconTint
import eu.kanade.tachiyomi.util.preference.onClick import eu.kanade.tachiyomi.util.preference.onClick
@ -36,7 +36,6 @@ import rx.Subscription
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.subscriptions.CompositeSubscription import rx.subscriptions.CompositeSubscription
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
class MoreController : class MoreController :
SettingsController(), SettingsController(),
@ -58,7 +57,7 @@ class MoreController :
add(MoreHeaderPreference(context)) add(MoreHeaderPreference(context))
switchPreference { switchPreference {
key = Keys.downloadedOnly bindTo(preferences.downloadedOnly())
titleRes = R.string.label_downloaded_only titleRes = R.string.label_downloaded_only
summaryRes = R.string.downloaded_only_summary summaryRes = R.string.downloaded_only_summary
iconRes = R.drawable.ic_cloud_off_24dp iconRes = R.drawable.ic_cloud_off_24dp
@ -66,12 +65,11 @@ class MoreController :
} }
switchPreference { switchPreference {
key = Keys.incognitoMode bindTo(preferences.incognitoMode())
summaryRes = R.string.pref_incognito_mode_summary summaryRes = R.string.pref_incognito_mode_summary
titleRes = R.string.pref_incognito_mode titleRes = R.string.pref_incognito_mode
iconRes = R.drawable.ic_glasses_24dp iconRes = R.drawable.ic_glasses_24dp
iconTint = tintColor iconTint = tintColor
defaultValue = false
preferences.incognitoMode().asFlow() preferences.incognitoMode().asFlow()
.onEach { isChecked = it } .onEach { isChecked = it }

View File

@ -76,7 +76,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr
private val threshold: Int = private val threshold: Int =
Injekt.get<PreferencesHelper>() Injekt.get<PreferencesHelper>()
.readerHideTreshold() .readerHideThreshold()
.get() .get()
.threshold .threshold

View File

@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.ui.setting.database.ClearDatabaseController
import eu.kanade.tachiyomi.util.CrashLogUtil import eu.kanade.tachiyomi.util.CrashLogUtil
import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.lang.withUIContext
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -35,7 +36,6 @@ import eu.kanade.tachiyomi.util.preference.preferenceCategory
import eu.kanade.tachiyomi.util.preference.summaryRes import eu.kanade.tachiyomi.util.preference.summaryRes
import eu.kanade.tachiyomi.util.preference.switchPreference import eu.kanade.tachiyomi.util.preference.switchPreference
import eu.kanade.tachiyomi.util.preference.titleRes import eu.kanade.tachiyomi.util.preference.titleRes
import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.isPackageInstalled import eu.kanade.tachiyomi.util.system.isPackageInstalled
import eu.kanade.tachiyomi.util.system.powerManager import eu.kanade.tachiyomi.util.system.powerManager
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
@ -206,7 +206,7 @@ class SettingsAdvancedController : SettingsController() {
titleRes = R.string.label_extensions titleRes = R.string.label_extensions
listPreference { listPreference {
key = Keys.extensionInstaller bindTo(preferences.extensionInstaller())
titleRes = R.string.ext_installer_pref titleRes = R.string.ext_installer_pref
summary = "%s" summary = "%s"
entriesRes = arrayOf( entriesRes = arrayOf(
@ -215,11 +215,6 @@ class SettingsAdvancedController : SettingsController() {
R.string.ext_installer_shizuku, R.string.ext_installer_shizuku,
) )
entryValues = PreferenceValues.ExtensionInstaller.values().map { it.name }.toTypedArray() entryValues = PreferenceValues.ExtensionInstaller.values().map { it.name }.toTypedArray()
defaultValue = if (DeviceUtil.isMiui) {
PreferenceValues.ExtensionInstaller.LEGACY
} else {
PreferenceValues.ExtensionInstaller.PACKAGEINSTALLER
}.name
onChange { onChange {
if (it == PreferenceValues.ExtensionInstaller.SHIZUKU.name && if (it == PreferenceValues.ExtensionInstaller.SHIZUKU.name &&
@ -245,12 +240,11 @@ class SettingsAdvancedController : SettingsController() {
titleRes = R.string.pref_category_display titleRes = R.string.pref_category_display
listPreference { listPreference {
key = Keys.tabletUiMode bindTo(preferences.tabletUiMode())
titleRes = R.string.pref_tablet_ui_mode titleRes = R.string.pref_tablet_ui_mode
summary = "%s" summary = "%s"
entriesRes = arrayOf(R.string.automatic_background, R.string.lock_always, R.string.landscape, R.string.lock_never) entriesRes = arrayOf(R.string.automatic_background, R.string.lock_always, R.string.landscape, R.string.lock_never)
entryValues = PreferenceValues.TabletUiMode.values().map { it.name }.toTypedArray() entryValues = PreferenceValues.TabletUiMode.values().map { it.name }.toTypedArray()
defaultValue = PreferenceValues.TabletUiMode.AUTOMATIC.name
onChange { onChange {
activity?.toast(R.string.requires_app_restart) activity?.toast(R.string.requires_app_restart)

View File

@ -7,6 +7,7 @@ import androidx.core.app.ActivityCompat
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.google.android.material.color.DynamicColors import com.google.android.material.color.DynamicColors
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.initThenAdd import eu.kanade.tachiyomi.util.preference.initThenAdd
@ -33,7 +34,7 @@ class SettingsAppearanceController : SettingsController() {
titleRes = R.string.pref_category_theme titleRes = R.string.pref_category_theme
listPreference { listPreference {
key = Keys.themeMode bindTo(preferences.themeMode())
titleRes = R.string.pref_theme_mode titleRes = R.string.pref_theme_mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@ -47,7 +48,6 @@ class SettingsAppearanceController : SettingsController() {
Values.ThemeMode.light.name, Values.ThemeMode.light.name,
Values.ThemeMode.dark.name Values.ThemeMode.dark.name
) )
defaultValue = Values.ThemeMode.system.name
} else { } else {
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.theme_light, R.string.theme_light,
@ -57,13 +57,12 @@ class SettingsAppearanceController : SettingsController() {
Values.ThemeMode.light.name, Values.ThemeMode.light.name,
Values.ThemeMode.dark.name Values.ThemeMode.dark.name
) )
defaultValue = Values.ThemeMode.light.name
} }
summary = "%s" summary = "%s"
} }
themesPreference = initThenAdd(ThemesPreference(context)) { themesPreference = initThenAdd(ThemesPreference(context)) {
key = Keys.appTheme bindTo(preferences.appTheme())
titleRes = R.string.pref_app_theme titleRes = R.string.pref_app_theme
val appThemes = Values.AppTheme.values().filter { val appThemes = Values.AppTheme.values().filter {
@ -75,7 +74,6 @@ class SettingsAppearanceController : SettingsController() {
it.titleResId != null && monetFilter it.titleResId != null && monetFilter
} }
entries = appThemes entries = appThemes
defaultValue = appThemes[0].name
onChange { onChange {
activity?.let { ActivityCompat.recreate(it) } activity?.let { ActivityCompat.recreate(it) }
@ -83,9 +81,8 @@ class SettingsAppearanceController : SettingsController() {
} }
} }
switchPreference { switchPreference {
key = Keys.themeDarkAmoled bindTo(preferences.themeDarkAmoled())
titleRes = R.string.pref_dark_theme_pure_black titleRes = R.string.pref_dark_theme_pure_black
defaultValue = false
visibleIf(preferences.themeMode()) { it != Values.ThemeMode.light } visibleIf(preferences.themeMode()) { it != Values.ThemeMode.light }
@ -101,7 +98,7 @@ class SettingsAppearanceController : SettingsController() {
if (context.isTablet()) { if (context.isTablet()) {
intListPreference { intListPreference {
key = Keys.sideNavIconAlignment bindTo(preferences.sideNavIconAlignment())
titleRes = R.string.pref_side_nav_icon_alignment titleRes = R.string.pref_side_nav_icon_alignment
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.alignment_top, R.string.alignment_top,
@ -109,14 +106,12 @@ class SettingsAppearanceController : SettingsController() {
R.string.alignment_bottom, R.string.alignment_bottom,
) )
entryValues = arrayOf("0", "1", "2") entryValues = arrayOf("0", "1", "2")
defaultValue = "0"
summary = "%s" summary = "%s"
} }
} else { } else {
switchPreference { switchPreference {
key = Keys.hideBottomBarOnScroll bindTo(preferences.hideBottomBarOnScroll())
titleRes = R.string.pref_hide_bottom_bar_on_scroll titleRes = R.string.pref_hide_bottom_bar_on_scroll
defaultValue = true
} }
} }
} }
@ -125,7 +120,7 @@ class SettingsAppearanceController : SettingsController() {
titleRes = R.string.pref_category_timestamps titleRes = R.string.pref_category_timestamps
intListPreference { intListPreference {
key = Keys.relativeTime bindTo(preferences.relativeTime())
titleRes = R.string.pref_relative_format titleRes = R.string.pref_relative_format
val values = arrayOf("0", "2", "7") val values = arrayOf("0", "2", "7")
entryValues = values entryValues = values
@ -136,7 +131,6 @@ class SettingsAppearanceController : SettingsController() {
else -> context.getString(R.string.pref_relative_time_long) else -> context.getString(R.string.pref_relative_time_long)
} }
}.toTypedArray() }.toTypedArray()
defaultValue = "7"
summary = "%s" summary = "%s"
} }

View File

@ -25,7 +25,7 @@ import eu.kanade.tachiyomi.data.backup.full.models.BackupFull
import eu.kanade.tachiyomi.data.backup.legacy.LegacyBackupRestoreValidator import eu.kanade.tachiyomi.data.backup.legacy.LegacyBackupRestoreValidator
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.infoPreference import eu.kanade.tachiyomi.util.preference.infoPreference
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -39,7 +39,6 @@ import eu.kanade.tachiyomi.util.system.DeviceUtil
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
class SettingsBackupController : SettingsController() { class SettingsBackupController : SettingsController() {
@ -103,7 +102,7 @@ class SettingsBackupController : SettingsController() {
titleRes = R.string.pref_backup_service_category titleRes = R.string.pref_backup_service_category
intListPreference { intListPreference {
key = Keys.backupInterval bindTo(preferences.backupInterval())
titleRes = R.string.pref_backup_interval titleRes = R.string.pref_backup_interval
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.update_never, R.string.update_never,
@ -114,7 +113,6 @@ class SettingsBackupController : SettingsController() {
R.string.update_weekly R.string.update_weekly
) )
entryValues = arrayOf("0", "6", "12", "24", "48", "168") entryValues = arrayOf("0", "6", "12", "24", "48", "168")
defaultValue = "0"
summary = "%s" summary = "%s"
onChange { newValue -> onChange { newValue ->
@ -124,7 +122,7 @@ class SettingsBackupController : SettingsController() {
} }
} }
preference { preference {
key = Keys.backupDirectory bindTo(preferences.backupsDirectory())
titleRes = R.string.pref_backup_directory titleRes = R.string.pref_backup_directory
onClick { onClick {
@ -146,11 +144,10 @@ class SettingsBackupController : SettingsController() {
.launchIn(viewScope) .launchIn(viewScope)
} }
intListPreference { intListPreference {
key = Keys.numberOfBackups bindTo(preferences.numberOfBackups())
titleRes = R.string.pref_backup_slots titleRes = R.string.pref_backup_slots
entries = arrayOf("1", "2", "3", "4", "5") entries = arrayOf("1", "2", "3", "4", "5")
entryValues = entries entryValues = entries
defaultValue = "1"
summary = "%s" summary = "%s"
visibleIf(preferences.backupInterval()) { it > 0 } visibleIf(preferences.backupInterval()) { it > 0 }

View File

@ -4,6 +4,7 @@ import androidx.fragment.app.FragmentActivity
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.infoPreference import eu.kanade.tachiyomi.util.preference.infoPreference
import eu.kanade.tachiyomi.util.preference.onChange import eu.kanade.tachiyomi.util.preference.onChange
@ -24,9 +25,8 @@ class SettingsBrowseController : SettingsController() {
titleRes = R.string.label_extensions titleRes = R.string.label_extensions
switchPreference { switchPreference {
key = Keys.automaticExtUpdates bindTo(preferences.automaticExtUpdates())
titleRes = R.string.pref_enable_automatic_extension_updates titleRes = R.string.pref_enable_automatic_extension_updates
defaultValue = true
onChange { newValue -> onChange { newValue ->
val checked = newValue as Boolean val checked = newValue as Boolean
@ -50,10 +50,9 @@ class SettingsBrowseController : SettingsController() {
titleRes = R.string.pref_category_nsfw_content titleRes = R.string.pref_category_nsfw_content
switchPreference { switchPreference {
key = Keys.showNsfwSource bindTo(preferences.showNsfwSource())
titleRes = R.string.pref_show_nsfw_source titleRes = R.string.pref_show_nsfw_source
summaryRes = R.string.requires_app_restart summaryRes = R.string.requires_app_restart
defaultValue = true
if (context.isAuthenticationSupported() && activity != null) { if (context.isAuthenticationSupported() && activity != null) {
requireAuthentication( requireAuthentication(

View File

@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -48,7 +49,7 @@ class SettingsDownloadController : SettingsController() {
val categories = listOf(Category.createDefault(context)) + dbCategories val categories = listOf(Category.createDefault(context)) + dbCategories
preference { preference {
key = Keys.downloadsDirectory bindTo(preferences.downloadsDirectory())
titleRes = R.string.pref_download_directory titleRes = R.string.pref_download_directory
onClick { onClick {
val ctrl = DownloadDirectoriesDialog() val ctrl = DownloadDirectoriesDialog()
@ -97,7 +98,7 @@ class SettingsDownloadController : SettingsController() {
defaultValue = false defaultValue = false
} }
multiSelectListPreference { multiSelectListPreference {
key = Keys.removeExcludeCategories bindTo(preferences.removeExcludeCategories())
titleRes = R.string.pref_remove_exclude_categories titleRes = R.string.pref_remove_exclude_categories
entries = categories.map { it.name }.toTypedArray() entries = categories.map { it.name }.toTypedArray()
entryValues = categories.map { it.id.toString() }.toTypedArray() entryValues = categories.map { it.id.toString() }.toTypedArray()
@ -121,12 +122,11 @@ class SettingsDownloadController : SettingsController() {
titleRes = R.string.pref_category_auto_download titleRes = R.string.pref_category_auto_download
switchPreference { switchPreference {
key = Keys.downloadNew bindTo(preferences.downloadNew())
titleRes = R.string.pref_download_new titleRes = R.string.pref_download_new
defaultValue = false
} }
preference { preference {
key = Keys.downloadNewCategories bindTo(preferences.downloadNewCategories())
titleRes = R.string.categories titleRes = R.string.categories
onClick { onClick {
DownloadCategoriesDialog().showDialog(router) DownloadCategoriesDialog().showDialog(router)

View File

@ -5,6 +5,7 @@ import android.os.Build
import android.provider.Settings import android.provider.Settings
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -33,9 +34,8 @@ class SettingsGeneralController : SettingsController() {
summary = "%s" summary = "%s"
} }
switchPreference { switchPreference {
key = Keys.showUpdatesNavBadge bindTo(preferences.showUpdatesNavBadge())
titleRes = R.string.pref_library_update_show_tab_badge titleRes = R.string.pref_library_update_show_tab_badge
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.confirmExit key = Keys.confirmExit

View File

@ -5,7 +5,6 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.text.buildSpannedString import androidx.core.text.buildSpannedString
import androidx.preference.Preference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
@ -22,6 +21,7 @@ import eu.kanade.tachiyomi.databinding.PrefLibraryColumnsBinding
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
import eu.kanade.tachiyomi.ui.category.CategoryController import eu.kanade.tachiyomi.ui.category.CategoryController
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -127,9 +127,8 @@ class SettingsLibraryController : SettingsController() {
} }
switchPreference { switchPreference {
key = Keys.categorizedDisplay bindTo(preferences.categorizedDisplaySettings())
titleRes = R.string.categorized_display_settings titleRes = R.string.categorized_display_settings
defaultValue = false
} }
} }
@ -137,7 +136,7 @@ class SettingsLibraryController : SettingsController() {
titleRes = R.string.pref_category_library_update titleRes = R.string.pref_category_library_update
intListPreference { intListPreference {
key = Keys.libraryUpdateInterval bindTo(preferences.libraryUpdateInterval())
titleRes = R.string.pref_library_update_interval titleRes = R.string.pref_library_update_interval
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.update_never, R.string.update_never,
@ -148,7 +147,6 @@ class SettingsLibraryController : SettingsController() {
R.string.update_weekly R.string.update_weekly
) )
entryValues = arrayOf("0", "12", "24", "48", "72", "168") entryValues = arrayOf("0", "12", "24", "48", "72", "168")
defaultValue = "24"
summary = "%s" summary = "%s"
onChange { newValue -> onChange { newValue ->
@ -158,13 +156,12 @@ class SettingsLibraryController : SettingsController() {
} }
} }
multiSelectListPreference { multiSelectListPreference {
key = Keys.libraryUpdateDeviceRestriction bindTo(preferences.libraryUpdateDeviceRestriction())
titleRes = R.string.pref_library_update_restriction titleRes = R.string.pref_library_update_restriction
entriesRes = arrayOf(R.string.connected_to_wifi, R.string.charging) entriesRes = arrayOf(R.string.connected_to_wifi, R.string.charging)
entryValues = arrayOf(DEVICE_ONLY_ON_WIFI, DEVICE_CHARGING) entryValues = arrayOf(DEVICE_ONLY_ON_WIFI, DEVICE_CHARGING)
defaultValue = preferences.libraryUpdateDeviceRestriction().defaultValue
visibleIfGlobalUpdateEnabled() visibleIf(preferences.libraryUpdateInterval()) { it > 0 }
onChange { onChange {
// Post to event looper to allow the preference to be updated. // Post to event looper to allow the preference to be updated.
@ -196,11 +193,10 @@ class SettingsLibraryController : SettingsController() {
.launchIn(viewScope) .launchIn(viewScope)
} }
multiSelectListPreference { multiSelectListPreference {
key = Keys.libraryUpdateMangaRestriction bindTo(preferences.libraryUpdateMangaRestriction())
titleRes = R.string.pref_library_update_manga_restriction titleRes = R.string.pref_library_update_manga_restriction
entriesRes = arrayOf(R.string.pref_update_only_completely_read, R.string.pref_update_only_non_completed) entriesRes = arrayOf(R.string.pref_update_only_completely_read, R.string.pref_update_only_non_completed)
entryValues = arrayOf(MANGA_FULLY_READ, MANGA_ONGOING) entryValues = arrayOf(MANGA_FULLY_READ, MANGA_ONGOING)
defaultValue = preferences.libraryUpdateMangaRestriction().defaultValue
fun updateSummary() { fun updateSummary() {
val restrictions = preferences.libraryUpdateMangaRestriction().get() val restrictions = preferences.libraryUpdateMangaRestriction().get()
@ -226,7 +222,7 @@ class SettingsLibraryController : SettingsController() {
.launchIn(viewScope) .launchIn(viewScope)
} }
preference { preference {
key = Keys.libraryUpdateCategories bindTo(preferences.libraryUpdateCategories())
titleRes = R.string.categories titleRes = R.string.categories
onClick { onClick {
@ -290,10 +286,6 @@ class SettingsLibraryController : SettingsController() {
} }
} }
private inline fun Preference.visibleIfGlobalUpdateEnabled() {
visibleIf(preferences.libraryUpdateInterval()) { it > 0 }
}
class LibraryColumnsDialog : DialogController() { class LibraryColumnsDialog : DialogController() {
private val preferences: PreferencesHelper = Injekt.get() private val preferences: PreferencesHelper = Injekt.get()

View File

@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
@ -39,11 +40,10 @@ class SettingsReaderController : SettingsController() {
summary = "%s" summary = "%s"
} }
intListPreference { intListPreference {
key = Keys.doubleTapAnimationSpeed bindTo(preferences.doubleTapAnimSpeed())
titleRes = R.string.pref_double_tap_anim_speed 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_normal), context.getString(R.string.double_tap_anim_speed_fast)) entries = arrayOf(context.getString(R.string.double_tap_anim_speed_0), context.getString(R.string.double_tap_anim_speed_normal), context.getString(R.string.double_tap_anim_speed_fast))
entryValues = arrayOf("1", "500", "250") // using a value of 0 breaks the image viewer, so min is 1 entryValues = arrayOf("1", "500", "250") // using a value of 0 breaks the image viewer, so min is 1
defaultValue = "500"
summary = "%s" summary = "%s"
} }
switchPreference { switchPreference {
@ -53,23 +53,20 @@ class SettingsReaderController : SettingsController() {
defaultValue = true defaultValue = true
} }
switchPreference { switchPreference {
key = Keys.showNavigationOverlayOnStart bindTo(preferences.showNavigationOverlayOnStart())
titleRes = R.string.pref_show_navigation_mode titleRes = R.string.pref_show_navigation_mode
summaryRes = R.string.pref_show_navigation_mode_summary summaryRes = R.string.pref_show_navigation_mode_summary
defaultValue = false
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
switchPreference { switchPreference {
key = Keys.trueColor bindTo(preferences.trueColor())
titleRes = R.string.pref_true_color titleRes = R.string.pref_true_color
summaryRes = R.string.pref_true_color_summary summaryRes = R.string.pref_true_color_summary
defaultValue = false
} }
} }
switchPreference { switchPreference {
key = Keys.enableTransitions bindTo(preferences.pageTransitions())
titleRes = R.string.pref_page_transitions titleRes = R.string.pref_page_transitions
defaultValue = true
} }
preferenceCategory { preferenceCategory {
@ -91,38 +88,33 @@ class SettingsReaderController : SettingsController() {
summary = "%s" summary = "%s"
} }
intListPreference { intListPreference {
key = Keys.readerTheme bindTo(preferences.readerTheme())
titleRes = R.string.pref_reader_theme titleRes = R.string.pref_reader_theme
entriesRes = arrayOf(R.string.black_background, R.string.gray_background, R.string.white_background, R.string.automatic_background) entriesRes = arrayOf(R.string.black_background, R.string.gray_background, R.string.white_background, R.string.automatic_background)
entryValues = arrayOf("1", "2", "0", "3") entryValues = arrayOf("1", "2", "0", "3")
defaultValue = "1"
summary = "%s" summary = "%s"
} }
switchPreference { switchPreference {
key = Keys.fullscreen bindTo(preferences.fullscreen())
titleRes = R.string.pref_fullscreen titleRes = R.string.pref_fullscreen
defaultValue = true
} }
if (activity?.hasDisplayCutout() == true) { if (activity?.hasDisplayCutout() == true) {
switchPreference { switchPreference {
key = Keys.cutoutShort bindTo(preferences.cutoutShort())
titleRes = R.string.pref_cutout_short titleRes = R.string.pref_cutout_short
defaultValue = true
visibleIf(preferences.fullscreen()) { it } visibleIf(preferences.fullscreen()) { it }
} }
} }
switchPreference { switchPreference {
key = Keys.keepScreenOn bindTo(preferences.keepScreenOn())
titleRes = R.string.pref_keep_screen_on titleRes = R.string.pref_keep_screen_on
defaultValue = true
} }
switchPreference { switchPreference {
key = Keys.showPageNumber bindTo(preferences.showPageNumber())
titleRes = R.string.pref_show_page_number titleRes = R.string.pref_show_page_number
defaultValue = true
} }
} }
@ -140,9 +132,8 @@ class SettingsReaderController : SettingsController() {
defaultValue = true defaultValue = true
} }
switchPreference { switchPreference {
key = Keys.alwaysShowChapterTransition bindTo(preferences.alwaysShowChapterTransition())
titleRes = R.string.pref_always_show_chapter_transition titleRes = R.string.pref_always_show_chapter_transition
defaultValue = true
} }
} }
@ -150,18 +141,17 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.pager_viewer titleRes = R.string.pager_viewer
intListPreference { intListPreference {
key = Keys.navigationModePager bindTo(preferences.navigationModePager())
titleRes = R.string.pref_viewer_nav titleRes = R.string.pref_viewer_nav
entries = context.resources.getStringArray(R.array.pager_nav).also { values -> entries = context.resources.getStringArray(R.array.pager_nav).also { values ->
entryValues = values.indices.map { index -> "$index" }.toTypedArray() entryValues = values.indices.map { index -> "$index" }.toTypedArray()
} }
defaultValue = "0"
summary = "%s" summary = "%s"
visibleIf(preferences.readWithTapping()) { it } visibleIf(preferences.readWithTapping()) { it }
} }
listPreference { listPreference {
key = Keys.pagerNavInverted bindTo(preferences.pagerNavInverted())
titleRes = R.string.pref_read_with_tapping_inverted titleRes = R.string.pref_read_with_tapping_inverted
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.tapping_inverted_none, R.string.tapping_inverted_none,
@ -175,13 +165,12 @@ class SettingsReaderController : SettingsController() {
TappingInvertMode.VERTICAL.name, TappingInvertMode.VERTICAL.name,
TappingInvertMode.BOTH.name TappingInvertMode.BOTH.name
) )
defaultValue = TappingInvertMode.NONE.name
summary = "%s" summary = "%s"
visibleIf(preferences.readWithTapping()) { it } visibleIf(preferences.readWithTapping()) { it }
} }
intListPreference { intListPreference {
key = Keys.imageScaleType bindTo(preferences.imageScaleType())
titleRes = R.string.pref_image_scale_type titleRes = R.string.pref_image_scale_type
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.scale_type_fit_screen, R.string.scale_type_fit_screen,
@ -192,11 +181,10 @@ class SettingsReaderController : SettingsController() {
R.string.scale_type_smart_fit R.string.scale_type_smart_fit
) )
entryValues = arrayOf("1", "2", "3", "4", "5", "6") entryValues = arrayOf("1", "2", "3", "4", "5", "6")
defaultValue = "1"
summary = "%s" summary = "%s"
} }
intListPreference { intListPreference {
key = Keys.zoomStart bindTo(preferences.zoomStart())
titleRes = R.string.pref_zoom_start titleRes = R.string.pref_zoom_start
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.zoom_start_automatic, R.string.zoom_start_automatic,
@ -205,24 +193,20 @@ class SettingsReaderController : SettingsController() {
R.string.zoom_start_center R.string.zoom_start_center
) )
entryValues = arrayOf("1", "2", "3", "4") entryValues = arrayOf("1", "2", "3", "4")
defaultValue = "1"
summary = "%s" summary = "%s"
} }
switchPreference { switchPreference {
key = Keys.cropBorders bindTo(preferences.cropBorders())
titleRes = R.string.pref_crop_borders titleRes = R.string.pref_crop_borders
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.dualPageSplitPaged bindTo(preferences.dualPageSplitPaged())
titleRes = R.string.pref_dual_page_split titleRes = R.string.pref_dual_page_split
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.dualPageInvertPaged bindTo(preferences.dualPageInvertPaged())
titleRes = R.string.pref_dual_page_invert titleRes = R.string.pref_dual_page_invert
summaryRes = R.string.pref_dual_page_invert_summary summaryRes = R.string.pref_dual_page_invert_summary
defaultValue = false
visibleIf(preferences.dualPageSplitPaged()) { it } visibleIf(preferences.dualPageSplitPaged()) { it }
} }
} }
@ -231,18 +215,16 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.webtoon_viewer titleRes = R.string.webtoon_viewer
intListPreference { intListPreference {
key = Keys.navigationModeWebtoon bindTo(preferences.navigationModeWebtoon())
titleRes = R.string.pref_viewer_nav titleRes = R.string.pref_viewer_nav
entries = context.resources.getStringArray(R.array.webtoon_nav).also { values -> entries = context.resources.getStringArray(R.array.webtoon_nav).also { values ->
entryValues = values.indices.map { index -> "$index" }.toTypedArray() entryValues = values.indices.map { index -> "$index" }.toTypedArray()
} }
defaultValue = "0"
summary = "%s" summary = "%s"
visibleIf(preferences.readWithTapping()) { it } visibleIf(preferences.readWithTapping()) { it }
} }
listPreference { listPreference {
key = Keys.webtoonNavInverted bindTo(preferences.webtoonNavInverted())
titleRes = R.string.pref_read_with_tapping_inverted titleRes = R.string.pref_read_with_tapping_inverted
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.tapping_inverted_none, R.string.tapping_inverted_none,
@ -256,13 +238,12 @@ class SettingsReaderController : SettingsController() {
TappingInvertMode.VERTICAL.name, TappingInvertMode.VERTICAL.name,
TappingInvertMode.BOTH.name TappingInvertMode.BOTH.name
) )
defaultValue = TappingInvertMode.NONE.name
summary = "%s" summary = "%s"
visibleIf(preferences.readWithTapping()) { it } visibleIf(preferences.readWithTapping()) { it }
} }
intListPreference { intListPreference {
key = Keys.webtoonSidePadding bindTo(preferences.webtoonSidePadding())
titleRes = R.string.pref_webtoon_side_padding titleRes = R.string.pref_webtoon_side_padding
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.webtoon_side_padding_0, R.string.webtoon_side_padding_0,
@ -272,11 +253,10 @@ class SettingsReaderController : SettingsController() {
R.string.webtoon_side_padding_25 R.string.webtoon_side_padding_25
) )
entryValues = arrayOf("0", "10", "15", "20", "25") entryValues = arrayOf("0", "10", "15", "20", "25")
defaultValue = "0"
summary = "%s" summary = "%s"
} }
listPreference { listPreference {
key = Keys.readerHideThreshold bindTo(preferences.readerHideThreshold())
titleRes = R.string.pref_hide_threshold titleRes = R.string.pref_hide_threshold
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.pref_highest, R.string.pref_highest,
@ -287,24 +267,20 @@ class SettingsReaderController : SettingsController() {
entryValues = PreferenceValues.ReaderHideThreshold.values() entryValues = PreferenceValues.ReaderHideThreshold.values()
.map { it.name } .map { it.name }
.toTypedArray() .toTypedArray()
defaultValue = "${PreferenceValues.ReaderHideThreshold.LOW}"
summary = "%s" summary = "%s"
} }
switchPreference { switchPreference {
key = Keys.cropBordersWebtoon bindTo(preferences.cropBordersWebtoon())
titleRes = R.string.pref_crop_borders titleRes = R.string.pref_crop_borders
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.dualPageSplitWebtoon bindTo(preferences.dualPageSplitWebtoon())
titleRes = R.string.pref_dual_page_split titleRes = R.string.pref_dual_page_split
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.dualPageInvertWebtoon bindTo(preferences.dualPageInvertWebtoon())
titleRes = R.string.pref_dual_page_invert titleRes = R.string.pref_dual_page_invert
summaryRes = R.string.pref_dual_page_invert_summary summaryRes = R.string.pref_dual_page_invert_summary
defaultValue = false
visibleIf(preferences.dualPageSplitWebtoon()) { it } visibleIf(preferences.dualPageSplitWebtoon()) { it }
} }
} }
@ -313,19 +289,16 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.pref_reader_navigation titleRes = R.string.pref_reader_navigation
switchPreference { switchPreference {
key = Keys.readWithTapping bindTo(preferences.readWithTapping())
titleRes = R.string.pref_read_with_tapping titleRes = R.string.pref_read_with_tapping
defaultValue = true
} }
switchPreference { switchPreference {
key = Keys.readWithVolumeKeys bindTo(preferences.readWithVolumeKeys())
titleRes = R.string.pref_read_with_volume_keys titleRes = R.string.pref_read_with_volume_keys
defaultValue = false
} }
switchPreference { switchPreference {
key = Keys.readWithVolumeKeysInverted bindTo(preferences.readWithVolumeKeysInverted())
titleRes = R.string.pref_read_with_volume_keys_inverted titleRes = R.string.pref_read_with_volume_keys_inverted
defaultValue = false
visibleIf(preferences.readWithVolumeKeys()) { it } visibleIf(preferences.readWithVolumeKeys()) { it }
} }
} }
@ -334,9 +307,8 @@ class SettingsReaderController : SettingsController() {
titleRes = R.string.pref_reader_actions titleRes = R.string.pref_reader_actions
switchPreference { switchPreference {
key = Keys.readWithLongTap bindTo(preferences.readWithLongTap())
titleRes = R.string.pref_read_with_long_tap titleRes = R.string.pref_read_with_long_tap
defaultValue = true
} }
switchPreference { switchPreference {
key = Keys.folderPerManga key = Keys.folderPerManga

View File

@ -5,6 +5,7 @@ import androidx.fragment.app.FragmentActivity
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.intListPreference import eu.kanade.tachiyomi.util.preference.intListPreference
import eu.kanade.tachiyomi.util.preference.requireAuthentication import eu.kanade.tachiyomi.util.preference.requireAuthentication
@ -24,9 +25,8 @@ class SettingsSecurityController : SettingsController() {
if (context.isAuthenticationSupported()) { if (context.isAuthenticationSupported()) {
switchPreference { switchPreference {
key = Keys.useAuthenticator bindTo(preferences.useAuthenticator())
titleRes = R.string.lock_with_biometrics titleRes = R.string.lock_with_biometrics
defaultValue = false
requireAuthentication( requireAuthentication(
activity as? FragmentActivity, activity as? FragmentActivity,
@ -36,7 +36,7 @@ class SettingsSecurityController : SettingsController() {
} }
intListPreference { intListPreference {
key = Keys.lockAppAfter bindTo(preferences.lockAppAfter())
titleRes = R.string.lock_when_idle titleRes = R.string.lock_when_idle
val values = arrayOf("0", "1", "2", "5", "10", "-1") val values = arrayOf("0", "1", "2", "5", "10", "-1")
entries = values.mapNotNull { entries = values.mapNotNull {
@ -47,7 +47,6 @@ class SettingsSecurityController : SettingsController() {
} }
}.toTypedArray() }.toTypedArray()
entryValues = values entryValues = values
defaultValue = "0"
summary = "%s" summary = "%s"
onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
if (value == newValue) return@OnPreferenceChangeListener false if (value == newValue) return@OnPreferenceChangeListener false
@ -82,10 +81,9 @@ class SettingsSecurityController : SettingsController() {
} }
switchPreference { switchPreference {
key = Keys.secureScreen bindTo(preferences.secureScreen())
titleRes = R.string.secure_screen titleRes = R.string.secure_screen
summaryRes = R.string.secure_screen_summary summaryRes = R.string.secure_screen_summary
defaultValue = false
} }
switchPreference { switchPreference {

View File

@ -123,6 +123,11 @@ inline fun <P : Preference> PreferenceGroup.addThenInit(p: P, block: P.() -> Uni
} }
} }
inline fun <T> Preference.bindTo(preference: com.tfcporciuncula.flow.Preference<T>) {
key = preference.key
defaultValue = preference.defaultValue
}
inline fun Preference.onClick(crossinline block: () -> Unit) { inline fun Preference.onClick(crossinline block: () -> Unit) {
setOnPreferenceClickListener { block(); true } setOnPreferenceClickListener { block(); true }
} }