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.databinding.FragmentExploreXBinding
import com.looker.droidify.ui.items.VAppItem import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.IAdapter import com.mikepenz.fastadapter.IAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter 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 // TODO add chips bar to navigate categories
class ExploreFragment : MainNavFragmentX() { class ExploreFragment : MainNavFragmentX() {
@ -40,16 +37,6 @@ class ExploreFragment : MainNavFragmentX() {
return binding.root 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() { override fun setupAdapters() {
appsItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) { appsItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) } it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) }
@ -76,5 +63,8 @@ class ExploreFragment : MainNavFragmentX() {
appsItemAdapter.submitList(it) appsItemAdapter.submitList(it)
appsFastAdapter?.notifyDataSetChanged() 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.HAppItem
import com.looker.droidify.ui.items.VAppItem import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter import com.mikepenz.fastadapter.paged.PagedModelAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class InstalledFragment : MainNavFragmentX() { class InstalledFragment : MainNavFragmentX() {
@ -43,16 +40,6 @@ class InstalledFragment : MainNavFragmentX() {
return binding.root 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() { override fun setupAdapters() {
installedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) { installedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) } 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 binding.updatedBar.visibility = if (it.isNotEmpty()) View.VISIBLE else View.GONE
updatedItemAdapter.submitList(it) 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.HAppItem
import com.looker.droidify.ui.items.VAppItem import com.looker.droidify.ui.items.VAppItem
import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG import com.looker.droidify.utility.PRODUCT_ASYNC_DIFFER_CONFIG
import com.looker.droidify.utility.RxUtils
import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.paged.PagedModelAdapter import com.mikepenz.fastadapter.paged.PagedModelAdapter
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class LatestFragment : MainNavFragmentX() { class LatestFragment : MainNavFragmentX() {
@ -44,16 +41,6 @@ class LatestFragment : MainNavFragmentX() {
return binding.root 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() { override fun setupAdapters() {
updatedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) { updatedItemAdapter = PagedModelAdapter<Product, VAppItem>(PRODUCT_ASYNC_DIFFER_CONFIG) {
it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) } it.item?.let { item -> VAppItem(item, repositories[it.repository_id]) }
@ -83,5 +70,8 @@ class LatestFragment : MainNavFragmentX() {
viewModel.secondaryProducts.observe(viewLifecycleOwner) { viewModel.secondaryProducts.observe(viewLifecycleOwner) {
newItemAdapter.submitList(it) 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 package com.looker.droidify.ui.viewmodels
import androidx.lifecycle.LiveData import androidx.lifecycle.*
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.paging.DataSource import androidx.paging.DataSource
import androidx.paging.LivePagedListBuilder import androidx.paging.LivePagedListBuilder
import androidx.paging.PagedList import androidx.paging.PagedList
import com.looker.droidify.content.Preferences import com.looker.droidify.content.Preferences
import com.looker.droidify.database.DatabaseX import com.looker.droidify.database.DatabaseX
import com.looker.droidify.database.entity.Product 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.Order
import com.looker.droidify.entity.Section import com.looker.droidify.entity.Section
import com.looker.droidify.ui.fragments.Request import com.looker.droidify.ui.fragments.Request
@ -121,6 +119,12 @@ class MainNavFragmentViewModelX(val db: DatabaseX, primarySource: Source, second
).build() ).build()
} }
val repositories = MediatorLiveData<List<Repository>>()
init {
repositories.addSource(db.repositoryDao.allLive, repositories::setValue)
}
fun fillList(source: Source) { fun fillList(source: Source) {
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
// productsList = query(request(source)) // productsList = query(request(source))