Add debouncing to observeNotificationSettings.

This should conceal a bit the issue with notification settings 'flashing' when we receive an update.
This commit is contained in:
Jorge Martín 2023-08-17 15:23:34 +02:00 committed by yostyle
parent e59d37fc0d
commit 675b3ab383

View file

@ -30,10 +30,14 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.matrix.api.room.roomNotificationSettings import io.element.android.libraries.matrix.api.room.roomNotificationSettings
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
class RoomNotificationSettingsPresenter @Inject constructor( class RoomNotificationSettingsPresenter @Inject constructor(
private val room: MatrixRoom, private val room: MatrixRoom,
@ -71,6 +75,8 @@ class RoomNotificationSettingsPresenter @Inject constructor(
} }
} }
Timber.d("NotifState: $roomNotificationSettingsState")
return RoomNotificationSettingsState( return RoomNotificationSettingsState(
roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(), roomNotificationSettings = roomNotificationSettingsState.roomNotificationSettings(),
defaultRoomNotificationMode = defaultRoomNotificationMode.value, defaultRoomNotificationMode = defaultRoomNotificationMode.value,
@ -78,10 +84,14 @@ class RoomNotificationSettingsPresenter @Inject constructor(
) )
} }
@OptIn(FlowPreview::class)
private fun CoroutineScope.observeNotificationSettings() { private fun CoroutineScope.observeNotificationSettings() {
notificationSettingsService.notificationSettingsChangeFlow.onEach { notificationSettingsService.notificationSettingsChangeFlow
room.updateRoomNotificationSettings() .debounce(0.5.seconds)
}.launchIn(this) .onEach {
room.updateRoomNotificationSettings()
}
.launchIn(this)
} }
private fun CoroutineScope.getDefaultRoomNotificationMode(defaultRoomNotificationMode: MutableState<RoomNotificationMode?>) = launch { private fun CoroutineScope.getDefaultRoomNotificationMode(defaultRoomNotificationMode: MutableState<RoomNotificationMode?>) = launch {