refactor: Separate BasePreferences from PreferencesHelper

This commit is contained in:
ziro 2024-01-29 14:34:41 +07:00
parent bda6de7b76
commit 19d1f0db6f
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
12 changed files with 41 additions and 19 deletions

View file

@ -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)
}

View file

@ -452,8 +452,6 @@ class PreferencesHelper(val context: Context, val preferenceStore: PreferenceSto
// TODO: SourcePref // TODO: SourcePref
fun autoUpdateExtensions() = prefs.getInt(Keys.autoUpdateExtensions, AppDownloadInstallJob.ONLY_ON_UNMETERED) 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 filterChapterByRead() = preferenceStore.getInt(Keys.defaultChapterFilterByRead, Manga.SHOW_ALL)
fun filterChapterByDownloaded() = preferenceStore.getInt(Keys.defaultChapterFilterByDownloaded, Manga.SHOW_ALL) fun filterChapterByDownloaded() = preferenceStore.getInt(Keys.defaultChapterFilterByDownloaded, Manga.SHOW_ALL)

View file

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.di package eu.kanade.tachiyomi.di
import android.app.Application import android.app.Application
import dev.yokai.domain.base.BasePreferences
import dev.yokai.domain.recents.RecentsPreferences import dev.yokai.domain.recents.RecentsPreferences
import dev.yokai.domain.source.SourcePreferences import dev.yokai.domain.source.SourcePreferences
import dev.yokai.domain.ui.UiPreferences import dev.yokai.domain.ui.UiPreferences
@ -17,6 +18,8 @@ class PreferenceModule(val application: Application) : InjektModule {
override fun InjektRegistrar.registerInjectables() { override fun InjektRegistrar.registerInjectables() {
addSingletonFactory<PreferenceStore> { AndroidPreferenceStore(application) } addSingletonFactory<PreferenceStore> { AndroidPreferenceStore(application) }
addSingletonFactory { BasePreferences(get()) }
addSingletonFactory { SourcePreferences(get()) } addSingletonFactory { SourcePreferences(get()) }
addSingletonFactory { TrackPreferences(get()) } addSingletonFactory { TrackPreferences(get()) }

View file

@ -4,6 +4,7 @@ import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build import android.os.Build
import android.os.Parcelable import android.os.Parcelable
import dev.yokai.domain.base.BasePreferences
import dev.yokai.domain.extension.TrustExtension import dev.yokai.domain.extension.TrustExtension
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.data.preference.plusAssign
@ -460,7 +461,7 @@ class ExtensionManager(
companion object { companion object {
fun canAutoInstallUpdates(checkIfShizukuIsRunning: Boolean = false): Boolean { fun canAutoInstallUpdates(checkIfShizukuIsRunning: Boolean = false): Boolean {
val prefs = Injekt.get<PreferencesHelper>().extensionInstaller().get() val prefs = Injekt.get<BasePreferences>().extensionInstaller().get()
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ||
( (
prefs == ExtensionInstaller.SHIZUKU && prefs == ExtensionInstaller.SHIZUKU &&

View file

@ -18,6 +18,7 @@ import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.PeriodicWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import dev.yokai.domain.base.BasePreferences
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.NotificationReceiver
@ -61,10 +62,11 @@ class ExtensionUpdateJob(private val context: Context, workerParams: WorkerParam
private fun createUpdateNotification(extensionsList: List<Extension.Available>) { private fun createUpdateNotification(extensionsList: List<Extension.Available>) {
val extensions = extensionsList.toMutableList() val extensions = extensionsList.toMutableList()
val basePreferences: BasePreferences by injectLazy()
val preferences: PreferencesHelper by injectLazy() val preferences: PreferencesHelper by injectLazy()
preferences.extensionUpdatesCount().set(extensions.size) preferences.extensionUpdatesCount().set(extensions.size)
val extensionsInstalledByApp by lazy { val extensionsInstalledByApp by lazy {
if (preferences.extensionInstaller().get() == ExtensionInstaller.SHIZUKU) { if (basePreferences.extensionInstaller().get() == ExtensionInstaller.SHIZUKU) {
if (Shizuku.pingBinder() && Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) { if (Shizuku.pingBinder() && Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {
extensions extensions
} else { } else {

View file

@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.app.DownloadManager import android.app.DownloadManager
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Context.RECEIVER_EXPORTED
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.net.Uri import android.net.Uri
@ -12,6 +11,7 @@ import android.os.Build
import android.os.Environment import android.os.Environment
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri import androidx.core.net.toUri
import dev.yokai.domain.base.BasePreferences
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.extension.ExtensionInstallerJob import eu.kanade.tachiyomi.extension.ExtensionInstallerJob
import eu.kanade.tachiyomi.extension.ExtensionManager import eu.kanade.tachiyomi.extension.ExtensionManager
@ -46,6 +46,7 @@ import kotlinx.coroutines.launch
import timber.log.Timber import timber.log.Timber
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.io.File import java.io.File
/** /**
@ -264,8 +265,8 @@ internal class ExtensionInstaller(private val context: Context) {
val useActivity = val useActivity =
(pkgName?.let { !ExtensionLoader.isExtensionInstalledByApp(context, pkgName) } ?: true) || (pkgName?.let { !ExtensionLoader.isExtensionInstalledByApp(context, pkgName) } ?: true) ||
Build.VERSION.SDK_INT < Build.VERSION_CODES.S Build.VERSION.SDK_INT < Build.VERSION_CODES.S
val prefs: PreferencesHelper = Injekt.get() val basePreferences: BasePreferences by injectLazy()
when (prefs.extensionInstaller().get()) { when (basePreferences.extensionInstaller().get()) {
SHIZUKU -> { SHIZUKU -> {
pkgName ?: return pkgName ?: return
setInstalling(pkgName, uri.hashCode()) setInstalling(pkgName, uri.hashCode())

View file

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.ui.extension package eu.kanade.tachiyomi.ui.extension
import android.widget.TextView import android.widget.TextView
import dev.yokai.domain.base.BasePreferences
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@ -16,10 +17,11 @@ import uy.kohesive.injekt.injectLazy
class ExtensionAdapter(val listener: OnButtonClickListener) : class ExtensionAdapter(val listener: OnButtonClickListener) :
FlexibleAdapter<IFlexible<*>>(null, listener, true) { FlexibleAdapter<IFlexible<*>>(null, listener, true) {
val basePreferences: BasePreferences by injectLazy()
val preferences: PreferencesHelper by injectLazy() val preferences: PreferencesHelper by injectLazy()
var installedSortOrder = preferences.installedExtensionsOrder().get() var installedSortOrder = preferences.installedExtensionsOrder().get()
var installPrivately = preferences.extensionInstaller().get() == ExtensionInstaller.PRIVATE var installPrivately = basePreferences.extensionInstaller().get() == ExtensionInstaller.PRIVATE
init { init {
setDisplayHeadersAtStartUp(true) setDisplayHeadersAtStartUp(true)

View file

@ -12,6 +12,7 @@ import androidx.core.view.updatePaddingRelative
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import dev.yokai.domain.base.BasePreferences
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
@ -44,6 +45,7 @@ import eu.kanade.tachiyomi.util.view.smoothScrollToTop
import eu.kanade.tachiyomi.util.view.withFadeTransaction import eu.kanade.tachiyomi.util.view.withFadeTransaction
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
LinearLayout(context, attrs), LinearLayout(context, attrs),
@ -53,6 +55,8 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
SourceAdapter.OnAllClickListener, SourceAdapter.OnAllClickListener,
BaseMigrationInterface { BaseMigrationInterface {
private val basePreferences: BasePreferences by injectLazy()
var sheetBehavior: BottomSheetBehavior<*>? = null var sheetBehavior: BottomSheetBehavior<*>? = null
var shouldCallApi = false var shouldCallApi = false
@ -221,7 +225,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
override fun onUpdateAllClicked(position: Int) { override fun onUpdateAllClicked(position: Int) {
(controller.activity as? MainActivity)?.showNotificationPermissionPrompt() (controller.activity as? MainActivity)?.showNotificationPermissionPrompt()
if (presenter.preferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU && if (basePreferences.extensionInstaller().get() != ExtensionInstaller.SHIZUKU &&
!presenter.preferences.hasPromptedBeforeUpdateAll().get() !presenter.preferences.hasPromptedBeforeUpdateAll().get()
) { ) {
controller.activity!!.materialAlertDialog() controller.activity!!.materialAlertDialog()

View file

@ -333,7 +333,7 @@ class SettingsAdvancedController : SettingsController() {
titleRes = R.string.extensions titleRes = R.string.extensions
intListPreference(activity) { intListPreference(activity) {
bindTo(preferences.extensionInstaller()) bindTo(basePreferences.extensionInstaller())
titleRes = R.string.ext_installer_pref titleRes = R.string.ext_installer_pref
entriesRes = arrayOf( entriesRes = arrayOf(
R.string.default_value, R.string.default_value,
@ -367,7 +367,7 @@ class SettingsAdvancedController : SettingsController() {
} }
} }
infoPreference(R.string.ext_installer_summary).apply { infoPreference(R.string.ext_installer_summary).apply {
preferences.extensionInstaller().changesIn(viewScope) { basePreferences.extensionInstaller().changesIn(viewScope) {
isVisible = isVisible =
it != ExtensionInstaller.PACKAGE_INSTALLER && Build.VERSION.SDK_INT < Build.VERSION_CODES.S it != ExtensionInstaller.PACKAGE_INSTALLER && Build.VERSION.SDK_INT < Build.VERSION_CODES.S
} }

View file

@ -68,7 +68,7 @@ class SettingsBrowseController : SettingsController() {
) )
defaultValue = AppDownloadInstallJob.ONLY_ON_UNMETERED 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) infoPreference(R.string.some_extensions_may_not_update)
} else { } else {
null null

View file

@ -19,6 +19,7 @@ import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeHandler
import com.bluelinelabs.conductor.ControllerChangeType import com.bluelinelabs.conductor.ControllerChangeType
import dev.yokai.domain.base.BasePreferences
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.changesIn 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.util.view.scrollViewWith
import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.injectLazy
import uy.kohesive.injekt.api.get
import java.util.Locale import java.util.Locale
abstract class SettingsController : PreferenceController(), BackHandlerControllerInterface { abstract class SettingsController : PreferenceController(), BackHandlerControllerInterface {
var preferenceKey: String? = null var preferenceKey: String? = null
val preferences: PreferencesHelper = Injekt.get() val basePreferences: BasePreferences by injectLazy()
val preferences: PreferencesHelper by injectLazy()
val viewScope = MainScope() val viewScope = MainScope()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

View file

@ -23,6 +23,7 @@ import com.bluelinelabs.conductor.ControllerChangeHandler
import com.bluelinelabs.conductor.ControllerChangeType import com.bluelinelabs.conductor.ControllerChangeType
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import dev.yokai.domain.base.BasePreferences
import dev.yokai.presentation.extension.repo.ExtensionRepoController import dev.yokai.presentation.extension.repo.ExtensionRepoController
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
@ -69,8 +70,7 @@ import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.injectLazy
import uy.kohesive.injekt.api.get
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
import kotlin.math.max import kotlin.math.max
@ -88,10 +88,12 @@ class BrowseController :
FloatingSearchInterface, FloatingSearchInterface,
BottomSheetController { BottomSheetController {
private val basePreferences: BasePreferences by injectLazy()
/** /**
* Application preferences. * Application preferences.
*/ */
private val preferences: PreferencesHelper = Injekt.get() private val preferences: PreferencesHelper by injectLazy()
/** /**
* Adapter containing sources. * Adapter containing sources.
@ -178,7 +180,7 @@ class BrowseController :
requestFilePermissionsSafe(301, preferences) requestFilePermissionsSafe(301, preferences)
binding.bottomSheet.root.onCreate(this) binding.bottomSheet.root.onCreate(this)
preferences.extensionInstaller().changes() basePreferences.extensionInstaller().changes()
.drop(1) .drop(1)
.onEach { .onEach {
binding.bottomSheet.root.setCanInstallPrivately(it == ExtensionInstaller.PRIVATE) binding.bottomSheet.root.setCanInstallPrivately(it == ExtensionInstaller.PRIVATE)