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
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
.debounce(0.5.seconds)
.onEach {
room.updateRoomNotificationSettings() room.updateRoomNotificationSettings()
}.launchIn(this) }
.launchIn(this)
} }
private fun CoroutineScope.getDefaultRoomNotificationMode(defaultRoomNotificationMode: MutableState<RoomNotificationMode?>) = launch { private fun CoroutineScope.getDefaultRoomNotificationMode(defaultRoomNotificationMode: MutableState<RoomNotificationMode?>) = launch {

Loading…
Cancel
Save