@@ -52,7 +52,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService
5252import io.element.android.libraries.matrix.api.encryption.RecoveryState
5353import io.element.android.libraries.matrix.api.roomlist.RoomList
5454import io.element.android.libraries.matrix.api.sync.SyncService
55- import io.element.android.libraries.matrix.api.sync.SyncState
5655import io.element.android.libraries.matrix.api.timeline.ReceiptType
5756import io.element.android.libraries.preferences.api.store.SessionPreferencesStore
5857import io.element.android.libraries.push.api.notifications.NotificationCleaner
@@ -173,33 +172,48 @@ class RoomListPresenter @Inject constructor(
173172 }
174173
175174 @Composable
176- private fun securityBannerState (
175+ private fun rememberSecurityBannerState (
177176 securityBannerDismissed : Boolean ,
178177 needsSlidingSyncMigration : Boolean ,
179178 ): State <SecurityBannerState > {
180179 val currentSecurityBannerDismissed by rememberUpdatedState(securityBannerDismissed)
180+ val currentNeedsSlidingSyncMigration by rememberUpdatedState(needsSlidingSyncMigration)
181181 val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
182- val syncState by syncService.syncState.collectAsState()
183182 return remember {
184183 derivedStateOf {
185- when {
186- currentSecurityBannerDismissed -> SecurityBannerState .None
187- syncState == SyncState .Running -> {
188- when (recoveryState) {
189- RecoveryState .DISABLED -> SecurityBannerState .SetUpRecovery
190- RecoveryState .INCOMPLETE -> SecurityBannerState .RecoveryKeyConfirmation
191- RecoveryState .UNKNOWN ,
192- RecoveryState .WAITING_FOR_SYNC ,
193- RecoveryState .ENABLED -> SecurityBannerState .None
194- }
195- }
196- needsSlidingSyncMigration -> SecurityBannerState .NeedsNativeSlidingSyncMigration
197- else -> SecurityBannerState .None
198- }
184+ calculateBannerState(
185+ securityBannerDismissed = currentSecurityBannerDismissed,
186+ needsSlidingSyncMigration = currentNeedsSlidingSyncMigration,
187+ recoveryState = recoveryState,
188+ )
199189 }
200190 }
201191 }
202192
193+ private fun calculateBannerState (
194+ securityBannerDismissed : Boolean ,
195+ needsSlidingSyncMigration : Boolean ,
196+ recoveryState : RecoveryState ,
197+ ): SecurityBannerState {
198+ if (securityBannerDismissed) {
199+ return SecurityBannerState .None
200+ }
201+
202+ when (recoveryState) {
203+ RecoveryState .DISABLED -> return SecurityBannerState .SetUpRecovery
204+ RecoveryState .INCOMPLETE -> return SecurityBannerState .RecoveryKeyConfirmation
205+ RecoveryState .UNKNOWN ,
206+ RecoveryState .WAITING_FOR_SYNC ,
207+ RecoveryState .ENABLED -> Unit
208+ }
209+
210+ if (needsSlidingSyncMigration) {
211+ return SecurityBannerState .NeedsNativeSlidingSyncMigration
212+ }
213+
214+ return SecurityBannerState .None
215+ }
216+
203217 @Composable
204218 private fun roomListContentState (
205219 securityBannerDismissed : Boolean ,
@@ -228,7 +242,7 @@ class RoomListPresenter @Inject constructor(
228242 showEmpty -> RoomListContentState .Empty
229243 showSkeleton -> RoomListContentState .Skeleton (count = 16 )
230244 else -> {
231- val securityBannerState by securityBannerState (securityBannerDismissed, needsSlidingSyncMigration)
245+ val securityBannerState by rememberSecurityBannerState (securityBannerDismissed, needsSlidingSyncMigration)
232246 RoomListContentState .Rooms (
233247 securityBannerState = securityBannerState,
234248 fullScreenIntentPermissionsState = fullScreenIntentPermissionsPresenter.present(),
0 commit comments