diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewAction.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewAction.swift index faf156e8c..8cbefd950 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewAction.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewAction.swift @@ -20,6 +20,7 @@ import Foundation /// DeviceVerificationIncomingViewController view actions exposed to view model enum DeviceVerificationIncomingViewAction { + case loadData case accept case cancel } diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift index aaa7ee883..2dcedc6d0 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift @@ -74,6 +74,7 @@ final class DeviceVerificationIncomingViewController: UIViewController { self.update(theme: self.theme) self.viewModel.viewDelegate = self + self.viewModel.process(viewAction: .loadData) } override func viewDidLayoutSubviews() { diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift index 41fc87276..6e62868c3 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift @@ -50,8 +50,6 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM self.deviceId = transaction.otherDeviceId self.mediaManager = session.mediaManager - - self.registerTransactionDidStateChangeNotification(transaction: transaction) } deinit { @@ -61,6 +59,8 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM func process(viewAction: DeviceVerificationIncomingViewAction) { switch viewAction { + case .loadData: + self.registerTransactionDidStateChangeNotification(transaction: transaction) case .accept: self.acceptIncomingDeviceVerification() case .cancel: @@ -89,6 +89,10 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM private func registerTransactionDidStateChangeNotification(transaction: MXIncomingSASTransaction) { NotificationCenter.default.addObserver(self, selector: #selector(transactionDidStateChange(notification:)), name: NSNotification.Name.MXDeviceVerificationTransactionDidChange, object: transaction) } + + private func unregisterTransactionDidStateChangeNotification() { + NotificationCenter.default.removeObserver(self, name: .MXDeviceVerificationTransactionDidChange, object: nil) + } @objc private func transactionDidStateChange(notification: Notification) { guard let transaction = notification.object as? MXIncomingSASTransaction else { @@ -97,17 +101,20 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM switch transaction.state { case MXSASTransactionStateShowSAS: + self.unregisterTransactionDidStateChangeNotification() self.update(viewState: .loaded) self.coordinatorDelegate?.deviceVerificationIncomingViewModel(self, didAcceptTransaction: self.transaction) case MXSASTransactionStateCancelled: guard let reason = transaction.reasonCancelCode else { return } + self.unregisterTransactionDidStateChangeNotification() self.update(viewState: .cancelled(reason)) case MXSASTransactionStateCancelledByMe: guard let reason = transaction.reasonCancelCode else { return } + self.unregisterTransactionDidStateChangeNotification() self.update(viewState: .cancelledByMe(reason)) default: break