Cleanup and tweak preference widgets (mihonapp/mihon#1769)
This reverts commit ed2c214ef3
Co-authored-by: cuong-tran <cuongtran.tm@gmail.com>
(cherry picked from commit ebfbbf0741c04dc450a943d2cf77f48eed5c6dfa)
This commit is contained in:
parent
2f33754c20
commit
42748f310f
13 changed files with 320 additions and 336 deletions
|
|
@ -20,7 +20,7 @@ sealed class Preference {
|
|||
|
||||
// SY <--
|
||||
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.
|
||||
|
|
@ -28,24 +28,25 @@ sealed class Preference {
|
|||
data class TextPreference(
|
||||
override val title: String,
|
||||
override val subtitle: CharSequence? = null,
|
||||
override val icon: ImageVector? = null,
|
||||
override val enabled: Boolean = true,
|
||||
override val onValueChanged: suspend (newValue: String) -> Boolean = { true },
|
||||
|
||||
val onClick: (() -> Unit)? = null,
|
||||
) : PreferenceItem<String>()
|
||||
) : PreferenceItem<String>() {
|
||||
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<Boolean>,
|
||||
val preference: PreferenceData<Boolean>,
|
||||
override val title: String,
|
||||
override val subtitle: CharSequence? = null,
|
||||
override val icon: ImageVector? = null,
|
||||
override val enabled: Boolean = true,
|
||||
override val onValueChanged: suspend (newValue: Boolean) -> Boolean = { true },
|
||||
) : PreferenceItem<Boolean>()
|
||||
override val onValueChanged: suspend (value: Boolean) -> Boolean = { true },
|
||||
) : PreferenceItem<Boolean>() {
|
||||
override val icon: ImageVector? = null
|
||||
}
|
||||
|
||||
/**
|
||||
* A [PreferenceItem] that provides a slider to select an integer number.
|
||||
|
|
@ -55,31 +56,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<Int>()
|
||||
override val onValueChanged: suspend (value: Int) -> Boolean = { true },
|
||||
) : PreferenceItem<Int>() {
|
||||
override val icon: ImageVector? = null
|
||||
}
|
||||
|
||||
/**
|
||||
* A [PreferenceItem] that displays a list of entries as a dialog.
|
||||
*/
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
data class ListPreference<T>(
|
||||
val pref: PreferenceData<T>,
|
||||
val preference: PreferenceData<T>,
|
||||
val entries: ImmutableMap<T, String>,
|
||||
override val title: String,
|
||||
override val subtitle: String? = "%s",
|
||||
val subtitleProvider: @Composable (value: T, entries: ImmutableMap<T, String>) -> 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<T, String>,
|
||||
override val onValueChanged: suspend (value: T) -> Boolean = { true },
|
||||
) : PreferenceItem<T>() {
|
||||
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<out Any?, String>) =
|
||||
|
|
@ -91,15 +92,14 @@ sealed class Preference {
|
|||
*/
|
||||
data class BasicListPreference(
|
||||
val value: String,
|
||||
val entries: ImmutableMap<String, String>,
|
||||
override val title: String,
|
||||
override val subtitle: String? = "%s",
|
||||
val subtitleProvider: @Composable (value: String, entries: ImmutableMap<String, String>) -> 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<String, String>,
|
||||
override val onValueChanged: suspend (value: String) -> Boolean = { true },
|
||||
) : PreferenceItem<String>()
|
||||
|
||||
/**
|
||||
|
|
@ -107,61 +107,60 @@ sealed class Preference {
|
|||
* Multiple entries can be selected at the same time.
|
||||
*/
|
||||
data class MultiSelectListPreference(
|
||||
val pref: PreferenceData<Set<String>>,
|
||||
val preference: PreferenceData<Set<String>>,
|
||||
val entries: ImmutableMap<String, String>,
|
||||
override val title: String,
|
||||
override val subtitle: String? = "%s",
|
||||
val subtitleProvider: @Composable (
|
||||
value: Set<String>,
|
||||
entries: ImmutableMap<String, String>,
|
||||
) -> 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<String>, entries: ImmutableMap<String, String>) -> 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<String>) -> Boolean = { true },
|
||||
|
||||
val entries: ImmutableMap<String, String>,
|
||||
override val onValueChanged: suspend (value: Set<String>) -> Boolean = { true },
|
||||
) : PreferenceItem<Set<String>>()
|
||||
|
||||
/**
|
||||
* A [PreferenceItem] that shows a EditText in the dialog.
|
||||
*/
|
||||
data class EditTextPreference(
|
||||
val pref: PreferenceData<String>,
|
||||
val preference: PreferenceData<String>,
|
||||
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<String>()
|
||||
override val onValueChanged: suspend (value: String) -> Boolean = { true },
|
||||
) : PreferenceItem<String>() {
|
||||
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<String>() {
|
||||
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(
|
||||
override val title: String,
|
||||
) : PreferenceItem<String>() {
|
||||
override val enabled: Boolean = true
|
||||
override val subtitle: String? = null
|
||||
override val enabled: Boolean = true
|
||||
override val icon: ImageVector? = null
|
||||
override val onValueChanged: suspend (newValue: String) -> Boolean = { true }
|
||||
override val onValueChanged: suspend (value: String) -> Boolean = { true }
|
||||
}
|
||||
|
||||
data class CustomPreference(
|
||||
|
|
@ -171,7 +170,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 }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -129,15 +129,15 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
}
|
||||
},
|
||||
),
|
||||
/* SY --> Preference.PreferenceItem.SwitchPreference(
|
||||
pref = networkPreferences.verboseLogging(),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
preference = networkPreferences.verboseLogging(),
|
||||
title = stringResource(MR.strings.pref_verbose_logging),
|
||||
subtitle = stringResource(MR.strings.pref_verbose_logging_summary),
|
||||
onValueChanged = {
|
||||
context.toast(MR.strings.requires_app_restart)
|
||||
true
|
||||
},
|
||||
), SY <-- */
|
||||
),
|
||||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(MR.strings.pref_debug_info),
|
||||
onClick = { navigator.push(DebugInfoScreen()) },
|
||||
|
|
@ -157,15 +157,15 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.MultiSelectListPreference(
|
||||
pref = unsortedPreferences.appShouldAutoUpdate(),
|
||||
title = stringResource(KMR.strings.auto_update_app),
|
||||
subtitle = stringResource(MR.strings.restrictions),
|
||||
preference = unsortedPreferences.appShouldAutoUpdate(),
|
||||
entries = persistentMapOf(
|
||||
AppUpdatePolicy.DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi),
|
||||
AppUpdatePolicy.DEVICE_NETWORK_NOT_METERED to stringResource(MR.strings.network_not_metered),
|
||||
AppUpdatePolicy.DEVICE_CHARGING to stringResource(MR.strings.charging),
|
||||
AppUpdatePolicy.DISABLE_AUTO_DOWNLOAD to stringResource(KMR.strings.auto_update_app_disable_auto_download),
|
||||
),
|
||||
title = stringResource(KMR.strings.auto_update_app),
|
||||
subtitle = stringResource(MR.strings.restrictions),
|
||||
onValueChanged = {
|
||||
// Post to event looper to allow the preference to be updated.
|
||||
ContextCompat.getMainExecutor(context).execute { AppUpdateJob.setupTask(context) }
|
||||
|
|
@ -294,8 +294,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",
|
||||
|
|
@ -311,13 +310,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 {
|
||||
|
|
@ -360,7 +360,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.preloadLibraryColor(),
|
||||
preference = uiPreferences.preloadLibraryColor(),
|
||||
title = stringResource(KMR.strings.preload_library_cover_color),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -403,13 +403,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) {
|
||||
|
|
@ -421,9 +415,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),
|
||||
),
|
||||
|
|
@ -475,8 +475,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
|
||||
|
|
@ -488,6 +487,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
}
|
||||
.associateWith { stringResource(it.titleRes) }
|
||||
.toImmutableMap(),
|
||||
title = stringResource(MR.strings.ext_installer_pref),
|
||||
onValueChanged = {
|
||||
if (it == BasePreferences.ExtensionInstaller.SHIZUKU &&
|
||||
!context.isShizukuInstalled
|
||||
|
|
@ -652,40 +652,38 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.data_saver),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = sourcePreferences.dataSaver(),
|
||||
title = stringResource(SYMR.strings.data_saver),
|
||||
subtitle = stringResource(SYMR.strings.data_saver_summary),
|
||||
preference = sourcePreferences.dataSaver(),
|
||||
entries = persistentMapOf(
|
||||
DataSaver.NONE to stringResource(MR.strings.disabled),
|
||||
DataSaver.BANDWIDTH_HERO to stringResource(SYMR.strings.bandwidth_hero),
|
||||
DataSaver.WSRV_NL to stringResource(SYMR.strings.wsrv),
|
||||
),
|
||||
title = stringResource(SYMR.strings.data_saver),
|
||||
subtitle = stringResource(SYMR.strings.data_saver_summary),
|
||||
),
|
||||
Preference.PreferenceItem.EditTextPreference(
|
||||
pref = sourcePreferences.dataSaverServer(),
|
||||
preference = sourcePreferences.dataSaverServer(),
|
||||
title = stringResource(SYMR.strings.bandwidth_data_saver_server),
|
||||
subtitle = stringResource(SYMR.strings.data_saver_server_summary),
|
||||
enabled = dataSaver == DataSaver.BANDWIDTH_HERO,
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.dataSaverDownloader(),
|
||||
preference = sourcePreferences.dataSaverDownloader(),
|
||||
title = stringResource(SYMR.strings.data_saver_downloader),
|
||||
enabled = dataSaver != DataSaver.NONE,
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.dataSaverIgnoreJpeg(),
|
||||
preference = sourcePreferences.dataSaverIgnoreJpeg(),
|
||||
title = stringResource(SYMR.strings.data_saver_ignore_jpeg),
|
||||
enabled = dataSaver != DataSaver.NONE,
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.dataSaverIgnoreGif(),
|
||||
preference = sourcePreferences.dataSaverIgnoreGif(),
|
||||
title = stringResource(SYMR.strings.data_saver_ignore_gif),
|
||||
enabled = dataSaver != DataSaver.NONE,
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = sourcePreferences.dataSaverImageQuality(),
|
||||
title = stringResource(SYMR.strings.data_saver_image_quality),
|
||||
subtitle = stringResource(SYMR.strings.data_saver_image_quality_summary),
|
||||
preference = sourcePreferences.dataSaverImageQuality(),
|
||||
entries = listOf(
|
||||
"10%",
|
||||
"20%",
|
||||
|
|
@ -696,13 +694,15 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
"90%",
|
||||
"95%",
|
||||
).associateBy { it.trimEnd('%').toInt() }.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.data_saver_image_quality),
|
||||
subtitle = stringResource(SYMR.strings.data_saver_image_quality_summary),
|
||||
enabled = dataSaver != DataSaver.NONE,
|
||||
),
|
||||
kotlin.run {
|
||||
val dataSaverImageFormatJpeg by sourcePreferences.dataSaverImageFormatJpeg()
|
||||
.collectAsState()
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.dataSaverImageFormatJpeg(),
|
||||
preference = sourcePreferences.dataSaverImageFormatJpeg(),
|
||||
title = stringResource(SYMR.strings.data_saver_image_format),
|
||||
subtitle = if (dataSaverImageFormatJpeg) {
|
||||
stringResource(SYMR.strings.data_saver_image_format_summary_on)
|
||||
|
|
@ -713,7 +713,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
)
|
||||
},
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.dataSaverColorBW(),
|
||||
preference = sourcePreferences.dataSaverColorBW(),
|
||||
title = stringResource(SYMR.strings.data_saver_color_bw),
|
||||
enabled = dataSaver == DataSaver.BANDWIDTH_HERO,
|
||||
),
|
||||
|
|
@ -733,7 +733,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.developer_tools),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.isHentaiEnabled(),
|
||||
preference = unsortedPreferences.isHentaiEnabled(),
|
||||
title = stringResource(SYMR.strings.toggle_hentai_features),
|
||||
subtitle = stringResource(SYMR.strings.toggle_hentai_features_summary),
|
||||
onValueChanged = {
|
||||
|
|
@ -741,7 +741,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
},
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.enableSourceBlacklist(),
|
||||
preference = sourcePreferences.enableSourceBlacklist(),
|
||||
title = stringResource(SYMR.strings.enable_source_blacklist),
|
||||
subtitle = stringResource(
|
||||
SYMR.strings.enable_source_blacklist_summary,
|
||||
|
|
@ -749,7 +749,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = delegateSourcePreferences.delegateSources(),
|
||||
preference = delegateSourcePreferences.delegateSources(),
|
||||
title = stringResource(SYMR.strings.toggle_delegated_sources),
|
||||
subtitle = stringResource(
|
||||
SYMR.strings.toggle_delegated_sources_summary,
|
||||
|
|
@ -759,14 +759,14 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = unsortedPreferences.logLevel(),
|
||||
title = stringResource(SYMR.strings.log_level),
|
||||
subtitle = stringResource(SYMR.strings.log_level_summary),
|
||||
preference = unsortedPreferences.logLevel(),
|
||||
entries = EHLogLevel.entries.mapIndexed { index, ehLogLevel ->
|
||||
index to "${context.stringResource(ehLogLevel.nameRes)} (${
|
||||
context.stringResource(ehLogLevel.description)
|
||||
})"
|
||||
}.toMap().toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.log_level),
|
||||
subtitle = stringResource(SYMR.strings.log_level_summary),
|
||||
),
|
||||
kotlin.run {
|
||||
var enableEncryptDatabase by rememberSaveable { mutableStateOf(false) }
|
||||
|
|
@ -804,8 +804,8 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
)
|
||||
}
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
preference = securityPreferences.encryptDatabase(),
|
||||
title = stringResource(SYMR.strings.encrypt_database),
|
||||
pref = securityPreferences.encryptDatabase(),
|
||||
subtitle = stringResource(SYMR.strings.encrypt_database_subtitle),
|
||||
onValueChanged = {
|
||||
if (it) {
|
||||
|
|
|
|||
|
|
@ -102,14 +102,12 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
// KMK -->
|
||||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(KMR.strings.pref_custom_color),
|
||||
enabled = appTheme == AppTheme.CUSTOM,
|
||||
subtitle = stringResource(KMR.strings.custom_color_description),
|
||||
enabled = appTheme == AppTheme.CUSTOM,
|
||||
onClick = { navigator.push(AppCustomThemeColorPickerScreen()) },
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = uiPreferences.customThemeStyle(),
|
||||
title = stringResource(KMR.strings.pref_custom_theme_style),
|
||||
enabled = appTheme == AppTheme.CUSTOM,
|
||||
preference = uiPreferences.customThemeStyle(),
|
||||
entries = PaletteStyle.entries
|
||||
.associateWith {
|
||||
when (it) {
|
||||
|
|
@ -135,6 +133,8 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
}
|
||||
}
|
||||
.toImmutableMap(),
|
||||
title = stringResource(KMR.strings.pref_custom_theme_style),
|
||||
enabled = appTheme == AppTheme.CUSTOM,
|
||||
onValueChanged = {
|
||||
(context as? Activity)?.let { ActivityCompat.recreate(it) }
|
||||
true
|
||||
|
|
@ -142,7 +142,7 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
),
|
||||
// KMK <--
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = amoledPref,
|
||||
preference = amoledPref,
|
||||
title = stringResource(MR.strings.pref_dark_theme_pure_black),
|
||||
enabled = themeMode != ThemeMode.LIGHT,
|
||||
onValueChanged = {
|
||||
|
|
@ -167,13 +167,11 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
title = stringResource(KMR.strings.pref_manga_info),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.themeCoverBased(),
|
||||
preference = uiPreferences.themeCoverBased(),
|
||||
title = stringResource(KMR.strings.pref_theme_cover_based),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = uiPreferences.themeCoverBasedStyle(),
|
||||
title = stringResource(KMR.strings.pref_theme_cover_based_style),
|
||||
enabled = mangaInfoThemeCoverBased,
|
||||
preference = uiPreferences.themeCoverBasedStyle(),
|
||||
entries = PaletteStyle.entries
|
||||
.associateWith {
|
||||
when (it) {
|
||||
|
|
@ -199,9 +197,11 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
}
|
||||
}
|
||||
.toImmutableMap(),
|
||||
title = stringResource(KMR.strings.pref_theme_cover_based_style),
|
||||
enabled = mangaInfoThemeCoverBased,
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.usePanoramaCoverMangaInfo(),
|
||||
preference = uiPreferences.usePanoramaCoverMangaInfo(),
|
||||
title = stringResource(KMR.strings.pref_panorama_cover),
|
||||
subtitle = stringResource(KMR.strings.pref_panorama_cover_summary),
|
||||
),
|
||||
|
|
@ -232,28 +232,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,
|
||||
|
|
@ -279,42 +279,42 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
preferenceItems = persistentListOf(
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.usePanoramaCoverFlow(),
|
||||
preference = uiPreferences.usePanoramaCoverFlow(),
|
||||
title = stringResource(KMR.strings.pref_panorama_cover_flow),
|
||||
subtitle = stringResource(KMR.strings.pref_panorama_cover_flow_summary),
|
||||
),
|
||||
// KMK <--
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.expandFilters(),
|
||||
preference = uiPreferences.expandFilters(),
|
||||
title = stringResource(SYMR.strings.toggle_expand_search_filters),
|
||||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.expandRelatedMangas(),
|
||||
preference = uiPreferences.expandRelatedMangas(),
|
||||
title = stringResource(KMR.strings.pref_expand_related_mangas),
|
||||
subtitle = stringResource(KMR.strings.pref_expand_related_mangas_summary),
|
||||
enabled = sourcePreferences.relatedMangas().get(),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.relatedMangasInOverflow(),
|
||||
preference = uiPreferences.relatedMangasInOverflow(),
|
||||
enabled = !relatedMangasInOverflow,
|
||||
title = stringResource(KMR.strings.put_related_mangas_in_overflow),
|
||||
subtitle = stringResource(KMR.strings.put_related_mangas_in_overflow_summary),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.showHomeOnRelatedMangas(),
|
||||
preference = uiPreferences.showHomeOnRelatedMangas(),
|
||||
title = stringResource(KMR.strings.pref_show_home_on_related_mangas),
|
||||
subtitle = stringResource(KMR.strings.pref_show_home_on_related_mangas_summary),
|
||||
enabled = sourcePreferences.relatedMangas().get(),
|
||||
),
|
||||
// KMK <--
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.recommendsInOverflow(),
|
||||
preference = uiPreferences.recommendsInOverflow(),
|
||||
title = stringResource(SYMR.strings.put_recommends_in_overflow),
|
||||
subtitle = stringResource(SYMR.strings.put_recommends_in_overflow_summary),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.mergeInOverflow(),
|
||||
preference = uiPreferences.mergeInOverflow(),
|
||||
title = stringResource(SYMR.strings.put_merge_in_overflow),
|
||||
subtitle = stringResource(SYMR.strings.put_merge_in_overflow_summary),
|
||||
),
|
||||
|
|
@ -347,15 +347,15 @@ object SettingsAppearanceScreen : SearchableSettings {
|
|||
stringResource(SYMR.strings.pref_category_navbar),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.showNavUpdates(),
|
||||
preference = uiPreferences.showNavUpdates(),
|
||||
title = stringResource(SYMR.strings.pref_hide_updates_button),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.showNavHistory(),
|
||||
preference = uiPreferences.showNavHistory(),
|
||||
title = stringResource(SYMR.strings.pref_hide_history_button),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.bottomBarLabels(),
|
||||
preference = uiPreferences.bottomBarLabels(),
|
||||
title = stringResource(SYMR.strings.pref_show_bottom_bar_labels),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ object SettingsBrowseScreen : SearchableSettings {
|
|||
preferenceItems = persistentListOf(
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.relatedMangas(),
|
||||
preference = sourcePreferences.relatedMangas(),
|
||||
title = stringResource(KMR.strings.pref_source_related_mangas),
|
||||
subtitle = stringResource(KMR.strings.pref_source_related_mangas_summary),
|
||||
),
|
||||
|
|
@ -76,17 +76,17 @@ object SettingsBrowseScreen : SearchableSettings {
|
|||
)
|
||||
},
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.sourcesTabCategoriesFilter(),
|
||||
preference = sourcePreferences.sourcesTabCategoriesFilter(),
|
||||
title = stringResource(SYMR.strings.pref_source_source_filtering),
|
||||
subtitle = stringResource(SYMR.strings.pref_source_source_filtering_summery),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.useNewSourceNavigation(),
|
||||
preference = uiPreferences.useNewSourceNavigation(),
|
||||
title = stringResource(SYMR.strings.pref_source_navigation),
|
||||
subtitle = stringResource(SYMR.strings.pref_source_navigation_summery),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.allowLocalSourceHiddenFolders(),
|
||||
preference = unsortedPreferences.allowLocalSourceHiddenFolders(),
|
||||
title = stringResource(SYMR.strings.pref_local_source_hidden_folders),
|
||||
subtitle = stringResource(SYMR.strings.pref_local_source_hidden_folders_summery),
|
||||
),
|
||||
|
|
@ -96,18 +96,18 @@ object SettingsBrowseScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.feed),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.hideFeedTab(),
|
||||
preference = uiPreferences.hideFeedTab(),
|
||||
title = stringResource(SYMR.strings.pref_hide_feed),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = uiPreferences.feedTabInFront(),
|
||||
preference = uiPreferences.feedTabInFront(),
|
||||
title = stringResource(SYMR.strings.pref_feed_position),
|
||||
subtitle = stringResource(SYMR.strings.pref_feed_position_summery),
|
||||
enabled = hideFeedTab.not(),
|
||||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = sourcePreferences.hideInLibraryFeedItems(),
|
||||
preference = sourcePreferences.hideInLibraryFeedItems(),
|
||||
title = stringResource(MR.strings.pref_hide_in_library_items),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -118,7 +118,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(
|
||||
|
|
@ -134,7 +134,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 = {
|
||||
|
|
|
|||
|
|
@ -257,8 +257,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),
|
||||
1 to stringResource(MR.strings.update_1hour),
|
||||
|
|
@ -269,6 +268,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
|
||||
|
|
@ -280,7 +280,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = backupPreferences.showRestoringProgressBanner(),
|
||||
preference = backupPreferences.showRestoringProgressBanner(),
|
||||
title = stringResource(KMR.strings.pref_show_restoring_progress_banner),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -358,7 +358,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||
),
|
||||
// SY <--
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = libraryPreferences.autoClearChapterCache(),
|
||||
preference = libraryPreferences.autoClearChapterCache(),
|
||||
title = stringResource(MR.strings.pref_auto_clear_chapter_cache),
|
||||
),
|
||||
),
|
||||
|
|
@ -372,13 +372,13 @@ object SettingsDataScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.pref_sync_service_category),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = syncPreferences.syncService(),
|
||||
title = stringResource(SYMR.strings.pref_sync_service),
|
||||
preference = syncPreferences.syncService(),
|
||||
entries = persistentMapOf(
|
||||
SyncManager.SyncService.NONE.value to stringResource(MR.strings.off),
|
||||
SyncManager.SyncService.SYNCYOMI.value to stringResource(SYMR.strings.syncyomi),
|
||||
SyncManager.SyncService.GOOGLE_DRIVE.value to stringResource(SYMR.strings.google_drive),
|
||||
),
|
||||
title = stringResource(SYMR.strings.pref_sync_service),
|
||||
onValueChanged = { true },
|
||||
),
|
||||
),
|
||||
|
|
@ -430,7 +430,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||
getAutomaticSyncGroup(syncPreferences),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = syncPreferences.showSyncingProgressBanner(),
|
||||
preference = syncPreferences.showSyncingProgressBanner(),
|
||||
title = stringResource(KMR.strings.pref_show_syncing_progress_banner),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -523,9 +523,9 @@ object SettingsDataScreen : SearchableSettings {
|
|||
val scope = rememberCoroutineScope()
|
||||
return listOf(
|
||||
Preference.PreferenceItem.EditTextPreference(
|
||||
preference = syncPreferences.clientHost(),
|
||||
title = stringResource(SYMR.strings.pref_sync_host),
|
||||
subtitle = stringResource(SYMR.strings.pref_sync_host_summ),
|
||||
pref = syncPreferences.clientHost(),
|
||||
onValueChanged = { newValue ->
|
||||
scope.launch {
|
||||
// Trim spaces at the beginning and end, then remove trailing slash if present
|
||||
|
|
@ -537,9 +537,9 @@ object SettingsDataScreen : SearchableSettings {
|
|||
},
|
||||
),
|
||||
Preference.PreferenceItem.EditTextPreference(
|
||||
preference = syncPreferences.clientAPIKey(),
|
||||
title = stringResource(SYMR.strings.pref_sync_api_key),
|
||||
subtitle = stringResource(SYMR.strings.pref_sync_api_key_summ),
|
||||
pref = syncPreferences.clientAPIKey(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
@ -586,8 +586,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.pref_sync_automatic_category),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = syncIntervalPref,
|
||||
title = stringResource(SYMR.strings.pref_sync_interval),
|
||||
preference = syncIntervalPref,
|
||||
entries = persistentMapOf(
|
||||
0 to stringResource(MR.strings.off),
|
||||
30 to stringResource(SYMR.strings.update_30min),
|
||||
|
|
@ -599,6 +598,7 @@ object SettingsDataScreen : SearchableSettings {
|
|||
2880 to stringResource(MR.strings.update_48hour),
|
||||
10080 to stringResource(MR.strings.update_weekly),
|
||||
),
|
||||
title = stringResource(SYMR.strings.pref_sync_interval),
|
||||
onValueChanged = {
|
||||
SyncDataJob.setupTask(context, it)
|
||||
true
|
||||
|
|
|
|||
|
|
@ -41,15 +41,15 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
val downloadPreferences = remember { Injekt.get<DownloadPreferences>() }
|
||||
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),
|
||||
),
|
||||
|
|
@ -77,12 +77,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),
|
||||
|
|
@ -91,9 +90,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(
|
||||
|
|
@ -110,19 +110,11 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
categories: () -> List<Category>,
|
||||
): Preference.PreferenceItem.MultiSelectListPreference {
|
||||
return Preference.PreferenceItem.MultiSelectListPreference(
|
||||
pref = downloadPreferences.removeExcludeCategories(),
|
||||
title = stringResource(MR.strings.pref_remove_exclude_categories),
|
||||
subtitleProvider = { v, e ->
|
||||
val combined = remember(v, e) {
|
||||
v.map { e[it] }
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.joinToString()
|
||||
} ?: stringResource(MR.strings.none)
|
||||
"%s".format(combined)
|
||||
},
|
||||
preference = downloadPreferences.removeExcludeCategories(),
|
||||
entries = categories()
|
||||
.associate { it.id.toString() to it.visualName }
|
||||
.toImmutableMap(),
|
||||
title = stringResource(MR.strings.pref_remove_exclude_categories),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -162,11 +154,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,
|
||||
),
|
||||
|
|
@ -177,8 +169,8 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
included = included,
|
||||
excluded = excluded,
|
||||
),
|
||||
onClick = { showDialog = true },
|
||||
enabled = downloadNewChapters,
|
||||
onClick = { showDialog = true },
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
@ -192,8 +184,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) {
|
||||
|
|
@ -203,6 +194,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
}
|
||||
}
|
||||
.toImmutableMap(),
|
||||
title = stringResource(MR.strings.auto_download_while_reading),
|
||||
),
|
||||
Preference.PreferenceItem.InfoPreference(stringResource(MR.strings.download_ahead_info)),
|
||||
),
|
||||
|
|
@ -218,8 +210,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
title = stringResource(KMR.strings.download_cache_renew_interval),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = downloadPreferences.downloadCacheRenewInterval(),
|
||||
title = stringResource(KMR.strings.download_cache_renew_interval),
|
||||
preference = downloadPreferences.downloadCacheRenewInterval(),
|
||||
entries = persistentMapOf(
|
||||
-1 to stringResource(KMR.strings.download_cache_renew_interval_manual),
|
||||
1 to stringResource(KMR.strings.download_cache_renew_interval_1hour),
|
||||
|
|
@ -228,6 +219,7 @@ object SettingsDownloadScreen : SearchableSettings {
|
|||
12 to stringResource(KMR.strings.download_cache_renew_interval_12hour),
|
||||
24 to stringResource(KMR.strings.download_cache_renew_interval_24hour),
|
||||
),
|
||||
title = stringResource(KMR.strings.download_cache_renew_interval),
|
||||
),
|
||||
Preference.PreferenceItem.InfoPreference(stringResource(KMR.strings.download_cache_renew_interval_info)),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
val context = LocalContext.current
|
||||
val value by unsortedPreferences.enableExhentai().collectAsState()
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.enableExhentai(),
|
||||
preference = unsortedPreferences.enableExhentai(),
|
||||
title = stringResource(SYMR.strings.enable_exhentai),
|
||||
subtitle = if (!value) {
|
||||
stringResource(SYMR.strings.requires_login)
|
||||
|
|
@ -220,13 +220,13 @@ object SettingsEhScreen : SearchableSettings {
|
|||
unsortedPreferences: UnsortedPreferences,
|
||||
): Preference.PreferenceItem.ListPreference<Int> {
|
||||
return Preference.PreferenceItem.ListPreference(
|
||||
pref = unsortedPreferences.useHentaiAtHome(),
|
||||
title = stringResource(SYMR.strings.use_hentai_at_home),
|
||||
subtitle = stringResource(SYMR.strings.use_hentai_at_home_summary),
|
||||
preference = unsortedPreferences.useHentaiAtHome(),
|
||||
entries = persistentMapOf(
|
||||
0 to stringResource(SYMR.strings.use_hentai_at_home_option_1),
|
||||
1 to stringResource(SYMR.strings.use_hentai_at_home_option_2),
|
||||
),
|
||||
title = stringResource(SYMR.strings.use_hentai_at_home),
|
||||
subtitle = stringResource(SYMR.strings.use_hentai_at_home_summary),
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
|
@ -238,7 +238,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
): Preference.PreferenceItem.SwitchPreference {
|
||||
val value by unsortedPreferences.useJapaneseTitle().collectAsState()
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.useJapaneseTitle(),
|
||||
preference = unsortedPreferences.useJapaneseTitle(),
|
||||
title = stringResource(SYMR.strings.show_japanese_titles),
|
||||
subtitle = if (value) {
|
||||
stringResource(SYMR.strings.show_japanese_titles_option_1)
|
||||
|
|
@ -256,7 +256,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
): Preference.PreferenceItem.SwitchPreference {
|
||||
val value by unsortedPreferences.exhUseOriginalImages().collectAsState()
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.exhUseOriginalImages(),
|
||||
preference = unsortedPreferences.exhUseOriginalImages(),
|
||||
title = stringResource(SYMR.strings.use_original_images),
|
||||
subtitle = if (value) {
|
||||
stringResource(SYMR.strings.use_original_images_on)
|
||||
|
|
@ -273,6 +273,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
return Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.watched_tags),
|
||||
subtitle = stringResource(SYMR.strings.watched_tags_summary),
|
||||
enabled = exhentaiEnabled,
|
||||
onClick = {
|
||||
startActivity(
|
||||
context,
|
||||
|
|
@ -284,7 +285,6 @@ object SettingsEhScreen : SearchableSettings {
|
|||
null,
|
||||
)
|
||||
},
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -374,10 +374,10 @@ object SettingsEhScreen : SearchableSettings {
|
|||
return Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.tag_filtering_threshold),
|
||||
subtitle = stringResource(SYMR.strings.tag_filtering_threshhold_summary, value),
|
||||
enabled = exhentaiEnabled,
|
||||
onClick = {
|
||||
dialogOpen = true
|
||||
},
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -404,10 +404,10 @@ object SettingsEhScreen : SearchableSettings {
|
|||
return Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.tag_watching_threshhold),
|
||||
subtitle = stringResource(SYMR.strings.tag_watching_threshhold_summary, value),
|
||||
enabled = exhentaiEnabled,
|
||||
onClick = {
|
||||
dialogOpen = true
|
||||
},
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -624,10 +624,10 @@ object SettingsEhScreen : SearchableSettings {
|
|||
return Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.language_filtering),
|
||||
subtitle = stringResource(SYMR.strings.language_filtering_summary),
|
||||
enabled = exhentaiEnabled,
|
||||
onClick = {
|
||||
dialogOpen = true
|
||||
},
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -790,10 +790,10 @@ object SettingsEhScreen : SearchableSettings {
|
|||
return Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.frong_page_categories),
|
||||
subtitle = stringResource(SYMR.strings.fromt_page_categories_summary),
|
||||
enabled = exhentaiEnabled,
|
||||
onClick = {
|
||||
dialogOpen = true
|
||||
},
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -803,7 +803,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
unsortedPreferences: UnsortedPreferences,
|
||||
): Preference.PreferenceItem.SwitchPreference {
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.exhWatchedListDefaultState(),
|
||||
preference = unsortedPreferences.exhWatchedListDefaultState(),
|
||||
title = stringResource(SYMR.strings.watched_list_default),
|
||||
subtitle = stringResource(SYMR.strings.watched_list_state_summary),
|
||||
enabled = exhentaiEnabled,
|
||||
|
|
@ -816,9 +816,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
unsortedPreferences: UnsortedPreferences,
|
||||
): Preference.PreferenceItem.ListPreference<String> {
|
||||
return Preference.PreferenceItem.ListPreference(
|
||||
pref = unsortedPreferences.imageQuality(),
|
||||
title = stringResource(SYMR.strings.eh_image_quality_summary),
|
||||
subtitle = stringResource(SYMR.strings.eh_image_quality),
|
||||
preference = unsortedPreferences.imageQuality(),
|
||||
entries = persistentMapOf(
|
||||
"auto" to stringResource(SYMR.strings.eh_image_quality_auto),
|
||||
"ovrs_2400" to stringResource(SYMR.strings.eh_image_quality_2400),
|
||||
|
|
@ -827,6 +825,8 @@ object SettingsEhScreen : SearchableSettings {
|
|||
"med" to stringResource(SYMR.strings.eh_image_quality_980),
|
||||
"low" to stringResource(SYMR.strings.eh_image_quality_780),
|
||||
),
|
||||
title = stringResource(SYMR.strings.eh_image_quality_summary),
|
||||
subtitle = stringResource(SYMR.strings.eh_image_quality),
|
||||
enabled = exhentaiEnabled,
|
||||
)
|
||||
}
|
||||
|
|
@ -834,7 +834,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
@Composable
|
||||
fun enhancedEhentaiView(unsortedPreferences: UnsortedPreferences): Preference.PreferenceItem.SwitchPreference {
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.enhancedEHentaiView(),
|
||||
preference = unsortedPreferences.enhancedEHentaiView(),
|
||||
title = stringResource(SYMR.strings.pref_enhanced_e_hentai_view),
|
||||
subtitle = stringResource(SYMR.strings.pref_enhanced_e_hentai_view_summary),
|
||||
)
|
||||
|
|
@ -843,7 +843,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
@Composable
|
||||
fun readOnlySync(unsortedPreferences: UnsortedPreferences): Preference.PreferenceItem.SwitchPreference {
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.exhReadOnlySync(),
|
||||
preference = unsortedPreferences.exhReadOnlySync(),
|
||||
title = stringResource(SYMR.strings.disable_favorites_uploading),
|
||||
subtitle = stringResource(SYMR.strings.disable_favorites_uploading_summary),
|
||||
)
|
||||
|
|
@ -868,7 +868,7 @@ object SettingsEhScreen : SearchableSettings {
|
|||
@Composable
|
||||
fun lenientSync(unsortedPreferences: UnsortedPreferences): Preference.PreferenceItem.SwitchPreference {
|
||||
return Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.exhLenientSync(),
|
||||
preference = unsortedPreferences.exhLenientSync(),
|
||||
title = stringResource(SYMR.strings.ignore_sync_errors),
|
||||
subtitle = stringResource(SYMR.strings.ignore_sync_errors_summary),
|
||||
)
|
||||
|
|
@ -943,7 +943,17 @@ object SettingsEhScreen : SearchableSettings {
|
|||
val value by unsortedPreferences.exhAutoUpdateFrequency().collectAsState()
|
||||
val context = LocalContext.current
|
||||
return Preference.PreferenceItem.ListPreference(
|
||||
pref = unsortedPreferences.exhAutoUpdateFrequency(),
|
||||
preference = unsortedPreferences.exhAutoUpdateFrequency(),
|
||||
entries = persistentMapOf(
|
||||
0 to stringResource(SYMR.strings.time_between_batches_never),
|
||||
1 to stringResource(SYMR.strings.time_between_batches_1_hour),
|
||||
2 to stringResource(SYMR.strings.time_between_batches_2_hours),
|
||||
3 to stringResource(SYMR.strings.time_between_batches_3_hours),
|
||||
6 to stringResource(SYMR.strings.time_between_batches_6_hours),
|
||||
12 to stringResource(SYMR.strings.time_between_batches_12_hours),
|
||||
24 to stringResource(SYMR.strings.time_between_batches_24_hours),
|
||||
48 to stringResource(SYMR.strings.time_between_batches_48_hours),
|
||||
),
|
||||
title = stringResource(SYMR.strings.time_between_batches),
|
||||
subtitle = if (value == 0) {
|
||||
stringResource(SYMR.strings.time_between_batches_summary_1, stringResource(MR.strings.app_name))
|
||||
|
|
@ -955,16 +965,6 @@ object SettingsEhScreen : SearchableSettings {
|
|||
EHentaiUpdateWorkerConstants.UPDATES_PER_ITERATION,
|
||||
)
|
||||
},
|
||||
entries = persistentMapOf(
|
||||
0 to stringResource(SYMR.strings.time_between_batches_never),
|
||||
1 to stringResource(SYMR.strings.time_between_batches_1_hour),
|
||||
2 to stringResource(SYMR.strings.time_between_batches_2_hours),
|
||||
3 to stringResource(SYMR.strings.time_between_batches_3_hours),
|
||||
6 to stringResource(SYMR.strings.time_between_batches_6_hours),
|
||||
12 to stringResource(SYMR.strings.time_between_batches_12_hours),
|
||||
24 to stringResource(SYMR.strings.time_between_batches_24_hours),
|
||||
48 to stringResource(SYMR.strings.time_between_batches_48_hours),
|
||||
),
|
||||
onValueChanged = { interval ->
|
||||
EHentaiUpdateWorker.scheduleBackground(context, prefInterval = interval)
|
||||
true
|
||||
|
|
@ -979,7 +979,11 @@ object SettingsEhScreen : SearchableSettings {
|
|||
val value by unsortedPreferences.exhAutoUpdateRequirements().collectAsState()
|
||||
val context = LocalContext.current
|
||||
return Preference.PreferenceItem.MultiSelectListPreference(
|
||||
pref = unsortedPreferences.exhAutoUpdateRequirements(),
|
||||
preference = unsortedPreferences.exhAutoUpdateRequirements(),
|
||||
entries = persistentMapOf(
|
||||
DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi),
|
||||
DEVICE_CHARGING to stringResource(MR.strings.charging),
|
||||
),
|
||||
title = stringResource(SYMR.strings.auto_update_restrictions),
|
||||
subtitle = remember(value) {
|
||||
context.stringResource(
|
||||
|
|
@ -998,10 +1002,6 @@ object SettingsEhScreen : SearchableSettings {
|
|||
.joinToString(),
|
||||
)
|
||||
},
|
||||
entries = persistentMapOf(
|
||||
DEVICE_ONLY_ON_WIFI to stringResource(MR.strings.connected_to_wifi),
|
||||
DEVICE_CHARGING to stringResource(MR.strings.charging),
|
||||
),
|
||||
onValueChanged = { restrictions ->
|
||||
EHentaiUpdateWorker.scheduleBackground(context, prefRestrictions = restrictions)
|
||||
true
|
||||
|
|
|
|||
|
|
@ -102,12 +102,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) {
|
||||
|
|
@ -159,8 +159,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),
|
||||
6 to stringResource(MR.strings.update_6hour),
|
||||
|
|
@ -170,21 +169,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) }
|
||||
|
|
@ -202,45 +202,45 @@ object SettingsLibraryScreen : SearchableSettings {
|
|||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = libraryPreferences.groupLibraryUpdateType(),
|
||||
title = stringResource(SYMR.strings.library_group_updates),
|
||||
preference = libraryPreferences.groupLibraryUpdateType(),
|
||||
entries = persistentMapOf(
|
||||
GroupLibraryMode.GLOBAL to stringResource(SYMR.strings.library_group_updates_global),
|
||||
GroupLibraryMode.ALL_BUT_UNGROUPED to
|
||||
stringResource(SYMR.strings.library_group_updates_all_but_ungrouped),
|
||||
GroupLibraryMode.ALL to stringResource(SYMR.strings.library_group_updates_all),
|
||||
),
|
||||
title = stringResource(SYMR.strings.library_group_updates),
|
||||
),
|
||||
// SY <--
|
||||
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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = libraryPreferences.libraryReadDuplicateChapters(),
|
||||
preference = libraryPreferences.libraryReadDuplicateChapters(),
|
||||
title = stringResource(SYMR.strings.pref_library_mark_duplicate_chapters),
|
||||
subtitle = stringResource(SYMR.strings.pref_library_mark_duplicate_chapters_summary),
|
||||
),
|
||||
// SY <--
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = libraryPreferences.showUpdatingProgressBanner(),
|
||||
preference = libraryPreferences.showUpdatingProgressBanner(),
|
||||
title = stringResource(KMR.strings.pref_show_updating_progress_banner),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -256,8 +256,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),
|
||||
|
|
@ -268,10 +267,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),
|
||||
|
|
@ -282,6 +281,7 @@ object SettingsLibraryScreen : SearchableSettings {
|
|||
LibraryPreferences.ChapterSwipeAction.Download to
|
||||
stringResource(MR.strings.action_download),
|
||||
),
|
||||
title = stringResource(MR.strings.pref_chapter_swipe_end),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
@ -314,7 +314,7 @@ object SettingsLibraryScreen : SearchableSettings {
|
|||
enabled = skipPreMigration || migrationSources.isNotEmpty(),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = unsortedPreferences.skipPreMigration(),
|
||||
preference = unsortedPreferences.skipPreMigration(),
|
||||
title = stringResource(SYMR.strings.skip_pre_migration),
|
||||
subtitle = stringResource(SYMR.strings.pref_skip_pre_migration_summary),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -179,12 +179,12 @@ object SettingsMangadexScreen : SearchableSettings {
|
|||
sourcePreferences: SourcePreferences,
|
||||
): Preference.PreferenceItem.ListPreference<String> {
|
||||
return Preference.PreferenceItem.ListPreference(
|
||||
pref = unsortedPreferences.preferredMangaDexId(),
|
||||
title = stringResource(SYMR.strings.mangadex_preffered_source),
|
||||
subtitle = stringResource(SYMR.strings.mangadex_preffered_source_summary),
|
||||
preference = unsortedPreferences.preferredMangaDexId(),
|
||||
entries = MdUtil.getEnabledMangaDexs(sourcePreferences)
|
||||
.associate { it.id.toString() to it.toString() }
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.mangadex_preffered_source),
|
||||
subtitle = stringResource(SYMR.strings.mangadex_preffered_source_summary),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,45 +40,45 @@ 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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPref.forceHorizontalSeekbar(),
|
||||
preference = readerPref.forceHorizontalSeekbar(),
|
||||
title = stringResource(SYMR.strings.pref_force_horz_seekbar),
|
||||
subtitle = stringResource(SYMR.strings.pref_force_horz_seekbar_summary),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPref.landscapeVerticalSeekbar(),
|
||||
preference = readerPref.landscapeVerticalSeekbar(),
|
||||
title = stringResource(SYMR.strings.pref_show_vert_seekbar_landscape),
|
||||
subtitle = stringResource(SYMR.strings.pref_show_vert_seekbar_landscape_summary),
|
||||
enabled = !forceHorizontalSeekbar,
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPref.leftVerticalSeekbar(),
|
||||
preference = readerPref.leftVerticalSeekbar(),
|
||||
title = stringResource(SYMR.strings.pref_left_handed_vertical_seekbar),
|
||||
subtitle = stringResource(SYMR.strings.pref_left_handed_vertical_seekbar_summary),
|
||||
enabled = !forceHorizontalSeekbar,
|
||||
|
|
@ -86,7 +86,7 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
// SY <--
|
||||
/* SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPref.pageTransitions(),
|
||||
preference = readerPref.pageTransitions(),
|
||||
title = stringResource(MR.strings.pref_page_transitions),
|
||||
),
|
||||
SY <-- */
|
||||
|
|
@ -115,39 +115,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),
|
||||
),
|
||||
),
|
||||
|
|
@ -170,45 +170,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,
|
||||
),
|
||||
),
|
||||
|
|
@ -221,26 +221,26 @@ 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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.markReadDupe(),
|
||||
preference = readerPreferences.markReadDupe(),
|
||||
title = stringResource(SYMR.strings.pref_mark_read_dupe_chapters),
|
||||
subtitle = stringResource(SYMR.strings.pref_mark_read_dupe_chapters_summary),
|
||||
),
|
||||
// SY <--
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.alwaysShowChapterTransition(),
|
||||
preference = readerPreferences.alwaysShowChapterTransition(),
|
||||
title = stringResource(MR.strings.pref_always_show_chapter_transition),
|
||||
),
|
||||
),
|
||||
|
|
@ -263,16 +263,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,
|
||||
|
|
@ -281,46 +280,47 @@ 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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.pageTransitionsPager(),
|
||||
preference = readerPreferences.pageTransitionsPager(),
|
||||
title = stringResource(MR.strings.pref_page_transitions),
|
||||
),
|
||||
// SY <--
|
||||
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)
|
||||
|
|
@ -328,13 +328,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)
|
||||
|
|
@ -342,7 +342,7 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
},
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.dualPageRotateToFitInvert(),
|
||||
preference = readerPreferences.dualPageRotateToFitInvert(),
|
||||
title = stringResource(MR.strings.pref_page_rotate_invert),
|
||||
enabled = rotateToFit,
|
||||
),
|
||||
|
|
@ -368,16 +368,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,
|
||||
|
|
@ -386,35 +385,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)
|
||||
|
|
@ -422,13 +422,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)
|
||||
|
|
@ -436,21 +436,21 @@ 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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.pageTransitionsWebtoon(),
|
||||
preference = readerPreferences.pageTransitionsWebtoon(),
|
||||
title = stringResource(MR.strings.pref_page_transitions),
|
||||
),
|
||||
// SY <--
|
||||
|
|
@ -465,12 +465,12 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
title = stringResource(MR.strings.vertical_plus_viewer),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.continuousVerticalTappingByPage(),
|
||||
preference = readerPreferences.continuousVerticalTappingByPage(),
|
||||
title = stringResource(SYMR.strings.tap_scroll_page),
|
||||
subtitle = stringResource(SYMR.strings.tap_scroll_page_summary),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.cropBordersContinuousVertical(),
|
||||
preference = readerPreferences.cropBordersContinuousVertical(),
|
||||
title = stringResource(MR.strings.pref_crop_borders),
|
||||
),
|
||||
),
|
||||
|
|
@ -486,11 +486,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,
|
||||
),
|
||||
|
|
@ -504,11 +504,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),
|
||||
),
|
||||
|
|
@ -523,9 +523,7 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.page_downloading),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.preloadSize(),
|
||||
title = stringResource(SYMR.strings.reader_preload_amount),
|
||||
subtitle = stringResource(SYMR.strings.reader_preload_amount_summary),
|
||||
preference = readerPreferences.preloadSize(),
|
||||
entries = persistentMapOf(
|
||||
4 to stringResource(SYMR.strings.reader_preload_amount_4_pages),
|
||||
6 to stringResource(SYMR.strings.reader_preload_amount_6_pages),
|
||||
|
|
@ -536,15 +534,17 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
16 to stringResource(SYMR.strings.reader_preload_amount_16_pages),
|
||||
20 to stringResource(SYMR.strings.reader_preload_amount_20_pages),
|
||||
),
|
||||
title = stringResource(SYMR.strings.reader_preload_amount),
|
||||
subtitle = stringResource(SYMR.strings.reader_preload_amount_summary),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.readerThreads(),
|
||||
preference = readerPreferences.readerThreads(),
|
||||
title = stringResource(SYMR.strings.download_threads),
|
||||
subtitle = stringResource(SYMR.strings.download_threads_summary),
|
||||
entries = List(5) { it }.associateWith { it.toString() }.toImmutableMap(),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.cacheSize(),
|
||||
preference = readerPreferences.cacheSize(),
|
||||
title = stringResource(SYMR.strings.reader_cache_size),
|
||||
subtitle = stringResource(SYMR.strings.reader_cache_size_summary),
|
||||
entries = persistentMapOf(
|
||||
|
|
@ -567,7 +567,7 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.aggressivePageLoading(),
|
||||
preference = readerPreferences.aggressivePageLoading(),
|
||||
title = stringResource(SYMR.strings.aggressively_load_pages),
|
||||
subtitle = stringResource(SYMR.strings.aggressively_load_pages_summary),
|
||||
),
|
||||
|
|
@ -582,58 +582,58 @@ object SettingsReaderScreen : SearchableSettings {
|
|||
title = stringResource(SYMR.strings.pref_category_fork),
|
||||
preferenceItems = persistentListOf(
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.readerInstantRetry(),
|
||||
preference = readerPreferences.readerInstantRetry(),
|
||||
title = stringResource(SYMR.strings.skip_queue_on_retry),
|
||||
subtitle = stringResource(SYMR.strings.skip_queue_on_retry_summary),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.preserveReadingPosition(),
|
||||
preference = readerPreferences.preserveReadingPosition(),
|
||||
title = stringResource(SYMR.strings.preserve_reading_position),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.useAutoWebtoon(),
|
||||
preference = readerPreferences.useAutoWebtoon(),
|
||||
title = stringResource(SYMR.strings.auto_webtoon_mode),
|
||||
subtitle = stringResource(SYMR.strings.auto_webtoon_mode_summary),
|
||||
),
|
||||
Preference.PreferenceItem.MultiSelectListPreference(
|
||||
pref = readerPreferences.readerBottomButtons(),
|
||||
title = stringResource(SYMR.strings.reader_bottom_buttons),
|
||||
subtitle = stringResource(SYMR.strings.reader_bottom_buttons_summary),
|
||||
preference = readerPreferences.readerBottomButtons(),
|
||||
entries = ReaderBottomButton.entries
|
||||
.associate { it.value to stringResource(it.stringRes) }
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.reader_bottom_buttons),
|
||||
subtitle = stringResource(SYMR.strings.reader_bottom_buttons_summary),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.pageLayout(),
|
||||
title = stringResource(SYMR.strings.page_layout),
|
||||
subtitle = stringResource(SYMR.strings.automatic_can_still_switch),
|
||||
preference = readerPreferences.pageLayout(),
|
||||
entries = ReaderPreferences.PageLayouts
|
||||
.mapIndexed { index, it -> index + 1 to stringResource(it) }
|
||||
.toMap()
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.page_layout),
|
||||
subtitle = stringResource(SYMR.strings.automatic_can_still_switch),
|
||||
),
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = readerPreferences.invertDoublePages(),
|
||||
preference = readerPreferences.invertDoublePages(),
|
||||
title = stringResource(SYMR.strings.invert_double_pages),
|
||||
enabled = pageLayout != PagerConfig.PageLayout.SINGLE_PAGE,
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.centerMarginType(),
|
||||
title = stringResource(SYMR.strings.center_margin),
|
||||
subtitle = stringResource(SYMR.strings.pref_center_margin_summary),
|
||||
preference = readerPreferences.centerMarginType(),
|
||||
entries = ReaderPreferences.CenterMarginTypes
|
||||
.mapIndexed { index, it -> index + 1 to stringResource(it) }
|
||||
.toMap()
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.center_margin),
|
||||
subtitle = stringResource(SYMR.strings.pref_center_margin_summary),
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = readerPreferences.archiveReaderMode(),
|
||||
title = stringResource(SYMR.strings.pref_archive_reader_mode),
|
||||
subtitle = stringResource(SYMR.strings.pref_archive_reader_mode_summary),
|
||||
preference = readerPreferences.archiveReaderMode(),
|
||||
entries = ReaderPreferences.archiveModeTypes
|
||||
.mapIndexed { index, it -> index to stringResource(it) }
|
||||
.toMap()
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.pref_archive_reader_mode),
|
||||
subtitle = stringResource(SYMR.strings.pref_archive_reader_mode_summary),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -97,7 +97,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 = {
|
||||
|
|
@ -107,9 +107,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) {
|
||||
|
|
@ -119,6 +117,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),
|
||||
|
|
@ -127,29 +127,29 @@ 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),
|
||||
),
|
||||
// SY -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = securityPreferences.passwordProtectDownloads(),
|
||||
preference = securityPreferences.passwordProtectDownloads(),
|
||||
title = stringResource(SYMR.strings.password_protect_downloads),
|
||||
subtitle = stringResource(SYMR.strings.password_protect_downloads_summary),
|
||||
enabled = isCbzPasswordSet,
|
||||
),
|
||||
Preference.PreferenceItem.ListPreference(
|
||||
pref = securityPreferences.encryptionType(),
|
||||
title = stringResource(SYMR.strings.encryption_type),
|
||||
preference = securityPreferences.encryptionType(),
|
||||
entries = SecurityPreferences.EncryptionType.entries
|
||||
.associateWith { stringResource(it.titleRes) }
|
||||
.toImmutableMap(),
|
||||
title = stringResource(SYMR.strings.encryption_type),
|
||||
enabled = passwordProtectDownloads,
|
||||
|
||||
),
|
||||
|
|
@ -175,11 +175,11 @@ object SettingsSecurityScreen : SearchableSettings {
|
|||
},
|
||||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.delete_cbz_archive_password),
|
||||
enabled = isCbzPasswordSet,
|
||||
onClick = {
|
||||
CbzCrypto.deleteKeyCbz()
|
||||
securityPreferences.cbzPassword().set("")
|
||||
},
|
||||
enabled = isCbzPasswordSet,
|
||||
),
|
||||
kotlin.run {
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
|
|
@ -191,10 +191,10 @@ object SettingsSecurityScreen : SearchableSettings {
|
|||
count.size,
|
||||
count.size,
|
||||
),
|
||||
enabled = useAuth,
|
||||
onClick = {
|
||||
navigator.push(BiometricTimesScreen())
|
||||
},
|
||||
enabled = useAuth,
|
||||
)
|
||||
},
|
||||
kotlin.run {
|
||||
|
|
@ -213,8 +213,8 @@ object SettingsSecurityScreen : SearchableSettings {
|
|||
Preference.PreferenceItem.TextPreference(
|
||||
title = stringResource(SYMR.strings.biometric_lock_days),
|
||||
subtitle = stringResource(SYMR.strings.biometric_lock_days_summary),
|
||||
onClick = { dialogOpen = true },
|
||||
enabled = useAuth,
|
||||
onClick = { dialogOpen = true },
|
||||
)
|
||||
},
|
||||
// SY <--
|
||||
|
|
@ -231,13 +231,13 @@ 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),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -127,19 +127,19 @@ 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),
|
||||
),
|
||||
// KMK -->
|
||||
Preference.PreferenceItem.SwitchPreference(
|
||||
pref = trackPreferences.autoSyncProgressFromTrackers(),
|
||||
preference = trackPreferences.autoSyncProgressFromTrackers(),
|
||||
title = stringResource(KMR.strings.pref_auto_sync_progress_from_trackers),
|
||||
),
|
||||
// KMK <--
|
||||
|
|
@ -147,37 +147,31 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||
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) },
|
||||
|
|
@ -191,7 +185,6 @@ object SettingsTrackingScreen : SearchableSettings {
|
|||
enhancedTrackers.first
|
||||
.map { service ->
|
||||
Preference.PreferenceItem.TrackerPreference(
|
||||
title = service.name,
|
||||
tracker = service,
|
||||
login = { (service as EnhancedTracker).loginNoop() },
|
||||
logout = service::logout,
|
||||
|
|
|
|||
Loading…
Reference in a new issue