Signal-iOS/Signal/Provisioning/UserInterface/ProvisioningTransferChoiceViewController.swift
2025-12-30 11:34:05 -08:00

119 lines
4.4 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Copyright 2020 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
import UIKit
class ProvisioningTransferChoiceViewController: ProvisioningBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.hidesBackButton = true
let titleLabel = UILabel.titleLabelForRegistration(text: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_TITLE",
comment: "The title for the device transfer 'choice' view",
))
let explanationLabel = UILabel.explanationLabelForRegistration(text: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_LINKED_EXPLANATION",
comment: "The explanation for the device transfer 'choice' view when linking a device",
))
let transferButton = UIButton.registrationChoiceButton(
title: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_TRANSFER_LINKED_TITLE",
comment: "The title for the device transfer 'choice' view 'transfer' option when linking a device",
),
subtitle: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_TRANSFER_LINKED_BODY",
comment: "The body for the device transfer 'choice' view 'transfer' option when linking a device",
),
iconName: Theme.iconName(.transfer),
primaryAction: UIAction { [weak self] _ in
self?.didSelectTransfer()
},
)
let registerButton = UIButton.registrationChoiceButton(
title: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_REGISTER_LINKED_TITLE",
comment: "The title for the device transfer 'choice' view 'register' option when linking a device",
),
subtitle: OWSLocalizedString(
"DEVICE_TRANSFER_CHOICE_REGISTER_LINKED_BODY_LINK_AND_SYNC",
value: "Youll have the option to transfer messages and recent media from your phone",
comment: "The body for the device transfer 'choice' view 'register' option when linking a device when message syncing is available",
),
iconName: Theme.iconName(.register),
primaryAction: UIAction { [weak self] _ in
self?.didSelectRegister()
},
)
let footerTextView = LinkingTextView()
footerTextView.attributedText = NSAttributedString.composed(of: [
SignalSymbol.lock.attributedString(for: .title3),
"\n",
"\n".styled(with: .maximumLineHeight(6)),
OWSLocalizedString(
"LINKING_SYNCING_FOOTER",
comment: "Footer text when loading messages during linking process.",
),
" ",
CommonStrings.learnMore.styled(with: .link(URL.Support.linkedDevices)),
])
.styled(
with: .font(.dynamicTypeFootnote),
.color(.Signal.secondaryLabel),
.alignment(.center),
)
let topSpacer = UIView.vStretchingSpacer()
let bottomSpacer = UIView.vStretchingSpacer()
let stackView = addStaticContentStackView(arrangedSubviews: [
topSpacer,
titleLabel,
explanationLabel,
registerButton,
transferButton,
bottomSpacer,
footerTextView,
.spacer(withHeight: 32),
])
stackView.setCustomSpacing(24, after: explanationLabel)
topSpacer.translatesAutoresizingMaskIntoConstraints = false
bottomSpacer.translatesAutoresizingMaskIntoConstraints = false
topSpacer.heightAnchor.constraint(equalTo: bottomSpacer.heightAnchor, multiplier: 0.5).isActive = true
}
// MARK: - Events
private func didSelectTransfer() {
Logger.info("")
let prepViewController = ProvisioningPrepViewController(provisioningController: provisioningController, isTransferring: true)
navigationController?.pushViewController(prepViewController, animated: true)
}
private func didSelectRegister() {
Logger.info("")
let prepViewController = ProvisioningPrepViewController(provisioningController: provisioningController, isTransferring: false)
navigationController?.pushViewController(prepViewController, animated: true)
}
}
#if DEBUG
@available(iOS 17, *)
#Preview {
ProvisioningTransferChoiceViewController(provisioningController: .preview())
}
#endif