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

148 lines
5.7 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
// MARK: - RegistrationChangeNumberSplashPresenter
protocol RegistrationChangeNumberSplashPresenter: AnyObject {
func continueFromSplash()
func exitRegistration()
}
class RegistrationChangeNumberSplashViewController: OWSViewController, OWSNavigationChildController {
private weak var presenter: RegistrationChangeNumberSplashPresenter?
public init(presenter: RegistrationChangeNumberSplashPresenter) {
self.presenter = presenter
super.init()
}
public var preferredNavigationBarStyle: OWSNavigationBarStyle {
return .solid
}
public var navbarBackgroundColorOverride: UIColor? {
return view.backgroundColor
}
private let bottomContainer = UIView()
private let scrollingStack = UIStackView()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.setHidesBackButton(true, animated: false)
createContents()
}
private func createContents() {
navigationItem.leftBarButtonItem = .cancelButton { [weak self] in
self?.presenter?.exitRegistration()
}
let scrollView = UIScrollView()
view.addSubview(scrollView)
scrollView.autoPinEdge(toSuperviewSafeArea: .leading)
scrollView.autoPinEdge(toSuperviewSafeArea: .trailing)
scrollView.autoPin(toTopLayoutGuideOf: self, withInset: 0)
scrollingStack.axis = .vertical
scrollingStack.alignment = .fill
scrollingStack.isLayoutMarginsRelativeArrangement = true
scrollingStack.layoutMargins = UIEdgeInsets(hMargin: 20, vMargin: 0)
scrollView.addSubview(scrollingStack)
scrollingStack.autoMatch(.width, to: .width, of: scrollView)
scrollingStack.autoPinEdgesToSuperviewEdges()
bottomContainer.layoutMargins = UIEdgeInsets(hMargin: 20, vMargin: 0)
view.addSubview(bottomContainer)
bottomContainer.autoPinEdge(toSuperviewSafeArea: .leading)
bottomContainer.autoPinEdge(toSuperviewSafeArea: .trailing)
bottomContainer.autoPinEdge(.top, to: .bottom, of: scrollView)
bottomContainer.autoPinEdge(.bottom, to: .bottom, of: keyboardLayoutGuideViewSafeArea)
updateContents()
}
public override func themeDidChange() {
super.themeDidChange()
updateContents()
}
private func updateContents() {
view.backgroundColor = OWSTableViewController2.tableBackgroundColor(isUsingPresentedStyle: true)
owsNavigationController?.updateNavbarAppearance()
let heroImageName = (Theme.isDarkThemeEnabled
? "change-number-dark-40"
: "change-number-light-40")
let heroImage = UIImage(named: heroImageName)
let heroImageView = UIImageView(image: heroImage)
heroImageView.autoSetDimension(.width, toSize: 80, relation: .lessThanOrEqual)
heroImageView.autoSetDimension(.height, toSize: 80, relation: .lessThanOrEqual)
let heroCircleView = OWSLayerView.circleView(size: 112)
heroCircleView.backgroundColor = (Theme.isDarkThemeEnabled
? UIColor.ows_white
: UIColor.ows_black).withAlphaComponent(0.05)
heroCircleView.addSubview(heroImageView)
heroImageView.autoCenterInSuperview()
let heroStack = UIStackView(arrangedSubviews: [heroCircleView])
heroStack.axis = .vertical
heroStack.alignment = .center
let titleLabel = UILabel()
titleLabel.text = OWSLocalizedString("SETTINGS_CHANGE_PHONE_NUMBER_SPLASH_TITLE",
comment: "Title text in the 'change phone number splash' view.")
titleLabel.font = .dynamicTypeTitle2.semibold()
titleLabel.textColor = Theme.primaryTextColor
titleLabel.textAlignment = .center
titleLabel.numberOfLines = 0
titleLabel.lineBreakMode = .byWordWrapping
let descriptionLabel = UILabel()
descriptionLabel.text = OWSLocalizedString("SETTINGS_CHANGE_PHONE_NUMBER_SPLASH_DESCRIPTION",
comment: "Description text in the 'change phone number splash' view.")
descriptionLabel.font = .dynamicTypeBody
descriptionLabel.textColor = Theme.secondaryTextAndIconColor
descriptionLabel.textAlignment = .center
descriptionLabel.numberOfLines = 0
descriptionLabel.lineBreakMode = .byWordWrapping
let continueButton = OWSFlatButton.button(title: CommonStrings.continueButton,
font: UIFont.dynamicTypeBody.semibold(),
titleColor: .ows_white,
backgroundColor: .ows_accentBlue,
target: self,
selector: #selector(didTapContinue))
continueButton.autoSetHeightUsingFont()
continueButton.cornerRadius = 8
scrollingStack.removeAllSubviews()
scrollingStack.addArrangedSubviews([
UIView.spacer(withHeight: 40),
heroStack,
UIView.spacer(withHeight: 24),
titleLabel,
UIView.spacer(withHeight: 12),
descriptionLabel,
UIView.vStretchingSpacer(minHeight: 16)
])
bottomContainer.removeAllSubviews()
bottomContainer.addSubview(continueButton)
continueButton.autoPinEdgesToSuperviewMargins()
}
@objc
private func didTapContinue(_ sender: UIButton) {
presenter?.continueFromSplash()
}
}