Device Verification: Display the "The other party cancelled the verification." modal

This commit is contained in:
manuroe 2019-04-11 19:38:46 +02:00
parent d7d78b063b
commit 785bc7f176
8 changed files with 38 additions and 10 deletions

View file

@ -796,6 +796,7 @@
// MARK: - Device Verification // MARK: - Device Verification
"device_verification_title" = "Verify device"; "device_verification_title" = "Verify device";
"device_verification_security_advice" = "For maximum security, we recommend you do this in person or use another trusted means of communication"; "device_verification_security_advice" = "For maximum security, we recommend you do this in person or use another trusted means of communication";
"device_verification_cancelled" = "The other party cancelled the verification.";
// MARK: - Start // MARK: - Start
"device_verification_start_title" = "Verify by comparing a short text string"; "device_verification_start_title" = "Verify by comparing a short text string";

View file

@ -426,6 +426,10 @@ internal enum VectorL10n {
internal static var decline: String { internal static var decline: String {
return VectorL10n.tr("Vector", "decline") return VectorL10n.tr("Vector", "decline")
} }
/// The other party cancelled the verification.
internal static var deviceVerificationCancelled: String {
return VectorL10n.tr("Vector", "device_verification_cancelled")
}
/// For maximum security, we recommend you do this in person or use another trusted means of communication /// For maximum security, we recommend you do this in person or use another trusted means of communication
internal static var deviceVerificationSecurityAdvice: String { internal static var deviceVerificationSecurityAdvice: String {
return VectorL10n.tr("Vector", "device_verification_security_advice") return VectorL10n.tr("Vector", "device_verification_security_advice")

View file

@ -84,11 +84,11 @@ final class DeviceVerificationCoordinator: DeviceVerificationCoordinatorType {
return // TODO return // TODO
} }
//let rootCoordinator = sself.createDeviceVerificationStartCoordinator(otherUser: otherUser, otherDevice: otherDevice) let rootCoordinator = sself.createDeviceVerificationStartCoordinator(otherUser: otherUser, otherDevice: otherDevice)
// TODO: To remove. Only for dev // TODO: To remove. Only for dev
let rootCoordinator = DeviceVerificationVerifyCoordinator(session: sself.session) //let rootCoordinator = DeviceVerificationVerifyCoordinator(session: sself.session)
rootCoordinator.delegate = self //rootCoordinator.delegate = self
rootCoordinator.start() rootCoordinator.start()

View file

@ -157,7 +157,9 @@ final class DeviceVerificationStartViewController: UIViewController {
case .loading: case .loading:
self.renderLoading() self.renderLoading()
case .loaded: case .loaded:
self.renderLoaded() self.renderStarted()
case .cancelled(let reason):
self.renderCancelled(reason: reason)
case .error(let error): case .error(let error):
self.render(error: error) self.render(error: error)
} }
@ -167,13 +169,21 @@ final class DeviceVerificationStartViewController: UIViewController {
self.activityPresenter.presentActivityIndicator(on: self.view, animated: true) self.activityPresenter.presentActivityIndicator(on: self.view, animated: true)
} }
private func renderLoaded() { private func renderStarted() {
self.activityPresenter.removeCurrentActivityIndicator(animated: true) self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.verifyButtonBackgroundView.isHidden = true self.verifyButtonBackgroundView.isHidden = true
self.waitingPartnerLabel.isHidden = false self.waitingPartnerLabel.isHidden = false
self.useLegacyVerificationLabel.isHidden = false self.useLegacyVerificationLabel.isHidden = false
} }
private func renderCancelled(reason: MXTransactionCancelCode) {
self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.errorPresenter.presentError(from: self, title: "", message: VectorL10n.deviceVerificationCancelled, animated: true) {
self.viewModel.process(viewAction: .cancel)
}
}
private func render(error: Error) { private func render(error: Error) {
self.activityPresenter.removeCurrentActivityIndicator(animated: true) self.activityPresenter.removeCurrentActivityIndicator(animated: true)

View file

@ -114,7 +114,10 @@ final class DeviceVerificationStartViewModel: DeviceVerificationStartViewModelTy
case MXSASTransactionStateShowSAS: case MXSASTransactionStateShowSAS:
self.coordinatorDelegate?.deviceVerificationStartViewModel(self, didCompleteWithOutgoingTransaction: transaction) self.coordinatorDelegate?.deviceVerificationStartViewModel(self, didCompleteWithOutgoingTransaction: transaction)
case MXSASTransactionStateCancelled: case MXSASTransactionStateCancelled:
self.coordinatorDelegate?.deviceVerificationStartViewModel(self, didTransactionCancelled: transaction) guard let reason = transaction.reasonCancelCode else {
return
}
self.update(viewState: .cancelled(reason))
default: default:
break break
} }

View file

@ -21,6 +21,7 @@ import Foundation
/// DeviceVerificationStartViewController view state /// DeviceVerificationStartViewController view state
enum DeviceVerificationStartViewState { enum DeviceVerificationStartViewState {
case loading case loading
case loaded case loaded // started
case cancelled(MXTransactionCancelCode)
case error(Error) case error(Error)
} }

View file

@ -175,7 +175,11 @@ final class DeviceVerificationVerifyViewController: UIViewController {
} }
private func renderCancelled(reason: MXTransactionCancelCode) { private func renderCancelled(reason: MXTransactionCancelCode) {
// TODO self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.errorPresenter.presentError(from: self, title: "", message: VectorL10n.deviceVerificationCancelled, animated: true) {
self.viewModel.process(viewAction: .cancel)
}
} }
private func renderCancelledByMe(reason: MXTransactionCancelCode) { private func renderCancelledByMe(reason: MXTransactionCancelCode) {

View file

@ -66,21 +66,26 @@ final class DeviceVerificationVerifyViewModel: DeviceVerificationVerifyViewModel
func process(viewAction: DeviceVerificationVerifyViewAction) { func process(viewAction: DeviceVerificationVerifyViewAction) {
switch viewAction { switch viewAction {
case .confirm: case .confirm:
self.confirm() self.confirmTransaction()
case .complete: case .complete:
self.coordinatorDelegate?.deviceVerificationVerifyViewModelDidComplete(self) self.coordinatorDelegate?.deviceVerificationVerifyViewModelDidComplete(self)
case .cancel: case .cancel:
self.cancelTransaction()
self.coordinatorDelegate?.deviceVerificationVerifyViewModelDidCancel(self) self.coordinatorDelegate?.deviceVerificationVerifyViewModelDidCancel(self)
} }
} }
// MARK: - Private // MARK: - Private
private func confirm() { private func confirmTransaction() {
self.update(viewState: .loading) self.update(viewState: .loading)
self.transaction.confirmSASMatch() self.transaction.confirmSASMatch()
} }
private func cancelTransaction() {
self.transaction.cancel(with: MXTransactionCancelCode.user())
}
private func update(viewState: DeviceVerificationVerifyViewState) { private func update(viewState: DeviceVerificationVerifyViewState) {
self.viewDelegate?.deviceVerificationVerifyViewModel(self, didUpdateViewState: viewState) self.viewDelegate?.deviceVerificationVerifyViewModel(self, didUpdateViewState: viewState)