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 47c1ecde6..b9356cd0f 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 @@ -142,9 +142,9 @@ class PreferencesHelper(val context: Context) { fun readWithVolumeKeysInverted() = flowPrefs.getBoolean(Keys.readWithVolumeKeysInverted, false) - fun portraitColumns() = flowPrefs.getInt(Keys.portraitColumns, 0) + fun portraitColumns() = rxPrefs.getInteger(Keys.portraitColumns, 0) - fun landscapeColumns() = flowPrefs.getInt(Keys.landscapeColumns, 0) + fun landscapeColumns() = rxPrefs.getInteger(Keys.landscapeColumns, 0) fun updateOnlyNonCompleted() = prefs.getBoolean(Keys.updateOnlyNonCompleted, false) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index b6633ba5d..09fd05e2f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -15,15 +15,14 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.list.listItems +import com.f2prateek.rx.preferences.Preference import com.google.android.material.snackbar.Snackbar -import com.tfcporciuncula.flow.Preference import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.preference.PreferencesHelper -import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.databinding.SourceControllerBinding import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.LocalSource @@ -44,16 +43,12 @@ 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.Job -import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import reactivecircus.flowbinding.appcompat.QueryTextEvent import reactivecircus.flowbinding.appcompat.queryTextEvents +import rx.Subscription import timber.log.Timber import uy.kohesive.injekt.injectLazy @@ -96,9 +91,9 @@ open class BrowseSourceController(bundle: Bundle) : private var recycler: RecyclerView? = null /** - * Scope for the number of manga per row flow. + * Subscription for the number of manga per row. */ - private var numColumnsScope: CoroutineScope? = null + private var numColumnsSubscription: Subscription? = null /** * Endless loading item. @@ -162,7 +157,8 @@ open class BrowseSourceController(bundle: Bundle) : } override fun onDestroyView(view: View) { - numColumnsScope?.cancel() + numColumnsSubscription?.unsubscribe() + numColumnsSubscription = null adapter = null snack = null recycler = null @@ -170,7 +166,7 @@ open class BrowseSourceController(bundle: Bundle) : } private fun setupRecycler(view: View) { - numColumnsScope?.cancel() + numColumnsSubscription?.unsubscribe() var oldPosition = RecyclerView.NO_POSITION val oldRecycler = binding.catalogueView.getChildAt(1) @@ -190,14 +186,11 @@ open class BrowseSourceController(bundle: Bundle) : } } else { (binding.catalogueView.inflate(R.layout.source_recycler_autofit) as AutofitRecyclerView).apply { - numColumnsScope = CoroutineScope(Job() + Dispatchers.Main) - getColumnsPreferenceForCurrentOrientation().asImmediateFlow { spanCount = it } - .drop(1) - .onEach { - // Set the adapter again to recalculate the covers height - adapter = this@BrowseSourceController.adapter - } - .launchIn(numColumnsScope!!) + numColumnsSubscription = getColumnsPreferenceForCurrentOrientation().asObservable() + .doOnNext { spanCount = it } + .skip(1) + // Set again the adapter to recalculate the covers height + .subscribe { adapter = this@BrowseSourceController.adapter } (layoutManager as GridLayoutManager).spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { override fun getSpanSize(position: Int): Int { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index 50d8d03b0..f68e15b79 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -17,16 +17,15 @@ import androidx.appcompat.widget.SearchView import androidx.core.graphics.drawable.DrawableCompat import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeType +import com.f2prateek.rx.preferences.Preference import com.google.android.material.tabs.TabLayout import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.PublishRelay -import com.tfcporciuncula.flow.Preference import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.preference.PreferencesHelper -import eu.kanade.tachiyomi.data.preference.asImmediateFlow import eu.kanade.tachiyomi.databinding.LibraryControllerBinding import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.RootController @@ -155,13 +154,11 @@ class LibraryController( } .launchIn(scope) - getColumnsPreferenceForCurrentOrientation().asImmediateFlow { - mangaPerRow = it - - // Set the adapter again to recalculate the covers height - reattachAdapter() - } - .launchIn(scope) + getColumnsPreferenceForCurrentOrientation().asObservable() + .doOnNext { mangaPerRow = it } + .skip(1) + // Set again the adapter to recalculate the covers height + .subscribeUntilDestroy { reattachAdapter() } if (selectedMangas.isNotEmpty()) { createActionModeIfNeeded() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt index 9709b9fd9..d89022558 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsLibraryController.kt @@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.asImmediateFlow +import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.category.CategoryController @@ -30,9 +31,9 @@ import eu.kanade.tachiyomi.util.preference.switchPreference import eu.kanade.tachiyomi.util.preference.titleRes import kotlinx.android.synthetic.main.pref_library_columns.view.landscape_columns import kotlinx.android.synthetic.main.pref_library_columns.view.portrait_columns -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import rx.Observable import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -60,15 +61,16 @@ class SettingsLibraryController : SettingsController() { } } - preferences.portraitColumns().asFlow() - .combine(preferences.landscapeColumns().asFlow()) { portraitCols, landscapeCols -> Pair(portraitCols, landscapeCols) } - .onEach { (portraitCols, landscapeCols) -> + Observable.combineLatest( + preferences.portraitColumns().asObservable(), + preferences.landscapeColumns().asObservable() + ) { portraitCols, landscapeCols -> Pair(portraitCols, landscapeCols) } + .subscribeUntilDestroy { (portraitCols, landscapeCols) -> val portrait = getColumnValue(portraitCols) val landscape = getColumnValue(landscapeCols) summary = "${context.getString(R.string.portrait)}: $portrait, " + "${context.getString(R.string.landscape)}: $landscape" } - .launchIn(scope) } } @@ -199,8 +201,8 @@ class SettingsLibraryController : SettingsController() { private val preferences: PreferencesHelper = Injekt.get() - private var portrait = preferences.portraitColumns().get() - private var landscape = preferences.landscapeColumns().get() + private var portrait = preferences.portraitColumns().getOrDefault() + private var landscape = preferences.landscapeColumns().getOrDefault() override fun onCreateDialog(savedViewState: Bundle?): Dialog { val dialog = MaterialDialog(activity!!)