From 220110b0b64683591428c2d1e35d102fbbe15ce3 Mon Sep 17 00:00:00 2001 From: Diego Marcon Date: Tue, 18 Aug 2020 16:05:59 +0200 Subject: [PATCH] Open helpDetail instead of About on infected screen --- .../Detail/HelpDetailViewController.swift | 12 +++++++-- .../Features/Help/HelpViewController.swift | 2 +- .../Infected/InfectedBuilder.swift | 8 +++--- .../Infected/InfectedRouter.swift | 27 ++++++++++--------- .../Infected/InfectedViewController.swift | 24 ++++++++++++----- .../Infected/InfectedRouterTests.swift | 2 +- 6 files changed, 48 insertions(+), 27 deletions(-) diff --git a/Sources/ENCore/App/Features/Help/Detail/HelpDetailViewController.swift b/Sources/ENCore/App/Features/Help/Detail/HelpDetailViewController.swift index d74c571aa..3b47a5a80 100644 --- a/Sources/ENCore/App/Features/Help/Detail/HelpDetailViewController.swift +++ b/Sources/ENCore/App/Features/Help/Detail/HelpDetailViewController.swift @@ -9,7 +9,7 @@ import ENFoundation import UIKit import WebKit -final class HelpDetailViewController: ViewController, Logging { +final class HelpDetailViewController: ViewController, Logging, UIAdaptivePresentationControllerDelegate { init(listener: HelpDetailListener, shouldShowEnableAppButton: Bool, @@ -20,6 +20,7 @@ final class HelpDetailViewController: ViewController, Logging { self.question = question super.init(theme: theme) + navigationItem.rightBarButtonItem = closeBarButtonItem } // MARK: - ViewController Lifecycle @@ -43,17 +44,24 @@ final class HelpDetailViewController: ViewController, Logging { textAlignment: Localization.isRTL ? .right : .left) internalView.acceptButton.addTarget(self, action: #selector(acceptButtonPressed), for: .touchUpInside) + } - navigationItem.rightBarButtonItem = navigationController?.navigationItem.rightBarButtonItem + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + listener?.helpDetailRequestsDismissal(shouldDismissViewController: false) } @objc func acceptButtonPressed() { listener?.helpDetailDidTapEnableAppButton() } + @objc func didTapClose() { + listener?.helpDetailRequestsDismissal(shouldDismissViewController: true) + } + // MARK: - Private private lazy var internalView: HelpView = HelpView(theme: theme, shouldDisplayButton: shouldShowEnableAppButton) + private lazy var closeBarButtonItem = UIBarButtonItem(barButtonSystemItem: .close, target: self, action: #selector(didTapClose)) private weak var listener: HelpDetailListener? private let shouldShowEnableAppButton: Bool diff --git a/Sources/ENCore/App/Features/Help/HelpViewController.swift b/Sources/ENCore/App/Features/Help/HelpViewController.swift index 693c0375b..207c26085 100644 --- a/Sources/ENCore/App/Features/Help/HelpViewController.swift +++ b/Sources/ENCore/App/Features/Help/HelpViewController.swift @@ -63,7 +63,7 @@ final class HelpViewController: NavigationController, HelpViewControllable, UIAd // MARK: - HelpDetailListener func helpDetailRequestsDismissal(shouldDismissViewController: Bool) { - router?.detachHelpDetail(shouldDismissViewController: true) + router?.detachHelpDetail(shouldDismissViewController: shouldDismissViewController) } func helpDetailDidTapEnableAppButton() { diff --git a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedBuilder.swift b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedBuilder.swift index 805a412f9..359f57ec4 100644 --- a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedBuilder.swift +++ b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedBuilder.swift @@ -29,7 +29,7 @@ protocol InfectedDependency { var bluetoothStateStream: BluetoothStateStreaming { get } } -private final class InfectedDependencyProvider: DependencyProvider, ThankYouDependency, CardDependency, AboutDependency { +private final class InfectedDependencyProvider: DependencyProvider, ThankYouDependency, CardDependency, HelpDetailDependency { var theme: Theme { dependency.theme @@ -47,8 +47,8 @@ private final class InfectedDependencyProvider: DependencyProvider, InfectedBuildable { viewController: viewController, thankYouBuilder: dependencyProvider.thankYouBuilder, cardBuilder: dependencyProvider.cardBuilder, - aboutBuilder: dependencyProvider.aboutBuilder) + helpDetailBuilder: dependencyProvider.helpDetailBuilder) } } diff --git a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedRouter.swift b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedRouter.swift index c21cf1acd..37aa4b53f 100644 --- a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedRouter.swift +++ b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedRouter.swift @@ -8,13 +8,13 @@ import UIKit /// @mockable -protocol InfectedViewControllable: ViewControllable, ThankYouListener, AboutListener { +protocol InfectedViewControllable: ViewControllable, ThankYouListener, HelpDetailListener { var router: InfectedRouting? { get set } func push(viewController: ViewControllable) func set(cardViewController: ViewControllable?) - func present(viewController: ViewControllable) + func presentInNavigationController(viewController: ViewControllable) func dismiss(viewController: ViewControllable) } @@ -26,11 +26,11 @@ final class InfectedRouter: Router, InfectedRouting { viewController: InfectedViewControllable, thankYouBuilder: ThankYouBuildable, cardBuilder: CardBuildable, - aboutBuilder: AboutBuildable) { + helpDetailBuilder: HelpDetailBuildable) { self.listener = listener self.thankYouBuilder = thankYouBuilder self.cardBuilder = cardBuilder - self.aboutBuilder = aboutBuilder + self.helpDetailBuilder = helpDetailBuilder super.init(viewController: viewController) @@ -72,25 +72,26 @@ final class InfectedRouter: Router, InfectedRouting { } func showFAQ() { - guard aboutRouter == nil else { + guard helpDetailViewController == nil else { return } - let router = aboutBuilder.build(withListener: viewController) - viewController.present(viewController: router.viewControllable) + let question = HelpQuestion(question: .helpFaqUploadKeysTitle, answer: .helpFaqUploadKeysDescription) + let controller = helpDetailBuilder.build(withListener: viewController, shouldShowEnableAppButton: false, question: question) + viewController.presentInNavigationController(viewController: controller) - aboutRouter = router + helpDetailViewController = controller } func hideFAQ(shouldDismissViewController: Bool) { - guard let router = aboutRouter else { + guard let controller = helpDetailViewController else { return } - aboutRouter = nil + helpDetailViewController = nil if shouldDismissViewController { - viewController.dismiss(viewController: router.viewControllable) + viewController.dismiss(viewController: controller) } } @@ -104,6 +105,6 @@ final class InfectedRouter: Router, InfectedRouting { private let cardBuilder: CardBuildable private var cardRouter: (Routing & CardTypeSettable)? - private let aboutBuilder: AboutBuildable - private var aboutRouter: Routing? + private let helpDetailBuilder: HelpDetailBuildable + private var helpDetailViewController: ViewControllable? } diff --git a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedViewController.swift b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedViewController.swift index f4b258045..316b77db5 100644 --- a/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedViewController.swift +++ b/Sources/ENCore/App/Features/Main/MoreInformation/Infected/InfectedViewController.swift @@ -96,12 +96,22 @@ final class InfectedViewController: ViewController, InfectedViewControllable, UI navigationController?.pushViewController(viewController.uiviewController, animated: true) } - func present(viewController: ViewControllable) { - present(viewController.uiviewController, animated: true, completion: nil) + func presentInNavigationController(viewController: ViewControllable) { + let navigationController = NavigationController(rootViewController: viewController.uiviewController, theme: theme) + + if let presentationDelegate = viewController.uiviewController as? UIAdaptivePresentationControllerDelegate { + navigationController.presentationController?.delegate = presentationDelegate + } + + present(navigationController, animated: true, completion: nil) } func dismiss(viewController: ViewControllable) { - viewController.uiviewController.dismiss(animated: true, completion: nil) + if let navigationController = viewController.uiviewController.navigationController { + navigationController.dismiss(animated: true, completion: nil) + } else { + viewController.uiviewController.dismiss(animated: true, completion: nil) + } } func thankYouWantsDismissal() { @@ -128,12 +138,14 @@ final class InfectedViewController: ViewController, InfectedViewControllable, UI } } - // MARK: - AboutListener + // MARK: - HelpDetailListener - func aboutRequestsDismissal(shouldHideViewController: Bool) { - router?.hideFAQ(shouldDismissViewController: shouldHideViewController) + func helpDetailRequestsDismissal(shouldDismissViewController: Bool) { + router?.hideFAQ(shouldDismissViewController: shouldDismissViewController) } + func helpDetailDidTapEnableAppButton() {} + // MARK: - Private private func update(exposureState: ExposureState) { diff --git a/Sources/ENCoreTests/App/Features/Main/MoreInformation/Infected/InfectedRouterTests.swift b/Sources/ENCoreTests/App/Features/Main/MoreInformation/Infected/InfectedRouterTests.swift index 7c022ad5a..e968951c9 100644 --- a/Sources/ENCoreTests/App/Features/Main/MoreInformation/Infected/InfectedRouterTests.swift +++ b/Sources/ENCoreTests/App/Features/Main/MoreInformation/Infected/InfectedRouterTests.swift @@ -22,7 +22,7 @@ final class InfectedRouterTests: XCTestCase { viewController: viewController, thankYouBuilder: ThankYouBuildableMock(), cardBuilder: CardBuildableMock(), - aboutBuilder: AboutBuildableMock()) + helpDetailBuilder: HelpDetailBuildableMock()) } func test_init_setsRouterOnViewController() {