Skip to content

Commit 5a4e5d0

Browse files
authored
Fix the logic of the room list banner state (#3615)
* Fix `deriveStateOf` preventing the banner state from updating * Try improving implementation of the check * No need for `syncState`
1 parent 409564a commit 5a4e5d0

File tree

1 file changed

+32
-18
lines changed
  • features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl

1 file changed

+32
-18
lines changed

features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService
5252
import io.element.android.libraries.matrix.api.encryption.RecoveryState
5353
import io.element.android.libraries.matrix.api.roomlist.RoomList
5454
import io.element.android.libraries.matrix.api.sync.SyncService
55-
import io.element.android.libraries.matrix.api.sync.SyncState
5655
import io.element.android.libraries.matrix.api.timeline.ReceiptType
5756
import io.element.android.libraries.preferences.api.store.SessionPreferencesStore
5857
import 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

Comments
 (0)