148 lines
5.7 KiB
Swift
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()
|
|
}
|
|
}
|