From c7a4f1662c0b9a25a9e267ac958a11e842fb26f6 Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 31 Jan 2020 17:46:03 +0100 Subject: [PATCH 1/2] User verification: Add possibility to present on session detail from UserVerificationCoordinator. --- ...ificationSessionStatusViewController.swift | 2 ++ .../UserVerificationCoordinator.swift | 31 ++++++++++++++++--- ...rificationCoordinatorBridgePresenter.swift | 20 +++++++++++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/Riot/Modules/UserVerification/SessionStatus/UserVerificationSessionStatusViewController.swift b/Riot/Modules/UserVerification/SessionStatus/UserVerificationSessionStatusViewController.swift index 748421b2e..c358c4770 100644 --- a/Riot/Modules/UserVerification/SessionStatus/UserVerificationSessionStatusViewController.swift +++ b/Riot/Modules/UserVerification/SessionStatus/UserVerificationSessionStatusViewController.swift @@ -147,6 +147,8 @@ final class UserVerificationSessionStatusViewController: UIViewController { let badgeImage: UIImage let title: String + self.untrustedSessionContainerView.isHidden = viewData.isDeviceTrusted + if viewData.isDeviceTrusted { badgeImage = Asset.Images.encryptionTrusted.image title = "Trusted" diff --git a/Riot/Modules/UserVerification/UserVerificationCoordinator.swift b/Riot/Modules/UserVerification/UserVerificationCoordinator.swift index 8fcd1c239..3efcb6eab 100644 --- a/Riot/Modules/UserVerification/UserVerificationCoordinator.swift +++ b/Riot/Modules/UserVerification/UserVerificationCoordinator.swift @@ -30,6 +30,7 @@ final class UserVerificationCoordinator: NSObject, UserVerificationCoordinatorTy private let session: MXSession private let userId: String private let userDisplayName: String? + private var deviceId: String? // MARK: Public @@ -48,6 +49,11 @@ final class UserVerificationCoordinator: NSObject, UserVerificationCoordinatorTy self.userDisplayName = userDisplayName } + convenience init(presenter: Presentable, session: MXSession, userId: String, userDisplayName: String?, deviceId: String) { + self.init(presenter: presenter, session: session, userId: userId, userDisplayName: userDisplayName) + self.deviceId = deviceId + } + // MARK: - Public methods func start() { @@ -56,8 +62,14 @@ final class UserVerificationCoordinator: NSObject, UserVerificationCoordinatorTy return } - let rootCoordinator = UserVerificationSessionsStatusCoordinator(session: self.session, userId: self.userId) - rootCoordinator.delegate = self + let rootCoordinator: Coordinator & Presentable + + if let deviceId = self.deviceId { + rootCoordinator = self.createSessionStatusCoordinator(with: deviceId, for: self.userId, userDisplayName: self.userDisplayName) + } else { + rootCoordinator = self.createUserVerificationSessionsStatusCoordinator() + } + rootCoordinator.start() self.add(childCoordinator: rootCoordinator) @@ -70,7 +82,7 @@ final class UserVerificationCoordinator: NSObject, UserVerificationCoordinatorTy rootViewController.modalPresentationStyle = .formSheet self.presenter.toPresentable().present(rootViewController, animated: true, completion: nil) - } + } func toPresentable() -> UIViewController { return self.navigationRouter.toPresentable() @@ -78,9 +90,20 @@ final class UserVerificationCoordinator: NSObject, UserVerificationCoordinatorTy // MARK: - Private methods - private func presentSessionStatus(with deviceId: String, for userId: String, userDisplayName: String?) { + private func createUserVerificationSessionsStatusCoordinator() -> UserVerificationSessionsStatusCoordinator { + let coordinator = UserVerificationSessionsStatusCoordinator(session: self.session, userId: self.userId) + coordinator.delegate = self + return coordinator + } + + private func createSessionStatusCoordinator(with deviceId: String, for userId: String, userDisplayName: String?) -> UserVerificationSessionStatusCoordinator { let coordinator = UserVerificationSessionStatusCoordinator(session: self.session, userId: userId, userDisplayName: userDisplayName, deviceId: deviceId) coordinator.delegate = self + return coordinator + } + + private func presentSessionStatus(with deviceId: String, for userId: String, userDisplayName: String?) { + let coordinator = self.createSessionStatusCoordinator(with: deviceId, for: userId, userDisplayName: userDisplayName) coordinator.start() self.navigationRouter.push(coordinator, animated: true) { diff --git a/Riot/Modules/UserVerification/UserVerificationCoordinatorBridgePresenter.swift b/Riot/Modules/UserVerification/UserVerificationCoordinatorBridgePresenter.swift index 929449c77..af19e72f3 100644 --- a/Riot/Modules/UserVerification/UserVerificationCoordinatorBridgePresenter.swift +++ b/Riot/Modules/UserVerification/UserVerificationCoordinatorBridgePresenter.swift @@ -35,6 +35,7 @@ final class UserVerificationCoordinatorBridgePresenter: NSObject { private let session: MXSession private let userId: String private let userDisplayName: String? + private var deviceId: String? private var coordinator: Coordinator? @@ -52,6 +53,15 @@ final class UserVerificationCoordinatorBridgePresenter: NSObject { super.init() } + init(presenter: UIViewController, session: MXSession, userId: String, userDisplayName: String?, deviceId: String) { + self.presenter = presenter + self.session = session + self.userId = userId + self.userDisplayName = userDisplayName + self.deviceId = deviceId + super.init() + } + // MARK: - Public func start() { @@ -59,7 +69,15 @@ final class UserVerificationCoordinatorBridgePresenter: NSObject { } func present() { - let userVerificationCoordinator = UserVerificationCoordinator(presenter: self.presenter, session: self.session, userId: self.userId, userDisplayName: self.userDisplayName) + + let userVerificationCoordinator: UserVerificationCoordinator + + if let deviceId = self.deviceId { + userVerificationCoordinator = UserVerificationCoordinator(presenter: self.presenter, session: self.session, userId: self.userId, userDisplayName: self.userDisplayName, deviceId: deviceId) + } else { + userVerificationCoordinator = UserVerificationCoordinator(presenter: self.presenter, session: self.session, userId: self.userId, userDisplayName: self.userDisplayName) + } + userVerificationCoordinator.start() self.coordinator = userVerificationCoordinator } From a0613247c3b749519e31143235da4576e0d7b34a Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Fri, 31 Jan 2020 17:46:16 +0100 Subject: [PATCH 2/2] Settings: Add session verification screens. --- .../ManageSession/ManageSessionViewController.m | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Riot/Modules/Settings/Security/ManageSession/ManageSessionViewController.m b/Riot/Modules/Settings/Security/ManageSession/ManageSessionViewController.m index be916dffb..328e54a7d 100644 --- a/Riot/Modules/Settings/Security/ManageSession/ManageSessionViewController.m +++ b/Riot/Modules/Settings/Security/ManageSession/ManageSessionViewController.m @@ -62,6 +62,8 @@ enum { UIViewController *pushedViewController; } +@property (nonatomic, strong) UserVerificationCoordinatorBridgePresenter *userVerificationCoordinatorBridgePresenter; + @end @implementation ManageSessionViewController @@ -636,7 +638,13 @@ enum { - (void)showTrustForDevice:(MXDevice *)device { - [[AppDelegate theDelegate] showAlertWithTitle:@"Device Trust" message:@"TODO with bottom sheet 😛"]; + UserVerificationCoordinatorBridgePresenter *userVerificationCoordinatorBridgePresenter = [[UserVerificationCoordinatorBridgePresenter alloc] initWithPresenter:self + session:self.mainSession + userId:self.mainSession.myUser.userId + userDisplayName:nil + deviceId:device.deviceId]; + [userVerificationCoordinatorBridgePresenter start]; + self.userVerificationCoordinatorBridgePresenter = userVerificationCoordinatorBridgePresenter; } - (void)removeDevice