diff --git a/Riot/AppDelegate.m b/Riot/AppDelegate.m index 162634008..6a9921ef3 100644 --- a/Riot/AppDelegate.m +++ b/Riot/AppDelegate.m @@ -4152,7 +4152,7 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN return presented; } -- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter +- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId { [deviceVerificationCoordinatorBridgePresenter dismissWithAnimated:YES]; deviceVerificationCoordinatorBridgePresenter = nil; diff --git a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift index ec77b3ba7..67efd8eec 100644 --- a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift +++ b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift @@ -151,11 +151,11 @@ extension DeviceVerificationCoordinator: DeviceVerificationStartCoordinatorDeleg } func deviceVerificationStartCoordinator(_ coordinator: DeviceVerificationStartCoordinatorType, didTransactionCancelled transaction: MXSASTransaction) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } func deviceVerificationStartCoordinatorDidCancel(_ coordinator: DeviceVerificationStartCoordinatorType) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } } @@ -165,7 +165,7 @@ extension DeviceVerificationCoordinator: DeviceVerificationIncomingCoordinatorDe } func deviceVerificationIncomingCoordinatorDidCancel(_ coordinator: DeviceVerificationIncomingCoordinatorType) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } } @@ -175,16 +175,16 @@ extension DeviceVerificationCoordinator: DeviceVerificationVerifyCoordinatorDele } func deviceVerificationVerifyCoordinatorDidCancel(_ coordinator: DeviceVerificationVerifyCoordinatorType) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } } extension DeviceVerificationCoordinator: DeviceVerificationVerifiedViewControllerDelegate { func deviceVerificationVerifiedViewControllerDidTapSetupAction(_ viewController: DeviceVerificationVerifiedViewController) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } func deviceVerificationVerifiedViewControllerDidCancel(_ viewController: DeviceVerificationVerifiedViewController) { - self.delegate?.deviceVerificationCoordinatorDidComplete(self) + self.delegate?.deviceVerificationCoordinatorDidComplete(self, otherUserId: self.otherUserId, otherDeviceId: self.otherDeviceId) } } diff --git a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorBridgePresenter.swift b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorBridgePresenter.swift index 9c5bc7451..08271b0e7 100644 --- a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorBridgePresenter.swift +++ b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorBridgePresenter.swift @@ -19,7 +19,7 @@ import Foundation @objc protocol DeviceVerificationCoordinatorBridgePresenterDelegate { - func deviceVerificationCoordinatorBridgePresenterDelegateDidComplete(_ coordinatorBridgePresenter: DeviceVerificationCoordinatorBridgePresenter) + func deviceVerificationCoordinatorBridgePresenterDelegateDidComplete(_ coordinatorBridgePresenter: DeviceVerificationCoordinatorBridgePresenter, otherUserId: String, otherDeviceId: String) } /// DeviceVerificationCoordinatorBridgePresenter enables to start DeviceVerificationCoordinator from a view controller. @@ -82,7 +82,7 @@ final class DeviceVerificationCoordinatorBridgePresenter: NSObject { // MARK: - DeviceVerificationCoordinatorDelegate extension DeviceVerificationCoordinatorBridgePresenter: DeviceVerificationCoordinatorDelegate { - func deviceVerificationCoordinatorDidComplete(_ coordinator: DeviceVerificationCoordinatorType) { - self.delegate?.deviceVerificationCoordinatorBridgePresenterDelegateDidComplete(self) + func deviceVerificationCoordinatorDidComplete(_ coordinator: DeviceVerificationCoordinatorType, otherUserId: String, otherDeviceId: String) { + self.delegate?.deviceVerificationCoordinatorBridgePresenterDelegateDidComplete(self, otherUserId: otherUserId, otherDeviceId: otherDeviceId) } } diff --git a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorType.swift b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorType.swift index bc925808b..c1f616da8 100644 --- a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorType.swift +++ b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinatorType.swift @@ -19,7 +19,7 @@ import Foundation protocol DeviceVerificationCoordinatorDelegate: class { - func deviceVerificationCoordinatorDidComplete(_ coordinator: DeviceVerificationCoordinatorType) + func deviceVerificationCoordinatorDidComplete(_ coordinator: DeviceVerificationCoordinatorType, otherUserId: String, otherDeviceId: String) } /// `DeviceVerificationCoordinatorType` is a protocol describing a Coordinator that handle keybackup setup navigation flow. diff --git a/Riot/Modules/Room/Members/Detail/RoomMemberDetailsViewController.m b/Riot/Modules/Room/Members/Detail/RoomMemberDetailsViewController.m index cea235e5f..e88b1ee22 100644 --- a/Riot/Modules/Room/Members/Detail/RoomMemberDetailsViewController.m +++ b/Riot/Modules/Room/Members/Detail/RoomMemberDetailsViewController.m @@ -1165,7 +1165,7 @@ #pragma mark - DeviceVerificationCoordinatorBridgePresenterDelegate -- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter +- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId { [deviceVerificationCoordinatorBridgePresenter dismissWithAnimated:YES]; deviceVerificationCoordinatorBridgePresenter = nil; diff --git a/Riot/Modules/RoomKeyRequest/RoomKeyRequestViewController.m b/Riot/Modules/RoomKeyRequest/RoomKeyRequestViewController.m index 617a96eef..56ca126c1 100644 --- a/Riot/Modules/RoomKeyRequest/RoomKeyRequestViewController.m +++ b/Riot/Modules/RoomKeyRequest/RoomKeyRequestViewController.m @@ -145,7 +145,7 @@ #pragma mark - DeviceVerificationCoordinatorBridgePresenterDelegate -- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter +- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId { [deviceVerificationCoordinatorBridgePresenter dismissWithAnimated:YES]; deviceVerificationCoordinatorBridgePresenter = nil; diff --git a/Riot/Modules/UserDevices/UsersDevicesViewController.h b/Riot/Modules/UserDevices/UsersDevicesViewController.h index 4020c40fc..8e63d9968 100644 --- a/Riot/Modules/UserDevices/UsersDevicesViewController.h +++ b/Riot/Modules/UserDevices/UsersDevicesViewController.h @@ -17,9 +17,8 @@ #import #import "DeviceTableViewCell.h" -#import "EncryptionInfoView.h" -@interface UsersDevicesViewController : MXKViewController +@interface UsersDevicesViewController : MXKViewController /** Display a map of users/devices. diff --git a/Riot/Modules/UserDevices/UsersDevicesViewController.m b/Riot/Modules/UserDevices/UsersDevicesViewController.m index 886c8a915..c37cfa040 100644 --- a/Riot/Modules/UserDevices/UsersDevicesViewController.m +++ b/Riot/Modules/UserDevices/UsersDevicesViewController.m @@ -20,12 +20,14 @@ #import "AppDelegate.h" #import "Riot-Swift.h" -@interface UsersDevicesViewController () +@interface UsersDevicesViewController () { MXUsersDevicesMap *usersDevices; MXSession *mxSession; void (^onCompleteBlock)(BOOL doneButtonPressed); + + DeviceVerificationCoordinatorBridgePresenter *deviceVerificationCoordinatorBridgePresenter; // Observe kThemeServiceDidChangeThemeNotification to handle user interface theme change. id kThemeServiceDidChangeThemeNotificationObserver; @@ -214,51 +216,10 @@ if (verificationStatus == MXDeviceVerified) { // Prompt the user before marking as verified the device. - EncryptionInfoView *encryptionInfoView = [[EncryptionInfoView alloc] initWithDeviceInfo:deviceTableViewCell.deviceInfo andMatrixSession:mxSession]; - [encryptionInfoView onButtonPressed:encryptionInfoView.verifyButton]; + deviceVerificationCoordinatorBridgePresenter = [[DeviceVerificationCoordinatorBridgePresenter alloc] initWithSession:mxSession]; + deviceVerificationCoordinatorBridgePresenter.delegate = self; - encryptionInfoView.delegate = self; - - // Add shadow on added view - encryptionInfoView.layer.cornerRadius = 5; - encryptionInfoView.layer.shadowOffset = CGSizeMake(0, 1); - encryptionInfoView.layer.shadowOpacity = 0.5f; - - // Add the view and define edge constraints - [self.view addSubview:encryptionInfoView]; - - [self.view addConstraint:[NSLayoutConstraint constraintWithItem:encryptionInfoView - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:self.topLayoutGuide - attribute:NSLayoutAttributeBottom - multiplier:1.0f - constant:10.0f]]; - - [self.view addConstraint:[NSLayoutConstraint constraintWithItem:encryptionInfoView - attribute:NSLayoutAttributeBottom - relatedBy:NSLayoutRelationEqual - toItem:self.bottomLayoutGuide - attribute:NSLayoutAttributeTop - multiplier:1.0f - constant:-10.0f]]; - - [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view - attribute:NSLayoutAttributeLeading - relatedBy:NSLayoutRelationEqual - toItem:encryptionInfoView - attribute:NSLayoutAttributeLeading - multiplier:1.0f - constant:-10.0f]]; - - [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view - attribute:NSLayoutAttributeTrailing - relatedBy:NSLayoutRelationEqual - toItem:encryptionInfoView - attribute:NSLayoutAttributeTrailing - multiplier:1.0f - constant:10.0f]]; - [self.view setNeedsUpdateConstraints]; + [deviceVerificationCoordinatorBridgePresenter presentFrom:self otherUserId:deviceTableViewCell.deviceInfo.userId otherDeviceId:deviceTableViewCell.deviceInfo.deviceId animated:YES]; } else { @@ -274,17 +235,31 @@ } } -#pragma mark - MXKEncryptionInfoViewDelegate +#pragma mark - DeviceVerificationCoordinatorBridgePresenterDelegate -- (void)encryptionInfoView:(MXKEncryptionInfoView *)encryptionInfoView didDeviceInfoVerifiedChange:(MXDeviceInfo *)deviceInfo +- (void)deviceVerificationCoordinatorBridgePresenterDelegateDidComplete:(DeviceVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId { - // Update our map - MXDeviceInfo *device = [usersDevices objectForDevice:deviceInfo.deviceId forUser:deviceInfo.userId]; - device.verified = deviceInfo.verified; + [deviceVerificationCoordinatorBridgePresenter dismissWithAnimated:YES]; + deviceVerificationCoordinatorBridgePresenter = nil; - [self.tableView reloadData]; + // Update our map + MXWeakify(self); + [mxSession.crypto downloadKeys:@[otherUserId] forceDownload:NO success:^(MXUsersDevicesMap *usersDevicesInfoMap) { + MXStrongifyAndReturnIfNil(self); + + MXDeviceInfo *deviceInfo = [usersDevicesInfoMap objectForDevice:otherDeviceId forUser:otherUserId]; + + MXDeviceInfo *device = [self->usersDevices objectForDevice:otherDeviceId forUser:otherUserId]; + device.verified = deviceInfo.verified; + + [self.tableView reloadData]; + + } failure:^(NSError *error) { + // Should not happen (the device is in the crypto db) + }]; } + #pragma mark - User actions - (IBAction)onDone:(id)sender