mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	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:
		| @@ -5,140 +5,28 @@ package eu.kanade.tachiyomi.data.preference | ||||
|  */ | ||||
| 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 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 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 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 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 folderPerManga = "create_folder_per_manga" | ||||
|  | ||||
|     const val numberOfBackups = "backup_slots" | ||||
|  | ||||
|     const val backupInterval = "backup_interval" | ||||
|  | ||||
|     const val removeAfterReadSlots = "remove_after_read_slots" | ||||
|  | ||||
|     const val removeAfterMarkedAsRead = "pref_remove_after_marked_as_read_key" | ||||
|  | ||||
|     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 filterUnread = "pref_filter_library_unread" | ||||
| @@ -153,59 +41,22 @@ object PreferenceKeys { | ||||
|     const val migrationSortingMode = "pref_migration_sorting" | ||||
|     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 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 autoUpdateMetadata = "auto_update_metadata" | ||||
|  | ||||
|     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 defaultCategory = "default_category" | ||||
|  | ||||
|     const val categorizedDisplay = "categorized_display" | ||||
|  | ||||
|     const val skipRead = "skip_read" | ||||
|  | ||||
|     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 dohProvider = "doh_provider" | ||||
| @@ -222,12 +73,6 @@ object PreferenceKeys { | ||||
|  | ||||
|     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 autoClearChapterCache = "auto_clear_chapter_cache" | ||||
|   | ||||
| @@ -1,15 +1,16 @@ | ||||
| package eu.kanade.tachiyomi.data.preference | ||||
|  | ||||
| import android.content.Context | ||||
| import android.os.Build | ||||
| import android.os.Environment | ||||
| import androidx.core.content.edit | ||||
| import androidx.core.net.toUri | ||||
| import androidx.preference.PreferenceManager | ||||
| import com.google.android.material.color.DynamicColors | ||||
| import com.tfcporciuncula.flow.FlowSharedPreferences | ||||
| import com.tfcporciuncula.flow.Preference | ||||
| import eu.kanade.tachiyomi.R | ||||
| 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.anilist.Anilist | ||||
| 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 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) | ||||
|  | ||||
| @@ -87,107 +88,113 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     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 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 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 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 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), "") | ||||
|  | ||||
| @@ -204,24 +211,24 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     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) { | ||||
|         "" -> DateFormat.getDateInstance(DateFormat.SHORT) | ||||
|         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 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) | ||||
|  | ||||
| @@ -229,34 +236,34 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     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 libraryUpdateMangaRestriction() = flowPrefs.getStringSet(Keys.libraryUpdateMangaRestriction, setOf(MANGA_FULLY_READ, MANGA_ONGOING)) | ||||
|     fun libraryUpdateDeviceRestriction() = flowPrefs.getStringSet("library_update_restriction", setOf(DEVICE_ONLY_ON_WIFI)) | ||||
|     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 libraryUpdateCategories() = flowPrefs.getStringSet(Keys.libraryUpdateCategories, emptySet()) | ||||
|     fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet(Keys.libraryUpdateCategoriesExclude, emptySet()) | ||||
|     fun libraryUpdateCategories() = flowPrefs.getStringSet("library_update_categories", 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) | ||||
|  | ||||
| @@ -272,9 +279,9 @@ class PreferencesHelper(val context: Context) { | ||||
|     fun migrationSortingMode() = flowPrefs.getEnum(Keys.migrationSortingMode, MigrationSourcesController.SortSetting.ALPHABETICAL) | ||||
|     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) | ||||
|  | ||||
| @@ -287,14 +294,14 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     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 downloadNewCategoriesExclude() = flowPrefs.getStringSet(Keys.downloadNewCategoriesExclude, emptySet()) | ||||
|     fun downloadNewCategories() = flowPrefs.getStringSet("download_new_categories", emptySet()) | ||||
|     fun downloadNewCategoriesExclude() = flowPrefs.getStringSet("download_new_categories_exclude", emptySet()) | ||||
|  | ||||
|     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) | ||||
|  | ||||
| @@ -320,12 +327,12 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     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( | ||||
|         Keys.extensionInstaller, | ||||
|         "extension_installer", | ||||
|         if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER | ||||
|     ) | ||||
|  | ||||
|   | ||||
| @@ -67,8 +67,10 @@ open class ExtensionPresenter( | ||||
|             .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name })) | ||||
|  | ||||
|         val installedSorted = installed.filter { !it.hasUpdate && (showNsfwSources || !it.isNsfw) } | ||||
|             .sortedWith(compareBy<Extension.Installed> { !it.isObsolete } | ||||
|                 .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name }) | ||||
|             .sortedWith( | ||||
|                 compareBy<Extension.Installed> { !it.isObsolete } | ||||
|                     .thenBy(String.CASE_INSENSITIVE_ORDER) { it.name } | ||||
|             ) | ||||
|  | ||||
|         val untrustedSorted = untrusted.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name })) | ||||
|  | ||||
|   | ||||
| @@ -49,7 +49,7 @@ class LibraryAdapter( | ||||
|  | ||||
|     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() | ||||
|  | ||||
|     init { | ||||
|   | ||||
| @@ -195,7 +195,7 @@ class LibraryController( | ||||
|                 is LibrarySettingsSheet.Filter.FilterGroup -> onFilterChanged() | ||||
|                 is LibrarySettingsSheet.Sort.SortGroup -> onSortChanged() | ||||
|                 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()) | ||||
|                         .subscribe { | ||||
|   | ||||
| @@ -369,7 +369,7 @@ class LibraryPresenter( | ||||
|      */ | ||||
|     private fun getLibraryMangasObservable(): Observable<LibraryMap> { | ||||
|         val defaultLibraryDisplayMode = preferences.libraryDisplayMode() | ||||
|         val shouldSetFromCategory = preferences.categorisedDisplaySettings() | ||||
|         val shouldSetFromCategory = preferences.categorizedDisplaySettings() | ||||
|         return db.getLibraryMangas().asRxObservable() | ||||
|             .map { list -> | ||||
|                 list.map { libraryManga -> | ||||
|   | ||||
| @@ -245,7 +245,7 @@ class LibrarySettingsSheet( | ||||
|                     SortDirectionSetting.DESCENDING | ||||
|                 } | ||||
|  | ||||
|                 if (preferences.categorisedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { | ||||
|                 if (preferences.categorizedDisplaySettings().get() && currentCategory != null && currentCategory?.id != 0) { | ||||
|                     currentCategory?.sortDirection = flag.flag | ||||
|  | ||||
|                     db.insertCategory(currentCategory!!).executeAsBlocking() | ||||
| @@ -267,7 +267,7 @@ class LibrarySettingsSheet( | ||||
|                     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 | ||||
|  | ||||
|                     db.insertCategory(currentCategory!!).executeAsBlocking() | ||||
| @@ -304,7 +304,7 @@ class LibrarySettingsSheet( | ||||
|  | ||||
|         // Gets user preference of currently selected display mode at current category | ||||
|         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) | ||||
|             } else { | ||||
|                 preferences.libraryDisplayMode().get() | ||||
| @@ -353,7 +353,7 @@ class LibrarySettingsSheet( | ||||
|                     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 | ||||
|  | ||||
|                     db.insertCategory(currentCategory!!).executeAsBlocking() | ||||
|   | ||||
| @@ -15,7 +15,7 @@ enum class SortDirectionSetting(val flag: Int) { | ||||
|         } | ||||
|  | ||||
|         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) | ||||
|             } else { | ||||
|                 preferences.librarySortingAscending().get() | ||||
|   | ||||
| @@ -22,7 +22,7 @@ enum class SortModeSetting(val flag: Int) { | ||||
|         } | ||||
|  | ||||
|         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) | ||||
|             } else { | ||||
|                 preferences.librarySortingMode().get() | ||||
|   | ||||
| @@ -18,7 +18,7 @@ import eu.kanade.tachiyomi.ui.setting.SettingsBackupController | ||||
| import eu.kanade.tachiyomi.ui.setting.SettingsController | ||||
| import eu.kanade.tachiyomi.ui.setting.SettingsMainController | ||||
| 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.iconTint | ||||
| import eu.kanade.tachiyomi.util.preference.onClick | ||||
| @@ -36,7 +36,6 @@ import rx.Subscription | ||||
| import rx.android.schedulers.AndroidSchedulers | ||||
| import rx.subscriptions.CompositeSubscription | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
|  | ||||
| class MoreController : | ||||
|     SettingsController(), | ||||
| @@ -58,7 +57,7 @@ class MoreController : | ||||
|         add(MoreHeaderPreference(context)) | ||||
|  | ||||
|         switchPreference { | ||||
|             key = Keys.downloadedOnly | ||||
|             bindTo(preferences.downloadedOnly()) | ||||
|             titleRes = R.string.label_downloaded_only | ||||
|             summaryRes = R.string.downloaded_only_summary | ||||
|             iconRes = R.drawable.ic_cloud_off_24dp | ||||
| @@ -66,12 +65,11 @@ class MoreController : | ||||
|         } | ||||
|  | ||||
|         switchPreference { | ||||
|             key = Keys.incognitoMode | ||||
|             bindTo(preferences.incognitoMode()) | ||||
|             summaryRes = R.string.pref_incognito_mode_summary | ||||
|             titleRes = R.string.pref_incognito_mode | ||||
|             iconRes = R.drawable.ic_glasses_24dp | ||||
|             iconTint = tintColor | ||||
|             defaultValue = false | ||||
|  | ||||
|             preferences.incognitoMode().asFlow() | ||||
|                 .onEach { isChecked = it } | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class WebtoonViewer(val activity: ReaderActivity, val isContinuous: Boolean = tr | ||||
|  | ||||
|     private val threshold: Int = | ||||
|         Injekt.get<PreferencesHelper>() | ||||
|             .readerHideTreshold() | ||||
|             .readerHideThreshold() | ||||
|             .get() | ||||
|             .threshold | ||||
|  | ||||
|   | ||||
| @@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.ui.setting.database.ClearDatabaseController | ||||
| import eu.kanade.tachiyomi.util.CrashLogUtil | ||||
| import eu.kanade.tachiyomi.util.lang.launchIO | ||||
| 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.entriesRes | ||||
| 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.switchPreference | ||||
| 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.powerManager | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| @@ -206,7 +206,7 @@ class SettingsAdvancedController : SettingsController() { | ||||
|             titleRes = R.string.label_extensions | ||||
|  | ||||
|             listPreference { | ||||
|                 key = Keys.extensionInstaller | ||||
|                 bindTo(preferences.extensionInstaller()) | ||||
|                 titleRes = R.string.ext_installer_pref | ||||
|                 summary = "%s" | ||||
|                 entriesRes = arrayOf( | ||||
| @@ -215,11 +215,6 @@ class SettingsAdvancedController : SettingsController() { | ||||
|                     R.string.ext_installer_shizuku, | ||||
|                 ) | ||||
|                 entryValues = PreferenceValues.ExtensionInstaller.values().map { it.name }.toTypedArray() | ||||
|                 defaultValue = if (DeviceUtil.isMiui) { | ||||
|                     PreferenceValues.ExtensionInstaller.LEGACY | ||||
|                 } else { | ||||
|                     PreferenceValues.ExtensionInstaller.PACKAGEINSTALLER | ||||
|                 }.name | ||||
|  | ||||
|                 onChange { | ||||
|                     if (it == PreferenceValues.ExtensionInstaller.SHIZUKU.name && | ||||
| @@ -245,12 +240,11 @@ class SettingsAdvancedController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_display | ||||
|  | ||||
|             listPreference { | ||||
|                 key = Keys.tabletUiMode | ||||
|                 bindTo(preferences.tabletUiMode()) | ||||
|                 titleRes = R.string.pref_tablet_ui_mode | ||||
|                 summary = "%s" | ||||
|                 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() | ||||
|                 defaultValue = PreferenceValues.TabletUiMode.AUTOMATIC.name | ||||
|  | ||||
|                 onChange { | ||||
|                     activity?.toast(R.string.requires_app_restart) | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import androidx.core.app.ActivityCompat | ||||
| import androidx.preference.PreferenceScreen | ||||
| import com.google.android.material.color.DynamicColors | ||||
| 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.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.initThenAdd | ||||
| @@ -33,7 +34,7 @@ class SettingsAppearanceController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_theme | ||||
|  | ||||
|             listPreference { | ||||
|                 key = Keys.themeMode | ||||
|                 bindTo(preferences.themeMode()) | ||||
|                 titleRes = R.string.pref_theme_mode | ||||
|  | ||||
|                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
| @@ -47,7 +48,6 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                         Values.ThemeMode.light.name, | ||||
|                         Values.ThemeMode.dark.name | ||||
|                     ) | ||||
|                     defaultValue = Values.ThemeMode.system.name | ||||
|                 } else { | ||||
|                     entriesRes = arrayOf( | ||||
|                         R.string.theme_light, | ||||
| @@ -57,13 +57,12 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                         Values.ThemeMode.light.name, | ||||
|                         Values.ThemeMode.dark.name | ||||
|                     ) | ||||
|                     defaultValue = Values.ThemeMode.light.name | ||||
|                 } | ||||
|  | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             themesPreference = initThenAdd(ThemesPreference(context)) { | ||||
|                 key = Keys.appTheme | ||||
|                 bindTo(preferences.appTheme()) | ||||
|                 titleRes = R.string.pref_app_theme | ||||
|  | ||||
|                 val appThemes = Values.AppTheme.values().filter { | ||||
| @@ -75,7 +74,6 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                     it.titleResId != null && monetFilter | ||||
|                 } | ||||
|                 entries = appThemes | ||||
|                 defaultValue = appThemes[0].name | ||||
|  | ||||
|                 onChange { | ||||
|                     activity?.let { ActivityCompat.recreate(it) } | ||||
| @@ -83,9 +81,8 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                 } | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.themeDarkAmoled | ||||
|                 bindTo(preferences.themeDarkAmoled()) | ||||
|                 titleRes = R.string.pref_dark_theme_pure_black | ||||
|                 defaultValue = false | ||||
|  | ||||
|                 visibleIf(preferences.themeMode()) { it != Values.ThemeMode.light } | ||||
|  | ||||
| @@ -101,7 +98,7 @@ class SettingsAppearanceController : SettingsController() { | ||||
|  | ||||
|             if (context.isTablet()) { | ||||
|                 intListPreference { | ||||
|                     key = Keys.sideNavIconAlignment | ||||
|                     bindTo(preferences.sideNavIconAlignment()) | ||||
|                     titleRes = R.string.pref_side_nav_icon_alignment | ||||
|                     entriesRes = arrayOf( | ||||
|                         R.string.alignment_top, | ||||
| @@ -109,14 +106,12 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                         R.string.alignment_bottom, | ||||
|                     ) | ||||
|                     entryValues = arrayOf("0", "1", "2") | ||||
|                     defaultValue = "0" | ||||
|                     summary = "%s" | ||||
|                 } | ||||
|             } else { | ||||
|                 switchPreference { | ||||
|                     key = Keys.hideBottomBarOnScroll | ||||
|                     bindTo(preferences.hideBottomBarOnScroll()) | ||||
|                     titleRes = R.string.pref_hide_bottom_bar_on_scroll | ||||
|                     defaultValue = true | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -125,7 +120,7 @@ class SettingsAppearanceController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_timestamps | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.relativeTime | ||||
|                 bindTo(preferences.relativeTime()) | ||||
|                 titleRes = R.string.pref_relative_format | ||||
|                 val values = arrayOf("0", "2", "7") | ||||
|                 entryValues = values | ||||
| @@ -136,7 +131,6 @@ class SettingsAppearanceController : SettingsController() { | ||||
|                         else -> context.getString(R.string.pref_relative_time_long) | ||||
|                     } | ||||
|                 }.toTypedArray() | ||||
|                 defaultValue = "7" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -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.ui.base.controller.DialogController | ||||
| 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.infoPreference | ||||
| 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 kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
|  | ||||
| class SettingsBackupController : SettingsController() { | ||||
|  | ||||
| @@ -103,7 +102,7 @@ class SettingsBackupController : SettingsController() { | ||||
|             titleRes = R.string.pref_backup_service_category | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.backupInterval | ||||
|                 bindTo(preferences.backupInterval()) | ||||
|                 titleRes = R.string.pref_backup_interval | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.update_never, | ||||
| @@ -114,7 +113,6 @@ class SettingsBackupController : SettingsController() { | ||||
|                     R.string.update_weekly | ||||
|                 ) | ||||
|                 entryValues = arrayOf("0", "6", "12", "24", "48", "168") | ||||
|                 defaultValue = "0" | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 onChange { newValue -> | ||||
| @@ -124,7 +122,7 @@ class SettingsBackupController : SettingsController() { | ||||
|                 } | ||||
|             } | ||||
|             preference { | ||||
|                 key = Keys.backupDirectory | ||||
|                 bindTo(preferences.backupsDirectory()) | ||||
|                 titleRes = R.string.pref_backup_directory | ||||
|  | ||||
|                 onClick { | ||||
| @@ -146,11 +144,10 @@ class SettingsBackupController : SettingsController() { | ||||
|                     .launchIn(viewScope) | ||||
|             } | ||||
|             intListPreference { | ||||
|                 key = Keys.numberOfBackups | ||||
|                 bindTo(preferences.numberOfBackups()) | ||||
|                 titleRes = R.string.pref_backup_slots | ||||
|                 entries = arrayOf("1", "2", "3", "4", "5") | ||||
|                 entryValues = entries | ||||
|                 defaultValue = "1" | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 visibleIf(preferences.backupInterval()) { it > 0 } | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import androidx.fragment.app.FragmentActivity | ||||
| import androidx.preference.PreferenceScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| 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.infoPreference | ||||
| import eu.kanade.tachiyomi.util.preference.onChange | ||||
| @@ -24,9 +25,8 @@ class SettingsBrowseController : SettingsController() { | ||||
|             titleRes = R.string.label_extensions | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.automaticExtUpdates | ||||
|                 bindTo(preferences.automaticExtUpdates()) | ||||
|                 titleRes = R.string.pref_enable_automatic_extension_updates | ||||
|                 defaultValue = true | ||||
|  | ||||
|                 onChange { newValue -> | ||||
|                     val checked = newValue as Boolean | ||||
| @@ -50,10 +50,9 @@ class SettingsBrowseController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_nsfw_content | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.showNsfwSource | ||||
|                 bindTo(preferences.showNsfwSource()) | ||||
|                 titleRes = R.string.pref_show_nsfw_source | ||||
|                 summaryRes = R.string.requires_app_restart | ||||
|                 defaultValue = true | ||||
|  | ||||
|                 if (context.isAuthenticationSupported() && activity != null) { | ||||
|                     requireAuthentication( | ||||
|   | ||||
| @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper | ||||
| import eu.kanade.tachiyomi.data.database.models.Category | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| 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.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.intListPreference | ||||
| @@ -48,7 +49,7 @@ class SettingsDownloadController : SettingsController() { | ||||
|         val categories = listOf(Category.createDefault(context)) + dbCategories | ||||
|  | ||||
|         preference { | ||||
|             key = Keys.downloadsDirectory | ||||
|             bindTo(preferences.downloadsDirectory()) | ||||
|             titleRes = R.string.pref_download_directory | ||||
|             onClick { | ||||
|                 val ctrl = DownloadDirectoriesDialog() | ||||
| @@ -97,7 +98,7 @@ class SettingsDownloadController : SettingsController() { | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             multiSelectListPreference { | ||||
|                 key = Keys.removeExcludeCategories | ||||
|                 bindTo(preferences.removeExcludeCategories()) | ||||
|                 titleRes = R.string.pref_remove_exclude_categories | ||||
|                 entries = categories.map { it.name }.toTypedArray() | ||||
|                 entryValues = categories.map { it.id.toString() }.toTypedArray() | ||||
| @@ -121,12 +122,11 @@ class SettingsDownloadController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_auto_download | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.downloadNew | ||||
|                 bindTo(preferences.downloadNew()) | ||||
|                 titleRes = R.string.pref_download_new | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             preference { | ||||
|                 key = Keys.downloadNewCategories | ||||
|                 bindTo(preferences.downloadNewCategories()) | ||||
|                 titleRes = R.string.categories | ||||
|                 onClick { | ||||
|                     DownloadCategoriesDialog().showDialog(router) | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import android.os.Build | ||||
| import android.provider.Settings | ||||
| import androidx.preference.PreferenceScreen | ||||
| 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.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.intListPreference | ||||
| @@ -33,9 +34,8 @@ class SettingsGeneralController : SettingsController() { | ||||
|             summary = "%s" | ||||
|         } | ||||
|         switchPreference { | ||||
|             key = Keys.showUpdatesNavBadge | ||||
|             bindTo(preferences.showUpdatesNavBadge()) | ||||
|             titleRes = R.string.pref_library_update_show_tab_badge | ||||
|             defaultValue = false | ||||
|         } | ||||
|         switchPreference { | ||||
|             key = Keys.confirmExit | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import android.os.Bundle | ||||
| import android.view.LayoutInflater | ||||
| import androidx.core.content.ContextCompat | ||||
| import androidx.core.text.buildSpannedString | ||||
| import androidx.preference.Preference | ||||
| import androidx.preference.PreferenceScreen | ||||
| import com.google.android.material.dialog.MaterialAlertDialogBuilder | ||||
| 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.withFadeTransaction | ||||
| 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.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.intListPreference | ||||
| @@ -127,9 +127,8 @@ class SettingsLibraryController : SettingsController() { | ||||
|             } | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.categorizedDisplay | ||||
|                 bindTo(preferences.categorizedDisplaySettings()) | ||||
|                 titleRes = R.string.categorized_display_settings | ||||
|                 defaultValue = false | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -137,7 +136,7 @@ class SettingsLibraryController : SettingsController() { | ||||
|             titleRes = R.string.pref_category_library_update | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.libraryUpdateInterval | ||||
|                 bindTo(preferences.libraryUpdateInterval()) | ||||
|                 titleRes = R.string.pref_library_update_interval | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.update_never, | ||||
| @@ -148,7 +147,6 @@ class SettingsLibraryController : SettingsController() { | ||||
|                     R.string.update_weekly | ||||
|                 ) | ||||
|                 entryValues = arrayOf("0", "12", "24", "48", "72", "168") | ||||
|                 defaultValue = "24" | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 onChange { newValue -> | ||||
| @@ -158,13 +156,12 @@ class SettingsLibraryController : SettingsController() { | ||||
|                 } | ||||
|             } | ||||
|             multiSelectListPreference { | ||||
|                 key = Keys.libraryUpdateDeviceRestriction | ||||
|                 bindTo(preferences.libraryUpdateDeviceRestriction()) | ||||
|                 titleRes = R.string.pref_library_update_restriction | ||||
|                 entriesRes = arrayOf(R.string.connected_to_wifi, R.string.charging) | ||||
|                 entryValues = arrayOf(DEVICE_ONLY_ON_WIFI, DEVICE_CHARGING) | ||||
|                 defaultValue = preferences.libraryUpdateDeviceRestriction().defaultValue | ||||
|  | ||||
|                 visibleIfGlobalUpdateEnabled() | ||||
|                 visibleIf(preferences.libraryUpdateInterval()) { it > 0 } | ||||
|  | ||||
|                 onChange { | ||||
|                     // Post to event looper to allow the preference to be updated. | ||||
| @@ -196,11 +193,10 @@ class SettingsLibraryController : SettingsController() { | ||||
|                     .launchIn(viewScope) | ||||
|             } | ||||
|             multiSelectListPreference { | ||||
|                 key = Keys.libraryUpdateMangaRestriction | ||||
|                 bindTo(preferences.libraryUpdateMangaRestriction()) | ||||
|                 titleRes = R.string.pref_library_update_manga_restriction | ||||
|                 entriesRes = arrayOf(R.string.pref_update_only_completely_read, R.string.pref_update_only_non_completed) | ||||
|                 entryValues = arrayOf(MANGA_FULLY_READ, MANGA_ONGOING) | ||||
|                 defaultValue = preferences.libraryUpdateMangaRestriction().defaultValue | ||||
|  | ||||
|                 fun updateSummary() { | ||||
|                     val restrictions = preferences.libraryUpdateMangaRestriction().get() | ||||
| @@ -226,7 +222,7 @@ class SettingsLibraryController : SettingsController() { | ||||
|                     .launchIn(viewScope) | ||||
|             } | ||||
|             preference { | ||||
|                 key = Keys.libraryUpdateCategories | ||||
|                 bindTo(preferences.libraryUpdateCategories()) | ||||
|                 titleRes = R.string.categories | ||||
|  | ||||
|                 onClick { | ||||
| @@ -290,10 +286,6 @@ class SettingsLibraryController : SettingsController() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private inline fun Preference.visibleIfGlobalUpdateEnabled() { | ||||
|         visibleIf(preferences.libraryUpdateInterval()) { it > 0 } | ||||
|     } | ||||
|  | ||||
|     class LibraryColumnsDialog : DialogController() { | ||||
|  | ||||
|         private val preferences: PreferencesHelper = Injekt.get() | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.data.preference.PreferenceValues | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceValues.TappingInvertMode | ||||
| import eu.kanade.tachiyomi.ui.reader.setting.OrientationType | ||||
| 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.entriesRes | ||||
| import eu.kanade.tachiyomi.util.preference.intListPreference | ||||
| @@ -39,11 +40,10 @@ class SettingsReaderController : SettingsController() { | ||||
|             summary = "%s" | ||||
|         } | ||||
|         intListPreference { | ||||
|             key = Keys.doubleTapAnimationSpeed | ||||
|             bindTo(preferences.doubleTapAnimSpeed()) | ||||
|             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)) | ||||
|             entryValues = arrayOf("1", "500", "250") // using a value of 0 breaks the image viewer, so min is 1 | ||||
|             defaultValue = "500" | ||||
|             summary = "%s" | ||||
|         } | ||||
|         switchPreference { | ||||
| @@ -53,23 +53,20 @@ class SettingsReaderController : SettingsController() { | ||||
|             defaultValue = true | ||||
|         } | ||||
|         switchPreference { | ||||
|             key = Keys.showNavigationOverlayOnStart | ||||
|             bindTo(preferences.showNavigationOverlayOnStart()) | ||||
|             titleRes = R.string.pref_show_navigation_mode | ||||
|             summaryRes = R.string.pref_show_navigation_mode_summary | ||||
|             defaultValue = false | ||||
|         } | ||||
|         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||||
|             switchPreference { | ||||
|                 key = Keys.trueColor | ||||
|                 bindTo(preferences.trueColor()) | ||||
|                 titleRes = R.string.pref_true_color | ||||
|                 summaryRes = R.string.pref_true_color_summary | ||||
|                 defaultValue = false | ||||
|             } | ||||
|         } | ||||
|         switchPreference { | ||||
|             key = Keys.enableTransitions | ||||
|             bindTo(preferences.pageTransitions()) | ||||
|             titleRes = R.string.pref_page_transitions | ||||
|             defaultValue = true | ||||
|         } | ||||
|  | ||||
|         preferenceCategory { | ||||
| @@ -91,38 +88,33 @@ class SettingsReaderController : SettingsController() { | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             intListPreference { | ||||
|                 key = Keys.readerTheme | ||||
|                 bindTo(preferences.readerTheme()) | ||||
|                 titleRes = R.string.pref_reader_theme | ||||
|                 entriesRes = arrayOf(R.string.black_background, R.string.gray_background, R.string.white_background, R.string.automatic_background) | ||||
|                 entryValues = arrayOf("1", "2", "0", "3") | ||||
|                 defaultValue = "1" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.fullscreen | ||||
|                 bindTo(preferences.fullscreen()) | ||||
|                 titleRes = R.string.pref_fullscreen | ||||
|                 defaultValue = true | ||||
|             } | ||||
|  | ||||
|             if (activity?.hasDisplayCutout() == true) { | ||||
|                 switchPreference { | ||||
|                     key = Keys.cutoutShort | ||||
|                     bindTo(preferences.cutoutShort()) | ||||
|                     titleRes = R.string.pref_cutout_short | ||||
|                     defaultValue = true | ||||
|  | ||||
|                     visibleIf(preferences.fullscreen()) { it } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.keepScreenOn | ||||
|                 bindTo(preferences.keepScreenOn()) | ||||
|                 titleRes = R.string.pref_keep_screen_on | ||||
|                 defaultValue = true | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.showPageNumber | ||||
|                 bindTo(preferences.showPageNumber()) | ||||
|                 titleRes = R.string.pref_show_page_number | ||||
|                 defaultValue = true | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -140,9 +132,8 @@ class SettingsReaderController : SettingsController() { | ||||
|                 defaultValue = true | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.alwaysShowChapterTransition | ||||
|                 bindTo(preferences.alwaysShowChapterTransition()) | ||||
|                 titleRes = R.string.pref_always_show_chapter_transition | ||||
|                 defaultValue = true | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -150,18 +141,17 @@ class SettingsReaderController : SettingsController() { | ||||
|             titleRes = R.string.pager_viewer | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.navigationModePager | ||||
|                 bindTo(preferences.navigationModePager()) | ||||
|                 titleRes = R.string.pref_viewer_nav | ||||
|                 entries = context.resources.getStringArray(R.array.pager_nav).also { values -> | ||||
|                     entryValues = values.indices.map { index -> "$index" }.toTypedArray() | ||||
|                 } | ||||
|                 defaultValue = "0" | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 visibleIf(preferences.readWithTapping()) { it } | ||||
|             } | ||||
|             listPreference { | ||||
|                 key = Keys.pagerNavInverted | ||||
|                 bindTo(preferences.pagerNavInverted()) | ||||
|                 titleRes = R.string.pref_read_with_tapping_inverted | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.tapping_inverted_none, | ||||
| @@ -175,13 +165,12 @@ class SettingsReaderController : SettingsController() { | ||||
|                     TappingInvertMode.VERTICAL.name, | ||||
|                     TappingInvertMode.BOTH.name | ||||
|                 ) | ||||
|                 defaultValue = TappingInvertMode.NONE.name | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 visibleIf(preferences.readWithTapping()) { it } | ||||
|             } | ||||
|             intListPreference { | ||||
|                 key = Keys.imageScaleType | ||||
|                 bindTo(preferences.imageScaleType()) | ||||
|                 titleRes = R.string.pref_image_scale_type | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.scale_type_fit_screen, | ||||
| @@ -192,11 +181,10 @@ class SettingsReaderController : SettingsController() { | ||||
|                     R.string.scale_type_smart_fit | ||||
|                 ) | ||||
|                 entryValues = arrayOf("1", "2", "3", "4", "5", "6") | ||||
|                 defaultValue = "1" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             intListPreference { | ||||
|                 key = Keys.zoomStart | ||||
|                 bindTo(preferences.zoomStart()) | ||||
|                 titleRes = R.string.pref_zoom_start | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.zoom_start_automatic, | ||||
| @@ -205,24 +193,20 @@ class SettingsReaderController : SettingsController() { | ||||
|                     R.string.zoom_start_center | ||||
|                 ) | ||||
|                 entryValues = arrayOf("1", "2", "3", "4") | ||||
|                 defaultValue = "1" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.cropBorders | ||||
|                 bindTo(preferences.cropBorders()) | ||||
|                 titleRes = R.string.pref_crop_borders | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.dualPageSplitPaged | ||||
|                 bindTo(preferences.dualPageSplitPaged()) | ||||
|                 titleRes = R.string.pref_dual_page_split | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.dualPageInvertPaged | ||||
|                 bindTo(preferences.dualPageInvertPaged()) | ||||
|                 titleRes = R.string.pref_dual_page_invert | ||||
|                 summaryRes = R.string.pref_dual_page_invert_summary | ||||
|                 defaultValue = false | ||||
|                 visibleIf(preferences.dualPageSplitPaged()) { it } | ||||
|             } | ||||
|         } | ||||
| @@ -231,18 +215,16 @@ class SettingsReaderController : SettingsController() { | ||||
|             titleRes = R.string.webtoon_viewer | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.navigationModeWebtoon | ||||
|                 bindTo(preferences.navigationModeWebtoon()) | ||||
|                 titleRes = R.string.pref_viewer_nav | ||||
|                 entries = context.resources.getStringArray(R.array.webtoon_nav).also { values -> | ||||
|                     entryValues = values.indices.map { index -> "$index" }.toTypedArray() | ||||
|                 } | ||||
|                 defaultValue = "0" | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 visibleIf(preferences.readWithTapping()) { it } | ||||
|             } | ||||
|             listPreference { | ||||
|                 key = Keys.webtoonNavInverted | ||||
|                 bindTo(preferences.webtoonNavInverted()) | ||||
|                 titleRes = R.string.pref_read_with_tapping_inverted | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.tapping_inverted_none, | ||||
| @@ -256,13 +238,12 @@ class SettingsReaderController : SettingsController() { | ||||
|                     TappingInvertMode.VERTICAL.name, | ||||
|                     TappingInvertMode.BOTH.name | ||||
|                 ) | ||||
|                 defaultValue = TappingInvertMode.NONE.name | ||||
|                 summary = "%s" | ||||
|  | ||||
|                 visibleIf(preferences.readWithTapping()) { it } | ||||
|             } | ||||
|             intListPreference { | ||||
|                 key = Keys.webtoonSidePadding | ||||
|                 bindTo(preferences.webtoonSidePadding()) | ||||
|                 titleRes = R.string.pref_webtoon_side_padding | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.webtoon_side_padding_0, | ||||
| @@ -272,11 +253,10 @@ class SettingsReaderController : SettingsController() { | ||||
|                     R.string.webtoon_side_padding_25 | ||||
|                 ) | ||||
|                 entryValues = arrayOf("0", "10", "15", "20", "25") | ||||
|                 defaultValue = "0" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             listPreference { | ||||
|                 key = Keys.readerHideThreshold | ||||
|                 bindTo(preferences.readerHideThreshold()) | ||||
|                 titleRes = R.string.pref_hide_threshold | ||||
|                 entriesRes = arrayOf( | ||||
|                     R.string.pref_highest, | ||||
| @@ -287,24 +267,20 @@ class SettingsReaderController : SettingsController() { | ||||
|                 entryValues = PreferenceValues.ReaderHideThreshold.values() | ||||
|                     .map { it.name } | ||||
|                     .toTypedArray() | ||||
|                 defaultValue = "${PreferenceValues.ReaderHideThreshold.LOW}" | ||||
|                 summary = "%s" | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.cropBordersWebtoon | ||||
|                 bindTo(preferences.cropBordersWebtoon()) | ||||
|                 titleRes = R.string.pref_crop_borders | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.dualPageSplitWebtoon | ||||
|                 bindTo(preferences.dualPageSplitWebtoon()) | ||||
|                 titleRes = R.string.pref_dual_page_split | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.dualPageInvertWebtoon | ||||
|                 bindTo(preferences.dualPageInvertWebtoon()) | ||||
|                 titleRes = R.string.pref_dual_page_invert | ||||
|                 summaryRes = R.string.pref_dual_page_invert_summary | ||||
|                 defaultValue = false | ||||
|                 visibleIf(preferences.dualPageSplitWebtoon()) { it } | ||||
|             } | ||||
|         } | ||||
| @@ -313,19 +289,16 @@ class SettingsReaderController : SettingsController() { | ||||
|             titleRes = R.string.pref_reader_navigation | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.readWithTapping | ||||
|                 bindTo(preferences.readWithTapping()) | ||||
|                 titleRes = R.string.pref_read_with_tapping | ||||
|                 defaultValue = true | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.readWithVolumeKeys | ||||
|                 bindTo(preferences.readWithVolumeKeys()) | ||||
|                 titleRes = R.string.pref_read_with_volume_keys | ||||
|                 defaultValue = false | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.readWithVolumeKeysInverted | ||||
|                 bindTo(preferences.readWithVolumeKeysInverted()) | ||||
|                 titleRes = R.string.pref_read_with_volume_keys_inverted | ||||
|                 defaultValue = false | ||||
|                 visibleIf(preferences.readWithVolumeKeys()) { it } | ||||
|             } | ||||
|         } | ||||
| @@ -334,9 +307,8 @@ class SettingsReaderController : SettingsController() { | ||||
|             titleRes = R.string.pref_reader_actions | ||||
|  | ||||
|             switchPreference { | ||||
|                 key = Keys.readWithLongTap | ||||
|                 bindTo(preferences.readWithLongTap()) | ||||
|                 titleRes = R.string.pref_read_with_long_tap | ||||
|                 defaultValue = true | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.folderPerManga | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import androidx.fragment.app.FragmentActivity | ||||
| import androidx.preference.Preference | ||||
| import androidx.preference.PreferenceScreen | ||||
| 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.intListPreference | ||||
| import eu.kanade.tachiyomi.util.preference.requireAuthentication | ||||
| @@ -24,9 +25,8 @@ class SettingsSecurityController : SettingsController() { | ||||
|  | ||||
|         if (context.isAuthenticationSupported()) { | ||||
|             switchPreference { | ||||
|                 key = Keys.useAuthenticator | ||||
|                 bindTo(preferences.useAuthenticator()) | ||||
|                 titleRes = R.string.lock_with_biometrics | ||||
|                 defaultValue = false | ||||
|  | ||||
|                 requireAuthentication( | ||||
|                     activity as? FragmentActivity, | ||||
| @@ -36,7 +36,7 @@ class SettingsSecurityController : SettingsController() { | ||||
|             } | ||||
|  | ||||
|             intListPreference { | ||||
|                 key = Keys.lockAppAfter | ||||
|                 bindTo(preferences.lockAppAfter()) | ||||
|                 titleRes = R.string.lock_when_idle | ||||
|                 val values = arrayOf("0", "1", "2", "5", "10", "-1") | ||||
|                 entries = values.mapNotNull { | ||||
| @@ -47,7 +47,6 @@ class SettingsSecurityController : SettingsController() { | ||||
|                     } | ||||
|                 }.toTypedArray() | ||||
|                 entryValues = values | ||||
|                 defaultValue = "0" | ||||
|                 summary = "%s" | ||||
|                 onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> | ||||
|                     if (value == newValue) return@OnPreferenceChangeListener false | ||||
| @@ -82,10 +81,9 @@ class SettingsSecurityController : SettingsController() { | ||||
|         } | ||||
|  | ||||
|         switchPreference { | ||||
|             key = Keys.secureScreen | ||||
|             bindTo(preferences.secureScreen()) | ||||
|             titleRes = R.string.secure_screen | ||||
|             summaryRes = R.string.secure_screen_summary | ||||
|             defaultValue = false | ||||
|         } | ||||
|  | ||||
|         switchPreference { | ||||
|   | ||||
| @@ -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) { | ||||
|     setOnPreferenceClickListener { block(); true } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user