diff --git a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupTableViewSection.swift b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupTableViewSection.swift index de8381960..3ae1694cb 100644 --- a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupTableViewSection.swift +++ b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupTableViewSection.swift @@ -141,6 +141,14 @@ private enum BackupRows { .description(text: VectorL10n.securitySettingsSecureBackupDescription) ] + case .noSecureBackupButKeyBackup(let keyBackupVersion, let keyBackupVersionTrust): + backupRows = [ + .info(text: VectorL10n.securitySettingsSecureBackupInfoValid), + .restoreFromKeyBackupAction(keyBackupVersion: keyBackupVersion, title: VectorL10n.securitySettingsSecureBackupRestore), + .deleteKeyBackupAction(keyBackupVersion: keyBackupVersion), + .description(text: VectorL10n.securitySettingsSecureBackupDescription) + ] + case .noKeyBackup: let noBackup = VectorL10n.settingsKeyBackupInfoNone let signoutWarning = VectorL10n.settingsKeyBackupInfoSignoutWarning diff --git a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewModel.swift b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewModel.swift index 594fd8e3c..48040ef1e 100644 --- a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewModel.swift +++ b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewModel.swift @@ -85,12 +85,6 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType { private func computeState(withBackupVersionTrust keyBackupVersionTrust: MXKeyBackupVersionTrust? = nil) { - // We want to have a secure backup before having a key backup - if recoveryService.hasRecovery() == false { - self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: .noSecureBackup) - return - } - var viewState: SettingsSecureBackupViewState? switch self.keyBackup.state { @@ -129,9 +123,23 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType { default: break } + + // We want to have a secure backup before having a key backup + if recoveryService.hasRecovery() == false { + switch viewState { + case .checkingBackup: + break + case .keyBackup(let keyBackupVersion, let keyBackupVersionTrust), + .keyBackupAndRunning(let keyBackupVersion, let keyBackupVersionTrust, _), + .keyBackupNotTrusted(let keyBackupVersion, let keyBackupVersionTrust): + viewState = .noSecureBackupButKeyBackup(keyBackupVersion, keyBackupVersionTrust) + default: + viewState = .noSecureBackup + } + } - if let vviewState = viewState { - self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: vviewState) + if let viewState = viewState { + self.viewDelegate?.settingsSecureBackupViewModel(self, didUpdateViewState: viewState) } } diff --git a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewState.swift b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewState.swift index e8b164338..4c4138981 100644 --- a/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewState.swift +++ b/Riot/Modules/Settings/Security/SecureBackup/SettingsSecureBackupViewState.swift @@ -27,6 +27,7 @@ import UIKit enum SettingsSecureBackupViewState { case checkingBackup case noSecureBackup + case noSecureBackupButKeyBackup(MXKeyBackupVersion, MXKeyBackupVersionTrust) case noKeyBackup case keyBackup(MXKeyBackupVersion, MXKeyBackupVersionTrust) case keyBackupAndRunning(MXKeyBackupVersion, MXKeyBackupVersionTrust, Progress)