Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/Signal/Registration/UserInterface/RegistrationLoadingViewController.swift
1 views
//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import SignalServiceKit
import SignalUI

class RegistrationLoadingViewController: OWSViewController, OWSNavigationChildController {
    enum RegistrationLoadingMode {
        case generic
        case submittingPhoneNumber(e164: String)
        case submittingVerificationCode
        case restoringBackup(BackupRestoreProgressModal)
    }

    init(mode: RegistrationLoadingMode) {
        spinnerView = AnimatedProgressView(loadingText: {
            switch mode {
            case .generic:
                return ""
            case let .submittingPhoneNumber(e164):
                let format = OWSLocalizedString(
                    "REGISTRATION_VIEW_PHONE_NUMBER_SPINNER_LABEL_FORMAT",
                    comment: "Label for the progress spinner shown during phone number registration. Embeds {{phone number}}.",
                )
                return String.nonPluralLocalizedStringWithFormat(format, e164.e164FormattedAsPhoneNumberWithoutBreaks)
            case .submittingVerificationCode:
                return OWSLocalizedString(
                    "ONBOARDING_VERIFICATION_CODE_VALIDATION_PROGRESS_LABEL",
                    comment: "Label for a progress spinner currently validating code",
                )
            case .restoringBackup:
                // TODO: [Backups] localize
                return "Restoring from backup…"
                // comment: "Label for a progress spinner when restoring from backup"
            }
        }())

        super.init()

        navigationItem.hidesBackButton = true
    }

    @available(*, unavailable)
    override init() {
        owsFail("This should not be called")
    }

    // MARK: OWSNavigationChildController

    var preferredNavigationBarStyle: OWSNavigationBarStyle { .solid }

    var navbarBackgroundColorOverride: UIColor? { .clear }

    var prefersNavigationBarHidden: Bool { true }

    // MARK: - Rendering

    private let spinnerView: AnimatedProgressView

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .Signal.background

        spinnerView.alpha = 1
        view.addSubview(spinnerView)
        spinnerView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            spinnerView.centerXAnchor.constraint(equalTo: contentLayoutGuide.centerXAnchor),
            spinnerView.centerYAnchor.constraint(equalTo: contentLayoutGuide.centerYAnchor),
        ])
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if spinnerView.isAnimating.negated {
            spinnerView.startAnimating()
        }
    }
}