From b1d6487d645d1a76f94d8f0ae37830a76db51441 Mon Sep 17 00:00:00 2001 From: Lumaa Date: Thu, 25 Jan 2024 01:54:51 +0100 Subject: [PATCH] Richer share sheet --- .../Components/ShareSheetController.swift | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Threaded/Components/ShareSheetController.swift b/Threaded/Components/ShareSheetController.swift index dfa561b..18e7eca 100644 --- a/Threaded/Components/ShareSheetController.swift +++ b/Threaded/Components/ShareSheetController.swift @@ -3,15 +3,42 @@ import Foundation import SwiftUI import UIKit +import LinkPresentation /// Share sheet struct ShareSheet: UIViewControllerRepresentable { let image: UIImage + let status: Status + + class ActivityPreview: NSObject, UIActivityItemSource { + let image: UIImage + let status: Status + + init(image: UIImage, status: Status) { + self.image = image + self.status = status + } + + func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { + image + } + + func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { + nil + } + + func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { + let metadata = LPLinkMetadata() + metadata.imageProvider = NSItemProvider(object: image) + metadata.title = status.reblogAsAsStatus?.content.asRawText ?? status.content.asRawText + String("\n\n\(status.url ?? AppInfo.website)") + return metadata + } + } func makeUIViewController(context: Context) -> UIActivityViewController { - UIActivityViewController(activityItems: [image], applicationActivities: nil) + + UIActivityViewController(activityItems: [image, ActivityPreview(image: image, status: status)], applicationActivities: nil) } - func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) { - } + func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {} }