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

Loading…
Cancel
Save