From 4547ef8a55c18a5f2f09edff4b98f08c27f219e7 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Mon, 3 Jan 2022 00:38:55 +0100 Subject: [PATCH] Update: Replace repositories observable disposable with Room-RxJava's Flowable --- .../kotlin/com/looker/droidify/database/DAOs.kt | 4 ++++ .../droidify/ui/fragments/ExploreFragment.kt | 14 +++++--------- .../droidify/ui/fragments/InstalledFragment.kt | 10 ++-------- .../looker/droidify/ui/fragments/LatestFragment.kt | 10 ++-------- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/database/DAOs.kt b/src/main/kotlin/com/looker/droidify/database/DAOs.kt index 623d2cd0..da2ab7b3 100644 --- a/src/main/kotlin/com/looker/droidify/database/DAOs.kt +++ b/src/main/kotlin/com/looker/droidify/database/DAOs.kt @@ -7,6 +7,7 @@ import androidx.sqlite.db.SimpleSQLiteQuery import androidx.sqlite.db.SupportSQLiteQuery import com.looker.droidify.* import com.looker.droidify.entity.ProductItem +import io.reactivex.rxjava3.core.Flowable interface BaseDao { @@ -53,6 +54,9 @@ interface RepositoryDao : BaseDao { @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") val all: List + @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") + val allFlowable: Flowable> + @get:Query("SELECT _id, deleted FROM repository WHERE deleted != 0 and enabled == 0 ORDER BY _id ASC") val allDisabledDeleted: List diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt index 17e1bf26..215aea47 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt @@ -13,13 +13,12 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.looker.droidify.R import com.looker.droidify.database.CursorOwner import com.looker.droidify.databinding.FragmentExploreXBinding +import com.looker.droidify.entity.Repository import com.looker.droidify.ui.adapters.AppListAdapter import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX import com.looker.droidify.utility.RxUtils import com.looker.droidify.widget.RecyclerFastScroller import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.schedulers.Schedulers import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch @@ -31,7 +30,7 @@ class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback { override val source = Source.AVAILABLE - private var repositoriesDisposable: Disposable? = null + private var repositories: Map = mapOf() override fun onCreateView( inflater: LayoutInflater, @@ -61,21 +60,18 @@ class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback { super.onViewCreated(view, savedInstanceState) mainActivityX.attachCursorOwner(this, viewModel.request(source)) - repositoriesDisposable = Observable.just(Unit) - //.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava + viewModel.db.repositoryDao.allFlowable .observeOn(Schedulers.io()) - .flatMapSingle { RxUtils.querySingle { mainActivityX.db.repositoryDao.all.mapNotNull { it.trueData } } } + .flatMapSingle { list -> RxUtils.querySingle { list.mapNotNull { it.trueData } } } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() } .observeOn(AndroidSchedulers.mainThread()) - .subscribe { (binding.recyclerView.adapter as? AppListAdapter)?.repositories = it } + .subscribe { repositories = it } } override fun onDestroyView() { super.onDestroyView() mainActivityX.detachCursorOwner(this) - repositoriesDisposable?.dispose() - repositoriesDisposable = null } override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt index 549566cb..bb51af66 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt @@ -20,8 +20,6 @@ import com.looker.droidify.widget.RecyclerFastScroller import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.schedulers.Schedulers class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { @@ -37,7 +35,6 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { override val source = Source.INSTALLED private var repositories: Map = mapOf() - private var repositoriesDisposable: Disposable? = null override fun onCreateView( inflater: LayoutInflater, @@ -76,10 +73,9 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { super.onViewCreated(view, savedInstanceState) mainActivityX.attachCursorOwner(this, viewModel.request(source)) - repositoriesDisposable = Observable.just(Unit) - //.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava + viewModel.db.repositoryDao.allFlowable .observeOn(Schedulers.io()) - .flatMapSingle { RxUtils.querySingle { mainActivityX.db.repositoryDao.all.mapNotNull { it.trueData } } } + .flatMapSingle { list -> RxUtils.querySingle { list.mapNotNull { it.trueData } } } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() } .observeOn(AndroidSchedulers.mainThread()) .subscribe { repositories = it } @@ -89,8 +85,6 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { super.onDestroyView() mainActivityX.detachCursorOwner(this) - repositoriesDisposable?.dispose() - repositoriesDisposable = null } override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt index 203cb6c9..f0cd127b 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt @@ -20,8 +20,6 @@ import com.looker.droidify.widget.RecyclerFastScroller import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.schedulers.Schedulers class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { @@ -37,7 +35,6 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { override val source = Source.AVAILABLE private var repositories: Map = mapOf() - private var repositoriesDisposable: Disposable? = null override fun onCreateView( inflater: LayoutInflater, @@ -76,10 +73,9 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { super.onViewCreated(view, savedInstanceState) mainActivityX.attachCursorOwner(this, viewModel.request(source)) - repositoriesDisposable = Observable.just(Unit) - //.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava + viewModel.db.repositoryDao.allFlowable .observeOn(Schedulers.io()) - .flatMapSingle { RxUtils.querySingle { mainActivityX.db.repositoryDao.all.mapNotNull { it.trueData } } } + .flatMapSingle { list -> RxUtils.querySingle { list.mapNotNull { it.trueData } } } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() } .observeOn(AndroidSchedulers.mainThread()) .subscribe { repositories = it } @@ -89,8 +85,6 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { super.onDestroyView() mainActivityX.detachCursorOwner(this) - repositoriesDisposable?.dispose() - repositoriesDisposable = null } override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {