2022-02-12 15:59:43 +00:00
|
|
|
//
|
|
|
|
// ShareSheet.swift
|
|
|
|
// SimpleX
|
|
|
|
//
|
|
|
|
// Created by Evgeny Poberezkin on 30/01/2022.
|
|
|
|
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import SwiftUI
|
|
|
|
|
2023-09-07 11:28:37 +01:00
|
|
|
func showShareSheet(items: [Any], completed: (() -> Void)? = nil) {
|
2022-02-12 15:59:43 +00:00
|
|
|
let keyWindowScene = UIApplication.shared.connectedScenes.first { $0.activationState == .foregroundActive } as? UIWindowScene
|
|
|
|
if let keyWindow = keyWindowScene?.windows.filter(\.isKeyWindow).first,
|
|
|
|
let presentedViewController = keyWindow.rootViewController?.presentedViewController ?? keyWindow.rootViewController {
|
|
|
|
let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
|
2023-09-07 11:28:37 +01:00
|
|
|
if let completed = completed {
|
|
|
|
let handler: UIActivityViewController.CompletionWithItemsHandler = { _,_,_,_ in completed() }
|
|
|
|
activityViewController.completionWithItemsHandler = handler
|
|
|
|
}
|
2022-02-12 15:59:43 +00:00
|
|
|
presentedViewController.present(activityViewController, animated: true)
|
|
|
|
}
|
|
|
|
}
|
2024-09-04 20:56:56 +01:00
|
|
|
|
|
|
|
extension View {
|
|
|
|
func shareSheet(item: Binding<ShareItem?>) -> some View {
|
|
|
|
sheet(item: item) { item in
|
|
|
|
Group {
|
|
|
|
if #available(iOS 16.0, *) {
|
|
|
|
ActivityView(item: item)
|
|
|
|
.presentationDetents([.medium, .large])
|
|
|
|
} else {
|
|
|
|
ActivityView(item: item)
|
|
|
|
}
|
|
|
|
}.ignoresSafeArea()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct ShareItem: Identifiable {
|
|
|
|
let content: any Hashable
|
|
|
|
var id: Int { content.hashValue }
|
|
|
|
}
|
|
|
|
|
|
|
|
private struct ActivityView: UIViewControllerRepresentable {
|
|
|
|
let item: ShareItem
|
|
|
|
|
|
|
|
func makeUIViewController(
|
|
|
|
context: UIViewControllerRepresentableContext<ActivityView>
|
|
|
|
) -> UIActivityViewController {
|
|
|
|
UIActivityViewController(
|
|
|
|
activityItems: [item.content],
|
|
|
|
applicationActivities: nil
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateUIViewController(
|
|
|
|
_ uiViewController: UIActivityViewController,
|
|
|
|
context: UIViewControllerRepresentableContext<ActivityView>
|
|
|
|
) { }
|
|
|
|
}
|