From 19d1f0db6f48594ecfe5e1df2b7eb26b6205e80f Mon Sep 17 00:00:00 2001 From: ziro Date: Mon, 29 Jan 2024 14:34:41 +0700 Subject: [PATCH] refactor: Separate BasePreferences from PreferencesHelper --- .../main/java/dev/yokai/domain/base/BasePreferences.kt | 8 ++++++++ .../tachiyomi/data/preference/PreferencesHelper.kt | 2 -- .../java/eu/kanade/tachiyomi/di/PreferenceModule.kt | 3 +++ .../eu/kanade/tachiyomi/extension/ExtensionManager.kt | 3 ++- .../kanade/tachiyomi/extension/ExtensionUpdateJob.kt | 4 +++- .../tachiyomi/extension/util/ExtensionInstaller.kt | 7 ++++--- .../kanade/tachiyomi/ui/extension/ExtensionAdapter.kt | 4 +++- .../tachiyomi/ui/extension/ExtensionBottomSheet.kt | 6 +++++- .../tachiyomi/ui/setting/SettingsAdvancedController.kt | 4 ++-- .../tachiyomi/ui/setting/SettingsBrowseController.kt | 2 +- .../kanade/tachiyomi/ui/setting/SettingsController.kt | 7 ++++--- .../eu/kanade/tachiyomi/ui/source/BrowseController.kt | 10 ++++++---- 12 files changed, 41 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/dev/yokai/domain/base/BasePreferences.kt diff --git a/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt b/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt new file mode 100644 index 0000000000..90c5b85c26 --- /dev/null +++ b/app/src/main/java/dev/yokai/domain/base/BasePreferences.kt @@ -0,0 +1,8 @@ +package dev.yokai.domain.base + +import eu.kanade.tachiyomi.core.preference.PreferenceStore +import eu.kanade.tachiyomi.extension.util.ExtensionInstaller + +class BasePreferences(private val preferenceStore: PreferenceStore) { + fun extensionInstaller() = preferenceStore.getInt("extension_installer", ExtensionInstaller.PACKAGE_INSTALLER) +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index c27e0c80c1..382d72b693 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -452,8 +452,6 @@ class PreferencesHelper(val context: Context, val preferenceStore: PreferenceSto // TODO: SourcePref fun autoUpdateExtensions() = prefs.getInt(Keys.autoUpdateExtensions, AppDownloadInstallJob.ONLY_ON_UNMETERED) - fun extensionInstaller() = preferenceStore.getInt("extension_installer", ExtensionInstaller.PACKAGE_INSTALLER) - fun filterChapterByRead() = preferenceStore.getInt(Keys.defaultChapterFilterByRead, Manga.SHOW_ALL) fun filterChapterByDownloaded() = preferenceStore.getInt(Keys.defaultChapterFilterByDownloaded, Manga.SHOW_ALL) 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 2b43ff0a54..5161fd1d43 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.di import android.app.Application +import dev.yokai.domain.base.BasePreferences import dev.yokai.domain.recents.RecentsPreferences import dev.yokai.domain.source.SourcePreferences import dev.yokai.domain.ui.UiPreferences @@ -17,6 +18,8 @@ class PreferenceModule(val application: Application) : InjektModule { override fun InjektRegistrar.registerInjectables() { addSingletonFactory { AndroidPreferenceStore(application) } + addSingletonFactory { BasePreferences(get()) } + addSingletonFactory { SourcePreferences(get()) } addSingletonFactory { TrackPreferences(get()) } 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 4e0fe5eccd..e79a2a57af 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -4,6 +4,7 @@ import android.content.Context import android.graphics.drawable.Drawable import android.os.Build 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 @@ -460,7 +461,7 @@ class ExtensionManager( companion object { fun canAutoInstallUpdates(checkIfShizukuIsRunning: Boolean = false): Boolean { - val prefs = Injekt.get().extensionInstaller().get() + val prefs = Injekt.get().extensionInstaller().get() return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || ( prefs == ExtensionInstaller.SHIZUKU && 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 7774dad166..025d04de59 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt @@ -18,6 +18,7 @@ import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters +import dev.yokai.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.notification.NotificationReceiver @@ -61,10 +62,11 @@ class ExtensionUpdateJob(private val context: Context, workerParams: WorkerParam private fun createUpdateNotification(extensionsList: List) { val extensions = extensionsList.toMutableList() + val basePreferences: BasePreferences by injectLazy() val preferences: PreferencesHelper by injectLazy() preferences.extensionUpdatesCount().set(extensions.size) val extensionsInstalledByApp by lazy { - if (preferences.extensionInstaller().get() == ExtensionInstaller.SHIZUKU) { + if (basePreferences.extensionInstaller().get() == ExtensionInstaller.SHIZUKU) { if (Shizuku.pingBinder() && Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { extensions } else { 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 757d02ac5b..53081e03c5 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 @@ -4,7 +4,6 @@ import android.annotation.SuppressLint import android.app.DownloadManager import android.content.BroadcastReceiver import android.content.Context -import android.content.Context.RECEIVER_EXPORTED import android.content.Intent import android.content.IntentFilter import android.net.Uri @@ -12,6 +11,7 @@ import android.os.Build 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 @@ -46,6 +46,7 @@ import kotlinx.coroutines.launch import timber.log.Timber import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.io.File /** @@ -264,8 +265,8 @@ internal class ExtensionInstaller(private val context: Context) { val useActivity = (pkgName?.let { !ExtensionLoader.isExtensionInstalledByApp(context, pkgName) } ?: true) || Build.VERSION.SDK_INT < Build.VERSION_CODES.S - val prefs: PreferencesHelper = Injekt.get() - when (prefs.extensionInstaller().get()) { + val basePreferences: BasePreferences by injectLazy() + when (basePreferences.extensionInstaller().get()) { SHIZUKU -> { pkgName ?: return setInstalling(pkgName, uri.hashCode()) 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 2b6c1ba11f..a2b6a37081 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 @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.ui.extension import android.widget.TextView +import dev.yokai.domain.base.BasePreferences import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -16,10 +17,11 @@ import uy.kohesive.injekt.injectLazy class ExtensionAdapter(val listener: OnButtonClickListener) : FlexibleAdapter>(null, listener, true) { + val basePreferences: BasePreferences by injectLazy() val preferences: PreferencesHelper by injectLazy() var installedSortOrder = preferences.installedExtensionsOrder().get() - var installPrivately = preferences.extensionInstaller().get() == ExtensionInstaller.PRIVATE + var installPrivately = basePreferences.extensionInstaller().get() == ExtensionInstaller.PRIVATE init { setDisplayHeadersAtStartUp(true) 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 8ac44659e8..17d96a74e1 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 @@ -12,6 +12,7 @@ import androidx.core.view.updatePaddingRelative 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 eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R @@ -44,6 +45,7 @@ import eu.kanade.tachiyomi.util.view.smoothScrollToTop import eu.kanade.tachiyomi.util.view.withFadeTransaction import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : LinearLayout(context, attrs), @@ -53,6 +55,8 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At SourceAdapter.OnAllClickListener, BaseMigrationInterface { + private val basePreferences: BasePreferences by injectLazy() + var sheetBehavior: BottomSheetBehavior<*>? = null var shouldCallApi = false @@ -221,7 +225,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At override fun onUpdateAllClicked(position: Int) { (controller.activity as? MainActivity)?.showNotificationPermissionPrompt() - if (presenter.preferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU && + if (basePreferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU && !presenter.preferences.hasPromptedBeforeUpdateAll().get() ) { controller.activity!!.materialAlertDialog() 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 680c23b741..1fc196fae1 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 @@ -333,7 +333,7 @@ class SettingsAdvancedController : SettingsController() { titleRes = R.string.extensions intListPreference(activity) { - bindTo(preferences.extensionInstaller()) + bindTo(basePreferences.extensionInstaller()) titleRes = R.string.ext_installer_pref entriesRes = arrayOf( R.string.default_value, @@ -367,7 +367,7 @@ class SettingsAdvancedController : SettingsController() { } } infoPreference(R.string.ext_installer_summary).apply { - preferences.extensionInstaller().changesIn(viewScope) { + basePreferences.extensionInstaller().changesIn(viewScope) { isVisible = it != ExtensionInstaller.PACKAGE_INSTALLER && Build.VERSION.SDK_INT < Build.VERSION_CODES.S } 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 6f53280626..2b29278175 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 @@ -68,7 +68,7 @@ class SettingsBrowseController : SettingsController() { ) defaultValue = AppDownloadInstallJob.ONLY_ON_UNMETERED } - val infoPref = if (preferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU) { + val infoPref = if (basePreferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU) { infoPreference(R.string.some_extensions_may_not_update) } else { null diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt index 0612529510..072c25fc4f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt @@ -19,6 +19,7 @@ import androidx.preference.PreferenceGroup import androidx.preference.PreferenceScreen import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeType +import dev.yokai.domain.base.BasePreferences import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.changesIn @@ -33,14 +34,14 @@ import eu.kanade.tachiyomi.util.view.isControllerVisible import eu.kanade.tachiyomi.util.view.scrollViewWith import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset import kotlinx.coroutines.MainScope -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.util.Locale abstract class SettingsController : PreferenceController(), BackHandlerControllerInterface { var preferenceKey: String? = null - val preferences: PreferencesHelper = Injekt.get() + val basePreferences: BasePreferences by injectLazy() + val preferences: PreferencesHelper by injectLazy() val viewScope = MainScope() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 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 1b54b48947..1724be6608 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 @@ -23,6 +23,7 @@ import com.bluelinelabs.conductor.ControllerChangeHandler 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.presentation.extension.repo.ExtensionRepoController import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible @@ -69,8 +70,7 @@ import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.parcelize.Parcelize -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy import java.util.Date import java.util.Locale import kotlin.math.max @@ -88,10 +88,12 @@ class BrowseController : FloatingSearchInterface, BottomSheetController { + private val basePreferences: BasePreferences by injectLazy() + /** * Application preferences. */ - private val preferences: PreferencesHelper = Injekt.get() + private val preferences: PreferencesHelper by injectLazy() /** * Adapter containing sources. @@ -178,7 +180,7 @@ class BrowseController : requestFilePermissionsSafe(301, preferences) binding.bottomSheet.root.onCreate(this) - preferences.extensionInstaller().changes() + basePreferences.extensionInstaller().changes() .drop(1) .onEach { binding.bottomSheet.root.setCanInstallPrivately(it == ExtensionInstaller.PRIVATE)