From 3dd1a2b31105e59d44895df4d1eb09b87a768009 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Mar 2026 06:27:42 +0000 Subject: [PATCH 01/31] Update actions/dependency-review-action action to v4.9.0 (#3036) (cherry picked from commit f3d5491a7dbbb59d8880fdfc84a3e234a9c08dcf) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1132a485b6..d649848397 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,7 @@ jobs: - name: Dependency Review if: github.event_name == 'pull_request' - uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 # v4.8.3 + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 From 3a1963fb70439cb26cc1c22af5a46331dc9e83cb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Mar 2026 06:28:14 +0000 Subject: [PATCH 02/31] Update dependency com.materialkolor:material-kolor to v5.0.0-alpha07 (#3024) (cherry picked from commit 6926914385e365baae3b145697ec052a4eca37f5) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 06ded9d2c2..3cb533d1a1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ ktlint-core = "1.8.0" firebase-bom = "34.9.0" markdown = "0.39.2" junit = "6.0.3" -materialKolor = "5.0.0-alpha06" +materialKolor = "5.0.0-alpha07" [libraries] desugar = "com.android.tools:desugar_jdk_libs:2.1.5" From 639dfa7ec63d5c1b3d3b457e55345f3ed9f60e96 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Mar 2026 06:28:45 +0000 Subject: [PATCH 03/31] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.3.0 (#3029) (cherry picked from commit a3c45a05b8112b97e20fcc9a22b1fb06307862d8) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3cb533d1a1..0eca1f29a9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ shizuku_version = "13.1.5" sqldelight = "2.2.1" sqlite = "2.6.2" voyager = "1.1.0-beta03" -spotless = "8.2.1" +spotless = "8.3.0" ktlint-core = "1.8.0" firebase-bom = "34.9.0" markdown = "0.39.2" From e3f81469754416455b77114f965c40ad29647e96 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Mar 2026 06:30:42 +0000 Subject: [PATCH 04/31] Update dependency com.google.firebase:firebase-bom to v34.10.0 (#3006) (cherry picked from commit 08f0bcc0d8a39c93293f0b623ffa1bf9ef838876) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0eca1f29a9..dd48fd8144 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,7 +9,7 @@ sqlite = "2.6.2" voyager = "1.1.0-beta03" spotless = "8.3.0" ktlint-core = "1.8.0" -firebase-bom = "34.9.0" +firebase-bom = "34.10.0" markdown = "0.39.2" junit = "6.0.3" materialKolor = "5.0.0-alpha07" From e8226e5b228ae001157b4cabf98df4c8d3677fed Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 6 Mar 2026 06:30:53 +0000 Subject: [PATCH 05/31] Update dependency androidx.compose:compose-bom to v2026.02.01 (#3009) (cherry picked from commit 0d768af3d09401f428c63774f54d5d372c2eb49a) --- gradle/compose.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index 15145d394a..1d61e63e7a 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -1,5 +1,5 @@ [versions] -compose-bom = "2026.02.00" +compose-bom = "2026.02.01" [libraries] activity = "androidx.activity:activity-compose:1.12.4" From d8bea1ef2874de042c9c851b593f5b25e52e96f4 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+antsylich@users.noreply.github.com> Date: Tue, 10 Mar 2026 18:53:11 +0100 Subject: [PATCH 06/31] Add installation id for feature flags (#3052) (cherry picked from commit f6b2684323569ef0eb23e143cc5d65d7cc1aae3c) --- .../eu/kanade/domain/base/BasePreferences.kt | 2 + .../presentation/more/settings/Preference.kt | 1 + .../more/settings/PreferenceItem.kt | 1 + .../settings/screen/debug/DebugInfoScreen.kt | 42 +++++++++++++++++++ .../eu/kanade/tachiyomi/util/CrashLogUtil.kt | 3 ++ .../migrations/InstallationIdMigration.kt | 18 ++++++++ .../core/migration/migrations/Migrations.kt | 1 + .../kotlin/mihon/core/common/FeatureFlags.kt | 12 ++++++ 8 files changed, 80 insertions(+) create mode 100644 app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt create mode 100644 core/common/src/main/kotlin/mihon/core/common/FeatureFlags.kt diff --git a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt index 3665ef17d9..cd66ac947d 100644 --- a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt @@ -35,4 +35,6 @@ class BasePreferences( SHIZUKU(MR.strings.ext_installer_shizuku, false), PRIVATE(MR.strings.ext_installer_private, false), } + + fun installationId() = preferenceStore.getString(Preference.appStateKey("installation_id"), "") } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt index 126542d2de..f12566258f 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/Preference.kt @@ -41,6 +41,7 @@ sealed class Preference { override val icon: ImageVector? = null, // <-- AY override val enabled: Boolean = true, + val widget: @Composable (() -> Unit)? = null, val onClick: (() -> Unit)? = null, ) : PreferenceItem() { override val onValueChanged: suspend (value: String) -> Unit = { } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt index b1be957495..e9c3abd742 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/PreferenceItem.kt @@ -151,6 +151,7 @@ internal fun PreferenceItem( title = item.title, subtitle = item.subtitle, icon = item.icon, + widget = item.widget, onPreferenceClick = item.onClick, ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt index effdf812d4..7b9bcd6a27 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt @@ -1,24 +1,38 @@ package eu.kanade.presentation.more.settings.screen.debug import android.os.Build +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Autorenew +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext import androidx.profileinstaller.ProfileVerifier import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow +import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.more.settings.PreferenceScaffold import eu.kanade.presentation.more.settings.screen.about.AboutScreen import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.WebViewUtil +import eu.kanade.tachiyomi.util.system.copyToClipboard import kotlinx.collections.immutable.mutate import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.guava.await +import kotlinx.coroutines.launch +import mihon.core.common.FeatureFlags import tachiyomi.i18n.MR +import tachiyomi.presentation.core.util.collectAsState +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class DebugInfoScreen : Screen() { @@ -47,6 +61,12 @@ class DebugInfoScreen : Screen() { @Composable private fun getAppInfoGroup(): Preference.PreferenceGroup { + val context = LocalContext.current + val scope = rememberCoroutineScope() + + val installationIdPref = remember { Injekt.get().installationId() } + val installationId by installationIdPref.collectAsState() + return Preference.PreferenceGroup( title = "App info", preferenceItems = persistentListOf( @@ -58,6 +78,28 @@ class DebugInfoScreen : Screen() { title = "Build time", subtitle = AboutScreen.getFormattedBuildTime(), ), + Preference.PreferenceItem.TextPreference( + title = "Installation ID", + subtitle = installationId, + widget = { + IconButton( + onClick = { + scope.launch { + installationIdPref.set(FeatureFlags.newInstallationId()) + } + }, + ) { + Icon( + imageVector = Icons.Outlined.Autorenew, + tint = MaterialTheme.colorScheme.primary, + contentDescription = null, + ) + } + }, + onClick = { + context.copyToClipboard(installationId, installationId) + }, + ), getProfileVerifierPreference(), Preference.PreferenceItem.TextPreference( title = "WebView version", diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index da40ef6a7a..208da11951 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.util import android.content.Context import android.os.Build +import eu.kanade.domain.base.BasePreferences import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.util.storage.getUriCompat @@ -19,6 +20,7 @@ import java.time.ZoneId class CrashLogUtil( private val context: Context, private val extensionManager: ExtensionManager = Injekt.get(), + private val preferences: BasePreferences = Injekt.get(), ) { suspend fun dumpLogs(exception: Throwable? = null) = withNonCancellableContext { @@ -42,6 +44,7 @@ class CrashLogUtil( return """ App ID: ${BuildConfig.APPLICATION_ID} App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME}) + Installation ID: ${preferences.installationId().get()} Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}; build ${Build.DISPLAY}) Device brand: ${Build.BRAND} Device manufacturer: ${Build.MANUFACTURER} diff --git a/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt b/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt new file mode 100644 index 0000000000..c9c3836ac0 --- /dev/null +++ b/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt @@ -0,0 +1,18 @@ +package mihon.core.migration.migrations + +import eu.kanade.domain.base.BasePreferences +import mihon.core.common.FeatureFlags +import mihon.core.migration.Migration +import mihon.core.migration.MigrationContext +import kotlin.uuid.ExperimentalUuidApi + +class InstallationIdMigration : Migration { + override val version: Float = Migration.ALWAYS + + @OptIn(ExperimentalUuidApi::class) + override suspend fun invoke(migrationContext: MigrationContext): Boolean { + val installationId = migrationContext.get()?.installationId() ?: return false + if (!installationId.isSet()) installationId.set(FeatureFlags.newInstallationId()) + return true + } +} diff --git a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt index c087030cc9..34070178d1 100644 --- a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt +++ b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt @@ -46,4 +46,5 @@ val migrations: List RenameKeysMigration(), MoveCoverCacheMigration(), SubtitleAssEnumMigration(), + InstallationIdMigration(), ) diff --git a/core/common/src/main/kotlin/mihon/core/common/FeatureFlags.kt b/core/common/src/main/kotlin/mihon/core/common/FeatureFlags.kt new file mode 100644 index 0000000000..924968094b --- /dev/null +++ b/core/common/src/main/kotlin/mihon/core/common/FeatureFlags.kt @@ -0,0 +1,12 @@ +package mihon.core.common + +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.Uuid + +object FeatureFlags { + + @OptIn(ExperimentalUuidApi::class) + fun newInstallationId(): String { + return Uuid.random().toHexDashString() + } +} From c5a7263ecf159e7bab5be96e693c3d5bfd290b64 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+antsylich@users.noreply.github.com> Date: Sat, 14 Mar 2026 07:01:56 +0100 Subject: [PATCH 07/31] Bump workflows JDK to 21 (#3053) (cherry picked from commit ce5820b496dc6526b7afbf7344753c923802f737) --- .github/.java-version | 1 + .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 .github/.java-version diff --git a/.github/.java-version b/.github/.java-version new file mode 100644 index 0000000000..aabe6ec390 --- /dev/null +++ b/.github/.java-version @@ -0,0 +1 @@ +21 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d649848397..800e667cbb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - java-version: 17 + java-version-file: .github/.java-version distribution: temurin - name: Set up Gradle diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 21b5fe2d89..f300067e5d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,7 +40,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: - java-version: 17 + java-version-file: .github/.java-version distribution: temurin # AM (SYNC_DRIVE) --> From a3f8158811304684841d78149ade471d7e0a531c Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sun, 15 Mar 2026 06:37:51 +0000 Subject: [PATCH 08/31] Update dependency androidx.compose:compose-bom to v2026.03.00 (#3066) (cherry picked from commit f82b8300b02270d58cb934131ad361626c8aba4c) --- gradle/compose.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index 1d61e63e7a..e94be84194 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -1,5 +1,5 @@ [versions] -compose-bom = "2026.02.01" +compose-bom = "2026.03.00" [libraries] activity = "androidx.activity:activity-compose:1.12.4" From bdc5de261a91bab8377b2dc88946e33476ae0988 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sun, 15 Mar 2026 06:38:51 +0000 Subject: [PATCH 09/31] Update dependency androidx.core:core-ktx to v1.18.0 (#3067) (cherry picked from commit 32b8ef6240269a7929c8d7b93e01ebbea37b37e8) --- gradle/androidx.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml index 95f6908653..275f2c68df 100644 --- a/gradle/androidx.versions.toml +++ b/gradle/androidx.versions.toml @@ -11,7 +11,7 @@ annotation = "androidx.annotation:annotation:1.9.1" appcompat = "androidx.appcompat:appcompat:1.7.1" biometricktx = "androidx.biometric:biometric-ktx:1.2.0-alpha05" constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1" -corektx = "androidx.core:core-ktx:1.17.0" +corektx = "androidx.core:core-ktx:1.18.0" splashscreen = "androidx.core:core-splashscreen:1.2.0" recyclerview = "androidx.recyclerview:recyclerview:1.4.0" viewpager = "androidx.viewpager:viewpager:1.1.0" From 13144649dfa2d7e28aae355083942df49fa46934 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sun, 15 Mar 2026 06:39:34 +0000 Subject: [PATCH 10/31] Update dependency androidx.activity:activity-compose to v1.13.0 (#3065) (cherry picked from commit be88ce199cc7ef2fbb469d089a034a2cd7cc0f0a) --- gradle/compose.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/compose.versions.toml b/gradle/compose.versions.toml index e94be84194..03f7285aa9 100644 --- a/gradle/compose.versions.toml +++ b/gradle/compose.versions.toml @@ -2,7 +2,7 @@ compose-bom = "2026.03.00" [libraries] -activity = "androidx.activity:activity-compose:1.12.4" +activity = "androidx.activity:activity-compose:1.13.0" bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" } foundation = { module = "androidx.compose.foundation:foundation" } animation = { module = "androidx.compose.animation:animation" } From d7fc33193106401a96c8feef85359e05808fbc87 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sun, 15 Mar 2026 06:41:04 +0000 Subject: [PATCH 11/31] Update softprops/action-gh-release action to v2.5.3 (#3064) (cherry picked from commit 4b379576f47a05a3146ddbbc612b06509d1849c1) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f300067e5d..8677d6df6a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -110,7 +110,7 @@ jobs: Animiru - name: Create GitHub Release - uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 + uses: softprops/action-gh-release@1853d73993c8ca1b2c9c1a7fede39682d0ab5c2a # v2.5.3 with: tag_name: ${{ needs.get_tag.outputs.tag }} name: Animiru ${{ needs.get_tag.outputs.tag }} From 37526b8c8daecba8c54431629cffae0e2d609845 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Sun, 15 Mar 2026 07:34:22 +0000 Subject: [PATCH 12/31] Update dependency com.squareup.okio:okio to v3.17.0 (#3070) (cherry picked from commit 77a86d486fc1d1ec2968a51dbda6c8286bb20b55) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dd48fd8144..94c91790c2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp_ve okhttp-logging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp_version" } okhttp-brotli = { module = "com.squareup.okhttp3:okhttp-brotli", version.ref = "okhttp_version" } okhttp-dnsoverhttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", version.ref = "okhttp_version" } -okio = "com.squareup.okio:okio:3.16.4" +okio = "com.squareup.okio:okio:3.17.0" conscrypt-android = "org.conscrypt:conscrypt-android:2.5.3" From 470f97549d5baf19289ba9f68053df486e366445 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 16 Mar 2026 05:42:16 +0000 Subject: [PATCH 13/31] Update moko to v0.26.1 (#3068) (cherry picked from commit 8c00b44edaf82a5149ca9f4f2dbed7d7fdaacabc) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 94c91790c2..58214c938d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] aboutlib_version = "13.2.1" leakcanary = "2.14" -moko = "0.26.0" +moko = "0.26.1" okhttp_version = "5.3.2" shizuku_version = "13.1.5" sqldelight = "2.2.1" From ffcccb4f5d215dd6d753bd2e0cb411a4d91938e0 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 16 Mar 2026 05:43:17 +0000 Subject: [PATCH 14/31] Update dependency io.kotest:kotest-assertions-core to v6.1.7 (#3062) (cherry picked from commit 575d7e8b89415a5aeff6dd4ce3fdfc1acb71a330) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 58214c938d..552a5fbe5f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -91,7 +91,7 @@ sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } -kotest-assertions = "io.kotest:kotest-assertions-core:6.1.4" +kotest-assertions = "io.kotest:kotest-assertions-core:6.1.7" mockk = "io.mockk:mockk:1.14.9" voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } From 9260112c0c72e21da95a2cb80b483f39eb2658c3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 16 Mar 2026 05:53:43 +0000 Subject: [PATCH 15/31] Update sqldelight to v2.3.1 (#3071) Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit 8c5ae44f5129c591f3d35b69144e162c26c7be41) --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 552a5fbe5f..952792c651 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ leakcanary = "2.14" moko = "0.26.1" okhttp_version = "5.3.2" shizuku_version = "13.1.5" -sqldelight = "2.2.1" +sqldelight = "2.3.1" sqlite = "2.6.2" voyager = "1.1.0-beta03" spotless = "8.3.0" @@ -87,7 +87,7 @@ leakcanary-plumber = { module = "com.squareup.leakcanary:plumber-android", versi sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jvm", version.ref = "sqldelight" } sqldelight-android-paging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" } -sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version = "2.2.1" } +sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" } junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } From 36d0fd1a6a0583da16f797dba880a706376bca44 Mon Sep 17 00:00:00 2001 From: MajorTanya <39014446+MajorTanya@users.noreply.github.com> Date: Wed, 18 Mar 2026 07:56:10 +0100 Subject: [PATCH 16/31] Address bundleOf deprecation (#3073) (cherry picked from commit 33faa5a3562016a53d94b02aed69d95b10af5fc5) --- .../ui/browse/extension/details/SourcePreferencesScreen.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt index 87bb590926..e35b9ef1a2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/SourcePreferencesScreen.kt @@ -16,7 +16,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView -import androidx.core.os.bundleOf import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentContainerView import androidx.fragment.app.FragmentManager @@ -167,7 +166,9 @@ class SourcePreferencesFragment : PreferenceFragmentCompat() { fun getInstance(sourceId: Long): SourcePreferencesFragment { return SourcePreferencesFragment().apply { - arguments = bundleOf(SOURCE_ID to sourceId) + arguments = Bundle().apply { + putLong(SOURCE_ID, sourceId) + } } } } From 13da2ca1daffc69f7b4f08bb77f96f6971be6274 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 18 Mar 2026 06:57:23 +0000 Subject: [PATCH 17/31] Update sqldelight to v2.3.2 (#3077) (cherry picked from commit db22517339f75673ba3c8fe6da993cda376c37ed) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 952792c651..dc6226e9fd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ leakcanary = "2.14" moko = "0.26.1" okhttp_version = "5.3.2" shizuku_version = "13.1.5" -sqldelight = "2.3.1" +sqldelight = "2.3.2" sqlite = "2.6.2" voyager = "1.1.0-beta03" spotless = "8.3.0" From c0cc01274bbf83b31d66987bf4868d08e03ee5b3 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 18 Mar 2026 07:16:56 +0000 Subject: [PATCH 18/31] Update kotlin monorepo to v2.3.20 (#3074) (cherry picked from commit a2d22a7d55394a95d89912087ad8a04ffe3794c0) --- gradle/kotlinx.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/kotlinx.versions.toml b/gradle/kotlinx.versions.toml index 6e772ba011..83ea539e84 100644 --- a/gradle/kotlinx.versions.toml +++ b/gradle/kotlinx.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin_version = "2.3.10" +kotlin_version = "2.3.20" serialization_version = "1.10.0" xml_serialization_version = "0.91.3" From d0ab992dc02d31b09d469876de884276f47c63c2 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 18 Mar 2026 09:11:28 +0000 Subject: [PATCH 19/31] Update paging.version to v3.4.2 (#3063) (cherry picked from commit e4091c0160ea41df8264763f183cedb33643ce5f) --- gradle/androidx.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml index 275f2c68df..863c1d0b9b 100644 --- a/gradle/androidx.versions.toml +++ b/gradle/androidx.versions.toml @@ -1,7 +1,7 @@ [versions] agp_version = "8.13.2" lifecycle_version = "2.10.0" -paging_version = "3.4.1" +paging_version = "3.4.2" interpolator_version = "1.0.0" [libraries] From 9128468c38a3e8507f616f4c05857ff64181ea4d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 18 Mar 2026 09:11:55 +0000 Subject: [PATCH 20/31] Update softprops/action-gh-release action to v2.6.1 (#3072) (cherry picked from commit e9ca71d8373a2d17edebe420cb1b93f6e5fc2d38) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8677d6df6a..22049ed60e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -110,7 +110,7 @@ jobs: Animiru - name: Create GitHub Release - uses: softprops/action-gh-release@1853d73993c8ca1b2c9c1a7fede39682d0ab5c2a # v2.5.3 + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 with: tag_name: ${{ needs.get_tag.outputs.tag }} name: Animiru ${{ needs.get_tag.outputs.tag }} From 99c85666549367842d7c533eb7c63b7c81f893c1 Mon Sep 17 00:00:00 2001 From: Secozzi Date: Fri, 20 Mar 2026 20:44:02 +0100 Subject: [PATCH 21/31] Switch to AndroidX bundled sqlite driver Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> --- app/build.gradle.kts | 2 +- .../java/eu/kanade/tachiyomi/di/AppModule.kt | 39 ++++++------------- gradle/androidx.versions.toml | 3 ++ gradle/libs.versions.toml | 10 +---- 4 files changed, 17 insertions(+), 37 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7f099b3bbb..3fabfd091a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -204,7 +204,7 @@ dependencies { implementation(androidx.paging.runtime) implementation(androidx.paging.compose) - implementation(libs.bundles.sqlite) + implementation(androidx.sqlite.bundled) implementation(kotlinx.reflect) implementation(kotlinx.immutables) diff --git a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt index b682630993..7a93661410 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt @@ -1,14 +1,14 @@ package eu.kanade.tachiyomi.di import android.app.Application -import android.os.Build import androidx.core.content.ContextCompat -import androidx.sqlite.db.SupportSQLiteDatabase -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory +import androidx.sqlite.driver.bundled.BundledSQLiteDriver import app.cash.sqldelight.db.SqlDriver -import app.cash.sqldelight.driver.android.AndroidSqliteDriver +import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration +import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType +import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver +import com.eygraber.sqldelight.androidx.driver.FileProvider import eu.kanade.domain.track.store.DelayedTrackingStore -import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.cache.BackgroundCache import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.connection.ConnectionManager @@ -25,7 +25,6 @@ import eu.kanade.tachiyomi.source.AndroidSourceManager import eu.kanade.tachiyomi.ui.player.ExternalIntents import eu.kanade.tachiyomi.ui.player.domain.AudioManager import eu.kanade.tachiyomi.ui.player.domain.BrightnessManager -import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory import kotlinx.serialization.json.Json import kotlinx.serialization.protobuf.ProtoBuf import nl.adaptivity.xmlutil.XmlDeclMode @@ -61,29 +60,13 @@ class AppModule(val app: Application) : InjektModule { addSingleton(app) addSingletonFactory { - AndroidSqliteDriver( + AndroidxSqliteDriver( + driver = BundledSQLiteDriver(), + databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.animedb"), schema = Database.Schema, - context = app, - name = "tachiyomi.animedb", - factory = if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - // Support database inspector in Android Studio - FrameworkSQLiteOpenHelperFactory() - } else { - RequerySQLiteOpenHelperFactory() - }, - callback = object : AndroidSqliteDriver.Callback(Database.Schema) { - override fun onOpen(db: SupportSQLiteDatabase) { - super.onOpen(db) - setPragma(db, "foreign_keys = ON") - setPragma(db, "journal_mode = WAL") - setPragma(db, "synchronous = NORMAL") - } - private fun setPragma(db: SupportSQLiteDatabase, pragma: String) { - val cursor = db.query("PRAGMA $pragma") - cursor.moveToFirst() - cursor.close() - } - }, + configuration = AndroidxSqliteConfiguration( + isForeignKeyConstraintsEnabled = true, + ), ) } addSingletonFactory { diff --git a/gradle/androidx.versions.toml b/gradle/androidx.versions.toml index 863c1d0b9b..43296b6476 100644 --- a/gradle/androidx.versions.toml +++ b/gradle/androidx.versions.toml @@ -3,6 +3,7 @@ agp_version = "8.13.2" lifecycle_version = "2.10.0" paging_version = "3.4.2" interpolator_version = "1.0.0" +sqlite = "2.6.2" [libraries] gradle = { module = "com.android.tools.build:gradle", version.ref = "agp_version" } @@ -33,5 +34,7 @@ test-ext = "androidx.test.ext:junit-ktx:1.3.0" test-espresso-core = "androidx.test.espresso:espresso-core:3.7.0" test-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0" +sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" } + [bundles] lifecycle = ["lifecycle-common", "lifecycle-process", "lifecycle-runtimektx"] diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc6226e9fd..da83e7fc9d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,6 @@ moko = "0.26.1" okhttp_version = "5.3.2" shizuku_version = "13.1.5" sqldelight = "2.3.2" -sqlite = "2.6.2" voyager = "1.1.0-beta03" spotless = "8.3.0" ktlint-core = "1.8.0" @@ -36,10 +35,6 @@ disklrucache = "com.jakewharton:disklrucache:2.0.2" unifile = "com.github.tachiyomiorg:unifile:e0def6b3dc" libarchive = "me.zhanghai.android.libarchive:library:1.1.6" -sqlite-framework = { module = "androidx.sqlite:sqlite-framework", version.ref = "sqlite" } -sqlite-ktx = { module = "androidx.sqlite:sqlite-ktx", version.ref = "sqlite" } -sqlite-android = "com.github.requery:sqlite-android:3.49.0" - preferencektx = "androidx.preference:preference-ktx:1.2.1" injekt = "com.github.mihonapp:injekt:91edab2317" @@ -84,7 +79,7 @@ shizuku-provider = { module = "dev.rikka.shizuku:provider", version.ref = "shizu leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } leakcanary-plumber = { module = "com.squareup.leakcanary:plumber-android", version.ref = "leakcanary" } -sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } +sqldelight-androidx-driver = { module = "com.eygraber:sqldelight-androidx-driver", version = "0.0.17" } sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jvm", version.ref = "sqldelight" } sqldelight-android-paging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" } sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" } @@ -119,10 +114,9 @@ firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0. [bundles] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] js-engine = ["quickjs-android"] -sqlite = ["sqlite-framework", "sqlite-ktx", "sqlite-android"] coil = ["coil-core", "coil-gif", "coil-compose", "coil-network-okhttp"] shizuku = ["shizuku-api", "shizuku-provider"] -sqldelight = ["sqldelight-android-driver", "sqldelight-coroutines", "sqldelight-android-paging"] +sqldelight = ["sqldelight-androidx-driver", "sqldelight-coroutines", "sqldelight-android-paging"] voyager = ["voyager-navigator", "voyager-screenmodel", "voyager-tab-navigator", "voyager-transitions"] test = ["junit-jupiter", "kotest-assertions", "mockk"] markdown = ["markdown-core", "markdown-coil"] From 248916af54e8b2e47c2a64b8573b3a17cb74a8be Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 19 Mar 2026 08:13:04 +0000 Subject: [PATCH 22/31] Update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.4.0 (#3086) (cherry picked from commit 11ced33fdb04bc2128d9ae24c0d70b8ce4b4c922) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index da83e7fc9d..289f4ab897 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ okhttp_version = "5.3.2" shizuku_version = "13.1.5" sqldelight = "2.3.2" voyager = "1.1.0-beta03" -spotless = "8.3.0" +spotless = "8.4.0" ktlint-core = "1.8.0" firebase-bom = "34.10.0" markdown = "0.39.2" From 8aa6d54ad5e6c32fd8d48907e9202a85ce7b5701 Mon Sep 17 00:00:00 2001 From: Secozzi Date: Fri, 20 Mar 2026 20:46:11 +0100 Subject: [PATCH 23/31] Fix tracker-induced duplicate key crash in duplicate detection Co-authored-by: Leodyver Semilla <124951048+leodyversemilla07@users.noreply.github.com> --- data/src/main/sqldelight/tachiyomi/data/animes.sq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/src/main/sqldelight/tachiyomi/data/animes.sq b/data/src/main/sqldelight/tachiyomi/data/animes.sq index c1ccd2970e..403ed1595a 100644 --- a/data/src/main/sqldelight/tachiyomi/data/animes.sq +++ b/data/src/main/sqldelight/tachiyomi/data/animes.sq @@ -133,7 +133,7 @@ AND source = :sourceId; getDuplicateLibraryAnime: WITH track_dupes AS ( - SELECT S2.anime_id + SELECT DISTINCT S2.anime_id FROM anime_sync S1 INNER JOIN anime_sync S2 ON S1.sync_id = S2.sync_id From 0de1c1b935ea93fb7545f977c239eac0a6f2c5e8 Mon Sep 17 00:00:00 2001 From: Leodyver Semilla <124951048+leodyversemilla07@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:01:35 +0100 Subject: [PATCH 24/31] Fix WebView JavaScript dialogs popup after screen is closed (#3041) Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> (cherry picked from commit 99edfbe4a8621d69c6d21c1ddf7f6af6221c538d) --- .../webview/WebViewScreenContent.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index 1dfab78af3..25a1a5f294 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -3,6 +3,8 @@ package eu.kanade.presentation.webview import android.content.pm.ApplicationInfo import android.graphics.Bitmap import android.os.Message +import android.webkit.JsPromptResult +import android.webkit.JsResult import android.webkit.WebResourceRequest import android.webkit.WebView import androidx.activity.compose.BackHandler @@ -20,6 +22,7 @@ import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf @@ -95,6 +98,11 @@ fun WebViewScreenContent( var currentUrl by remember { mutableStateOf(url) } var showCloudflareHelp by remember { mutableStateOf(false) } + var isActive by remember { mutableStateOf(true) } + + DisposableEffect(Unit) { + onDispose { isActive = false } + } val webClient = remember { object : AccompanistWebViewClient() { @@ -163,6 +171,36 @@ fun WebViewScreenContent( } return false } + + override fun onJsAlert(view: WebView, url: String?, message: String?, result: JsResult): Boolean { + if (!isActive) { + result.confirm() + return true + } + return super.onJsAlert(view, url, message, result) + } + + override fun onJsConfirm(view: WebView, url: String?, message: String?, result: JsResult): Boolean { + if (!isActive) { + result.cancel() + return true + } + return super.onJsConfirm(view, url, message, result) + } + + override fun onJsPrompt( + view: WebView, + url: String?, + message: String?, + defaultValue: String?, + result: JsPromptResult, + ): Boolean { + if (!isActive) { + result.cancel() + return true + } + return super.onJsPrompt(view, url, message, defaultValue, result) + } } } From 40c2fc008c9bc35ee28de6da7661a94abea0d785 Mon Sep 17 00:00:00 2001 From: Secozzi Date: Fri, 20 Mar 2026 20:47:51 +0100 Subject: [PATCH 25/31] Fix extension actions disappearing after installing and uninstalling in same session Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Co-authored-by: Leodyver Semilla <124951048+leodyversemilla07@users.noreply.github.com> --- .../tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt index b4c420ab7b..3f418ef48c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt @@ -26,6 +26,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import tachiyomi.core.common.util.lang.launchIO @@ -185,6 +186,7 @@ class ExtensionsScreenModel( private suspend fun Flow.collectToInstallUpdate(extension: Extension) = this .onEach { installStep -> addDownloadState(extension, installStep) } + .takeWhile { installStep -> installStep != InstallStep.Installed } .onCompletion { removeDownloadState(extension) } .collect() From 182c6fc072a3bf2a9bc0f652b8905e5db8c4cac9 Mon Sep 17 00:00:00 2001 From: Secozzi Date: Fri, 20 Mar 2026 21:49:42 +0100 Subject: [PATCH 26/31] Replace preference getter functions with properties Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> --- .../domain/anime/interactor/UpdateAnime.kt | 2 +- .../eu/kanade/domain/anime/model/Anime.kt | 4 +- .../eu/kanade/domain/base/BasePreferences.kt | 15 +- .../domain/connection/SyncPreferences.kt | 19 +- .../service/ConnectionPreferences.kt | 12 +- .../episode/interactor/SetSeenStatus.kt | 2 +- .../interactor/SyncEpisodesWithSource.kt | 2 +- .../interactor/GetExtensionLanguages.kt | 2 +- .../interactor/GetExtensionSources.kt | 2 +- .../interactor/GetExtensionsByType.kt | 4 +- .../extension/interactor/TrustExtension.kt | 6 +- .../source/interactor/GetEnabledSources.kt | 8 +- .../source/interactor/GetIncognitoState.kt | 10 +- .../interactor/GetLanguagesWithSources.kt | 4 +- .../interactor/GetSourcesWithFavoriteCount.kt | 4 +- .../source/interactor/SetMigrateSorting.kt | 4 +- .../source/interactor/ToggleIncognito.kt | 2 +- .../source/interactor/ToggleLanguage.kt | 4 +- .../domain/source/interactor/ToggleSource.kt | 6 +- .../source/interactor/ToggleSourcePin.kt | 4 +- .../source/service/SourcePreferences.kt | 54 ++-- .../domain/track/service/TrackPreferences.kt | 14 +- .../java/eu/kanade/domain/ui/UiPreferences.kt | 19 +- .../anime/EpisodeSettingsDialog.kt | 2 +- .../anime/SeasonSettingsDialog.kt | 2 +- .../anime/components/AnimeBottomActionMenu.kt | 4 +- .../anime/components/AnimeInfoHeader.kt | 2 +- .../presentation/components/DateText.kt | 8 +- .../library/LibrarySettingsDialog.kt | 38 +-- .../more/onboarding/StorageStep.kt | 2 +- .../presentation/more/onboarding/ThemeStep.kt | 6 +- .../settings/screen/SettingsAdvancedScreen.kt | 12 +- .../screen/SettingsAppearanceScreen.kt | 18 +- .../settings/screen/SettingsBrowseScreen.kt | 4 +- .../settings/screen/SettingsDataScreen.kt | 12 +- .../settings/screen/SettingsDiscordScreen.kt | 8 +- .../settings/screen/SettingsDownloadScreen.kt | 30 +-- .../settings/screen/SettingsLibraryScreen.kt | 36 +-- .../settings/screen/SettingsSecurityScreen.kt | 8 +- .../settings/screen/SettingsSyncmiruScreen.kt | 14 +- .../settings/screen/SettingsTrackingScreen.kt | 14 +- .../more/settings/screen/about/AboutScreen.kt | 2 +- .../settings/screen/debug/DebugInfoScreen.kt | 2 +- .../settings/screen/debug/WorkerInfoScreen.kt | 2 +- .../player/PlayerSettingsAdvancedScreen.kt | 6 +- .../player/PlayerSettingsAudioScreen.kt | 8 +- .../player/PlayerSettingsDecoderScreen.kt | 8 +- .../player/PlayerSettingsGesturesScreen.kt | 28 +- .../player/PlayerSettingsPlayerScreen.kt | 60 ++--- .../player/PlayerSettingsSubtitleScreen.kt | 8 +- .../presentation/theme/TachiyomiTheme.kt | 4 +- .../updates/UpdatesFilterDialog.kt | 14 +- .../presentation/updates/UpdatesScreen.kt | 4 +- .../presentation/updates/UpdatesUiItem.kt | 2 +- app/src/main/java/eu/kanade/tachiyomi/App.kt | 10 +- .../tachiyomi/data/backup/BackupNotifier.kt | 2 +- .../data/backup/create/BackupCreateJob.kt | 2 +- .../data/backup/create/BackupCreator.kt | 2 +- .../restore/restorers/CategoriesRestorer.kt | 2 +- .../connection/discord/DiscordRPCService.kt | 10 +- .../data/connection/syncmiru/GoogleDrive.kt | 6 +- .../data/connection/syncmiru/SyncDataJob.kt | 2 +- .../data/connection/syncmiru/SyncManager.kt | 14 +- .../data/connection/syncmiru/SyncNotifier.kt | 2 +- .../data/connection/syncmiru/SyncYomi.kt | 6 +- .../service/GoogleDriveSyncService.kt | 12 +- .../syncmiru/service/SyncYomiSyncService.kt | 12 +- .../tachiyomi/data/download/DownloadJob.kt | 4 +- .../data/download/DownloadManager.kt | 6 +- .../data/download/DownloadNotifier.kt | 2 +- .../data/download/DownloadProvider.kt | 8 +- .../tachiyomi/data/download/Downloader.kt | 6 +- .../data/library/LibraryUpdateJob.kt | 22 +- .../data/library/LibraryUpdateNotifier.kt | 8 +- .../data/notification/NotificationReceiver.kt | 2 +- .../tachiyomi/data/track/anilist/Anilist.kt | 2 +- .../data/track/anilist/AnilistUtils.kt | 2 +- .../kanade/tachiyomi/di/PreferenceModule.kt | 2 +- .../tachiyomi/extension/ExtensionManager.kt | 10 +- .../extension/api/ExtensionUpdateNotifier.kt | 2 +- .../extension/util/ExtensionInstaller.kt | 2 +- .../extension/util/ExtensionLoader.kt | 2 +- .../tachiyomi/source/SourceExtensions.kt | 2 +- .../kanade/tachiyomi/ui/anime/AnimeScreen.kt | 2 +- .../tachiyomi/ui/anime/AnimeScreenModel.kt | 28 +- .../ui/anime/track/TrackInfoDialog.kt | 2 +- .../base/delegate/SecureActivityDelegate.kt | 20 +- .../ui/base/delegate/ThemingDelegate.kt | 2 +- .../kanade/tachiyomi/ui/browse/BrowseTab.kt | 2 +- .../extension/ExtensionFilterScreenModel.kt | 2 +- .../browse/extension/ExtensionsScreenModel.kt | 4 +- .../details/ExtensionDetailsScreenModel.kt | 2 +- .../search/MigrateSearchScreenModel.kt | 2 +- .../season/MigrateSeasonSelectScreenModel.kt | 8 +- .../sources/MigrateSourceScreenModel.kt | 4 +- .../browse/source/SourcesFilterScreenModel.kt | 4 +- .../source/browse/BrowseSourceScreenModel.kt | 16 +- .../source/globalsearch/SearchScreenModel.kt | 10 +- .../ui/category/CategoryScreenModel.kt | 2 +- .../ui/history/HistoryScreenModel.kt | 2 +- .../kanade/tachiyomi/ui/history/HistoryTab.kt | 2 +- .../tachiyomi/ui/home/NavigationPill.kt | 6 +- .../ui/library/LibraryScreenModel.kt | 46 ++-- .../ui/library/LibrarySettingsScreenModel.kt | 4 +- .../kanade/tachiyomi/ui/library/LibraryTab.kt | 2 +- .../kanade/tachiyomi/ui/main/MainActivity.kt | 12 +- .../eu/kanade/tachiyomi/ui/more/MoreTab.kt | 4 +- .../tachiyomi/ui/more/OnboardingScreen.kt | 4 +- .../tachiyomi/ui/player/AniyomiMPVView.kt | 56 ++-- .../tachiyomi/ui/player/ExternalIntents.kt | 18 +- .../tachiyomi/ui/player/PlayerActivity.kt | 60 ++--- .../kanade/tachiyomi/ui/player/PlayerEnums.kt | 18 +- .../tachiyomi/ui/player/PlayerViewModel.kt | 50 ++-- .../ui/player/controls/GestureHandler.kt | 14 +- .../ui/player/controls/PlayerControls.kt | 152 +++++------ .../ui/player/controls/PlayerPanels.kt | 4 +- .../panels/SubtitleSettingsColorsCard.kt | 6 +- .../panels/SubtitleSettingsTypographyCard.kt | 18 +- .../tachiyomi/ui/player/domain/TrackSelect.kt | 8 +- .../settings/AdvancedPlayerPreferences.kt | 11 +- .../ui/player/settings/AudioPreferences.kt | 13 +- .../ui/player/settings/DecoderPreferences.kt | 29 ++- .../ui/player/settings/GesturePreferences.kt | 47 +++- .../ui/player/settings/PlayerPreferences.kt | 80 +++--- .../ui/player/settings/SubtitlePreferences.kt | 56 ++-- .../kanade/tachiyomi/ui/recents/RecentsTab.kt | 2 +- .../tachiyomi/ui/stats/StatsScreenModel.kt | 6 +- .../ui/storage/StorageScreenModel.kt | 2 +- .../ui/updates/UpdatesScreenModel.kt | 18 +- .../kanade/tachiyomi/ui/updates/UpdatesTab.kt | 2 +- .../eu/kanade/tachiyomi/util/CrashLogUtil.kt | 2 +- .../util/system/DisplayExtensions.kt | 2 +- .../widget/TachiyomiTextInputEditText.kt | 2 +- .../migrations/AddAllLangMigration.kt | 4 +- .../CategoryPreferencesCleanupMigration.kt | 14 +- .../CombineUpdateRestrictionMigration.kt | 2 +- .../core/migration/migrations/DOHMigration.kt | 2 +- .../migrations/DontRunJobsMigration.kt | 2 +- .../migrations/EnableAutoBackupMigration.kt | 4 +- .../migrations/InstallationIdMigration.kt | 2 +- .../MergeSortTypeDirectionMigration.kt | 4 +- .../MigrateSecureScreenMigration.kt | 6 +- .../migrations/MigrateSortingModeMigration.kt | 6 +- .../migrations/MigrateToTriStateMigration.kt | 6 +- .../MoveEpisodePreferencesMigration.kt | 12 +- .../MovePlayerPreferencesMigration.kt | 4 +- .../migrations/PlayerPreferenceMigration.kt | 6 +- .../migration/migrations/PrefLangMigration.kt | 4 +- .../migrations/RelativeTimestampMigration.kt | 2 +- .../RemoveOneTwoHourUpdateMigration.kt | 4 +- .../migrations/RemoveQuickUpdateMigration.kt | 4 +- .../migrations/RenameEnumMigration.kt | 4 +- .../ResetSortPreferenceRemovedMigration.kt | 4 +- .../migrations/SplitPreferencesMigration.kt | 6 +- .../TrustExtensionRepositoryMigration.kt | 4 +- .../migrations/VideoOrientationMigration.kt | 8 +- .../VideoPlayerPreferenceMigration.kt | 6 +- .../migration/usecases/MigrateAnimeUseCase.kt | 2 +- .../migration/config/MigrationConfigScreen.kt | 14 +- .../config/MigrationConfigScreenSheet.kt | 14 +- .../migration/dialog/MigrateAnimeDialog.kt | 4 +- .../list/MigrationListScreenModel.kt | 10 +- .../core/security/SecurityPreferences.kt | 15 +- .../kanade/tachiyomi/network/NetworkHelper.kt | 6 +- .../tachiyomi/network/NetworkPreferences.kt | 22 +- .../interactor/FilterEpisodesForDownload.kt | 8 +- .../backup/service/BackupPreferences.kt | 9 +- .../interactor/CreateCategoryWithName.kt | 2 +- .../category/interactor/DeleteCategory.kt | 14 +- .../category/interactor/ResetCategoryFlags.kt | 2 +- .../category/interactor/SetDisplayMode.kt | 2 +- .../interactor/SetSortModeForCategory.kt | 10 +- .../download/service/DownloadPreferences.kt | 47 ++-- .../interactor/SetAnimeDefaultEpisodeFlags.kt | 18 +- .../library/service/LibraryPreferences.kt | 241 ++++++++++-------- .../interactor/SetAnimeDefaultSeasonFlags.kt | 32 +-- .../domain/storage/service/StorageManager.kt | 4 +- .../storage/service/StoragePreferences.kt | 11 +- .../updates/service/UpdatesPreferences.kt | 15 +- .../widget/BaseUpdatesGridGlanceWidget.kt | 2 +- .../presentation/widget/WidgetManager.kt | 2 +- 181 files changed, 1173 insertions(+), 1056 deletions(-) diff --git a/app/src/main/java/eu/kanade/domain/anime/interactor/UpdateAnime.kt b/app/src/main/java/eu/kanade/domain/anime/interactor/UpdateAnime.kt index 262e03f0f9..0e6c366728 100644 --- a/app/src/main/java/eu/kanade/domain/anime/interactor/UpdateAnime.kt +++ b/app/src/main/java/eu/kanade/domain/anime/interactor/UpdateAnime.kt @@ -49,7 +49,7 @@ class UpdateAnime( // if the anime isn't a favorite (or 'update titles' preference is enabled), set its title from source and update in db val title = - if (remoteTitle.isNotEmpty() && (!localAnime.favorite || libraryPreferences.updateAnimeTitles().get())) { + if (remoteTitle.isNotEmpty() && (!localAnime.favorite || libraryPreferences.updateAnimeTitles.get())) { remoteTitle } else { null diff --git a/app/src/main/java/eu/kanade/domain/anime/model/Anime.kt b/app/src/main/java/eu/kanade/domain/anime/model/Anime.kt index 9b9378137e..78efc999d4 100644 --- a/app/src/main/java/eu/kanade/domain/anime/model/Anime.kt +++ b/app/src/main/java/eu/kanade/domain/anime/model/Anime.kt @@ -12,7 +12,7 @@ import uy.kohesive.injekt.api.get // TODO: move these into the domain model val Anime.downloadedFilter: TriState get() { - if (Injekt.get().downloadedOnly().get()) return TriState.ENABLED_IS + if (Injekt.get().downloadedOnly.get()) return TriState.ENABLED_IS return when (downloadedFilterRaw) { Anime.EPISODE_SHOW_DOWNLOADED -> TriState.ENABLED_IS Anime.EPISODE_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT @@ -23,7 +23,7 @@ val Anime.downloadedFilter: TriState // AY --> val Anime.seasonDownloadedFilter: TriState get() { - if (Injekt.get().downloadedOnly().get()) return TriState.ENABLED_IS + if (Injekt.get().downloadedOnly.get()) return TriState.ENABLED_IS return when (seasonDownloadedFilterRaw) { Anime.SEASON_SHOW_DOWNLOADED -> TriState.ENABLED_IS Anime.SEASON_SHOW_NOT_DOWNLOADED -> TriState.ENABLED_NOT diff --git a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt index cd66ac947d..0ff3860bbc 100644 --- a/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/base/BasePreferences.kt @@ -9,17 +9,17 @@ import tachiyomi.i18n.MR class BasePreferences( val context: Context, - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun downloadedOnly() = preferenceStore.getBoolean( + val downloadedOnly: Preference = preferenceStore.getBoolean( Preference.appStateKey("pref_downloaded_only"), false, ) - fun incognitoMode() = preferenceStore.getBoolean(Preference.appStateKey("incognito_mode"), false) + val incognitoMode: Preference = preferenceStore.getBoolean(Preference.appStateKey("incognito_mode"), false) - fun extensionInstaller() = ExtensionInstallerPreference(context, preferenceStore) + val extensionInstaller: ExtensionInstallerPreference = ExtensionInstallerPreference(context, preferenceStore) // AY --> fun deviceHasPip() = context.packageManager.hasSystemFeature( @@ -27,7 +27,10 @@ class BasePreferences( ) // <-- AY - fun shownOnboardingFlow() = preferenceStore.getBoolean(Preference.appStateKey("onboarding_complete"), false) + val shownOnboardingFlow: Preference = preferenceStore.getBoolean( + Preference.appStateKey("onboarding_complete"), + false, + ) enum class ExtensionInstaller(val titleRes: StringResource, val requiresSystemPermission: Boolean) { LEGACY(MR.strings.ext_installer_legacy, true), @@ -36,5 +39,5 @@ class BasePreferences( PRIVATE(MR.strings.ext_installer_private, false), } - fun installationId() = preferenceStore.getString(Preference.appStateKey("installation_id"), "") + val installationId: Preference = preferenceStore.getString(Preference.appStateKey("installation_id"), "") } diff --git a/app/src/main/java/eu/kanade/domain/connection/SyncPreferences.kt b/app/src/main/java/eu/kanade/domain/connection/SyncPreferences.kt index e7dd2d7634..284e6499f7 100644 --- a/app/src/main/java/eu/kanade/domain/connection/SyncPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/connection/SyncPreferences.kt @@ -11,28 +11,31 @@ class SyncPreferences( private val preferenceStore: PreferenceStore, ) { // AM (SYNC_YOMI) --> - fun clientHost() = preferenceStore.getString("connection_sync_client_host", "https://sync.animiru.net") - fun clientAPIKey() = preferenceStore.getString("connection_sync_client_api_key", "") + val clientHost: Preference = preferenceStore.getString( + "connection_sync_client_host", + "https://sync.animiru.net", + ) + val clientAPIKey: Preference = preferenceStore.getString("connection_sync_client_api_key", "") // <-- AM (SYNC_YOMI) - fun lastSyncTimestamp() = preferenceStore.getLong(Preference.appStateKey("last_sync_timestamp"), 0L) + val lastSyncTimestamp: Preference = preferenceStore.getLong(Preference.appStateKey("last_sync_timestamp"), 0L) - fun lastSyncEtag() = preferenceStore.getString("sync_etag", "") + val lastSyncEtag: Preference = preferenceStore.getString("sync_etag", "") - fun syncInterval() = preferenceStore.getInt("sync_interval", 0) + val syncInterval: Preference = preferenceStore.getInt("sync_interval", 0) // AM (SYNC_DRIVE) --> - fun googleDriveAccessToken() = preferenceStore.getString( + val googleDriveAccessToken: Preference = preferenceStore.getString( Preference.appStateKey("connection_google_drive_access_token"), "", ) - fun googleDriveRefreshToken() = preferenceStore.getString( + val googleDriveRefreshToken: Preference = preferenceStore.getString( Preference.appStateKey("connection_google_drive_refresh_token"), "", ) // <-- AM (SYNC_DRIVE) - fun isSyncEnabled() = googleDriveRefreshToken().get().isNotBlank() || clientAPIKey().get().isNotBlank() + fun isSyncEnabled() = googleDriveRefreshToken.get().isNotBlank() || clientAPIKey.get().isNotBlank() fun uniqueDeviceID(): String { val uniqueIDPreference = preferenceStore.getString("unique_device_id", "") diff --git a/app/src/main/java/eu/kanade/domain/connection/service/ConnectionPreferences.kt b/app/src/main/java/eu/kanade/domain/connection/service/ConnectionPreferences.kt index f17d31069b..8d274a7df0 100644 --- a/app/src/main/java/eu/kanade/domain/connection/service/ConnectionPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/connection/service/ConnectionPreferences.kt @@ -2,6 +2,7 @@ package eu.kanade.domain.connection.service import eu.kanade.tachiyomi.data.connection.Connection +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class ConnectionPreferences( @@ -25,13 +26,16 @@ class ConnectionPreferences( fun connectionToken(connection: Connection) = preferenceStore.getString(connectionToken(connection.id), "") // AM (DISCORD_RPC) --> - fun enableDiscordRPC() = preferenceStore.getBoolean("pref_enable_discord_rpc", false) + val enableDiscordRPC: Preference = preferenceStore.getBoolean("pref_enable_discord_rpc", false) - fun discordRPCStatus() = preferenceStore.getInt("pref_discord_rpc_status", 1) + val discordRPCStatus: Preference = preferenceStore.getInt("pref_discord_rpc_status", 1) - fun discordRPCIncognito() = preferenceStore.getBoolean("pref_discord_rpc_incognito", false) + val discordRPCIncognito: Preference = preferenceStore.getBoolean("pref_discord_rpc_incognito", false) - fun discordRPCIncognitoCategories() = preferenceStore.getStringSet("discord_rpc_incognito_categories", emptySet()) + val discordRPCIncognitoCategories: Preference> = preferenceStore.getStringSet( + "discord_rpc_incognito_categories", + emptySet(), + ) // <-- AM (DISCORD_RPC) companion object { diff --git a/app/src/main/java/eu/kanade/domain/episode/interactor/SetSeenStatus.kt b/app/src/main/java/eu/kanade/domain/episode/interactor/SetSeenStatus.kt index 05e81f0357..3ffc7d3a9c 100644 --- a/app/src/main/java/eu/kanade/domain/episode/interactor/SetSeenStatus.kt +++ b/app/src/main/java/eu/kanade/domain/episode/interactor/SetSeenStatus.kt @@ -46,7 +46,7 @@ class SetSeenStatus( return@withNonCancellableContext Result.InternalError(e) } - if (seen && downloadPreferences.removeAfterMarkedAsSeen().get()) { + if (seen && downloadPreferences.removeAfterMarkedAsSeen.get()) { episodesToUpdate .groupBy { it.animeId } .forEach { (animeId, episodes) -> diff --git a/app/src/main/java/eu/kanade/domain/episode/interactor/SyncEpisodesWithSource.kt b/app/src/main/java/eu/kanade/domain/episode/interactor/SyncEpisodesWithSource.kt index 1b301dffec..e3b3b48ec3 100644 --- a/app/src/main/java/eu/kanade/domain/episode/interactor/SyncEpisodesWithSource.kt +++ b/app/src/main/java/eu/kanade/domain/episode/interactor/SyncEpisodesWithSource.kt @@ -190,7 +190,7 @@ class SyncEpisodesWithSource( val deletedEpisodeNumberDateFetchMap = removedEpisodes.sortedByDescending { it.dateFetch } .associate { it.episodeNumber to it.dateFetch } - val markDuplicateAsSeen = libraryPreferences.markDuplicateSeenEpisodeAsSeen().get() + val markDuplicateAsSeen = libraryPreferences.markDuplicateSeenEpisodeAsSeen.get() .contains(LibraryPreferences.MARK_DUPLICATE_EPISODE_SEEN_NEW) // Date fetch is set in such a way that the upper ones will have bigger value than the lower ones diff --git a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionLanguages.kt b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionLanguages.kt index 968cfbabe7..c155af2480 100644 --- a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionLanguages.kt +++ b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionLanguages.kt @@ -12,7 +12,7 @@ class GetExtensionLanguages( ) { fun subscribe(): Flow> { return combine( - preferences.enabledLanguages().changes(), + preferences.enabledLanguages.changes(), extensionManager.availableExtensionsFlow, ) { enabledLanguage, availableExtensions -> availableExtensions diff --git a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionSources.kt b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionSources.kt index e8674ccc8e..32fdb7bd4d 100644 --- a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionSources.kt +++ b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionSources.kt @@ -15,7 +15,7 @@ class GetExtensionSources( val isMultiLangSingleSource = isMultiSource && extension.sources.map { it.name }.distinct().size == 1 - return preferences.disabledSources().changes().map { disabledSources -> + return preferences.disabledSources.changes().map { disabledSources -> fun AnimeSource.isEnabled() = id.toString() !in disabledSources extension.sources diff --git a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionsByType.kt b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionsByType.kt index 4894034072..c2bfd49f8e 100644 --- a/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionsByType.kt +++ b/app/src/main/java/eu/kanade/domain/extension/interactor/GetExtensionsByType.kt @@ -13,10 +13,10 @@ class GetExtensionsByType( ) { fun subscribe(): Flow { - val showNsfwSources = preferences.showNsfwSource().get() + val showNsfwSources = preferences.showNsfwSource.get() return combine( - preferences.enabledLanguages().changes(), + preferences.enabledLanguages.changes(), extensionManager.installedExtensionsFlow, extensionManager.untrustedExtensionsFlow, extensionManager.availableExtensionsFlow, diff --git a/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt b/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt index b4259945d1..40871be055 100644 --- a/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt +++ b/app/src/main/java/eu/kanade/domain/extension/interactor/TrustExtension.kt @@ -14,11 +14,11 @@ class TrustExtension( suspend fun isTrusted(pkgInfo: PackageInfo, fingerprints: List): Boolean { val trustedFingerprints = extensionRepoRepository.getAll().map { it.signingKeyFingerprint }.toHashSet() val key = "${pkgInfo.packageName}:${PackageInfoCompat.getLongVersionCode(pkgInfo)}:${fingerprints.last()}" - return trustedFingerprints.any { fingerprints.contains(it) } || key in preferences.trustedExtensions().get() + return trustedFingerprints.any { fingerprints.contains(it) } || key in preferences.trustedExtensions.get() } fun trust(pkgName: String, versionCode: Long, signatureHash: String) { - preferences.trustedExtensions().getAndSet { exts -> + preferences.trustedExtensions.getAndSet { exts -> // Remove previously trusted versions val removed = exts.filterNot { it.startsWith("$pkgName:") }.toMutableSet() @@ -27,6 +27,6 @@ class TrustExtension( } fun revokeAll() { - preferences.trustedExtensions().delete() + preferences.trustedExtensions.delete() } } diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt b/app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt index 046d5055d0..104897c623 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt @@ -17,10 +17,10 @@ class GetEnabledSources( fun subscribe(): Flow> { return combine( - preferences.pinnedSources().changes(), - preferences.enabledLanguages().changes(), - preferences.disabledSources().changes(), - preferences.lastUsedSource().changes(), + preferences.pinnedSources.changes(), + preferences.enabledLanguages.changes(), + preferences.disabledSources.changes(), + preferences.lastUsedSource.changes(), repository.getSources(), ) { pinnedSourceIds, enabledLanguages, disabledSources, lastUsedSource, sources -> sources diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/GetIncognitoState.kt b/app/src/main/java/eu/kanade/domain/source/interactor/GetIncognitoState.kt index 41ab65f30c..d39a5ad5fc 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/GetIncognitoState.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/GetIncognitoState.kt @@ -13,19 +13,19 @@ class GetIncognitoState( private val extensionManager: ExtensionManager, ) { fun await(sourceId: Long?): Boolean { - if (basePreferences.incognitoMode().get()) return true + if (basePreferences.incognitoMode.get()) return true if (sourceId == null) return false val extensionPackage = extensionManager.getExtensionPackage(sourceId) ?: return false - return extensionPackage in sourcePreferences.incognitoExtensions().get() + return extensionPackage in sourcePreferences.incognitoExtensions.get() } fun subscribe(sourceId: Long?): Flow { - if (sourceId == null) return basePreferences.incognitoMode().changes() + if (sourceId == null) return basePreferences.incognitoMode.changes() return combine( - basePreferences.incognitoMode().changes(), - sourcePreferences.incognitoExtensions().changes(), + basePreferences.incognitoMode.changes(), + sourcePreferences.incognitoExtensions.changes(), extensionManager.getExtensionPackageAsFlow(sourceId), ) { incognito, incognitoExtensions, extensionPackage -> incognito || (extensionPackage in incognitoExtensions) diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/GetLanguagesWithSources.kt b/app/src/main/java/eu/kanade/domain/source/interactor/GetLanguagesWithSources.kt index 9fc927d4e3..69587a4c59 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/GetLanguagesWithSources.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/GetLanguagesWithSources.kt @@ -15,8 +15,8 @@ class GetLanguagesWithSources( fun subscribe(): Flow>> { return combine( - preferences.enabledLanguages().changes(), - preferences.disabledSources().changes(), + preferences.enabledLanguages.changes(), + preferences.disabledSources.changes(), repository.getOnlineSources(), ) { enabledLanguage, disabledSource, onlineSources -> val sortedSources = onlineSources.sortedWith( diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount.kt b/app/src/main/java/eu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount.kt index 962fbb8a6e..cb6debd7ea 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/GetSourcesWithFavoriteCount.kt @@ -16,8 +16,8 @@ class GetSourcesWithFavoriteCount( fun subscribe(): Flow>> { return combine( - preferences.migrationSortingDirection().changes(), - preferences.migrationSortingMode().changes(), + preferences.migrationSortingDirection.changes(), + preferences.migrationSortingMode.changes(), repository.getSourcesWithFavoriteCount(), ) { direction, mode, list -> list diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt b/app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt index 4e4ae4bdd3..9a5e081775 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/SetMigrateSorting.kt @@ -7,8 +7,8 @@ class SetMigrateSorting( ) { fun await(mode: Mode, direction: Direction) { - preferences.migrationSortingMode().set(mode) - preferences.migrationSortingDirection().set(direction) + preferences.migrationSortingMode.set(mode) + preferences.migrationSortingDirection.set(direction) } enum class Mode { diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleIncognito.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleIncognito.kt index ccd13bf6ad..7816171ea5 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleIncognito.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleIncognito.kt @@ -7,7 +7,7 @@ class ToggleIncognito( private val preferences: SourcePreferences, ) { fun await(extensions: String, enable: Boolean) { - preferences.incognitoExtensions().getAndSet { + preferences.incognitoExtensions.getAndSet { if (enable) it.plus(extensions) else it.minus(extensions) } } diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt index c813890d22..6af4d0085b 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleLanguage.kt @@ -8,8 +8,8 @@ class ToggleLanguage( ) { fun await(language: String) { - val isEnabled = language in preferences.enabledLanguages().get() - preferences.enabledLanguages().getAndSet { enabled -> + val isEnabled = language in preferences.enabledLanguages.get() + preferences.enabledLanguages.getAndSet { enabled -> if (isEnabled) enabled.minus(language) else enabled.plus(language) } } diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt index ec13f8d4b5..5a2b6be0f0 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSource.kt @@ -13,19 +13,19 @@ class ToggleSource( } fun await(sourceId: Long, enable: Boolean = isEnabled(sourceId)) { - preferences.disabledSources().getAndSet { disabled -> + preferences.disabledSources.getAndSet { disabled -> if (enable) disabled.minus("$sourceId") else disabled.plus("$sourceId") } } fun await(sourceIds: List, enable: Boolean) { val transformedSourceIds = sourceIds.map { it.toString() } - preferences.disabledSources().getAndSet { disabled -> + preferences.disabledSources.getAndSet { disabled -> if (enable) disabled.minus(transformedSourceIds) else disabled.plus(transformedSourceIds) } } private fun isEnabled(sourceId: Long): Boolean { - return sourceId.toString() in preferences.disabledSources().get() + return sourceId.toString() in preferences.disabledSources.get() } } diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSourcePin.kt b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSourcePin.kt index 0a49a53ba6..e9fbfd1bc1 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSourcePin.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/ToggleSourcePin.kt @@ -9,8 +9,8 @@ class ToggleSourcePin( ) { fun await(source: Source) { - val isPinned = source.id.toString() in preferences.pinnedSources().get() - preferences.pinnedSources().getAndSet { pinned -> + val isPinned = source.id.toString() in preferences.pinnedSources.get() + preferences.pinnedSources.getAndSet { pinned -> if (isPinned) pinned.minus("${source.id}") else pinned.plus("${source.id}") } } diff --git a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt index c7660933fa..3d7d0601ef 100644 --- a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt @@ -10,68 +10,80 @@ import tachiyomi.core.common.preference.getLongArray import tachiyomi.domain.library.model.LibraryDisplayMode class SourcePreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun sourceDisplayMode() = preferenceStore.getObjectFromString( + val sourceDisplayMode: Preference = preferenceStore.getObjectFromString( "pref_display_mode_catalogue", LibraryDisplayMode.default, LibraryDisplayMode.Serializer::serialize, LibraryDisplayMode.Serializer::deserialize, ) - fun enabledLanguages() = preferenceStore.getStringSet("source_languages", LocaleHelper.getDefaultEnabledLanguages()) + val enabledLanguages: Preference> = preferenceStore.getStringSet( + "source_languages", + LocaleHelper.getDefaultEnabledLanguages(), + ) - fun disabledSources() = preferenceStore.getStringSet("hidden_catalogues", emptySet()) + val disabledSources: Preference> = preferenceStore.getStringSet("hidden_catalogues", emptySet()) - fun incognitoExtensions() = preferenceStore.getStringSet("incognito_extensions", emptySet()) + val incognitoExtensions: Preference> = preferenceStore.getStringSet("incognito_extensions", emptySet()) - fun pinnedSources() = preferenceStore.getStringSet("pinned_catalogues", emptySet()) + val pinnedSources: Preference> = preferenceStore.getStringSet("pinned_catalogues", emptySet()) - fun lastUsedSource() = preferenceStore.getLong( + val lastUsedSource: Preference = preferenceStore.getLong( Preference.appStateKey("last_catalogue_source"), -1, ) - fun showNsfwSource() = preferenceStore.getBoolean("show_nsfw_source", true) + val showNsfwSource: Preference = preferenceStore.getBoolean("show_nsfw_source", true) - fun migrationSortingMode() = preferenceStore.getEnum("pref_migration_sorting", SetMigrateSorting.Mode.ALPHABETICAL) + val migrationSortingMode: Preference = preferenceStore.getEnum( + "pref_migration_sorting", + SetMigrateSorting.Mode.ALPHABETICAL, + ) - fun migrationSortingDirection() = preferenceStore.getEnum( + val migrationSortingDirection: Preference = preferenceStore.getEnum( "pref_migration_direction", SetMigrateSorting.Direction.ASCENDING, ) - fun hideInLibraryItems() = preferenceStore.getBoolean("browse_hide_in_library_items", false) + val hideInLibraryItems: Preference = preferenceStore.getBoolean("browse_hide_in_library_items", false) - fun extensionRepos() = preferenceStore.getStringSet("extension_repos", emptySet()) + val extensionRepos: Preference> = preferenceStore.getStringSet("extension_repos", emptySet()) - fun extensionUpdatesCount() = preferenceStore.getInt("ext_updates_count", 0) + val extensionUpdatesCount: Preference = preferenceStore.getInt("ext_updates_count", 0) - fun trustedExtensions() = preferenceStore.getStringSet( + val trustedExtensions: Preference> = preferenceStore.getStringSet( Preference.appStateKey("trusted_extensions"), emptySet(), ) - fun globalSearchFilterState() = preferenceStore.getBoolean( + val globalSearchFilterState: Preference = preferenceStore.getBoolean( Preference.appStateKey("has_filters_toggle_state"), false, ) - fun migrationSources() = preferenceStore.getLongArray("migration_sources", emptyList()) + val migrationSources: Preference> = preferenceStore.getLongArray("migration_sources", emptyList()) - fun migrationFlags() = preferenceStore.getObjectFromInt( + val migrationFlags: Preference> = preferenceStore.getObjectFromInt( key = "migration_flags", defaultValue = MigrationFlag.entries.toSet(), serializer = { MigrationFlag.toBit(it) }, deserializer = { value: Int -> MigrationFlag.fromBit(value) }, ) - fun migrationDeepSearchMode() = preferenceStore.getBoolean("migration_deep_search", false) + val migrationDeepSearchMode: Preference = preferenceStore.getBoolean("migration_deep_search", false) - fun migrationPrioritizeByEpisodes() = preferenceStore.getBoolean("migration_prioritize_by_episodes", false) + val migrationPrioritizeByEpisodes: Preference = preferenceStore.getBoolean( + "migration_prioritize_by_episodes", + false, + ) - fun migrationHideUnmatched() = preferenceStore.getBoolean("migration_hide_unmatched", false) + val migrationHideUnmatched: Preference = preferenceStore.getBoolean("migration_hide_unmatched", false) - fun migrationHideWithoutUpdates() = preferenceStore.getBoolean("migration_hide_without_updates", false) + val migrationHideWithoutUpdates: Preference = preferenceStore.getBoolean( + "migration_hide_without_updates", + false, + ) } diff --git a/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt b/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt index a0c61baf7c..9737c5191b 100644 --- a/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/track/service/TrackPreferences.kt @@ -34,26 +34,26 @@ class TrackPreferences( fun trackToken(tracker: Tracker) = preferenceStore.getString(Preference.privateKey("track_token_${tracker.id}"), "") - fun anilistScoreType() = preferenceStore.getString("anilist_score_type", Anilist.POINT_10) + val anilistScoreType: Preference = preferenceStore.getString("anilist_score_type", Anilist.POINT_10) - fun autoUpdateTrack() = preferenceStore.getBoolean("pref_auto_update_anime_sync_key", true) + val autoUpdateTrack: Preference = preferenceStore.getBoolean("pref_auto_update_anime_sync_key", true) // AY --> - fun trackOnAddingToLibrary() = preferenceStore.getBoolean("track_on_adding_to_library", true) + val trackOnAddingToLibrary: Preference = preferenceStore.getBoolean("track_on_adding_to_library", true) - fun showNextEpisodeAiringTime() = preferenceStore.getBoolean( + val showNextEpisodeAiringTime: Preference = preferenceStore.getBoolean( "show_next_episode_airing_time", true, ) // <-- AY // AM --> - fun syncEnhancedTrackers() = preferenceStore.getBoolean("sync_enhanced_trackers", true) + val syncEnhancedTrackers: Preference = preferenceStore.getBoolean("sync_enhanced_trackers", true) - fun smartTrackerSync() = preferenceStore.getBoolean("smart_sync_trackers", true) + val smartTrackerSync: Preference = preferenceStore.getBoolean("smart_sync_trackers", true) // <-- AM - fun autoUpdateTrackOnMarkSeen() = preferenceStore.getEnum( + val autoUpdateTrackOnMarkSeen: Preference = preferenceStore.getEnum( "pref_auto_update_anime_on_mark_seen", AutoTrackState.ALWAYS, ) diff --git a/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt b/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt index f5d6161587..6c5fbbfd44 100644 --- a/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt +++ b/app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt @@ -6,6 +6,7 @@ import eu.kanade.domain.ui.model.TabletUiMode import eu.kanade.domain.ui.model.ThemeMode import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isDynamicColorAvailable +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import java.time.format.DateTimeFormatter @@ -13,12 +14,12 @@ import java.time.format.FormatStyle import java.util.Locale class UiPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun themeMode() = preferenceStore.getEnum("pref_theme_mode_key", ThemeMode.SYSTEM) + val themeMode: Preference = preferenceStore.getEnum("pref_theme_mode_key", ThemeMode.SYSTEM) - fun appTheme() = preferenceStore.getEnum( + val appTheme: Preference = preferenceStore.getEnum( "pref_app_theme", if (DeviceUtil.isDynamicColorAvailable) { AppTheme.MONET @@ -27,19 +28,19 @@ class UiPreferences( }, ) - fun themeDarkAmoled() = preferenceStore.getBoolean("pref_theme_dark_amoled_key", false) + val themeDarkAmoled: Preference = preferenceStore.getBoolean("pref_theme_dark_amoled_key", false) - fun relativeTime() = preferenceStore.getBoolean("relative_time_v2", true) + val relativeTime: Preference = preferenceStore.getBoolean("relative_time_v2", true) - fun dateFormat() = preferenceStore.getString("app_date_format", "") + val dateFormat: Preference = preferenceStore.getString("app_date_format", "") - fun tabletUiMode() = preferenceStore.getEnum("tablet_ui_mode", TabletUiMode.AUTOMATIC) + val tabletUiMode: Preference = preferenceStore.getEnum("tablet_ui_mode", TabletUiMode.AUTOMATIC) // AY --> - fun startScreen() = preferenceStore.getEnum("start_screen", StartScreen.ANIME) + val startScreen: Preference = preferenceStore.getEnum("start_screen", StartScreen.ANIME) // <-- AY - fun imagesInDescription() = preferenceStore.getBoolean("pref_render_images_description", true) + val imagesInDescription: Preference = preferenceStore.getBoolean("pref_render_images_description", true) companion object { fun dateFormat(format: String): DateTimeFormatter = when (format) { diff --git a/app/src/main/java/eu/kanade/presentation/anime/EpisodeSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/anime/EpisodeSettingsDialog.kt index 2bda391da0..195f973469 100644 --- a/app/src/main/java/eu/kanade/presentation/anime/EpisodeSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/anime/EpisodeSettingsDialog.kt @@ -75,7 +75,7 @@ fun EpisodeSettingsDialog( ) } - val downloadedOnly = remember { Injekt.get().downloadedOnly().get() } + val downloadedOnly = remember { Injekt.get().downloadedOnly.get() } TabbedDialog( onDismissRequest = onDismissRequest, diff --git a/app/src/main/java/eu/kanade/presentation/anime/SeasonSettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/anime/SeasonSettingsDialog.kt index fda73f53a4..51b2a5e020 100644 --- a/app/src/main/java/eu/kanade/presentation/anime/SeasonSettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/anime/SeasonSettingsDialog.kt @@ -77,7 +77,7 @@ fun SeasonSettingsDialog( ) } - val downloadedOnly = remember { Injekt.get().downloadedOnly().get() } + val downloadedOnly = remember { Injekt.get().downloadedOnly.get() } TabbedDialog( onDismissRequest = onDismissRequest, diff --git a/app/src/main/java/eu/kanade/presentation/anime/components/AnimeBottomActionMenu.kt b/app/src/main/java/eu/kanade/presentation/anime/components/AnimeBottomActionMenu.kt index ddc38fdba4..180f83bc8a 100644 --- a/app/src/main/java/eu/kanade/presentation/anime/components/AnimeBottomActionMenu.kt +++ b/app/src/main/java/eu/kanade/presentation/anime/components/AnimeBottomActionMenu.kt @@ -219,7 +219,7 @@ fun AnimeBottomActionMenu( } // AY --> - if (onExternalClicked != null && !playerPreferences.alwaysUseExternalPlayer().get()) { + if (onExternalClicked != null && !playerPreferences.alwaysUseExternalPlayer.get()) { Button( title = stringResource(AYMR.strings.action_play_externally), icon = Icons.AutoMirrored.Outlined.OpenInNew, @@ -228,7 +228,7 @@ fun AnimeBottomActionMenu( onClick = onExternalClicked, ) } - if (onInternalClicked != null && playerPreferences.alwaysUseExternalPlayer().get()) { + if (onInternalClicked != null && playerPreferences.alwaysUseExternalPlayer.get()) { Button( title = stringResource(AYMR.strings.action_play_internally), icon = Icons.AutoMirrored.Outlined.Input, diff --git a/app/src/main/java/eu/kanade/presentation/anime/components/AnimeInfoHeader.kt b/app/src/main/java/eu/kanade/presentation/anime/components/AnimeInfoHeader.kt index bbafd9bb46..9c0fc2cbfc 100644 --- a/app/src/main/java/eu/kanade/presentation/anime/components/AnimeInfoHeader.kt +++ b/app/src/main/java/eu/kanade/presentation/anime/components/AnimeInfoHeader.kt @@ -647,7 +647,7 @@ private fun AnimeSummary( modifier: Modifier = Modifier, ) { val preferences = remember { Injekt.get() } - val loadImages = remember { preferences.imagesInDescription().get() } + val loadImages = remember { preferences.imagesInDescription.get() } val animProgress by animateFloatAsState( targetValue = if (expanded) 1f else 0f, label = "summary", diff --git a/app/src/main/java/eu/kanade/presentation/components/DateText.kt b/app/src/main/java/eu/kanade/presentation/components/DateText.kt index f92c006a03..19426d0f59 100644 --- a/app/src/main/java/eu/kanade/presentation/components/DateText.kt +++ b/app/src/main/java/eu/kanade/presentation/components/DateText.kt @@ -34,8 +34,8 @@ fun relativeDateText( val context = LocalContext.current val preferences = remember { Injekt.get() } - val relativeTime = remember { preferences.relativeTime().get() } - val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat().get()) } + val relativeTime = remember { preferences.relativeTime.get() } + val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat.get()) } return localDate?.toRelativeString( context = context, @@ -68,8 +68,8 @@ fun relativeDateTimeText( val context = LocalContext.current val preferences = remember { Injekt.get() } - val relativeTime = remember { preferences.relativeTime().get() } - val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat().get()) } + val relativeTime = remember { preferences.relativeTime.get() } + val dateFormat = remember { UiPreferences.dateFormat(preferences.dateFormat.get()) } return localDateTime?.toRelativeString( context = context, diff --git a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt index f19eb27859..1b1b35f9d3 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt @@ -102,9 +102,9 @@ fun LibrarySettingsDialog( private fun ColumnScope.FilterPage( screenModel: LibrarySettingsScreenModel, ) { - val filterDownloaded by screenModel.libraryPreferences.filterDownloaded().collectAsState() - val downloadedOnly by screenModel.preferences.downloadedOnly().collectAsState() - val autoUpdateAnimeRestrictions by screenModel.libraryPreferences.autoUpdateAnimeRestrictions().collectAsState() + val filterDownloaded by screenModel.libraryPreferences.filterDownloaded.collectAsState() + val downloadedOnly by screenModel.preferences.downloadedOnly.collectAsState() + val autoUpdateAnimeRestrictions by screenModel.libraryPreferences.autoUpdateAnimeRestrictions.collectAsState() TriStateItem( label = stringResource(MR.strings.label_downloaded), @@ -116,25 +116,25 @@ private fun ColumnScope.FilterPage( enabled = !downloadedOnly, onClick = { screenModel.toggleFilter(LibraryPreferences::filterDownloaded) }, ) - val filterUnseen by screenModel.libraryPreferences.filterUnseen().collectAsState() + val filterUnseen by screenModel.libraryPreferences.filterUnseen.collectAsState() TriStateItem( label = stringResource(AYMR.strings.action_filter_unseen), state = filterUnseen, onClick = { screenModel.toggleFilter(LibraryPreferences::filterUnseen) }, ) - val filterStarted by screenModel.libraryPreferences.filterStarted().collectAsState() + val filterStarted by screenModel.libraryPreferences.filterStarted.collectAsState() TriStateItem( label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(LibraryPreferences::filterStarted) }, ) - val filterBookmarked by screenModel.libraryPreferences.filterBookmarked().collectAsState() + val filterBookmarked by screenModel.libraryPreferences.filterBookmarked.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, onClick = { screenModel.toggleFilter(LibraryPreferences::filterBookmarked) }, ) - val filterCompleted by screenModel.libraryPreferences.filterCompleted().collectAsState() + val filterCompleted by screenModel.libraryPreferences.filterCompleted.collectAsState() TriStateItem( label = stringResource(MR.strings.completed), state = filterCompleted, @@ -142,7 +142,7 @@ private fun ColumnScope.FilterPage( ) // TODO: re-enable when custom intervals are ready for stable if ((!isReleaseBuildType) && LibraryPreferences.ANIME_OUTSIDE_RELEASE_PERIOD in autoUpdateAnimeRestrictions) { - val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom().collectAsState() + val filterIntervalCustom by screenModel.libraryPreferences.filterIntervalCustom.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_interval_custom), state = filterIntervalCustom, @@ -185,7 +185,7 @@ private fun ColumnScope.SortPage( ) { val trackers by screenModel.trackersFlow.collectAsState() // AM (GROUPING) --> - val globalSortMode by screenModel.libraryPreferences.sortingMode().collectAsState() + val globalSortMode by screenModel.libraryPreferences.sortingMode.collectAsState() val sortingMode = if (screenModel.grouping == LibraryGroup.BY_DEFAULT) { category.sort.type } else { @@ -267,7 +267,7 @@ private val displayModes = listOf( private fun ColumnScope.DisplayPage( screenModel: LibrarySettingsScreenModel, ) { - val displayMode by screenModel.libraryPreferences.displayMode().collectAsState() + val displayMode by screenModel.libraryPreferences.displayMode.collectAsState() SettingsChipRow(MR.strings.action_display_mode) { displayModes.map { (titleRes, mode) -> FilterChip( @@ -282,9 +282,9 @@ private fun ColumnScope.DisplayPage( val configuration = LocalConfiguration.current val columnPreference = remember { if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - screenModel.libraryPreferences.landscapeColumns() + screenModel.libraryPreferences.landscapeColumns } else { - screenModel.libraryPreferences.portraitColumns() + screenModel.libraryPreferences.portraitColumns } } @@ -321,33 +321,33 @@ private fun ColumnScope.DisplayPage( HeadingItem(MR.strings.overlay_header) CheckboxItem( label = stringResource(AYMR.strings.action_display_download_badge_anime), - pref = screenModel.libraryPreferences.downloadBadge(), + pref = screenModel.libraryPreferences.downloadBadge, ) CheckboxItem( label = stringResource(AYMR.strings.action_display_unseen_badge), - pref = screenModel.libraryPreferences.unseenBadge(), + pref = screenModel.libraryPreferences.unseenBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_local_badge), - pref = screenModel.libraryPreferences.localBadge(), + pref = screenModel.libraryPreferences.localBadge, ) CheckboxItem( label = stringResource(MR.strings.action_display_language_badge), - pref = screenModel.libraryPreferences.languageBadge(), + pref = screenModel.libraryPreferences.languageBadge, ) CheckboxItem( label = stringResource(AMMR.strings.am_action_display_show_continue_watching_button), - pref = screenModel.libraryPreferences.showContinueWatchingButton(), + pref = screenModel.libraryPreferences.showContinueWatchingButton, ) HeadingItem(MR.strings.tabs_header) CheckboxItem( label = stringResource(MR.strings.action_display_show_tabs), - pref = screenModel.libraryPreferences.categoryTabs(), + pref = screenModel.libraryPreferences.categoryTabs, ) CheckboxItem( label = stringResource(MR.strings.action_display_show_number_of_items), - pref = screenModel.libraryPreferences.categoryNumberOfItems(), + pref = screenModel.libraryPreferences.categoryNumberOfItems, ) } diff --git a/app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt b/app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt index 48061b49e3..3713353041 100644 --- a/app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt +++ b/app/src/main/java/eu/kanade/presentation/more/onboarding/StorageStep.kt @@ -34,7 +34,7 @@ import uy.kohesive.injekt.api.get internal class StorageStep : OnboardingStep { - private val storagePref = Injekt.get().baseStorageDirectory() + private val storagePref = Injekt.get().baseStorageDirectory // AY --> private val folderProvider = Injekt.get() diff --git a/app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt b/app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt index dfd7517dcc..8fb18a4e82 100644 --- a/app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt +++ b/app/src/main/java/eu/kanade/presentation/more/onboarding/ThemeStep.kt @@ -19,13 +19,13 @@ internal class ThemeStep : OnboardingStep { @Composable override fun Content() { - val themeModePref = uiPreferences.themeMode() + val themeModePref = uiPreferences.themeMode val themeMode by themeModePref.collectAsState() - val appThemePref = uiPreferences.appTheme() + val appThemePref = uiPreferences.appTheme val appTheme by appThemePref.collectAsState() - val amoledPref = uiPreferences.themeDarkAmoled() + val amoledPref = uiPreferences.themeDarkAmoled val amoled by amoledPref.collectAsState() Column { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt index 85209b1d6e..33604a191b 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt @@ -93,7 +93,7 @@ object SettingsAdvancedScreen : SearchableSettings { }, ), Preference.PreferenceItem.SwitchPreference( - preference = networkPreferences.verboseLogging(), + preference = networkPreferences.verboseLogging, title = stringResource(MR.strings.pref_verbose_logging), subtitle = stringResource(MR.strings.pref_verbose_logging_summary), onValueChanged = { @@ -197,7 +197,7 @@ object SettingsAdvancedScreen : SearchableSettings { val context = LocalContext.current val networkHelper = remember { Injekt.get() } - val userAgentPref = networkPreferences.defaultUserAgent() + val userAgentPref = networkPreferences.defaultUserAgent val userAgent by userAgentPref.collectAsState() return Preference.PreferenceGroup( @@ -231,7 +231,7 @@ object SettingsAdvancedScreen : SearchableSettings { }, ), Preference.PreferenceItem.ListPreference( - preference = networkPreferences.dohProvider(), + preference = networkPreferences.dohProvider, entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), PREF_DOH_CLOUDFLARE to "Cloudflare", @@ -298,12 +298,12 @@ object SettingsAdvancedScreen : SearchableSettings { onClick = { MetadataUpdateJob.startNow(context) }, ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.updateAnimeTitles(), + preference = libraryPreferences.updateAnimeTitles, title = stringResource(AMMR.strings.am_pref_update_library_anime_titles), subtitle = stringResource(AMMR.strings.am_pref_update_library_anime_titles_summary), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.disallowNonAsciiFilenames(), + preference = libraryPreferences.disallowNonAsciiFilenames, title = stringResource(MR.strings.pref_disallow_non_ascii_filenames), subtitle = stringResource(AMMR.strings.am_pref_disallow_non_ascii_filenames_details), ), @@ -317,7 +317,7 @@ object SettingsAdvancedScreen : SearchableSettings { ): Preference.PreferenceGroup { val context = LocalContext.current val uriHandler = LocalUriHandler.current - val extensionInstallerPref = basePreferences.extensionInstaller() + val extensionInstallerPref = basePreferences.extensionInstaller var shizukuMissing by rememberSaveable { mutableStateOf(false) } val trustExtension = remember { Injekt.get() } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt index cc96152101..c9cd635cb6 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAppearanceScreen.kt @@ -53,13 +53,13 @@ object SettingsAppearanceScreen : SearchableSettings { ): Preference.PreferenceGroup { val context = LocalContext.current - val themeModePref = uiPreferences.themeMode() + val themeModePref = uiPreferences.themeMode val themeMode by themeModePref.collectAsState() - val appThemePref = uiPreferences.appTheme() + val appThemePref = uiPreferences.appTheme val appTheme by appThemePref.collectAsState() - val amoledPref = uiPreferences.themeDarkAmoled() + val amoledPref = uiPreferences.themeDarkAmoled val amoled by amoledPref.collectAsState() return Preference.PreferenceGroup( @@ -106,7 +106,7 @@ object SettingsAppearanceScreen : SearchableSettings { val now = remember { LocalDate.now() } - val dateFormat by uiPreferences.dateFormat().collectAsState() + val dateFormat by uiPreferences.dateFormat.collectAsState() val formattedNow = remember(dateFormat) { UiPreferences.dateFormat(dateFormat).format(now) } @@ -119,7 +119,7 @@ object SettingsAppearanceScreen : SearchableSettings { onClick = { navigator.push(AppLanguageScreen()) }, ), Preference.PreferenceItem.ListPreference( - preference = uiPreferences.tabletUiMode(), + preference = uiPreferences.tabletUiMode, entries = TabletUiMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), @@ -131,7 +131,7 @@ object SettingsAppearanceScreen : SearchableSettings { ), // AY --> Preference.PreferenceItem.ListPreference( - preference = uiPreferences.startScreen(), + preference = uiPreferences.startScreen, entries = StartScreen.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), @@ -143,7 +143,7 @@ object SettingsAppearanceScreen : SearchableSettings { ), // <-- AY Preference.PreferenceItem.ListPreference( - preference = uiPreferences.dateFormat(), + preference = uiPreferences.dateFormat, entries = DateFormats .associateWith { val formattedDate = UiPreferences.dateFormat(it).format(now) @@ -153,7 +153,7 @@ object SettingsAppearanceScreen : SearchableSettings { title = stringResource(MR.strings.pref_date_format), ), Preference.PreferenceItem.SwitchPreference( - preference = uiPreferences.relativeTime(), + preference = uiPreferences.relativeTime, title = stringResource(MR.strings.pref_relative_format), subtitle = stringResource( MR.strings.pref_relative_format_summary, @@ -162,7 +162,7 @@ object SettingsAppearanceScreen : SearchableSettings { ), ), Preference.PreferenceItem.SwitchPreference( - preference = uiPreferences.imagesInDescription(), + preference = uiPreferences.imagesInDescription, title = stringResource(AMMR.strings.am_pref_display_images_description), ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt index 6baeda597b..25e2b384a8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt @@ -43,7 +43,7 @@ object SettingsBrowseScreen : SearchableSettings { title = stringResource(MR.strings.label_sources), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - preference = sourcePreferences.hideInLibraryItems(), + preference = sourcePreferences.hideInLibraryItems, title = stringResource(MR.strings.pref_hide_in_library_items), ), Preference.PreferenceItem.TextPreference( @@ -59,7 +59,7 @@ object SettingsBrowseScreen : SearchableSettings { title = stringResource(MR.strings.pref_category_nsfw_content), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - preference = sourcePreferences.showNsfwSource(), + preference = sourcePreferences.showNsfwSource, title = stringResource(MR.strings.pref_show_nsfw_source), subtitle = stringResource(MR.strings.requires_app_restart), onValueChanged = { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt index ddaf68ec88..0f6c68e180 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDataScreen.kt @@ -169,11 +169,11 @@ object SettingsDataScreen : SearchableSettings { storagePreferences: StoragePreferences, ): Preference.PreferenceItem.TextPreference { val context = LocalContext.current - val pickStorageLocation = storageLocationPicker(storagePreferences.baseStorageDirectory()) + val pickStorageLocation = storageLocationPicker(storagePreferences.baseStorageDirectory) return Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.pref_storage_location), - subtitle = storageLocationText(storagePreferences.baseStorageDirectory()), + subtitle = storageLocationText(storagePreferences.baseStorageDirectory), onClick = { try { pickStorageLocation.launch(null) @@ -189,7 +189,7 @@ object SettingsDataScreen : SearchableSettings { val context = LocalContext.current val navigator = LocalNavigator.currentOrThrow - val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp().collectAsState() + val lastAutoBackup by backupPreferences.lastAutoBackupTimestamp.collectAsState() val chooseBackup = rememberLauncherForActivityResult( object : ActivityResultContracts.GetContent() { @@ -256,7 +256,7 @@ object SettingsDataScreen : SearchableSettings { // Automatic backups Preference.PreferenceItem.ListPreference( - preference = backupPreferences.backupInterval(), + preference = backupPreferences.backupInterval, entries = persistentMapOf( 0 to stringResource(MR.strings.off), 6 to stringResource(MR.strings.update_6hour), @@ -287,7 +287,7 @@ object SettingsDataScreen : SearchableSettings { // AM (FILE_SIZE) --> LaunchedEffect(Unit) { - storagePreferences.showEpisodeFileSize().changes() + storagePreferences.showEpisodeFileSize.changes() .drop(1) .collectLatest { value -> if (value) { @@ -319,7 +319,7 @@ object SettingsDataScreen : SearchableSettings { // <-- AM (STORAGE_SCREEN) // AM (FILE_SIZE) --> Preference.PreferenceItem.SwitchPreference( - preference = storagePreferences.showEpisodeFileSize(), + preference = storagePreferences.showEpisodeFileSize, title = stringResource(AMMR.strings.pref_show_downloaded_episode_file_size), ), // <-- AM (FILE_SIZE) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDiscordScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDiscordScreen.kt index 25eb193a95..c549145dfe 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDiscordScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDiscordScreen.kt @@ -59,8 +59,8 @@ object SettingsDiscordScreen : SearchableSettings { val navigator = LocalNavigator.currentOrThrow val connectionPreferences = remember { Injekt.get() } val connectionManager = remember { Injekt.get() } - val enableDRPCPref = connectionPreferences.enableDiscordRPC() - val discordRPCStatus = connectionPreferences.discordRPCStatus() + val enableDRPCPref = connectionPreferences.enableDiscordRPC + val discordRPCStatus = connectionPreferences.discordRPCStatus val enableDRPC by enableDRPCPref.collectAsState() @@ -127,8 +127,8 @@ object SettingsDiscordScreen : SearchableSettings { }, ) - val discordRPCIncognitoPref = connectionPreferences.discordRPCIncognito() - val discordRPCIncognitoCategoriesPref = connectionPreferences.discordRPCIncognitoCategories() + val discordRPCIncognitoPref = connectionPreferences.discordRPCIncognito + val discordRPCIncognitoCategoriesPref = connectionPreferences.discordRPCIncognitoCategories val includedAnime by discordRPCIncognitoCategoriesPref.collectAsState() var showAnimeDialog by rememberSaveable { mutableStateOf(false) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt index 084c55c68b..a6d74f9ac1 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsDownloadScreen.kt @@ -41,20 +41,20 @@ object SettingsDownloadScreen : SearchableSettings { val allCategories by getCategories.subscribe().collectAsState(initial = emptyList()) val downloadPreferences = remember { Injekt.get() } - val parallelSourceLimit by downloadPreferences.parallelSourceLimit().collectAsState() + val parallelSourceLimit by downloadPreferences.parallelSourceLimit.collectAsState() // AY --> val basePreferences = remember { Injekt.get() } // <-- AY return listOf( Preference.PreferenceItem.SwitchPreference( - preference = downloadPreferences.downloadOnlyOverWifi(), + preference = downloadPreferences.downloadOnlyOverWifi, title = stringResource(MR.strings.connected_to_wifi), ), Preference.PreferenceItem.SliderPreference( value = parallelSourceLimit, valueRange = 1..10, title = stringResource(MR.strings.pref_download_concurrent_sources), - onValueChanged = { downloadPreferences.parallelSourceLimit().set(it) }, + onValueChanged = { downloadPreferences.parallelSourceLimit.set(it) }, ), getDeleteEpisodesGroup( downloadPreferences = downloadPreferences, @@ -83,11 +83,11 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(AMMR.strings.am_pref_category_delete_episodes), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - preference = downloadPreferences.removeAfterMarkedAsSeen(), + preference = downloadPreferences.removeAfterMarkedAsSeen, title = stringResource(AMMR.strings.am_pref_remove_after_marked_as_seen), ), Preference.PreferenceItem.ListPreference( - preference = downloadPreferences.removeAfterSeenSlots(), + preference = downloadPreferences.removeAfterSeenSlots, entries = persistentMapOf( -1 to stringResource(MR.strings.disabled), 0 to stringResource(AMMR.strings.am_last_seen_episode), @@ -99,12 +99,12 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(AMMR.strings.am_pref_remove_after_seen), ), Preference.PreferenceItem.SwitchPreference( - preference = downloadPreferences.removeBookmarkedEpisodes(), + preference = downloadPreferences.removeBookmarkedEpisodes, title = stringResource(AMMR.strings.am_pref_remove_bookmarked_episodes), ), // AY --> Preference.PreferenceItem.SwitchPreference( - preference = downloadPreferences.downloadFillermarkedEpisodes(), + preference = downloadPreferences.downloadFillermarkedEpisodes, title = stringResource(AYMR.strings.pref_download_fillermarked_items), ), // <-- AY @@ -122,7 +122,7 @@ object SettingsDownloadScreen : SearchableSettings { categories: () -> List, ): Preference.PreferenceItem.MultiSelectListPreference { return Preference.PreferenceItem.MultiSelectListPreference( - preference = downloadPreferences.removeExcludeCategories(), + preference = downloadPreferences.removeExcludeCategories, entries = categories() .associate { it.id.toString() to it.visualName } .toImmutableMap(), @@ -135,10 +135,10 @@ object SettingsDownloadScreen : SearchableSettings { downloadPreferences: DownloadPreferences, allCategories: List, ): Preference.PreferenceGroup { - val downloadNewEpisodesPref = downloadPreferences.downloadNewEpisodes() - val downloadNewUnseenEpisodesOnlyPref = downloadPreferences.downloadNewUnseenEpisodesOnly() - val downloadNewEpisodeCategoriesPref = downloadPreferences.downloadNewEpisodeCategories() - val downloadNewEpisodeCategoriesExcludePref = downloadPreferences.downloadNewEpisodeCategoriesExclude() + val downloadNewEpisodesPref = downloadPreferences.downloadNewEpisodes + val downloadNewUnseenEpisodesOnlyPref = downloadPreferences.downloadNewUnseenEpisodesOnly + val downloadNewEpisodeCategoriesPref = downloadPreferences.downloadNewEpisodeCategories + val downloadNewEpisodeCategoriesExcludePref = downloadPreferences.downloadNewEpisodeCategoriesExclude val downloadNewEpisodes by downloadNewEpisodesPref.collectAsState() @@ -196,7 +196,7 @@ object SettingsDownloadScreen : SearchableSettings { title = stringResource(MR.strings.download_ahead), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - preference = downloadPreferences.autoDownloadWhileWatching(), + preference = downloadPreferences.autoDownloadWhileWatching, entries = listOf(0, 2, 3, 5, 10) .associateWith { if (it == 0) { @@ -219,8 +219,8 @@ object SettingsDownloadScreen : SearchableSettings { downloadPreferences: DownloadPreferences, basePreferences: BasePreferences, ): Preference.PreferenceGroup { - val useExternalDownloader = downloadPreferences.useExternalDownloader() - val externalDownloaderPreference = downloadPreferences.externalDownloaderSelection() + val useExternalDownloader = downloadPreferences.useExternalDownloader + val externalDownloaderPreference = downloadPreferences.externalDownloaderSelection val pm = basePreferences.context.packageManager val installedPackages = pm.getInstalledPackages(0) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt index dadbda68f6..199c397acc 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt @@ -79,7 +79,7 @@ object SettingsLibraryScreen : SearchableSettings { val userCategoriesCount = allCategories.filterNot(Category::isSystemCategory).size // For default category - val ids = listOf(libraryPreferences.defaultCategory().defaultValue()) + + val ids = listOf(libraryPreferences.defaultCategory.defaultValue()) + allCategories.fastMap { it.id.toInt() } val labels = listOf(stringResource(MR.strings.default_category_summary)) + allCategories.fastMap { it.visualName } @@ -97,12 +97,12 @@ object SettingsLibraryScreen : SearchableSettings { onClick = { navigator.push(CategoryScreen()) }, ), Preference.PreferenceItem.ListPreference( - preference = libraryPreferences.defaultCategory(), + preference = libraryPreferences.defaultCategory, entries = ids.zip(labels).toMap().toImmutableMap(), title = stringResource(MR.strings.default_category), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.categorizedDisplaySettings(), + preference = libraryPreferences.categorizedDisplaySettings, title = stringResource(MR.strings.categorized_display_settings), onValueChanged = { if (!it) { @@ -115,7 +115,7 @@ object SettingsLibraryScreen : SearchableSettings { ), // AY --> Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.hideHiddenCategoriesSettings(), + preference = libraryPreferences.hideHiddenCategoriesSettings, title = stringResource(AYMR.strings.pref_category_hide_hidden), ), // <-- AY @@ -130,9 +130,9 @@ object SettingsLibraryScreen : SearchableSettings { ): Preference.PreferenceGroup { val context = LocalContext.current - val autoUpdateIntervalPref = libraryPreferences.autoUpdateInterval() - val autoUpdateCategoriesPref = libraryPreferences.updateCategories() - val autoUpdateCategoriesExcludePref = libraryPreferences.updateCategoriesExclude() + val autoUpdateIntervalPref = libraryPreferences.autoUpdateInterval + val autoUpdateCategoriesPref = libraryPreferences.updateCategories + val autoUpdateCategoriesExcludePref = libraryPreferences.updateCategoriesExclude val autoUpdateInterval by autoUpdateIntervalPref.collectAsState() @@ -176,7 +176,7 @@ object SettingsLibraryScreen : SearchableSettings { }, ), Preference.PreferenceItem.MultiSelectListPreference( - preference = libraryPreferences.autoUpdateDeviceRestrictions(), + 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), @@ -202,7 +202,7 @@ object SettingsLibraryScreen : SearchableSettings { ), // AM (GROUPING) --> Preference.PreferenceItem.ListPreference( - preference = libraryPreferences.groupLibraryUpdateType(), + preference = libraryPreferences.groupLibraryUpdateType, title = stringResource(AMMR.strings.library_group_updates), entries = persistentMapOf( GroupLibraryMode.GLOBAL to stringResource(AMMR.strings.library_group_updates_global), @@ -214,12 +214,12 @@ object SettingsLibraryScreen : SearchableSettings { ), // <-- AM (GROUPING) Preference.PreferenceItem.SwitchPreference( - preference = 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( - preference = libraryPreferences.autoUpdateAnimeRestrictions(), + preference = libraryPreferences.autoUpdateAnimeRestrictions, entries = persistentMapOf( ANIME_HAS_UNSEEN to stringResource(AMMR.strings.am_pref_update_only_completely_seen), ANIME_NON_SEEN to stringResource(MR.strings.pref_update_only_started), @@ -229,7 +229,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(MR.strings.pref_library_update_smart_update), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.newShowUpdatesCount(), + preference = libraryPreferences.newShowUpdatesCount, title = stringResource(AMMR.strings.am_pref_library_update_show_tab_badge), ), ), @@ -245,11 +245,11 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(AYMR.strings.pref_library_season), preferenceItems = persistentListOf( Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.updateSeasonOnRefresh(), + preference = libraryPreferences.updateSeasonOnRefresh, title = stringResource(AYMR.strings.pref_update_seasons_refresh), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.updateSeasonOnLibraryUpdate(), + preference = libraryPreferences.updateSeasonOnLibraryUpdate, title = stringResource(AYMR.strings.pref_update_seasons_update), ), ), @@ -265,7 +265,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(MR.strings.pref_behavior), preferenceItems = persistentListOf( Preference.PreferenceItem.ListPreference( - preference = libraryPreferences.swipeToStartAction(), + preference = libraryPreferences.swipeToStartAction, entries = persistentMapOf( LibraryPreferences.EpisodeSwipeAction.Disabled to stringResource(MR.strings.disabled), @@ -283,7 +283,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(AYMR.strings.pref_episode_swipe_start), ), Preference.PreferenceItem.ListPreference( - preference = libraryPreferences.swipeToEndAction(), + preference = libraryPreferences.swipeToEndAction, entries = persistentMapOf( LibraryPreferences.EpisodeSwipeAction.Disabled to stringResource(MR.strings.disabled), @@ -301,7 +301,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(AYMR.strings.pref_episode_swipe_end), ), Preference.PreferenceItem.MultiSelectListPreference( - preference = libraryPreferences.markDuplicateSeenEpisodeAsSeen(), + preference = libraryPreferences.markDuplicateSeenEpisodeAsSeen, entries = persistentMapOf( MARK_DUPLICATE_EPISODE_SEEN_EXISTING to stringResource(AYMR.strings.pref_mark_duplicate_seen_episode_seen_existing), @@ -311,7 +311,7 @@ object SettingsLibraryScreen : SearchableSettings { title = stringResource(AYMR.strings.pref_mark_duplicate_seen_episode_seen), ), Preference.PreferenceItem.SwitchPreference( - preference = libraryPreferences.hideMissingEpisodes(), + preference = libraryPreferences.hideMissingEpisodes, title = stringResource(AMMR.strings.am_pref_hide_missing_episode_indicators), ), ), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt index 81858ef218..384a105e94 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt @@ -40,7 +40,7 @@ object SettingsSecurityScreen : SearchableSettings { ): Preference.PreferenceGroup { val context = LocalContext.current val authSupported = remember { context.isAuthenticationSupported() } - val useAuthPref = securityPreferences.useAuthenticator() + val useAuthPref = securityPreferences.useAuthenticator val useAuth by useAuthPref.collectAsState() return Preference.PreferenceGroup( @@ -57,7 +57,7 @@ object SettingsSecurityScreen : SearchableSettings { }, ), Preference.PreferenceItem.ListPreference( - preference = securityPreferences.lockAppAfter(), + preference = securityPreferences.lockAppAfter, entries = LockAfterValues .associateWith { when (it) { @@ -77,11 +77,11 @@ object SettingsSecurityScreen : SearchableSettings { ), Preference.PreferenceItem.SwitchPreference( - preference = securityPreferences.hideNotificationContent(), + preference = securityPreferences.hideNotificationContent, title = stringResource(MR.strings.hide_notification_content), ), Preference.PreferenceItem.ListPreference( - preference = securityPreferences.secureScreen(), + preference = securityPreferences.secureScreen, entries = SecurityPreferences.SecureScreenMode.entries .associateWith { stringResource(it.titleRes) } .toImmutableMap(), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSyncmiruScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSyncmiruScreen.kt index 62871a7747..4ac1f6702c 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSyncmiruScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSyncmiruScreen.kt @@ -59,8 +59,8 @@ object SettingsSyncmiruScreen : SearchableSettings { @Composable override fun getPreferences(): List { val syncPreferences = remember { Injekt.get() } - val googleDriveRefreshToken by syncPreferences.googleDriveRefreshToken().collectAsState() - val syncyomiApiKey by syncPreferences.clientAPIKey().collectAsState() + val googleDriveRefreshToken by syncPreferences.googleDriveRefreshToken.collectAsState() + val syncyomiApiKey by syncPreferences.clientAPIKey.collectAsState() return listOfNotNull( getSyncPreferences(syncPreferences = syncPreferences), @@ -82,7 +82,7 @@ object SettingsSyncmiruScreen : SearchableSettings { val context = LocalContext.current val connectionManager = remember { Injekt.get() } val googleDriveSync = Injekt.get() - val googleDriveRefreshToken by syncPreferences.googleDriveRefreshToken().collectAsState() + val googleDriveRefreshToken by syncPreferences.googleDriveRefreshToken.collectAsState() var dialog by remember { mutableStateOf(null) } dialog?.run { @@ -228,8 +228,8 @@ object SettingsSyncmiruScreen : SearchableSettings { @Composable private fun getAutomaticSyncGroup(syncPreferences: SyncPreferences): Preference.PreferenceGroup { val context = LocalContext.current - val syncIntervalPref = syncPreferences.syncInterval() - val lastSync by syncPreferences.lastSyncTimestamp().collectAsState() + val syncIntervalPref = syncPreferences.syncInterval + val lastSync by syncPreferences.lastSyncTimestamp.collectAsState() return Preference.PreferenceGroup( title = stringResource(AMMR.strings.pref_sync_automatic_category), @@ -322,9 +322,9 @@ private fun SyncYomiLoginDialog( // Trim spaces at the beginning and end, then remove trailing slash if present val trimmedValue = host.text.trim() val modifiedValue = trimmedValue.trimEnd { it == '/' } - syncPreferences.clientHost().set(modifiedValue) + syncPreferences.clientHost.set(modifiedValue) } - syncPreferences.clientAPIKey().set(apiKey.text) + syncPreferences.clientAPIKey.set(apiKey.text) onDismissRequest() }, ) { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt index 3ca0df7b47..383c6ea105 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsTrackingScreen.kt @@ -93,7 +93,7 @@ object SettingsTrackingScreen : SearchableSettings { val trackPreferences = remember { Injekt.get() } val trackerManager = remember { Injekt.get() } val sourceManager = remember { Injekt.get() } - val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkSeen() + val autoTrackStatePref = trackPreferences.autoUpdateTrackOnMarkSeen var dialog by remember { mutableStateOf(null) } dialog?.run { @@ -131,32 +131,32 @@ object SettingsTrackingScreen : SearchableSettings { return listOf( Preference.PreferenceItem.SwitchPreference( - preference = trackPreferences.autoUpdateTrack(), + preference = trackPreferences.autoUpdateTrack, title = stringResource(AMMR.strings.am_pref_auto_update_anime_sync), ), // AY --> Preference.PreferenceItem.SwitchPreference( - preference = trackPreferences.trackOnAddingToLibrary(), + preference = trackPreferences.trackOnAddingToLibrary, title = stringResource(AYMR.strings.pref_track_on_add_library), ), Preference.PreferenceItem.SwitchPreference( - preference = trackPreferences.showNextEpisodeAiringTime(), + preference = trackPreferences.showNextEpisodeAiringTime, title = stringResource(AYMR.strings.pref_show_next_episode_airing_time), ), // <-- AY // AM --> Preference.PreferenceItem.SwitchPreference( - preference = trackPreferences.syncEnhancedTrackers(), + preference = trackPreferences.syncEnhancedTrackers, title = stringResource(AMMR.strings.pref_tracking_sync_enhanced), ), Preference.PreferenceItem.SwitchPreference( - preference = trackPreferences.smartTrackerSync(), + preference = trackPreferences.smartTrackerSync, title = stringResource(AMMR.strings.pref_smart_sync_tracker), subtitle = stringResource(AMMR.strings.pref_smart_sync_tracker_summary), ), // <-- AM Preference.PreferenceItem.ListPreference( - preference = trackPreferences.autoUpdateTrackOnMarkSeen(), + preference = trackPreferences.autoUpdateTrackOnMarkSeen, entries = AutoTrackState.entries .associateWith { stringResource(it.titleRes) } .toPersistentMap(), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt index 1c50fc8318..55f80a671f 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt @@ -270,7 +270,7 @@ object AboutScreen : Screen() { ) .toDateTimestampString( UiPreferences.dateFormat( - Injekt.get().dateFormat().get(), + Injekt.get().dateFormat.get(), ), ) } catch (e: Exception) { diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt index 7b9bcd6a27..a07679f51d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt @@ -64,7 +64,7 @@ class DebugInfoScreen : Screen() { val context = LocalContext.current val scope = rememberCoroutineScope() - val installationIdPref = remember { Injekt.get().installationId() } + val installationIdPref = remember { Injekt.get().installationId } val installationId by installationIdPref.collectAsState() return Preference.PreferenceGroup( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt index 88f1e6da20..e006deb89a 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt @@ -156,7 +156,7 @@ class WorkerInfoScreen : Screen() { ) .toDateTimestampString( UiPreferences.dateFormat( - Injekt.get().dateFormat().get(), + Injekt.get().dateFormat.get(), ), ) appendLine("Next scheduled run: $timestamp") diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAdvancedScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAdvancedScreen.kt index 68d86394f2..ad08879894 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAdvancedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAdvancedScreen.kt @@ -25,9 +25,9 @@ object PlayerSettingsAdvancedScreen : SearchableSettings { val scope = rememberCoroutineScope() val context = LocalContext.current - val enableUserFiles = advancedPlayerPreferences.mpvUserFiles() - val mpvConf = advancedPlayerPreferences.mpvConf() - val mpvInput = advancedPlayerPreferences.mpvInput() + val enableUserFiles = advancedPlayerPreferences.mpvUserFiles + val mpvConf = advancedPlayerPreferences.mpvConf + val mpvInput = advancedPlayerPreferences.mpvInput return listOf( Preference.PreferenceItem.SwitchPreference( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAudioScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAudioScreen.kt index a18a73f6cc..6823f4dd99 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAudioScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsAudioScreen.kt @@ -27,10 +27,10 @@ object PlayerSettingsAudioScreen : SearchableSettings { override fun getPreferences(): List { val audioPreferences = remember { Injekt.get() } - val prefLangs = audioPreferences.preferredAudioLanguages() - val pitchCorrection = audioPreferences.enablePitchCorrection() - val audioChannels = audioPreferences.audioChannels() - val boostCapPref = audioPreferences.volumeBoostCap() + val prefLangs = audioPreferences.preferredAudioLanguages + val pitchCorrection = audioPreferences.enablePitchCorrection + val audioChannels = audioPreferences.audioChannels + val boostCapPref = audioPreferences.volumeBoostCap val boostCap by boostCapPref.collectAsState() return listOf( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsDecoderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsDecoderScreen.kt index d46c7c6d0a..1cf15ddbda 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsDecoderScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsDecoderScreen.kt @@ -23,10 +23,10 @@ object PlayerSettingsDecoderScreen : SearchableSettings { override fun getPreferences(): List { val decoderPreferences = remember { Injekt.get() } - val tryHw = decoderPreferences.tryHWDecoding() - val useGpuNext = decoderPreferences.gpuNext() - val debanding = decoderPreferences.debanding() - val yuv420p = decoderPreferences.useYUV420P() + val tryHw = decoderPreferences.tryHWDecoding + val useGpuNext = decoderPreferences.gpuNext + val debanding = decoderPreferences.debanding + val yuv420p = decoderPreferences.useYUV420P return listOf( Preference.PreferenceItem.SwitchPreference( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsGesturesScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsGesturesScreen.kt index 7a6d3c89ec..d8f67976d4 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsGesturesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsGesturesScreen.kt @@ -51,8 +51,8 @@ object PlayerSettingsGesturesScreen : SearchableSettings { @Composable private fun getSlidersGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup { - val enableVolumeBrightnessGestures = gesturePreferences.gestureVolumeBrightness() - val swapVol = gesturePreferences.swapVolumeBrightness() + val enableVolumeBrightnessGestures = gesturePreferences.gestureVolumeBrightness + val swapVol = gesturePreferences.swapVolumeBrightness return Preference.PreferenceGroup( title = stringResource(AYMR.strings.pref_category_player_sliders), @@ -72,11 +72,11 @@ object PlayerSettingsGesturesScreen : SearchableSettings { @Composable private fun getSeekingGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup { val scope = rememberCoroutineScope() - val enableHorizontalSeekGesture = gesturePreferences.gestureHorizontalSeek() - val showSeekbar = gesturePreferences.showSeekBar() - val defaultSkipIntroLength by gesturePreferences.defaultIntroLength().stateIn(scope).collectAsState() - val skipLengthPreference = gesturePreferences.skipLengthPreference() - val playerSmoothSeek = gesturePreferences.playerSmoothSeek() + val enableHorizontalSeekGesture = gesturePreferences.gestureHorizontalSeek + val showSeekbar = gesturePreferences.showSeekBar + val defaultSkipIntroLength by gesturePreferences.defaultIntroLength.stateIn(scope).collectAsState() + val skipLengthPreference = gesturePreferences.skipLengthPreference + val playerSmoothSeek = gesturePreferences.playerSmoothSeek var showDialog by rememberSaveable { mutableStateOf(false) } if (showDialog) { @@ -84,7 +84,7 @@ object PlayerSettingsGesturesScreen : SearchableSettings { initialSkipIntroLength = defaultSkipIntroLength, onDismissRequest = { showDialog = false }, onValueChanged = { skipIntroLength -> - gesturePreferences.defaultIntroLength().set(skipIntroLength) + gesturePreferences.defaultIntroLength.set(skipIntroLength) showDialog = false }, ) @@ -130,9 +130,9 @@ object PlayerSettingsGesturesScreen : SearchableSettings { @Composable private fun getDoubleTapGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup { - val leftDoubleTap = gesturePreferences.leftDoubleTapGesture() - val centerDoubleTap = gesturePreferences.centerDoubleTapGesture() - val rightDoubleTap = gesturePreferences.rightDoubleTapGesture() + val leftDoubleTap = gesturePreferences.leftDoubleTapGesture + val centerDoubleTap = gesturePreferences.centerDoubleTapGesture + val rightDoubleTap = gesturePreferences.rightDoubleTapGesture return Preference.PreferenceGroup( title = stringResource(AYMR.strings.pref_category_double_tap), @@ -177,9 +177,9 @@ object PlayerSettingsGesturesScreen : SearchableSettings { @Composable private fun getMediaControlsGroup(gesturePreferences: GesturePreferences): Preference.PreferenceGroup { - val mediaPrevious = gesturePreferences.mediaPreviousGesture() - val mediaPlayPause = gesturePreferences.mediaPlayPauseGesture() - val mediaNext = gesturePreferences.mediaNextGesture() + val mediaPrevious = gesturePreferences.mediaPreviousGesture + val mediaPlayPause = gesturePreferences.mediaPlayPauseGesture + val mediaNext = gesturePreferences.mediaNextGesture return Preference.PreferenceGroup( title = stringResource(AYMR.strings.pref_category_media_controls), diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsPlayerScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsPlayerScreen.kt index ed67314fae..91ee7ab138 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsPlayerScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsPlayerScreen.kt @@ -48,7 +48,7 @@ object PlayerSettingsPlayerScreen : SearchableSettings { return listOfNotNull( Preference.PreferenceItem.ListPreference( - preference = playerPreferences.progressPreference(), + preference = playerPreferences.progressPreference, entries = persistentMapOf( 1.00F to stringResource(AYMR.strings.pref_progress_100), 0.95F to stringResource(AYMR.strings.pref_progress_95), @@ -61,15 +61,15 @@ object PlayerSettingsPlayerScreen : SearchableSettings { title = stringResource(AYMR.strings.pref_progress_mark_as_seen), ), Preference.PreferenceItem.SwitchPreference( - preference = playerPreferences.preserveWatchingPosition(), + preference = playerPreferences.preserveWatchingPosition, title = stringResource(AYMR.strings.pref_preserve_watching_position), ), Preference.PreferenceItem.SwitchPreference( - preference = playerPreferences.switchOnFailure(), + preference = playerPreferences.switchOnFailure, title = stringResource(AMMR.strings.player_pref_switch_on_failure), ), Preference.PreferenceItem.ListPreference( - preference = playerPreferences.defaultPlayerOrientationType(), + preference = playerPreferences.defaultPlayerOrientationType, entries = PlayerOrientation.entries.associateWith { stringResource(it.titleRes) }.toPersistentMap(), @@ -89,11 +89,11 @@ object PlayerSettingsPlayerScreen : SearchableSettings { @Composable private fun getControlsGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val allowGestures = playerPreferences.allowGestures() - val showLoading = playerPreferences.showLoadingCircle() - val showChapter = playerPreferences.showCurrentChapter() - val rememberPlayerBrightness = playerPreferences.rememberPlayerBrightness() - val rememberPlayerVolume = playerPreferences.rememberPlayerVolume() + val allowGestures = playerPreferences.allowGestures + val showLoading = playerPreferences.showLoadingCircle + val showChapter = playerPreferences.showCurrentChapter + val rememberPlayerBrightness = playerPreferences.rememberPlayerBrightness + val rememberPlayerVolume = playerPreferences.rememberPlayerVolume return Preference.PreferenceGroup( title = stringResource(AYMR.strings.pref_category_controls), @@ -125,8 +125,8 @@ object PlayerSettingsPlayerScreen : SearchableSettings { @Composable private fun getHosterGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val showFailure = playerPreferences.showFailedHosters() - val showEmpty = playerPreferences.showEmptyHosters() + val showFailure = playerPreferences.showFailedHosters + val showEmpty = playerPreferences.showEmptyHosters return Preference.PreferenceGroup( title = stringResource(AYMR.strings.pref_hosters), @@ -145,14 +145,14 @@ object PlayerSettingsPlayerScreen : SearchableSettings { @Composable private fun getDisplayGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val fullScreen = playerPreferences.playerFullscreen() - val hideControls = playerPreferences.hideControls() - val displayVol = playerPreferences.displayVolPer() - val showSystemBar = playerPreferences.showSystemStatusBar() - val reduceMotion = playerPreferences.reduceMotion() - val hideTime = playerPreferences.playerTimeToDisappear() + val fullScreen = playerPreferences.playerFullscreen + val hideControls = playerPreferences.hideControls + val displayVol = playerPreferences.displayVolPer + val showSystemBar = playerPreferences.showSystemStatusBar + val reduceMotion = playerPreferences.reduceMotion + val hideTime = playerPreferences.playerTimeToDisappear - val panelOpacityPref = playerPreferences.panelOpacity() + val panelOpacityPref = playerPreferences.panelOpacity val panelOpacity by panelOpacityPref.collectAsState() val numberFormat = remember { NumberFormat.getPercentInstance() } @@ -200,16 +200,16 @@ object PlayerSettingsPlayerScreen : SearchableSettings { @Composable private fun getIntroSkipGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val enableSkipIntro = playerPreferences.enableSkipIntro() + val enableSkipIntro = playerPreferences.enableSkipIntro val isIntroSkipEnabled by enableSkipIntro.collectAsState() - val enableAutoAniSkip = playerPreferences.autoSkipIntro() - val enableNetflixAniSkip = playerPreferences.enableNetflixStyleIntroSkip() - val waitingTimeAniSkip = playerPreferences.waitingTimeIntroSkip() + val enableAutoAniSkip = playerPreferences.autoSkipIntro + val enableNetflixAniSkip = playerPreferences.enableNetflixStyleIntroSkip + val waitingTimeAniSkip = playerPreferences.waitingTimeIntroSkip // AniSkip - val enableAniSkip = playerPreferences.aniSkipEnabled() - val disableAniSkipChapters = playerPreferences.disableAniSkipOnChapters() + val enableAniSkip = playerPreferences.aniSkipEnabled + val disableAniSkipChapters = playerPreferences.disableAniSkipOnChapters val isAniSkipEnabled by enableAniSkip.collectAsState() return Preference.PreferenceGroup( @@ -262,10 +262,10 @@ object PlayerSettingsPlayerScreen : SearchableSettings { @Composable private fun getPipGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val enablePip = playerPreferences.enablePip() - val pipEpisodeToasts = playerPreferences.pipEpisodeToasts() - val pipOnExit = playerPreferences.pipOnExit() - val pipReplaceWithPrevious = playerPreferences.pipReplaceWithPrevious() + val enablePip = playerPreferences.enablePip + val pipEpisodeToasts = playerPreferences.pipEpisodeToasts + val pipOnExit = playerPreferences.pipOnExit + val pipReplaceWithPrevious = playerPreferences.pipReplaceWithPrevious val isPipEnabled by enablePip.collectAsState() @@ -300,8 +300,8 @@ object PlayerSettingsPlayerScreen : SearchableSettings { playerPreferences: PlayerPreferences, basePreferences: BasePreferences, ): Preference.PreferenceGroup { - val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer() - val externalPlayerPreference = playerPreferences.externalPlayerPreference() + val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer + val externalPlayerPreference = playerPreferences.externalPlayerPreference val pm = basePreferences.context.packageManager val installedPackages = pm.getInstalledPackages(0) diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsSubtitleScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsSubtitleScreen.kt index 8b8bac5fc1..038a14220d 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsSubtitleScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/player/PlayerSettingsSubtitleScreen.kt @@ -24,10 +24,10 @@ object PlayerSettingsSubtitleScreen : SearchableSettings { override fun getPreferences(): List { val subtitlePreferences = remember { Injekt.get() } - val langPref = subtitlePreferences.preferredSubLanguages() - val whitelist = subtitlePreferences.subtitleWhitelist() - val blacklist = subtitlePreferences.subtitleBlacklist() - val blackBars = subtitlePreferences.subtitleBlackBars() + val langPref = subtitlePreferences.preferredSubLanguages + val whitelist = subtitlePreferences.subtitleWhitelist + val blacklist = subtitlePreferences.subtitleBlacklist + val blackBars = subtitlePreferences.subtitleBlackBars return listOf( Preference.PreferenceItem.EditTextInfoPreference( diff --git a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt index 5f1eb6b2dd..0f714c237b 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -45,8 +45,8 @@ fun TachiyomiTheme( ) { val uiPreferences = Injekt.get() BaseTachiyomiTheme( - appTheme = appTheme ?: uiPreferences.appTheme().get(), - isAmoled = amoled ?: uiPreferences.themeDarkAmoled().get(), + appTheme = appTheme ?: uiPreferences.appTheme.get(), + isAmoled = amoled ?: uiPreferences.themeDarkAmoled.get(), content = content, ) } diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesFilterDialog.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesFilterDialog.kt index f4644bf4bb..13902aa839 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesFilterDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesFilterDialog.kt @@ -56,28 +56,28 @@ fun UpdatesFilterDialog( private fun ColumnScope.FilterSheet( screenModel: UpdatesSettingsScreenModel, ) { - val filterDownloaded by screenModel.updatesPreferences.filterDownloaded().collectAsState() + val filterDownloaded by screenModel.updatesPreferences.filterDownloaded.collectAsState() TriStateItem( label = stringResource(MR.strings.label_downloaded), state = filterDownloaded, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterDownloaded) }, ) - val filterUnseen by screenModel.updatesPreferences.filterUnseen().collectAsState() + val filterUnseen by screenModel.updatesPreferences.filterUnseen.collectAsState() TriStateItem( label = stringResource(AMMR.strings.am_action_filter_unseen), state = filterUnseen, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterUnseen) }, ) - val filterStarted by screenModel.updatesPreferences.filterStarted().collectAsState() + val filterStarted by screenModel.updatesPreferences.filterStarted.collectAsState() TriStateItem( label = stringResource(MR.strings.label_started), state = filterStarted, onClick = { screenModel.toggleFilter(UpdatesPreferences::filterStarted) }, ) - val filterBookmarked by screenModel.updatesPreferences.filterBookmarked().collectAsState() + val filterBookmarked by screenModel.updatesPreferences.filterBookmarked.collectAsState() TriStateItem( label = stringResource(MR.strings.action_filter_bookmarked), state = filterBookmarked, @@ -85,7 +85,7 @@ private fun ColumnScope.FilterSheet( ) // AM --> - val filterFillermarked by screenModel.updatesPreferences.filterFillermarked().collectAsState() + val filterFillermarked by screenModel.updatesPreferences.filterFillermarked.collectAsState() TriStateItem( label = stringResource(AMMR.strings.action_filter_fillermarked), state = filterFillermarked, @@ -95,9 +95,9 @@ private fun ColumnScope.FilterSheet( HorizontalDivider(modifier = Modifier.padding(MaterialTheme.padding.small)) - val filterExcludedScanlators by screenModel.updatesPreferences.filterExcludedScanlators().collectAsState() + val filterExcludedScanlators by screenModel.updatesPreferences.filterExcludedScanlators.collectAsState() - fun toggleScanlatorFilter() = screenModel.updatesPreferences.filterExcludedScanlators().getAndSet { !it } + fun toggleScanlatorFilter() = screenModel.updatesPreferences.filterExcludedScanlators.getAndSet { !it } Row( modifier = Modifier diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt index dca6e205f0..b80e311a76 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt @@ -208,10 +208,10 @@ fun UpdatesBottomBar( }.takeIf { selected.fastAny { it.downloadStateProvider() == Download.State.DOWNLOADED } }, onExternalClicked = { onOpenEpisode(selected[0], true) - }.takeIf { !playerPreferences.alwaysUseExternalPlayer().get() && selected.size == 1 }, + }.takeIf { !playerPreferences.alwaysUseExternalPlayer.get() && selected.size == 1 }, onInternalClicked = { onOpenEpisode(selected[0], true) - }.takeIf { playerPreferences.alwaysUseExternalPlayer().get() && selected.size == 1 }, + }.takeIf { playerPreferences.alwaysUseExternalPlayer.get() && selected.size == 1 }, ) } diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt index 4d3d965421..80d6517695 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt @@ -265,7 +265,7 @@ private fun UpdatesUiItem( // AM (FILE_SIZE) --> var fileSizeAsync: Long? by remember { mutableStateOf(updatesItem.fileSize) } if (downloadStateProvider() == Download.State.DOWNLOADED && - storagePreferences.showEpisodeFileSize().get() && + storagePreferences.showEpisodeFileSize.get() && fileSizeAsync == null ) { LaunchedEffect(update, Unit) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 066cda1936..b376c1b31f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -107,7 +107,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor val scope = ProcessLifecycleOwner.get().lifecycleScope // Show notification to disable Incognito Mode when it's enabled - basePreferences.incognitoMode().changes() + basePreferences.incognitoMode.changes() .onEach { enabled -> if (enabled) { disableIncognitoReceiver.register() @@ -135,7 +135,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor } .launchIn(scope) - setAppCompatDelegateThemeMode(Injekt.get().themeMode().get()) + setAppCompatDelegateThemeMode(Injekt.get().themeMode.get()) // Updates widget update WidgetManager(Injekt.get(), Injekt.get()).apply { init(scope) } @@ -146,7 +146,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor if (!LogcatLogger.isInstalled) { val minLogPriority = when { - networkPreferences.verboseLogging().get() -> LogPriority.VERBOSE + networkPreferences.verboseLogging.get() -> LogPriority.VERBOSE BuildConfig.DEBUG -> LogPriority.DEBUG else -> LogPriority.INFO } @@ -195,7 +195,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor crossfade((300 * this@App.animatorDurationScale).toInt()) allowRgb565(DeviceUtil.isLowRamDevice(this@App)) - if (networkPreferences.verboseLogging().get()) logger(DebugLogger()) + if (networkPreferences.verboseLogging.get()) logger(DebugLogger()) // Coil spawns a new thread for every image load by default fetcherCoroutineContext(Dispatchers.IO.limitedParallelism(8)) @@ -252,7 +252,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor private var registered = false override fun onReceive(context: Context, intent: Intent) { - basePreferences.incognitoMode().set(false) + basePreferences.incognitoMode.set(false) } fun register() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt index a0cad2ed4e..4cab07f92b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt @@ -101,7 +101,7 @@ class BackupNotifier(private val context: Context) { } setContentTitle(contentTitle) - if (!preferences.hideNotificationContent().get()) { + if (!preferences.hideNotificationContent.get()) { setContentText(content) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt index 80c11c62f4..8a0af5dba0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreateJob.kt @@ -89,7 +89,7 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete fun setupTask(context: Context, prefInterval: Int? = null) { val backupPreferences = Injekt.get() - val interval = prefInterval ?: backupPreferences.backupInterval().get() + val interval = prefInterval ?: backupPreferences.backupInterval.get() if (interval > 0) { val constraints = Constraints( requiresBatteryNotLow = true, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt index 02c70185e8..0f54ef06ad 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt @@ -122,7 +122,7 @@ class BackupCreator( BackupFileValidator(context).validate(fileUri) if (isAutoBackup) { - backupPreferences.lastAutoBackupTimestamp().set(Instant.now().toEpochMilli()) + backupPreferences.lastAutoBackupTimestamp.set(Instant.now().toEpochMilli()) } return fileUri.toString() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt index 15080f8ee1..3d73cfefc1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt @@ -32,7 +32,7 @@ class CategoriesRestorer( .let { id -> it.toCategory(id).copy(order = order) } } - libraryPreferences.categorizedDisplaySettings().set( + libraryPreferences.categorizedDisplaySettings.set( (dbCategories + categories) .distinctBy { it.flags } .size > 1, diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/discord/DiscordRPCService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/discord/DiscordRPCService.kt index 5ba5bf873b..844cf42bd5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/discord/DiscordRPCService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/discord/DiscordRPCService.kt @@ -42,7 +42,7 @@ class DiscordRPCService : Service() { override fun onCreate() { super.onCreate() val token = connectionPreferences.connectionToken(connectionManager.discord).get() - val status = when (connectionPreferences.discordRPCStatus().get()) { + val status = when (connectionPreferences.discordRPCStatus.get()) { -1 -> "dnd" 0 -> "idle" else -> "online" @@ -54,7 +54,7 @@ class DiscordRPCService : Service() { } notification(this) } else { - connectionPreferences.enableDiscordRPC().set(false) + connectionPreferences.enableDiscordRPC.set(false) } } @@ -103,7 +103,7 @@ class DiscordRPCService : Service() { fun start(context: Context) { handler.removeCallbacksAndMessages(null) - if (rpc == null && connectionPreferences.enableDiscordRPC().get()) { + if (rpc == null && connectionPreferences.enableDiscordRPC.get()) { since = System.currentTimeMillis() context.startService(Intent(context, DiscordRPCService::class.java)) } @@ -168,8 +168,8 @@ class DiscordRPCService : Service() { .map { it.id.toString() } .run { ifEmpty { plus(UNCATEGORIZED_ID.toString()) } } - val discordIncognitoMode = connectionPreferences.discordRPCIncognito().get() - val incognitoCategories = connectionPreferences.discordRPCIncognitoCategories().get() + val discordIncognitoMode = connectionPreferences.discordRPCIncognito.get() + val incognitoCategories = connectionPreferences.discordRPCIncognitoCategories.get() val incognitoCategory = animeCategoryIds.fastAny { it in incognitoCategories diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/GoogleDrive.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/GoogleDrive.kt index 2ea5c14637..87e432b980 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/GoogleDrive.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/GoogleDrive.kt @@ -17,11 +17,11 @@ class GoogleDrive(id: Long) : BaseConnection(id, "Google Drive") { override fun logout() { super.logout() - syncPreferences.googleDriveRefreshToken().set("") - syncPreferences.googleDriveAccessToken().set("") + syncPreferences.googleDriveRefreshToken.set("") + syncPreferences.googleDriveAccessToken.set("") } override val isLoggedIn: Boolean - get() = syncPreferences.googleDriveRefreshToken().get().isNotBlank() + get() = syncPreferences.googleDriveRefreshToken.get().isNotBlank() } // <-- AM (SYNC_DRIVE) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncDataJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncDataJob.kt index 923d162a44..7124c4cdc0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncDataJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncDataJob.kt @@ -75,7 +75,7 @@ class SyncDataJob(private val context: Context, workerParams: WorkerParameters) fun setupTask(context: Context, prefInterval: Int? = null) { val syncPreferences = Injekt.get() - val interval = prefInterval ?: syncPreferences.syncInterval().get() + val interval = prefInterval ?: syncPreferences.syncInterval.get() if (interval > 0) { val request = PeriodicWorkRequestBuilder( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncManager.kt index 04808a7893..4b241b8d50 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncManager.kt @@ -101,14 +101,14 @@ class SyncManager( ) // AM (SYNC_DRIVE) --> - if (syncPreferences.googleDriveRefreshToken().get().isNotBlank()) { + if (syncPreferences.googleDriveRefreshToken.get().isNotBlank()) { val syncService = GoogleDriveSyncService(context, json, syncPreferences) syncWithBackup(databaseAnime, backup, syncData, syncService.doSync(syncData)) } // <-- AM (SYNC_DRIVE) // AM (SYNC_YOMI) --> - if (syncPreferences.clientAPIKey().get().isNotBlank()) { + if (syncPreferences.clientAPIKey.get().isNotBlank()) { val syncService = SyncYomiSyncService(context, json, syncPreferences, notifier) syncWithBackup(databaseAnime, backup, syncData, syncService.doSync(syncData)) } @@ -129,7 +129,7 @@ class SyncManager( if (remoteBackup === syncData.backup) { // nothing changed - syncPreferences.lastSyncTimestamp().set(Date().time) + syncPreferences.lastSyncTimestamp.set(Date().time) notifier.showSyncSuccess("Sync completed successfully") return } @@ -141,9 +141,9 @@ class SyncManager( } // Check if it's first sync based on lastSyncTimestamp - if (syncPreferences.lastSyncTimestamp().get() == 0L && databaseAnime.isNotEmpty()) { + if (syncPreferences.lastSyncTimestamp.get() == 0L && databaseAnime.isNotEmpty()) { // It's first sync no need to restore data. (just update remote data) - syncPreferences.lastSyncTimestamp().set(Date().time) + syncPreferences.lastSyncTimestamp.set(Date().time) notifier.showSyncSuccess("Updated remote data successfully") return } @@ -162,7 +162,7 @@ class SyncManager( // It's local sync no need to restore data. (just update remote data) if (animeFilteredFavorites.isEmpty()) { // update the sync timestamp - syncPreferences.lastSyncTimestamp().set(Date().time) + syncPreferences.lastSyncTimestamp.set(Date().time) notifier.showSyncSuccess("Sync completed successfully") return } @@ -183,7 +183,7 @@ class SyncManager( ) // update the sync timestamp - syncPreferences.lastSyncTimestamp().set(Date().time) + syncPreferences.lastSyncTimestamp.set(Date().time) } else { log(LogPriority.ERROR) { "Failed to write sync data to file" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncNotifier.kt index fd7621b7a0..db2403436e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncNotifier.kt @@ -44,7 +44,7 @@ class SyncNotifier(private val context: Context) { val builder = with(progressNotificationBuilder) { setContentTitle(context.getString(R.string.syncing_library)) - if (!preferences.hideNotificationContent().get()) { + if (!preferences.hideNotificationContent.get()) { setContentText(content) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncYomi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncYomi.kt index bcdbdf7113..0524595041 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncYomi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/SyncYomi.kt @@ -17,11 +17,11 @@ class SyncYomi(id: Long) : BaseConnection(id, "SyncYomi") { override fun logout() { super.logout() - syncPreferences.clientHost().set("") - syncPreferences.clientAPIKey().set("") + syncPreferences.clientHost.set("") + syncPreferences.clientAPIKey.set("") } override val isLoggedIn: Boolean - get() = syncPreferences.clientAPIKey().get().isNotBlank() + get() = syncPreferences.clientAPIKey.get().isNotBlank() } // <-- AM (SYNC_YOMI) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/GoogleDriveSyncService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/GoogleDriveSyncService.kt index f37524d980..acca87a1aa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/GoogleDriveSyncService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/GoogleDriveSyncService.kt @@ -260,8 +260,8 @@ class GoogleDriveService(private val context: Context) { * and setting up the service using the obtained tokens. */ private fun initGoogleDriveService() { - val accessToken = syncPreferences.googleDriveAccessToken().get() - val refreshToken = syncPreferences.googleDriveRefreshToken().get() + val accessToken = syncPreferences.googleDriveAccessToken.get() + val refreshToken = syncPreferences.googleDriveRefreshToken.get() if (accessToken == "" || refreshToken == "") { driveService = null @@ -313,7 +313,7 @@ class GoogleDriveService(private val context: Context) { .build() } internal suspend fun refreshToken() = withIOContext { - val refreshToken = syncPreferences.googleDriveRefreshToken().get() + val refreshToken = syncPreferences.googleDriveRefreshToken.get() val jsonFactory: JsonFactory = JacksonFactory.getDefaultInstance() val secrets = GoogleClientSecrets.load( @@ -337,7 +337,7 @@ class GoogleDriveService(private val context: Context) { credential.refreshToken() val newAccessToken = credential.accessToken // Save the new access token - syncPreferences.googleDriveAccessToken().set(newAccessToken) + syncPreferences.googleDriveAccessToken.set(newAccessToken) setupGoogleDriveService(newAccessToken, credential.refreshToken) } catch (e: TokenResponseException) { if (e.details.error == "invalid_grant") { @@ -425,8 +425,8 @@ class GoogleDriveService(private val context: Context) { val refreshToken = tokenResponse.refreshToken // Save the tokens to SyncPreferences - syncPreferences.googleDriveAccessToken().set(accessToken) - syncPreferences.googleDriveRefreshToken().set(refreshToken) + syncPreferences.googleDriveAccessToken.set(accessToken) + syncPreferences.googleDriveRefreshToken.set(refreshToken) setupGoogleDriveService(accessToken, refreshToken) initGoogleDriveService() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/SyncYomiSyncService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/SyncYomiSyncService.kt index 1ebc7c8eb1..983f8cccb2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/SyncYomiSyncService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/connection/syncmiru/service/SyncYomiSyncService.kt @@ -62,12 +62,12 @@ class SyncYomiSyncService( } private suspend fun pullSyncData(): Pair { - val host = syncPreferences.clientHost().get() - val apiKey = syncPreferences.clientAPIKey().get() + val host = syncPreferences.clientHost.get() + val apiKey = syncPreferences.clientAPIKey.get() val downloadUrl = "$host/api/sync/content" val headersBuilder = Headers.Builder().add("X-API-Token", apiKey) - val lastETag = syncPreferences.lastSyncEtag().get() + val lastETag = syncPreferences.lastSyncEtag.get() if (lastETag != "") { headersBuilder.add("If-None-Match", lastETag) } @@ -126,8 +126,8 @@ class SyncYomiSyncService( private suspend fun pushSyncData(syncData: SyncData, eTag: String) { val backup = syncData.backup ?: return - val host = syncPreferences.clientHost().get() - val apiKey = syncPreferences.clientAPIKey().get() + val host = syncPreferences.clientHost.get() + val apiKey = syncPreferences.clientAPIKey.get() val uploadUrl = "$host/api/sync/content" val timeout = 30L @@ -161,7 +161,7 @@ class SyncYomiSyncService( if (response.isSuccessful) { val newETag = response.headers["ETag"] .takeIf { it?.isNotEmpty() == true } ?: throw SyncYomiException("Missing ETag") - syncPreferences.lastSyncEtag().set(newETag) + syncPreferences.lastSyncEtag.set(newETag) logcat(LogPriority.DEBUG) { "SyncYomi sync completed" } } else if (response.code == HttpStatus.SC_PRECONDITION_FAILED) { // other clients updated remote data, will try next time diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt index 3fc528cbeb..8b86fbec4f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadJob.kt @@ -56,7 +56,7 @@ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineW override suspend fun doWork(): Result { var networkCheck = checkNetworkState( applicationContext.activeNetworkState(), - downloadPreferences.downloadOnlyOverWifi().get(), + downloadPreferences.downloadOnlyOverWifi.get(), ) var active = networkCheck && downloadManager.downloaderStart() @@ -69,7 +69,7 @@ class DownloadJob(context: Context, workerParams: WorkerParameters) : CoroutineW coroutineScope { combineTransform( applicationContext.networkStateFlow(), - downloadPreferences.downloadOnlyOverWifi().changes(), + downloadPreferences.downloadOnlyOverWifi.changes(), transform = { a, b -> emit(checkNetworkState(a, b)) }, ) .onEach { networkCheck = it } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt index 9523c591d3..15d84ce58f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt @@ -449,7 +449,7 @@ class DownloadManager( private suspend fun getEpisodesToDelete(episodes: List, anime: Anime): List { // Retrieve the categories that are set to exclude from being deleted on read - val categoriesToExclude = downloadPreferences.removeExcludeCategories().get().map(String::toLong) + val categoriesToExclude = downloadPreferences.removeExcludeCategories.get().map(String::toLong) val categoriesForAnime = getCategories.await(anime.id) .map { it.id } @@ -460,7 +460,7 @@ class DownloadManager( episodes } - return if (!downloadPreferences.removeBookmarkedEpisodes().get()) { + return if (!downloadPreferences.removeBookmarkedEpisodes.get()) { filteredCategoryAnime.filterNot { it.bookmark } } else { filteredCategoryAnime @@ -469,7 +469,7 @@ class DownloadManager( // AY --> private fun getEpisodesToDownload(episodes: List): List { - return if (!downloadPreferences.downloadFillermarkedEpisodes().get()) { + return if (!downloadPreferences.downloadFillermarkedEpisodes.get()) { episodes.filterNot { it.fillermark } } else { episodes diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt index 03cb4af4e0..6987df4a8c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadNotifier.kt @@ -102,7 +102,7 @@ internal class DownloadNotifier(private val context: Context) { } // <-- AY - if (preferences.hideNotificationContent().get()) { + if (preferences.hideNotificationContent.get()) { setContentTitle(downloadingProgressText) setContentText(null) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt index ca9c902c0a..8b9e10b97e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt @@ -145,7 +145,7 @@ class DownloadProvider( fun getSourceDirName(source: AnimeSource): String { return DiskUtil.buildValidFilename( source.toString(), - disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames().get(), + disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames.get(), ) } @@ -157,7 +157,7 @@ class DownloadProvider( fun getAnimeDirName(animeTitle: String): String { return DiskUtil.buildValidFilename( animeTitle, - disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames().get(), + disallowNonAscii = libraryPreferences.disallowNonAsciiFilenames.get(), ) } @@ -172,7 +172,7 @@ class DownloadProvider( episodeName: String, episodeScanlator: String?, episodeUrl: String, - disallowNonAsciiFilenames: Boolean = libraryPreferences.disallowNonAsciiFilenames().get(), + disallowNonAsciiFilenames: Boolean = libraryPreferences.disallowNonAsciiFilenames.get(), ): String { var dirName = sanitizeEpisodeName(episodeName) if (!episodeScanlator.isNullOrBlank()) { @@ -224,7 +224,7 @@ class DownloadProvider( episodeName, episodeScanlator, episodeUrl, - !libraryPreferences.disallowNonAsciiFilenames().get(), + !libraryPreferences.disallowNonAsciiFilenames.get(), ) return buildList(3) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index 248bb2035a..98d915aa5f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -195,7 +195,7 @@ class Downloader( downloaderJob = scope.launch { val activeDownloadsFlow = combine( queueState, - downloadPreferences.parallelSourceLimit().changes(), + downloadPreferences.parallelSourceLimit.changes(), ) { a, b -> a to b }.transformLatest { (queue, parallelCount) -> while (true) { val activeDownloads = queue.asSequence() @@ -448,7 +448,7 @@ class Downloader( download.progress = 0 // If videoFile is not existing then download it - if (downloadPreferences.useExternalDownloader().get() == download.changeDownloader) { + if (downloadPreferences.useExternalDownloader.get() == download.changeDownloader) { progressJob = scope.launch { while (download.status == Download.State.DOWNLOADING) { delay(50) @@ -680,7 +680,7 @@ class Downloader( // TODO: support other file formats!! // start download with intent val pm = context.packageManager - val pkgName = downloadPreferences.externalDownloaderSelection().get() + val pkgName = downloadPreferences.externalDownloaderSelection.get() val intent: Intent if (pkgName.isNotEmpty()) { intent = pm.getLaunchIntentForPackage(pkgName) ?: throw Exception( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt index 5b9428554b..a3314ee80a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt @@ -127,7 +127,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet if (tags.contains(WORK_NAME_AUTO)) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { val preferences = Injekt.get() - val restrictions = preferences.autoUpdateDeviceRestrictions().get() + val restrictions = preferences.autoUpdateDeviceRestrictions.get() if ((DEVICE_ONLY_ON_WIFI in restrictions) && !context.isConnectedToWifi()) { return Result.retry() } @@ -141,7 +141,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet setForegroundSafely() - libraryPreferences.lastUpdatedTimestamp().set(Instant.now().toEpochMilli()) + libraryPreferences.lastUpdatedTimestamp.set(Instant.now().toEpochMilli()) val categoryId = inputData.getLong(KEY_CATEGORY, -1L) // AM (GROUPING) --> @@ -196,7 +196,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet val libraryAnime = getLibraryAnime.await() // AM (GROUPING) --> - val groupLibraryUpdateType = libraryPreferences.groupLibraryUpdateType().get() + val groupLibraryUpdateType = libraryPreferences.groupLibraryUpdateType.get() val listToUpdate = if (categoryId != -1L) { libraryAnime.filter { categoryId in it.categories } @@ -205,8 +205,8 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet groupLibraryUpdateType == GroupLibraryMode.GLOBAL || (groupLibraryUpdateType == GroupLibraryMode.ALL_BUT_UNGROUPED && group == LibraryGroup.UNGROUPED) ) { - val includedCategories = libraryPreferences.updateCategories().get().map { it.toLong() } - val excludedCategories = libraryPreferences.updateCategoriesExclude().get().map { it.toLong() } + val includedCategories = libraryPreferences.updateCategories.get().map { it.toLong() } + val excludedCategories = libraryPreferences.updateCategoriesExclude.get().map { it.toLong() } libraryAnime.filter { val included = includedCategories.isEmpty() || it.categories.intersect(includedCategories).isNotEmpty() @@ -248,7 +248,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet // <-- AM (GROUPING) // AY --> - val includeSeasons = libraryPreferences.updateSeasonOnLibraryUpdate().get() + val includeSeasons = libraryPreferences.updateSeasonOnLibraryUpdate.get() val lastToUpdateWithSeasons = listToUpdate.flatMap { libAnime -> when (libAnime.anime.fetchType) { FetchType.Seasons -> { @@ -268,7 +268,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet } // <-- AY - val restrictions = libraryPreferences.autoUpdateAnimeRestrictions().get() + val restrictions = libraryPreferences.autoUpdateAnimeRestrictions.get() val skippedUpdates = mutableListOf>() val (_, fetchWindowUpperBound) = fetchInterval.getWindow(ZonedDateTime.now()) @@ -376,7 +376,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet hasDownloads.store(true) } - libraryPreferences.newUpdatesCount().getAndSet { it + newEpisodes.size } + libraryPreferences.newUpdatesCount.getAndSet { it + newEpisodes.size } // Convert to the anime that contains new episodes newUpdates.add(anime to newEpisodes.toTypedArray()) @@ -436,7 +436,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet val source = sourceManager.getOrStub(anime.source) // Update anime metadata if needed - if (libraryPreferences.autoUpdateMetadata().get()) { + if (libraryPreferences.autoUpdateMetadata.get()) { val networkAnime = source.getAnimeDetails(anime.toSAnime()) // AY --> updateAnime.awaitUpdateFromSource(anime, networkAnime, manualFetch = false, coverCache, backgroundCache) @@ -546,9 +546,9 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet prefInterval: Int? = null, ) { val preferences = Injekt.get() - val interval = prefInterval ?: preferences.autoUpdateInterval().get() + val interval = prefInterval ?: preferences.autoUpdateInterval.get() if (interval > 0) { - val restrictions = preferences.autoUpdateDeviceRestrictions().get() + val restrictions = preferences.autoUpdateDeviceRestrictions.get() val networkType = if (DEVICE_NETWORK_NOT_METERED in restrictions) { NetworkType.UNMETERED } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt index 8fe52ffb03..d2b980ea02 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt @@ -100,7 +100,7 @@ class LibraryUpdateNotifier( ), ) - if (!securityPreferences.hideNotificationContent().get()) { + if (!securityPreferences.hideNotificationContent.get()) { val updatingText = anime.joinToString("\n") { it.title.chop(40) } progressNotificationBuilder.setStyle(NotificationCompat.BigTextStyle().bigText(updatingText)) } @@ -175,7 +175,7 @@ class LibraryUpdateNotifier( Notifications.CHANNEL_NEW_EPISODES, ) { setContentTitle(context.stringResource(AYMR.strings.notification_new_episodes)) - if (updates.size == 1 && !securityPreferences.hideNotificationContent().get()) { + if (updates.size == 1 && !securityPreferences.hideNotificationContent.get()) { setContentText(updates.first().first.title.chop(NOTIF_TITLE_MAX_LEN)) } else { setContentText( @@ -186,7 +186,7 @@ class LibraryUpdateNotifier( ), ) - if (!securityPreferences.hideNotificationContent().get()) { + if (!securityPreferences.hideNotificationContent.get()) { setStyle( NotificationCompat.BigTextStyle().bigText( updates.joinToString("\n") { @@ -210,7 +210,7 @@ class LibraryUpdateNotifier( } // Per-anime notification - if (!securityPreferences.hideNotificationContent().get()) { + if (!securityPreferences.hideNotificationContent.get()) { launchUI { context.notify( updates.map { (anime, episodes) -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt index 55f9c96ce2..d17e54aaf0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt @@ -212,7 +212,7 @@ class NotificationReceiver : BroadcastReceiver() { val toUpdate = episodeUrls.mapNotNull { getEpisode.await(it, animeId) } .map { val episode = it.copy(seen = true) - if (downloadPreferences.removeAfterMarkedAsSeen().get()) { + if (downloadPreferences.removeAfterMarkedAsSeen.get()) { val anime = getAnime.await(animeId) if (anime != null) { val source = sourceManager.get(anime.source) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt index 1fad9028d1..73d43f8607 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/Anilist.kt @@ -44,7 +44,7 @@ class Anilist(id: Long) : BaseTracker(id, "AniList"), DeletableTracker { override val supportsPrivateTracking: Boolean = true - private val scorePreference = trackPreferences.anilistScoreType() + private val scorePreference = trackPreferences.anilistScoreType init { // If the preference is an int from APIv1, logout user to force using APIv2 diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt index e06fcd4c59..4afd3625b2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistUtils.kt @@ -17,7 +17,7 @@ fun Track.toApiStatus() = when (status) { private val preferences: TrackPreferences by injectLazy() -fun DomainTrack.toApiScore(): String = when (preferences.anilistScoreType().get()) { +fun DomainTrack.toApiScore(): String = when (preferences.anilistScoreType.get()) { // 10 point "POINT_10" -> (score.toInt() / 10).toString() // 100 point diff --git a/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt b/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt index 8acb326277..8c9f21c7af 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt @@ -38,7 +38,7 @@ class PreferenceModule(val app: Application) : InjektModule { addSingletonFactory { NetworkPreferences( preferenceStore = get(), - verboseLogging = isDebugBuildType, + verboseLoggingDefault = isDebugBuildType, ) } addSingletonFactory { diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index 1468a8e18d..d335558b8e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -76,7 +76,7 @@ class ExtensionManager( ExtensionInstallReceiver(InstallationListener()).register(context) } - private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages().isSet() + private var subLanguagesEnabledOnFirstRun = preferences.enabledLanguages.isSet() fun getExtensionPackage(sourceId: Long): String? { return installedExtensionsFlow.value.find { extension -> @@ -179,12 +179,12 @@ class ExtensionManager( .map(Extension.Available.Source::lang) val deviceLanguage = Locale.getDefault().language - val defaultLanguages = preferences.enabledLanguages().defaultValue() + val defaultLanguages = preferences.enabledLanguages.defaultValue() val languagesToEnable = availableLanguages.filter { it != deviceLanguage && it.startsWith(deviceLanguage) } - preferences.enabledLanguages().set(defaultLanguages + languagesToEnable) + preferences.enabledLanguages.set(defaultLanguages + languagesToEnable) subLanguagesEnabledOnFirstRun = true } @@ -195,7 +195,7 @@ class ExtensionManager( */ private fun updatedInstalledExtensionsStatuses(availableExtensions: List) { if (availableExtensions.isEmpty()) { - preferences.extensionUpdatesCount().set(0) + preferences.extensionUpdatesCount.set(0) return } @@ -374,7 +374,7 @@ class ExtensionManager( private fun updatePendingUpdatesCount() { val pendingUpdateCount = installedExtensionMapFlow.value.values.count { it.hasUpdate } - preferences.extensionUpdatesCount().set(pendingUpdateCount) + preferences.extensionUpdatesCount.set(pendingUpdateCount) if (pendingUpdateCount == 0) { ExtensionUpdateNotifier(context).dismiss() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt index 2b675ae60f..dcf322f4c2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionUpdateNotifier.kt @@ -29,7 +29,7 @@ class ExtensionUpdateNotifier( names.size, ), ) - if (!securityPreferences.hideNotificationContent().get()) { + if (!securityPreferences.hideNotificationContent.get()) { val extNames = names.joinToString(", ") setContentText(extNames) setStyle(NotificationCompat.BigTextStyle().bigText(extNames)) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt index 2b88d3b40d..5eae3fe476 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt @@ -39,7 +39,7 @@ internal class ExtensionInstaller( private val scope = CoroutineScope(Dispatchers.IO) private val activeJobs = mutableMapOf() private val activeSteps = mutableMapOf>() - private val extensionInstaller = Injekt.get().extensionInstaller() + private val extensionInstaller = Injekt.get().extensionInstaller private val httpClient: OkHttpClient = Injekt.get().client diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index 3c9f49d6a7..aff31653d2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -44,7 +44,7 @@ internal object ExtensionLoader { private val preferences: SourcePreferences by injectLazy() private val trustExtension: TrustExtension by injectLazy() private val loadNsfwSource by lazy { - preferences.showNsfwSource().get() + preferences.showNsfwSource.get() } // AY --> diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt index ed72eb8594..c0559872a6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt @@ -10,7 +10,7 @@ import uy.kohesive.injekt.api.get fun AnimeSource.getNameForAnimeInfo(): String { val preferences = Injekt.get() - val enabledLanguages = preferences.enabledLanguages().get() + val enabledLanguages = preferences.enabledLanguages.get() .filterNot { it in listOf("all", "other") } val hasOneActiveLanguages = enabledLanguages.size == 1 val isInEnabledLanguages = lang in enabledLanguages diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreen.kt index cb075bc4bf..2f7109cda9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreen.kt @@ -411,7 +411,7 @@ class AnimeScreen( initialSkipIntroLength = if (!successState.anime.skipIntroDisable && successState.anime.skipIntroLength == 0 ) { - screenModel.gesturePreferences.defaultIntroLength().get() + screenModel.gesturePreferences.defaultIntroLength.get() } else { successState.anime.skipIntroLength }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreenModel.kt index 2e2b854b34..84523dc582 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/AnimeScreenModel.kt @@ -197,29 +197,29 @@ class AnimeScreenModel( private val filteredEpisodes: List? get() = successState?.processedEpisodes - val episodeSwipeStartAction = libraryPreferences.swipeToEndAction().get() - val episodeSwipeEndAction = libraryPreferences.swipeToStartAction().get() - var autoTrackState = trackPreferences.autoUpdateTrackOnMarkSeen().get() + val episodeSwipeStartAction = libraryPreferences.swipeToEndAction.get() + val episodeSwipeEndAction = libraryPreferences.swipeToStartAction.get() + var autoTrackState = trackPreferences.autoUpdateTrackOnMarkSeen.get() val isUpdateIntervalEnabled = - LibraryPreferences.ANIME_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateAnimeRestrictions().get() + LibraryPreferences.ANIME_OUTSIDE_RELEASE_PERIOD in libraryPreferences.autoUpdateAnimeRestrictions.get() private val selectedPositions: Array = arrayOf(-1, -1) // first and last selected index in list private val selectedEpisodeIds: HashSet = HashSet() // AY --> - val showNextEpisodeAirTime = trackPreferences.showNextEpisodeAiringTime().get() - val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer().get() - val useExternalDownloader = downloadPreferences.useExternalDownloader().get() + val showNextEpisodeAirTime = trackPreferences.showNextEpisodeAiringTime.get() + val alwaysUseExternalPlayer = playerPreferences.alwaysUseExternalPlayer.get() + val useExternalDownloader = downloadPreferences.useExternalDownloader.get() internal var isFromChangeCategory: Boolean = false internal val autoOpenTrack: Boolean - get() = successState?.hasLoggedInTrackers == true && trackPreferences.trackOnAddingToLibrary().get() + get() = successState?.hasLoggedInTrackers == true && trackPreferences.trackOnAddingToLibrary.get() // <-- AY // AM (FILE_SIZE) --> - val showFileSize = storagePreferences.showEpisodeFileSize().get() + val showFileSize = storagePreferences.showEpisodeFileSize.get() // <-- AM (FILE_SIZE) /** @@ -326,7 +326,7 @@ class AnimeScreenModel( isRefreshingData = needRefreshInfo || needRefreshEpisode || needRefreshSeason, // <-- AY dialog = null, - hideMissingEpisodes = libraryPreferences.hideMissingEpisodes().get(), + hideMissingEpisodes = libraryPreferences.hideMissingEpisodes.get(), ) } @@ -374,13 +374,13 @@ class AnimeScreenModel( // AM --> private suspend fun syncTrackers() { - if (!trackPreferences.syncEnhancedTrackers().get()) return + if (!trackPreferences.syncEnhancedTrackers.get()) return val state = successState ?: return updateSuccessState { it.copy(isSyncingTrackers = true) } when (state.anime.fetchType) { FetchType.Seasons -> { - if (trackPreferences.smartTrackerSync().get()) { + if (trackPreferences.smartTrackerSync.get()) { seasons@ for (s in state.seasons) { refreshTrackers(animeId = s.seasonAnime.id, enhancedOnly = true, skipCompleted = true) .filterIsInstance() @@ -549,7 +549,7 @@ class AnimeScreenModel( // Now check if user previously set categories, when available val categories = getCategories() - val defaultCategoryId = libraryPreferences.defaultCategory().get().toLong() + val defaultCategoryId = libraryPreferences.defaultCategory.get().toLong() val defaultCategory = categories.find { it.id == defaultCategoryId } when { // Default category set @@ -842,7 +842,7 @@ class AnimeScreenModel( state.source, ) - if (libraryPreferences.updateSeasonOnRefresh().get()) { + if (libraryPreferences.updateSeasonOnRefresh.get()) { fetchEpisodesFromSeasons(newSeasons, manualFetch) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/track/TrackInfoDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/track/TrackInfoDialog.kt index cae2d516ee..813e853a28 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/anime/track/TrackInfoDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/anime/track/TrackInfoDialog.kt @@ -104,7 +104,7 @@ data class TrackInfoDialogHomeScreen( val context = LocalContext.current val screenModel = rememberScreenModel { Model(animeId, sourceId, isSeason) } - val dateFormat = remember { UiPreferences.dateFormat(Injekt.get().dateFormat().get()) } + val dateFormat = remember { UiPreferences.dateFormat(Injekt.get().dateFormat.get()) } val state by screenModel.state.collectAsState() TrackInfoDialogHome( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt index 20189be6d9..c7c8ffe0c8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt @@ -33,14 +33,14 @@ interface SecureActivityDelegate { fun onApplicationStopped() { val preferences = Injekt.get() - if (!preferences.useAuthenticator().get()) return + if (!preferences.useAuthenticator.get()) return if (!AuthenticatorUtil.isAuthenticating) { // Return if app is closed in locked state if (requireUnlock) return // Save app close time if lock is delayed - if (preferences.lockAppAfter().get() > 0) { - preferences.lastAppClosed().set(System.currentTimeMillis()) + if (preferences.lockAppAfter.get() > 0) { + preferences.lastAppClosed.set(System.currentTimeMillis()) } } } @@ -50,13 +50,13 @@ interface SecureActivityDelegate { */ fun onApplicationStart() { val preferences = Injekt.get() - if (!preferences.useAuthenticator().get()) return + if (!preferences.useAuthenticator.get()) return - val lastClosedPref = preferences.lastAppClosed() + val lastClosedPref = preferences.lastAppClosed // `requireUnlock` can be true on process start or if app was closed in locked state if (!AuthenticatorUtil.isAuthenticating && !requireUnlock) { - requireUnlock = when (val lockDelay = preferences.lockAppAfter().get()) { + requireUnlock = when (val lockDelay = preferences.lockAppAfter.get()) { -1 -> false // Never 0 -> true // Always else -> lastClosedPref.get() + lockDelay * 60_000 <= System.currentTimeMillis() @@ -93,8 +93,8 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser } private fun setSecureScreen() { - val secureScreenFlow = securityPreferences.secureScreen().changes() - val incognitoModeFlow = preferences.incognitoMode().changes() + val secureScreenFlow = securityPreferences.secureScreen.changes() + val incognitoModeFlow = preferences.incognitoMode.changes() combine(secureScreenFlow, incognitoModeFlow) { secureScreen, incognitoMode -> secureScreen == SecurityPreferences.SecureScreenMode.ALWAYS || (secureScreen == SecurityPreferences.SecureScreenMode.INCOGNITO && incognitoMode) @@ -104,7 +104,7 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser } private fun setAppLock() { - if (!securityPreferences.useAuthenticator().get()) return + if (!securityPreferences.useAuthenticator.get()) return if (activity.isAuthenticationSupported()) { if (!SecureActivityDelegate.requireUnlock) return activity.startActivity(Intent(activity, UnlockActivity::class.java)) @@ -115,7 +115,7 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser activity.overridePendingTransition(0, 0) } } else { - securityPreferences.useAuthenticator().set(false) + securityPreferences.useAuthenticator.set(false) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt index 72cd9514a3..c993d95789 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/ThemingDelegate.kt @@ -23,7 +23,7 @@ interface ThemingDelegate { class ThemingDelegateImpl : ThemingDelegate { override fun applyAppTheme(activity: Activity) { val uiPreferences = Injekt.get() - ThemingDelegate.getThemeResIds(uiPreferences.appTheme().get(), uiPreferences.themeDarkAmoled().get()) + ThemingDelegate.getThemeResIds(uiPreferences.appTheme.get(), uiPreferences.themeDarkAmoled.get()) .forEach(activity::setTheme) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt index cd5e151179..a24ff07d1d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt @@ -99,7 +99,7 @@ data object BrowseTab : Tab { val navigator = LocalNavigator.currentOrThrow val sourcesScreenModel = rememberScreenModel { SourcesScreenModel() } val sourcesState by sourcesScreenModel.state.collectAsState() - val updateCount by sourcesScreenModel.sourcePreferences.extensionUpdatesCount().collectAsState() + val updateCount by sourcesScreenModel.sourcePreferences.extensionUpdatesCount.collectAsState() val extensionScreenModel = rememberScreenModel { ExtensionsScreenModel() } val extensionsState by extensionScreenModel.state.collectAsState() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreenModel.kt index 7cd83923fa..d78af8ca94 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionFilterScreenModel.kt @@ -37,7 +37,7 @@ class ExtensionFilterScreenModel( screenModelScope.launch { combine( getExtensionLanguages.subscribe(), - preferences.enabledLanguages().changes(), + preferences.enabledLanguages.changes(), ) { a, b -> a to b } .catch { throwable -> logcat(LogPriority.ERROR, throwable) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt index 3f418ef48c..429ee7bb51 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt @@ -103,11 +103,11 @@ class ExtensionsScreenModel( screenModelScope.launchIO { findAvailableExtensions() } - preferences.extensionUpdatesCount().changes() + preferences.extensionUpdatesCount.changes() .onEach { mutableState.update { state -> state.copy(updates = it) } } .launchIn(screenModelScope) - basePreferences.extensionInstaller().changes() + basePreferences.extensionInstaller.changes() .onEach { mutableState.update { state -> state.copy(installer = it) } } .launchIn(screenModelScope) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt index a7a0ba1e5d..365cf32104 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsScreenModel.kt @@ -86,7 +86,7 @@ class ExtensionDetailsScreenModel( } } launch { - preferences.incognitoExtensions() + preferences.incognitoExtensions .changes() .map { pkgName in it } .distinctUntilChanged() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt index b2e809783d..5a6dddeb71 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateSearchScreenModel.kt @@ -19,7 +19,7 @@ class MigrateSearchScreenModel( private val sourcePreferences: SourcePreferences = Injekt.get(), ) : SearchScreenModel() { - private val migrationSources by lazy { sourcePreferences.migrationSources().get() } + private val migrationSources by lazy { sourcePreferences.migrationSources.get() } override val sortComparator = { map: Map -> compareBy( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/season/MigrateSeasonSelectScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/season/MigrateSeasonSelectScreenModel.kt index 7935cbefb6..c1150249c9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/season/MigrateSeasonSelectScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/season/MigrateSeasonSelectScreenModel.kt @@ -46,20 +46,20 @@ class MigrateSeasonSelectScreenModel( private val networkToLocalAnime: NetworkToLocalAnime = Injekt.get(), ) : StateScreenModel(State()) { - var displayMode by sourcePreferences.sourceDisplayMode().asState(screenModelScope) + var displayMode by sourcePreferences.sourceDisplayMode.asState(screenModelScope) val source = sourceManager.getOrStub(anime.source) fun getColumnsPreference(orientation: Int): GridCells { val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE val columns = if (isLandscape) { - libraryPreferences.landscapeColumns() + libraryPreferences.landscapeColumns } else { - libraryPreferences.portraitColumns() + libraryPreferences.portraitColumns }.get() return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns) } - private val hideInLibraryItems = sourcePreferences.hideInLibraryItems().get() + private val hideInLibraryItems = sourcePreferences.hideInLibraryItems.get() val seasonPagerFlowFlow = flow { emit(anime) } .map { anime -> Pager( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceScreenModel.kt index 8968d62b82..5f41c137e9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceScreenModel.kt @@ -49,11 +49,11 @@ class MigrateSourceScreenModel( } } - preferences.migrationSortingDirection().changes() + preferences.migrationSortingDirection.changes() .onEach { mutableState.update { state -> state.copy(sortingDirection = it) } } .launchIn(screenModelScope) - preferences.migrationSortingMode().changes() + preferences.migrationSortingMode.changes() .onEach { mutableState.update { state -> state.copy(sortingMode = it) } } .launchIn(screenModelScope) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreenModel.kt index 4f4ff301ce..84e4dacce2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesFilterScreenModel.kt @@ -28,8 +28,8 @@ class SourcesFilterScreenModel( screenModelScope.launch { combine( getLanguagesWithSources.subscribe(), - preferences.enabledLanguages().changes(), - preferences.disabledSources().changes(), + preferences.enabledLanguages.changes(), + preferences.disabledSources.changes(), ) { a, b, c -> Triple(a, b, c) } .catch { throwable -> mutableState.update { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index 873c3e2df0..bb1f777519 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -76,7 +76,7 @@ class BrowseSourceScreenModel( private val getIncognitoState: GetIncognitoState = Injekt.get(), ) : StateScreenModel(State(Listing.valueOf(listingQuery))) { - var displayMode by sourcePreferences.sourceDisplayMode().asState(screenModelScope) + var displayMode by sourcePreferences.sourceDisplayMode.asState(screenModelScope) val source = sourceManager.getOrStub(sourceId) @@ -100,14 +100,14 @@ class BrowseSourceScreenModel( } if (!getIncognitoState.await(source.id)) { - sourcePreferences.lastUsedSource().set(source.id) + sourcePreferences.lastUsedSource.set(source.id) } } /** * Flow of Pager flow tied to [State.listing] */ - private val hideInLibraryItems = sourcePreferences.hideInLibraryItems().get() + private val hideInLibraryItems = sourcePreferences.hideInLibraryItems.get() val animePagerFlowFlow = state.map { it.listing } .distinctUntilChanged() .map { listing -> @@ -128,9 +128,9 @@ class BrowseSourceScreenModel( fun getColumnsPreference(orientation: Int): GridCells { val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE val columns = if (isLandscape) { - libraryPreferences.landscapeColumns() + libraryPreferences.landscapeColumns } else { - libraryPreferences.portraitColumns() + libraryPreferences.portraitColumns }.get() return if (columns == 0) GridCells.Adaptive(128.dp) else GridCells.Fixed(columns) } @@ -140,9 +140,9 @@ class BrowseSourceScreenModel( fun getColumnsPreferenceForCurrentOrientation(orientation: Int): Int { val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE return if (isLandscape) { - libraryPreferences.landscapeColumns() + libraryPreferences.landscapeColumns } else { - libraryPreferences.portraitColumns() + libraryPreferences.portraitColumns }.get() } // <-- AY @@ -261,7 +261,7 @@ class BrowseSourceScreenModel( fun addFavorite(anime: Anime) { screenModelScope.launch { val categories = getCategories() - val defaultCategoryId = libraryPreferences.defaultCategory().get() + val defaultCategoryId = libraryPreferences.defaultCategory.get() val defaultCategory = categories.find { it.id == defaultCategoryId.toLong() } when { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt index fec838ee75..42fbdcb84f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/globalsearch/SearchScreenModel.kt @@ -47,9 +47,9 @@ abstract class SearchScreenModel( private val coroutineDispatcher = Executors.newFixedThreadPool(5).asCoroutineDispatcher() private var searchJob: Job? = null - private val enabledLanguages = sourcePreferences.enabledLanguages().get() - private val disabledSources = sourcePreferences.disabledSources().get() - protected val pinnedSources = sourcePreferences.pinnedSources().get() + private val enabledLanguages = sourcePreferences.enabledLanguages.get() + private val disabledSources = sourcePreferences.disabledSources.get() + protected val pinnedSources = sourcePreferences.pinnedSources.get() private var lastQuery: String? = null private var lastSourceFilter: SourceFilter? = null @@ -66,7 +66,7 @@ abstract class SearchScreenModel( init { screenModelScope.launch { - preferences.globalSearchFilterState().changes().collectLatest { state -> + preferences.globalSearchFilterState.changes().collectLatest { state -> mutableState.update { it.copy(onlyShowHasResults = state) } } } @@ -119,7 +119,7 @@ abstract class SearchScreenModel( } fun toggleFilterResults() { - preferences.globalSearchFilterState().toggle() + preferences.globalSearchFilterState.toggle() } fun search() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt index 1ebef34075..32e02198c4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreenModel.kt @@ -43,7 +43,7 @@ class CategoryScreenModel( init { screenModelScope.launch { // AY --> - val allCategories = if (libraryPreferences.hideHiddenCategoriesSettings().get()) { + val allCategories = if (libraryPreferences.hideHiddenCategoriesSettings.get()) { getVisibleCategories.subscribe() } else { getCategories.subscribe() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryScreenModel.kt index 2101894f1b..960a433069 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryScreenModel.kt @@ -193,7 +193,7 @@ class HistoryScreenModel( screenModelScope.launchIO { // Move to default category if applicable val categories = getCategories() - val defaultCategoryId = libraryPreferences.defaultCategory().get().toLong() + val defaultCategoryId = libraryPreferences.defaultCategory.get().toLong() val defaultCategory = categories.find { it.id == defaultCategoryId } when { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt index a6736fda02..0c784451cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt @@ -129,7 +129,7 @@ fun Screen.HistoryHalfTab( suspend fun openEpisode(context: Context, episode: Episode?, snackbarHostState: SnackbarHostState) { val playerPreferences: PlayerPreferences by injectLazy() - val extPlayer = playerPreferences.alwaysUseExternalPlayer().get() + val extPlayer = playerPreferences.alwaysUseExternalPlayer.get() if (episode != null) { MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/home/NavigationPill.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/home/NavigationPill.kt index 5b6f74f2a7..dbadddf43c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/home/NavigationPill.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/home/NavigationPill.kt @@ -303,8 +303,8 @@ private fun NavigationIconItem(tab: Tab) { // <-- AM (RECENTS) val count by produceState(initialValue = 0) { val pref = Injekt.get() - pref.newUpdatesCount().changes() - .collectLatest { value = if (pref.newShowUpdatesCount().get()) it else 0 } + pref.newUpdatesCount.changes() + .collectLatest { value = if (pref.newShowUpdatesCount.get()) it else 0 } } if (count > 0) { Badge { @@ -323,7 +323,7 @@ private fun NavigationIconItem(tab: Tab) { BrowseTab::class.isInstance(tab) -> { val count by produceState(initialValue = 0) { val pref = Injekt.get() - pref.extensionUpdatesCount().changes().collectLatest { value = it } + pref.extensionUpdatesCount.changes().collectLatest { value = it } } if (count > 0) { Badge { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 7e6a4ca5d2..ff74772c23 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -107,7 +107,7 @@ class LibraryScreenModel( init { mutableState.update { state -> - state.copy(activeCategoryIndex = libraryPreferences.lastUsedCategory().get()) + state.copy(activeCategoryIndex = libraryPreferences.lastUsedCategory.get()) } screenModelScope.launchIO { combine( @@ -148,7 +148,7 @@ class LibraryScreenModel( .dropWhile { !it.libraryData.isInitialized } .map { it.libraryData to it.groupType } .distinctUntilChanged(), - libraryPreferences.sortingMode().changes(), + libraryPreferences.sortingMode.changes(), ) { (data, group), sort -> data.favorites .applyGrouping(data.categories, data.showSystemCategory, group) @@ -171,9 +171,9 @@ class LibraryScreenModel( } combine( - libraryPreferences.categoryTabs().changes(), - libraryPreferences.categoryNumberOfItems().changes(), - libraryPreferences.showContinueWatchingButton().changes(), + libraryPreferences.categoryTabs.changes(), + libraryPreferences.categoryNumberOfItems.changes(), + libraryPreferences.showContinueWatchingButton.changes(), ) { a, b, c -> arrayOf(a, b, c) } .onEach { (showCategoryTabs, showAnimeCount, showAnimeContinueButton) -> mutableState.update { state -> @@ -210,7 +210,7 @@ class LibraryScreenModel( .launchIn(screenModelScope) // AM (GROUPING) --> - libraryPreferences.groupLibraryBy().changes() + libraryPreferences.groupLibraryBy.changes() .onEach { mutableState.update { state -> state.copy(groupType = it) @@ -424,7 +424,7 @@ class LibraryScreenModel( val sort = groupSort ?: key.sort // <-- AM (GROUPING) if (sort.type == LibrarySort.Type.Random) { - return@mapValues value.shuffled(Random(libraryPreferences.randomSortSeed().get())) + return@mapValues value.shuffled(Random(libraryPreferences.randomSortSeed.get())) } val anime = value.mapNotNull { favoritesById[it] } @@ -439,19 +439,19 @@ class LibraryScreenModel( private fun getLibraryItemPreferencesFlow(): Flow { return combine( - libraryPreferences.downloadBadge().changes(), - libraryPreferences.unseenBadge().changes(), - libraryPreferences.localBadge().changes(), - libraryPreferences.languageBadge().changes(), - libraryPreferences.autoUpdateAnimeRestrictions().changes(), - - preferences.downloadedOnly().changes(), - libraryPreferences.filterDownloaded().changes(), - libraryPreferences.filterUnseen().changes(), - libraryPreferences.filterStarted().changes(), - libraryPreferences.filterBookmarked().changes(), - libraryPreferences.filterCompleted().changes(), - libraryPreferences.filterIntervalCustom().changes(), + libraryPreferences.downloadBadge.changes(), + libraryPreferences.unseenBadge.changes(), + libraryPreferences.localBadge.changes(), + libraryPreferences.languageBadge.changes(), + libraryPreferences.autoUpdateAnimeRestrictions.changes(), + + preferences.downloadedOnly.changes(), + libraryPreferences.filterDownloaded.changes(), + libraryPreferences.filterUnseen.changes(), + libraryPreferences.filterStarted.changes(), + libraryPreferences.filterBookmarked.changes(), + libraryPreferences.filterCompleted.changes(), + libraryPreferences.filterIntervalCustom.changes(), ) { ItemPreferences( downloadBadge = it[0] as Boolean, @@ -690,11 +690,11 @@ class LibraryScreenModel( } fun getDisplayMode(): PreferenceMutableState { - return libraryPreferences.displayMode().asState(screenModelScope) + return libraryPreferences.displayMode.asState(screenModelScope) } fun getColumnsForOrientation(isLandscape: Boolean): PreferenceMutableState { - return (if (isLandscape) libraryPreferences.landscapeColumns() else libraryPreferences.portraitColumns()) + return (if (isLandscape) libraryPreferences.landscapeColumns else libraryPreferences.portraitColumns) .asState(screenModelScope) } @@ -787,7 +787,7 @@ class LibraryScreenModel( } .coercedActiveCategoryIndex - libraryPreferences.lastUsedCategory().set(newIndex) + libraryPreferences.lastUsedCategory.set(newIndex) } fun openChangeCategoryDialog() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt index cfd1c7100e..045078db26 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsScreenModel.kt @@ -38,7 +38,7 @@ class LibrarySettingsScreenModel( ) // AM (GROUPING) --> - val grouping by libraryPreferences.groupLibraryBy().asState(screenModelScope) + val grouping by libraryPreferences.groupLibraryBy.asState(screenModelScope) // <-- AM (GROUPING) fun toggleFilter(preference: (LibraryPreferences) -> Preference) { @@ -63,7 +63,7 @@ class LibrarySettingsScreenModel( // AM (GROUPING) --> fun setGrouping(grouping: Int) { - screenModelScope.launchIO { libraryPreferences.groupLibraryBy().set(grouping) } + screenModelScope.launchIO { libraryPreferences.groupLibraryBy.set(grouping) } } // <-- AM (GROUPING) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt index 9513ee79be..dd1f09d5d2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryTab.kt @@ -143,7 +143,7 @@ data object LibraryTab : Tab { // AY --> suspend fun openEpisode(episode: Episode) { val playerPreferences: PlayerPreferences by injectLazy() - val extPlayer = playerPreferences.alwaysUseExternalPlayer().get() + val extPlayer = playerPreferences.alwaysUseExternalPlayer.get() MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer) } // <-- AY diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 02bb8c6308..6c0bf7538d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -162,7 +162,7 @@ class MainActivity : BaseActivity() { val context = LocalContext.current var incognito by remember { mutableStateOf(getIncognitoState.await(null)) } - val downloadOnly by preferences.downloadedOnly().collectAsState() + val downloadOnly by preferences.downloadedOnly.collectAsState() val indexing by downloadCache.isInitializing.collectAsState() val isSystemInDarkTheme = isSystemInDarkTheme() @@ -194,7 +194,7 @@ class MainActivity : BaseActivity() { handleIntentAction(intent, navigator) // Reset Incognito Mode on relaunch - preferences.incognitoMode().set(false) + preferences.incognitoMode.set(false) } } LaunchedEffect(navigator.lastItem) { @@ -241,7 +241,7 @@ class MainActivity : BaseActivity() { // Pop source-related screens when incognito mode is turned off LaunchedEffect(Unit) { - preferences.incognitoMode().changes() + preferences.incognitoMode.changes() .drop(1) .filter { !it } .onEach { @@ -256,7 +256,7 @@ class MainActivity : BaseActivity() { // AM (DISCORD_RPC) --> val appContext = this@MainActivity.applicationContext - connectionPreferences.enableDiscordRPC().changes() + connectionPreferences.enableDiscordRPC.changes() .drop(1) .onEach { if (it) { @@ -384,7 +384,7 @@ class MainActivity : BaseActivity() { val navigator = LocalNavigator.currentOrThrow LaunchedEffect(Unit) { - if (!preferences.shownOnboardingFlow().get() && navigator.lastItem !is OnboardingScreen) { + if (!preferences.shownOnboardingFlow.get() && navigator.lastItem !is OnboardingScreen) { navigator.push(OnboardingScreen()) } } @@ -498,7 +498,7 @@ class MainActivity : BaseActivity() { null } // AM --> - else -> uiPreferences.startScreen().get().tab + else -> uiPreferences.startScreen.get().tab // <-- AM } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt index 57f49d2653..1324c945cc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt @@ -106,8 +106,8 @@ private class MoreScreenModel( preferences: BasePreferences = Injekt.get(), ) : ScreenModel { - var downloadedOnly by preferences.downloadedOnly().asState(screenModelScope) - var incognitoMode by preferences.incognitoMode().asState(screenModelScope) + var downloadedOnly by preferences.downloadedOnly.asState(screenModelScope) + var incognitoMode by preferences.incognitoMode.asState(screenModelScope) private var _downloadQueueState: MutableStateFlow = MutableStateFlow(DownloadQueueState.Stopped) val downloadQueueState: StateFlow = _downloadQueueState.asStateFlow() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt index 7d02686361..3e8a36bf32 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/OnboardingScreen.kt @@ -24,10 +24,10 @@ class OnboardingScreen : Screen() { val navigator = LocalNavigator.currentOrThrow val basePreferences = remember { Injekt.get() } - val shownOnboardingFlow by basePreferences.shownOnboardingFlow().collectAsState() + val shownOnboardingFlow by basePreferences.shownOnboardingFlow.collectAsState() val finishOnboarding: () -> Unit = { - basePreferences.shownOnboardingFlow().set(true) + basePreferences.shownOnboardingFlow.set(true) navigator.pop() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/AniyomiMPVView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/AniyomiMPVView.kt index 45ac739994..e9f4daf643 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/AniyomiMPVView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/AniyomiMPVView.kt @@ -61,15 +61,15 @@ class AniyomiMPVView(context: Context, attributes: AttributeSet?) : BaseMPVView( fun init(mpvInst: MPV) { this.mpv = mpvInst - setVo(if (decoderPreferences.gpuNext().get()) "gpu-next" else "gpu") + setVo(if (decoderPreferences.gpuNext.get()) "gpu-next" else "gpu") mpv?.setPropertyBoolean("pause", true) mpv?.setOptionString("profile", "fast") - mpv?.setOptionString("hwdec", if (decoderPreferences.tryHWDecoding().get()) "auto" else "no") + mpv?.setOptionString("hwdec", if (decoderPreferences.tryHWDecoding.get()) "auto" else "no") - if (decoderPreferences.useYUV420P().get()) { + if (decoderPreferences.useYUV420P.get()) { mpv?.setOptionString("vf", "format=yuv420p") } - mpv?.setOptionString("msg-level", "all=" + if (networkPreferences.verboseLogging().get()) "v" else "warn") + mpv?.setOptionString("msg-level", "all=" + if (networkPreferences.verboseLogging.get()) "v" else "warn") mpv?.setPropertyBoolean("input-default-bindings", true) @@ -95,7 +95,7 @@ class AniyomiMPVView(context: Context, attributes: AttributeSet?) : BaseMPVView( mpv?.setOptionString(it.mpvProperty, it.preference(decoderPreferences).get().toString()) } - mpv?.setOptionString("speed", playerPreferences.playerSpeed().get().toString()) + mpv?.setOptionString("speed", playerPreferences.playerSpeed.get().toString()) // workaround for mpv?.setOptionString("vd-lavc-film-grain", "cpu") @@ -110,13 +110,13 @@ class AniyomiMPVView(context: Context, attributes: AttributeSet?) : BaseMPVView( } fun postInitOptions() { - when (decoderPreferences.debanding().get()) { + when (decoderPreferences.debanding.get()) { Debanding.None -> {} Debanding.CPU -> mpv?.setOptionString("vf", "gradfun=radius=12") Debanding.GPU -> mpv?.setOptionString("deband", "yes") } - advancedPreferences.playerStatisticsPage().get().let { + advancedPreferences.playerStatisticsPage.get().let { if (it != 0) { mpv?.command("script-binding", "stats/display-stats-toggle") mpv?.command("script-binding", "stats/display-page-$it") @@ -186,41 +186,41 @@ class AniyomiMPVView(context: Context, attributes: AttributeSet?) : BaseMPVView( ) private fun setupAudioOptions() { - mpv?.setOptionString("alang", audioPreferences.preferredAudioLanguages().get()) - mpv?.setOptionString("audio-delay", (audioPreferences.audioDelay().get() / 1000.0).toString()) - mpv?.setOptionString("audio-pitch-correction", audioPreferences.enablePitchCorrection().get().toString()) - mpv?.setOptionString("volume-max", (audioPreferences.volumeBoostCap().get() + 100).toString()) + mpv?.setOptionString("alang", audioPreferences.preferredAudioLanguages.get()) + mpv?.setOptionString("audio-delay", (audioPreferences.audioDelay.get() / 1000.0).toString()) + mpv?.setOptionString("audio-pitch-correction", audioPreferences.enablePitchCorrection.get().toString()) + mpv?.setOptionString("volume-max", (audioPreferences.volumeBoostCap.get() + 100).toString()) } private fun setupSubtitlesOptions() { - mpv?.setOptionString("sub-delay", (subtitlePreferences.subtitlesDelay().get() / 1000.0).toString()) - mpv?.setOptionString("sub-speed", subtitlePreferences.subtitlesSpeed().get().toString()) + mpv?.setOptionString("sub-delay", (subtitlePreferences.subtitlesDelay.get() / 1000.0).toString()) + mpv?.setOptionString("sub-speed", subtitlePreferences.subtitlesSpeed.get().toString()) mpv?.setOptionString( "secondary-sub-delay", - (subtitlePreferences.subtitlesSecondaryDelay().get() / 1000.0).toString(), + (subtitlePreferences.subtitlesSecondaryDelay.get() / 1000.0).toString(), ) - mpv?.setOptionString("sub-font", subtitlePreferences.subtitleFont().get()) - subtitlePreferences.overrideSubsASS().get().let { + mpv?.setOptionString("sub-font", subtitlePreferences.subtitleFont.get()) + subtitlePreferences.overrideSubsASS.get().let { mpv?.setOptionString("sub-ass-override", it.value) if (it != SubtitleAssOverride.No) { mpv?.setOptionString("sub-ass-justify", "yes") } } - mpv?.setOptionString("sub-font-size", subtitlePreferences.subtitleFontSize().get().toString()) - mpv?.setOptionString("sub-bold", if (subtitlePreferences.boldSubtitles().get()) "yes" else "no") - mpv?.setOptionString("sub-italic", if (subtitlePreferences.italicSubtitles().get()) "yes" else "no") - mpv?.setOptionString("sub-justify", subtitlePreferences.subtitleJustification().get().value) - mpv?.setOptionString("sub-color", subtitlePreferences.textColorSubtitles().get().toColorHexString()) + mpv?.setOptionString("sub-font-size", subtitlePreferences.subtitleFontSize.get().toString()) + mpv?.setOptionString("sub-bold", if (subtitlePreferences.boldSubtitles.get()) "yes" else "no") + mpv?.setOptionString("sub-italic", if (subtitlePreferences.italicSubtitles.get()) "yes" else "no") + mpv?.setOptionString("sub-justify", subtitlePreferences.subtitleJustification.get().value) + mpv?.setOptionString("sub-color", subtitlePreferences.textColorSubtitles.get().toColorHexString()) mpv?.setOptionString( "sub-back-color", - subtitlePreferences.backgroundColorSubtitles().get().toColorHexString(), + subtitlePreferences.backgroundColorSubtitles.get().toColorHexString(), ) - mpv?.setOptionString("sub-outline-color", subtitlePreferences.borderColorSubtitles().get().toColorHexString()) - mpv?.setOptionString("sub-outline-size", subtitlePreferences.subtitleBorderSize().get().toString()) - mpv?.setOptionString("sub-border-style", subtitlePreferences.borderStyleSubtitles().get().value) - mpv?.setOptionString("sub-shadow-offset", subtitlePreferences.shadowOffsetSubtitles().get().toString()) - mpv?.setOptionString("sub-pos", subtitlePreferences.subtitlePos().get().toString()) - mpv?.setOptionString("sub-scale", subtitlePreferences.subtitleFontScale().get().toString()) + mpv?.setOptionString("sub-outline-color", subtitlePreferences.borderColorSubtitles.get().toColorHexString()) + mpv?.setOptionString("sub-outline-size", subtitlePreferences.subtitleBorderSize.get().toString()) + mpv?.setOptionString("sub-border-style", subtitlePreferences.borderStyleSubtitles.get().value) + mpv?.setOptionString("sub-shadow-offset", subtitlePreferences.shadowOffsetSubtitles.get().toString()) + mpv?.setOptionString("sub-pos", subtitlePreferences.subtitlePos.get().toString()) + mpv?.setOptionString("sub-scale", subtitlePreferences.subtitleFontScale.get().toString()) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt index 197bd9dbf2..cc9c380f26 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/ExternalIntents.kt @@ -91,7 +91,7 @@ class ExternalIntents { val videoUrl = getVideoUrl(source, context, video) ?: return null - val pkgName = playerPreferences.externalPlayerPreference().get() + val pkgName = playerPreferences.externalPlayerPreference.get() // AM (DISCORD_RPC) --> with(DiscordRPCService) { @@ -99,7 +99,7 @@ class ExternalIntents { setPlayerActivity( context = context, playerData = PlayerData( - incognitoMode = source.isNsfw() || basePreferences.incognitoMode().get(), + incognitoMode = source.isNsfw() || basePreferences.incognitoMode.get(), animeId = anime.id, // AM (CUSTOM_INFORMATION) --> animeTitle = anime.ogTitle, @@ -180,7 +180,7 @@ class ExternalIntents { * Returns the second to start the external player at. */ private fun getLastSecondSeen(): Long { - val preserveWatchPos = playerPreferences.preserveWatchingPosition().get() + val preserveWatchPos = playerPreferences.preserveWatchingPosition.get() val isEpisodeWatched = episode.lastSecondSeen == episode.totalSeconds return if (episode.seen && (!preserveWatchPos || (preserveWatchPos && isEpisodeWatched))) { @@ -456,7 +456,7 @@ class ExternalIntents { * @param currentEpisode the episode to update. */ private suspend fun saveEpisodeHistory(currentEpisode: Episode) { - if (basePreferences.incognitoMode().get()) return + if (basePreferences.incognitoMode.get()) return upsertHistory.await( HistoryUpdate(currentEpisode.id, Date()), ) @@ -477,11 +477,11 @@ class ExternalIntents { lastSecondSeen: Long, totalSeconds: Long, ) { - if (basePreferences.incognitoMode().get()) return + if (basePreferences.incognitoMode.get()) return val currEp = currentEpisode ?: return if (totalSeconds > 0L) { - val progress = playerPreferences.progressPreference().get() + val progress = playerPreferences.progressPreference.get() val seen = if (!currEp.seen) lastSecondSeen >= totalSeconds * progress else true updateEpisode.await( EpisodeUpdate( @@ -495,7 +495,7 @@ class ExternalIntents { totalSeconds = totalSeconds, ), ) - if (trackPreferences.autoUpdateTrack().get() && currEp.seen) { + if (trackPreferences.autoUpdateTrack.get() && currEp.seen) { updateTrackEpisodeSeen(currEp.episodeNumber, anime) } if (seen) { @@ -524,7 +524,7 @@ class ExternalIntents { .sortedWith { e1, e2 -> sortFunction(e1, e2) } val currentEpisodePosition = episodes.indexOf(episode) - val removeAfterSeenSlots = downloadPreferences.removeAfterSeenSlots().get() + val removeAfterSeenSlots = downloadPreferences.removeAfterSeenSlots.get() val episodeToDelete = episodes.getOrNull(currentEpisodePosition - removeAfterSeenSlots) // Check if deleting option is enabled and episode exists @@ -541,7 +541,7 @@ class ExternalIntents { * @param anime the anime of the episode. */ private suspend fun updateTrackEpisodeSeen(episodeNumber: Double, anime: Anime) { - if (!trackPreferences.autoUpdateTrack().get()) return + if (!trackPreferences.autoUpdateTrack.get()) return val trackerManager = Injekt.get() val context = Injekt.get() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt index 8605a84cea..9494e89686 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt @@ -135,7 +135,7 @@ class PlayerActivity : BaseActivity() { private var pipRect: Rect? = null val isPipSupportedAndEnabled by lazy { packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) && - playerPreferences.enablePip().get() + playerPreferences.enablePip.get() } private var pipReceiver: BroadcastReceiver? = null @@ -322,7 +322,7 @@ class PlayerActivity : BaseActivity() { viewModel = viewModel, onBackPress = { if (isPipSupportedAndEnabled && viewModel.paused == false && - playerPreferences.pipOnExit().get() + playerPreferences.pipOnExit.get() ) { enterPictureInPictureMode(createPipParams()) } else { @@ -383,8 +383,8 @@ class PlayerActivity : BaseActivity() { override fun onStop() { window.attributes.screenBrightness.let { - if (playerPreferences.rememberPlayerBrightness().get() && it != -1f) { - playerPreferences.playerBrightnessValue().set(it) + if (playerPreferences.rememberPlayerBrightness.get() && it != -1f) { + playerPreferences.playerBrightnessValue.set(it) } } @@ -396,7 +396,7 @@ class PlayerActivity : BaseActivity() { } override fun onUserLeaveHint() { - if (isPipSupportedAndEnabled && viewModel.paused == false && playerPreferences.pipOnExit().get()) { + if (isPipSupportedAndEnabled && viewModel.paused == false && playerPreferences.pipOnExit.get()) { enterPictureInPictureMode() } super.onUserLeaveHint() @@ -404,7 +404,7 @@ class PlayerActivity : BaseActivity() { @Deprecated("Deprecated in Java") override fun onBackPressed() { - if (isPipSupportedAndEnabled && viewModel.paused == false && playerPreferences.pipOnExit().get()) { + if (isPipSupportedAndEnabled && viewModel.paused == false && playerPreferences.pipOnExit.get()) { if (viewModel.sheetShown.value == Sheets.None && viewModel.panelShown.value == Panels.None && viewModel.dialogShown.value == Dialogs.None @@ -435,15 +435,15 @@ class PlayerActivity : BaseActivity() { windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - window.attributes.layoutInDisplayCutoutMode = if (playerPreferences.playerFullscreen().get()) { + window.attributes.layoutInDisplayCutoutMode = if (playerPreferences.playerFullscreen.get()) { WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES } else { WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER } } - if (playerPreferences.rememberPlayerBrightness().get()) { - playerPreferences.playerBrightnessValue().get().let { + if (playerPreferences.rememberPlayerBrightness.get()) { + playerPreferences.playerBrightnessValue.get().let { if (it != -1f) viewModel.changeBrightnessTo(it) } } @@ -459,16 +459,16 @@ class PlayerActivity : BaseActivity() { val mpvDir = UniFile.fromFile(applicationContext.filesDir)!!.createDirectory(MPV_DIR)!! val mpvConfFile = mpvDir.createFile("mpv.conf")!! - advancedPlayerPreferences.mpvConf().get().let { mpvConfFile.writeText(it) } + advancedPlayerPreferences.mpvConf.get().let { mpvConfFile.writeText(it) } val mpvInputFile = mpvDir.createFile("input.conf")!! - advancedPlayerPreferences.mpvInput().get().let { mpvInputFile.writeText(it) } + advancedPlayerPreferences.mpvInput.get().let { mpvInputFile.writeText(it) } player.init(mpv) copyUserFiles(mpvDir) copyAssets(mpvDir) copyFontsDirectory(mpvDir) - val showBlackBars = if (subtitlePreferences.subtitleBlackBars().get()) "yes" else "no" + val showBlackBars = if (subtitlePreferences.subtitleBlackBars.get()) "yes" else "no" mpv.setOptionString("sub-ass-force-margins", showBlackBars) mpv.setOptionString("sub-use-margins", showBlackBars) mpv.addLogObserver(playerObserver) @@ -486,7 +486,7 @@ class PlayerActivity : BaseActivity() { shadersDir()?.delete() // Then, copy the user files from the Aniyomi directory - if (advancedPlayerPreferences.mpvUserFiles().get()) { + if (advancedPlayerPreferences.mpvUserFiles.get()) { storageManager.getScriptsDirectory()?.listFiles()?.forEach { file -> val outFile = scriptsDir()?.createFile(file.name) outFile?.let { @@ -614,7 +614,7 @@ class PlayerActivity : BaseActivity() { private fun setupPlayerAudio() { with(audioPreferences) { - audioChannels().get().let { mpv.setPropertyString(it.property, it.value) } + audioChannels.get().let { mpv.setPropertyString(it.property, it.value) } val request = AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN).also { it.setAudioAttributes( @@ -680,7 +680,7 @@ class PlayerActivity : BaseActivity() { override fun onConfigurationChanged(newConfig: Configuration) { if (!isInPictureInPictureMode) { - viewModel.changeVideoAspect(playerPreferences.aspectState().get()) + viewModel.changeVideoAspect(playerPreferences.aspectState.get()) } else { viewModel.hideControls() } @@ -754,7 +754,7 @@ class PlayerActivity : BaseActivity() { viewModel.setCurrentVideoError() - if (playerPreferences.switchOnFailure().get()) { + if (playerPreferences.switchOnFailure.get()) { viewModel.loadBestVideo() } else { viewModel.setIsStopped(true) @@ -774,7 +774,7 @@ class PlayerActivity : BaseActivity() { } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - val autoEnter = playerPreferences.pipOnExit().get() + val autoEnter = playerPreferences.pipOnExit.get() builder.setAutoEnterEnabled(viewModel.paused == false && autoEnter) builder.setSeamlessResizeEnabled(viewModel.paused == false && autoEnter) } @@ -782,7 +782,7 @@ class PlayerActivity : BaseActivity() { createPipActions( context = this, isPaused = viewModel.paused ?: true, - replaceWithPrevious = playerPreferences.pipReplaceWithPrevious().get(), + replaceWithPrevious = playerPreferences.pipReplaceWithPrevious.get(), playlistCount = viewModel.currentPlaylist.value.size, playlistPosition = viewModel.getCurrentEpisodeIndex(), ), @@ -836,7 +836,7 @@ class PlayerActivity : BaseActivity() { private fun setupPlayerOrientation() { if (player.isExiting) return - requestedOrientation = when (playerPreferences.defaultPlayerOrientationType().get()) { + requestedOrientation = when (playerPreferences.defaultPlayerOrientationType.get()) { PlayerOrientation.Free -> ActivityInfo.SCREEN_ORIENTATION_SENSOR PlayerOrientation.Video -> if ((player.getVideoOutAspect() ?: 0.0) > 1.0) { ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE @@ -886,9 +886,9 @@ class PlayerActivity : BaseActivity() { } private fun setupMediaSession() { - val previousAction = gesturePreferences.mediaPreviousGesture().get() - val playAction = gesturePreferences.mediaPlayPauseGesture().get() - val nextAction = gesturePreferences.mediaNextGesture().get() + val previousAction = gesturePreferences.mediaPreviousGesture.get() + val playAction = gesturePreferences.mediaPlayPauseGesture.get() + val nextAction = gesturePreferences.mediaNextGesture.get() mediaSession = MediaSession(this, "PlayerActivity").apply { setCallback( @@ -1013,7 +1013,7 @@ class PlayerActivity : BaseActivity() { viewModel.updateIsLoadingHosters(true) viewModel.cancelHosterVideoLinksJob() - val pipEpisodeToasts = playerPreferences.pipEpisodeToasts().get() + val pipEpisodeToasts = playerPreferences.pipEpisodeToasts.get() val switchMethod = viewModel.loadEpisode(episodeId) viewModel.updateIsLoadingHosters(false) @@ -1072,7 +1072,7 @@ class PlayerActivity : BaseActivity() { if (viewModel.isLoadingEpisode.value) { viewModel.currentEpisode.value?.let { episode -> - val preservePos = playerPreferences.preserveWatchingPosition().get() + val preservePos = playerPreferences.preserveWatchingPosition.get() val resumePosition = position ?: if (episode.seen && !preservePos) { 0L @@ -1222,12 +1222,12 @@ class PlayerActivity : BaseActivity() { ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, -> { - playerPreferences.defaultPlayerOrientationType().set(PlayerOrientation.SensorPortrait) + playerPreferences.defaultPlayerOrientationType.set(PlayerOrientation.SensorPortrait) ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT } else -> { - playerPreferences.defaultPlayerOrientationType().set(PlayerOrientation.SensorLandscape) + playerPreferences.defaultPlayerOrientationType.set(PlayerOrientation.SensorLandscape) ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE } } @@ -1261,8 +1261,8 @@ class PlayerActivity : BaseActivity() { // aniSkip stuff viewModel.viewModelScope.launchIO { - if (viewModel.introSkipEnabled && playerPreferences.aniSkipEnabled().get() && - !(playerPreferences.disableAniSkipOnChapters().get() && viewModel.getChapterCount() > 0) + if (viewModel.introSkipEnabled && playerPreferences.aniSkipEnabled.get() && + !(playerPreferences.disableAniSkipOnChapters.get() && viewModel.getChapterCount() > 0) ) { viewModel.aniSkipResponse(viewModel.duration)?.let { viewModel.addTimestamps(it) @@ -1339,7 +1339,7 @@ class PlayerActivity : BaseActivity() { } private fun endFile(eofReached: Boolean) { - if (eofReached && playerPreferences.autoplayEnabled().get()) { + if (eofReached && playerPreferences.autoplayEnabled.get()) { viewModel.changeEpisode(previous = false, autoPlay = true) } } @@ -1348,7 +1348,7 @@ class PlayerActivity : BaseActivity() { /* private fun updateDiscordRPC(exitingPlayer: Boolean) { DiscordRPCService.discordScope.launchIO { - if (connectionPreferences.enableDiscordRPC().get()) { + if (connectionPreferences.enableDiscordRPC.get()) { if (!exitingPlayer) { DiscordRPCService.setPlayerActivity( context = applicationContext, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerEnums.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerEnums.kt index eb2b47da09..cc9bd11c26 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerEnums.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerEnums.kt @@ -149,27 +149,27 @@ enum class VideoFilters( ) { BRIGHTNESS( AYMR.strings.player_sheets_filters_brightness, - { it.brightnessFilter() }, + { it.brightnessFilter }, "brightness", ), SATURATION( AYMR.strings.player_sheets_filters_Saturation, - { it.saturationFilter() }, + { it.saturationFilter }, "saturation", ), CONTRAST( AYMR.strings.player_sheets_filters_contrast, - { it.contrastFilter() }, + { it.contrastFilter }, "contrast", ), GAMMA( AYMR.strings.player_sheets_filters_gamma, - { it.gammaFilter() }, + { it.gammaFilter }, "gamma", ), HUE( AYMR.strings.player_sheets_filters_hue, - { it.hueFilter() }, + { it.hueFilter }, "hue", ), } @@ -183,28 +183,28 @@ enum class DebandSettings( ) { Iterations( AMMR.strings.player_sheets_deband_iterations, - { it.debandIterations() }, + { it.debandIterations }, "deband-iterations", 0, 16, ), Threshold( AMMR.strings.player_sheets_deband_threshold, - { it.debandThreshold() }, + { it.debandThreshold }, "deband-threshold", 0, 200, ), Range( AMMR.strings.player_sheets_deband_range, - { it.debandRange() }, + { it.debandRange }, "deband-range", 1, 64, ), Grain( AMMR.strings.player_sheets_deband_grain, - { it.debandGrain() }, + { it.debandGrain }, "deband-grain", 0, 200, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt index cd5e26f68a..c98f248d0f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerViewModel.kt @@ -671,7 +671,7 @@ class PlayerViewModel @JvmOverloads constructor( fun pause() = mpv.setPropertyBoolean("pause", true) fun unpause() = mpv.setPropertyBoolean("pause", false) - private val showStatusBar = playerPreferences.showSystemStatusBar().get() + private val showStatusBar = playerPreferences.showSystemStatusBar.get() fun showControls() { if (sheetShown.value != Sheets.None || panelShown.value != Panels.None || @@ -778,10 +778,10 @@ class PlayerViewModel @JvmOverloads constructor( val maxVolume = audioManager.getMaxVolume() fun changeVolumeBy(change: Int) { val mpvVolume = mpv.getPropertyInt("volume") - if ((volumeBoostCap ?: audioPreferences.volumeBoostCap().get()) > 0 && currentVolume.value == maxVolume) { + if ((volumeBoostCap ?: audioPreferences.volumeBoostCap.get()) > 0 && currentVolume.value == maxVolume) { if (mpvVolume == 100 && change < 0) changeVolumeTo(currentVolume.value + change) val finalMPVVolume = (mpvVolume?.plus(change))?.coerceAtLeast(100) ?: 100 - if (finalMPVVolume in 100..(volumeBoostCap ?: audioPreferences.volumeBoostCap().get()) + 100) { + if (finalMPVVolume in 100..(volumeBoostCap ?: audioPreferences.volumeBoostCap.get()) + 100) { changeMPVVolumeTo(finalMPVVolume) return } @@ -810,7 +810,7 @@ class PlayerViewModel @JvmOverloads constructor( AYMR.strings.disable_auto_play } playerUpdate.update { PlayerUpdates.ShowTextResource(textRes) } - playerPreferences.autoplayEnabled().set(value) + playerPreferences.autoplayEnabled.set(value) } @Suppress("DEPRECATION") @@ -823,7 +823,7 @@ class PlayerViewModel @JvmOverloads constructor( fun setAspect(aspect: VideoAspect, pan: Double, ratio: Double) { mpv.setPropertyDouble("panscan", pan) mpv.setPropertyDouble("video-aspect-override", ratio) - playerPreferences.aspectState().set(aspect) + playerPreferences.aspectState.set(aspect) playerUpdate.update { PlayerUpdates.AspectRatio } } @@ -945,9 +945,9 @@ class PlayerViewModel @JvmOverloads constructor( private operator fun List.component6(): T = get(5) - private val doubleTapToSeekDuration = gesturePreferences.skipLengthPreference().get() - private val preciseSeek = gesturePreferences.playerSmoothSeek().get() - private val showSeekBar = gesturePreferences.showSeekBar().get() + private val doubleTapToSeekDuration = gesturePreferences.skipLengthPreference.get() + private val preciseSeek = gesturePreferences.playerSmoothSeek.get() + private val showSeekBar = gesturePreferences.showSeekBar.get() private fun showSeekText(isForward: Boolean, text: String) { _seekText.update { _ -> text } @@ -1028,7 +1028,7 @@ class PlayerViewModel @JvmOverloads constructor( } fun handleLeftDoubleTap() { - when (gesturePreferences.leftDoubleTapGesture().get()) { + when (gesturePreferences.leftDoubleTapGesture.get()) { SingleActionGesture.Seek -> { leftSeek() } @@ -1044,7 +1044,7 @@ class PlayerViewModel @JvmOverloads constructor( } fun handleCenterDoubleTap() { - when (gesturePreferences.centerDoubleTapGesture().get()) { + when (gesturePreferences.centerDoubleTapGesture.get()) { SingleActionGesture.PlayPause -> { pauseUnpause() } @@ -1058,7 +1058,7 @@ class PlayerViewModel @JvmOverloads constructor( } fun handleRightDoubleTap() { - when (gesturePreferences.rightDoubleTapGesture().get()) { + when (gesturePreferences.rightDoubleTapGesture.get()) { SingleActionGesture.Seek -> { rightSeek() } @@ -1088,10 +1088,10 @@ class PlayerViewModel @JvmOverloads constructor( val eventFlow = eventChannel.receiveAsFlow() private val incognitoMode: Boolean by lazy { getIncognitoState.await(currentAnime.value?.source) } - private val downloadAheadAmount = downloadPreferences.autoDownloadWhileWatching().get() + private val downloadAheadAmount = downloadPreferences.autoDownloadWhileWatching.get() - internal val relativeTime = uiPreferences.relativeTime().get() - internal val dateFormat = uiPreferences.dateFormat().get() + internal val relativeTime = uiPreferences.relativeTime.get() + internal val dateFormat = uiPreferences.dateFormat.get() /** * The position in the current video. Used to restore from process kill. @@ -1334,7 +1334,7 @@ class PlayerViewModel @JvmOverloads constructor( return episodes .sortedWith(getEpisodeSort(anime, sortDescending = false)) .run { - if (basePreferences.downloadedOnly().get()) { + if (basePreferences.downloadedOnly.get()) { filterDownloaded(anime) } else { this @@ -1656,7 +1656,7 @@ class PlayerViewModel @JvmOverloads constructor( episodePosition = seconds - val progress = playerPreferences.progressPreference().get() + val progress = playerPreferences.progressPreference.get() val shouldTrack = !incognitoMode || hasTrackers if (seconds >= totalSeconds * progress && shouldTrack) { viewModelScope.launchNonCancellable { @@ -1677,7 +1677,7 @@ class PlayerViewModel @JvmOverloads constructor( updateTrackEpisodeSeen(currentEp) deleteEpisodeIfNeeded(currentEp) - val markDuplicateAsSeen = libraryPreferences.markDuplicateSeenEpisodeAsSeen().get() + val markDuplicateAsSeen = libraryPreferences.markDuplicateSeenEpisodeAsSeen.get() .contains(LibraryPreferences.MARK_DUPLICATE_EPISODE_SEEN_EXISTING) if (!markDuplicateAsSeen) return @@ -1735,7 +1735,7 @@ class PlayerViewModel @JvmOverloads constructor( private fun deleteEpisodeIfNeeded(chosenEpisode: Episode) { // Determine which episode should be deleted and enqueue val currentEpisodePosition = currentPlaylist.value.indexOf(chosenEpisode) - val removeAfterSeenSlots = downloadPreferences.removeAfterSeenSlots().get() + val removeAfterSeenSlots = downloadPreferences.removeAfterSeenSlots.get() val episodeToDelete = currentPlaylist.value.getOrNull( currentEpisodePosition - removeAfterSeenSlots, ) @@ -1950,8 +1950,8 @@ class PlayerViewModel @JvmOverloads constructor( } private fun updateTrackEpisodeSeen(episode: Episode) { - if (basePreferences.incognitoMode().get() || !hasTrackers) return - if (!trackPreferences.autoUpdateTrack().get()) return + if (basePreferences.incognitoMode.get() || !hasTrackers) return + if (!trackPreferences.autoUpdateTrack.get()) return val anime = currentAnime.value ?: return val context = Injekt.get() @@ -1987,7 +1987,7 @@ class PlayerViewModel @JvmOverloads constructor( * Returns the skipIntroLength used by this anime or the default one. */ fun getAnimeSkipIntroLength(): Int { - val default = gesturePreferences.defaultIntroLength().get() + val default = gesturePreferences.defaultIntroLength.get() val anime = currentAnime.value ?: return default val skipIntroLength = anime.skipIntroLength val skipIntroDisable = anime.skipIntroDisable @@ -2057,11 +2057,11 @@ class PlayerViewModel @JvmOverloads constructor( return null } - val introSkipEnabled = playerPreferences.enableSkipIntro().get() - private val autoSkip = playerPreferences.autoSkipIntro().get() - private val netflixStyle = playerPreferences.enableNetflixStyleIntroSkip().get() + val introSkipEnabled = playerPreferences.enableSkipIntro.get() + private val autoSkip = playerPreferences.autoSkipIntro.get() + private val netflixStyle = playerPreferences.enableNetflixStyleIntroSkip.get() - private val defaultWaitingTime = playerPreferences.waitingTimeIntroSkip().get() + private val defaultWaitingTime = playerPreferences.waitingTimeIntroSkip.get() fun onChapterChanged(chapterIndex: Int?) { if (chapterIndex == null) return diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/GestureHandler.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/GestureHandler.kt index c715a19cf2..796dc805b9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/GestureHandler.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/GestureHandler.kt @@ -83,7 +83,7 @@ fun GestureHandler( val audioPreferences = remember { Injekt.get() } val panelShown by viewModel.panelShown.collectAsState() - val allowGesturesInPanels by playerPreferences.allowGestures().collectAsState() + val allowGesturesInPanels by playerPreferences.allowGestures.collectAsState() val paused by viewModel.mpv.propFlow("pause").collectAsState() val duration by viewModel.mpv.propFlow("duration").collectAsState() val position by viewModel.mpv.propFlow("time-pos").collectAsState() @@ -103,16 +103,16 @@ fun GestureHandler( viewModel.hideSeekBar() } - val gestureVolumeBrightness = gesturePreferences.gestureVolumeBrightness().get() - val swapVolumeBrightness by gesturePreferences.swapVolumeBrightness().collectAsState() - val seekGesture by gesturePreferences.gestureHorizontalSeek().collectAsState() - val preciseSeeking by gesturePreferences.playerSmoothSeek().collectAsState() - val showSeekbar by gesturePreferences.showSeekBar().collectAsState() + val gestureVolumeBrightness = gesturePreferences.gestureVolumeBrightness.get() + val swapVolumeBrightness by gesturePreferences.swapVolumeBrightness.collectAsState() + val seekGesture by gesturePreferences.gestureHorizontalSeek.collectAsState() + val preciseSeeking by gesturePreferences.playerSmoothSeek.collectAsState() + val showSeekbar by gesturePreferences.showSeekBar.collectAsState() var isLongPressing by remember { mutableStateOf(false) } val currentVolume by viewModel.currentVolume.collectAsState() val currentMPVVolume by viewModel.mpv.propFlow("volume").collectAsState() val currentBrightness by viewModel.currentBrightness.collectAsState() - val volumeBoostingCap = audioPreferences.volumeBoostCap().get() + val volumeBoostingCap = audioPreferences.volumeBoostCap.get() val haptics = LocalHapticFeedback.current Box( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerControls.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerControls.kt index 3c31f09651..d241d7f126 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerControls.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerControls.kt @@ -147,7 +147,7 @@ fun PlayerControls( val chapters by viewModel.chapters.collectAsState(persistentListOf()) val currentBrightness by viewModel.currentBrightness.collectAsState() - val playerTimeToDisappear by playerPreferences.playerTimeToDisappear().collectAsState() + val playerTimeToDisappear by playerPreferences.playerTimeToDisappear.collectAsState() var isSeeking by remember { mutableStateOf(false) } var resetControls by remember { mutableStateOf(true) } @@ -213,8 +213,8 @@ fun PlayerControls( val brightness by viewModel.currentBrightness.collectAsState() val volume by viewModel.currentVolume.collectAsState() val mpvVolume by viewModel.mpv.propFlow("volume").collectAsState() - val swapVolumeAndBrightness by gesturePreferences.swapVolumeBrightness().collectAsState() - val reduceMotion by playerPreferences.reduceMotion().collectAsState() + val swapVolumeAndBrightness by gesturePreferences.swapVolumeBrightness.collectAsState() + val reduceMotion by playerPreferences.reduceMotion.collectAsState() LaunchedEffect(volume, mpvVolume, isVolumeSliderShown) { delay(2000) @@ -299,19 +299,19 @@ fun PlayerControls( bottom.linkTo(parent.bottom) }, ) { - val boostCap by audioPreferences.volumeBoostCap().collectAsState() - val displayVolumeAsPercentage by playerPreferences.displayVolPer().collectAsState() + val boostCap by audioPreferences.volumeBoostCap.collectAsState() + val displayVolumeAsPercentage by playerPreferences.displayVolPer.collectAsState() VolumeSlider( volume = volume, mpvVolume = mpvVolume ?: 100, range = 0..viewModel.maxVolume, - boostRange = if (boostCap > 0) 0..audioPreferences.volumeBoostCap().get() else null, + boostRange = if (boostCap > 0) 0..audioPreferences.volumeBoostCap.get() else null, displayAsPercentage = displayVolumeAsPercentage, ) } val currentPlayerUpdate by viewModel.playerUpdate.collectAsState() - val aspectRatio by playerPreferences.aspectState().collectAsState() + val aspectRatio by playerPreferences.aspectState.collectAsState() LaunchedEffect(currentPlayerUpdate, aspectRatio) { if (currentPlayerUpdate is PlayerUpdates.DoubleSpeed || currentPlayerUpdate is PlayerUpdates.None) { return@LaunchedEffect @@ -369,7 +369,7 @@ fun PlayerControls( bottom.linkTo(parent.bottom) }, ) { - val showLoadingCircle by playerPreferences.showLoadingCircle().collectAsState() + val showLoadingCircle by playerPreferences.showLoadingCircle.collectAsState() MiddlePlayerControls( hasPrevious = hasPreviousEpisode, onSkipPrevious = { viewModel.changeEpisode(true) }, @@ -406,10 +406,10 @@ fun PlayerControls( bottom.linkTo(parent.bottom, spacing.medium) }, ) { - val invertDuration by playerPreferences.invertDuration().collectAsState() + val invertDuration by playerPreferences.invertDuration.collectAsState() val readAhead by viewModel.mpv.propFlow("demuxer-cache-time").collectAsState() val remaining by viewModel.mpv.propFlow("playtime-remaining").collectAsState() - val preciseSeeking by gesturePreferences.playerSmoothSeek().collectAsState() + val preciseSeeking by gesturePreferences.playerSmoothSeek.collectAsState() SeekbarWithTimers( position = position?.toFloat() ?: 0f, duration = duration?.toFloat() ?: 0f, @@ -421,7 +421,7 @@ fun PlayerControls( }, onValueChangeFinished = { isSeeking = false }, timersInverted = Pair(false, invertDuration), - durationTimerOnCLick = { playerPreferences.invertDuration().set(!invertDuration) }, + durationTimerOnCLick = { playerPreferences.invertDuration.set(!invertDuration) }, positionTimerOnClick = {}, chapters = chapters, ) @@ -457,7 +457,7 @@ fun PlayerControls( ) } // Top right controls - val autoPlayEnabled by playerPreferences.autoplayEnabled().collectAsState() + val autoPlayEnabled by playerPreferences.autoplayEnabled.collectAsState() val isEpisodeOnline by viewModel.isEpisodeOnline.collectAsState() AnimatedVisibility( controlsShown && !areControlsLocked, @@ -564,16 +564,16 @@ fun PlayerControls( end.linkTo(bottomRightControls.start) }, ) { - val showChapterIndicator by playerPreferences.showCurrentChapter().collectAsState() + val showChapterIndicator by playerPreferences.showCurrentChapter.collectAsState() BottomLeftPlayerControls( - playbackSpeed = playbackSpeed ?: playerPreferences.playerSpeed().get(), + playbackSpeed = playbackSpeed ?: playerPreferences.playerSpeed.get(), showChapterIndicator = showChapterIndicator, currentChapter = chapters.getOrNull(currentChapter ?: 0), onLockControls = viewModel::lockControls, onCycleRotation = viewModel::cycleScreenRotations, onPlaybackSpeedChange = { viewModel.mpv.setPropertyFloat("speed", it) - playerPreferences.playerSpeed().set(it) + playerPreferences.playerSpeed.set(it) }, onOpenSheet = viewModel::showSheet, ) @@ -588,12 +588,12 @@ fun PlayerControls( val expandedState by viewModel.hosterExpandedList.collectAsState() val selectedHosterVideoIndex by viewModel.selectedHosterVideoIndex.collectAsState() val sleepTimerTimeRemaining by viewModel.remainingTime.collectAsState() - val speedPresets by playerPreferences.speedPresets().collectAsState() + val speedPresets by playerPreferences.speedPresets.collectAsState() - val showSubtitles by subtitlePreferences.screenshotSubtitles().collectAsState() + val showSubtitles by subtitlePreferences.screenshotSubtitles.collectAsState() val currentSource by viewModel.currentSource.collectAsState() - val showFailedHosters by playerPreferences.showFailedHosters().collectAsState() - val emptyHosters by playerPreferences.showEmptyHosters().collectAsState() + val showFailedHosters by playerPreferences.showFailedHosters.collectAsState() + val emptyHosters by playerPreferences.showEmptyHosters.collectAsState() val internalSubtitles by viewModel.subtitleTracks.collectAsState(persistentListOf()) val externalSubtitles by viewModel.externalSubtitleTracks.collectAsState() @@ -601,8 +601,8 @@ fun PlayerControls( internalSubtitles.map { VideoTrack.Internal(it) } + externalSubtitles } - val audioChannels by audioPreferences.audioChannels().collectAsState() - val pitchCorrection by audioPreferences.enablePitchCorrection().collectAsState() + val audioChannels by audioPreferences.audioChannels.collectAsState() + val pitchCorrection by audioPreferences.enablePitchCorrection.collectAsState() val mpvAudioPitchCorrection by viewModel.mpv.propFlow("audio-pitch-correction").collectAsState() val internalAudioTracks by viewModel.audioTracks.collectAsState(persistentListOf()) val externalAudioTracks by viewModel.externalAudioTracks.collectAsState() @@ -610,7 +610,7 @@ fun PlayerControls( internalAudioTracks.map { VideoTrack.Internal(it) } + externalAudioTracks } - val statisticsPage by advancedPreferences.playerStatisticsPage().collectAsState() + val statisticsPage by advancedPreferences.playerStatisticsPage.collectAsState() PlayerSheets( sheetShown = sheetShown, @@ -640,15 +640,15 @@ fun PlayerControls( decoder = decoder, onUpdateDecoder = { viewModel.mpv.setPropertyString("hwdec", it.value) }, - speed = playbackSpeed ?: playerPreferences.playerSpeed().get(), + speed = playbackSpeed ?: playerPreferences.playerSpeed.get(), speedPresets = speedPresets.map { it.toFloat() }.sorted().toPersistentList(), onSpeedChange = { viewModel.mpv.setPropertyFloat("speed", it.toFixed(2)) }, - onMakeDefaultSpeed = { playerPreferences.playerSpeed().set(it.toFixed(2)) }, - onAddSpeedPreset = { playerPreferences.speedPresets() += it.toFixed(2).toString() }, - onRemoveSpeedPreset = { playerPreferences.speedPresets() -= it.toFixed(2).toString() }, - onResetSpeedPresets = playerPreferences.speedPresets()::delete, + onMakeDefaultSpeed = { playerPreferences.playerSpeed.set(it.toFixed(2)) }, + onAddSpeedPreset = { playerPreferences.speedPresets += it.toFixed(2).toString() }, + onRemoveSpeedPreset = { playerPreferences.speedPresets -= it.toFixed(2).toString() }, + onResetSpeedPresets = playerPreferences.speedPresets::delete, onResetDefaultSpeed = { - viewModel.mpv.setPropertyFloat("speed", playerPreferences.playerSpeed().deleteAndGet().toFixed(2)) + viewModel.mpv.setPropertyFloat("speed", playerPreferences.playerSpeed.deleteAndGet().toFixed(2)) }, // More sheet state @@ -663,10 +663,10 @@ fun PlayerControls( viewModel.mpv.command("script-binding", "stats/display-stats-toggle") } if (page != 0) viewModel.mpv.command("script-binding", "stats/display-page-$page") - advancedPreferences.playerStatisticsPage().set(page) + advancedPreferences.playerStatisticsPage.set(page) }, onAudioChannelsChange = { - audioPreferences.audioChannels().set(it) + audioPreferences.audioChannels.set(it) if (it == AudioChannels.ReverseStereo) { viewModel.mpv.setPropertyString(AudioChannels.AutoSafe.property, AudioChannels.AutoSafe.value) } else { @@ -678,14 +678,14 @@ fun PlayerControls( onCustomButtonLongClick = { it.executeLongPress(viewModel.mpv) }, buttons = customButtons, onPitchCorrectionChange = { - audioPreferences.enablePitchCorrection().set(it) + audioPreferences.enablePitchCorrection.set(it) viewModel.mpv.setPropertyBoolean("audio-pitch-correction", it) }, pitchCorrection = pitchCorrection || mpvAudioPitchCorrection == true, isLocalSource = currentSource?.isLocal() == true, showSubtitles = showSubtitles, - onToggleShowSubtitles = { subtitlePreferences.screenshotSubtitles().set(it) }, + onToggleShowSubtitles = { subtitlePreferences.screenshotSubtitles.set(it) }, cachePath = viewModel.cachePath, onSetAsArt = viewModel::setAsArt, onShare = { viewModel.shareImage(it, viewModel.pos) }, @@ -701,10 +701,10 @@ fun PlayerControls( ) val panel by viewModel.panelShown.collectAsState() - val subDelayPref by subtitlePreferences.subtitlesDelay().collectAsState() + val subDelayPref by subtitlePreferences.subtitlesDelay.collectAsState() val subDelay by viewModel.mpv.propFlow("sub-delay").collectAsState() val subDelaySecondary by viewModel.mpv.propFlow("secondary-sub-delay").collectAsState() - val subDelaySecondaryPref by subtitlePreferences.subtitlesSecondaryDelay().collectAsState() + val subDelaySecondaryPref by subtitlePreferences.subtitlesSecondaryDelay.collectAsState() val subSpeed by viewModel.mpv.propFlow("sub-speed").collectAsState() val audioDelay by viewModel.mpv.propFlow("audio-delay").collectAsState() val isBold by viewModel.mpv.propFlow("sub-bold").collectAsState() @@ -721,7 +721,7 @@ fun PlayerControls( val overrideAssSubs by viewModel.mpv.propFlow("sub-ass-override").collectAsState() val subScale by viewModel.mpv.propFlow("sub-scale").collectAsState() val subPos by viewModel.mpv.propFlow("sub-pos").collectAsState() - val deband by decoderPreferences.debanding().collectAsState() + val deband by decoderPreferences.debanding.collectAsState() val mpvGpuNext by viewModel.mpv.propFlow("vo").collectAsState() val debandSettingsMap = DebandSettings.entries.associateWith { setting -> viewModel.mpv.propFlow(setting.mpvProperty).collectAsState().value ?: 0 @@ -735,89 +735,89 @@ fun PlayerControls( panelShown = panel, onDismissRequest = { viewModel.showPanel(Panels.None) }, // Subtitle settings panel state - isBold = isBold ?: subtitlePreferences.boldSubtitles().get(), - isItalic = isItalic ?: subtitlePreferences.italicSubtitles().get(), + isBold = isBold ?: subtitlePreferences.boldSubtitles.get(), + isItalic = isItalic ?: subtitlePreferences.italicSubtitles.get(), subJustify = subJustify?.let { SubtitleJustification.byValue(it) } - ?: subtitlePreferences.subtitleJustification().get(), - subFont = subFont ?: subtitlePreferences.subtitleFont().get(), - subFontSize = subFontSize ?: subtitlePreferences.subtitleFontSize().get(), + ?: subtitlePreferences.subtitleJustification.get(), + subFont = subFont ?: subtitlePreferences.subtitleFont.get(), + subFontSize = subFontSize ?: subtitlePreferences.subtitleFontSize.get(), subBorderStyle = subBorderStyle?.let { SubtitlesBorderStyle.byValue(it) } - ?: subtitlePreferences.borderStyleSubtitles().get(), - subBorderSize = subBorderSize ?: subtitlePreferences.subtitleBorderSize().get(), - subShadowOffset = subShadowOffset ?: subtitlePreferences.shadowOffsetSubtitles().get(), + ?: subtitlePreferences.borderStyleSubtitles.get(), + subBorderSize = subBorderSize ?: subtitlePreferences.subtitleBorderSize.get(), + subShadowOffset = subShadowOffset ?: subtitlePreferences.shadowOffsetSubtitles.get(), subColor = subtitleColorType, currentSubtitleColor = when (subtitleColorType) { - SubColorType.Text -> subColor?.toColorInt() ?: subtitlePreferences.textColorSubtitles().get() - SubColorType.Border -> subBorderColor?.toColorInt() ?: subtitlePreferences.borderColorSubtitles().get() + SubColorType.Text -> subColor?.toColorInt() ?: subtitlePreferences.textColorSubtitles.get() + SubColorType.Border -> subBorderColor?.toColorInt() ?: subtitlePreferences.borderColorSubtitles.get() SubColorType.Background -> subBackgroundColor?.toColorInt() - ?: subtitlePreferences.backgroundColorSubtitles().get() + ?: subtitlePreferences.backgroundColorSubtitles.get() }, overrideAssSubs = overrideAssSubs?.let { SubtitleAssOverride.byValue(it) } - ?: subtitlePreferences.overrideSubsASS().get(), - subScale = subScale ?: subtitlePreferences.subtitleFontScale().get(), - subPos = subPos ?: subtitlePreferences.subtitlePos().get(), + ?: subtitlePreferences.overrideSubsASS.get(), + subScale = subScale ?: subtitlePreferences.subtitleFontScale.get(), + subPos = subPos ?: subtitlePreferences.subtitlePos.get(), onSubBoldChange = { viewModel.mpv.setPropertyBoolean("sub-bold", it) - subtitlePreferences.boldSubtitles().set(it) + subtitlePreferences.boldSubtitles.set(it) }, onSubItalicChange = { viewModel.mpv.setPropertyBoolean("sub-italic", it) - subtitlePreferences.italicSubtitles().set(it) + subtitlePreferences.italicSubtitles.set(it) }, onSubJustifyChange = { viewModel.mpv.setPropertyString("sub-justify", it.value) - subtitlePreferences.subtitleJustification().set(it) + subtitlePreferences.subtitleJustification.set(it) }, onSubFontChange = { viewModel.mpv.setPropertyString("sub-font", it) - subtitlePreferences.subtitleFont().set(it) + subtitlePreferences.subtitleFont.set(it) }, onSubFontSizeChange = { viewModel.mpv.setPropertyInt("sub-font-size", it) - subtitlePreferences.subtitleFontSize().set(it) + subtitlePreferences.subtitleFontSize.set(it) }, onSubBorderStyleChange = { viewModel.mpv.setPropertyString("sub-border-style", it.value) - subtitlePreferences.borderStyleSubtitles().set(it) + subtitlePreferences.borderStyleSubtitles.set(it) }, onSubBorderSizeChange = { viewModel.mpv.setPropertyInt("sub-outline-size", it) - subtitlePreferences.subtitleBorderSize().set(it) + subtitlePreferences.subtitleBorderSize.set(it) }, onSubShadowOffsetChange = { viewModel.mpv.setPropertyInt("sub-shadow-offset", it) - subtitlePreferences.shadowOffsetSubtitles().set(it) + subtitlePreferences.shadowOffsetSubtitles.set(it) }, onSubColorChange = { when (subtitleColorType) { SubColorType.Text -> { viewModel.mpv.setPropertyString("sub-color", it.toColorHexString()) - subtitlePreferences.textColorSubtitles().set(it) + subtitlePreferences.textColorSubtitles.set(it) } SubColorType.Border -> { viewModel.mpv.setPropertyString("sub-outline-color", it.toColorHexString()) - subtitlePreferences.borderColorSubtitles().set(it) + subtitlePreferences.borderColorSubtitles.set(it) } SubColorType.Background -> { viewModel.mpv.setPropertyString("sub-back-color", it.toColorHexString()) - subtitlePreferences.backgroundColorSubtitles().set(it) + subtitlePreferences.backgroundColorSubtitles.set(it) } } }, onOverrideAssSubsChange = { viewModel.mpv.setPropertyString("sub-ass-override", it.value) - subtitlePreferences.overrideSubsASS().set(it) + subtitlePreferences.overrideSubsASS.set(it) }, onSubScaleChange = { viewModel.mpv.setPropertyFloat("sub-scale", it) - subtitlePreferences.subtitleFontScale().set(it) + subtitlePreferences.subtitleFontScale.set(it) }, onSubPosChange = { viewModel.mpv.setPropertyInt("sub-pos", it) - subtitlePreferences.subtitlePos().set(it) + subtitlePreferences.subtitlePos.set(it) }, onSubColorTypeChange = { subtitleColorType = it }, onSubColorReset = { @@ -827,19 +827,19 @@ fun PlayerControls( resetTypography(viewModel.mpv, subtitlePreferences) }, onSubtitleMiscReset = { - subtitlePreferences.subtitlePos().deleteAndGet().let { + subtitlePreferences.subtitlePos.deleteAndGet().let { viewModel.mpv.setPropertyInt("sub-pos", it) } - subtitlePreferences.subtitleFontScale().deleteAndGet().let { + subtitlePreferences.subtitleFontScale.deleteAndGet().let { viewModel.mpv.setPropertyFloat("sub-scale", it) } - subtitlePreferences.overrideSubsASS().deleteAndGet().let { + subtitlePreferences.overrideSubsASS.deleteAndGet().let { viewModel.mpv.setPropertyString("sub-ass-override", it.value) } }, subDelayMsPrimary = subDelay?.times(1000)?.roundToInt() ?: subDelayPref, subDelayMsSecondary = subDelaySecondary?.times(1000)?.roundToInt() ?: subDelaySecondaryPref, - subSpeed = subSpeed ?: subtitlePreferences.subtitlesSpeed().get().toDouble(), + subSpeed = subSpeed ?: subtitlePreferences.subtitlesSpeed.get().toDouble(), onSubDelayPrimaryChange = { viewModel.mpv.setPropertyDouble("sub-delay", it / 1000.0) }, @@ -850,27 +850,27 @@ fun PlayerControls( viewModel.mpv.setPropertyDouble("sub-speed", it) }, onSubDelayApply = { - subtitlePreferences.subtitlesDelay().set((subDelay?.times(1000)?.roundToInt()) ?: 0) - subtitlePreferences.subtitlesSecondaryDelay().set((subDelaySecondary?.times(1000)?.roundToInt()) ?: 0) + subtitlePreferences.subtitlesDelay.set((subDelay?.times(1000)?.roundToInt()) ?: 0) + subtitlePreferences.subtitlesSecondaryDelay.set((subDelaySecondary?.times(1000)?.roundToInt()) ?: 0) }, onSubDelayReset = { - viewModel.mpv.setPropertyDouble("sub-delay", subtitlePreferences.subtitlesDelay().get() / 1000.0) + viewModel.mpv.setPropertyDouble("sub-delay", subtitlePreferences.subtitlesDelay.get() / 1000.0) viewModel.mpv.setPropertyDouble( "secondary-sub-delay", - subtitlePreferences.subtitlesSecondaryDelay().get() / 1000.0, + subtitlePreferences.subtitlesSecondaryDelay.get() / 1000.0, ) - viewModel.mpv.setPropertyDouble("sub-speed", subtitlePreferences.subtitlesSpeed().get().toDouble()) + viewModel.mpv.setPropertyDouble("sub-speed", subtitlePreferences.subtitlesSpeed.get().toDouble()) }, - audioDelayMs = (audioDelay?.times(1000))?.roundToInt() ?: audioPreferences.audioDelay().get(), + audioDelayMs = (audioDelay?.times(1000))?.roundToInt() ?: audioPreferences.audioDelay.get(), onAudioDelayChange = { viewModel.mpv.setPropertyDouble("audio-delay", it / 1000.0) }, onAudioDelayApply = { - audioPreferences.audioDelay().set((audioDelay?.times(1000)?.roundToInt()) ?: 0) + audioPreferences.audioDelay.set((audioDelay?.times(1000)?.roundToInt()) ?: 0) }, onAudioDelayReset = { - viewModel.mpv.setPropertyDouble("audio-delay", audioPreferences.audioDelay().get() / 1000.0) + viewModel.mpv.setPropertyDouble("audio-delay", audioPreferences.audioDelay.get() / 1000.0) }, onDebandChange = { - decoderPreferences.debanding().set(it) + decoderPreferences.debanding.set(it) when (it) { Debanding.None -> { viewModel.mpv.setPropertyString("deband", "no") diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerPanels.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerPanels.kt index cf37587903..5ff6751895 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerPanels.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/PlayerPanels.kt @@ -203,9 +203,9 @@ val panelCardsColors: @Composable () -> CardColors = { val colors = CardDefaults.cardColors() colors.copy( - containerColor = MaterialTheme.colorScheme.surface.copy(playerPreferences.panelOpacity().get() / 100f), + containerColor = MaterialTheme.colorScheme.surface.copy(playerPreferences.panelOpacity.get() / 100f), disabledContainerColor = MaterialTheme.colorScheme.surfaceDim.copy( - playerPreferences.panelOpacity().get() / 100f, + playerPreferences.panelOpacity.get() / 100f, ), ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsColorsCard.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsColorsCard.kt index cd1d19d697..cbd6e2be81 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsColorsCard.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsColorsCard.kt @@ -172,17 +172,17 @@ fun resetColors( ) { when (type) { SubColorType.Text -> { - val textColor = preferences.textColorSubtitles().deleteAndGet().toColorHexString() + val textColor = preferences.textColorSubtitles.deleteAndGet().toColorHexString() mpv?.setPropertyString("sub-color", textColor) } SubColorType.Border -> { - val borderColor = preferences.borderColorSubtitles().deleteAndGet().toColorHexString() + val borderColor = preferences.borderColorSubtitles.deleteAndGet().toColorHexString() mpv?.setPropertyString("sub-outline-color", borderColor) } SubColorType.Background -> { - val backgroundColor = preferences.backgroundColorSubtitles().deleteAndGet().toColorHexString() + val backgroundColor = preferences.backgroundColorSubtitles.deleteAndGet().toColorHexString() mpv?.setPropertyString("sub-back-color", backgroundColor) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsTypographyCard.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsTypographyCard.kt index 103b3764cf..5aa4f9a499 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsTypographyCard.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/controls/components/panels/SubtitleSettingsTypographyCard.kt @@ -105,7 +105,7 @@ fun SubtitleSettingsTypographyCard( var isExpanded by remember { mutableStateOf(true) } val fontsDir = storageManager.getFontsDirectory() - val fonts by remember { mutableStateOf(mutableListOf(preferences.subtitleFont().defaultValue())) } + val fonts by remember { mutableStateOf(mutableListOf(preferences.subtitleFont.defaultValue())) } var fontsLoadingIndicator: (@Composable () -> Unit)? by remember { val indicator: (@Composable () -> Unit) = { CircularProgressIndicator(Modifier.size(32.dp)) @@ -293,14 +293,14 @@ fun resetTypography( mpv: MPV, preferences: SubtitlePreferences, ) { - mpv.setPropertyBoolean("sub-bold", preferences.boldSubtitles().deleteAndGet()) - mpv.setPropertyBoolean("sub-italic", preferences.italicSubtitles().deleteAndGet()) - mpv.setPropertyString("sub-justify", preferences.subtitleJustification().deleteAndGet().value) - mpv.setPropertyString("sub-font", preferences.subtitleFont().deleteAndGet()) - mpv.setPropertyInt("sub-font-size", preferences.subtitleFontSize().deleteAndGet()) - mpv.setPropertyInt("sub-outline-size", preferences.subtitleBorderSize().deleteAndGet()) - mpv.setPropertyInt("sub-shadow-offset", preferences.shadowOffsetSubtitles().deleteAndGet()) - mpv.setPropertyString("sub-border-style", preferences.borderStyleSubtitles().deleteAndGet().value) + mpv.setPropertyBoolean("sub-bold", preferences.boldSubtitles.deleteAndGet()) + mpv.setPropertyBoolean("sub-italic", preferences.italicSubtitles.deleteAndGet()) + mpv.setPropertyString("sub-justify", preferences.subtitleJustification.deleteAndGet().value) + mpv.setPropertyString("sub-font", preferences.subtitleFont.deleteAndGet()) + mpv.setPropertyInt("sub-font-size", preferences.subtitleFontSize.deleteAndGet()) + mpv.setPropertyInt("sub-outline-size", preferences.subtitleBorderSize.deleteAndGet()) + mpv.setPropertyInt("sub-shadow-offset", preferences.shadowOffsetSubtitles.deleteAndGet()) + mpv.setPropertyString("sub-border-style", preferences.borderStyleSubtitles.deleteAndGet().value) } enum class SubtitlesBorderStyle( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/domain/TrackSelect.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/domain/TrackSelect.kt index 988272368e..5d2d91f06e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/domain/TrackSelect.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/domain/TrackSelect.kt @@ -14,19 +14,19 @@ class TrackSelect( ) { fun getPreferredTrackIndex(tracks: List, subtitle: Boolean = true): VideoTrack? { val prefLangs = if (subtitle) { - subtitlePreferences.preferredSubLanguages().get() + subtitlePreferences.preferredSubLanguages.get() } else { - audioPreferences.preferredAudioLanguages().get() + audioPreferences.preferredAudioLanguages.get() }.split(",").filter(String::isNotEmpty).map(String::trim) val whitelist = if (subtitle) { - subtitlePreferences.subtitleWhitelist().get() + subtitlePreferences.subtitleWhitelist.get() } else { "" }.split(",").filter(String::isNotEmpty).map(String::trim) val blacklist = if (subtitle) { - subtitlePreferences.subtitleBlacklist().get() + subtitlePreferences.subtitleBlacklist.get() } else { "" }.split(",").filter(String::isNotEmpty).map(String::trim) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AdvancedPlayerPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AdvancedPlayerPreferences.kt index cf608b232a..a75207b8e3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AdvancedPlayerPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AdvancedPlayerPreferences.kt @@ -1,15 +1,16 @@ package eu.kanade.tachiyomi.ui.player.settings +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class AdvancedPlayerPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun mpvUserFiles() = preferenceStore.getBoolean("mpv_scripts", false) - fun mpvConf() = preferenceStore.getString("pref_mpv_conf", "") - fun mpvInput() = preferenceStore.getString("pref_mpv_input", "") + val mpvUserFiles: Preference = preferenceStore.getBoolean("mpv_scripts", false) + val mpvConf: Preference = preferenceStore.getString("pref_mpv_conf", "") + val mpvInput: Preference = preferenceStore.getString("pref_mpv_input", "") // Non-preference - fun playerStatisticsPage() = preferenceStore.getInt("pref_player_statistics_page", 0) + val playerStatisticsPage: Preference = preferenceStore.getInt("pref_player_statistics_page", 0) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AudioPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AudioPreferences.kt index bf57645fda..5970247eeb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AudioPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/AudioPreferences.kt @@ -1,21 +1,22 @@ package eu.kanade.tachiyomi.ui.player.settings import dev.icerock.moko.resources.StringResource +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import tachiyomi.i18n.aniyomi.AYMR class AudioPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun preferredAudioLanguages() = preferenceStore.getString("pref_audio_lang", "") - fun enablePitchCorrection() = preferenceStore.getBoolean("pref_audio_pitch_correction", true) - fun audioChannels() = preferenceStore.getEnum("pref_audio_config", AudioChannels.AutoSafe) - fun volumeBoostCap() = preferenceStore.getInt("pref_audio_volume_boost_cap", 30) + val preferredAudioLanguages: Preference = preferenceStore.getString("pref_audio_lang", "") + val enablePitchCorrection: Preference = preferenceStore.getBoolean("pref_audio_pitch_correction", true) + val audioChannels: Preference = preferenceStore.getEnum("pref_audio_config", AudioChannels.AutoSafe) + val volumeBoostCap: Preference = preferenceStore.getInt("pref_audio_volume_boost_cap", 30) // Non-preferences - fun audioDelay() = preferenceStore.getInt("pref_audio_delay", 0) + val audioDelay: Preference = preferenceStore.getInt("pref_audio_delay", 0) } enum class AudioChannels(val titleRes: StringResource, val property: String, val value: String) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/DecoderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/DecoderPreferences.kt index 9e7af3fd15..43a43f8476 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/DecoderPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/DecoderPreferences.kt @@ -1,27 +1,28 @@ package eu.kanade.tachiyomi.ui.player.settings import eu.kanade.tachiyomi.ui.player.Debanding +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum class DecoderPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun tryHWDecoding() = preferenceStore.getBoolean("pref_try_hwdec", true) - fun gpuNext() = preferenceStore.getBoolean("pref_gpu_next", false) - fun useYUV420P() = preferenceStore.getBoolean("use_yuv420p", true) + val tryHWDecoding: Preference = preferenceStore.getBoolean("pref_try_hwdec", true) + val gpuNext: Preference = preferenceStore.getBoolean("pref_gpu_next", false) + val useYUV420P: Preference = preferenceStore.getBoolean("use_yuv420p", true) - fun debanding() = preferenceStore.getEnum("pref_video_debanding", Debanding.None) - fun debandIterations() = preferenceStore.getInt("deband_iterations", 1) - fun debandThreshold() = preferenceStore.getInt("deband_threshold", 48) - fun debandRange() = preferenceStore.getInt("deband_range", 16) - fun debandGrain() = preferenceStore.getInt("deband_grain", 32) + val debanding: Preference = preferenceStore.getEnum("pref_video_debanding", Debanding.None) + val debandIterations: Preference = preferenceStore.getInt("deband_iterations", 1) + val debandThreshold: Preference = preferenceStore.getInt("deband_threshold", 48) + val debandRange: Preference = preferenceStore.getInt("deband_range", 16) + val debandGrain: Preference = preferenceStore.getInt("deband_grain", 32) // Non-preferences - fun brightnessFilter() = preferenceStore.getInt("pref_player_filter_brightness") - fun saturationFilter() = preferenceStore.getInt("pref_player_filter_saturation") - fun contrastFilter() = preferenceStore.getInt("pref_player_filter_contrast") - fun gammaFilter() = preferenceStore.getInt("pref_player_filter_gamma") - fun hueFilter() = preferenceStore.getInt("pref_player_filter_hue") + val brightnessFilter: Preference = preferenceStore.getInt("pref_player_filter_brightness") + val saturationFilter: Preference = preferenceStore.getInt("pref_player_filter_saturation") + val contrastFilter: Preference = preferenceStore.getInt("pref_player_filter_contrast") + val gammaFilter: Preference = preferenceStore.getInt("pref_player_filter_gamma") + val hueFilter: Preference = preferenceStore.getInt("pref_player_filter_hue") } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/GesturePreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/GesturePreferences.kt index c45299a3ed..a03242a6ea 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/GesturePreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/GesturePreferences.kt @@ -1,36 +1,55 @@ package eu.kanade.tachiyomi.ui.player.settings import eu.kanade.tachiyomi.ui.player.SingleActionGesture +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum class GesturePreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { // Sliders - fun gestureVolumeBrightness() = preferenceStore.getBoolean( + val gestureVolumeBrightness: Preference = preferenceStore.getBoolean( "pref_gesture_volume_brightness", true, ) - fun swapVolumeBrightness() = preferenceStore.getBoolean("pref_swap_volume_and_brightness", false) + val swapVolumeBrightness: Preference = preferenceStore.getBoolean("pref_swap_volume_and_brightness", false) // Seeking - fun gestureHorizontalSeek() = preferenceStore.getBoolean("pref_gesture_horizontal_seek", true) - fun showSeekBar() = preferenceStore.getBoolean("pref_show_seekbar", false) - fun defaultIntroLength() = preferenceStore.getInt("pref_default_intro_length", 85) - fun skipLengthPreference() = preferenceStore.getInt("pref_skip_length_preference", 10) - fun playerSmoothSeek() = preferenceStore.getBoolean("pref_player_smooth_seek", false) + val gestureHorizontalSeek: Preference = preferenceStore.getBoolean("pref_gesture_horizontal_seek", true) + val showSeekBar: Preference = preferenceStore.getBoolean("pref_show_seekbar", false) + val defaultIntroLength: Preference = preferenceStore.getInt("pref_default_intro_length", 85) + val skipLengthPreference: Preference = preferenceStore.getInt("pref_skip_length_preference", 10) + val playerSmoothSeek: Preference = preferenceStore.getBoolean("pref_player_smooth_seek", false) // Double tap - fun leftDoubleTapGesture() = preferenceStore.getEnum("pref_left_double_tap", SingleActionGesture.Seek) - fun centerDoubleTapGesture() = preferenceStore.getEnum("pref_center_double_tap", SingleActionGesture.PlayPause) - fun rightDoubleTapGesture() = preferenceStore.getEnum("pref_right_double_tap", SingleActionGesture.Seek) + val leftDoubleTapGesture: Preference = preferenceStore.getEnum( + "pref_left_double_tap", + SingleActionGesture.Seek, + ) + val centerDoubleTapGesture: Preference = preferenceStore.getEnum( + "pref_center_double_tap", + SingleActionGesture.PlayPause, + ) + val rightDoubleTapGesture: Preference = preferenceStore.getEnum( + "pref_right_double_tap", + SingleActionGesture.Seek, + ) // Media controls - fun mediaPreviousGesture() = preferenceStore.getEnum("pref_media_previous", SingleActionGesture.Switch) - fun mediaPlayPauseGesture() = preferenceStore.getEnum("pref_media_playpause", SingleActionGesture.PlayPause) - fun mediaNextGesture() = preferenceStore.getEnum("pref_media_next", SingleActionGesture.Switch) + val mediaPreviousGesture: Preference = preferenceStore.getEnum( + "pref_media_previous", + SingleActionGesture.Switch, + ) + val mediaPlayPauseGesture: Preference = preferenceStore.getEnum( + "pref_media_playpause", + SingleActionGesture.PlayPause, + ) + val mediaNextGesture: Preference = preferenceStore.getEnum( + "pref_media_next", + SingleActionGesture.Switch, + ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt index ef1d0d2a25..fc71a23b06 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt @@ -2,89 +2,93 @@ package eu.kanade.tachiyomi.ui.player.settings import eu.kanade.tachiyomi.ui.player.PlayerOrientation import eu.kanade.tachiyomi.ui.player.VideoAspect +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum class PlayerPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun preserveWatchingPosition() = preferenceStore.getBoolean( + val preserveWatchingPosition: Preference = preferenceStore.getBoolean( "pref_preserve_watching_position", false, ) - fun switchOnFailure() = preferenceStore.getBoolean( + val switchOnFailure: Preference = preferenceStore.getBoolean( "pref_player_switch_on_failure", true, ) - fun progressPreference() = preferenceStore.getFloat("pref_progress_preference", 0.85F) - fun defaultPlayerOrientationType() = preferenceStore.getEnum( + val progressPreference: Preference = preferenceStore.getFloat("pref_progress_preference", 0.85F) + val defaultPlayerOrientationType: Preference = preferenceStore.getEnum( "pref_default_player_orientation_type_key", PlayerOrientation.SensorLandscape, ) // Controls - fun allowGestures() = preferenceStore.getBoolean("pref_allow_gestures_in_panels", false) - fun showLoadingCircle() = preferenceStore.getBoolean("pref_show_loading", true) - fun showCurrentChapter() = preferenceStore.getBoolean("pref_show_current_chapter", true) - fun rememberPlayerBrightness() = preferenceStore.getBoolean("pref_remember_brightness", false) - fun playerBrightnessValue() = preferenceStore.getFloat("player_brightness_value", -1.0F) - fun rememberPlayerVolume() = preferenceStore.getBoolean("pref_remember_volume", false) - fun playerVolumeValue() = preferenceStore.getFloat("player_volume_value", -1.0F) + val allowGestures: Preference = preferenceStore.getBoolean("pref_allow_gestures_in_panels", false) + val showLoadingCircle: Preference = preferenceStore.getBoolean("pref_show_loading", true) + val showCurrentChapter: Preference = preferenceStore.getBoolean("pref_show_current_chapter", true) + val rememberPlayerBrightness: Preference = preferenceStore.getBoolean("pref_remember_brightness", false) + val playerBrightnessValue: Preference = preferenceStore.getFloat("player_brightness_value", -1.0F) + val rememberPlayerVolume: Preference = preferenceStore.getBoolean("pref_remember_volume", false) + val playerVolumeValue: Preference = preferenceStore.getFloat("player_volume_value", -1.0F) // Hoster - fun showFailedHosters() = preferenceStore.getBoolean("pref_show_failed_hosters", false) - fun showEmptyHosters() = preferenceStore.getBoolean("pref_show_empty_hosters", false) + val showFailedHosters: Preference = preferenceStore.getBoolean("pref_show_failed_hosters", false) + val showEmptyHosters: Preference = preferenceStore.getBoolean("pref_show_empty_hosters", false) // Display - fun playerFullscreen() = preferenceStore.getBoolean("player_fullscreen", true) - fun hideControls() = preferenceStore.getBoolean("player_hide_controls", false) - fun displayVolPer() = preferenceStore.getBoolean("pref_display_vol_as_per", true) - fun showSystemStatusBar() = preferenceStore.getBoolean("pref_show_system_status_bar", false) - fun reduceMotion() = preferenceStore.getBoolean("pref_reduce_motion", false) - fun playerTimeToDisappear() = preferenceStore.getInt("pref_player_time_to_disappear", 4000) - fun panelOpacity() = preferenceStore.getInt("pref_panel_opacity", 60) + val playerFullscreen: Preference = preferenceStore.getBoolean("player_fullscreen", true) + val hideControls: Preference = preferenceStore.getBoolean("player_hide_controls", false) + val displayVolPer: Preference = preferenceStore.getBoolean("pref_display_vol_as_per", true) + val showSystemStatusBar: Preference = preferenceStore.getBoolean("pref_show_system_status_bar", false) + val reduceMotion: Preference = preferenceStore.getBoolean("pref_reduce_motion", false) + val playerTimeToDisappear: Preference = preferenceStore.getInt("pref_player_time_to_disappear", 4000) + val panelOpacity: Preference = preferenceStore.getInt("pref_panel_opacity", 60) // Skip intro button - fun enableSkipIntro() = preferenceStore.getBoolean("pref_enable_skip_intro", true) - fun autoSkipIntro() = preferenceStore.getBoolean("pref_enable_auto_skip_ani_skip", false) - fun enableNetflixStyleIntroSkip() = preferenceStore.getBoolean( + val enableSkipIntro: Preference = preferenceStore.getBoolean("pref_enable_skip_intro", true) + val autoSkipIntro: Preference = preferenceStore.getBoolean("pref_enable_auto_skip_ani_skip", false) + val enableNetflixStyleIntroSkip: Preference = preferenceStore.getBoolean( "pref_enable_netflixStyle_aniskip", false, ) - fun waitingTimeIntroSkip() = preferenceStore.getInt("pref_waiting_time_aniskip", 5) - fun aniSkipEnabled() = preferenceStore.getBoolean("pref_enable_ani_skip", false) - fun disableAniSkipOnChapters() = preferenceStore.getBoolean("pref_disabled_ani_skip_chapters", true) + val waitingTimeIntroSkip: Preference = preferenceStore.getInt("pref_waiting_time_aniskip", 5) + val aniSkipEnabled: Preference = preferenceStore.getBoolean("pref_enable_ani_skip", false) + val disableAniSkipOnChapters: Preference = preferenceStore.getBoolean( + "pref_disabled_ani_skip_chapters", + true, + ) // PiP - fun enablePip() = preferenceStore.getBoolean("pref_enable_pip", true) - fun pipEpisodeToasts() = preferenceStore.getBoolean("pref_pip_episode_toasts", true) - fun pipOnExit() = preferenceStore.getBoolean("pref_pip_on_exit", false) - fun pipReplaceWithPrevious() = preferenceStore.getBoolean("pip_replace_with_previous", false) + val enablePip: Preference = preferenceStore.getBoolean("pref_enable_pip", true) + val pipEpisodeToasts: Preference = preferenceStore.getBoolean("pref_pip_episode_toasts", true) + val pipOnExit: Preference = preferenceStore.getBoolean("pref_pip_on_exit", false) + val pipReplaceWithPrevious: Preference = preferenceStore.getBoolean("pip_replace_with_previous", false) // External player - fun alwaysUseExternalPlayer() = preferenceStore.getBoolean( + val alwaysUseExternalPlayer: Preference = preferenceStore.getBoolean( "pref_always_use_external_player", false, ) - fun externalPlayerPreference() = preferenceStore.getString("external_player_preference", "") + val externalPlayerPreference: Preference = preferenceStore.getString("external_player_preference", "") // Non-preferences - fun playerSpeed() = preferenceStore.getFloat("pref_player_speed", 1f) - fun speedPresets() = preferenceStore.getStringSet( + val playerSpeed: Preference = preferenceStore.getFloat("pref_player_speed", 1f) + val speedPresets: Preference> = preferenceStore.getStringSet( "default_speed_presets", setOf("0.25", "0.5", "0.75", "1.0", "1.25", "1.5", "1.75", "2.0", "2.5", "3.0", "3.5", "4.0"), ) - fun invertDuration() = preferenceStore.getBoolean("invert_duration", false) - fun aspectState() = preferenceStore.getEnum("pref_player_aspect_state", VideoAspect.Fit) + val invertDuration: Preference = preferenceStore.getBoolean("invert_duration", false) + val aspectState: Preference = preferenceStore.getEnum("pref_player_aspect_state", VideoAspect.Fit) // Old - fun autoplayEnabled() = preferenceStore.getBoolean("pref_auto_play_enabled", false) + val autoplayEnabled: Preference = preferenceStore.getBoolean("pref_auto_play_enabled", false) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/SubtitlePreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/SubtitlePreferences.kt index 184187945c..d3d9511f5e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/SubtitlePreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/SubtitlePreferences.kt @@ -10,50 +10,60 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.vector.ImageVector import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.ui.player.controls.components.panels.SubtitlesBorderStyle +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.getEnum import tachiyomi.i18n.animiru.AMMR class SubtitlePreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun preferredSubLanguages() = preferenceStore.getString("pref_subtitle_lang", "") - fun subtitleWhitelist() = preferenceStore.getString("pref_subtitle_whitelist", "") - fun subtitleBlacklist() = preferenceStore.getString("pref_subtitle_blacklist", "") - fun subtitleBlackBars() = preferenceStore.getBoolean("pref_subtitle_black_bars", false) + val preferredSubLanguages: Preference = preferenceStore.getString("pref_subtitle_lang", "") + val subtitleWhitelist: Preference = preferenceStore.getString("pref_subtitle_whitelist", "") + val subtitleBlacklist: Preference = preferenceStore.getString("pref_subtitle_blacklist", "") + val subtitleBlackBars: Preference = preferenceStore.getBoolean("pref_subtitle_black_bars", false) // Non-preferences - fun screenshotSubtitles() = preferenceStore.getBoolean("pref_screenshot_subtitles", false) + val screenshotSubtitles: Preference = preferenceStore.getBoolean("pref_screenshot_subtitles", false) - fun subtitleFont() = preferenceStore.getString("pref_subtitle_font", "Sans Serif") - fun subtitleFontSize() = preferenceStore.getInt("pref_subtitles_font_size", 55) - fun subtitleFontScale() = preferenceStore.getFloat("pref_sub_scale", 1f) - fun subtitleBorderSize() = preferenceStore.getInt("pref_sub_border_size", 3) - fun boldSubtitles() = preferenceStore.getBoolean("pref_bold_subtitles", false) - fun italicSubtitles() = preferenceStore.getBoolean("pref_italic_subtitles", false) + val subtitleFont: Preference = preferenceStore.getString("pref_subtitle_font", "Sans Serif") + val subtitleFontSize: Preference = preferenceStore.getInt("pref_subtitles_font_size", 55) + val subtitleFontScale: Preference = preferenceStore.getFloat("pref_sub_scale", 1f) + val subtitleBorderSize: Preference = preferenceStore.getInt("pref_sub_border_size", 3) + val boldSubtitles: Preference = preferenceStore.getBoolean("pref_bold_subtitles", false) + val italicSubtitles: Preference = preferenceStore.getBoolean("pref_italic_subtitles", false) - fun textColorSubtitles() = preferenceStore.getInt("pref_text_color_subtitles", Color.White.toArgb()) + val textColorSubtitles: Preference = preferenceStore.getInt("pref_text_color_subtitles", Color.White.toArgb()) - fun borderColorSubtitles() = preferenceStore.getInt("pref_border_color_subtitles", Color.Black.toArgb()) - fun borderStyleSubtitles() = preferenceStore.getEnum( + val borderColorSubtitles: Preference = preferenceStore.getInt( + "pref_border_color_subtitles", + Color.Black.toArgb(), + ) + val borderStyleSubtitles: Preference = preferenceStore.getEnum( "pref_border_style_subtitles", SubtitlesBorderStyle.OutlineAndShadow, ) - fun shadowOffsetSubtitles() = preferenceStore.getInt("sub_shadow_offset", 0) - fun backgroundColorSubtitles() = preferenceStore.getInt( + val shadowOffsetSubtitles: Preference = preferenceStore.getInt("sub_shadow_offset", 0) + val backgroundColorSubtitles: Preference = preferenceStore.getInt( "pref_background_color_subtitles", Color.Transparent.toArgb(), ) - fun subtitleJustification() = preferenceStore.getEnum("pref_sub_justify", SubtitleJustification.Auto) - fun subtitlePos() = preferenceStore.getInt("pref_sub_pos", 100) + val subtitleJustification: Preference = preferenceStore.getEnum( + "pref_sub_justify", + SubtitleJustification.Auto, + ) + val subtitlePos: Preference = preferenceStore.getInt("pref_sub_pos", 100) - fun overrideSubsASS() = preferenceStore.getEnum("pref_override_subtitles_ass_enum", SubtitleAssOverride.No) + val overrideSubsASS: Preference = preferenceStore.getEnum( + "pref_override_subtitles_ass_enum", + SubtitleAssOverride.No, + ) - fun subtitlesDelay() = preferenceStore.getInt("pref_subtitles_delay", 0) - fun subtitlesSpeed() = preferenceStore.getFloat("pref_subtitles_speed", 1f) - fun subtitlesSecondaryDelay() = preferenceStore.getInt("pref_subtitles_secondary_delay", 0) + val subtitlesDelay: Preference = preferenceStore.getInt("pref_subtitles_delay", 0) + val subtitlesSpeed: Preference = preferenceStore.getFloat("pref_subtitles_speed", 1f) + val subtitlesSecondaryDelay: Preference = preferenceStore.getInt("pref_subtitles_secondary_delay", 0) } enum class SubtitleJustification( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsTab.kt index 4984db7acb..accff878ec 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsTab.kt @@ -151,7 +151,7 @@ data object RecentsTab : Tab { internal suspend fun openEpisode(context: Context, episode: Episode?, snackbarHostState: SnackbarHostState) { val playerPreferences: PlayerPreferences by injectLazy() - val extPlayer = playerPreferences.alwaysUseExternalPlayer().get() + val extPlayer = playerPreferences.alwaysUseExternalPlayer.get() if (episode != null) { MainActivity.startPlayerActivity(context, episode.animeId, episode.id, extPlayer) } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt index 2b912d3d91..1c1b2cca07 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt @@ -89,9 +89,9 @@ class StatsScreenModel( } private fun getGlobalUpdateItemCount(libraryAnime: List): Int { - val includedCategories = preferences.updateCategories().get().map { it.toLong() } - val excludedCategories = preferences.updateCategoriesExclude().get().map { it.toLong() } - val updateRestrictions = preferences.autoUpdateAnimeRestrictions().get() + val includedCategories = preferences.updateCategories.get().map { it.toLong() } + val excludedCategories = preferences.updateCategoriesExclude.get().map { it.toLong() } + val updateRestrictions = preferences.autoUpdateAnimeRestrictions.get() return libraryAnime.filter { val included = includedCategories.isEmpty() || it.categories.intersect(includedCategories).isNotEmpty() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageScreenModel.kt index ebe8b01e26..29d842a63f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/storage/StorageScreenModel.kt @@ -61,7 +61,7 @@ class StorageScreenModel( init { screenModelScope.launchIO { - val hideHiddenCategories = libraryPreferences.hideHiddenCategoriesSettings().get() + val hideHiddenCategories = libraryPreferences.hideHiddenCategoriesSettings.get() val downloadCacheFlow = downloadCache.changes .debounce(500L) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt index 33cf20c003..d67fd32847 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesScreenModel.kt @@ -76,10 +76,10 @@ class UpdatesScreenModel( private val _events: Channel = Channel(Int.MAX_VALUE) val events: Flow = _events.receiveAsFlow() - val lastUpdated by libraryPreferences.lastUpdatedTimestamp().asState(screenModelScope) + val lastUpdated by libraryPreferences.lastUpdatedTimestamp.asState(screenModelScope) // AY --> - val useExternalDownloader = downloadPreferences.useExternalDownloader().get() + val useExternalDownloader = downloadPreferences.useExternalDownloader.get() // <-- AY // First and last selected index in list @@ -466,17 +466,17 @@ class UpdatesScreenModel( } fun resetNewUpdatesCount() { - libraryPreferences.newUpdatesCount().set(0) + libraryPreferences.newUpdatesCount.set(0) } private fun getUpdatesItemPreferenceFlow(): Flow { return eu.kanade.core.util.combine( - updatesPreferences.filterDownloaded().changes(), - updatesPreferences.filterUnseen().changes(), - updatesPreferences.filterStarted().changes(), - updatesPreferences.filterBookmarked().changes(), - updatesPreferences.filterFillermarked().changes(), - updatesPreferences.filterExcludedScanlators().changes(), + updatesPreferences.filterDownloaded.changes(), + updatesPreferences.filterUnseen.changes(), + updatesPreferences.filterStarted.changes(), + updatesPreferences.filterBookmarked.changes(), + updatesPreferences.filterFillermarked.changes(), + updatesPreferences.filterExcludedScanlators.changes(), ) { downloaded, unseen, started, bookmarked, fillermarked, excludedScanlators -> ItemPreferences( filterDownloaded = downloaded, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt index 36c2285096..35905bcae8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt @@ -125,6 +125,6 @@ fun AnimeUpdatesHalfTab( suspend fun openEpisode(context: Context, updateItem: UpdatesItem, altPlayer: Boolean = false) { val playerPreferences: PlayerPreferences by injectLazy() val update = updateItem.update - val extPlayer = playerPreferences.alwaysUseExternalPlayer().get() != altPlayer + val extPlayer = playerPreferences.alwaysUseExternalPlayer.get() != altPlayer MainActivity.startPlayerActivity(context, update.animeId, update.episodeId, extPlayer) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt index 208da11951..9d42721448 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt @@ -44,7 +44,7 @@ class CrashLogUtil( return """ App ID: ${BuildConfig.APPLICATION_ID} App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE}, ${BuildConfig.BUILD_TIME}) - Installation ID: ${preferences.installationId().get()} + Installation ID: ${preferences.installationId.get()} Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}; build ${Build.DISPLAY}) Device brand: ${Build.BRAND} Device manufacturer: ${Build.MANUFACTURER} diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt index 1569891dd9..913bd23013 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/DisplayExtensions.kt @@ -23,7 +23,7 @@ fun Configuration.isTabletUi(): Boolean { // TODO: move the logic to `isTabletUi()` when main activity is rewritten in Compose fun Context.prepareTabletUiContext(): Context { val configuration = resources.configuration - val expected = when (Injekt.get().tabletUiMode().get()) { + val expected = when (Injekt.get().tabletUiMode.get()) { TabletUiMode.AUTOMATIC -> configuration.smallestScreenWidthDp >= when (configuration.orientation) { Configuration.ORIENTATION_PORTRAIT -> TABLET_UI_MIN_SCREEN_WIDTH_PORTRAIT_DP diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt index a571b68fa9..f6b58026a5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/TachiyomiTextInputEditText.kt @@ -49,7 +49,7 @@ class TachiyomiTextInputEditText @JvmOverloads constructor( * if [BasePreferences.incognitoMode] is true. Some IMEs may not respect this flag. */ fun EditText.setIncognito(viewScope: CoroutineScope) { - Injekt.get().incognitoMode().changes() + Injekt.get().incognitoMode.changes() .onEach { imeOptions = if (it) { imeOptions or EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING diff --git a/app/src/main/java/mihon/core/migration/migrations/AddAllLangMigration.kt b/app/src/main/java/mihon/core/migration/migrations/AddAllLangMigration.kt index bd2ffe3de8..5d8a31c83d 100644 --- a/app/src/main/java/mihon/core/migration/migrations/AddAllLangMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/AddAllLangMigration.kt @@ -12,8 +12,8 @@ class AddAllLangMigration : Migration { override suspend fun invoke(migrationContext: MigrationContext): Boolean { val sourcePreferences = migrationContext.get() ?: return false - if (sourcePreferences.enabledLanguages().isSet()) { - sourcePreferences.enabledLanguages() += "all" + if (sourcePreferences.enabledLanguages.isSet()) { + sourcePreferences.enabledLanguages += "all" } return true diff --git a/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt b/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt index 21f0e3a4be..e99d089db5 100644 --- a/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/CategoryPreferencesCleanupMigration.kt @@ -17,17 +17,17 @@ class CategoryPreferencesCleanupMigration : Migration { val getCategories = migrationContext.get() ?: return@withIOContext false val allCategories = getCategories.await().map { it.id.toString() }.toSet() - val defaultCategory = libraryPreferences.defaultCategory().get() + val defaultCategory = libraryPreferences.defaultCategory.get() if (defaultCategory.toString() !in allCategories) { - libraryPreferences.defaultCategory().delete() + libraryPreferences.defaultCategory.delete() } val categoryPreferences = listOf( - libraryPreferences.updateCategories(), - libraryPreferences.updateCategoriesExclude(), - downloadPreferences.removeExcludeCategories(), - downloadPreferences.downloadNewEpisodeCategories(), - downloadPreferences.downloadNewEpisodeCategoriesExclude(), + libraryPreferences.updateCategories, + libraryPreferences.updateCategoriesExclude, + downloadPreferences.removeExcludeCategories, + downloadPreferences.downloadNewEpisodeCategories, + downloadPreferences.downloadNewEpisodeCategoriesExclude, ) categoryPreferences.forEach { preference -> val ids = preference.get() diff --git a/app/src/main/java/mihon/core/migration/migrations/CombineUpdateRestrictionMigration.kt b/app/src/main/java/mihon/core/migration/migrations/CombineUpdateRestrictionMigration.kt index fa9c55959d..c7ab71f6ad 100644 --- a/app/src/main/java/mihon/core/migration/migrations/CombineUpdateRestrictionMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/CombineUpdateRestrictionMigration.kt @@ -22,7 +22,7 @@ class CombineUpdateRestrictionMigration : Migration { true, ) if (!oldUpdateOngoingOnly) { - libraryPreferences.autoUpdateAnimeRestrictions() -= ANIME_NON_COMPLETED + libraryPreferences.autoUpdateAnimeRestrictions -= ANIME_NON_COMPLETED } return true diff --git a/app/src/main/java/mihon/core/migration/migrations/DOHMigration.kt b/app/src/main/java/mihon/core/migration/migrations/DOHMigration.kt index 0a50dba127..4bd387b217 100644 --- a/app/src/main/java/mihon/core/migration/migrations/DOHMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/DOHMigration.kt @@ -20,7 +20,7 @@ class DOHMigration : Migration { val wasDohEnabled = prefs.getBoolean("enable_doh", false) if (wasDohEnabled) { prefs.edit { - putInt(networkPreferences.dohProvider().key(), PREF_DOH_CLOUDFLARE) + putInt(networkPreferences.dohProvider.key(), PREF_DOH_CLOUDFLARE) remove("enable_doh") } } diff --git a/app/src/main/java/mihon/core/migration/migrations/DontRunJobsMigration.kt b/app/src/main/java/mihon/core/migration/migrations/DontRunJobsMigration.kt index f75e54d551..0d0358000c 100644 --- a/app/src/main/java/mihon/core/migration/migrations/DontRunJobsMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/DontRunJobsMigration.kt @@ -12,7 +12,7 @@ class DontRunJobsMigration : Migration { override suspend fun invoke(migrationContext: MigrationContext): Boolean { val libraryPreferences = migrationContext.get() ?: return false - val pref = libraryPreferences.autoUpdateDeviceRestrictions() + val pref = libraryPreferences.autoUpdateDeviceRestrictions if (pref.isSet() && "battery_not_low" in pref.get()) { pref.getAndSet { it - "battery_not_low" } } diff --git a/app/src/main/java/mihon/core/migration/migrations/EnableAutoBackupMigration.kt b/app/src/main/java/mihon/core/migration/migrations/EnableAutoBackupMigration.kt index 8f9e3c2ce4..5af3e2a47c 100644 --- a/app/src/main/java/mihon/core/migration/migrations/EnableAutoBackupMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/EnableAutoBackupMigration.kt @@ -14,8 +14,8 @@ class EnableAutoBackupMigration : Migration { val context = migrationContext.get() ?: return false val backupPreferences = migrationContext.get() ?: return false - if (backupPreferences.backupInterval().get() == 0) { - backupPreferences.backupInterval().set(12) + if (backupPreferences.backupInterval.get() == 0) { + backupPreferences.backupInterval.set(12) BackupCreateJob.setupTask(context) } diff --git a/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt b/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt index c9c3836ac0..a19d5ff46c 100644 --- a/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/InstallationIdMigration.kt @@ -11,7 +11,7 @@ class InstallationIdMigration : Migration { @OptIn(ExperimentalUuidApi::class) override suspend fun invoke(migrationContext: MigrationContext): Boolean { - val installationId = migrationContext.get()?.installationId() ?: return false + val installationId = migrationContext.get()?.installationId ?: return false if (!installationId.isSet()) installationId.set(FeatureFlags.newInstallationId()) return true } diff --git a/app/src/main/java/mihon/core/migration/migrations/MergeSortTypeDirectionMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MergeSortTypeDirectionMigration.kt index 12a2bc377a..828c6b1c69 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MergeSortTypeDirectionMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MergeSortTypeDirectionMigration.kt @@ -18,11 +18,11 @@ class MergeSortTypeDirectionMigration : Migration { prefs.edit { val animesort = prefs.getString( - libraryPreferences.sortingMode().key(), + libraryPreferences.sortingMode.key(), null, ) ?: return@edit val direction = prefs.getString("library_sorting_ascending", "ASCENDING")!! - putString(libraryPreferences.sortingMode().key(), "$animesort,$direction") + putString(libraryPreferences.sortingMode.key(), "$animesort,$direction") remove("library_sorting_ascending") } diff --git a/app/src/main/java/mihon/core/migration/migrations/MigrateSecureScreenMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MigrateSecureScreenMigration.kt index 9230b2933d..79e0cee47c 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MigrateSecureScreenMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MigrateSecureScreenMigration.kt @@ -20,14 +20,14 @@ class MigrateSecureScreenMigration : Migration { val oldSecureScreen = prefs.getBoolean("secure_screen", false) if (oldSecureScreen) { - securityPreferences.secureScreen().set( + securityPreferences.secureScreen.set( SecurityPreferences.SecureScreenMode.ALWAYS, ) } if (DeviceUtil.isMiui && - basePreferences.extensionInstaller().get() == BasePreferences.ExtensionInstaller.PACKAGEINSTALLER + basePreferences.extensionInstaller.get() == BasePreferences.ExtensionInstaller.PACKAGEINSTALLER ) { - basePreferences.extensionInstaller().set( + basePreferences.extensionInstaller.set( BasePreferences.ExtensionInstaller.LEGACY, ) } diff --git a/app/src/main/java/mihon/core/migration/migrations/MigrateSortingModeMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MigrateSortingModeMigration.kt index 2c64c0abc3..9df4180f1e 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MigrateSortingModeMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MigrateSortingModeMigration.kt @@ -17,7 +17,7 @@ class MigrateSortingModeMigration : Migration { val prefs = PreferenceManager.getDefaultSharedPreferences(context) val oldAnimeSortingMode = prefs.getInt( - libraryPreferences.sortingMode().key(), + libraryPreferences.sortingMode.key(), 0, ) val oldSortingDirection = prefs.getBoolean("library_sorting_ascending", true) @@ -40,12 +40,12 @@ class MigrateSortingModeMigration : Migration { } prefs.edit(commit = true) { - remove(libraryPreferences.sortingMode().key()) + remove(libraryPreferences.sortingMode.key()) remove("library_sorting_ascending") } prefs.edit { - putString(libraryPreferences.sortingMode().key(), newAnimeSortingMode) + putString(libraryPreferences.sortingMode.key(), newAnimeSortingMode) putString("library_sorting_ascending", newSortingDirection) } diff --git a/app/src/main/java/mihon/core/migration/migrations/MigrateToTriStateMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MigrateToTriStateMigration.kt index b3262b6cfd..344028bb87 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MigrateToTriStateMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MigrateToTriStateMigration.kt @@ -19,19 +19,19 @@ class MigrateToTriStateMigration : Migration { prefs.edit { putInt( - libraryPreferences.filterDownloaded().key(), + libraryPreferences.filterDownloaded.key(), convertBooleanPrefToTriState(prefs, "pref_filter_downloaded_key"), ) remove("pref_filter_downloaded_key") putInt( - libraryPreferences.filterUnseen().key(), + libraryPreferences.filterUnseen.key(), convertBooleanPrefToTriState(prefs, "pref_filter_unread_key"), ) remove("pref_filter_unread_key") putInt( - libraryPreferences.filterDownloaded().key(), + libraryPreferences.filterDownloaded.key(), convertBooleanPrefToTriState(prefs, "pref_filter_completed_key"), ) remove("pref_filter_completed_key") diff --git a/app/src/main/java/mihon/core/migration/migrations/MoveEpisodePreferencesMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MoveEpisodePreferencesMigration.kt index ec85661502..c9157a4ba4 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MoveEpisodePreferencesMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MoveEpisodePreferencesMigration.kt @@ -17,12 +17,12 @@ class MoveEpisodePreferencesMigration : Migration { val prefs = PreferenceManager.getDefaultSharedPreferences(context) val preferences = listOf( - libraryPreferences.filterEpisodeBySeen(), - libraryPreferences.filterEpisodeByDownloaded(), - libraryPreferences.filterEpisodeByBookmarked(), - libraryPreferences.sortEpisodeBySourceOrNumber(), - libraryPreferences.displayEpisodeByNameOrNumber(), - libraryPreferences.sortEpisodeByAscendingOrDescending(), + libraryPreferences.filterEpisodeBySeen, + libraryPreferences.filterEpisodeByDownloaded, + libraryPreferences.filterEpisodeByBookmarked, + libraryPreferences.sortEpisodeBySourceOrNumber, + libraryPreferences.displayEpisodeByNameOrNumber, + libraryPreferences.sortEpisodeByAscendingOrDescending, ) prefs.edit { diff --git a/app/src/main/java/mihon/core/migration/migrations/MovePlayerPreferencesMigration.kt b/app/src/main/java/mihon/core/migration/migrations/MovePlayerPreferencesMigration.kt index 4db5f2c4aa..72a1691fc7 100644 --- a/app/src/main/java/mihon/core/migration/migrations/MovePlayerPreferencesMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/MovePlayerPreferencesMigration.kt @@ -21,8 +21,8 @@ class MovePlayerPreferencesMigration : Migration { val prefs = PreferenceManager.getDefaultSharedPreferences(context) listOf( - playerPreferences.defaultPlayerOrientationType(), - gesturePreferences.skipLengthPreference(), + playerPreferences.defaultPlayerOrientationType, + gesturePreferences.skipLengthPreference, ).forEach { pref -> if (pref.isSet()) { prefs.edit { diff --git a/app/src/main/java/mihon/core/migration/migrations/PlayerPreferenceMigration.kt b/app/src/main/java/mihon/core/migration/migrations/PlayerPreferenceMigration.kt index 54e6a78926..383b16117d 100644 --- a/app/src/main/java/mihon/core/migration/migrations/PlayerPreferenceMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/PlayerPreferenceMigration.kt @@ -17,15 +17,15 @@ class PlayerPreferenceMigration : Migration { val playerPreferences = migrationContext.get() ?: return false val prefs = PreferenceManager.getDefaultSharedPreferences(context) - if (playerPreferences.progressPreference().isSet()) { + if (playerPreferences.progressPreference.isSet()) { prefs.edit { val progressString = try { - prefs.getString(playerPreferences.progressPreference().key(), null) + prefs.getString(playerPreferences.progressPreference.key(), null) } catch (e: ClassCastException) { null } ?: return@edit val newProgress = progressString.toFloatOrNull() ?: return@edit - putFloat(playerPreferences.progressPreference().key(), newProgress) + putFloat(playerPreferences.progressPreference.key(), newProgress) } } diff --git a/app/src/main/java/mihon/core/migration/migrations/PrefLangMigration.kt b/app/src/main/java/mihon/core/migration/migrations/PrefLangMigration.kt index 9625637be8..22708ef013 100644 --- a/app/src/main/java/mihon/core/migration/migrations/PrefLangMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/PrefLangMigration.kt @@ -20,8 +20,8 @@ class PrefLangMigration : Migration { val prefs = PreferenceManager.getDefaultSharedPreferences(context) listOf( - audioPreferences.preferredAudioLanguages(), - subtitlePreferences.preferredSubLanguages(), + audioPreferences.preferredAudioLanguages, + subtitlePreferences.preferredSubLanguages, ).forEach { pref -> if (pref.isSet()) { prefs.edit { diff --git a/app/src/main/java/mihon/core/migration/migrations/RelativeTimestampMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RelativeTimestampMigration.kt index 9b8a0a558e..35082bfede 100644 --- a/app/src/main/java/mihon/core/migration/migrations/RelativeTimestampMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/RelativeTimestampMigration.kt @@ -15,7 +15,7 @@ class RelativeTimestampMigration : Migration { val pref = preferenceStore.getInt("relative_time", 7) if (pref.get() == 0) { - uiPreferences.relativeTime().set(false) + uiPreferences.relativeTime.set(false) } return true diff --git a/app/src/main/java/mihon/core/migration/migrations/RemoveOneTwoHourUpdateMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RemoveOneTwoHourUpdateMigration.kt index 0c429ec359..88eea889c8 100644 --- a/app/src/main/java/mihon/core/migration/migrations/RemoveOneTwoHourUpdateMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/RemoveOneTwoHourUpdateMigration.kt @@ -14,9 +14,9 @@ class RemoveOneTwoHourUpdateMigration : Migration { val context = migrationContext.get() ?: return false val libraryPreferences = migrationContext.get() ?: return false - val updateInterval = libraryPreferences.autoUpdateInterval().get() + val updateInterval = libraryPreferences.autoUpdateInterval.get() if (updateInterval == 1 || updateInterval == 2) { - libraryPreferences.autoUpdateInterval().set(3) + libraryPreferences.autoUpdateInterval.set(3) LibraryUpdateJob.setupTask(context, 3) } diff --git a/app/src/main/java/mihon/core/migration/migrations/RemoveQuickUpdateMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RemoveQuickUpdateMigration.kt index de20f85a0d..822ed4945b 100644 --- a/app/src/main/java/mihon/core/migration/migrations/RemoveQuickUpdateMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/RemoveQuickUpdateMigration.kt @@ -14,9 +14,9 @@ class RemoveQuickUpdateMigration : Migration { val context = migrationContext.get() ?: return false val libraryPreferences = migrationContext.get() ?: return false - val updateInterval = libraryPreferences.autoUpdateInterval().get() + val updateInterval = libraryPreferences.autoUpdateInterval.get() if (updateInterval in listOf(3, 4, 6, 8)) { - libraryPreferences.autoUpdateInterval().set(12) + libraryPreferences.autoUpdateInterval.set(12) LibraryUpdateJob.setupTask(context, 12) } diff --git a/app/src/main/java/mihon/core/migration/migrations/RenameEnumMigration.kt b/app/src/main/java/mihon/core/migration/migrations/RenameEnumMigration.kt index 49a388b448..cec38fffe9 100644 --- a/app/src/main/java/mihon/core/migration/migrations/RenameEnumMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/RenameEnumMigration.kt @@ -19,7 +19,7 @@ class RenameEnumMigration : Migration { prefs.edit { val newAnimeSortingMode = when ( val oldSortingMode = prefs.getString( - libraryPreferences.sortingMode().key(), + libraryPreferences.sortingMode.key(), "ALPHABETICAL", ) ) { @@ -28,7 +28,7 @@ class RenameEnumMigration : Migration { "DATE_FETCHED" -> "CHAPTER_FETCH_DATE" else -> oldSortingMode } - putString(libraryPreferences.sortingMode().key(), newAnimeSortingMode) + putString(libraryPreferences.sortingMode.key(), newAnimeSortingMode) } return true diff --git a/app/src/main/java/mihon/core/migration/migrations/ResetSortPreferenceRemovedMigration.kt b/app/src/main/java/mihon/core/migration/migrations/ResetSortPreferenceRemovedMigration.kt index 99aa50fef2..c2fa287ba5 100644 --- a/app/src/main/java/mihon/core/migration/migrations/ResetSortPreferenceRemovedMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/ResetSortPreferenceRemovedMigration.kt @@ -17,13 +17,13 @@ class ResetSortPreferenceRemovedMigration : Migration { val prefs = PreferenceManager.getDefaultSharedPreferences(context) val oldAnimeSortingMode = prefs.getInt( - libraryPreferences.sortingMode().key(), + libraryPreferences.sortingMode.key(), 0, ) if (oldAnimeSortingMode == 5) { // SOURCE = 5 prefs.edit { - putInt(libraryPreferences.sortingMode().key(), 0) // ALPHABETICAL = 0 + putInt(libraryPreferences.sortingMode.key(), 0) // ALPHABETICAL = 0 } } diff --git a/app/src/main/java/mihon/core/migration/migrations/SplitPreferencesMigration.kt b/app/src/main/java/mihon/core/migration/migrations/SplitPreferencesMigration.kt index bc3a3d0532..c699716008 100644 --- a/app/src/main/java/mihon/core/migration/migrations/SplitPreferencesMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/SplitPreferencesMigration.kt @@ -16,10 +16,10 @@ class SplitPreferencesMigration : Migration { val uiPreferences = migrationContext.get() ?: return false val prefs = PreferenceManager.getDefaultSharedPreferences(context) - if (uiPreferences.themeMode().isSet()) { + if (uiPreferences.themeMode.isSet()) { prefs.edit { - val themeMode = prefs.getString(uiPreferences.themeMode().key(), null) ?: return@edit - putString(uiPreferences.themeMode().key(), themeMode.uppercase()) + val themeMode = prefs.getString(uiPreferences.themeMode.key(), null) ?: return@edit + putString(uiPreferences.themeMode.key(), themeMode.uppercase()) } } diff --git a/app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt b/app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt index cacba046f2..35b800a4bf 100644 --- a/app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/TrustExtensionRepositoryMigration.kt @@ -16,7 +16,7 @@ class TrustExtensionRepositoryMigration : Migration { val sourcePreferences = migrationContext.get() ?: return@withIOContext false val extensionRepositoryRepository = migrationContext.get() ?: return@withIOContext false - for ((index, source) in sourcePreferences.extensionRepos().get().withIndex()) { + for ((index, source) in sourcePreferences.extensionRepos.get().withIndex()) { try { extensionRepositoryRepository.upsertRepo( source, @@ -29,7 +29,7 @@ class TrustExtensionRepositoryMigration : Migration { logcat(LogPriority.ERROR, e) { "Error Migrating Extension Repo with baseUrl: $source" } } } - sourcePreferences.extensionRepos().delete() + sourcePreferences.extensionRepos.delete() return@withIOContext true } } diff --git a/app/src/main/java/mihon/core/migration/migrations/VideoOrientationMigration.kt b/app/src/main/java/mihon/core/migration/migrations/VideoOrientationMigration.kt index 4fc7d2d007..55accb5f4d 100644 --- a/app/src/main/java/mihon/core/migration/migrations/VideoOrientationMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/VideoOrientationMigration.kt @@ -22,12 +22,12 @@ class VideoOrientationMigration : Migration { val oldPref = try { prefs.getInt( - playerPreferences.defaultPlayerOrientationType().key(), + playerPreferences.defaultPlayerOrientationType.key(), 10, ) } catch (_: ClassCastException) { prefs.edit(commit = true) { - remove(playerPreferences.defaultPlayerOrientationType().key()) + remove(playerPreferences.defaultPlayerOrientationType.key()) } return true } @@ -44,12 +44,12 @@ class VideoOrientationMigration : Migration { } prefs.edit(commit = true) { - remove(playerPreferences.defaultPlayerOrientationType().key()) + remove(playerPreferences.defaultPlayerOrientationType.key()) } prefs.edit { preferenceStore.getEnum( - playerPreferences.defaultPlayerOrientationType().key(), + playerPreferences.defaultPlayerOrientationType.key(), PlayerOrientation.SensorLandscape, ).set(newPref) } diff --git a/app/src/main/java/mihon/core/migration/migrations/VideoPlayerPreferenceMigration.kt b/app/src/main/java/mihon/core/migration/migrations/VideoPlayerPreferenceMigration.kt index 6c3fdc1cac..c558567a39 100644 --- a/app/src/main/java/mihon/core/migration/migrations/VideoPlayerPreferenceMigration.kt +++ b/app/src/main/java/mihon/core/migration/migrations/VideoPlayerPreferenceMigration.kt @@ -29,9 +29,9 @@ class VideoPlayerPreferenceMigration : Migration { } prefs.edit { - putString(subtitlePreferences.preferredSubLanguages().key(), subtitleData.lang.joinToString(",")) - putString(subtitlePreferences.subtitleWhitelist().key(), subtitleData.whitelist.joinToString(",")) - putString(subtitlePreferences.subtitleBlacklist().key(), subtitleData.blacklist.joinToString(",")) + putString(subtitlePreferences.preferredSubLanguages.key(), subtitleData.lang.joinToString(",")) + putString(subtitlePreferences.subtitleWhitelist.key(), subtitleData.whitelist.joinToString(",")) + putString(subtitlePreferences.subtitleBlacklist.key(), subtitleData.blacklist.joinToString(",")) } return true diff --git a/app/src/main/java/mihon/domain/migration/usecases/MigrateAnimeUseCase.kt b/app/src/main/java/mihon/domain/migration/usecases/MigrateAnimeUseCase.kt index f7a28e9340..d290dc0b7d 100644 --- a/app/src/main/java/mihon/domain/migration/usecases/MigrateAnimeUseCase.kt +++ b/app/src/main/java/mihon/domain/migration/usecases/MigrateAnimeUseCase.kt @@ -53,7 +53,7 @@ class MigrateAnimeUseCase( suspend operator fun invoke(current: Anime, target: Anime, replace: Boolean) { val targetSource = sourceManager.get(target.source) ?: return val currentSource = sourceManager.get(current.source) - val flags = sourcePreferences.migrationFlags().get() + val flags = sourcePreferences.migrationFlags.get() try { when (target.fetchType) { diff --git a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreen.kt b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreen.kt index 4b344469c7..0c80acfcc8 100644 --- a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreen.kt +++ b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreen.kt @@ -340,10 +340,10 @@ class MigrationConfigScreen(private val animeIds: Collection) : Screen() { } private fun initSources() { - val languages = sourcePreferences.enabledLanguages().get() - val pinnedSources = sourcePreferences.pinnedSources().get().mapNotNull { it.toLongOrNull() } - val includedSources = sourcePreferences.migrationSources().get() - val disabledSources = sourcePreferences.disabledSources().get() + val languages = sourcePreferences.enabledLanguages.get() + val pinnedSources = sourcePreferences.pinnedSources.get().mapNotNull { it.toLongOrNull() } + val includedSources = sourcePreferences.migrationSources.get() + val disabledSources = sourcePreferences.disabledSources.get() .mapNotNull { it.toLongOrNull() } val sources = sourceManager.getCatalogueSources() .asSequence() @@ -382,8 +382,8 @@ class MigrationConfigScreen(private val animeIds: Collection) : Screen() { } fun toggleSelection(config: SelectionConfig) { - val pinnedSources = sourcePreferences.pinnedSources().get().mapNotNull { it.toLongOrNull() } - val disabledSources = sourcePreferences.disabledSources().get().mapNotNull { it.toLongOrNull() } + val pinnedSources = sourcePreferences.pinnedSources.get().mapNotNull { it.toLongOrNull() } + val disabledSources = sourcePreferences.disabledSources.get().mapNotNull { it.toLongOrNull() } val isSelected: (Long) -> Boolean = { when (config) { SelectionConfig.All -> true @@ -413,7 +413,7 @@ class MigrationConfigScreen(private val animeIds: Collection) : Screen() { state.value.sources .filter { source -> source.isSelected } .map { source -> source.source.id } - .let { sources -> sourcePreferences.migrationSources().set(sources) } + .let { sources -> sourcePreferences.migrationSources.set(sources) } } data class State( diff --git a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt index 41c15352ce..d34304df36 100644 --- a/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt +++ b/app/src/main/java/mihon/feature/migration/config/MigrationConfigScreenSheet.kt @@ -54,7 +54,7 @@ fun MigrationConfigScreenSheet( onStartMigration: (extraSearchQuery: String?) -> Unit, ) { var extraSearchQuery by rememberSaveable { mutableStateOf("") } - val migrationFlags by preferences.migrationFlags().collectAsState() + val migrationFlags by preferences.migrationFlags.collectAsState() AdaptiveSheet(onDismissRequest = onDismissRequest) { Column(modifier = Modifier.fillMaxWidth()) { Column( @@ -87,7 +87,7 @@ fun MigrationConfigScreenSheet( FilterChip( selected = selected, onClick = { - preferences.migrationFlags().getAndSet { currentFlags -> + preferences.migrationFlags.getAndSet { currentFlags -> if (flag in currentFlags) { currentFlags - flag } else { @@ -113,7 +113,7 @@ fun MigrationConfigScreenSheet( subtitle = null, checked = removeDownloads, onClick = { - preferences.migrationFlags().getAndSet { + preferences.migrationFlags.getAndSet { if (removeDownloads) { it - MigrationFlag.REMOVE_DOWNLOAD } else { @@ -141,24 +141,24 @@ fun MigrationConfigScreenSheet( MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_hideUnmatchedTitle), subtitle = null, - preference = preferences.migrationHideUnmatched(), + preference = preferences.migrationHideUnmatched, ) MigrationSheetSwitchItem( title = stringResource(AMMR.strings.am_migrationConfigScreen_hideWithoutUpdatesTitle), subtitle = stringResource(AMMR.strings.am_migrationConfigScreen_hideWithoutUpdatesSubtitle), - preference = preferences.migrationHideWithoutUpdates(), + preference = preferences.migrationHideWithoutUpdates, ) MigrationSheetDividerItem() MigrationSheetWarningItem(stringResource(MR.strings.migrationConfigScreen_enhancedOptionsWarning)) MigrationSheetSwitchItem( title = stringResource(MR.strings.migrationConfigScreen_deepSearchModeTitle), subtitle = stringResource(MR.strings.migrationConfigScreen_deepSearchModeSubtitle), - preference = preferences.migrationDeepSearchMode(), + preference = preferences.migrationDeepSearchMode, ) MigrationSheetSwitchItem( title = stringResource(AMMR.strings.am_migrationConfigScreen_prioritizeByChaptersTitle), subtitle = stringResource(MR.strings.migrationConfigScreen_prioritizeByChaptersSubtitle), - preference = preferences.migrationPrioritizeByEpisodes(), + preference = preferences.migrationPrioritizeByEpisodes, ) } HorizontalDivider() diff --git a/app/src/main/java/mihon/feature/migration/dialog/MigrateAnimeDialog.kt b/app/src/main/java/mihon/feature/migration/dialog/MigrateAnimeDialog.kt index b37a688885..e34bf8d0b0 100644 --- a/app/src/main/java/mihon/feature/migration/dialog/MigrateAnimeDialog.kt +++ b/app/src/main/java/mihon/feature/migration/dialog/MigrateAnimeDialog.kt @@ -213,7 +213,7 @@ private class MigrateDialogScreenModel( if (applicable) add(it) } } - val selectedFlags = sourcePreference.migrationFlags().get() + val selectedFlags = sourcePreference.migrationFlags.get() mutableState.update { State( current = current, @@ -237,7 +237,7 @@ private class MigrateDialogScreenModel( val state = state.value val current = state.current ?: return val target = state.target ?: return - sourcePreference.migrationFlags().set(state.selectedFlags) + sourcePreference.migrationFlags.set(state.selectedFlags) mutableState.update { it.copy(isMigrating = true) } migrateAnime(current, target, replace) mutableState.update { it.copy(isMigrating = false, isMigrated = true) } diff --git a/app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt b/app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt index c980835af7..aa232241c3 100644 --- a/app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt +++ b/app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt @@ -65,8 +65,8 @@ class MigrationListScreenModel( val items inline get() = state.value.items - private val hideUnmatched = preferences.migrationHideUnmatched().get() - private val hideWithoutUpdates = preferences.migrationHideWithoutUpdates().get() + private val hideUnmatched = preferences.migrationHideUnmatched.get() + private val hideWithoutUpdates = preferences.migrationHideWithoutUpdates.get() private val navigateBackChannel = Channel() val navigateBackEvent = navigateBackChannel.receiveAsFlow() @@ -127,10 +127,10 @@ class MigrationListScreenModel( } private suspend fun runMigrations(animes: List) { - val prioritizeByEpisodes = preferences.migrationPrioritizeByEpisodes().get() - val deepSearchMode = preferences.migrationDeepSearchMode().get() + val prioritizeByEpisodes = preferences.migrationPrioritizeByEpisodes.get() + val deepSearchMode = preferences.migrationDeepSearchMode.get() - val sources = preferences.migrationSources().get() + val sources = preferences.migrationSources.get() .mapNotNull { sourceManager.get(it) as? AnimeCatalogueSource } for (anime in animes) { diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt index 274f0c5928..8b84c9fb74 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/core/security/SecurityPreferences.kt @@ -7,22 +7,25 @@ import tachiyomi.core.common.preference.getEnum import tachiyomi.i18n.MR class SecurityPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun useAuthenticator() = preferenceStore.getBoolean("use_biometric_lock", false) + val useAuthenticator: Preference = preferenceStore.getBoolean("use_biometric_lock", false) - fun lockAppAfter() = preferenceStore.getInt("lock_app_after", 0) + val lockAppAfter: Preference = preferenceStore.getInt("lock_app_after", 0) - fun secureScreen() = preferenceStore.getEnum("secure_screen_v2", SecureScreenMode.INCOGNITO) + val secureScreen: Preference = preferenceStore.getEnum( + "secure_screen_v2", + SecureScreenMode.INCOGNITO, + ) - fun hideNotificationContent() = preferenceStore.getBoolean("hide_notification_content", false) + val hideNotificationContent: Preference = preferenceStore.getBoolean("hide_notification_content", false) /** * For app lock. Will be set when there is a pending timed lock. * Otherwise this pref should be deleted. */ - fun lastAppClosed() = preferenceStore.getLong( + val lastAppClosed: Preference = preferenceStore.getLong( Preference.appStateKey("last_app_closed"), 0, ) diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt index 862343fb0c..a3f857a57c 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -36,14 +36,14 @@ class NetworkHelper( .addNetworkInterceptor(IgnoreGzipInterceptor()) .addNetworkInterceptor(BrotliInterceptor) - if (preferences.verboseLogging().get()) { + if (preferences.verboseLogging.get()) { val httpLoggingInterceptor = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.HEADERS } builder.addNetworkInterceptor(httpLoggingInterceptor) } - when (preferences.dohProvider().get()) { + when (preferences.dohProvider.get()) { PREF_DOH_CLOUDFLARE -> builder.dohCloudflare() PREF_DOH_GOOGLE -> builder.dohGoogle() PREF_DOH_ADGUARD -> builder.dohAdGuard() @@ -78,5 +78,5 @@ class NetworkHelper( @Suppress("UNUSED") val cloudflareClient: OkHttpClient = client - fun defaultUserAgentProvider() = preferences.defaultUserAgent().get().trim() + fun defaultUserAgentProvider() = preferences.defaultUserAgent.get().trim() } diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkPreferences.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkPreferences.kt index d2034be860..8b853daf84 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkPreferences.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkPreferences.kt @@ -4,22 +4,16 @@ import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class NetworkPreferences( - private val preferenceStore: PreferenceStore, - private val verboseLogging: Boolean = false, + preferenceStore: PreferenceStore, + verboseLoggingDefault: Boolean = false, ) { - fun verboseLogging(): Preference { - return preferenceStore.getBoolean("verbose_logging", verboseLogging) - } + val verboseLogging: Preference = preferenceStore.getBoolean("verbose_logging", verboseLoggingDefault) - fun dohProvider(): Preference { - return preferenceStore.getInt("doh_provider", -1) - } + val dohProvider: Preference = preferenceStore.getInt("doh_provider", -1) - fun defaultUserAgent(): Preference { - return preferenceStore.getString( - "default_user_agent", - "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36", - ) - } + val defaultUserAgent: Preference = preferenceStore.getString( + "default_user_agent", + "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Mobile Safari/537.36", + ) } diff --git a/domain/src/main/java/mihon/domain/episode/interactor/FilterEpisodesForDownload.kt b/domain/src/main/java/mihon/domain/episode/interactor/FilterEpisodesForDownload.kt index 4d46fc1e8a..ec17fdcc73 100644 --- a/domain/src/main/java/mihon/domain/episode/interactor/FilterEpisodesForDownload.kt +++ b/domain/src/main/java/mihon/domain/episode/interactor/FilterEpisodesForDownload.kt @@ -29,13 +29,13 @@ class FilterEpisodesForDownload( suspend fun await(anime: Anime, newEpisodes: List): List { if ( newEpisodes.isEmpty() || - !downloadPreferences.downloadNewEpisodes().get() || + !downloadPreferences.downloadNewEpisodes.get() || !anime.shouldDownloadNewEpisodes() ) { return emptyList() } - if (!downloadPreferences.downloadNewUnseenEpisodesOnly().get()) return newEpisodes + if (!downloadPreferences.downloadNewUnseenEpisodesOnly.get()) return newEpisodes val seenEpisodeNumbers = getEpisodesByAnimeId.await(anime.id) .asSequence() @@ -56,8 +56,8 @@ class FilterEpisodesForDownload( if (!favorite) return false val categories = getCategories.await(id).map { it.id }.ifEmpty { listOf(DEFAULT_CATEGORY_ID) } - val includedCategories = downloadPreferences.downloadNewEpisodeCategories().get().map { it.toLong() } - val excludedCategories = downloadPreferences.downloadNewEpisodeCategoriesExclude().get().map { it.toLong() } + val includedCategories = downloadPreferences.downloadNewEpisodeCategories.get().map { it.toLong() } + val excludedCategories = downloadPreferences.downloadNewEpisodeCategoriesExclude.get().map { it.toLong() } return when { // Default Download from all categories diff --git a/domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt b/domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt index 41f29392d1..954808c2e7 100644 --- a/domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/backup/service/BackupPreferences.kt @@ -4,10 +4,13 @@ import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class BackupPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun backupInterval() = preferenceStore.getInt("backup_interval", 12) + val backupInterval: Preference = preferenceStore.getInt("backup_interval", 12) - fun lastAutoBackupTimestamp() = preferenceStore.getLong(Preference.appStateKey("last_auto_backup_timestamp"), 0L) + val lastAutoBackupTimestamp: Preference = preferenceStore.getLong( + Preference.appStateKey("last_auto_backup_timestamp"), + 0L, + ) } diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/CreateCategoryWithName.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/CreateCategoryWithName.kt index 86bd9e9735..e9f29ed419 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/CreateCategoryWithName.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/CreateCategoryWithName.kt @@ -14,7 +14,7 @@ class CreateCategoryWithName( private val initialFlags: Long get() { - val sort = preferences.sortingMode().get() + val sort = preferences.sortingMode.get() return sort.type.flag or sort.direction.flag } diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt index f3f984bf62..480113ca34 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/DeleteCategory.kt @@ -30,17 +30,17 @@ class DeleteCategory( ) } - val defaultCategory = libraryPreferences.defaultCategory().get() + val defaultCategory = libraryPreferences.defaultCategory.get() if (defaultCategory == categoryId.toInt()) { - libraryPreferences.defaultCategory().delete() + libraryPreferences.defaultCategory.delete() } val categoryPreferences = listOf( - libraryPreferences.updateCategories(), - libraryPreferences.updateCategoriesExclude(), - downloadPreferences.removeExcludeCategories(), - downloadPreferences.downloadNewEpisodeCategories(), - downloadPreferences.downloadNewEpisodeCategoriesExclude(), + libraryPreferences.updateCategories, + libraryPreferences.updateCategoriesExclude, + downloadPreferences.removeExcludeCategories, + downloadPreferences.downloadNewEpisodeCategories, + downloadPreferences.downloadNewEpisodeCategoriesExclude, ) val categoryIdString = categoryId.toString() categoryPreferences.forEach { preference -> diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/ResetCategoryFlags.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/ResetCategoryFlags.kt index 4032206c3a..4bf262cc2e 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/ResetCategoryFlags.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/ResetCategoryFlags.kt @@ -10,7 +10,7 @@ class ResetCategoryFlags( ) { suspend fun await() { - val sort = preferences.sortingMode().get() + val sort = preferences.sortingMode.get() categoryRepository.updateAllFlags(sort.type + sort.direction) } } diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/SetDisplayMode.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/SetDisplayMode.kt index 32e23148f0..af95abf3bc 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/SetDisplayMode.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/SetDisplayMode.kt @@ -8,6 +8,6 @@ class SetDisplayMode( ) { fun await(display: LibraryDisplayMode) { - preferences.displayMode().set(display) + preferences.displayMode.set(display) } } diff --git a/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt b/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt index 3d9a7fbde9..d5cca094ad 100644 --- a/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt +++ b/domain/src/main/java/tachiyomi/domain/category/interactor/SetSortModeForCategory.kt @@ -17,18 +17,18 @@ class SetSortModeForCategory( suspend fun await(categoryId: Long?, type: LibrarySort.Type, direction: LibrarySort.Direction) { // AM (GROUPING) --> if (type == LibrarySort.Type.Random) { - preferences.randomSortSeed().set(Random.nextInt()) + preferences.randomSortSeed.set(Random.nextInt()) } - if (preferences.groupLibraryBy().get() != LibraryGroup.BY_DEFAULT) { - preferences.sortingMode().set(LibrarySort(type, direction)) + if (preferences.groupLibraryBy.get() != LibraryGroup.BY_DEFAULT) { + preferences.sortingMode.set(LibrarySort(type, direction)) return } // <-- AM (GROUPING) val category = categoryId?.let { categoryRepository.get(it) } val flags = (category?.flags ?: 0) + type + direction - if (category != null && preferences.categorizedDisplaySettings().get()) { + if (category != null && preferences.categorizedDisplaySettings.get()) { categoryRepository.updatePartial( CategoryUpdate( id = category.id, @@ -36,7 +36,7 @@ class SetSortModeForCategory( ), ) } else { - preferences.sortingMode().set(LibrarySort(type, direction)) + preferences.sortingMode.set(LibrarySort(type, direction)) categoryRepository.updateAllFlags(flags) } } diff --git a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt index 11abf12295..4fe2d8ebf1 100644 --- a/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/download/service/DownloadPreferences.kt @@ -1,52 +1,67 @@ package tachiyomi.domain.download.service +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore class DownloadPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun downloadOnlyOverWifi() = preferenceStore.getBoolean( + val downloadOnlyOverWifi: Preference = preferenceStore.getBoolean( "pref_download_only_over_wifi_key", true, ) // AY --> - fun useExternalDownloader() = preferenceStore.getBoolean("use_external_downloader", false) + val useExternalDownloader: Preference = preferenceStore.getBoolean("use_external_downloader", false) - fun externalDownloaderSelection() = preferenceStore.getString( + val externalDownloaderSelection: Preference = preferenceStore.getString( "external_downloader_selection", "", ) // <-- AY - fun autoDownloadWhileWatching() = preferenceStore.getInt("auto_download_while_watching", 0) + val autoDownloadWhileWatching: Preference = preferenceStore.getInt("auto_download_while_watching", 0) - fun removeAfterSeenSlots() = preferenceStore.getInt("remove_after_seen_slots", -1) + val removeAfterSeenSlots: Preference = preferenceStore.getInt("remove_after_seen_slots", -1) - fun removeAfterMarkedAsSeen() = preferenceStore.getBoolean( + val removeAfterMarkedAsSeen: Preference = preferenceStore.getBoolean( "pref_remove_after_marked_as_seen_key", false, ) - fun removeBookmarkedEpisodes() = preferenceStore.getBoolean("pref_remove_bookmarked", false) + val removeBookmarkedEpisodes: Preference = preferenceStore.getBoolean("pref_remove_bookmarked", false) // AY --> - fun downloadFillermarkedEpisodes() = preferenceStore.getBoolean("pref_no_download_fillermarked", false) + val downloadFillermarkedEpisodes: Preference = preferenceStore.getBoolean( + "pref_no_download_fillermarked", + false, + ) // <-- AY - fun removeExcludeCategories() = preferenceStore.getStringSet(REMOVE_EXCLUDE_CATEGORIES_PREF_KEY, emptySet()) + val removeExcludeCategories: Preference> = preferenceStore.getStringSet( + REMOVE_EXCLUDE_CATEGORIES_PREF_KEY, + emptySet(), + ) - fun downloadNewEpisodes() = preferenceStore.getBoolean("download_new_episode", false) + val downloadNewEpisodes: Preference = preferenceStore.getBoolean("download_new_episode", false) - fun downloadNewEpisodeCategories() = preferenceStore.getStringSet(DOWNLOAD_NEW_CATEGORIES_PREF_KEY, emptySet()) + val downloadNewEpisodeCategories: Preference> = preferenceStore.getStringSet( + DOWNLOAD_NEW_CATEGORIES_PREF_KEY, + emptySet(), + ) - fun downloadNewEpisodeCategoriesExclude() = - preferenceStore.getStringSet(DOWNLOAD_NEW_CATEGORIES_EXCLUDE_PREF_KEY, emptySet()) + val downloadNewEpisodeCategoriesExclude: Preference> = preferenceStore.getStringSet( + DOWNLOAD_NEW_CATEGORIES_EXCLUDE_PREF_KEY, + emptySet(), + ) - fun downloadNewUnseenEpisodesOnly() = preferenceStore.getBoolean("download_new_unseen_episodes_only", false) + val downloadNewUnseenEpisodesOnly: Preference = preferenceStore.getBoolean( + "download_new_unseen_episodes_only", + false, + ) - fun parallelSourceLimit() = preferenceStore.getInt("download_parallel_source_limit", 5) + val parallelSourceLimit: Preference = preferenceStore.getInt("download_parallel_source_limit", 5) companion object { private const val REMOVE_EXCLUDE_CATEGORIES_PREF_KEY = "remove_exclude_categories" diff --git a/domain/src/main/java/tachiyomi/domain/episode/interactor/SetAnimeDefaultEpisodeFlags.kt b/domain/src/main/java/tachiyomi/domain/episode/interactor/SetAnimeDefaultEpisodeFlags.kt index 63c2e3b7c4..02512da9e1 100644 --- a/domain/src/main/java/tachiyomi/domain/episode/interactor/SetAnimeDefaultEpisodeFlags.kt +++ b/domain/src/main/java/tachiyomi/domain/episode/interactor/SetAnimeDefaultEpisodeFlags.kt @@ -17,18 +17,18 @@ class SetAnimeDefaultEpisodeFlags( with(libraryPreferences) { setAnimeEpisodeFlags.awaitSetAllFlags( animeId = anime.id, - unseenFilter = filterEpisodeBySeen().get(), - downloadedFilter = filterEpisodeByDownloaded().get(), - bookmarkedFilter = filterEpisodeByBookmarked().get(), + unseenFilter = filterEpisodeBySeen.get(), + downloadedFilter = filterEpisodeByDownloaded.get(), + bookmarkedFilter = filterEpisodeByBookmarked.get(), // AY --> - fillermarkedFilter = filterEpisodeByFillermarked().get(), + fillermarkedFilter = filterEpisodeByFillermarked.get(), // <-- AY - sortingMode = sortEpisodeBySourceOrNumber().get(), - sortingDirection = sortEpisodeByAscendingOrDescending().get(), - displayMode = displayEpisodeByNameOrNumber().get(), + sortingMode = sortEpisodeBySourceOrNumber.get(), + sortingDirection = sortEpisodeByAscendingOrDescending.get(), + displayMode = displayEpisodeByNameOrNumber.get(), // AY --> - showPreviews = showEpisodeThumbnailPreviews().get(), - showSummaries = showEpisodeSummaries().get(), + showPreviews = showEpisodeThumbnailPreviews.get(), + showSummaries = showEpisodeSummaries.get(), // <-- AY ) } diff --git a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt index cf3a0c87bf..dae81f64d3 100644 --- a/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt @@ -15,36 +15,39 @@ class LibraryPreferences( private val preferenceStore: PreferenceStore, ) { - fun displayMode() = preferenceStore.getObjectFromString( + val displayMode: Preference = preferenceStore.getObjectFromString( "pref_display_mode_library", LibraryDisplayMode.default, LibraryDisplayMode.Serializer::serialize, LibraryDisplayMode.Serializer::deserialize, ) - fun sortingMode() = preferenceStore.getObjectFromString( + val sortingMode: Preference = preferenceStore.getObjectFromString( "library_sorting_mode", LibrarySort.default, LibrarySort.Serializer::serialize, LibrarySort.Serializer::deserialize, ) - fun randomSortSeed() = preferenceStore.getInt("library_random_sort_seed", 0) + val randomSortSeed: Preference = preferenceStore.getInt("library_random_sort_seed", 0) - fun portraitColumns() = preferenceStore.getInt("pref_library_columns_portrait_key", 0) + val portraitColumns: Preference = preferenceStore.getInt("pref_library_columns_portrait_key", 0) - fun landscapeColumns() = preferenceStore.getInt("pref_library_columns_landscape_key", 0) + val landscapeColumns: Preference = preferenceStore.getInt("pref_library_columns_landscape_key", 0) - fun lastUpdatedTimestamp() = preferenceStore.getLong(Preference.appStateKey("library_update_last_timestamp"), 0L) - fun autoUpdateInterval() = preferenceStore.getInt("pref_library_update_interval_key", 0) + val lastUpdatedTimestamp: Preference = preferenceStore.getLong( + Preference.appStateKey("library_update_last_timestamp"), + 0L, + ) + val autoUpdateInterval: Preference = preferenceStore.getInt("pref_library_update_interval_key", 0) - fun autoUpdateDeviceRestrictions() = preferenceStore.getStringSet( + val autoUpdateDeviceRestrictions: Preference> = preferenceStore.getStringSet( "library_update_restriction", setOf( DEVICE_ONLY_ON_WIFI, ), ) - fun autoUpdateAnimeRestrictions() = preferenceStore.getStringSet( + val autoUpdateAnimeRestrictions: Preference> = preferenceStore.getStringSet( "library_update_anime_restriction", setOf( ANIME_HAS_UNSEEN, @@ -54,45 +57,50 @@ class LibraryPreferences( ), ) - fun autoUpdateMetadata() = preferenceStore.getBoolean("auto_update_metadata", false) + val autoUpdateMetadata: Preference = preferenceStore.getBoolean("auto_update_metadata", false) - fun showContinueWatchingButton() = preferenceStore.getBoolean( + val showContinueWatchingButton: Preference = preferenceStore.getBoolean( "display_continue_watching_button", false, ) - fun markDuplicateSeenEpisodeAsSeen() = preferenceStore.getStringSet("mark_duplicate_seen_episode_seen", emptySet()) + val markDuplicateSeenEpisodeAsSeen: Preference> = preferenceStore.getStringSet( + "mark_duplicate_seen_episode_seen", + emptySet(), + ) // region Filter - fun filterDownloaded() = preferenceStore.getEnum( + val filterDownloaded: Preference = preferenceStore.getEnum( "pref_filter_library_downloaded_v2", TriState.DISABLED, ) - fun filterUnseen() = preferenceStore.getEnum("pref_filter_library_unseen_v2", TriState.DISABLED) + val filterUnseen: Preference = preferenceStore.getEnum("pref_filter_library_unseen_v2", TriState.DISABLED) - fun filterStarted() = preferenceStore.getEnum( + val filterStarted: Preference = preferenceStore.getEnum( "pref_filter_library_started_v2", TriState.DISABLED, ) - fun filterBookmarked() = preferenceStore.getEnum( + val filterBookmarked: Preference = preferenceStore.getEnum( "pref_filter_library_bookmarked_v2", TriState.DISABLED, ) // AY --> - fun filterFillermarked() = - preferenceStore.getEnum("pref_filter_library_fillermarked_v2", TriState.DISABLED) + val filterFillermarked: Preference = preferenceStore.getEnum( + "pref_filter_library_fillermarked_v2", + TriState.DISABLED, + ) // <-- AY - fun filterCompleted() = preferenceStore.getEnum( + val filterCompleted: Preference = preferenceStore.getEnum( "pref_filter_library_completed_v2", TriState.DISABLED, ) - fun filterIntervalCustom() = preferenceStore.getEnum( + val filterIntervalCustom: Preference = preferenceStore.getEnum( "pref_filter_library_interval_custom", TriState.DISABLED, ) @@ -106,230 +114,258 @@ class LibraryPreferences( // region Badges - fun downloadBadge() = preferenceStore.getBoolean("display_download_badge", false) + val downloadBadge: Preference = preferenceStore.getBoolean("display_download_badge", false) - fun unseenBadge() = preferenceStore.getBoolean("display_unseen_badge", true) + val unseenBadge: Preference = preferenceStore.getBoolean("display_unseen_badge", true) - fun localBadge() = preferenceStore.getBoolean("display_local_badge", true) + val localBadge: Preference = preferenceStore.getBoolean("display_local_badge", true) - fun languageBadge() = preferenceStore.getBoolean("display_language_badge", false) + val languageBadge: Preference = preferenceStore.getBoolean("display_language_badge", false) - fun newShowUpdatesCount() = preferenceStore.getBoolean("library_show_updates_count", true) - fun newUpdatesCount() = preferenceStore.getInt(Preference.appStateKey("library_unseen_updates_count"), 0) + val newShowUpdatesCount: Preference = preferenceStore.getBoolean("library_show_updates_count", true) + val newUpdatesCount: Preference = preferenceStore.getInt( + Preference.appStateKey("library_unseen_updates_count"), + 0, + ) // endregion // region Category - fun defaultCategory() = preferenceStore.getInt(DEFAULT_CATEGORY_PREF_KEY, -1) + val defaultCategory: Preference = preferenceStore.getInt(DEFAULT_CATEGORY_PREF_KEY, -1) - fun lastUsedCategory() = preferenceStore.getInt(Preference.appStateKey("last_used_category"), 0) + val lastUsedCategory: Preference = preferenceStore.getInt(Preference.appStateKey("last_used_category"), 0) - fun categoryTabs() = preferenceStore.getBoolean("display_category_tabs", true) + val categoryTabs: Preference = preferenceStore.getBoolean("display_category_tabs", true) - fun categoryNumberOfItems() = preferenceStore.getBoolean("display_number_of_items", false) + val categoryNumberOfItems: Preference = preferenceStore.getBoolean("display_number_of_items", false) - fun categorizedDisplaySettings() = preferenceStore.getBoolean("categorized_display", false) + val categorizedDisplaySettings: Preference = preferenceStore.getBoolean("categorized_display", false) // AY --> - fun hideHiddenCategoriesSettings() = preferenceStore.getBoolean("hidden_categories", false) + val hideHiddenCategoriesSettings: Preference = preferenceStore.getBoolean("hidden_categories", false) // <-- AY - fun updateCategories() = preferenceStore.getStringSet(LIBRARY_UPDATE_CATEGORIES_PREF_KEY, emptySet()) + val updateCategories: Preference> = preferenceStore.getStringSet( + LIBRARY_UPDATE_CATEGORIES_PREF_KEY, + emptySet(), + ) - fun updateCategoriesExclude() = preferenceStore.getStringSet(LIBRARY_UPDATE_CATEGORIES_EXCLUDE_PREF_KEY, emptySet()) + val updateCategoriesExclude: Preference> = preferenceStore.getStringSet( + LIBRARY_UPDATE_CATEGORIES_EXCLUDE_PREF_KEY, + emptySet(), + ) // endregion // region Episode - fun filterEpisodeBySeen() = preferenceStore.getLong( + val filterEpisodeBySeen: Preference = preferenceStore.getLong( "default_episode_filter_by_seen", Anime.SHOW_ALL, ) - fun filterEpisodeByDownloaded() = preferenceStore.getLong( + val filterEpisodeByDownloaded: Preference = preferenceStore.getLong( "default_episode_filter_by_downloaded", Anime.SHOW_ALL, ) - fun filterEpisodeByBookmarked() = preferenceStore.getLong( + val filterEpisodeByBookmarked: Preference = preferenceStore.getLong( "default_episode_filter_by_bookmarked", Anime.SHOW_ALL, ) // AY--> - fun filterEpisodeByFillermarked() = preferenceStore.getLong( + val filterEpisodeByFillermarked: Preference = preferenceStore.getLong( "default_episode_filter_by_fillermarked", Anime.SHOW_ALL, ) // <-- AY // and upload date - fun sortEpisodeBySourceOrNumber() = preferenceStore.getLong( + val sortEpisodeBySourceOrNumber: Preference = preferenceStore.getLong( "default_episode_sort_by_source_or_number", Anime.EPISODE_SORTING_SOURCE, ) - fun displayEpisodeByNameOrNumber() = preferenceStore.getLong( + val displayEpisodeByNameOrNumber: Preference = preferenceStore.getLong( "default_episode_display_by_name_or_number", Anime.EPISODE_DISPLAY_NAME, ) - fun sortEpisodeByAscendingOrDescending() = preferenceStore.getLong( + val sortEpisodeByAscendingOrDescending: Preference = preferenceStore.getLong( "default_episode_sort_by_ascending_or_descending", Anime.EPISODE_SORT_DESC, ) // AY --> - fun showEpisodeThumbnailPreviews() = preferenceStore.getLong( + val showEpisodeThumbnailPreviews: Preference = preferenceStore.getLong( "default_episode_show_thumbnail_previews", Anime.EPISODE_SHOW_PREVIEWS, ) - fun showEpisodeSummaries() = preferenceStore.getLong( + val showEpisodeSummaries: Preference = preferenceStore.getLong( "default_episode_show_summaries", Anime.EPISODE_SHOW_SUMMARIES, ) // <-- AY fun setEpisodeSettingsDefault(anime: Anime) { - filterEpisodeBySeen().set(anime.unseenFilterRaw) - filterEpisodeByDownloaded().set(anime.downloadedFilterRaw) - filterEpisodeByBookmarked().set(anime.bookmarkedFilterRaw) + filterEpisodeBySeen.set(anime.unseenFilterRaw) + filterEpisodeByDownloaded.set(anime.downloadedFilterRaw) + filterEpisodeByBookmarked.set(anime.bookmarkedFilterRaw) // AY --> - filterEpisodeByFillermarked().set(anime.fillermarkedFilterRaw) + filterEpisodeByFillermarked.set(anime.fillermarkedFilterRaw) // <-- AY - sortEpisodeBySourceOrNumber().set(anime.sorting) - displayEpisodeByNameOrNumber().set(anime.displayMode) - sortEpisodeByAscendingOrDescending().set( + sortEpisodeBySourceOrNumber.set(anime.sorting) + displayEpisodeByNameOrNumber.set(anime.displayMode) + sortEpisodeByAscendingOrDescending.set( if (anime.sortDescending()) Anime.EPISODE_SORT_DESC else Anime.EPISODE_SORT_ASC, ) // AY --> - showEpisodeThumbnailPreviews().set(anime.showPreviewsRaw) - showEpisodeSummaries().set(anime.showSummariesRaw) + showEpisodeThumbnailPreviews.set(anime.showPreviewsRaw) + showEpisodeSummaries.set(anime.showSummariesRaw) // <-- AY } - fun hideMissingEpisodes() = preferenceStore.getBoolean("pref_hide_missing_episode_indicators", false) + val hideMissingEpisodes: Preference = preferenceStore.getBoolean( + "pref_hide_missing_episode_indicators", + false, + ) // endregion // AY --> // Seasons - fun filterSeasonByDownload() = - preferenceStore.getLong("default_season_filter_by_downloaded", Anime.SHOW_ALL) + val filterSeasonByDownload: Preference = preferenceStore.getLong( + "default_season_filter_by_downloaded", + Anime.SHOW_ALL, + ) - fun filterSeasonByUnseen() = - preferenceStore.getLong("default_season_filter_by_unseen", Anime.SHOW_ALL) + val filterSeasonByUnseen: Preference = preferenceStore.getLong( + "default_season_filter_by_unseen", + Anime.SHOW_ALL, + ) - fun filterSeasonByStarted() = - preferenceStore.getLong("default_season_filter_by_started", Anime.SHOW_ALL) + val filterSeasonByStarted: Preference = preferenceStore.getLong( + "default_season_filter_by_started", + Anime.SHOW_ALL, + ) - fun filterSeasonByCompleted() = - preferenceStore.getLong("default_season_filter_by_completed", Anime.SHOW_ALL) + val filterSeasonByCompleted: Preference = preferenceStore.getLong( + "default_season_filter_by_completed", + Anime.SHOW_ALL, + ) - fun filterSeasonByBookmarked() = - preferenceStore.getLong("default_season_filter_by_bookmarked", Anime.SHOW_ALL) + val filterSeasonByBookmarked: Preference = preferenceStore.getLong( + "default_season_filter_by_bookmarked", + Anime.SHOW_ALL, + ) - fun filterSeasonByFillermarked() = - preferenceStore.getLong("default_season_filter_by_fillermarked", Anime.SHOW_ALL) + val filterSeasonByFillermarked: Preference = preferenceStore.getLong( + "default_season_filter_by_fillermarked", + Anime.SHOW_ALL, + ) - fun sortSeasonBySourceOrNumber() = preferenceStore.getLong( + val sortSeasonBySourceOrNumber: Preference = preferenceStore.getLong( "default_season_sort_by_source_or_number", Anime.SEASON_SORT_SOURCE, ) - fun sortSeasonByAscendingOrDescending() = preferenceStore.getLong( + val sortSeasonByAscendingOrDescending: Preference = preferenceStore.getLong( "default_season_sort_by_ascending_or_descending", Anime.SEASON_SORT_DESC, ) - fun seasonDisplayGridMode() = preferenceStore.getLong( + val seasonDisplayGridMode: Preference = preferenceStore.getLong( "default_season_grid_display_mode", SeasonDisplayMode.toLong(SeasonDisplayMode.CompactGrid), ) - fun seasonDisplayGridSize() = preferenceStore.getInt( + val seasonDisplayGridSize: Preference = preferenceStore.getInt( "default_season_grid_display_size", 0, ) - fun seasonDownloadOverlay() = preferenceStore.getBoolean( + val seasonDownloadOverlay: Preference = preferenceStore.getBoolean( "default_season_download_overlay", false, ) - fun seasonUnseenOverlay() = preferenceStore.getBoolean( + val seasonUnseenOverlay: Preference = preferenceStore.getBoolean( "default_season_unseen_overlay", true, ) - fun seasonLocalOverlay() = preferenceStore.getBoolean( + val seasonLocalOverlay: Preference = preferenceStore.getBoolean( "default_season_local_overlay", true, ) - fun seasonLangOverlay() = preferenceStore.getBoolean( + val seasonLangOverlay: Preference = preferenceStore.getBoolean( "default_season_lang_overlay", false, ) - fun seasonContinueOverlay() = preferenceStore.getBoolean( + val seasonContinueOverlay: Preference = preferenceStore.getBoolean( "default_season_continue_overlay", true, ) - fun seasonDisplayMode() = preferenceStore.getLong( + val seasonDisplayMode: Preference = preferenceStore.getLong( "default_season_display_mode", Anime.SEASON_DISPLAY_MODE_SOURCE, ) fun setSeasonSettingsDefault(anime: Anime) { - filterSeasonByDownload().set(anime.seasonUnseenFilterRaw) - filterSeasonByUnseen().set(anime.seasonUnseenFilterRaw) - filterSeasonByStarted().set(anime.seasonStartedFilterRaw) - filterSeasonByCompleted().set(anime.seasonCompletedFilterRaw) - filterSeasonByBookmarked().set(anime.seasonBookmarkedFilterRaw) - filterSeasonByFillermarked().set(anime.seasonFillermarkedFilterRaw) - sortSeasonBySourceOrNumber().set(anime.seasonSorting) - sortSeasonByAscendingOrDescending().set( + filterSeasonByDownload.set(anime.seasonUnseenFilterRaw) + filterSeasonByUnseen.set(anime.seasonUnseenFilterRaw) + filterSeasonByStarted.set(anime.seasonStartedFilterRaw) + filterSeasonByCompleted.set(anime.seasonCompletedFilterRaw) + filterSeasonByBookmarked.set(anime.seasonBookmarkedFilterRaw) + filterSeasonByFillermarked.set(anime.seasonFillermarkedFilterRaw) + sortSeasonBySourceOrNumber.set(anime.seasonSorting) + sortSeasonByAscendingOrDescending.set( if (anime.seasonSortDescending()) Anime.SEASON_SORT_DESC else Anime.SEASON_SORT_ASC, ) - seasonDisplayGridMode().set(SeasonDisplayMode.toLong(anime.seasonDisplayGridMode)) - seasonDisplayGridSize().set(anime.seasonDisplayGridSize) - seasonDownloadOverlay().set(anime.seasonDownloadedOverlay) - seasonUnseenOverlay().set(anime.seasonUnseenOverlay) - seasonLocalOverlay().set(anime.seasonLocalOverlay) - seasonLangOverlay().set(anime.seasonLangOverlay) - seasonContinueOverlay().set(anime.seasonContinueOverlay) - seasonDisplayMode().set(anime.seasonDisplayMode) + seasonDisplayGridMode.set(SeasonDisplayMode.toLong(anime.seasonDisplayGridMode)) + seasonDisplayGridSize.set(anime.seasonDisplayGridSize) + seasonDownloadOverlay.set(anime.seasonDownloadedOverlay) + seasonUnseenOverlay.set(anime.seasonUnseenOverlay) + seasonLocalOverlay.set(anime.seasonLocalOverlay) + seasonLangOverlay.set(anime.seasonLangOverlay) + seasonContinueOverlay.set(anime.seasonContinueOverlay) + seasonDisplayMode.set(anime.seasonDisplayMode) } // Season behavior - fun updateSeasonOnRefresh() = - preferenceStore.getBoolean("pref_update_season_on_refresh", false) + val updateSeasonOnRefresh: Preference = preferenceStore.getBoolean("pref_update_season_on_refresh", false) - fun updateSeasonOnLibraryUpdate() = - preferenceStore.getBoolean("pref_update_season_on_library_update", false) + val updateSeasonOnLibraryUpdate: Preference = preferenceStore.getBoolean( + "pref_update_season_on_library_update", + false, + ) // <-- AY // region Swipe Actions - fun swipeToStartAction() = preferenceStore.getEnum( + val swipeToStartAction: Preference = preferenceStore.getEnum( "pref_episode_swipe_end_action", EpisodeSwipeAction.ToggleBookmark, ) - fun swipeToEndAction() = preferenceStore.getEnum( + val swipeToEndAction: Preference = preferenceStore.getEnum( "pref_episode_swipe_start_action", EpisodeSwipeAction.ToggleSeen, ) - fun updateAnimeTitles() = preferenceStore.getBoolean("pref_update_library_anime_titles", false) + val updateAnimeTitles: Preference = preferenceStore.getBoolean("pref_update_library_anime_titles", false) - fun disallowNonAsciiFilenames() = preferenceStore.getBoolean("disallow_non_ascii_filenames", false) + val disallowNonAsciiFilenames: Preference = preferenceStore.getBoolean( + "disallow_non_ascii_filenames", + false, + ) // endregion @@ -346,9 +382,12 @@ class LibraryPreferences( } // AM (GROUPING) --> - fun groupLibraryUpdateType() = preferenceStore.getEnum("group_library_update_type", GroupLibraryMode.GLOBAL) + val groupLibraryUpdateType: Preference = preferenceStore.getEnum( + "group_library_update_type", + GroupLibraryMode.GLOBAL, + ) - fun groupLibraryBy() = preferenceStore.getInt("group_library_by", LibraryGroup.BY_DEFAULT) + val groupLibraryBy: Preference = preferenceStore.getInt("group_library_by", LibraryGroup.BY_DEFAULT) // <-- AM (GROUPING) companion object { diff --git a/domain/src/main/java/tachiyomi/domain/season/interactor/SetAnimeDefaultSeasonFlags.kt b/domain/src/main/java/tachiyomi/domain/season/interactor/SetAnimeDefaultSeasonFlags.kt index 0306e608bc..254a1001c2 100644 --- a/domain/src/main/java/tachiyomi/domain/season/interactor/SetAnimeDefaultSeasonFlags.kt +++ b/domain/src/main/java/tachiyomi/domain/season/interactor/SetAnimeDefaultSeasonFlags.kt @@ -18,22 +18,22 @@ class SetAnimeDefaultSeasonFlags( with(libraryPreferences) { setAnimeSeasonFlags.awaitSetAllFlags( animeId = anime.id, - downloadFilter = filterSeasonByDownload().get(), - unseenFilter = filterSeasonByUnseen().get(), - startedFilter = filterSeasonByStarted().get(), - completedFilter = filterSeasonByCompleted().get(), - bookmarkedFilter = filterSeasonByBookmarked().get(), - fillermarkedFilter = filterSeasonByFillermarked().get(), - sortingMode = sortSeasonBySourceOrNumber().get(), - sortingDirection = sortSeasonByAscendingOrDescending().get(), - displayGridMode = SeasonDisplayMode.fromLong(seasonDisplayGridMode().get()), - displayGridSize = seasonDisplayGridSize().get(), - downloadedOverlay = seasonDownloadOverlay().get(), - unseenOverlay = seasonUnseenOverlay().get(), - localOverlay = seasonLocalOverlay().get(), - langOverlay = seasonLangOverlay().get(), - continueOverlay = seasonContinueOverlay().get(), - displayMode = seasonDisplayMode().get(), + downloadFilter = filterSeasonByDownload.get(), + unseenFilter = filterSeasonByUnseen.get(), + startedFilter = filterSeasonByStarted.get(), + completedFilter = filterSeasonByCompleted.get(), + bookmarkedFilter = filterSeasonByBookmarked.get(), + fillermarkedFilter = filterSeasonByFillermarked.get(), + sortingMode = sortSeasonBySourceOrNumber.get(), + sortingDirection = sortSeasonByAscendingOrDescending.get(), + displayGridMode = SeasonDisplayMode.fromLong(seasonDisplayGridMode.get()), + displayGridSize = seasonDisplayGridSize.get(), + downloadedOverlay = seasonDownloadOverlay.get(), + unseenOverlay = seasonUnseenOverlay.get(), + localOverlay = seasonLocalOverlay.get(), + langOverlay = seasonLangOverlay.get(), + continueOverlay = seasonContinueOverlay.get(), + displayMode = seasonDisplayMode.get(), ) } } diff --git a/domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt b/domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt index 4762e4b270..32e3f482e5 100644 --- a/domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt +++ b/domain/src/main/java/tachiyomi/domain/storage/service/StorageManager.kt @@ -22,14 +22,14 @@ class StorageManager( private val scope = CoroutineScope(Dispatchers.IO) - private var baseDir: UniFile? = getBaseDir(storagePreferences.baseStorageDirectory().get()) + private var baseDir: UniFile? = getBaseDir(storagePreferences.baseStorageDirectory.get()) private val _changes: Channel = Channel(Channel.UNLIMITED) val changes = _changes.receiveAsFlow() .shareIn(scope, SharingStarted.Lazily, 1) init { - storagePreferences.baseStorageDirectory().changes() + storagePreferences.baseStorageDirectory.changes() .drop(1) .distinctUntilChanged() .onEach { uri -> diff --git a/domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt b/domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt index 2b3f60cc5e..ba6d33d8da 100644 --- a/domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/storage/service/StoragePreferences.kt @@ -5,13 +5,16 @@ import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.storage.FolderProvider class StoragePreferences( - private val folderProvider: FolderProvider, - private val preferenceStore: PreferenceStore, + folderProvider: FolderProvider, + preferenceStore: PreferenceStore, ) { - fun baseStorageDirectory() = preferenceStore.getString(Preference.appStateKey("storage_dir"), folderProvider.path()) + val baseStorageDirectory: Preference = preferenceStore.getString( + Preference.appStateKey("storage_dir"), + folderProvider.path(), + ) // AM (FILE_SIZE) --> - fun showEpisodeFileSize() = preferenceStore.getBoolean("pref_show_downloaded_episode_size", true) + val showEpisodeFileSize: Preference = preferenceStore.getBoolean("pref_show_downloaded_episode_size", true) // <-- AM (FILE_SIZE) } diff --git a/domain/src/main/java/tachiyomi/domain/updates/service/UpdatesPreferences.kt b/domain/src/main/java/tachiyomi/domain/updates/service/UpdatesPreferences.kt index 468b6db486..ba63866def 100644 --- a/domain/src/main/java/tachiyomi/domain/updates/service/UpdatesPreferences.kt +++ b/domain/src/main/java/tachiyomi/domain/updates/service/UpdatesPreferences.kt @@ -1,39 +1,40 @@ package tachiyomi.domain.updates.service +import tachiyomi.core.common.preference.Preference import tachiyomi.core.common.preference.PreferenceStore import tachiyomi.core.common.preference.TriState import tachiyomi.core.common.preference.getEnum class UpdatesPreferences( - private val preferenceStore: PreferenceStore, + preferenceStore: PreferenceStore, ) { - fun filterDownloaded() = preferenceStore.getEnum( + val filterDownloaded: Preference = preferenceStore.getEnum( "pref_filter_updates_downloaded", TriState.DISABLED, ) - fun filterUnseen() = preferenceStore.getEnum( + val filterUnseen: Preference = preferenceStore.getEnum( "pref_filter_updates_unseen", TriState.DISABLED, ) - fun filterStarted() = preferenceStore.getEnum( + val filterStarted: Preference = preferenceStore.getEnum( "pref_filter_updates_started", TriState.DISABLED, ) - fun filterBookmarked() = preferenceStore.getEnum( + val filterBookmarked: Preference = preferenceStore.getEnum( "pref_filter_updates_bookmarked", TriState.DISABLED, ) - fun filterFillermarked() = preferenceStore.getEnum( + val filterFillermarked: Preference = preferenceStore.getEnum( "pref_filter_updates_fillermarked", TriState.DISABLED, ) - fun filterExcludedScanlators() = preferenceStore.getBoolean( + val filterExcludedScanlators: Preference = preferenceStore.getBoolean( "pref_filter_updates_hide_excluded_scanlators", false, ) diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/BaseUpdatesGridGlanceWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/BaseUpdatesGridGlanceWidget.kt index f98c5ca453..932dcfe732 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/BaseUpdatesGridGlanceWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/BaseUpdatesGridGlanceWidget.kt @@ -65,7 +65,7 @@ abstract class BaseUpdatesGridGlanceWidget( abstract val bottomPadding: Dp override suspend fun provideGlance(context: Context, id: GlanceId) { - val locked = preferences.useAuthenticator().get() + val locked = preferences.useAuthenticator.get() val containerModifier = GlanceModifier .fillMaxSize() .background(background) diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/WidgetManager.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/WidgetManager.kt index de53c9381f..213d3363fc 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/WidgetManager.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/WidgetManager.kt @@ -22,7 +22,7 @@ class WidgetManager( fun Context.init(scope: LifecycleCoroutineScope) { combine( getUpdates.subscribe(seen = false, after = BaseUpdatesGridGlanceWidget.DateLimit.toEpochMilli()), - securityPreferences.useAuthenticator().changes(), + securityPreferences.useAuthenticator.changes(), transform = { a, b -> a to b }, ) .distinctUntilChanged { old, new -> From 194be0e0ea76c4b56ea506c8f7baf4bb74c255e7 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 20 Mar 2026 09:00:27 +0000 Subject: [PATCH 27/31] Update dependency com.google.firebase:firebase-bom to v34.11.0 (#3094) (cherry picked from commit 5cf305b62065af3996faaf06e1730d31b5a43b60) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 289f4ab897..c85d8d87b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ sqldelight = "2.3.2" voyager = "1.1.0-beta03" spotless = "8.4.0" ktlint-core = "1.8.0" -firebase-bom = "34.10.0" +firebase-bom = "34.11.0" markdown = "0.39.2" junit = "6.0.3" materialKolor = "5.0.0-alpha07" From 682de19fd5a6bdcaed8c0ebfff867144868f8867 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+antsylich@users.noreply.github.com> Date: Mon, 23 Mar 2026 11:37:04 +0100 Subject: [PATCH 28/31] Fix wrong exception being caught after 8c480c6355 migration `android.database.sqlite.SQLiteException` instead of `android.database.SQLException` (cherry picked from commit cb0e3297160aab7a2d1486aeeecdd92394eb220e) --- .../mihon/data/repository/ExtensionRepoRepositoryImpl.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/src/main/java/mihon/data/repository/ExtensionRepoRepositoryImpl.kt b/data/src/main/java/mihon/data/repository/ExtensionRepoRepositoryImpl.kt index 24910d9683..61c279630a 100644 --- a/data/src/main/java/mihon/data/repository/ExtensionRepoRepositoryImpl.kt +++ b/data/src/main/java/mihon/data/repository/ExtensionRepoRepositoryImpl.kt @@ -1,6 +1,6 @@ package mihon.data.repository -import android.database.sqlite.SQLiteException +import android.database.SQLException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import mihon.domain.extensionrepo.exception.SaveExtensionRepoException @@ -42,7 +42,7 @@ class ExtensionRepoRepositoryImpl( ) { try { handler.await { extension_reposQueries.insert(baseUrl, name, shortName, website, signingKeyFingerprint) } - } catch (ex: SQLiteException) { + } catch (ex: SQLException) { throw SaveExtensionRepoException(ex) } } @@ -56,7 +56,7 @@ class ExtensionRepoRepositoryImpl( ) { try { handler.await { extension_reposQueries.upsert(baseUrl, name, shortName, website, signingKeyFingerprint) } - } catch (ex: SQLiteException) { + } catch (ex: SQLException) { throw SaveExtensionRepoException(ex) } } From d4cfb95f0729c48a5d172e0c0a9931c566edc6a6 Mon Sep 17 00:00:00 2001 From: Secozzi Date: Mon, 30 Mar 2026 11:19:44 +0200 Subject: [PATCH 29/31] Potentially fix 'database is locked' crash Co-authored-by: AntsyLich <59261191+AntsyLich@users.noreply.github.com> --- .../java/eu/kanade/tachiyomi/di/AppModule.kt | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt index 7a93661410..75cb58b426 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt @@ -53,21 +53,31 @@ import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.addSingleton import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.get +import java.lang.ref.WeakReference + +private val lock = Any() class AppModule(val app: Application) : InjektModule { + private var sqlDriverRef: WeakReference? = null + override fun InjektRegistrar.registerInjectables() { addSingleton(app) addSingletonFactory { - AndroidxSqliteDriver( - driver = BundledSQLiteDriver(), - databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.animedb"), - schema = Database.Schema, - configuration = AndroidxSqliteConfiguration( - isForeignKeyConstraintsEnabled = true, - ), - ) + synchronized(lock) { + sqlDriverRef?.get()?.let { return@synchronized it } + + AndroidxSqliteDriver( + driver = BundledSQLiteDriver(), + databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.animedb"), + schema = Database.Schema, + configuration = AndroidxSqliteConfiguration( + isForeignKeyConstraintsEnabled = true, + ), + ) + .also { sqlDriverRef = WeakReference(it) } + } } addSingletonFactory { Database( From 15ce5eb91bd1869891b45b9c95dd69ba8bf02d21 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+antsylich@users.noreply.github.com> Date: Mon, 23 Mar 2026 15:12:14 +0100 Subject: [PATCH 30/31] Fix occasional crash when mass installing/uninstalling extension using `PackageManager` (cherry picked from commit 42daa3f432292be5fdfb3ecae07592cb94324164) --- .../extension/installer/PackageInstallerInstaller.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/PackageInstallerInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/PackageInstallerInstaller.kt index 931bf48af5..e658623302 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/PackageInstallerInstaller.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/PackageInstallerInstaller.kt @@ -106,8 +106,13 @@ class PackageInstallerInstaller(private val service: Service) : Installer(servic override fun cancelEntry(entry: Entry): Boolean { activeSession?.let { (activeEntry, sessionId) -> if (activeEntry == entry) { - packageInstaller.abandonSession(sessionId) - return false + return try { + packageInstaller.abandonSession(sessionId) + false + } catch (_: SecurityException) { + // Highly likely the session has succeeded + true + } } } return true From 446a010385039dbc61f9b4fe2ae69e808989f3ec Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+antsylich@users.noreply.github.com> Date: Mon, 23 Mar 2026 16:12:30 +0100 Subject: [PATCH 31/31] Fix app crash on startup on some Android TV Why do you guys even exist (cherry picked from commit b40f1d39751c18438770b61d39c95c6c3bc8d6ec) --- .../tachiyomi/util/system/WebViewUtil.kt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt index 0ca4361f8e..39bebcbae7 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt @@ -13,6 +13,7 @@ import kotlin.coroutines.resume object WebViewUtil { private const val CHROME_PACKAGE = "com.android.chrome" + private const val YOUTUBE_FOR_TV_PACKAGE = "com.google.android.youtube.tv" private const val SYSTEM_SETTINGS_PACKAGE = "com.android.settings" const val MINIMUM_WEBVIEW_VERSION = 118 @@ -56,13 +57,16 @@ object WebViewUtil { } fun spoofedPackageName(context: Context): String { - return try { - context.packageManager.getPackageInfo(CHROME_PACKAGE, PackageManager.GET_META_DATA) - - CHROME_PACKAGE - } catch (_: PackageManager.NameNotFoundException) { - SYSTEM_SETTINGS_PACKAGE - } + return runCatching { context.packageManager.getPackageInfo(CHROME_PACKAGE, 0) } + .recoverCatching { context.packageManager.getPackageInfo(SYSTEM_SETTINGS_PACKAGE, 0) } + .recoverCatching { context.packageManager.getPackageInfo(YOUTUBE_FOR_TV_PACKAGE, 0) } + .fold( + onSuccess = { it.packageName }, + onFailure = { + context.packageManager.getInstalledPackages(0) + .random().packageName + }, + ) } }