From 0de85dd93cd97b877f4f2b0b14bcfc14f768eb9e Mon Sep 17 00:00:00 2001 From: manuroe Date: Thu, 31 Jan 2019 09:45:03 +0100 Subject: [PATCH] key backup settings: add delete confirmation dialog --- Riot/Assets/en.lproj/Vector.strings | 3 ++ Riot/Generated/Strings.swift | 12 ++++++++ .../SettingsKeyBackupTableViewSection.swift | 13 ++++++-- .../SettingsKeyBackupViewAction.swift | 1 + .../SettingsKeyBackupViewModel.swift | 3 ++ .../SettingsKeyBackupViewModelType.swift | 1 + .../Modules/Settings/SettingsViewController.m | 30 +++++++++++++++++++ 7 files changed, 60 insertions(+), 3 deletions(-) diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index 9ad236d78..f1b8659bf 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -435,6 +435,9 @@ "settings_key_backup_info_trust_signature_invalid_device_verified" = "Backup has a invalid signature from verified device %@"; "settings_key_backup_info_trust_signature_invalid_device_unverified" = "Backup has a invalid signature from unverified device %@"; "settings_key_backup_button_create" = "Start a new backup"; +"settings_key_backup_button_delete" = "Delete backup"; +"settings_key_backup_delete_confirmation_prompt_title" = "Delete Backup"; +"settings_key_backup_delete_confirmation_prompt_msg" = "Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history"; // Room Details "room_details_title" = "Room Details"; diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index ecaaf2e4f..7f8c68f57 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -1926,6 +1926,18 @@ internal enum VectorL10n { internal static var settingsKeyBackupButtonCreate: String { return VectorL10n.tr("Vector", "settings_key_backup_button_create") } + /// Delete backup + internal static var settingsKeyBackupButtonDelete: String { + return VectorL10n.tr("Vector", "settings_key_backup_button_delete") + } + /// Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history + internal static var settingsKeyBackupDeleteConfirmationPromptMsg: String { + return VectorL10n.tr("Vector", "settings_key_backup_delete_confirmation_prompt_msg") + } + /// Delete Backup + internal static var settingsKeyBackupDeleteConfirmationPromptTitle: String { + return VectorL10n.tr("Vector", "settings_key_backup_delete_confirmation_prompt_title") + } /// Algorithm: %@ internal static func settingsKeyBackupInfoAlgorithm(_ p1: String) -> String { return VectorL10n.tr("Vector", "settings_key_backup_info_algorithm", p1) diff --git a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupTableViewSection.swift b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupTableViewSection.swift index e1e646d07..332139a0f 100644 --- a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupTableViewSection.swift +++ b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupTableViewSection.swift @@ -26,6 +26,7 @@ import UIKit func settingsKeyBackupTableViewSectionShowKeyBackupSetup(_ settingsKeyBackupTableViewSection: SettingsKeyBackupTableViewSection) func settingsKeyBackup(_ settingsKeyBackupTableViewSection: SettingsKeyBackupTableViewSection, showVerifyDevice deviceId:String) func settingsKeyBackup(_ settingsKeyBackupTableViewSection: SettingsKeyBackupTableViewSection, showKeyBackupRecover keyBackupVersion:MXKeyBackupVersion) + func settingsKeyBackup(_ settingsKeyBackupTableViewSection: SettingsKeyBackupTableViewSection, showKeyBackupDeleteConfirm keyBackupVersion:MXKeyBackupVersion) } @objc class SettingsKeyBackupTableViewSection: NSObject { @@ -56,6 +57,10 @@ import UIKit self.viewModel.process(viewAction: .load) } + @objc func delete(keyBackupVersion: MXKeyBackupVersion) { + self.viewModel.process(viewAction: .delete(keyBackupVersion)) + } + // MARK: - Private private func render(viewState: SettingsKeyBackupViewState) { @@ -281,13 +286,12 @@ import UIKit } let deleteCell:MXKTableViewCellWithButton = delegate.settingsKeyBackupTableViewSection(self, buttonCellForRow: fromCellIndex + 1) - let deleteTitle = "Delete backup" + let deleteTitle = VectorL10n.settingsKeyBackupButtonDelete deleteCell.mxkButton.setTitle(deleteTitle, for: .normal) deleteCell.mxkButton.setTitle(deleteTitle, for: .highlighted) deleteCell.mxkButton.tintColor = ThemeService.shared().theme.warningColor deleteCell.mxkButton.vc_addAction { - // TODO: Ask confirmation - self.viewModel.process(viewAction: .delete(keyBackupVersion)) + self.viewModel.process(viewAction: .confirmDelete(keyBackupVersion)) } return [restoreCell, deleteCell] @@ -309,4 +313,7 @@ extension SettingsKeyBackupTableViewSection: SettingsKeyBackupViewModelViewDeleg func settingsKeyBackup(_ viewModel: SettingsKeyBackupViewModelType, showKeyBackupRecover keyBackupVersion: MXKeyBackupVersion) { self.delegate?.settingsKeyBackup(self, showKeyBackupRecover: keyBackupVersion) } + func settingsKeyBackup(_ viewModel: SettingsKeyBackupViewModelType, showKeyBackupDeleteConfirm keyBackupVersion: MXKeyBackupVersion) { + self.delegate?.settingsKeyBackup(self, showKeyBackupDeleteConfirm: keyBackupVersion) + } } diff --git a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewAction.swift b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewAction.swift index aab4be8e4..f1748bf67 100644 --- a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewAction.swift +++ b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewAction.swift @@ -21,5 +21,6 @@ enum SettingsKeyBackupViewAction { case create case verify(String) case restore(MXKeyBackupVersion) + case confirmDelete(MXKeyBackupVersion) case delete(MXKeyBackupVersion) } diff --git a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModel.swift b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModel.swift index d93497fb7..ee5abb4d9 100644 --- a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModel.swift +++ b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModel.swift @@ -55,6 +55,9 @@ class SettingsKeyBackupViewModel: SettingsKeyBackupViewModelType { case .restore(let keyBackupVersion): viewDelegate.settingsKeyBackup(self, showKeyBackupRecover: keyBackupVersion) break + case .confirmDelete(let keyBackupVersion): + viewDelegate.settingsKeyBackup(self, showKeyBackupDeleteConfirm: keyBackupVersion) + break case .delete(let keyBackupVersion): self.deleteKeyBackupVersion(keyBackupVersion) break diff --git a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModelType.swift b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModelType.swift index 41b03dd77..9fb17cdd4 100644 --- a/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModelType.swift +++ b/Riot/Modules/Settings/KeyBackup/SettingsKeyBackupViewModelType.swift @@ -22,6 +22,7 @@ protocol SettingsKeyBackupViewModelViewDelegate: class { func settingsKeyBackupViewModelShowKeyBackupSetup(_ viewModel: SettingsKeyBackupViewModelType) func settingsKeyBackup(_ viewModel: SettingsKeyBackupViewModelType, showVerifyDevice deviceId:String) func settingsKeyBackup(_ viewModel: SettingsKeyBackupViewModelType, showKeyBackupRecover keyBackupVersion:MXKeyBackupVersion) + func settingsKeyBackup(_ viewModel: SettingsKeyBackupViewModelType, showKeyBackupDeleteConfirm keyBackupVersion:MXKeyBackupVersion) } protocol SettingsKeyBackupViewModelType { diff --git a/Riot/Modules/Settings/SettingsViewController.m b/Riot/Modules/Settings/SettingsViewController.m index 451c16661..497be828e 100644 --- a/Riot/Modules/Settings/SettingsViewController.m +++ b/Riot/Modules/Settings/SettingsViewController.m @@ -4304,6 +4304,36 @@ KeyBackupRecoverCoordinatorBridgePresenterDelegate> [self showKeyBackupRecover:keyBackupVersion]; } +- (void)settingsKeyBackup:(SettingsKeyBackupTableViewSection *)settingsKeyBackupTableViewSection showKeyBackupDeleteConfirm:(MXKeyBackupVersion *)keyBackupVersion +{ + MXWeakify(self); + [currentAlert dismissViewControllerAnimated:NO completion:nil]; + + currentAlert = + [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"settings_key_backup_delete_confirmation_prompt_title", @"Vector", nil) + message:NSLocalizedStringFromTable(@"settings_key_backup_delete_confirmation_prompt_msg", @"Vector", nil) + preferredStyle:UIAlertControllerStyleAlert]; + + [currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"] + style:UIAlertActionStyleCancel + handler:^(UIAlertAction * action) { + MXStrongifyAndReturnIfNil(self); + self->currentAlert = nil; + }]]; + + [currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"remove", @"Vector", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) { + MXStrongifyAndReturnIfNil(self); + self->currentAlert = nil; + + [self->keyBackupSection deleteWithKeyBackupVersion:keyBackupVersion]; + }]]; + + [currentAlert mxk_setAccessibilityIdentifier: @"SettingsVCDeleteKeyBackup"]; + [self presentViewController:currentAlert animated:YES completion:nil]; +} + #pragma mark - MXKEncryptionInfoView - (void)showDeviceInfo:(MXDeviceInfo*)deviceInfo