Browse Source

Add debouncing to `observeNotificationSettings`.

This should conceal a bit the issue with notification settings 'flashing' when we receive an update.
pull/1037/head
Jorge Martín 1 year ago committed by yostyle
parent
commit
a210945bb1
  1. 14
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt

14
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt

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

Loading…
Cancel
Save