Update: Replace repositories observable disposable with Room-RxJava's Flowable

This commit is contained in:
machiav3lli 2022-01-03 00:38:55 +01:00
parent 70eee26048
commit 4547ef8a55
4 changed files with 13 additions and 25 deletions

View File

@ -7,6 +7,7 @@ import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery import androidx.sqlite.db.SupportSQLiteQuery
import com.looker.droidify.* import com.looker.droidify.*
import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.ProductItem
import io.reactivex.rxjava3.core.Flowable
interface BaseDao<T> { interface BaseDao<T> {
@ -53,6 +54,9 @@ interface RepositoryDao : BaseDao<Repository> {
@get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC") @get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC")
val all: List<Repository> val all: List<Repository>
@get:Query("SELECT * FROM repository WHERE deleted == 0 ORDER BY _id ASC")
val allFlowable: Flowable<List<Repository>>
@get:Query("SELECT _id, deleted FROM repository WHERE deleted != 0 and enabled == 0 ORDER BY _id ASC") @get:Query("SELECT _id, deleted FROM repository WHERE deleted != 0 and enabled == 0 ORDER BY _id ASC")
val allDisabledDeleted: List<Repository.IdAndDeleted> val allDisabledDeleted: List<Repository.IdAndDeleted>

View File

@ -13,13 +13,12 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.database.CursorOwner import com.looker.droidify.database.CursorOwner
import com.looker.droidify.databinding.FragmentExploreXBinding import com.looker.droidify.databinding.FragmentExploreXBinding
import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.adapters.AppListAdapter import com.looker.droidify.ui.adapters.AppListAdapter
import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX
import com.looker.droidify.utility.RxUtils import com.looker.droidify.utility.RxUtils
import com.looker.droidify.widget.RecyclerFastScroller import com.looker.droidify.widget.RecyclerFastScroller
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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 io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -31,7 +30,7 @@ class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback {
override val source = Source.AVAILABLE override val source = Source.AVAILABLE
private var repositoriesDisposable: Disposable? = null private var repositories: Map<Long, Repository> = mapOf()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -61,21 +60,18 @@ class ExploreFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
mainActivityX.attachCursorOwner(this, viewModel.request(source)) mainActivityX.attachCursorOwner(this, viewModel.request(source))
repositoriesDisposable = Observable.just(Unit) viewModel.db.repositoryDao.allFlowable
//.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava
.observeOn(Schedulers.io()) .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() } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe { (binding.recyclerView.adapter as? AppListAdapter)?.repositories = it } .subscribe { repositories = it }
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
mainActivityX.detachCursorOwner(this) mainActivityX.detachCursorOwner(this)
repositoriesDisposable?.dispose()
repositoriesDisposable = null
} }
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {

View File

@ -20,8 +20,6 @@ import com.looker.droidify.widget.RecyclerFastScroller
import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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 io.reactivex.rxjava3.schedulers.Schedulers
class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback { class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
@ -37,7 +35,6 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
override val source = Source.INSTALLED override val source = Source.INSTALLED
private var repositories: Map<Long, Repository> = mapOf() private var repositories: Map<Long, Repository> = mapOf()
private var repositoriesDisposable: Disposable? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -76,10 +73,9 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
mainActivityX.attachCursorOwner(this, viewModel.request(source)) mainActivityX.attachCursorOwner(this, viewModel.request(source))
repositoriesDisposable = Observable.just(Unit) viewModel.db.repositoryDao.allFlowable
//.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava
.observeOn(Schedulers.io()) .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() } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe { repositories = it } .subscribe { repositories = it }
@ -89,8 +85,6 @@ class InstalledFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onDestroyView() super.onDestroyView()
mainActivityX.detachCursorOwner(this) mainActivityX.detachCursorOwner(this)
repositoriesDisposable?.dispose()
repositoriesDisposable = null
} }
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {

View File

@ -20,8 +20,6 @@ import com.looker.droidify.widget.RecyclerFastScroller
import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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 io.reactivex.rxjava3.schedulers.Schedulers
class LatestFragment : MainNavFragmentX(), CursorOwner.Callback { class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
@ -37,7 +35,6 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
override val source = Source.AVAILABLE override val source = Source.AVAILABLE
private var repositories: Map<Long, Repository> = mapOf() private var repositories: Map<Long, Repository> = mapOf()
private var repositoriesDisposable: Disposable? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -76,10 +73,9 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
mainActivityX.attachCursorOwner(this, viewModel.request(source)) mainActivityX.attachCursorOwner(this, viewModel.request(source))
repositoriesDisposable = Observable.just(Unit) viewModel.db.repositoryDao.allFlowable
//.concatWith(Database.observable(Database.Subject.Repositories)) TODO have to be replaced like whole rxJava
.observeOn(Schedulers.io()) .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() } .map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe { repositories = it } .subscribe { repositories = it }
@ -89,8 +85,6 @@ class LatestFragment : MainNavFragmentX(), CursorOwner.Callback {
super.onDestroyView() super.onDestroyView()
mainActivityX.detachCursorOwner(this) mainActivityX.detachCursorOwner(this)
repositoriesDisposable?.dispose()
repositoriesDisposable = null
} }
override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) { override fun onCursorData(request: CursorOwner.Request, cursor: Cursor?) {