Update: Replace RxJava usage for repositories with LiveData

This commit is contained in:
machiav3lli 2022-02-07 00:53:07 +01:00
parent e93b972941
commit f6bdb57ab1
4 changed files with 17 additions and 43 deletions

View File

@ -10,12 +10,9 @@ import com.looker.droidify.database.entity.Repository
import com.looker.droidify.databinding.FragmentExploreXBinding
import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.IAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
// TODO add chips bar to navigate categories
class ExploreFragment : MainNavFragmentX() {
@ -40,16 +37,6 @@ class ExploreFragment : MainNavFragmentX() {
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.db.repositoryDao.allFlowable
.observeOn(Schedulers.io())
.flatMapSingle { list -> RxUtils.querySingle { list } }
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe { repositories = it }
}
override fun setupAdapters() {
appsItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) }
@ -76,5 +63,8 @@ class ExploreFragment : MainNavFragmentX() {
appsItemAdapter.submitList(it)
appsFastAdapter?.notifyDataSetChanged()
}
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }
}
}
}

View File

@ -12,11 +12,8 @@ import com.looker.droidify.databinding.FragmentInstalledXBinding
import com.looker.droidify.ui.items.HAppItem
import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class InstalledFragment : MainNavFragmentX() {
@ -43,16 +40,6 @@ class InstalledFragment : MainNavFragmentX() {
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.db.repositoryDao.allFlowable
.observeOn(Schedulers.io())
.flatMapSingle { list -> RxUtils.querySingle { list } }
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { repositories = it }
}
override fun setupAdapters() {
installedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) }
@ -89,5 +76,8 @@ class InstalledFragment : MainNavFragmentX() {
binding.updatedBar.visibility = if (it.isNotEmpty()) View.VISIBLE else View.GONE
updatedItemAdapter.submitList(it)
}
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }
}
}
}

View File

@ -12,11 +12,8 @@ import com.looker.droidify.databinding.FragmentLatestXBinding
import com.looker.droidify.ui.items.HAppItem
import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class LatestFragment : MainNavFragmentX() {
@ -44,16 +41,6 @@ class LatestFragment : MainNavFragmentX() {
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.db.repositoryDao.allFlowable
.observeOn(Schedulers.io())
.flatMapSingle { list -> RxUtils.querySingle { list } }
.map { list -> list.asSequence().map { Pair(it.id, it) }.toMap() }
.observeOn(AndroidSchedulers.mainThread())
.subscribe { repositories = it }
}
override fun setupAdapters() {
updatedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) }
@ -83,5 +70,8 @@ class LatestFragment : MainNavFragmentX() {
viewModel.secondaryProducts.observe(viewLifecycleOwner) {
newItemAdapter.submitList(it)
}
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }
}
}
}

View File

@ -1,15 +1,13 @@
package com.looker.droidify.ui.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.*
import androidx.paging.DataSource
import androidx.paging.LivePagedListBuilder
import androidx.paging.PagedList
import com.looker.droidify.content.Preferences
import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.entity.Product
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Order
import com.looker.droidify.entity.Section
import com.looker.droidify.ui.fragments.Request
@ -121,6 +119,12 @@ class MainNavFragmentViewModelX(val db: DatabaseX, primarySource: Source, second
).build()
}
val repositories = MediatorLiveData<List<Repository>>()
init {
repositories.addSource(db.repositoryDao.allLive, repositories::setValue)
}
fun fillList(source: Source) {
viewModelScope.launch(Dispatchers.Default) {
// productsList = query(request(source))