From fc3704eb09cb81b68f71b4c8242d3a74cc627016 Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Wed, 3 Feb 2021 11:34:33 +0100 Subject: [PATCH] Reauthentication: Add ReauthFallBackViewController that enables to authenticate with UIA fallback. --- .../ReauthFallBackViewController.swift | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Riot/Modules/Reauthentication/ReauthFallBackViewController.swift diff --git a/Riot/Modules/Reauthentication/ReauthFallBackViewController.swift b/Riot/Modules/Reauthentication/ReauthFallBackViewController.swift new file mode 100644 index 000000000..130e5a862 --- /dev/null +++ b/Riot/Modules/Reauthentication/ReauthFallBackViewController.swift @@ -0,0 +1,78 @@ +// +// Copyright 2021 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +/// View controller used for User-Interactive Authentication fallback (https://matrix.org/docs/spec/client_server/latest#fallback) +final class ReauthFallBackViewController: AuthFallBackViewController, Themable { + + // MARK: - Properties + + // MARK: Public + + var didValidate: (() -> Void)? + var didCancel: (() -> Void)? + + // MARK: Private + + private var theme: Theme = ThemeService.shared().theme + + // MARK: - Life cycle + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + self.setupNavigationBar() + self.registerThemeServiceDidChangeThemeNotification() + self.update(theme: self.theme) + } + + // MARK: - Public + + func update(theme: Theme) { + self.theme = theme + + if let navigationBar = self.navigationController?.navigationBar { + theme.applyStyle(onNavigationBar: navigationBar) + } + } + + // MARK: - Private + + private func registerThemeServiceDidChangeThemeNotification() { + NotificationCenter.default.addObserver(self, selector: #selector(themeDidChange), name: .themeServiceDidChangeTheme, object: nil) + } + + @objc private func themeDidChange() { + self.update(theme: ThemeService.shared().theme) + } + + private func setupNavigationBar() { + let doneBarButtonItem = MXKBarButtonItem(title: VectorL10n.close, style: .plain) { [weak self] in + self?.didValidate?() + } + self.navigationItem.leftBarButtonItem = doneBarButtonItem + } +} + +// MARK: - UIAdaptivePresentationControllerDelegate +extension ReauthFallBackViewController: UIAdaptivePresentationControllerDelegate { + + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + self.didCancel?() + } +}