mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
IM: Terms modal: Display terms page into a webview
This commit is contained in:
parent
1461b14217
commit
8d4d2bf998
7 changed files with 50 additions and 21 deletions
|
@ -58,12 +58,16 @@ 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 serviceTermsModalScreenViewModel(_ coordinator: ServiceTermsModalScreenViewModelType, displayPolicy policy: MXLoginPolicyData) {
|
||||
self.delegate?.serviceTermsModalScreenCoordinator(self, displayPolicy: policy)
|
||||
}
|
||||
|
||||
func ServiceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType) {
|
||||
self.delegate?.ServiceTermsModalScreenCoordinatorDidCancel(self)
|
||||
func serviceTermsModalScreenViewModelDidCancel(_ viewModel: ServiceTermsModalScreenViewModelType) {
|
||||
self.delegate?.serviceTermsModalScreenCoordinatorDidCancel(self)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue