Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/Signal/Provisioning/UserInterface/ProvisioningTransferChoiceViewController.swift
1 views
//
// 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: "You’ll 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