diff --git a/Riot.xcodeproj/project.pbxproj b/Riot.xcodeproj/project.pbxproj index 37b8da655..1c730e812 100644 --- a/Riot.xcodeproj/project.pbxproj +++ b/Riot.xcodeproj/project.pbxproj @@ -629,6 +629,7 @@ B1C562E5228C7C8D0037F12A /* RoomContextualMenuViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B1C562E0228C7C8C0037F12A /* RoomContextualMenuViewController.storyboard */; }; B1C562E8228C7CF20037F12A /* ContextualMenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1C562E6228C7CF10037F12A /* ContextualMenuItemView.swift */; }; B1C562E9228C7CF20037F12A /* ContextualMenuItemView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B1C562E7228C7CF20037F12A /* ContextualMenuItemView.xib */; }; + B1C960F02458308D00C5704B /* RoundedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1C960EF2458308D00C5704B /* RoundedButton.swift */; }; B1CA3A2721EF6914000D1D89 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1CA3A2621EF6913000D1D89 /* UIViewController.swift */; }; B1CA3A2921EF692B000D1D89 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1CA3A2821EF692B000D1D89 /* UIView.swift */; }; B1CE83B62422812100D07506 /* KeyVerificationCoordinatorBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1CE83B52422812000D07506 /* KeyVerificationCoordinatorBridgePresenter.swift */; }; @@ -1609,6 +1610,7 @@ B1C6FFE723954CE70055347B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; B1C6FFE823954D3B0055347B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; B1C6FFE923954D4B0055347B /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Vector.strings; sourceTree = ""; }; + B1C960EF2458308D00C5704B /* RoundedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoundedButton.swift; sourceTree = ""; }; B1CA3A2621EF6913000D1D89 /* UIViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; B1CA3A2821EF692B000D1D89 /* UIView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; }; B1CE83B52422812000D07506 /* KeyVerificationCoordinatorBridgePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyVerificationCoordinatorBridgePresenter.swift; sourceTree = ""; }; @@ -2681,6 +2683,7 @@ isa = PBXGroup; children = ( B183226B23F59F810035B2E8 /* CloseButton.swift */, + B1C960EF2458308D00C5704B /* RoundedButton.swift */, ); path = Close; sourceTree = ""; @@ -5013,6 +5016,7 @@ F083BDEE1E7009ED00A9B29C /* MXRoom+Riot.m in Sources */, B120863722EF375F001F89E0 /* ReactionHistoryBridgeCoordinatorPresenter.swift in Sources */, B1B5598620EFC3E000210D55 /* RiotSettings.swift in Sources */, + B1C960F02458308D00C5704B /* RoundedButton.swift in Sources */, B1CE83D52422817200D07506 /* KeyVerificationVerifyByScanningViewController.swift in Sources */, 3232ABA3225730E100AD6A5C /* DeviceVerificationStartCoordinatorType.swift in Sources */, 3232AB4D2256558300AD6A5C /* TemplateScreenCoordinatorType.swift in Sources */, diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index edbaf8735..fbb4149d8 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -1076,8 +1076,13 @@ // MARK: Verify -"key_verification_verify_title_emoji" = "Compare emoji"; -"key_verification_verify_title_number" = "Compare numbers"; +"key_verification_verify_sas_title_emoji" = "Compare emoji"; +"key_verification_verify_sas_title_number" = "Compare numbers"; + +"key_verification_verify_sas_cancel_action" = "They don't match"; +"key_verification_verify_sas_validate_action" = "They match"; + +"key_verification_verify_sas_additional_information" = "For ultimate security, use another trusted means of communication or do this in person."; // Device diff --git a/Riot/Generated/Strings.swift b/Riot/Generated/Strings.swift index a4eced721..32fde5c69 100644 --- a/Riot/Generated/Strings.swift +++ b/Riot/Generated/Strings.swift @@ -1658,13 +1658,25 @@ internal enum VectorL10n { internal static var keyVerificationVerifyQrCodeTitle: String { return VectorL10n.tr("Vector", "key_verification_verify_qr_code_title") } + /// For ultimate security, use another trusted means of communication or do this in person. + internal static var keyVerificationVerifySasAdditionalInformation: String { + return VectorL10n.tr("Vector", "key_verification_verify_sas_additional_information") + } + /// They don't match + internal static var keyVerificationVerifySasCancelAction: String { + return VectorL10n.tr("Vector", "key_verification_verify_sas_cancel_action") + } /// Compare emoji - internal static var keyVerificationVerifyTitleEmoji: String { - return VectorL10n.tr("Vector", "key_verification_verify_title_emoji") + internal static var keyVerificationVerifySasTitleEmoji: String { + return VectorL10n.tr("Vector", "key_verification_verify_sas_title_emoji") } /// Compare numbers - internal static var keyVerificationVerifyTitleNumber: String { - return VectorL10n.tr("Vector", "key_verification_verify_title_number") + internal static var keyVerificationVerifySasTitleNumber: String { + return VectorL10n.tr("Vector", "key_verification_verify_sas_title_number") + } + /// They match + internal static var keyVerificationVerifySasValidateAction: String { + return VectorL10n.tr("Vector", "key_verification_verify_sas_validate_action") } /// %.1fK internal static func largeBadgeValueKFormat(_ p1: Float) -> String { diff --git a/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.storyboard b/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.storyboard index afd2968eb..f0763bd59 100644 --- a/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.storyboard +++ b/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.storyboard @@ -22,12 +22,12 @@ - + - + - - - + + + + + - - + + @@ -179,7 +195,7 @@ - + @@ -195,13 +211,15 @@ - - + + + + diff --git a/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.swift b/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.swift index 324322f2b..f6fc01ced 100644 --- a/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.swift +++ b/Riot/Modules/KeyVerification/Common/Verify/SAS/KeyVerificationVerifyBySASViewController.swift @@ -33,9 +33,12 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { @IBOutlet private weak var decimalLabel: UILabel! @IBOutlet private weak var emojisCollectionView: UICollectionView! @IBOutlet private weak var waitingPartnerLabel: UILabel! - @IBOutlet private weak var continueButtonBackgroundView: UIView! - @IBOutlet private weak var continueButton: UIButton! - + + @IBOutlet private weak var buttonsStackView: UIStackView! + @IBOutlet private weak var cancelButton: RoundedButton! + @IBOutlet private weak var validateButton: RoundedButton! + @IBOutlet private weak var additionalInformationLabel: UILabel! + // MARK: Private private var viewModel: KeyVerificationVerifyBySASViewModelType! @@ -99,8 +102,8 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { self.decimalLabel.textColor = theme.textPrimaryColor self.waitingPartnerLabel.textColor = theme.textPrimaryColor - self.continueButtonBackgroundView.backgroundColor = theme.backgroundColor - theme.applyStyle(onButton: self.continueButton) + self.cancelButton.update(theme: theme) + self.validateButton.update(theme: theme) emojisCollectionView.reloadData() } @@ -115,7 +118,7 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { private func setupViews() { let cancelBarButtonItem = MXKBarButtonItem(title: VectorL10n.cancel, style: .plain) { [weak self] in - self?.cancelButtonAction() + self?.cancelAction() } self.navigationItem.rightBarButtonItem = cancelBarButtonItem @@ -135,10 +138,10 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { let adviceText: String if isVerificationByEmoji { - instructionText = VectorL10n.keyVerificationVerifyTitleEmoji + instructionText = VectorL10n.keyVerificationVerifySasTitleEmoji adviceText = VectorL10n.deviceVerificationSecurityAdviceEmoji } else { - instructionText = VectorL10n.keyVerificationVerifyTitleNumber + instructionText = VectorL10n.keyVerificationVerifySasTitleNumber adviceText = VectorL10n.deviceVerificationSecurityAdviceNumber } @@ -149,7 +152,11 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { self.waitingPartnerLabel.isHidden = true - self.continueButton.setTitle(VectorL10n.continue, for: .normal) + self.cancelButton.setTitle(VectorL10n.keyVerificationVerifySasCancelAction, for: .normal) + self.cancelButton.actionStyle = .cancel + self.validateButton.setTitle(VectorL10n.keyVerificationVerifySasValidateAction, for: .normal) + + self.additionalInformationLabel.text = VectorL10n.keyVerificationVerifySasAdditionalInformation } private func render(viewState: KeyVerificationVerifyViewState) { @@ -173,8 +180,8 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { private func renderVerified() { self.activityPresenter.removeCurrentActivityIndicator(animated: true) - - self.continueButtonBackgroundView.isHidden = true + + self.buttonsStackView.isHidden = true self.waitingPartnerLabel.isHidden = false } @@ -206,13 +213,17 @@ final class KeyVerificationVerifyBySASViewController: UIViewController { // MARK: - Actions - @IBAction private func continueButtonAction(_ sender: Any) { - self.viewModel.process(viewAction: .confirm) - } - - private func cancelButtonAction() { + private func cancelAction() { self.viewModel.process(viewAction: .cancel) } + + @IBAction private func cancelButtonAction(_ sender: Any) { + self.cancelAction() + } + + @IBAction private func validateButtonAction(_ sender: Any) { + self.viewModel.process(viewAction: .confirm) + } }