Add: Filter updated indicator to VM

This commit is contained in:
machiav3lli 2022-09-26 02:22:27 +02:00
parent 499ebd1f4d
commit 7c752a2015

View File

@ -5,13 +5,11 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.machiav3lli.fdroid.content.Preferences
import com.machiav3lli.fdroid.database.DatabaseX import com.machiav3lli.fdroid.database.DatabaseX
import com.machiav3lli.fdroid.database.entity.Extras import com.machiav3lli.fdroid.database.entity.Extras
import com.machiav3lli.fdroid.database.entity.Installed import com.machiav3lli.fdroid.database.entity.Installed
import com.machiav3lli.fdroid.database.entity.Product import com.machiav3lli.fdroid.database.entity.Product
import com.machiav3lli.fdroid.database.entity.Repository import com.machiav3lli.fdroid.database.entity.Repository
import com.machiav3lli.fdroid.entity.Order
import com.machiav3lli.fdroid.entity.Request import com.machiav3lli.fdroid.entity.Request
import com.machiav3lli.fdroid.entity.Section import com.machiav3lli.fdroid.entity.Section
import com.machiav3lli.fdroid.entity.Source import com.machiav3lli.fdroid.entity.Source
@ -27,7 +25,7 @@ class MainNavFragmentViewModelX(
) : ViewModel() { ) : ViewModel() {
// TODO add better sort/filter fields // TODO add better sort/filter fields
var order: MutableLiveData<Order> = MutableLiveData(Order.LAST_UPDATE) var updatedFilter: MutableLiveData<Boolean> = MutableLiveData(false)
private set private set
var sections: MutableLiveData<Section> = MutableLiveData(Section.All) var sections: MutableLiveData<Section> = MutableLiveData(Section.All)
private set private set
@ -37,37 +35,28 @@ class MainNavFragmentViewModelX(
fun request(source: Source): Request { fun request(source: Source): Request {
var mSearchQuery = "" var mSearchQuery = ""
var mSections: Section = Section.All var mSections: Section = Section.All
var mOrder: Order = Order.NAME
sections.value?.let { if (source.sections) mSections = it } sections.value?.let { if (source.sections) mSections = it }
order.value?.let { if (source.order) mOrder = it }
searchQuery.value?.let { mSearchQuery = it } searchQuery.value?.let { mSearchQuery = it }
return when (source) { return when (source) {
Source.AVAILABLE -> Request.ProductsAll( Source.AVAILABLE -> Request.ProductsAll(
mSearchQuery, mSearchQuery,
mSections, mSections
mOrder
) )
Source.INSTALLED -> Request.ProductsInstalled( Source.INSTALLED -> Request.ProductsInstalled(
mSearchQuery, mSearchQuery,
mSections, mSections
mOrder
) )
Source.UPDATES -> Request.ProductsUpdates( Source.UPDATES -> Request.ProductsUpdates(
mSearchQuery, mSearchQuery,
mSections, mSections,
mOrder
) )
Source.UPDATED -> Request.ProductsUpdated( Source.UPDATED -> Request.ProductsUpdated(
mSearchQuery, mSearchQuery,
mSections, mSections,
Order.LAST_UPDATE,
Preferences[Preferences.Key.UpdatedApps]
) )
Source.NEW -> Request.ProductsNew( Source.NEW -> Request.ProductsNew(
mSearchQuery, mSearchQuery,
mSections, mSections,
Order.DATE_ADDED,
Preferences[Preferences.Key.NewApps]
) )
} }
} }
@ -93,13 +82,20 @@ class MainNavFragmentViewModelX(
) )
repositories.addSource(db.repositoryDao.allLive, repositories::setValue) repositories.addSource(db.repositoryDao.allLive, repositories::setValue)
categories.addSource(db.categoryDao.allNamesLive, categories::setValue) categories.addSource(db.categoryDao.allNamesLive, categories::setValue)
listOf(sections, order, searchQuery).forEach { listOf(sections, searchQuery).forEach {
primaryRequest.addSource(it) { primaryRequest.addSource(it) {
val newRequest = request(primarySource) val newRequest = request(primarySource)
if (primaryRequest.value != newRequest) if (primaryRequest.value != newRequest)
primaryRequest.value = newRequest primaryRequest.value = newRequest
} }
} }
primaryRequest.addSource(updatedFilter) {
if (it) {
val newRequest = request(primarySource)
primaryRequest.value = newRequest
updatedFilter.postValue(false)
}
}
primaryProducts.addSource(primaryRequest) { request -> primaryProducts.addSource(primaryRequest) { request ->
val updateTime = System.currentTimeMillis() val updateTime = System.currentTimeMillis()
viewModelScope.launch { viewModelScope.launch {