From 81499289d37f9b63fbfc6114c9239e086f70e0a7 Mon Sep 17 00:00:00 2001 From: ziro Date: Sat, 3 Feb 2024 14:42:02 +0700 Subject: [PATCH] refactor: Turn ExtensionInstaller types from Int to Enum --- app/build.gradle.kts | 2 +- .../dev/yokai/domain/base/BasePreferences.kt | 12 ++++++++++- .../java/eu/kanade/tachiyomi/Migrations.kt | 17 +++++++++++++++ .../tachiyomi/extension/ExtensionManager.kt | 5 ++--- .../tachiyomi/extension/ExtensionUpdateJob.kt | 2 +- .../extension/util/ExtensionInstaller.kt | 8 +++---- .../ui/extension/ExtensionAdapter.kt | 2 +- .../ui/extension/ExtensionBottomSheet.kt | 2 +- .../ui/setting/SettingsAdvancedController.kt | 21 +++++++------------ .../ui/setting/SettingsBrowseController.kt | 3 ++- .../tachiyomi/ui/source/BrowseController.kt | 2 +- app/src/main/res/values/strings.xml | 1 + 12 files changed, 50 insertions(+), 27 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 17e19f1738..8bf768c850 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,7 +35,7 @@ android { minSdk = AndroidConfig.minSdk targetSdk = AndroidConfig.targetSdk applicationId = "eu.kanade.tachiyomi" - versionCode = 118 + versionCode = 119 versionName = "1.7.11" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled = true diff --git a/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt b/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt index 90c5b85c26..aeef1eaa69 100644 --- a/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt +++ b/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt @@ -1,8 +1,18 @@ package dev.yokai.domain.base +import androidx.annotation.StringRes +import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.preference.PreferenceStore +import eu.kanade.tachiyomi.core.preference.getEnum import eu.kanade.tachiyomi.extension.util.ExtensionInstaller class BasePreferences(private val preferenceStore: PreferenceStore) { - fun extensionInstaller() = preferenceStore.getInt("extension_installer", ExtensionInstaller.PACKAGE_INSTALLER) + fun extensionInstaller() = preferenceStore.getEnum("extension_installer", ExtensionInstaller.PACKAGEINSTALLER) + + enum class ExtensionInstaller(@StringRes val titleResId: Int, val requiresSystemPermission: Boolean) { + // LEGACY(R.string.ext_installer_legacy, true), + PACKAGEINSTALLER(R.string.ext_installer_packageinstaller, true), + SHIZUKU(R.string.ext_installer_shizuku, false), + PRIVATE(R.string.ext_installer_private, false), + } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt index a1933bfb8e..4d3d4b733f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/Migrations.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi import androidx.core.content.edit import androidx.preference.PreferenceManager +import dev.yokai.domain.base.BasePreferences import eu.kanade.tachiyomi.data.backup.BackupCreatorJob import eu.kanade.tachiyomi.data.download.DownloadProvider import eu.kanade.tachiyomi.data.library.LibraryUpdateJob @@ -15,6 +16,7 @@ import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob import eu.kanade.tachiyomi.data.updater.AppUpdateJob import eu.kanade.tachiyomi.extension.ExtensionUpdateJob +import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.ui.library.LibraryPresenter import eu.kanade.tachiyomi.ui.library.LibrarySort @@ -260,6 +262,21 @@ object Migrations { remove("trusted_signatures") } } + if (oldVersion < 119) { + val basePreferences: BasePreferences = Injekt.get() + try { + val oldExtensionInstall = prefs.getInt("extension_installer", 0) + basePreferences.extensionInstaller().set( + when (oldExtensionInstall) { + ExtensionInstaller.SHIZUKU -> BasePreferences.ExtensionInstaller.SHIZUKU + ExtensionInstaller.PRIVATE -> BasePreferences.ExtensionInstaller.PRIVATE + else -> BasePreferences.ExtensionInstaller.PACKAGEINSTALLER + } + ) + } catch (_: Exception) { + basePreferences.extensionInstaller().set(BasePreferences.ExtensionInstaller.PACKAGEINSTALLER) + } + } return true } 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 2e0b948beb..5d9c2fbe58 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -7,7 +7,6 @@ import android.os.Parcelable import dev.yokai.domain.base.BasePreferences import dev.yokai.domain.extension.TrustExtension import eu.kanade.tachiyomi.data.preference.PreferencesHelper -import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.extension.api.ExtensionApi import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep @@ -463,10 +462,10 @@ class ExtensionManager( val prefs = Injekt.get().extensionInstaller().get() return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || ( - prefs == ExtensionInstaller.SHIZUKU && + prefs == BasePreferences.ExtensionInstaller.SHIZUKU && (!checkIfShizukuIsRunning || ShizukuInstaller.isShizukuRunning()) ) || - prefs == ExtensionInstaller.PRIVATE + prefs == BasePreferences.ExtensionInstaller.PRIVATE } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt index 025d04de59..bd8caeb36b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt @@ -19,6 +19,7 @@ import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.notification.NotificationReceiver @@ -27,7 +28,6 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob import eu.kanade.tachiyomi.extension.api.ExtensionApi import eu.kanade.tachiyomi.extension.model.Extension -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.util.system.connectivityManager import eu.kanade.tachiyomi.util.system.localeContext 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 53081e03c5..544584ac75 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 @@ -12,7 +12,6 @@ import android.os.Environment import androidx.core.content.ContextCompat import androidx.core.net.toUri import dev.yokai.domain.base.BasePreferences -import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.extension.ExtensionInstallerJob import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.ShizukuInstaller @@ -267,12 +266,12 @@ internal class ExtensionInstaller(private val context: Context) { Build.VERSION.SDK_INT < Build.VERSION_CODES.S val basePreferences: BasePreferences by injectLazy() when (basePreferences.extensionInstaller().get()) { - SHIZUKU -> { + BasePreferences.ExtensionInstaller.SHIZUKU -> { pkgName ?: return setInstalling(pkgName, uri.hashCode()) shizukuInstaller?.addToQueue(downloadId, pkgName, uri) } - PRIVATE -> installPrivately(downloadId, pkgName, uri) + BasePreferences.ExtensionInstaller.PRIVATE -> installPrivately(downloadId, pkgName, uri) else -> { val extensionManager = Injekt.get() if (extensionManager.installedExtensionsFlow.value.find { it.pkgName == pkgName }?.isShared == false) { @@ -478,8 +477,9 @@ internal class ExtensionInstaller(private val context: Context) { const val EXTRA_DOWNLOAD_ID = "ExtensionInstaller.extra.DOWNLOAD_ID" const val FILE_SCHEME = "file://" - const val PACKAGE_INSTALLER = 0 + @Deprecated("Use BasePreferences.ExtensionInstaller instead") const val SHIZUKU = 1 + @Deprecated("Use BasePreferences.ExtensionInstaller instead") const val PRIVATE = 2 } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionAdapter.kt index a2b6a37081..4a2f38db5d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionAdapter.kt @@ -2,10 +2,10 @@ package eu.kanade.tachiyomi.ui.extension import android.widget.TextView import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.data.preference.PreferencesHelper -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.ui.extension.ExtensionAdapter.OnButtonClickListener import uy.kohesive.injekt.injectLazy diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt index 17d96a74e1..1d597a4bc1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.tabs.TabLayout import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R @@ -22,7 +23,6 @@ import eu.kanade.tachiyomi.databinding.RecyclerWithScrollerBinding import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.extension.model.InstalledExtensionsOrder -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.ui.extension.details.ExtensionDetailsController import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.migration.BaseMigrationInterface diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 1fc196fae1..781655e41d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -16,6 +16,8 @@ import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceScreen import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.ktx.Firebase +import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import dev.yokai.domain.extension.TrustExtension import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R @@ -29,7 +31,6 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob.Target import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.changesIn import eu.kanade.tachiyomi.extension.ShizukuInstaller -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.network.PREF_DOH_360 import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD @@ -332,19 +333,13 @@ class SettingsAdvancedController : SettingsController() { preferenceCategory { titleRes = R.string.extensions - intListPreference(activity) { + listPreference(activity) { bindTo(basePreferences.extensionInstaller()) titleRes = R.string.ext_installer_pref - entriesRes = arrayOf( - R.string.default_value, - R.string.ext_installer_shizuku, - R.string.ext_installer_private, - ) - entryValues = listOf( - ExtensionInstaller.PACKAGE_INSTALLER, - ExtensionInstaller.SHIZUKU, - ExtensionInstaller.PRIVATE, - ) + + val values = ExtensionInstaller.entries.toList() + entriesRes = values.map { it.titleResId }.toTypedArray() + entryValues = values.map { it.name }.toTypedArray().toList() onChange { it as Int @@ -369,7 +364,7 @@ class SettingsAdvancedController : SettingsController() { infoPreference(R.string.ext_installer_summary).apply { basePreferences.extensionInstaller().changesIn(viewScope) { isVisible = - it != ExtensionInstaller.PACKAGE_INSTALLER && Build.VERSION.SDK_INT < Build.VERSION_CODES.S + it != ExtensionInstaller.PACKAGEINSTALLER && Build.VERSION.SDK_INT < Build.VERSION_CODES.S } } preference { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt index 2b29278175..107895aee6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsBrowseController.kt @@ -6,6 +6,8 @@ import android.os.Build import android.provider.Settings import androidx.preference.PreferenceScreen import androidx.preference.SwitchPreferenceCompat +import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import dev.yokai.presentation.extension.repo.ExtensionRepoController import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R @@ -15,7 +17,6 @@ import eu.kanade.tachiyomi.data.preference.changesIn import eu.kanade.tachiyomi.data.updater.AppDownloadInstallJob import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.ExtensionUpdateJob -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.migration.MigrationController diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt index 1724be6608..3e5af7cfb7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt @@ -24,6 +24,7 @@ import com.bluelinelabs.conductor.ControllerChangeType import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.snackbar.Snackbar import dev.yokai.domain.base.BasePreferences +import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import dev.yokai.presentation.extension.repo.ExtensionRepoController import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible @@ -31,7 +32,6 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferenceValues import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.databinding.BrowseControllerBinding -import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b5e7d1de1..3299914c28 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1205,4 +1205,5 @@ SFW NSFW Content Type + Default \ No newline at end of file