Rename Preference.enabled to visible to correctly reflect usage

This commit is contained in:
AntsyLich
2026-10-02 10:23:07 +06:00
parent 9409740d7e
commit 9abc830769
10 changed files with 39 additions and 39 deletions
@@ -11,7 +11,7 @@ import tachiyomi.core.common.preference.Preference as PreferenceData
sealed class Preference { sealed class Preference {
abstract val title: String abstract val title: String
abstract val enabled: Boolean abstract val visible: Boolean
sealed class PreferenceItem<T, R> : Preference() { sealed class PreferenceItem<T, R> : Preference() {
abstract val subtitle: String? abstract val subtitle: String?
@@ -24,7 +24,7 @@ sealed class Preference {
data class TextPreference( data class TextPreference(
override val title: String, override val title: String,
override val subtitle: String? = null, override val subtitle: String? = null,
override val enabled: Boolean = true, override val visible: Boolean = true,
val widget: @Composable (() -> Unit)? = null, val widget: @Composable (() -> Unit)? = null,
val onClick: (() -> Unit)? = null, val onClick: (() -> Unit)? = null,
) : PreferenceItem<String, Unit>() { ) : PreferenceItem<String, Unit>() {
@@ -39,7 +39,7 @@ sealed class Preference {
val preference: PreferenceData<Boolean>, val preference: PreferenceData<Boolean>,
override val title: String, override val title: String,
override val subtitle: String? = null, override val subtitle: String? = null,
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: Boolean) -> Boolean = { true }, override val onValueChanged: suspend (value: Boolean) -> Boolean = { true },
) : PreferenceItem<Boolean, Boolean>() { ) : PreferenceItem<Boolean, Boolean>() {
override val icon: ImageVector? = null override val icon: ImageVector? = null
@@ -55,7 +55,7 @@ sealed class Preference {
val valueText: @Composable (Int) -> String = { it.toString() }, val valueText: @Composable (Int) -> String = { it.toString() },
val valueRange: IntProgression = 0..1, val valueRange: IntProgression = 0..1,
@IntRange(from = 0) val steps: Int = with(valueRange) { ((last - first) / step) - 1 }, @IntRange(from = 0) val steps: Int = with(valueRange) { ((last - first) / step) - 1 },
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: Int) -> Boolean = { true }, override val onValueChanged: suspend (value: Int) -> Boolean = { true },
) : PreferenceItem<Int, Boolean>() { ) : PreferenceItem<Int, Boolean>() {
override val icon: ImageVector? = null override val icon: ImageVector? = null
@@ -73,7 +73,7 @@ sealed class Preference {
val subtitleProvider: @Composable (value: T, entries: Map<T, String>) -> String? = val subtitleProvider: @Composable (value: T, entries: Map<T, String>) -> String? =
{ v, e -> subtitle?.format(e[v]) }, { v, e -> subtitle?.format(e[v]) },
override val icon: ImageVector? = null, override val icon: ImageVector? = null,
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: T) -> Boolean = { true }, override val onValueChanged: suspend (value: T) -> Boolean = { true },
) : PreferenceItem<T, Boolean>() { ) : PreferenceItem<T, Boolean>() {
internal fun internalSet(value: Any) = preference.set(value as T) internal fun internalSet(value: Any) = preference.set(value as T)
@@ -95,7 +95,7 @@ sealed class Preference {
val subtitleProvider: @Composable (value: String, entries: Map<String, String>) -> String? = val subtitleProvider: @Composable (value: String, entries: Map<String, String>) -> String? =
{ v, e -> subtitle?.format(e[v]) }, { v, e -> subtitle?.format(e[v]) },
override val icon: ImageVector? = null, override val icon: ImageVector? = null,
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: String) -> Unit = {}, override val onValueChanged: suspend (value: String) -> Unit = {},
) : PreferenceItem<String, Unit>() ) : PreferenceItem<String, Unit>()
@@ -120,7 +120,7 @@ sealed class Preference {
subtitle?.format(combined) subtitle?.format(combined)
}, },
override val icon: ImageVector? = null, override val icon: ImageVector? = null,
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: Set<T>) -> Boolean = { true }, override val onValueChanged: suspend (value: Set<T>) -> Boolean = { true },
) : PreferenceItem<Set<T>, Boolean>() { ) : PreferenceItem<Set<T>, Boolean>() {
internal fun internalSet(value: Set<Any?>) = preference.set(value as Set<T>) internal fun internalSet(value: Set<Any?>) = preference.set(value as Set<T>)
@@ -138,7 +138,7 @@ sealed class Preference {
val preference: PreferenceData<String>, val preference: PreferenceData<String>,
override val title: String, override val title: String,
override val subtitle: String? = "%s", override val subtitle: String? = "%s",
override val enabled: Boolean = true, override val visible: Boolean = true,
override val onValueChanged: suspend (value: String) -> Boolean = { true }, override val onValueChanged: suspend (value: String) -> Boolean = { true },
) : PreferenceItem<String, Boolean>() { ) : PreferenceItem<String, Boolean>() {
override val icon: ImageVector? = null override val icon: ImageVector? = null
@@ -153,7 +153,7 @@ sealed class Preference {
val logout: () -> Unit, val logout: () -> Unit,
) : PreferenceItem<String, Unit>() { ) : PreferenceItem<String, Unit>() {
override val title: String = "" override val title: String = ""
override val enabled: Boolean = true override val visible: Boolean = true
override val subtitle: String? = null override val subtitle: String? = null
override val icon: ImageVector? = null override val icon: ImageVector? = null
override val onValueChanged: suspend (value: String) -> Unit = {} override val onValueChanged: suspend (value: String) -> Unit = {}
@@ -162,7 +162,7 @@ sealed class Preference {
data class InfoPreference( data class InfoPreference(
override val title: String, override val title: String,
) : PreferenceItem<String, Unit>() { ) : PreferenceItem<String, Unit>() {
override val enabled: Boolean = true override val visible: Boolean = true
override val subtitle: String? = null override val subtitle: String? = null
override val icon: ImageVector? = null override val icon: ImageVector? = null
override val onValueChanged: suspend (value: String) -> Unit = {} override val onValueChanged: suspend (value: String) -> Unit = {}
@@ -172,7 +172,7 @@ sealed class Preference {
override val title: String, override val title: String,
val content: @Composable () -> Unit, val content: @Composable () -> Unit,
) : PreferenceItem<Unit, Unit>() { ) : PreferenceItem<Unit, Unit>() {
override val enabled: Boolean = true override val visible: Boolean = true
override val subtitle: String? = null override val subtitle: String? = null
override val icon: ImageVector? = null override val icon: ImageVector? = null
override val onValueChanged: suspend (value: Unit) -> Unit = {} override val onValueChanged: suspend (value: Unit) -> Unit = {}
@@ -181,7 +181,7 @@ sealed class Preference {
data class PreferenceGroup( data class PreferenceGroup(
override val title: String, override val title: String,
override val enabled: Boolean = true, override val visible: Boolean = true,
val preferenceItems: List<PreferenceItem<out Any, out Any>>, val preferenceItems: List<PreferenceItem<out Any, out Any>>,
) : Preference() ) : Preference()
@@ -45,7 +45,7 @@ fun StatusWrapper(
highlightKey: String?, highlightKey: String?,
content: @Composable () -> Unit, content: @Composable () -> Unit,
) { ) {
val enabled = item.enabled val enabled = item.visible
val highlighted = item.title == highlightKey val highlighted = item.title == highlightKey
AnimatedVisibility( AnimatedVisibility(
visible = enabled, visible = enabled,
@@ -50,7 +50,7 @@ fun PreferenceScreen(
when (preference) { when (preference) {
// Create Preference Group // Create Preference Group
is Preference.PreferenceGroup -> { is Preference.PreferenceGroup -> {
if (!preference.enabled) return@fastForEachIndexed if (!preference.visible) return@fastForEachIndexed
item { item {
Column { Column {
@@ -267,7 +267,7 @@ object SettingsAdvancedScreen : SearchableSettings {
), ),
Preference.PreferenceItem.TextPreference( Preference.PreferenceItem.TextPreference(
title = stringResource(MR.strings.pref_reset_user_agent_string), title = stringResource(MR.strings.pref_reset_user_agent_string),
enabled = remember(userAgent) { userAgent != userAgentPref.defaultValue() }, visible = remember(userAgent) { userAgent != userAgentPref.defaultValue() },
onClick = { onClick = {
userAgentPref.delete() userAgentPref.delete()
context.toast(MR.strings.requires_app_restart) context.toast(MR.strings.requires_app_restart)
@@ -85,7 +85,7 @@ object SettingsAppearanceScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = amoledPref, preference = amoledPref,
title = stringResource(MR.strings.pref_dark_theme_pure_black), title = stringResource(MR.strings.pref_dark_theme_pure_black),
enabled = themeMode != ThemeMode.LIGHT, visible = themeMode != ThemeMode.LIGHT,
onValueChanged = { onValueChanged = {
(context as? Activity)?.let { ActivityCompat.recreate(it) } (context as? Activity)?.let { ActivityCompat.recreate(it) }
true true
@@ -162,7 +162,7 @@ object SettingsDownloadScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = downloadNewUnreadChaptersOnlyPref, preference = downloadNewUnreadChaptersOnlyPref,
title = stringResource(MR.strings.pref_download_new_unread_chapters_only), title = stringResource(MR.strings.pref_download_new_unread_chapters_only),
enabled = downloadNewChapters, visible = downloadNewChapters,
), ),
Preference.PreferenceItem.TextPreference( Preference.PreferenceItem.TextPreference(
title = stringResource(MR.strings.categories), title = stringResource(MR.strings.categories),
@@ -171,7 +171,7 @@ object SettingsDownloadScreen : SearchableSettings {
included = included, included = included,
excluded = excluded, excluded = excluded,
), ),
enabled = downloadNewChapters, visible = downloadNewChapters,
onClick = { showDialog = true }, onClick = { showDialog = true },
), ),
), ),
@@ -168,7 +168,7 @@ object SettingsLibraryScreen : SearchableSettings {
), ),
title = stringResource(MR.strings.pref_library_update_restriction), title = stringResource(MR.strings.pref_library_update_restriction),
subtitle = stringResource(MR.strings.restrictions), subtitle = stringResource(MR.strings.restrictions),
enabled = autoUpdateInterval > 0, visible = autoUpdateInterval > 0,
onValueChanged = { onValueChanged = {
// Post to event looper to allow the preference to be updated. // Post to event looper to allow the preference to be updated.
ContextCompat.getMainExecutor(context).execute { ContextCompat.getMainExecutor(context).execute {
@@ -98,7 +98,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.drawUnderCutout, preference = readerPreferences.drawUnderCutout,
title = stringResource(MR.strings.pref_cutout_short), title = stringResource(MR.strings.pref_cutout_short),
enabled = LocalView.current.hasDisplayCutout() && fullscreen, visible = LocalView.current.hasDisplayCutout() && fullscreen,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.keepScreenOn, preference = readerPreferences.keepScreenOn,
@@ -131,14 +131,14 @@ object SettingsReaderScreen : SearchableSettings {
valueRange = ReaderPreferences.MILLI_CONVERSION.let { it..it * 15 step it }, valueRange = ReaderPreferences.MILLI_CONVERSION.let { it..it * 15 step it },
title = stringResource(MR.strings.pref_flash_duration), title = stringResource(MR.strings.pref_flash_duration),
valueText = { stringResource(MR.strings.pref_flash_duration_summary, it) }, valueText = { stringResource(MR.strings.pref_flash_duration_summary, it) },
enabled = flashPageState, visible = flashPageState,
), ),
Preference.PreferenceItem.SliderPreference( Preference.PreferenceItem.SliderPreference(
preference = readerPreferences.flashPageInterval, preference = readerPreferences.flashPageInterval,
valueRange = 1..10, valueRange = 1..10,
title = stringResource(MR.strings.pref_flash_page_interval), title = stringResource(MR.strings.pref_flash_page_interval),
valueText = { pluralStringResource(MR.plurals.pref_pages, it, it) }, valueText = { pluralStringResource(MR.plurals.pref_pages, it, it) },
enabled = flashPageState, visible = flashPageState,
), ),
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
preference = flashColorPref, preference = flashColorPref,
@@ -149,7 +149,7 @@ object SettingsReaderScreen : SearchableSettings {
to stringResource(MR.strings.pref_flash_style_white_black), to stringResource(MR.strings.pref_flash_style_white_black),
), ),
title = stringResource(MR.strings.pref_flash_with), title = stringResource(MR.strings.pref_flash_with),
enabled = flashPageState, visible = flashPageState,
), ),
), ),
) )
@@ -212,7 +212,7 @@ object SettingsReaderScreen : SearchableSettings {
) )
.associateWith { stringResource(it.titleRes) }, .associateWith { stringResource(it.titleRes) },
title = stringResource(MR.strings.pref_read_with_tapping_inverted), title = stringResource(MR.strings.pref_read_with_tapping_inverted),
enabled = navMode != 5, visible = navMode != 5,
), ),
Preference.PreferenceItem.ListPreference( Preference.PreferenceItem.ListPreference(
preference = imageScaleTypePref, preference = imageScaleTypePref,
@@ -235,12 +235,12 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.landscapeZoom, preference = readerPreferences.landscapeZoom,
title = stringResource(MR.strings.pref_landscape_zoom), title = stringResource(MR.strings.pref_landscape_zoom),
enabled = imageScaleType == 1, visible = imageScaleType == 1,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.navigateToPan, preference = readerPreferences.navigateToPan,
title = stringResource(MR.strings.pref_navigate_pan), title = stringResource(MR.strings.pref_navigate_pan),
enabled = navMode != 5, visible = navMode != 5,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = dualPageSplitPref, preference = dualPageSplitPref,
@@ -254,7 +254,7 @@ object SettingsReaderScreen : SearchableSettings {
preference = readerPreferences.dualPageInvertPaged, preference = readerPreferences.dualPageInvertPaged,
title = stringResource(MR.strings.pref_dual_page_invert), title = stringResource(MR.strings.pref_dual_page_invert),
subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary),
enabled = dualPageSplit, visible = dualPageSplit,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = rotateToFitPref, preference = rotateToFitPref,
@@ -267,7 +267,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.dualPageRotateToFitInvert, preference = readerPreferences.dualPageRotateToFitInvert,
title = stringResource(MR.strings.pref_page_rotate_invert), title = stringResource(MR.strings.pref_page_rotate_invert),
enabled = rotateToFit, visible = rotateToFit,
), ),
), ),
) )
@@ -305,7 +305,7 @@ object SettingsReaderScreen : SearchableSettings {
) )
.associateWith { stringResource(it.titleRes) }, .associateWith { stringResource(it.titleRes) },
title = stringResource(MR.strings.pref_read_with_tapping_inverted), title = stringResource(MR.strings.pref_read_with_tapping_inverted),
enabled = navMode != 5, visible = navMode != 5,
), ),
Preference.PreferenceItem.SliderPreference( Preference.PreferenceItem.SliderPreference(
preference = readerPreferences.webtoonSidePadding, preference = readerPreferences.webtoonSidePadding,
@@ -341,7 +341,7 @@ object SettingsReaderScreen : SearchableSettings {
preference = readerPreferences.dualPageInvertWebtoon, preference = readerPreferences.dualPageInvertWebtoon,
title = stringResource(MR.strings.pref_dual_page_invert), title = stringResource(MR.strings.pref_dual_page_invert),
subtitle = stringResource(MR.strings.pref_dual_page_invert_summary), subtitle = stringResource(MR.strings.pref_dual_page_invert_summary),
enabled = dualPageSplit, visible = dualPageSplit,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = rotateToFitPref, preference = rotateToFitPref,
@@ -354,7 +354,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.dualPageRotateToFitInvertWebtoon, preference = readerPreferences.dualPageRotateToFitInvertWebtoon,
title = stringResource(MR.strings.pref_page_rotate_invert), title = stringResource(MR.strings.pref_page_rotate_invert),
enabled = rotateToFit, visible = rotateToFit,
), ),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.webtoonDoubleTapZoomEnabled, preference = readerPreferences.webtoonDoubleTapZoomEnabled,
@@ -385,7 +385,7 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.readWithVolumeKeysInverted, preference = readerPreferences.readWithVolumeKeysInverted,
title = stringResource(MR.strings.pref_read_with_volume_keys_inverted), title = stringResource(MR.strings.pref_read_with_volume_keys_inverted),
enabled = readWithVolumeKeys, visible = readWithVolumeKeys,
), ),
Preference.PreferenceItem.MultiSelectListPreference( Preference.PreferenceItem.MultiSelectListPreference(
preference = readerPreferences.verticalNavigator, preference = readerPreferences.verticalNavigator,
@@ -396,14 +396,14 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.verticalNavigatorOnLeft, preference = readerPreferences.verticalNavigatorOnLeft,
title = stringResource(MR.strings.pref_webtoon_vertical_navigator_on_left), title = stringResource(MR.strings.pref_webtoon_vertical_navigator_on_left),
enabled = verticalNavigator.isNotEmpty(), visible = verticalNavigator.isNotEmpty(),
), ),
Preference.PreferenceItem.SliderPreference( Preference.PreferenceItem.SliderPreference(
preference = readerPreferences.verticalNavigatorHeight, preference = readerPreferences.verticalNavigatorHeight,
valueRange = 65..100, valueRange = 65..100,
steps = 6, steps = 6,
title = stringResource(MR.strings.pref_vertical_navigator_height), title = stringResource(MR.strings.pref_vertical_navigator_height),
enabled = verticalNavigator.isNotEmpty(), visible = verticalNavigator.isNotEmpty(),
), ),
), ),
) )
@@ -170,14 +170,14 @@ private fun SearchResult(
.flatMap { settingsData -> .flatMap { settingsData ->
settingsData.contents.asSequence() settingsData.contents.asSequence()
// Only search from enabled prefs and one with valid title // Only search from enabled prefs and one with valid title
.filter { it.enabled && it.title.isNotBlank() } .filter { it.visible && it.title.isNotBlank() }
// Flatten items contained inside *enabled* PreferenceGroup // Flatten items contained inside *enabled* PreferenceGroup
.flatMap { p -> .flatMap { p ->
when (p) { when (p) {
is Preference.PreferenceGroup -> { is Preference.PreferenceGroup -> {
if (p.enabled) { if (p.visible) {
p.preferenceItems.asSequence() p.preferenceItems.asSequence()
.filter { it.enabled && it.title.isNotBlank() } .filter { it.visible && it.title.isNotBlank() }
.map { p.title to it } .map { p.title to it }
} else { } else {
emptySequence() emptySequence()
@@ -52,7 +52,7 @@ object SettingsSecurityScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
preference = useAuthPref, preference = useAuthPref,
title = stringResource(MR.strings.lock_with_biometrics), title = stringResource(MR.strings.lock_with_biometrics),
enabled = authSupported, visible = authSupported,
onValueChanged = { onValueChanged = {
(context as FragmentActivity).authenticate( (context as FragmentActivity).authenticate(
title = context.stringResource(MR.strings.lock_with_biometrics), title = context.stringResource(MR.strings.lock_with_biometrics),
@@ -70,7 +70,7 @@ object SettingsSecurityScreen : SearchableSettings {
} }
}, },
title = stringResource(MR.strings.lock_when_idle), title = stringResource(MR.strings.lock_when_idle),
enabled = authSupported && useAuth, visible = authSupported && useAuth,
onValueChanged = { onValueChanged = {
(context as FragmentActivity).authenticate( (context as FragmentActivity).authenticate(
title = context.stringResource(MR.strings.lock_when_idle), title = context.stringResource(MR.strings.lock_when_idle),