diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsDataProvider.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsDataProvider.swift index d54d865ac..c154e4b82 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsDataProvider.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsDataProvider.swift @@ -57,8 +57,17 @@ class UserSessionsDataProvider: UserSessionsDataProviderProtocol { guard let deviceInfo = deviceInfo else { return .permanentlyUnverified } - - guard session.crypto?.crossSigning.canCrossSign == true else { + + // When the app is launched offline the cross signing state is "notBootstrapped" + // In this edge case the verification state returned is `.unknown` since we cannot say more even for the current session. + guard + let crossSigning = session.crypto?.crossSigning, + crossSigning.state.rawValue > MXCrossSigningState.notBootstrapped.rawValue + else { + return .unknown + } + + guard crossSigning.canCrossSign else { return deviceInfo.deviceId == session.myDeviceId ? .unverified : .unknown } diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsOverviewService.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsOverviewService.swift index 9869ecd1b..57851bb8b 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsOverviewService.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/Service/MatrixSDK/UserSessionsOverviewService.swift @@ -94,7 +94,7 @@ class UserSessionsOverviewService: UserSessionsOverviewServiceProtocol { } overviewDataPublisher = .init(UserSessionsOverviewData(currentSession: currentSessionInfo, - unverifiedSessions: currentSessionInfo.verificationState == .verified ? [] : [currentSessionInfo], + unverifiedSessions: currentSessionInfo.verificationState.isUnverified ? [currentSessionInfo] : [], inactiveSessions: currentSessionInfo.isActive ? [] : [currentSessionInfo], otherSessions: [], linkDeviceEnabled: false)) diff --git a/RiotTests/UserSessionsDataProviderTests.swift b/RiotTests/UserSessionsDataProviderTests.swift index 69b1b0229..7d5d9f59c 100644 --- a/RiotTests/UserSessionsDataProviderTests.swift +++ b/RiotTests/UserSessionsDataProviderTests.swift @@ -209,6 +209,9 @@ private class MockCrossSigning: MXLegacyCrossSigning { super.init() } + override var state: MXCrossSigningState { + .crossSigningExists + } } /// A mock `MXDeviceInfo` that can override the `isVerified` state. diff --git a/changelog.d/pr-7562.bugfix b/changelog.d/pr-7562.bugfix new file mode 100644 index 000000000..825d074f3 --- /dev/null +++ b/changelog.d/pr-7562.bugfix @@ -0,0 +1 @@ +Device manager: fix offline state for user's sessions overview. \ No newline at end of file