element-ios/Riot/Modules/Home/VersionCheck/VersionCheckAlertViewController.swift

110 lines
3.9 KiB
Swift

//
// 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
import Reusable
protocol VersionCheckAlertViewControllerDelegate: AnyObject {
func alertViewControllerDidRequestDismissal(_ alertViewController: VersionCheckAlertViewController)
func alertViewControllerDidRequestAction(_ alertViewController: VersionCheckAlertViewController)
}
struct VersionCheckAlertViewControllerDetails {
let title: String
let subtitle: String
let actionButtonTitle: String
}
class VersionCheckAlertViewController: UIViewController {
@IBOutlet private var alertContainerView: UIView!
@IBOutlet private var titleLabel: UILabel!
@IBOutlet private var subtitleLabel: UILabel!
@IBOutlet private var dismissButton: UIButton!
@IBOutlet private var actionButton: UIButton!
private var themeService: ThemeService!
private var details: VersionCheckAlertViewControllerDetails?
weak var delegate: VersionCheckAlertViewControllerDelegate?
static func instantiate(themeService: ThemeService) -> VersionCheckAlertViewController {
let versionCheckAlertViewController = VersionCheckAlertViewController(nibName: nil, bundle: nil)
versionCheckAlertViewController.themeService = themeService
versionCheckAlertViewController.modalPresentationStyle = .overFullScreen
versionCheckAlertViewController.modalTransitionStyle = .crossDissolve
return versionCheckAlertViewController
}
override func viewDidLoad() {
super.viewDidLoad()
actionButton.layer.masksToBounds = true
actionButton.layer.cornerRadius = 6.0
configureWithDetails(details)
NotificationCenter.default.addObserver(self, selector: #selector(updateTheme), name: .themeServiceDidChangeTheme, object: nil)
updateTheme()
}
func configureWithDetails(_ details: VersionCheckAlertViewControllerDetails?) {
guard let details = details else {
return
}
guard self.isViewLoaded else {
self.details = details
return
}
titleLabel.text = details.title
actionButton.setTitle(details.actionButtonTitle, for: .normal)
let attributedSubtitle = NSMutableAttributedString(string: details.subtitle)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineHeightMultiple = 1.2
paragraphStyle.alignment = .center
attributedSubtitle.addAttribute(.paragraphStyle, value: paragraphStyle, range: .init(location: 0, length: attributedSubtitle.length))
subtitleLabel.attributedText = attributedSubtitle
}
// MARK: - Private
@IBAction private func onDismissButtonTap(_ sender: UIButton) {
delegate?.alertViewControllerDidRequestDismissal(self)
}
@IBAction private func onActionButtonTap(_ sender: UIButton) {
delegate?.alertViewControllerDidRequestAction(self)
}
@objc private func updateTheme() {
let theme = themeService.theme
alertContainerView.backgroundColor = theme.colors.background
titleLabel.textColor = theme.colors.primaryContent
subtitleLabel.textColor = theme.colors.secondaryContent
dismissButton.tintColor = theme.colors.secondaryContent
actionButton.vc_setBackgroundColor(theme.colors.accent, for: .normal)
}
}