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

111 lines
4.3 KiB
Swift

//
// Copyright 2019 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Lottie
import SignalServiceKit
import SignalUI
class ProvisioningPrepViewController: ProvisioningBaseViewController {
lazy var animationView = LottieAnimationView(name: isTransferring ? "launchApp-iPad" : "launchApp-iPhone")
let isTransferring: Bool
init(provisioningController: ProvisioningController, isTransferring: Bool) {
self.isTransferring = isTransferring
super.init(provisioningController: provisioningController)
}
override func loadView() {
view = UIView()
view.addSubview(primaryView)
primaryView.autoPinEdgesToSuperviewEdges()
view.backgroundColor = Theme.backgroundColor
animationView.loopMode = .playOnce
animationView.backgroundBehavior = .pauseAndRestore
animationView.contentMode = .scaleAspectFit
animationView.setContentHuggingHigh()
let titleText: String
if isTransferring {
titleText = OWSLocalizedString("SECONDARY_TRANSFER_GET_STARTED_BY_OPENING_IPAD",
comment: "header text before the user can transfer to this device")
} else {
titleText = OWSLocalizedString("SECONDARY_ONBOARDING_GET_STARTED_BY_OPENING_PRIMARY",
comment: "header text before the user can link this device")
}
let titleLabel = self.createTitleLabel(text: titleText)
primaryView.addSubview(titleLabel)
titleLabel.accessibilityIdentifier = "onboarding.prelink.titleLabel"
let dontHaveSignalButton = UILabel()
dontHaveSignalButton.text = OWSLocalizedString("SECONDARY_ONBOARDING_GET_STARTED_DO_NOT_HAVE_PRIMARY",
comment: "Link explaining what to do when trying to link a device before having a primary device.")
dontHaveSignalButton.textColor = Theme.accentBlueColor
dontHaveSignalButton.font = UIFont.dynamicTypeSubheadlineClamped
dontHaveSignalButton.numberOfLines = 0
dontHaveSignalButton.textAlignment = .center
dontHaveSignalButton.lineBreakMode = .byWordWrapping
dontHaveSignalButton.isUserInteractionEnabled = true
dontHaveSignalButton.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(didTapExplanationLabel)))
dontHaveSignalButton.accessibilityIdentifier = "onboarding.prelink.explanationLabel"
dontHaveSignalButton.isHidden = isTransferring
let nextButton = self.primaryButton(title: CommonStrings.nextButton,
selector: #selector(didPressNext))
nextButton.accessibilityIdentifier = "onboarding.prelink.nextButton"
let primaryButtonView = ProvisioningBaseViewController.horizontallyWrap(primaryButton: nextButton)
let stackView = UIStackView(arrangedSubviews: [
titleLabel,
UIView.spacer(withHeight: 12),
animationView,
dontHaveSignalButton,
UIView.vStretchingSpacer(minHeight: 12),
primaryButtonView
])
stackView.axis = .vertical
stackView.alignment = .fill
stackView.spacing = 12
primaryView.addSubview(stackView)
stackView.autoPinEdgesToSuperviewMargins()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
animationView.play()
}
// MARK: - Events
@objc
func didTapExplanationLabel(sender: UIGestureRecognizer) {
guard sender.state == .recognized else {
owsFailDebug("unexpected state: \(sender.state)")
return
}
let title = OWSLocalizedString("SECONDARY_ONBOARDING_INSTALL_PRIMARY_FIRST_TITLE", comment: "alert title")
let message = OWSLocalizedString("SECONDARY_ONBOARDING_INSTALL_PRIMARY_FIRST_BODY", comment: "alert body")
let alert = ActionSheetController(title: title, message: message)
alert.addAction(.acknowledge)
presentActionSheet(alert)
}
@objc
func didPressNext() {
Logger.info("")
if isTransferring {
provisioningController.transferAccount(fromViewController: self)
} else {
provisioningController.didConfirmSecondaryDevice(from: self)
}
}
}