TM-SGNL-iOS/Signal/Registration/UserInterface/RegistrationCaptchaViewController.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

96 lines
2.5 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
// MARK: - RegistrationCaptchaPresenter
protocol RegistrationCaptchaPresenter: AnyObject {
func submitCaptcha(_ token: String)
}
// MARK: - RegistrationCaptchaViewController
class RegistrationCaptchaViewController: OWSViewController {
private weak var presenter: RegistrationCaptchaPresenter?
public init(presenter: RegistrationCaptchaPresenter) {
self.presenter = presenter
super.init()
}
@available(*, unavailable)
public override init() {
owsFail("This should not be called")
}
// MARK: - Rendering
private lazy var titleLabel: UILabel = {
let result = UILabel.titleLabelForRegistration(text: OWSLocalizedString(
"REGISTRATION_CAPTCHA_TITLE",
comment: "During registration, users may be shown a CAPTCHA to verify that they're human. This text is shown above the CAPTCHA."
))
result.accessibilityIdentifier = "registration.captcha.titleLabel"
return result
}()
private lazy var captchaView: CaptchaView = {
let result = CaptchaView(context: .registration)
result.delegate = self
return result
}()
public override func viewDidLoad() {
super.viewDidLoad()
navigationItem.setHidesBackButton(true, animated: false)
initialRender()
}
public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
captchaView.loadCaptcha()
}
public override func themeDidChange() {
super.themeDidChange()
render()
}
private func initialRender() {
let stackView = UIStackView(arrangedSubviews: [titleLabel, captchaView])
stackView.axis = .vertical
stackView.distribution = .fill
stackView.spacing = 12
titleLabel.setContentHuggingHigh()
view.addSubview(stackView)
stackView.autoPinEdgesToSuperviewMargins()
render()
}
private func render() {
view.backgroundColor = Theme.backgroundColor
titleLabel.textColor = .colorForRegistrationTitleLabel
}
}
// MARK: - CaptchaViewDelegate
extension RegistrationCaptchaViewController: CaptchaViewDelegate {
public func captchaView(_: CaptchaView, didCompleteCaptchaWithToken token: String) {
presenter?.submitCaptcha(token)
}
public func captchaViewDidFailToCompleteCaptcha(_ captchaView: CaptchaView) {
captchaView.loadCaptcha()
}
}