mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
QuickLook media. (#447)
* Use QL previews for video and present full screen. * Use URL(staticString:) in more places. * Fix DesignKit issues.
This commit is contained in:
@@ -22,19 +22,27 @@ struct FilePreviewScreen: View {
|
||||
@ObservedObject var context: FilePreviewViewModel.Context
|
||||
|
||||
var body: some View {
|
||||
PreviewController(fileURL: context.viewState.fileURL, title: context.viewState.title)
|
||||
.ignoresSafeArea(.all, edges: [.horizontal, .bottom])
|
||||
.navigationTitle(ElementL10n.attachmentTypeFile)
|
||||
PreviewView(context: context,
|
||||
fileURL: context.viewState.fileURL,
|
||||
title: context.viewState.title)
|
||||
.ignoresSafeArea()
|
||||
}
|
||||
}
|
||||
|
||||
private struct PreviewController: UIViewControllerRepresentable {
|
||||
private struct PreviewView: UIViewControllerRepresentable {
|
||||
let context: FilePreviewViewModel.Context
|
||||
let fileURL: URL
|
||||
let title: String?
|
||||
|
||||
func makeUIViewController(context: Context) -> UINavigationController {
|
||||
let controller = QLPreviewController()
|
||||
controller.dataSource = context.coordinator
|
||||
|
||||
let doneButton = UIBarButtonItem(title: "Done",
|
||||
style: .done,
|
||||
target: context.coordinator,
|
||||
action: #selector(Coordinator.done))
|
||||
controller.navigationItem.rightBarButtonItem = doneButton
|
||||
|
||||
return UINavigationController(rootViewController: controller)
|
||||
}
|
||||
@@ -42,22 +50,28 @@ private struct PreviewController: UIViewControllerRepresentable {
|
||||
func updateUIViewController(_ uiViewController: UINavigationController, context: Context) { }
|
||||
|
||||
func makeCoordinator() -> Coordinator {
|
||||
Coordinator(parent: self)
|
||||
Coordinator(view: self)
|
||||
}
|
||||
|
||||
class Coordinator: NSObject, QLPreviewControllerDataSource {
|
||||
let view: PreviewView
|
||||
|
||||
class Coordinator: QLPreviewControllerDataSource {
|
||||
let parent: PreviewController
|
||||
|
||||
init(parent: PreviewController) {
|
||||
self.parent = parent
|
||||
init(view: PreviewView) {
|
||||
self.view = view
|
||||
}
|
||||
|
||||
@objc func done() {
|
||||
Task { await view.context.send(viewAction: .cancel) }
|
||||
}
|
||||
|
||||
// MARK: - QLPreviewControllerDataSource
|
||||
|
||||
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
|
||||
1
|
||||
}
|
||||
|
||||
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
|
||||
PreviewItem(previewItemURL: parent.fileURL, previewItemTitle: parent.title)
|
||||
PreviewItem(previewItemURL: view.fileURL, previewItemTitle: view.title)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user