IM: Terms modal: Display terms page into a webview

This commit is contained in:
manuroe 2019-08-12 11:14:58 +02:00
parent 1461b14217
commit 8d4d2bf998
7 changed files with 50 additions and 21 deletions

View file

@ -59,11 +59,15 @@ final class ServiceTermsModalScreenCoordinator: ServiceTermsModalScreenCoordinat
// MARK: - ServiceTermsModalScreenViewModelCoordinatorDelegate
extension ServiceTermsModalScreenCoordinator: ServiceTermsModalScreenViewModelCoordinatorDelegate {
func ServiceTermsModalScreenViewModelDidAccept(_ viewModel: ServiceTermsModalScreenViewModelType) {
self.delegate?.ServiceTermsModalScreenCoordinatorDidAccept(self)
func serviceTermsModalScreenViewModelDidAccept(_ viewModel: ServiceTermsModalScreenViewModelType) {
self.delegate?.serviceTermsModalScreenCoordinatorDidAccept(self)
}
func ServiceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType) {
self.delegate?.ServiceTermsModalScreenCoordinatorDidCancel(self)
func serviceTermsModalScreenViewModel(_ coordinator: ServiceTermsModalScreenViewModelType, displayPolicy policy: MXLoginPolicyData) {
self.delegate?.serviceTermsModalScreenCoordinator(self, displayPolicy: policy)
}
func serviceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType) {
self.delegate?.serviceTermsModalScreenCoordinatorDidCancel(self)
}
}

View file

@ -19,8 +19,9 @@
import Foundation
protocol ServiceTermsModalScreenCoordinatorDelegate: class {
func ServiceTermsModalScreenCoordinatorDidAccept(_ coordinator: ServiceTermsModalScreenCoordinatorType)
func ServiceTermsModalScreenCoordinatorDidCancel(_ coordinator: ServiceTermsModalScreenCoordinatorType)
func serviceTermsModalScreenCoordinatorDidAccept(_ coordinator: ServiceTermsModalScreenCoordinatorType)
func serviceTermsModalScreenCoordinator(_ coordinator: ServiceTermsModalScreenCoordinatorType, displayPolicy policy: MXLoginPolicyData)
func serviceTermsModalScreenCoordinatorDidCancel(_ coordinator: ServiceTermsModalScreenCoordinatorType)
}
/// `ServiceTermsModalScreenCoordinatorType` is a protocol describing a Coordinator that handle key backup setup passphrase navigation flow.

View file

@ -21,7 +21,7 @@ import Foundation
/// ServiceTermsModalScreenViewController view actions exposed to view model
enum ServiceTermsModalScreenViewAction {
case load
case review(String)
case display(MXLoginPolicyData)
case accept
case cancel
}

View file

@ -209,7 +209,7 @@ final class ServiceTermsModalScreenViewController: UIViewController {
// MARK: - ServiceTermsModalScreenViewModelViewDelegate
extension ServiceTermsModalScreenViewController: ServiceTermsModalScreenViewModelViewDelegate {
func ServiceTermsModalScreenViewModel(_ viewModel: ServiceTermsModalScreenViewModelType, didUpdateViewState viewSate: ServiceTermsModalScreenViewState) {
func serviceTermsModalScreenViewModel(_ viewModel: ServiceTermsModalScreenViewModelType, didUpdateViewState viewSate: ServiceTermsModalScreenViewState) {
self.render(viewState: viewSate)
}
}
@ -253,6 +253,6 @@ extension ServiceTermsModalScreenViewController: UITableViewDataSource {
extension ServiceTermsModalScreenViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let policy = policies[indexPath.row]
self.viewModel.process(viewAction: .review(policy.url))
self.viewModel.process(viewAction: .display(policy))
}
}

View file

@ -48,13 +48,12 @@ final class ServiceTermsModalScreenViewModel: ServiceTermsModalScreenViewModelTy
switch viewAction {
case .load:
self.loadTerms()
case .review(let policy):
// TODO
self.coordinatorDelegate?.ServiceTermsModalScreenViewModelDidCancel(self)
case .display(let policy):
self.coordinatorDelegate?.serviceTermsModalScreenViewModel(self, displayPolicy: policy)
case .accept:
self.acceptTerms()
case .cancel:
self.coordinatorDelegate?.ServiceTermsModalScreenViewModelDidCancel(self)
self.coordinatorDelegate?.serviceTermsModalScreenViewModelDidCancel(self)
}
}
@ -91,7 +90,7 @@ final class ServiceTermsModalScreenViewModel: ServiceTermsModalScreenViewModelTy
return
}
self.update(viewState: .accepted)
self.coordinatorDelegate?.ServiceTermsModalScreenViewModelDidAccept(self)
self.coordinatorDelegate?.serviceTermsModalScreenViewModelDidAccept(self)
}, failure: { [weak self] (error) in
guard let self = self else {
@ -119,6 +118,6 @@ final class ServiceTermsModalScreenViewModel: ServiceTermsModalScreenViewModelTy
}
private func update(viewState: ServiceTermsModalScreenViewState) {
self.viewDelegate?.ServiceTermsModalScreenViewModel(self, didUpdateViewState: viewState)
self.viewDelegate?.serviceTermsModalScreenViewModel(self, didUpdateViewState: viewState)
}
}

View file

@ -19,12 +19,13 @@
import Foundation
protocol ServiceTermsModalScreenViewModelViewDelegate: class {
func ServiceTermsModalScreenViewModel(_ viewModel: ServiceTermsModalScreenViewModelType, didUpdateViewState viewSate: ServiceTermsModalScreenViewState)
func serviceTermsModalScreenViewModel(_ viewModel: ServiceTermsModalScreenViewModelType, didUpdateViewState viewSate: ServiceTermsModalScreenViewState)
}
protocol ServiceTermsModalScreenViewModelCoordinatorDelegate: class {
func ServiceTermsModalScreenViewModelDidAccept(_ viewModel: ServiceTermsModalScreenViewModelType)
func ServiceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType)
func serviceTermsModalScreenViewModel(_ coordinator: ServiceTermsModalScreenViewModelType, displayPolicy policy: MXLoginPolicyData)
func serviceTermsModalScreenViewModelDidAccept(_ viewModel: ServiceTermsModalScreenViewModelType)
func serviceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType)
}
/// Protocol describing the view model used by `ServiceTermsModalScreenViewController`

View file

@ -66,15 +66,39 @@ final class ServiceTermsModalCoordinator: ServiceTermsModalCoordinatorType {
coordinator.delegate = self
return coordinator
}
private func showPolicy(policy: MXLoginPolicyData) {
// Display the policy webpage into our webview
let webViewViewController: WebViewViewController = WebViewViewController(url: policy.url)
webViewViewController.title = policy.name
let leftBarButtonItem: UIBarButtonItem = UIBarButtonItem(image: UIImage(named: "back_icon"), style: .plain, target: self, action: #selector(didTapCancelOnPolicyScreen))
webViewViewController.navigationItem.leftBarButtonItem = leftBarButtonItem
self.navigationRouter.push(webViewViewController, animated: true, popCompletion: nil)
}
private func removePolicyScreen() {
self.navigationRouter.popModule(animated: true)
}
@objc private func didTapCancelOnPolicyScreen() {
self.removePolicyScreen()
}
}
// MARK: - ServiceTermsModalLoadTermsScreenCoordinatorDelegate
extension ServiceTermsModalCoordinator: ServiceTermsModalScreenCoordinatorDelegate {
func ServiceTermsModalScreenCoordinatorDidAccept(_ coordinator: ServiceTermsModalScreenCoordinatorType) {
func serviceTermsModalScreenCoordinatorDidAccept(_ coordinator: ServiceTermsModalScreenCoordinatorType) {
self.delegate?.serviceTermsModalCoordinatorDidAccept(self)
}
func ServiceTermsModalScreenCoordinatorDidCancel(_ coordinator: ServiceTermsModalScreenCoordinatorType) {
func serviceTermsModalScreenCoordinator(_ coordinator: ServiceTermsModalScreenCoordinatorType, displayPolicy policy: MXLoginPolicyData) {
self.showPolicy(policy: policy)
}
func serviceTermsModalScreenCoordinatorDidCancel(_ coordinator: ServiceTermsModalScreenCoordinatorType) {
self.delegate?.serviceTermsModalCoordinatorDidCancel(self)
}
}