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

import SignalServiceKit
import SignalUI

class UsernameLinkShareSheetViewController: OWSTableSheetViewController {

    private let usernameLink: Usernames.UsernameLink
    private let didCopyUsername: (() -> Void)?

    init(
        usernameLink: Usernames.UsernameLink,
        didCopyUsername: (() -> Void)? = nil,
    ) {
        self.usernameLink = usernameLink
        self.didCopyUsername = didCopyUsername
    }

    // MARK: - Table contents

    override func tableContents() -> OWSTableContents {
        let contents = OWSTableContents()

        let displayLinkSection = OWSTableSection(
            items: [
                .label(
                    withText: usernameLink.url.absoluteString,
                    accessoryType: .none,
                ),
            ],
            headerView: { () -> UIView in
                let label = UILabel()
                label.numberOfLines = 0
                label.lineBreakMode = .byWordWrapping
                label.font = .dynamicTypeFootnote
                label.textColor = Theme.secondaryTextAndIconColor
                label.textAlignment = .center
                label.layoutMargins = UIEdgeInsets(hMargin: 8, vMargin: 0)
                label.text = OWSLocalizedString(
                    "USERNAME_LINK_SHARE_SHEET_HEADER",
                    comment: "Text describing what you can do with a username link, on a sheet for sharing it.",
                )

                let wrapper = UIView()
                wrapper.layoutMargins = UIEdgeInsets(hMargin: 24, vMargin: 20)
                wrapper.addSubview(label)

                label.autoPinEdgesToSuperviewMargins()

                return wrapper
            }(),
        )

        let actionsSection = OWSTableSection(items: [
            .item(
                icon: .buttonCopy,
                name: OWSLocalizedString(
                    "USERNAME_LINK_SHARE_SHEET_COPY_LINK_ACTION",
                    comment: "Text for a tappable cell that copies the user's username link when selected.",
                ),
                actionBlock: { [weak self] in
                    guard let self else { return }

                    UIPasteboard.general.url = self.usernameLink.url
                    self.didCopyUsername?()
                },
            ),
            .item(
                icon: .buttonShare,
                name: CommonStrings.shareButton,
                actionBlock: { [weak self] in
                    guard let self else { return }

                    ShareActivityUtil.present(
                        activityItems: [self.usernameLink.url],
                        from: self,
                        sourceView: self.view,
                    )
                },
            ),
        ])

        contents.add(sections: [
            displayLinkSection,
            actionsSection,
        ])

        return contents
    }
}