Improve: Faster Execution of ViewModel fun's

This commit is contained in:
LooKeR 2021-11-26 21:42:42 +05:30
parent 5508be93ca
commit f6ed9e9a92

View File

@ -35,9 +35,11 @@ class AppListViewModel : ViewModel() {
var mSearchQuery = "" var mSearchQuery = ""
var mSections: ProductItem.Section = ProductItem.Section.All var mSections: ProductItem.Section = ProductItem.Section.All
var mOrder: ProductItem.Order = ProductItem.Order.NAME var mOrder: ProductItem.Order = ProductItem.Order.NAME
viewModelScope.launch { searchQuery.collect { if (source.sections) mSearchQuery = it } } viewModelScope.launch {
viewModelScope.launch { sections.collect { if (source.sections) mSections = it } } launch { searchQuery.collect { if (source.sections) mSearchQuery = it } }
viewModelScope.launch { order.collect { if (source.order) mOrder = it } } launch { sections.collect { if (source.sections) mSections = it } }
launch { order.collect { if (source.order) mOrder = it } }
}
return when (source) { return when (source) {
AppListFragment.Source.AVAILABLE -> CursorOwner.Request.ProductsAvailable( AppListFragment.Source.AVAILABLE -> CursorOwner.Request.ProductsAvailable(
mSearchQuery, mSearchQuery,
@ -58,28 +60,28 @@ class AppListViewModel : ViewModel() {
} }
fun setSection(newSection: ProductItem.Section, perform: () -> Unit) { fun setSection(newSection: ProductItem.Section, perform: () -> Unit) {
viewModelScope.launch(Dispatchers.Main) { viewModelScope.launch {
if (newSection != sections.value) { if (newSection != sections.value) {
_sections.emit(newSection) _sections.emit(newSection)
perform() launch(Dispatchers.Main) { perform() }
} }
} }
} }
fun setOrder(newOrder: ProductItem.Order, perform: () -> Unit) { fun setOrder(newOrder: ProductItem.Order, perform: () -> Unit) {
viewModelScope.launch(Dispatchers.Main) { viewModelScope.launch {
if (newOrder != order.value) { if (newOrder != order.value) {
_order.emit(newOrder) _order.emit(newOrder)
perform() launch(Dispatchers.Main) { perform() }
} }
} }
} }
fun setSearchQuery(newSearchQuery: String, perform: () -> Unit) { fun setSearchQuery(newSearchQuery: String, perform: () -> Unit) {
viewModelScope.launch(Dispatchers.Main) { viewModelScope.launch {
if (newSearchQuery != searchQuery.value) { if (newSearchQuery != searchQuery.value) {
_searchQuery.emit(newSearchQuery) _searchQuery.emit(newSearchQuery)
perform() launch(Dispatchers.Main) { perform() }
} }
} }
} }