diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt index bfd021b43..82e3fd9d0 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt @@ -17,7 +17,7 @@ sealed class Preference { sealed class PreferenceItem : Preference() { abstract val subtitle: String? abstract val icon: ImageVector? - abstract val onValueChanged: suspend (newValue: T) -> Boolean + abstract val onValueChanged: suspend (value: T) -> Boolean /** * A basic [PreferenceItem] that only displays texts. @@ -25,24 +25,25 @@ sealed class Preference { data class TextPreference( override val title: String, override val subtitle: String? = null, - override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: String) -> Boolean = { true }, - val onClick: (() -> Unit)? = null, - ) : PreferenceItem() + ) : PreferenceItem() { + override val icon: ImageVector? = null + override val onValueChanged: suspend (value: String) -> Boolean = { true } + } /** * A [PreferenceItem] that provides a two-state toggleable option. */ data class SwitchPreference( - val pref: PreferenceData, + val preference: PreferenceData, override val title: String, override val subtitle: String? = null, - override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: Boolean) -> Boolean = { true }, - ) : PreferenceItem() + override val onValueChanged: suspend (value: Boolean) -> Boolean = { true }, + ) : PreferenceItem() { + override val icon: ImageVector? = null + } /** * A [PreferenceItem] that provides a slider to select an integer number. @@ -52,31 +53,31 @@ sealed class Preference { val max: Int, val min: Int = 0, val steps: Int = 0, - override val title: String = "", + override val title: String, override val subtitle: String? = null, - override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: Int) -> Boolean = { true }, - ) : PreferenceItem() + override val onValueChanged: suspend (value: Int) -> Boolean = { true }, + ) : PreferenceItem() { + override val icon: ImageVector? = null + } /** * A [PreferenceItem] that displays a list of entries as a dialog. */ @Suppress("UNCHECKED_CAST") data class ListPreference( - val pref: PreferenceData, + val preference: PreferenceData, + val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", val subtitleProvider: @Composable (value: T, entries: ImmutableMap) -> String? = { v, e -> subtitle?.format(e[v]) }, override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: T) -> Boolean = { true }, - - val entries: ImmutableMap, + override val onValueChanged: suspend (value: T) -> Boolean = { true }, ) : PreferenceItem() { - internal fun internalSet(newValue: Any) = pref.set(newValue as T) - internal suspend fun internalOnValueChanged(newValue: Any) = onValueChanged(newValue as T) + internal fun internalSet(value: Any) = preference.set(value as T) + internal suspend fun internalOnValueChanged(value: Any) = onValueChanged(value as T) @Composable internal fun internalSubtitleProvider(value: Any?, entries: ImmutableMap) = @@ -88,15 +89,14 @@ sealed class Preference { */ data class BasicListPreference( val value: String, + val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", val subtitleProvider: @Composable (value: String, entries: ImmutableMap) -> String? = { v, e -> subtitle?.format(e[v]) }, override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: String) -> Boolean = { true }, - - val entries: ImmutableMap, + override val onValueChanged: suspend (value: String) -> Boolean = { true }, ) : PreferenceItem() /** @@ -104,52 +104,51 @@ sealed class Preference { * Multiple entries can be selected at the same time. */ data class MultiSelectListPreference( - val pref: PreferenceData>, + val preference: PreferenceData>, + val entries: ImmutableMap, override val title: String, override val subtitle: String? = "%s", - val subtitleProvider: @Composable ( - value: Set, - entries: ImmutableMap, - ) -> String? = { v, e -> - val combined = remember(v) { - v.map { e[it] } - .takeIf { it.isNotEmpty() } - ?.joinToString() - } ?: stringResource(MR.strings.none) - subtitle?.format(combined) - }, + val subtitleProvider: @Composable (value: Set, entries: ImmutableMap) -> String? = + { v, e -> + val combined = remember(v, e) { + v.mapNotNull { e[it] } + .joinToString() + .takeUnless { it.isBlank() } + } + ?: stringResource(MR.strings.none) + subtitle?.format(combined) + }, override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: Set) -> Boolean = { true }, - - val entries: ImmutableMap, + override val onValueChanged: suspend (value: Set) -> Boolean = { true }, ) : PreferenceItem>() /** * A [PreferenceItem] that shows a EditText in the dialog. */ data class EditTextPreference( - val pref: PreferenceData, + val preference: PreferenceData, override val title: String, override val subtitle: String? = "%s", - override val icon: ImageVector? = null, override val enabled: Boolean = true, - override val onValueChanged: suspend (newValue: String) -> Boolean = { true }, - ) : PreferenceItem() + override val onValueChanged: suspend (value: String) -> Boolean = { true }, + ) : PreferenceItem() { + override val icon: ImageVector? = null + } /** * A [PreferenceItem] for individual tracker. */ data class TrackerPreference( val tracker: Tracker, - override val title: String, val login: () -> Unit, val logout: () -> Unit, ) : PreferenceItem() { + override val title: String = "" override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null - override val onValueChanged: suspend (newValue: String) -> Boolean = { true } + override val onValueChanged: suspend (value: String) -> Boolean = { true } } data class InfoPreference( @@ -158,7 +157,7 @@ sealed class Preference { override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null - override val onValueChanged: suspend (newValue: String) -> Boolean = { true } + override val onValueChanged: suspend (value: String) -> Boolean = { true } } data class CustomPreference( @@ -168,7 +167,7 @@ sealed class Preference { override val enabled: Boolean = true override val subtitle: String? = null override val icon: ImageVector? = null - override val onValueChanged: suspend (newValue: Unit) -> Boolean = { true } + override val onValueChanged: suspend (value: Unit) -> Boolean = { true } } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt index 45ab258b0..9f97d3a83 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt @@ -61,7 +61,7 @@ internal fun PreferenceItem( ) { when (item) { is Preference.PreferenceItem.SwitchPreference -> { - val value by item.pref.collectAsState() + val value by item.preference.collectAsState() SwitchPreferenceWidget( title = item.title, subtitle = item.subtitle, @@ -70,7 +70,7 @@ internal fun PreferenceItem( onCheckedChanged = { newValue -> scope.launch { if (item.onValueChanged(newValue)) { - item.pref.set(newValue) + item.preference.set(newValue) } } }, @@ -93,7 +93,7 @@ internal fun PreferenceItem( ) } is Preference.PreferenceItem.ListPreference<*> -> { - val value by item.pref.collectAsState() + val value by item.preference.collectAsState() ListPreferenceWidget( value = value, title = item.title, @@ -120,14 +120,14 @@ internal fun PreferenceItem( ) } is Preference.PreferenceItem.MultiSelectListPreference -> { - val values by item.pref.collectAsState() + val values by item.preference.collectAsState() MultiSelectListPreferenceWidget( preference = item, values = values, onValuesChange = { newValues -> scope.launch { if (item.onValueChanged(newValues)) { - item.pref.set(newValues.toMutableSet()) + item.preference.set(newValues.toMutableSet()) } } }, @@ -142,7 +142,7 @@ internal fun PreferenceItem( ) } is Preference.PreferenceItem.EditTextPreference -> { - val values by item.pref.collectAsState() + val values by item.preference.collectAsState() EditTextPreferenceWidget( title = item.title, subtitle = item.subtitle, @@ -150,7 +150,7 @@ internal fun PreferenceItem( value = values, onConfirm = { val accepted = item.onValueChanged(it) - if (accepted) item.pref.set(it) + if (accepted) item.preference.set(it) accepted }, ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index 8e239f075..12db06683 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -98,7 +98,7 @@ object SettingsAdvancedScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = networkPreferences.verboseLogging(), + preference = networkPreferences.verboseLogging(), title = stringResource(MR.strings.pref_verbose_logging), subtitle = stringResource(MR.strings.pref_verbose_logging_summary), onValueChanged = { @@ -237,8 +237,7 @@ object SettingsAdvancedScreen : SearchableSettings { }, ), Preference.PreferenceItem.ListPreference( - pref = networkPreferences.dohProvider(), - title = stringResource(MR.strings.pref_dns_over_https), + preference = networkPreferences.dohProvider(), entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), PREF_DOH_CLOUDFLARE to "Cloudflare", @@ -254,13 +253,14 @@ object SettingsAdvancedScreen : SearchableSettings { PREF_DOH_NJALLA to "Njalla", PREF_DOH_SHECAN to "Shecan", ), + title = stringResource(MR.strings.pref_dns_over_https), onValueChanged = { context.toast(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.EditTextPreference( - pref = userAgentPref, + preference = userAgentPref, title = stringResource(MR.strings.pref_user_agent_string), onValueChanged = { try { @@ -337,13 +337,7 @@ object SettingsAdvancedScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_reader), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = basePreferences.hardwareBitmapThreshold(), - title = stringResource(MR.strings.pref_hardware_bitmap_threshold), - subtitleProvider = { value, options -> - stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty()) - }, - enabled = !ImageUtil.HARDWARE_BITMAP_UNSUPPORTED && - GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT, + preference = basePreferences.hardwareBitmapThreshold(), entries = GLUtil.CUSTOM_TEXTURE_LIMIT_OPTIONS .mapIndexed { index, option -> val display = if (index == 0) { @@ -355,9 +349,15 @@ object SettingsAdvancedScreen : SearchableSettings { } .toMap() .toImmutableMap(), + title = stringResource(MR.strings.pref_hardware_bitmap_threshold), + subtitleProvider = { value, options -> + stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty()) + }, + enabled = !ImageUtil.HARDWARE_BITMAP_UNSUPPORTED && + GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT, ), Preference.PreferenceItem.SwitchPreference( - pref = basePreferences.alwaysDecodeLongStripWithSSIV(), + preference = basePreferences.alwaysDecodeLongStripWithSSIV(), title = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv), subtitle = stringResource(MR.strings.pref_always_decode_long_strip_with_ssiv_summary), ), @@ -409,8 +409,7 @@ object SettingsAdvancedScreen : SearchableSettings { title = stringResource(MR.strings.label_extensions), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = extensionInstallerPref, - title = stringResource(MR.strings.ext_installer_pref), + preference = extensionInstallerPref, entries = extensionInstallerPref.entries .filter { // TODO: allow private option in stable versions once URL handling is more fleshed out @@ -422,6 +421,7 @@ object SettingsAdvancedScreen : SearchableSettings { } .associateWith { stringResource(it.titleRes) } .toImmutableMap(), + title = stringResource(MR.strings.ext_installer_pref), onValueChanged = { if (it == BasePreferences.ExtensionInstaller.SHIZUKU && !context.isShizukuInstalled diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt index 10ad5e7bd..da957ae70 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt @@ -82,7 +82,7 @@ object SettingsAppearanceScreen : SearchableSettings { } }, Preference.PreferenceItem.SwitchPreference( - pref = amoledPref, + preference = amoledPref, title = stringResource(MR.strings.pref_dark_theme_pure_black), enabled = themeMode != ThemeMode.LIGHT, onValueChanged = { @@ -116,28 +116,28 @@ object SettingsAppearanceScreen : SearchableSettings { onClick = { navigator.push(AppLanguageScreen()) }, ), Preference.PreferenceItem.ListPreference( - pref = uiPreferences.tabletUiMode(), - title = stringResource(MR.strings.pref_tablet_ui_mode), + preference = uiPreferences.tabletUiMode(), entries = TabletUiMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), + title = stringResource(MR.strings.pref_tablet_ui_mode), onValueChanged = { context.toast(MR.strings.requires_app_restart) true }, ), Preference.PreferenceItem.ListPreference( - pref = uiPreferences.dateFormat(), - title = stringResource(MR.strings.pref_date_format), + preference = uiPreferences.dateFormat(), entries = DateFormats .associateWith { val formattedDate = UiPreferences.dateFormat(it).format(now) "${it.ifEmpty { stringResource(MR.strings.label_default) }} ($formattedDate)" } .toImmutableMap(), + title = stringResource(MR.strings.pref_date_format), ), Preference.PreferenceItem.SwitchPreference( - pref = uiPreferences.relativeTime(), + preference = uiPreferences.relativeTime(), title = stringResource(MR.strings.pref_relative_format), subtitle = stringResource( MR.strings.pref_relative_format_summary, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt index b47dbe502..6baeda597 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt @@ -43,7 +43,7 @@ object SettingsBrowseScreen : SearchableSettings { title = stringResource(MR.strings.label_sources), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = sourcePreferences.hideInLibraryItems(), + preference = sourcePreferences.hideInLibraryItems(), title = stringResource(MR.strings.pref_hide_in_library_items), ), Preference.PreferenceItem.TextPreference( @@ -59,7 +59,7 @@ object SettingsBrowseScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_nsfw_content), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = sourcePreferences.showNsfwSource(), + preference = sourcePreferences.showNsfwSource(), title = stringResource(MR.strings.pref_show_nsfw_source), subtitle = stringResource(MR.strings.requires_app_restart), onValueChanged = { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt index ecfd2ec75..14866e284 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt @@ -239,8 +239,7 @@ object SettingsDataScreen : SearchableSettings { // Automatic backups Preference.PreferenceItem.ListPreference( - pref = backupPreferences.backupInterval(), - title = stringResource(MR.strings.pref_backup_interval), + preference = backupPreferences.backupInterval(), entries = persistentMapOf( 0 to stringResource(MR.strings.off), 6 to stringResource(MR.strings.update_6hour), @@ -249,6 +248,7 @@ object SettingsDataScreen : SearchableSettings { 48 to stringResource(MR.strings.update_48hour), 168 to stringResource(MR.strings.update_weekly), ), + title = stringResource(MR.strings.pref_backup_interval), onValueChanged = { BackupCreateJob.setupTask(context, it) true @@ -306,7 +306,7 @@ object SettingsDataScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = libraryPreferences.autoClearChapterCache(), + preference = libraryPreferences.autoClearChapterCache(), title = stringResource(MR.strings.pref_auto_clear_chapter_cache), ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt index 680d73405..46608659e 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt @@ -39,15 +39,15 @@ object SettingsDownloadScreen : SearchableSettings { val downloadPreferences = remember { Injekt.get() } return listOf( Preference.PreferenceItem.SwitchPreference( - pref = downloadPreferences.downloadOnlyOverWifi(), + preference = downloadPreferences.downloadOnlyOverWifi(), title = stringResource(MR.strings.connected_to_wifi), ), Preference.PreferenceItem.SwitchPreference( - pref = downloadPreferences.saveChaptersAsCBZ(), + preference = downloadPreferences.saveChaptersAsCBZ(), title = stringResource(MR.strings.save_chapter_as_cbz), ), Preference.PreferenceItem.SwitchPreference( - pref = downloadPreferences.splitTallImages(), + preference = downloadPreferences.splitTallImages(), title = stringResource(MR.strings.split_tall_images), subtitle = stringResource(MR.strings.split_tall_images_summary), ), @@ -72,12 +72,11 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_delete_chapters), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = downloadPreferences.removeAfterMarkedAsRead(), + preference = downloadPreferences.removeAfterMarkedAsRead(), title = stringResource(MR.strings.pref_remove_after_marked_as_read), ), Preference.PreferenceItem.ListPreference( - pref = downloadPreferences.removeAfterReadSlots(), - title = stringResource(MR.strings.pref_remove_after_read), + preference = downloadPreferences.removeAfterReadSlots(), entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), 0 to stringResource(MR.strings.last_read_chapter), @@ -86,9 +85,10 @@ object SettingsDownloadScreen : SearchableSettings { 3 to stringResource(MR.strings.fourth_to_last), 4 to stringResource(MR.strings.fifth_to_last), ), + title = stringResource(MR.strings.pref_remove_after_read), ), Preference.PreferenceItem.SwitchPreference( - pref = downloadPreferences.removeBookmarkedChapters(), + preference = downloadPreferences.removeBookmarkedChapters(), title = stringResource(MR.strings.pref_remove_bookmarked_chapters), ), getExcludedCategoriesPreference( @@ -105,11 +105,11 @@ object SettingsDownloadScreen : SearchableSettings { categories: () -> List, ): Preference.PreferenceItem.MultiSelectListPreference { return Preference.PreferenceItem.MultiSelectListPreference( - pref = downloadPreferences.removeExcludeCategories(), - title = stringResource(MR.strings.pref_remove_exclude_categories), + preference = downloadPreferences.removeExcludeCategories(), entries = categories() .associate { it.id.toString() to it.visualName } .toImmutableMap(), + title = stringResource(MR.strings.pref_remove_exclude_categories), ) } @@ -149,11 +149,11 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_auto_download), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = downloadNewChaptersPref, + preference = downloadNewChaptersPref, title = stringResource(MR.strings.pref_download_new), ), Preference.PreferenceItem.SwitchPreference( - pref = downloadNewUnreadChaptersOnlyPref, + preference = downloadNewUnreadChaptersOnlyPref, title = stringResource(MR.strings.pref_download_new_unread_chapters_only), enabled = downloadNewChapters, ), @@ -164,8 +164,8 @@ object SettingsDownloadScreen : SearchableSettings { included = included, excluded = excluded, ), - onClick = { showDialog = true }, enabled = downloadNewChapters, + onClick = { showDialog = true }, ), ), ) @@ -179,8 +179,7 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(MR.strings.download_ahead), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = downloadPreferences.autoDownloadWhileReading(), - title = stringResource(MR.strings.auto_download_while_reading), + preference = downloadPreferences.autoDownloadWhileReading(), entries = listOf(0, 2, 3, 5, 10) .associateWith { if (it == 0) { @@ -190,6 +189,7 @@ object SettingsDownloadScreen : SearchableSettings { } } .toImmutableMap(), + title = stringResource(MR.strings.auto_download_while_reading), ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_ahead_info)), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt index 9ba7281a2..e3e9825a5 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt @@ -89,12 +89,12 @@ object SettingsLibraryScreen : SearchableSettings { onClick = { navigator.push(CategoryScreen()) }, ), Preference.PreferenceItem.ListPreference( - pref = libraryPreferences.defaultCategory(), - title = stringResource(MR.strings.default_category), + preference = libraryPreferences.defaultCategory(), entries = ids.zip(labels).toMap().toImmutableMap(), + title = stringResource(MR.strings.default_category), ), Preference.PreferenceItem.SwitchPreference( - pref = libraryPreferences.categorizedDisplaySettings(), + preference = libraryPreferences.categorizedDisplaySettings(), title = stringResource(MR.strings.categorized_display_settings), onValueChanged = { if (!it) { @@ -146,8 +146,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_library_update), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = autoUpdateIntervalPref, - title = stringResource(MR.strings.pref_library_update_interval), + preference = autoUpdateIntervalPref, entries = persistentMapOf( 0 to stringResource(MR.strings.update_never), 12 to stringResource(MR.strings.update_12hour), @@ -156,21 +155,22 @@ object SettingsLibraryScreen : SearchableSettings { 72 to stringResource(MR.strings.update_72hour), 168 to stringResource(MR.strings.update_weekly), ), + title = stringResource(MR.strings.pref_library_update_interval), onValueChanged = { LibraryUpdateJob.setupTask(context, it) true }, ), Preference.PreferenceItem.MultiSelectListPreference( - pref = libraryPreferences.autoUpdateDeviceRestrictions(), - enabled = autoUpdateInterval > 0, - title = stringResource(MR.strings.pref_library_update_restriction), - subtitle = stringResource(MR.strings.restrictions), + preference = libraryPreferences.autoUpdateDeviceRestrictions(), entries = persistentMapOf( DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi), DEVICE_NETWORK_NOT_METERED to stringResource(MR.strings.network_not_metered), DEVICE_CHARGING to stringResource(MR.strings.charging), ), + title = stringResource(MR.strings.pref_library_update_restriction), + subtitle = stringResource(MR.strings.restrictions), + enabled = autoUpdateInterval > 0, onValueChanged = { // Post to event looper to allow the preference to be updated. ContextCompat.getMainExecutor(context).execute { LibraryUpdateJob.setupTask(context) } @@ -187,22 +187,22 @@ object SettingsLibraryScreen : SearchableSettings { onClick = { showCategoriesDialog = true }, ), Preference.PreferenceItem.SwitchPreference( - pref = libraryPreferences.autoUpdateMetadata(), + preference = libraryPreferences.autoUpdateMetadata(), title = stringResource(MR.strings.pref_library_update_refresh_metadata), subtitle = stringResource(MR.strings.pref_library_update_refresh_metadata_summary), ), Preference.PreferenceItem.MultiSelectListPreference( - pref = libraryPreferences.autoUpdateMangaRestrictions(), - title = stringResource(MR.strings.pref_library_update_smart_update), + preference = libraryPreferences.autoUpdateMangaRestrictions(), entries = persistentMapOf( MANGA_HAS_UNREAD to stringResource(MR.strings.pref_update_only_completely_read), MANGA_NON_READ to stringResource(MR.strings.pref_update_only_started), MANGA_NON_COMPLETED to stringResource(MR.strings.pref_update_only_non_completed), MANGA_OUTSIDE_RELEASE_PERIOD to stringResource(MR.strings.pref_update_only_in_release_period), ), + title = stringResource(MR.strings.pref_library_update_smart_update), ), Preference.PreferenceItem.SwitchPreference( - pref = libraryPreferences.newShowUpdatesCount(), + preference = libraryPreferences.newShowUpdatesCount(), title = stringResource(MR.strings.pref_library_update_show_tab_badge), ), ), @@ -217,8 +217,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(MR.strings.pref_chapter_swipe), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = libraryPreferences.swipeToStartAction(), - title = stringResource(MR.strings.pref_chapter_swipe_start), + preference = libraryPreferences.swipeToStartAction(), entries = persistentMapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled), @@ -229,10 +228,10 @@ object SettingsLibraryScreen : SearchableSettings { LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download), ), + title = stringResource(MR.strings.pref_chapter_swipe_start), ), Preference.PreferenceItem.ListPreference( - pref = libraryPreferences.swipeToEndAction(), - title = stringResource(MR.strings.pref_chapter_swipe_end), + preference = libraryPreferences.swipeToEndAction(), entries = persistentMapOf( LibraryPreferences.ChapterSwipeAction.Disabled to stringResource(MR.strings.disabled), @@ -243,6 +242,7 @@ object SettingsLibraryScreen : SearchableSettings { LibraryPreferences.ChapterSwipeAction.Download to stringResource(MR.strings.action_download), ), + title = stringResource(MR.strings.pref_chapter_swipe_end), ), ), ) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt index a8a7769d1..3ba1e0a3b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt @@ -33,33 +33,33 @@ object SettingsReaderScreen : SearchableSettings { return listOf( Preference.PreferenceItem.ListPreference( - pref = readerPref.defaultReadingMode(), - title = stringResource(MR.strings.pref_viewer_type), + preference = readerPref.defaultReadingMode(), entries = ReadingMode.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) } .toImmutableMap(), + title = stringResource(MR.strings.pref_viewer_type), ), Preference.PreferenceItem.ListPreference( - pref = readerPref.doubleTapAnimSpeed(), - title = stringResource(MR.strings.pref_double_tap_anim_speed), + preference = readerPref.doubleTapAnimSpeed(), entries = persistentMapOf( 1 to stringResource(MR.strings.double_tap_anim_speed_0), 500 to stringResource(MR.strings.double_tap_anim_speed_normal), 250 to stringResource(MR.strings.double_tap_anim_speed_fast), ), + title = stringResource(MR.strings.pref_double_tap_anim_speed), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPref.showReadingMode(), + preference = readerPref.showReadingMode(), title = stringResource(MR.strings.pref_show_reading_mode), subtitle = stringResource(MR.strings.pref_show_reading_mode_summary), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPref.showNavigationOverlayOnStart(), + preference = readerPref.showNavigationOverlayOnStart(), title = stringResource(MR.strings.pref_show_navigation_mode), subtitle = stringResource(MR.strings.pref_show_navigation_mode_summary), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPref.pageTransitions(), + preference = readerPref.pageTransitions(), title = stringResource(MR.strings.pref_page_transitions), ), getDisplayGroup(readerPreferences = readerPref), @@ -80,39 +80,39 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_display), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = readerPreferences.defaultOrientationType(), - title = stringResource(MR.strings.pref_rotation_type), + preference = readerPreferences.defaultOrientationType(), entries = ReaderOrientation.entries.drop(1) .associate { it.flagValue to stringResource(it.stringRes) } .toImmutableMap(), + title = stringResource(MR.strings.pref_rotation_type), ), Preference.PreferenceItem.ListPreference( - pref = readerPreferences.readerTheme(), - title = stringResource(MR.strings.pref_reader_theme), + preference = readerPreferences.readerTheme(), entries = persistentMapOf( 1 to stringResource(MR.strings.black_background), 2 to stringResource(MR.strings.gray_background), 0 to stringResource(MR.strings.white_background), 3 to stringResource(MR.strings.automatic_background), ), + title = stringResource(MR.strings.pref_reader_theme), ), Preference.PreferenceItem.SwitchPreference( - pref = fullscreenPref, + preference = fullscreenPref, title = stringResource(MR.strings.pref_fullscreen), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.cutoutShort(), + preference = readerPreferences.cutoutShort(), title = stringResource(MR.strings.pref_cutout_short), enabled = fullscreen && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && LocalView.current.rootWindowInsets?.displayCutout != null, // has cutout ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.keepScreenOn(), + preference = readerPreferences.keepScreenOn(), title = stringResource(MR.strings.pref_keep_screen_on), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.showPageNumber(), + preference = readerPreferences.showPageNumber(), title = stringResource(MR.strings.pref_show_page_number), ), ), @@ -135,45 +135,45 @@ object SettingsReaderScreen : SearchableSettings { title = "E-Ink", preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.flashOnPageChange(), + preference = readerPreferences.flashOnPageChange(), title = stringResource(MR.strings.pref_flash_page), subtitle = stringResource(MR.strings.pref_flash_page_summ), ), Preference.PreferenceItem.SliderPreference( value = flashMillis / ReaderPreferences.MILLI_CONVERSION, - min = 1, max = 15, + min = 1, steps = 13, title = stringResource(MR.strings.pref_flash_duration), subtitle = stringResource(MR.strings.pref_flash_duration_summary, flashMillis), + enabled = flashPageState, onValueChanged = { flashMillisPref.set(it * ReaderPreferences.MILLI_CONVERSION) true }, - enabled = flashPageState, ), Preference.PreferenceItem.SliderPreference( value = flashInterval, - min = 1, max = 10, + min = 1, steps = 8, title = stringResource(MR.strings.pref_flash_page_interval), subtitle = pluralStringResource(MR.plurals.pref_pages, flashInterval, flashInterval), + enabled = flashPageState, onValueChanged = { flashIntervalPref.set(it) true }, - enabled = flashPageState, ), Preference.PreferenceItem.ListPreference( - pref = flashColorPref, - title = stringResource(MR.strings.pref_flash_with), + preference = flashColorPref, entries = persistentMapOf( ReaderPreferences.FlashColor.BLACK to stringResource(MR.strings.pref_flash_style_black), ReaderPreferences.FlashColor.WHITE to stringResource(MR.strings.pref_flash_style_white), ReaderPreferences.FlashColor.WHITE_BLACK to stringResource(MR.strings.pref_flash_style_white_black), ), + title = stringResource(MR.strings.pref_flash_with), enabled = flashPageState, ), ), @@ -186,19 +186,19 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_reading), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.skipRead(), + preference = readerPreferences.skipRead(), title = stringResource(MR.strings.pref_skip_read_chapters), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.skipFiltered(), + preference = readerPreferences.skipFiltered(), title = stringResource(MR.strings.pref_skip_filtered_chapters), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.skipDupe(), + preference = readerPreferences.skipDupe(), title = stringResource(MR.strings.pref_skip_dupe_chapters), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.alwaysShowChapterTransition(), + preference = readerPreferences.alwaysShowChapterTransition(), title = stringResource(MR.strings.pref_always_show_chapter_transition), ), ), @@ -221,16 +221,15 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pager_viewer), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = navModePref, - title = stringResource(MR.strings.pref_viewer_nav), + preference = navModePref, entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap() .toImmutableMap(), + title = stringResource(MR.strings.pref_viewer_nav), ), Preference.PreferenceItem.ListPreference( - pref = readerPreferences.pagerNavInverted(), - title = stringResource(MR.strings.pref_read_with_tapping_inverted), + preference = readerPreferences.pagerNavInverted(), entries = persistentListOf( ReaderPreferences.TappingInvertMode.NONE, ReaderPreferences.TappingInvertMode.HORIZONTAL, @@ -239,40 +238,41 @@ object SettingsReaderScreen : SearchableSettings { ) .associateWith { stringResource(it.titleRes) } .toImmutableMap(), + title = stringResource(MR.strings.pref_read_with_tapping_inverted), enabled = navMode != 5, ), Preference.PreferenceItem.ListPreference( - pref = imageScaleTypePref, - title = stringResource(MR.strings.pref_image_scale_type), + preference = imageScaleTypePref, entries = ReaderPreferences.ImageScaleType .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap() .toImmutableMap(), + title = stringResource(MR.strings.pref_image_scale_type), ), Preference.PreferenceItem.ListPreference( - pref = readerPreferences.zoomStart(), - title = stringResource(MR.strings.pref_zoom_start), + preference = readerPreferences.zoomStart(), entries = ReaderPreferences.ZoomStart .mapIndexed { index, it -> index + 1 to stringResource(it) } .toMap() .toImmutableMap(), + title = stringResource(MR.strings.pref_zoom_start), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.cropBorders(), + preference = readerPreferences.cropBorders(), title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.landscapeZoom(), + preference = readerPreferences.landscapeZoom(), title = stringResource(MR.strings.pref_landscape_zoom), enabled = imageScaleType == 1, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.navigateToPan(), + preference = readerPreferences.navigateToPan(), title = stringResource(MR.strings.pref_navigate_pan), enabled = navMode != 5, ), Preference.PreferenceItem.SwitchPreference( - pref = dualPageSplitPref, + preference = dualPageSplitPref, title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) @@ -280,13 +280,13 @@ object SettingsReaderScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.dualPageInvertPaged(), + preference = readerPreferences.dualPageInvertPaged(), title = stringResource(MR.strings.pref_dual_page_invert), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( - pref = rotateToFitPref, + preference = rotateToFitPref, title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) @@ -294,7 +294,7 @@ object SettingsReaderScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.dualPageRotateToFitInvert(), + preference = readerPreferences.dualPageRotateToFitInvert(), title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), @@ -320,16 +320,15 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.webtoon_viewer), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - pref = navModePref, - title = stringResource(MR.strings.pref_viewer_nav), + preference = navModePref, entries = ReaderPreferences.TapZones .mapIndexed { index, it -> index to stringResource(it) } .toMap() .toImmutableMap(), + title = stringResource(MR.strings.pref_viewer_nav), ), Preference.PreferenceItem.ListPreference( - pref = readerPreferences.webtoonNavInverted(), - title = stringResource(MR.strings.pref_read_with_tapping_inverted), + preference = readerPreferences.webtoonNavInverted(), entries = persistentListOf( ReaderPreferences.TappingInvertMode.NONE, ReaderPreferences.TappingInvertMode.HORIZONTAL, @@ -338,35 +337,36 @@ object SettingsReaderScreen : SearchableSettings { ) .associateWith { stringResource(it.titleRes) } .toImmutableMap(), + title = stringResource(MR.strings.pref_read_with_tapping_inverted), enabled = navMode != 5, ), Preference.PreferenceItem.SliderPreference( value = webtoonSidePadding, + max = ReaderPreferences.WEBTOON_PADDING_MAX, + min = ReaderPreferences.WEBTOON_PADDING_MIN, title = stringResource(MR.strings.pref_webtoon_side_padding), subtitle = numberFormat.format(webtoonSidePadding / 100f), - min = ReaderPreferences.WEBTOON_PADDING_MIN, - max = ReaderPreferences.WEBTOON_PADDING_MAX, onValueChanged = { webtoonSidePaddingPref.set(it) true }, ), Preference.PreferenceItem.ListPreference( - pref = readerPreferences.readerHideThreshold(), - title = stringResource(MR.strings.pref_hide_threshold), + preference = readerPreferences.readerHideThreshold(), entries = persistentMapOf( ReaderPreferences.ReaderHideThreshold.HIGHEST to stringResource(MR.strings.pref_highest), ReaderPreferences.ReaderHideThreshold.HIGH to stringResource(MR.strings.pref_high), ReaderPreferences.ReaderHideThreshold.LOW to stringResource(MR.strings.pref_low), ReaderPreferences.ReaderHideThreshold.LOWEST to stringResource(MR.strings.pref_lowest), ), + title = stringResource(MR.strings.pref_hide_threshold), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.cropBordersWebtoon(), + preference = readerPreferences.cropBordersWebtoon(), title = stringResource(MR.strings.pref_crop_borders), ), Preference.PreferenceItem.SwitchPreference( - pref = dualPageSplitPref, + preference = dualPageSplitPref, title = stringResource(MR.strings.pref_dual_page_split), onValueChanged = { rotateToFitPref.set(false) @@ -374,13 +374,13 @@ object SettingsReaderScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.dualPageInvertWebtoon(), + preference = readerPreferences.dualPageInvertWebtoon(), title = stringResource(MR.strings.pref_dual_page_invert), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), enabled = dualPageSplit, ), Preference.PreferenceItem.SwitchPreference( - pref = rotateToFitPref, + preference = rotateToFitPref, title = stringResource(MR.strings.pref_page_rotate), onValueChanged = { dualPageSplitPref.set(false) @@ -388,16 +388,16 @@ object SettingsReaderScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.dualPageRotateToFitInvertWebtoon(), + preference = readerPreferences.dualPageRotateToFitInvertWebtoon(), title = stringResource(MR.strings.pref_page_rotate_invert), enabled = rotateToFit, ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.webtoonDoubleTapZoomEnabled(), + preference = readerPreferences.webtoonDoubleTapZoomEnabled(), title = stringResource(MR.strings.pref_double_tap_zoom), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.webtoonDisableZoomOut(), + preference = readerPreferences.webtoonDisableZoomOut(), title = stringResource(MR.strings.pref_webtoon_disable_zoom_out), ), ), @@ -412,11 +412,11 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pref_reader_navigation), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = readWithVolumeKeysPref, + preference = readWithVolumeKeysPref, title = stringResource(MR.strings.pref_read_with_volume_keys), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.readWithVolumeKeysInverted(), + preference = readerPreferences.readWithVolumeKeysInverted(), title = stringResource(MR.strings.pref_read_with_volume_keys_inverted), enabled = readWithVolumeKeys, ), @@ -430,11 +430,11 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pref_reader_actions), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.readWithLongTap(), + preference = readerPreferences.readWithLongTap(), title = stringResource(MR.strings.pref_read_with_long_tap), ), Preference.PreferenceItem.SwitchPreference( - pref = readerPreferences.folderPerManga(), + preference = readerPreferences.folderPerManga(), title = stringResource(MR.strings.pref_create_folder_per_manga), subtitle = stringResource(MR.strings.pref_create_folder_per_manga_summary), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt index 315cc41fb..4c4a5ffdb 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt @@ -50,7 +50,7 @@ object SettingsSecurityScreen : SearchableSettings { title = stringResource(MR.strings.pref_security), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = useAuthPref, + preference = useAuthPref, title = stringResource(MR.strings.lock_with_biometrics), enabled = authSupported, onValueChanged = { @@ -60,9 +60,7 @@ object SettingsSecurityScreen : SearchableSettings { }, ), Preference.PreferenceItem.ListPreference( - pref = securityPreferences.lockAppAfter(), - title = stringResource(MR.strings.lock_when_idle), - enabled = authSupported && useAuth, + preference = securityPreferences.lockAppAfter(), entries = LockAfterValues .associateWith { when (it) { @@ -72,6 +70,8 @@ object SettingsSecurityScreen : SearchableSettings { } } .toImmutableMap(), + title = stringResource(MR.strings.lock_when_idle), + enabled = authSupported && useAuth, onValueChanged = { (context as FragmentActivity).authenticate( title = context.stringResource(MR.strings.lock_when_idle), @@ -80,15 +80,15 @@ object SettingsSecurityScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( - pref = securityPreferences.hideNotificationContent(), + preference = securityPreferences.hideNotificationContent(), title = stringResource(MR.strings.hide_notification_content), ), Preference.PreferenceItem.ListPreference( - pref = securityPreferences.secureScreen(), - title = stringResource(MR.strings.secure_screen), + preference = securityPreferences.secureScreen(), entries = SecurityPreferences.SecureScreenMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), + title = stringResource(MR.strings.secure_screen), ), Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.secure_screen_summary)), ), @@ -103,12 +103,12 @@ object SettingsSecurityScreen : SearchableSettings { title = stringResource(MR.strings.pref_firebase), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - pref = privacyPreferences.crashlytics(), + preference = privacyPreferences.crashlytics(), title = stringResource(MR.strings.onboarding_permission_crashlytics), subtitle = stringResource(MR.strings.onboarding_permission_crashlytics_description), ), Preference.PreferenceItem.SwitchPreference( - pref = privacyPreferences.analytics(), + preference = privacyPreferences.analytics(), title = stringResource(MR.strings.onboarding_permission_analytics), subtitle = stringResource(MR.strings.onboarding_permission_analytics_description), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt index 2a7231112..a9c154623 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt @@ -125,51 +125,45 @@ object SettingsTrackingScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( - pref = trackPreferences.autoUpdateTrack(), + preference = trackPreferences.autoUpdateTrack(), title = stringResource(MR.strings.pref_auto_update_manga_sync), ), Preference.PreferenceItem.ListPreference( - pref = trackPreferences.autoUpdateTrackOnMarkRead(), - title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read), + preference = trackPreferences.autoUpdateTrackOnMarkRead(), entries = AutoTrackState.entries .associateWith { stringResource(it.titleRes) } .toPersistentMap(), + title = stringResource(MR.strings.pref_auto_update_manga_on_mark_read), ), Preference.PreferenceGroup( title = stringResource(MR.strings.services), preferenceItems = persistentListOf( Preference.PreferenceItem.TrackerPreference( - title = trackerManager.myAnimeList.name, tracker = trackerManager.myAnimeList, login = { context.openInBrowser(MyAnimeListApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.myAnimeList) }, ), Preference.PreferenceItem.TrackerPreference( - title = trackerManager.aniList.name, tracker = trackerManager.aniList, login = { context.openInBrowser(AnilistApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.aniList) }, ), Preference.PreferenceItem.TrackerPreference( - title = trackerManager.kitsu.name, tracker = trackerManager.kitsu, login = { dialog = LoginDialog(trackerManager.kitsu, MR.strings.email) }, logout = { dialog = LogoutDialog(trackerManager.kitsu) }, ), Preference.PreferenceItem.TrackerPreference( - title = trackerManager.mangaUpdates.name, tracker = trackerManager.mangaUpdates, login = { dialog = LoginDialog(trackerManager.mangaUpdates, MR.strings.username) }, logout = { dialog = LogoutDialog(trackerManager.mangaUpdates) }, ), Preference.PreferenceItem.TrackerPreference( - title = trackerManager.shikimori.name, tracker = trackerManager.shikimori, login = { context.openInBrowser(ShikimoriApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.shikimori) }, ), Preference.PreferenceItem.TrackerPreference( - title = trackerManager.bangumi.name, tracker = trackerManager.bangumi, login = { context.openInBrowser(BangumiApi.authUrl(), forceDefaultBrowser = true) }, logout = { dialog = LogoutDialog(trackerManager.bangumi) }, @@ -183,7 +177,6 @@ object SettingsTrackingScreen : SearchableSettings { enhancedTrackers.first .map { service -> Preference.PreferenceItem.TrackerPreference( - title = service.name, tracker = service, login = { (service as EnhancedTracker).loginNoop() }, logout = service::logout,