123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- 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.fredporciuncula.flow.preferences.FlowSharedPreferences
- import eu.kanade.domain.source.interactor.SetMigrateSorting
- import eu.kanade.tachiyomi.R
- import eu.kanade.tachiyomi.data.database.models.Manga
- import eu.kanade.tachiyomi.data.track.TrackService
- import eu.kanade.tachiyomi.data.track.anilist.Anilist
- import eu.kanade.tachiyomi.ui.library.setting.DisplayModeSetting
- import eu.kanade.tachiyomi.ui.library.setting.SortDirectionSetting
- import eu.kanade.tachiyomi.ui.library.setting.SortModeSetting
- import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
- import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
- import eu.kanade.tachiyomi.util.system.DeviceUtil
- import eu.kanade.tachiyomi.util.system.isDevFlavor
- import eu.kanade.tachiyomi.widget.ExtendedNavigationView
- import java.io.File
- import java.text.DateFormat
- import java.text.SimpleDateFormat
- import java.util.Locale
- import eu.kanade.domain.manga.model.Manga as DomainManga
- import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
- import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
- class PreferencesHelper(val context: Context) {
- private val prefs = PreferenceManager.getDefaultSharedPreferences(context)
- private val flowPrefs = FlowSharedPreferences(prefs)
- private val defaultDownloadsDir = File(
- Environment.getExternalStorageDirectory().absolutePath + File.separator +
- context.getString(R.string.app_name),
- "downloads",
- ).toUri()
- private val defaultBackupDir = File(
- Environment.getExternalStorageDirectory().absolutePath + File.separator +
- context.getString(R.string.app_name),
- "backup",
- ).toUri()
- fun confirmExit() = prefs.getBoolean(Keys.confirmExit, false)
- fun sideNavIconAlignment() = flowPrefs.getInt("pref_side_nav_icon_alignment", 0)
- fun useAuthenticator() = flowPrefs.getBoolean("use_biometric_lock", false)
- fun lockAppAfter() = flowPrefs.getInt("lock_app_after", 0)
- fun lastAppClosed() = flowPrefs.getLong("last_app_closed", 0)
- fun secureScreen() = flowPrefs.getEnum("secure_screen_v2", Values.SecureScreenMode.INCOGNITO)
- fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false)
- fun autoUpdateMetadata() = prefs.getBoolean(Keys.autoUpdateMetadata, false)
- fun autoUpdateTrackers() = prefs.getBoolean(Keys.autoUpdateTrackers, false)
- 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(
- "pref_app_theme",
- if (DeviceUtil.isDynamicColorAvailable) { Values.AppTheme.MONET } else { Values.AppTheme.DEFAULT },
- )
- fun themeDarkAmoled() = flowPrefs.getBoolean("pref_theme_dark_amoled_key", false)
- fun pageTransitions() = flowPrefs.getBoolean("pref_enable_transitions_key", true)
- fun doubleTapAnimSpeed() = flowPrefs.getInt("pref_double_tap_anim_speed", 500)
- fun showPageNumber() = flowPrefs.getBoolean("pref_show_page_number_key", true)
- fun dualPageSplitPaged() = flowPrefs.getBoolean("pref_dual_page_split", false)
- fun dualPageSplitWebtoon() = flowPrefs.getBoolean("pref_dual_page_split_webtoon", false)
- fun dualPageInvertPaged() = flowPrefs.getBoolean("pref_dual_page_invert", false)
- fun dualPageInvertWebtoon() = flowPrefs.getBoolean("pref_dual_page_invert_webtoon", false)
- fun showReadingMode() = prefs.getBoolean(Keys.showReadingMode, true)
- fun trueColor() = flowPrefs.getBoolean("pref_true_color_key", false)
- fun fullscreen() = flowPrefs.getBoolean("fullscreen", true)
- fun cutoutShort() = flowPrefs.getBoolean("cutout_short", true)
- fun keepScreenOn() = flowPrefs.getBoolean("pref_keep_screen_on_key", true)
- fun customBrightness() = flowPrefs.getBoolean("pref_custom_brightness_key", false)
- fun customBrightnessValue() = flowPrefs.getInt("custom_brightness_value", 0)
- fun colorFilter() = flowPrefs.getBoolean("pref_color_filter_key", false)
- fun colorFilterValue() = flowPrefs.getInt("color_filter_value", 0)
- fun colorFilterMode() = flowPrefs.getInt("color_filter_mode", 0)
- fun grayscale() = flowPrefs.getBoolean("pref_grayscale", 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("pref_image_scale_type_key", 1)
- fun zoomStart() = flowPrefs.getInt("pref_zoom_start_key", 1)
- fun readerTheme() = flowPrefs.getInt("pref_reader_theme_key", 1)
- fun alwaysShowChapterTransition() = flowPrefs.getBoolean("always_show_chapter_transition", true)
- fun cropBorders() = flowPrefs.getBoolean("crop_borders", false)
- fun navigateToPan() = flowPrefs.getBoolean("navigate_pan", true)
- fun landscapeZoom() = flowPrefs.getBoolean("landscape_zoom", true)
- fun cropBordersWebtoon() = flowPrefs.getBoolean("crop_borders_webtoon", false)
- fun webtoonSidePadding() = flowPrefs.getInt("webtoon_side_padding", 0)
- fun pagerNavInverted() = flowPrefs.getEnum("reader_tapping_inverted", Values.TappingInvertMode.NONE)
- fun webtoonNavInverted() = flowPrefs.getEnum("reader_tapping_inverted_webtoon", Values.TappingInvertMode.NONE)
- fun readWithLongTap() = flowPrefs.getBoolean("reader_long_tap", true)
- fun readWithVolumeKeys() = flowPrefs.getBoolean("reader_volume_keys", false)
- fun readWithVolumeKeysInverted() = flowPrefs.getBoolean("reader_volume_keys_inverted", false)
- fun navigationModePager() = flowPrefs.getInt("reader_navigation_mode_pager", 0)
- fun navigationModeWebtoon() = flowPrefs.getInt("reader_navigation_mode_webtoon", 0)
- fun showNavigationOverlayNewUser() = flowPrefs.getBoolean("reader_navigation_overlay_new_user", true)
- fun showNavigationOverlayOnStart() = flowPrefs.getBoolean("reader_navigation_overlay_on_start", false)
- fun readerHideThreshold() = flowPrefs.getEnum("reader_hide_threshold", Values.ReaderHideThreshold.LOW)
- fun portraitColumns() = flowPrefs.getInt("pref_library_columns_portrait_key", 0)
- fun landscapeColumns() = flowPrefs.getInt("pref_library_columns_landscape_key", 0)
- fun autoUpdateTrack() = prefs.getBoolean(Keys.autoUpdateTrack, true)
- fun lastUsedSource() = flowPrefs.getLong("last_catalogue_source", -1)
- fun lastUsedCategory() = flowPrefs.getInt("last_used_category", 0)
- fun lastVersionCode() = flowPrefs.getInt("last_version_code", 0)
- fun sourceDisplayMode() = flowPrefs.getEnum("pref_display_mode_catalogue", DisplayModeSetting.COMPACT_GRID)
- fun enabledLanguages() = flowPrefs.getStringSet("source_languages", setOf("all", "en", Locale.getDefault().language))
- fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "")
- fun trackPassword(sync: TrackService) = prefs.getString(Keys.trackPassword(sync.id), "")
- fun setTrackCredentials(sync: TrackService, username: String, password: String) {
- prefs.edit {
- putString(Keys.trackUsername(sync.id), username)
- putString(Keys.trackPassword(sync.id), password)
- }
- }
- fun trackToken(sync: TrackService) = flowPrefs.getString(Keys.trackToken(sync.id), "")
- fun anilistScoreType() = flowPrefs.getString("anilist_score_type", Anilist.POINT_10)
- fun backupsDirectory() = flowPrefs.getString("backup_directory", defaultBackupDir.toString())
- 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("download_directory", defaultDownloadsDir.toString())
- fun downloadOnlyOverWifi() = prefs.getBoolean(Keys.downloadOnlyOverWifi, true)
- fun saveChaptersAsCBZ() = flowPrefs.getBoolean("save_chapter_as_cbz", true)
- fun splitTallImages() = flowPrefs.getBoolean("split_tall_images", false)
- fun folderPerManga() = prefs.getBoolean(Keys.folderPerManga, false)
- fun numberOfBackups() = flowPrefs.getInt("backup_slots", 2)
- fun backupInterval() = flowPrefs.getInt("backup_interval", 0)
- fun removeAfterReadSlots() = prefs.getInt(Keys.removeAfterReadSlots, -1)
- fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false)
- fun removeBookmarkedChapters() = prefs.getBoolean(Keys.removeBookmarkedChapters, false)
- fun removeExcludeCategories() = flowPrefs.getStringSet("remove_exclude_categories", emptySet())
- fun libraryUpdateInterval() = flowPrefs.getInt("pref_library_update_interval_key", 24)
- fun libraryUpdateDeviceRestriction() = flowPrefs.getStringSet("library_update_restriction", setOf(DEVICE_ONLY_ON_WIFI))
- fun libraryUpdateMangaRestriction() = flowPrefs.getStringSet("library_update_manga_restriction", setOf(MANGA_HAS_UNREAD, MANGA_NON_COMPLETED, MANGA_NON_READ))
- fun showUpdatesNavBadge() = flowPrefs.getBoolean("library_update_show_tab_badge", false)
- fun unreadUpdatesCount() = flowPrefs.getInt("library_unread_updates_count", 0)
- fun libraryUpdateCategories() = flowPrefs.getStringSet("library_update_categories", emptySet())
- fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet("library_update_categories_exclude", emptySet())
- fun libraryDisplayMode() = flowPrefs.getEnum("pref_display_mode_library", DisplayModeSetting.COMPACT_GRID)
- fun downloadBadge() = flowPrefs.getBoolean("display_download_badge", false)
- fun localBadge() = flowPrefs.getBoolean("display_local_badge", true)
- fun downloadedOnly() = flowPrefs.getBoolean("pref_downloaded_only", false)
- fun unreadBadge() = flowPrefs.getBoolean("display_unread_badge", true)
- fun languageBadge() = flowPrefs.getBoolean("display_language_badge", false)
- fun categoryTabs() = flowPrefs.getBoolean("display_category_tabs", true)
- fun categoryNumberOfItems() = flowPrefs.getBoolean("display_number_of_items", false)
- fun filterDownloaded() = flowPrefs.getInt(Keys.filterDownloaded, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
- fun filterUnread() = flowPrefs.getInt(Keys.filterUnread, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
- fun filterStarted() = flowPrefs.getInt(Keys.filterStarted, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
- fun filterCompleted() = flowPrefs.getInt(Keys.filterCompleted, ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
- fun filterTracking(name: Int) = flowPrefs.getInt("${Keys.filterTracked}_$name", ExtendedNavigationView.Item.TriStateGroup.State.IGNORE.value)
- fun librarySortingMode() = flowPrefs.getEnum(Keys.librarySortingMode, SortModeSetting.ALPHABETICAL)
- fun librarySortingAscending() = flowPrefs.getEnum(Keys.librarySortingDirection, SortDirectionSetting.ASCENDING)
- fun migrationSortingMode() = flowPrefs.getEnum(Keys.migrationSortingMode, SetMigrateSorting.Mode.ALPHABETICAL)
- fun migrationSortingDirection() = flowPrefs.getEnum(Keys.migrationSortingDirection, SetMigrateSorting.Direction.ASCENDING)
- fun automaticExtUpdates() = flowPrefs.getBoolean("automatic_ext_updates", true)
- fun showNsfwSource() = flowPrefs.getBoolean("show_nsfw_source", true)
- fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
- fun lastAppCheck() = flowPrefs.getLong("last_app_check", 0)
- fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
- fun searchPinnedSourcesOnly() = prefs.getBoolean(Keys.searchPinnedSourcesOnly, false)
- fun disabledSources() = flowPrefs.getStringSet("hidden_catalogues", emptySet())
- fun pinnedSources() = flowPrefs.getStringSet("pinned_catalogues", emptySet())
- fun downloadNewChapter() = flowPrefs.getBoolean("download_new", false)
- fun downloadNewChapterCategories() = flowPrefs.getStringSet("download_new_categories", emptySet())
- fun downloadNewChapterCategoriesExclude() = flowPrefs.getStringSet("download_new_categories_exclude", emptySet())
- fun defaultCategory() = prefs.getInt(Keys.defaultCategory, -1)
- fun categorizedDisplaySettings() = flowPrefs.getBoolean("categorized_display", false)
- fun skipRead() = prefs.getBoolean(Keys.skipRead, false)
- fun skipFiltered() = prefs.getBoolean(Keys.skipFiltered, true)
- fun migrateFlags() = flowPrefs.getInt("migrate_flags", Int.MAX_VALUE)
- fun trustedSignatures() = flowPrefs.getStringSet("trusted_signatures", emptySet())
- fun dohProvider() = prefs.getInt(Keys.dohProvider, -1)
- fun defaultUserAgent() = flowPrefs.getString(Keys.defaultUserAgent, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44")
- fun lastSearchQuerySearchSettings() = flowPrefs.getString("last_search_query", "")
- fun filterChapterByRead() = prefs.getInt(Keys.defaultChapterFilterByRead, DomainManga.SHOW_ALL.toInt())
- fun filterChapterByDownloaded() = prefs.getInt(Keys.defaultChapterFilterByDownloaded, DomainManga.SHOW_ALL.toInt())
- fun filterChapterByBookmarked() = prefs.getInt(Keys.defaultChapterFilterByBookmarked, DomainManga.SHOW_ALL.toInt())
- fun sortChapterBySourceOrNumber() = prefs.getInt(Keys.defaultChapterSortBySourceOrNumber, DomainManga.CHAPTER_SORTING_SOURCE.toInt())
- fun displayChapterByNameOrNumber() = prefs.getInt(Keys.defaultChapterDisplayByNameOrNumber, DomainManga.CHAPTER_DISPLAY_NAME.toInt())
- fun sortChapterByAscendingOrDescending() = prefs.getInt(Keys.defaultChapterSortByAscendingOrDescending, DomainManga.CHAPTER_SORT_DESC.toInt())
- fun incognitoMode() = flowPrefs.getBoolean("incognito_mode", false)
- fun tabletUiMode() = flowPrefs.getEnum("tablet_ui_mode", Values.TabletUiMode.AUTOMATIC)
- fun extensionInstaller() = flowPrefs.getEnum(
- "extension_installer",
- if (DeviceUtil.isMiui) Values.ExtensionInstaller.LEGACY else Values.ExtensionInstaller.PACKAGEINSTALLER,
- )
- fun verboseLogging() = prefs.getBoolean(Keys.verboseLogging, isDevFlavor)
- fun autoClearChapterCache() = prefs.getBoolean(Keys.autoClearChapterCache, false)
- fun duplicatePinnedSources() = flowPrefs.getBoolean("duplicate_pinned_sources", false)
- fun setChapterSettingsDefault(manga: Manga) {
- prefs.edit {
- putInt(Keys.defaultChapterFilterByRead, manga.readFilter)
- putInt(Keys.defaultChapterFilterByDownloaded, manga.downloadedFilter)
- putInt(Keys.defaultChapterFilterByBookmarked, manga.bookmarkedFilter)
- putInt(Keys.defaultChapterSortBySourceOrNumber, manga.sorting)
- putInt(Keys.defaultChapterDisplayByNameOrNumber, manga.displayMode)
- putInt(Keys.defaultChapterSortByAscendingOrDescending, if (manga.sortDescending()) DomainManga.CHAPTER_SORT_DESC.toInt() else DomainManga.CHAPTER_SORT_ASC.toInt())
- }
- }
- }
|