mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	More FlowPreferences migrations
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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" | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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. | ||||
|      */ | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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) | ||||
|     }) { | ||||
|   | ||||
| @@ -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) | ||||
|  | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
|  | ||||
|     /** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user