Skip to content

Commit a882808

Browse files
committed
fix share sheet crash on ipad from preview
1 parent e398ed1 commit a882808

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

Django Files/Views/Preview.swift

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,8 @@ struct FilePreviewView: View {
729729
@State private var fileNameText = ""
730730
@State private var fileToRename: DFFile? = nil
731731

732+
@State private var showingShareSheet = false
733+
732734
var body: some View {
733735
ZStack {
734736
if redirectURLs[file.raw] == nil {
@@ -881,8 +883,7 @@ struct FilePreviewView: View {
881883
.menuStyle(.button)
882884

883885
Button(action: {
884-
ShareSheet.present(items: [URL(string: file.url) ?? ""])
885-
886+
showingShareSheet = true
886887
}) {
887888
Image(systemName: "square.and.arrow.up")
888889
.font(.system(size: 20))
@@ -891,6 +892,12 @@ struct FilePreviewView: View {
891892
}
892893
.buttonStyle(.borderless)
893894
.padding(.leading, 1)
895+
.sheet(isPresented: $showingShareSheet) {
896+
if let url = URL(string: file.url) {
897+
ShareSheet(url: url)
898+
.presentationDetents([.medium])
899+
}
900+
}
894901
Spacer()
895902
}
896903
.background(.ultraThinMaterial)
@@ -902,26 +909,6 @@ struct FilePreviewView: View {
902909
}
903910
}
904911

905-
struct ShareSheet {
906-
static func present(items: [Any]) {
907-
guard let rootVC = UIApplication.shared.connectedScenes
908-
.compactMap({ ($0 as? UIWindowScene)?.keyWindow })
909-
.first?.rootViewController else {
910-
return
911-
}
912-
913-
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)
914-
915-
// Find the topmost presented view controller
916-
var topVC = rootVC
917-
while let presented = topVC.presentedViewController {
918-
topVC = presented
919-
}
920-
921-
topVC.present(activityVC, animated: true)
922-
}
923-
}
924-
925912
@MainActor
926913
private func loadRedirectURL(for file: DFFile) async {
927914
guard redirectURLs[file.raw] == nil,
@@ -1162,4 +1149,24 @@ struct PDFView: UIViewRepresentable {
11621149
}
11631150
}
11641151

1152+
struct ShareSheet: View {
1153+
let url: URL
1154+
@Environment(\.dismiss) private var dismiss
1155+
1156+
var body: some View {
1157+
ActivityViewController(activityItems: [url])
1158+
}
1159+
}
1160+
1161+
struct ActivityViewController: UIViewControllerRepresentable {
1162+
let activityItems: [Any]
1163+
1164+
func makeUIViewController(context: Context) -> UIActivityViewController {
1165+
let controller = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
1166+
return controller
1167+
}
1168+
1169+
func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {}
1170+
}
1171+
11651172

0 commit comments

Comments
 (0)