Small improvement to avoid tou many viewState updates

This commit is contained in:
Maxime NATUREL 2022-10-27 15:20:43 +02:00
parent 52a77e074f
commit ac05e757be
2 changed files with 3 additions and 4 deletions

View file

@ -18,6 +18,7 @@ package im.vector.app.features.settings.devices.v2.notification
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import org.matrix.android.sdk.api.account.LocalNotificationSettingsContent import org.matrix.android.sdk.api.account.LocalNotificationSettingsContent
@ -43,6 +44,7 @@ class GetNotificationsStatusUseCase @Inject constructor(
.map { it.filter { pusher -> pusher.deviceId == deviceId } } .map { it.filter { pusher -> pusher.deviceId == deviceId } }
.map { it.takeIf { it.isNotEmpty() }?.any { pusher -> pusher.enabled } } .map { it.takeIf { it.isNotEmpty() }?.any { pusher -> pusher.enabled } }
.map { if (it == true) NotificationsStatus.ENABLED else NotificationsStatus.DISABLED } .map { if (it == true) NotificationsStatus.ENABLED else NotificationsStatus.DISABLED }
.distinctUntilChanged()
} }
checkIfCanTogglePushNotificationsViaAccountDataUseCase.execute(deviceId) -> { checkIfCanTogglePushNotificationsViaAccountDataUseCase.execute(deviceId) -> {
session.flow() session.flow()
@ -50,6 +52,7 @@ class GetNotificationsStatusUseCase @Inject constructor(
.unwrap() .unwrap()
.map { it.content.toModel<LocalNotificationSettingsContent>()?.isSilenced?.not() } .map { it.content.toModel<LocalNotificationSettingsContent>()?.isSilenced?.not() }
.map { if (it == true) NotificationsStatus.ENABLED else NotificationsStatus.DISABLED } .map { if (it == true) NotificationsStatus.ENABLED else NotificationsStatus.DISABLED }
.distinctUntilChanged()
} }
else -> flowOf(NotificationsStatus.NOT_SUPPORTED) else -> flowOf(NotificationsStatus.NOT_SUPPORTED)
} }

View file

@ -30,7 +30,6 @@ import im.vector.app.features.auth.PendingAuthHandler
import im.vector.app.features.settings.devices.v2.RefreshDevicesUseCase import im.vector.app.features.settings.devices.v2.RefreshDevicesUseCase
import im.vector.app.features.settings.devices.v2.VectorSessionsListViewModel import im.vector.app.features.settings.devices.v2.VectorSessionsListViewModel
import im.vector.app.features.settings.devices.v2.notification.GetNotificationsStatusUseCase import im.vector.app.features.settings.devices.v2.notification.GetNotificationsStatusUseCase
import im.vector.app.features.settings.devices.v2.notification.NotificationsStatus
import im.vector.app.features.settings.devices.v2.notification.TogglePushNotificationUseCase import im.vector.app.features.settings.devices.v2.notification.TogglePushNotificationUseCase
import im.vector.app.features.settings.devices.v2.signout.InterceptSignoutFlowResponseUseCase import im.vector.app.features.settings.devices.v2.signout.InterceptSignoutFlowResponseUseCase
import im.vector.app.features.settings.devices.v2.signout.SignoutSessionResult import im.vector.app.features.settings.devices.v2.signout.SignoutSessionResult
@ -220,9 +219,6 @@ class SessionOverviewViewModel @AssistedInject constructor(
private fun handleTogglePusherAction(action: SessionOverviewAction.TogglePushNotifications) { private fun handleTogglePusherAction(action: SessionOverviewAction.TogglePushNotifications) {
viewModelScope.launch { viewModelScope.launch {
togglePushNotificationUseCase.execute(action.deviceId, action.enabled) togglePushNotificationUseCase.execute(action.deviceId, action.enabled)
// TODO should not be needed => test without
val status = if (action.enabled) NotificationsStatus.ENABLED else NotificationsStatus.DISABLED
setState { copy(notificationsStatus = status) }
} }
} }
} }