mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
Security settings: Manage the case when there is no secure backup
This commit is contained in:
parent
5d526fdb82
commit
ed7eb4edc6
4 changed files with 48 additions and 4 deletions
|
@ -40,6 +40,7 @@ import UIKit
|
|||
private enum BackupRows {
|
||||
case info(text: String)
|
||||
case description(text: String)
|
||||
case createSecureBackupAction
|
||||
case resetSecureBackupAction
|
||||
case createKeyBackupAction
|
||||
case restoreFromKeyBackupAction(keyBackupVersion: MXKeyBackupVersion, title: String)
|
||||
|
@ -71,8 +72,8 @@ private enum BackupRows {
|
|||
|
||||
// MARK: - Public
|
||||
|
||||
@objc init(withKeyBackup keyBackup: MXKeyBackup, userDevice: MXDeviceInfo) {
|
||||
self.viewModel = SettingsSecureBackupViewModel(keyBackup: keyBackup)
|
||||
@objc init(withRecoveryService recoveryService: MXRecoveryService, keyBackup: MXKeyBackup, userDevice: MXDeviceInfo) {
|
||||
self.viewModel = SettingsSecureBackupViewModel(recoveryService: recoveryService, keyBackup: keyBackup)
|
||||
self.userDevice = userDevice
|
||||
super.init()
|
||||
self.viewModel.viewDelegate = self
|
||||
|
@ -93,6 +94,8 @@ private enum BackupRows {
|
|||
cell = self.textCell(atRow: row, text: text)
|
||||
case .description(let text):
|
||||
cell = self.descriptionCell(atRow: row, text: text)
|
||||
case .createSecureBackupAction:
|
||||
cell = self.buttonCellForCreateSecureBackup(atRow: row)
|
||||
case .resetSecureBackupAction:
|
||||
cell = self.buttonCellForResetSecureBackup(atRow: row)
|
||||
case .createKeyBackupAction:
|
||||
|
@ -127,6 +130,17 @@ private enum BackupRows {
|
|||
.description(text: VectorL10n.securitySettingsSecureBackupDescription)
|
||||
]
|
||||
|
||||
case .noSecureBackup:
|
||||
let noBackup = VectorL10n.settingsKeyBackupInfoNone
|
||||
let signoutWarning = VectorL10n.settingsKeyBackupInfoSignoutWarning
|
||||
let infoText = [noBackup, signoutWarning].joined(separator: "\n")
|
||||
|
||||
backupRows = [
|
||||
.info(text: infoText),
|
||||
.createSecureBackupAction,
|
||||
.description(text: VectorL10n.securitySettingsSecureBackupDescription)
|
||||
]
|
||||
|
||||
case .noKeyBackup:
|
||||
let noBackup = VectorL10n.settingsKeyBackupInfoNone
|
||||
let signoutWarning = VectorL10n.settingsKeyBackupInfoSignoutWarning
|
||||
|
@ -214,6 +228,25 @@ private enum BackupRows {
|
|||
|
||||
// MARK: - Button cells
|
||||
|
||||
private func buttonCellForCreateSecureBackup(atRow row: Int) -> UITableViewCell {
|
||||
|
||||
guard let delegate = self.delegate else {
|
||||
return UITableViewCell()
|
||||
}
|
||||
|
||||
let cell: MXKTableViewCellWithButton = delegate.settingsSecureBackupTableViewSection(self, buttonCellForRow: row)
|
||||
|
||||
let btnTitle = VectorL10n.securitySettingsSecureBackupSetup
|
||||
cell.mxkButton.setTitle(btnTitle, for: .normal)
|
||||
cell.mxkButton.setTitle(btnTitle, for: .highlighted)
|
||||
|
||||
cell.mxkButton.vc_addAction {
|
||||
self.viewModel.process(viewAction: .createSecureBackup)
|
||||
}
|
||||
|
||||
return cell
|
||||
}
|
||||
|
||||
private func buttonCellForResetSecureBackup(atRow row: Int) -> UITableViewCell {
|
||||
|
||||
guard let delegate = self.delegate else {
|
||||
|
|
|
@ -18,6 +18,7 @@ import UIKit
|
|||
|
||||
enum SettingsSecureBackupViewAction {
|
||||
case load
|
||||
case createSecureBackup
|
||||
case resetSecureBackup
|
||||
case createKeyBackup
|
||||
case restoreFromKeyBackup(MXKeyBackupVersion)
|
||||
|
|
|
@ -22,9 +22,11 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType {
|
|||
weak var viewDelegate: SettingsSecureBackupViewModelViewDelegate?
|
||||
|
||||
// MARK: Private
|
||||
private let recoveryService: MXRecoveryService
|
||||
private let keyBackup: MXKeyBackup
|
||||
|
||||
init(keyBackup: MXKeyBackup) {
|
||||
init(recoveryService: MXRecoveryService, keyBackup: MXKeyBackup) {
|
||||
self.recoveryService = recoveryService
|
||||
self.keyBackup = keyBackup
|
||||
self.registerKeyBackupVersionDidChangeStateNotification()
|
||||
}
|
||||
|
@ -46,7 +48,8 @@ final class SettingsSecureBackupViewModel: SettingsSecureBackupViewModelType {
|
|||
case .load:
|
||||
viewDelegate.settingsSecureBackupViewModel(self, didUpdateViewState: .checkingBackup)
|
||||
self.checkKeyBackupState()
|
||||
case .resetSecureBackup:
|
||||
case .resetSecureBackup,
|
||||
.createSecureBackup: // The implement supports both
|
||||
viewDelegate.settingsSecureBackupViewModelShowSecureBackupReset(self)
|
||||
case .createKeyBackup:
|
||||
viewDelegate.settingsSecureBackupViewModelShowKeyBackupCreate(self)
|
||||
|
@ -82,6 +85,12 @@ 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 {
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import UIKit
|
|||
/// - keyBackupNotTrusted: There is a backup on the homeserver but it is not trusted
|
||||
enum SettingsSecureBackupViewState {
|
||||
case checkingBackup
|
||||
case noSecureBackup
|
||||
case noKeyBackup
|
||||
case keyBackup(MXKeyBackupVersion, MXKeyBackupVersionTrust)
|
||||
case keyBackupAndRunning(MXKeyBackupVersion, MXKeyBackupVersionTrust, Progress)
|
||||
|
|
Loading…
Reference in a new issue