Throttle drawer updates

pull/3279/head
Alex Baker 11 months ago
parent f6805f325c
commit 4c3ba4cb72

@ -16,6 +16,8 @@ import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -23,6 +25,7 @@ import org.tasks.LocalBroadcastManager
import org.tasks.TasksApplication.Companion.IS_GENERIC import org.tasks.TasksApplication.Companion.IS_GENERIC
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.compose.drawer.DrawerItem import org.tasks.compose.drawer.DrawerItem
import org.tasks.compose.throttleLatest
import org.tasks.data.NO_COUNT import org.tasks.data.NO_COUNT
import org.tasks.data.count import org.tasks.data.count
import org.tasks.data.dao.CaldavDao import org.tasks.data.dao.CaldavDao
@ -36,6 +39,7 @@ import org.tasks.filters.getIcon
import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.TasksPreferences import org.tasks.preferences.TasksPreferences
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -63,6 +67,7 @@ class MainActivityViewModel @Inject constructor(
private val _drawerOpen = MutableStateFlow(false) private val _drawerOpen = MutableStateFlow(false)
val drawerOpen = _drawerOpen.asStateFlow() val drawerOpen = _drawerOpen.asStateFlow()
private val _updateFilters = MutableStateFlow(0L)
private val _state = MutableStateFlow( private val _state = MutableStateFlow(
State( State(
@ -80,7 +85,7 @@ class MainActivityViewModel @Inject constructor(
override fun onReceive(context: Context?, intent: Intent?) { override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) { when (intent?.action) {
LocalBroadcastManager.REFRESH, LocalBroadcastManager.REFRESH,
LocalBroadcastManager.REFRESH_LIST -> updateFilters() LocalBroadcastManager.REFRESH_LIST -> _updateFilters.update { currentTimeMillis() }
} }
} }
} }
@ -117,14 +122,17 @@ class MainActivityViewModel @Inject constructor(
init { init {
localBroadcastManager.registerRefreshListReceiver(refreshReceiver) localBroadcastManager.registerRefreshListReceiver(refreshReceiver)
updateFilters() _updateFilters
.throttleLatest(1000)
.onEach { updateFilters() }
.launchIn(viewModelScope)
} }
override fun onCleared() { override fun onCleared() {
localBroadcastManager.unregisterReceiver(refreshReceiver) localBroadcastManager.unregisterReceiver(refreshReceiver)
} }
fun updateFilters() = viewModelScope.launch(Dispatchers.Default) { private fun updateFilters() = viewModelScope.launch(Dispatchers.IO) {
val selected = state.value.filter val selected = state.value.filter
filterProvider filterProvider
.drawerItems() .drawerItems()

Loading…
Cancel
Save