diff --git a/Riot/Modules/Settings/Security/SecurityViewController.m b/Riot/Modules/Settings/Security/SecurityViewController.m index fd01afb92..e55696afd 100644 --- a/Riot/Modules/Settings/Security/SecurityViewController.m +++ b/Riot/Modules/Settings/Security/SecurityViewController.m @@ -139,6 +139,7 @@ TableViewSectionsDelegate> @property (nonatomic, strong) SecureBackupSetupCoordinatorBridgePresenter *secureBackupSetupCoordinatorBridgePresenter; @property (nonatomic, strong) AuthenticatedSessionViewControllerFactory *authenticatedSessionViewControllerFactory; @property (nonatomic, strong) SetPinCoordinatorBridgePresenter *setPinCoordinatorBridgePresenter; +@property (nonatomic, strong) CrossSigningSetupCoordinatorBridgePresenter *crossSigningSetupCoordinatorBridgePresenter; @end @@ -759,59 +760,42 @@ TableViewSectionsDelegate> - (void)setupCrossSigningWithTitle:(NSString*)title message:(NSString*)message success:(void (^)(void))success - failure:(void (^)(NSError *error))failure + failure:(void (^)(NSError *error))failure + { - __block UIViewController *viewController; [self startActivityIndicator]; - // Get credentials to set up cross-signing - NSString *path = [NSString stringWithFormat:@"%@/keys/device_signing/upload", kMXAPIPrefixPathUnstable]; - _authenticatedSessionViewControllerFactory = [[AuthenticatedSessionViewControllerFactory alloc] initWithSession:self.mainSession]; - [_authenticatedSessionViewControllerFactory viewControllerForPath:path - httpMethod:@"POST" - title:title - message:message - onViewController:^(UIViewController * _Nonnull theViewController) - { - viewController = theViewController; - [self presentViewController:viewController animated:YES completion:nil]; - - } onAuthenticated:^(NSDictionary * _Nonnull authParams) { - - [viewController dismissViewControllerAnimated:NO completion:nil]; - viewController = nil; - - MXCrossSigning *crossSigning = self.mainSession.crypto.crossSigning; - if (crossSigning) - { - [crossSigning setupWithAuthParams:authParams success:^{ - [self stopActivityIndicator]; - [self reloadData]; - success(); - } failure:^(NSError * _Nonnull error) { - [self stopActivityIndicator]; - [self reloadData]; - - [[AppDelegate theDelegate] showErrorAsAlert:error]; - failure(error); - }]; - } - - } onCancelled:^{ - [self stopActivityIndicator]; - - [viewController dismissViewControllerAnimated:NO completion:nil]; - viewController = nil; - failure(nil); - } onFailure:^(NSError * _Nonnull error) { - - [self stopActivityIndicator]; - [[AppDelegate theDelegate] showErrorAsAlert:error]; - - [viewController dismissViewControllerAnimated:NO completion:nil]; - viewController = nil; - failure(error); + MXWeakify(self); + + void (^animationCompletion)(void) = ^void () { + MXStrongifyAndReturnIfNil(self); + + [self stopActivityIndicator]; + [self.crossSigningSetupCoordinatorBridgePresenter dismissWithAnimated:YES completion:^{}]; + self.crossSigningSetupCoordinatorBridgePresenter = nil; + }; + + CrossSigningSetupCoordinatorBridgePresenter *crossSigningSetupCoordinatorBridgePresenter = [[CrossSigningSetupCoordinatorBridgePresenter alloc] initWithSession:self.mainSession]; + + [crossSigningSetupCoordinatorBridgePresenter presentWith:title + message:message + from:self + animated:YES + success:^{ + animationCompletion(); + [self reloadData]; + success(); + } cancel:^{ + animationCompletion(); + failure(nil); + } failure:^(NSError * _Nonnull error) { + animationCompletion(); + [self reloadData]; + [[AppDelegate theDelegate] showErrorAsAlert:error]; + failure(error); }]; + + self.crossSigningSetupCoordinatorBridgePresenter = crossSigningSetupCoordinatorBridgePresenter; } - (void)resetCrossSigning:(id)sender