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

import Foundation
import SignalServiceKit
import UIKit

class RecoveryKeyReminderMegaphone: MegaphoneView {
    init(
        experienceUpgrade: ExperienceUpgrade,
        fromViewController: UIViewController,
    ) {
        super.init(experienceUpgrade: experienceUpgrade)

        titleText = OWSLocalizedString(
            "BACKUP_KEY_REMINDER_MEGAPHONE_TITLE",
            comment: "Title for Recovery Key reminder megaphone",
        )
        bodyText = OWSLocalizedString(
            "BACKUP_KEY_REMINDER_MEGAPHONE_BODY",
            comment: "Body for Recovery Key reminder megaphone",
        )
        imageName = "backups-key"

        let primaryButtonTitle = OWSLocalizedString(
            "BACKUP_KEY_REMINDER_MEGAPHONE_ACTION",
            comment: "Action text for Recovery Key reminder megaphone",
        )
        let secondaryButtonTitle = OWSLocalizedString(
            "BACKUP_KEY_REMINDER_NOT_NOW_ACTION",
            comment: "Snooze text for Recovery Key reminder megaphone",
        )

        let primaryButton = MegaphoneView.Button(title: primaryButtonTitle) {
            let accountKeyStore = DependenciesBridge.shared.accountKeyStore
            let backupSettingsStore = BackupSettingsStore()
            let db = DependenciesBridge.shared.db

            guard let aep = db.read(block: { accountKeyStore.getAccountEntropyPool(tx: $0) }) else {
                return
            }

            BackupRecoveryKeyReminderCoordinator(
                aep: aep,
                fromViewController: fromViewController,
                onSuccess: {
                    self.dismiss()
                    self.presentToastForNewRepetitionInterval(fromViewController: fromViewController)
                    db.write { tx in
                        backupSettingsStore.setLastRecoveryKeyReminderDate(Date(), tx: tx)
                    }
                },
            ).presentVerifyFlow()
        }

        let secondaryButton = snoozeButton(
            fromViewController: fromViewController,
            snoozeTitle: secondaryButtonTitle,
        )

        setButtons(primary: primaryButton, secondary: secondaryButton)
    }

    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func presentToastForNewRepetitionInterval(fromViewController: UIViewController) {
        let toastText = OWSLocalizedString(
            "BACKUP_KEY_REMINDER_SUCCESSFUL_TOAST",
            comment: "Toast indicating that the Recovery Key was correct.",
        )

        presentToast(text: toastText, fromViewController: fromViewController)
    }
}