Эх сурвалжийг харах

More FlowPreferences migrations

arkon 5 жил өмнө
parent
commit
401210da44
26 өөрчлөгдсөн 42 нэмэгдсэн , 86 устгасан
  1. 1 1
      app/src/main/java/eu/kanade/tachiyomi/Migrations.kt
  2. 7 9
      app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt
  3. 1 2
      app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt
  4. 1 2
      app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt
  5. 1 2
      app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt
  6. 3 4
      app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt
  7. 4 0
      app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseController.kt
  8. 4 0
      app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt
  9. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryController.kt
  10. 1 6
      app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionController.kt
  11. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionDetailsController.kt
  12. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
  13. 1 1
      app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt
  14. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt
  15. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt
  16. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackController.kt
  17. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt
  18. 1 2
      app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt
  19. 1 2
      app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt
  20. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt
  21. 4 0
      app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt
  22. 12 7
      app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt
  23. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsSecurityController.kt
  24. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceController.kt
  25. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt
  26. 0 4
      app/src/main/java/eu/kanade/tachiyomi/ui/source/global_search/GlobalSearchController.kt

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/Migrations.kt

@@ -28,7 +28,7 @@ object Migrations {
                 if (BuildConfig.INCLUDE_UPDATER && preferences.automaticUpdates()) {
                     UpdaterJob.setupTask(context)
                 }
-                if (preferences.automaticExtUpdates().getOrDefault()) {
+                if (preferences.automaticExtUpdates().get()) {
                     ExtensionUpdateJob.setupTask(context)
                 }
                 return false

+ 7 - 9
app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt

@@ -20,8 +20,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
 
 fun <T> Preference<T>.getOrDefault(): T = get() ?: defaultValue()!!
 
-fun Preference<Boolean>.invert(): Boolean = getOrDefault().let { set(!it); !it }
-
 private class DateFormatConverter : Preference.Adapter<DateFormat> {
     override fun get(key: String, preferences: SharedPreferences): DateFormat {
         val dateFormat = preferences.getString(Keys.dateFormat, "")!!
@@ -67,11 +65,11 @@ class PreferencesHelper(val context: Context) {
 
     fun clear() = prefs.edit().clear().apply()
 
-    fun themeMode() = rxPrefs.getString(Keys.themeMode, Values.THEME_MODE_SYSTEM)
+    fun themeMode() = flowPrefs.getString(Keys.themeMode, Values.THEME_MODE_SYSTEM)
 
-    fun themeLight() = prefs.getString(Keys.themeLight, Values.THEME_DARK_DEFAULT)
+    fun themeLight() = flowPrefs.getString(Keys.themeLight, Values.THEME_DARK_DEFAULT)
 
-    fun themeDark() = prefs.getString(Keys.themeDark, Values.THEME_LIGHT_DEFAULT)
+    fun themeDark() = flowPrefs.getString(Keys.themeDark, Values.THEME_LIGHT_DEFAULT)
 
     fun rotation() = rxPrefs.getInteger(Keys.rotation, 1)
 
@@ -194,11 +192,11 @@ class PreferencesHelper(val context: Context) {
 
     fun automaticUpdates() = prefs.getBoolean(Keys.automaticUpdates, true)
 
-    fun automaticExtUpdates() = rxPrefs.getBoolean(Keys.automaticExtUpdates, true)
+    fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true)
 
     fun extensionUpdatesCount() = rxPrefs.getInteger("ext_updates_count", 0)
 
-    fun lastExtCheck() = rxPrefs.getLong("last_ext_check", 0)
+    fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
 
     fun hiddenCatalogues() = rxPrefs.getStringSet("hidden_catalogues", emptySet())
 
@@ -216,9 +214,9 @@ class PreferencesHelper(val context: Context) {
 
     fun skipFiltered() = prefs.getBoolean(Keys.skipFiltered, false)
 
-    fun migrateFlags() = rxPrefs.getInteger("migrate_flags", Int.MAX_VALUE)
+    fun migrateFlags() = flowPrefs.getInt("migrate_flags", Int.MAX_VALUE)
 
-    fun trustedSignatures() = rxPrefs.getStringSet("trusted_signatures", emptySet())
+    fun trustedSignatures() = flowPrefs.getStringSet("trusted_signatures", emptySet())
 
     fun alwaysShowChapterTransition() = rxPrefs.getBoolean(Keys.alwaysShowChapterTransition, true)
 }

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt

@@ -4,7 +4,6 @@ import android.content.Context
 import android.graphics.drawable.Drawable
 import com.jakewharton.rxrelay.BehaviorRelay
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
 import eu.kanade.tachiyomi.extension.model.Extension
 import eu.kanade.tachiyomi.extension.model.InstallStep
@@ -259,7 +258,7 @@ class ExtensionManager(
 
         ExtensionLoader.trustedSignatures += signature
         val preference = preferences.trustedSignatures()
-        preference.set(preference.getOrDefault() + signature)
+        preference.set(preference.get() + signature)
 
         val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature }
         untrustedExtensions -= nowTrustedExtensions

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionUpdateJob.kt

@@ -14,7 +14,6 @@ import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.notification.NotificationReceiver
 import eu.kanade.tachiyomi.data.notification.Notifications
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
 import eu.kanade.tachiyomi.util.system.notification
 import java.util.concurrent.TimeUnit
@@ -65,7 +64,7 @@ class ExtensionUpdateJob(private val context: Context, workerParams: WorkerParam
 
         fun setupTask(context: Context, forceAutoUpdateJob: Boolean? = null) {
             val preferences = Injekt.get<PreferencesHelper>()
-            val autoUpdateJob = forceAutoUpdateJob ?: preferences.automaticExtUpdates().getOrDefault()
+            val autoUpdateJob = forceAutoUpdateJob ?: preferences.automaticExtUpdates().get()
             if (autoUpdateJob) {
                 val constraints = Constraints.Builder()
                     .setRequiredNetworkType(NetworkType.CONNECTED)

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt

@@ -6,7 +6,6 @@ import android.content.pm.PackageInfo
 import android.content.pm.PackageManager
 import dalvik.system.PathClassLoader
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.extension.model.Extension
 import eu.kanade.tachiyomi.extension.model.LoadResult
 import eu.kanade.tachiyomi.source.CatalogueSource
@@ -36,7 +35,7 @@ internal object ExtensionLoader {
      * List of the trusted signatures.
      */
     var trustedSignatures = mutableSetOf<String>() +
-            Injekt.get<PreferencesHelper>().trustedSignatures().getOrDefault() +
+            Injekt.get<PreferencesHelper>().trustedSignatures().get() +
             // inorichi's key
             "7ce04da7773d41b489f4693a366c36bcd0a11fc39b547168553c285bd7348e23"
 

+ 3 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/base/activity/BaseActivity.kt

@@ -7,7 +7,6 @@ import androidx.appcompat.app.AppCompatActivity
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
 import eu.kanade.tachiyomi.util.system.LocaleHelper
 import uy.kohesive.injekt.injectLazy
@@ -20,7 +19,7 @@ abstract class BaseActivity : AppCompatActivity() {
     private val secureActivityDelegate = SecureActivityDelegate(this)
 
     private val lightTheme: Int by lazy {
-        when (preferences.themeLight()) {
+        when (preferences.themeLight().get()) {
             Values.THEME_LIGHT_BLUE -> R.style.Theme_Tachiyomi_LightBlue
             else -> {
                 when {
@@ -42,7 +41,7 @@ abstract class BaseActivity : AppCompatActivity() {
     }
 
     private val darkTheme: Int by lazy {
-        when (preferences.themeDark()) {
+        when (preferences.themeDark().get()) {
             Values.THEME_DARK_BLUE -> R.style.Theme_Tachiyomi_DarkBlue
             Values.THEME_DARK_AMOLED -> R.style.Theme_Tachiyomi_Amoled
             else -> R.style.Theme_Tachiyomi_Dark
@@ -55,7 +54,7 @@ abstract class BaseActivity : AppCompatActivity() {
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
-        setTheme(when (preferences.themeMode().getOrDefault()) {
+        setTheme(when (preferences.themeMode().get()) {
             Values.THEME_MODE_SYSTEM -> {
                 if (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) {
                     darkTheme

+ 4 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/BaseController.kt

@@ -12,6 +12,8 @@ import com.bluelinelabs.conductor.ControllerChangeType
 import com.bluelinelabs.conductor.RestoreViewOnCreateController
 import kotlinx.android.extensions.LayoutContainer
 import kotlinx.android.synthetic.clearFindViewByIdCache
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
 import timber.log.Timber
 
 abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateController(bundle),
@@ -41,6 +43,8 @@ abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateContr
         })
     }
 
+    val uiScope = CoroutineScope(Dispatchers.Main)
+
     override val containerView: View?
         get() = view
 

+ 4 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/base/controller/DialogController.kt

@@ -9,6 +9,8 @@ import com.bluelinelabs.conductor.RestoreViewOnCreateController
 import com.bluelinelabs.conductor.Router
 import com.bluelinelabs.conductor.RouterTransaction
 import com.bluelinelabs.conductor.changehandler.SimpleSwapChangeHandler
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
 
 /**
  * A controller that displays a dialog window, floating on top of its activity's window.
@@ -24,6 +26,8 @@ abstract class DialogController : RestoreViewOnCreateController {
 
     private var dismissed = false
 
+    val uiScope = CoroutineScope(Dispatchers.Main)
+
     /**
      * Convenience constructor for use when no arguments are needed.
      */

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryController.kt

@@ -18,8 +18,6 @@ import eu.kanade.tachiyomi.data.database.models.Category
 import eu.kanade.tachiyomi.databinding.CategoriesControllerBinding
 import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.util.system.toast
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.android.view.clicks
@@ -51,8 +49,6 @@ class CategoryController : NucleusController<CategoryPresenter>(),
      */
     private var undoHelper: UndoHelper? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: CategoriesControllerBinding
 
     /**

+ 1 - 6
app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionController.kt

@@ -16,14 +16,11 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.items.IFlexible
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.databinding.ExtensionControllerBinding
 import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
 import eu.kanade.tachiyomi.extension.model.Extension
 import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
@@ -52,8 +49,6 @@ open class ExtensionController : NucleusController<ExtensionPresenter>(),
 
     private var query = ""
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: ExtensionControllerBinding
 
     init {
@@ -163,7 +158,7 @@ open class ExtensionController : NucleusController<ExtensionPresenter>(),
         // Fixes problem with the overflow icon showing up in lieu of search
         searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
 
-        menu.findItem(R.id.action_auto_check).isChecked = preferences.automaticExtUpdates().getOrDefault()
+        menu.findItem(R.id.action_auto_check).isChecked = preferences.automaticExtUpdates().get()
     }
 
     override fun onItemClick(view: View, position: Int): Boolean {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionDetailsController.kt

@@ -32,8 +32,6 @@ import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.util.preference.preferenceCategory
 import eu.kanade.tachiyomi.util.system.LocaleHelper
 import eu.kanade.tachiyomi.util.view.visible
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.android.view.clicks
@@ -48,8 +46,6 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
 
     private var preferenceScreen: PreferenceScreen? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: ExtensionDetailControllerBinding
 
     constructor(pkgName: String) : this(Bundle().apply {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt

@@ -39,8 +39,6 @@ import eu.kanade.tachiyomi.util.system.getResourceColor
 import eu.kanade.tachiyomi.util.system.toast
 import java.io.IOException
 import kotlinx.android.synthetic.main.main_activity.tabs
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
@@ -128,8 +126,6 @@ class LibraryController(
 
     private var tabsVisibilitySubscription: Subscription? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: LibraryControllerBinding
 
     init {

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt

@@ -170,7 +170,7 @@ class MainActivity : BaseActivity() {
     private fun getExtensionUpdates() {
         // Limit checks to once a day at most
         val now = Date().time
-        if (now < preferences.lastExtCheck().getOrDefault() + TimeUnit.DAYS.toMillis(1)) {
+        if (now < preferences.lastExtCheck().get() + TimeUnit.DAYS.toMillis(1)) {
             return
         }
 

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt

@@ -34,8 +34,6 @@ import eu.kanade.tachiyomi.util.view.gone
 import eu.kanade.tachiyomi.util.view.shrinkOnScroll
 import eu.kanade.tachiyomi.util.view.snack
 import eu.kanade.tachiyomi.util.view.visible
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.android.view.clicks
@@ -66,8 +64,6 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 
     private var lastClickPosition = -1
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: ChaptersControllerBinding
 
     init {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt

@@ -53,8 +53,6 @@ import eu.kanade.tachiyomi.util.system.toast
 import eu.kanade.tachiyomi.util.view.snack
 import eu.kanade.tachiyomi.util.view.visible
 import jp.wasabeef.glide.transformations.CropSquareTransformation
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.android.view.clicks
@@ -74,8 +72,6 @@ class MangaInfoController : NucleusController<MangaInfoPresenter>(),
 
     private val preferences: PreferencesHelper by injectLazy()
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: MangaInfoControllerBinding
 
     init {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackController.kt

@@ -12,8 +12,6 @@ import eu.kanade.tachiyomi.databinding.TrackControllerBinding
 import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.ui.manga.MangaController
 import eu.kanade.tachiyomi.util.system.toast
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.swiperefreshlayout.refreshes
@@ -27,8 +25,6 @@ class TrackController : NucleusController<TrackPresenter>(),
 
     private var adapter: TrackAdapter? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: TrackControllerBinding
 
     init {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt

@@ -16,8 +16,6 @@ import java.util.concurrent.TimeUnit
 import kotlinx.android.synthetic.main.track_search_dialog.view.progress
 import kotlinx.android.synthetic.main.track_search_dialog.view.track_search
 import kotlinx.android.synthetic.main.track_search_dialog.view.track_search_list
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.debounce
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
@@ -41,8 +39,6 @@ class TrackSearchDialog : DialogController {
     private val trackController
         get() = targetController as TrackController
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     constructor(target: TrackController, service: TrackService) : super(Bundle().apply {
         putInt(KEY_SERVICE, service.id)
     }) {

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchController.kt

@@ -6,7 +6,6 @@ import com.afollestad.materialdialogs.MaterialDialog
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.ui.base.controller.DialogController
 import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag
 import eu.kanade.tachiyomi.ui.source.global_search.GlobalSearchController
@@ -77,7 +76,7 @@ class SearchController(
         private val preferences: PreferencesHelper by injectLazy()
 
         override fun onCreateDialog(savedViewState: Bundle?): Dialog {
-            val prefValue = preferences.migrateFlags().getOrDefault()
+            val prefValue = preferences.migrateFlags().get()
 
             val preselected = MigrationFlags.getEnabledFlagsPositions(prefValue)
 

+ 1 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/migration/SearchPresenter.kt

@@ -4,7 +4,6 @@ import android.os.Bundle
 import com.jakewharton.rxrelay.BehaviorRelay
 import eu.kanade.tachiyomi.data.database.models.Manga
 import eu.kanade.tachiyomi.data.database.models.MangaCategory
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.source.CatalogueSource
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.source.model.SChapter
@@ -70,7 +69,7 @@ class SearchPresenter(
         manga: Manga,
         replace: Boolean
     ) {
-        val flags = preferences.migrateFlags().getOrDefault()
+        val flags = preferences.migrateFlags().get()
         val migrateChapters = MigrationFlags.hasChapters(flags)
         val migrateCategories = MigrationFlags.hasCategories(flags)
         val migrateTracks = MigrationFlags.hasTracks(flags)

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/recent/updates/UpdatesController.kt

@@ -27,8 +27,6 @@ import eu.kanade.tachiyomi.ui.manga.MangaController
 import eu.kanade.tachiyomi.ui.reader.ReaderActivity
 import eu.kanade.tachiyomi.util.system.notificationManager
 import eu.kanade.tachiyomi.util.system.toast
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 import reactivecircus.flowbinding.recyclerview.scrollStateChanges
@@ -61,8 +59,6 @@ class UpdatesController : NucleusController<UpdatesPresenter>(),
     var adapter: UpdatesAdapter? = null
         private set
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: UpdatesControllerBinding
 
     init {

+ 4 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsController.kt

@@ -15,6 +15,8 @@ import com.bluelinelabs.conductor.ControllerChangeType
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.ui.base.controller.BaseController
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
 import rx.Observable
 import rx.Subscription
 import rx.subscriptions.CompositeSubscription
@@ -25,6 +27,8 @@ abstract class SettingsController : PreferenceController() {
 
     val preferences: PreferencesHelper = Injekt.get()
 
+    val uiScope = CoroutineScope(Dispatchers.Main)
+
     var untilDestroySubscriptions = CompositeSubscription()
         private set
 

+ 12 - 7
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsGeneralController.kt

@@ -7,7 +7,6 @@ import androidx.preference.PreferenceScreen
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
 import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
-import eu.kanade.tachiyomi.data.preference.getOrDefault
 import eu.kanade.tachiyomi.util.preference.defaultValue
 import eu.kanade.tachiyomi.util.preference.entriesRes
 import eu.kanade.tachiyomi.util.preference.intListPreference
@@ -18,6 +17,8 @@ import eu.kanade.tachiyomi.util.preference.preference
 import eu.kanade.tachiyomi.util.preference.preferenceCategory
 import eu.kanade.tachiyomi.util.preference.titleRes
 import eu.kanade.tachiyomi.util.system.LocaleHelper
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
 
 class SettingsGeneralController : SettingsController() {
 
@@ -138,11 +139,13 @@ class SettingsGeneralController : SettingsController() {
                 defaultValue = Values.THEME_LIGHT_DEFAULT
                 summary = "%s"
 
-                preferences.themeMode().asObservable()
-                        .subscribeUntilDestroy { isVisible = it != Values.THEME_MODE_DARK }
+                isVisible = preferences.themeMode().get() != Values.THEME_MODE_DARK
+                preferences.themeMode().asFlow()
+                    .onEach { isVisible = it != Values.THEME_MODE_DARK }
+                    .launchIn(uiScope)
 
                 onChange {
-                    if (preferences.themeMode().getOrDefault() != Values.THEME_MODE_DARK) {
+                    if (preferences.themeMode().get() != Values.THEME_MODE_DARK) {
                         activity?.recreate()
                     }
                     true
@@ -162,11 +165,13 @@ class SettingsGeneralController : SettingsController() {
                 defaultValue = Values.THEME_DARK_DEFAULT
                 summary = "%s"
 
-                preferences.themeMode().asObservable()
-                        .subscribeUntilDestroy { isVisible = it != Values.THEME_MODE_LIGHT }
+                isVisible = preferences.themeMode().get() != Values.THEME_MODE_LIGHT
+                preferences.themeMode().asFlow()
+                    .onEach { isVisible = it != Values.THEME_MODE_LIGHT }
+                    .launchIn(uiScope)
 
                 onChange {
-                    if (preferences.themeMode().getOrDefault() != Values.THEME_MODE_LIGHT) {
+                    if (preferences.themeMode().get() != Values.THEME_MODE_LIGHT) {
                         activity?.recreate()
                     }
                     true

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsSecurityController.kt

@@ -9,15 +9,11 @@ import eu.kanade.tachiyomi.util.preference.intListPreference
 import eu.kanade.tachiyomi.util.preference.summaryRes
 import eu.kanade.tachiyomi.util.preference.switchPreference
 import eu.kanade.tachiyomi.util.preference.titleRes
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
 
 class SettingsSecurityController : SettingsController() {
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     override fun setupPreferenceScreen(screen: PreferenceScreen) = with(screen) {
         titleRes = R.string.pref_category_security
 

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceController.kt

@@ -30,8 +30,6 @@ import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController
 import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController
 import eu.kanade.tachiyomi.ui.source.global_search.GlobalSearchController
 import eu.kanade.tachiyomi.ui.source.latest.LatestUpdatesController
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
@@ -60,8 +58,6 @@ class SourceController : NucleusController<SourcePresenter>(),
      */
     private var adapter: SourceAdapter? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: SourceMainControllerBinding
 
     init {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt

@@ -40,8 +40,6 @@ import eu.kanade.tachiyomi.util.view.snack
 import eu.kanade.tachiyomi.util.view.visible
 import eu.kanade.tachiyomi.widget.AutofitRecyclerView
 import eu.kanade.tachiyomi.widget.EmptyView
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
@@ -97,8 +95,6 @@ open class BrowseSourceController(bundle: Bundle) :
      */
     private var progressItem: ProgressItem? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: SourceControllerBinding
 
     init {

+ 0 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/source/global_search/GlobalSearchController.kt

@@ -16,8 +16,6 @@ import eu.kanade.tachiyomi.source.CatalogueSource
 import eu.kanade.tachiyomi.ui.base.controller.NucleusController
 import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
 import eu.kanade.tachiyomi.ui.manga.MangaController
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.launchIn
 import kotlinx.coroutines.flow.onEach
@@ -40,8 +38,6 @@ open class GlobalSearchController(
      */
     protected var adapter: GlobalSearchAdapter? = null
 
-    private val uiScope = CoroutineScope(Dispatchers.Main)
-
     private lateinit var binding: GlobalSearchControllerBinding
 
     /**