diff --git a/ElementX/Sources/Screens/FilePreviewScreen/InteractiveQuickLook.swift b/ElementX/Sources/Screens/FilePreviewScreen/InteractiveQuickLook.swift index 695777e578..c6df5e4413 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/InteractiveQuickLook.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/InteractiveQuickLook.swift @@ -12,22 +12,19 @@ import SwiftUI extension View { /// Preview a media file using a QuickLook Preview Controller. The preview is interactive with /// the dismiss gesture working as expected if it was presented from UIKit. - func interactiveQuickLook(item: Binding, shouldHideControls: Bool = false) -> some View { - modifier(InteractiveQuickLookModifier(item: item, shouldHideControls: shouldHideControls)) + func interactiveQuickLook(item: Binding) -> some View { + modifier(InteractiveQuickLookModifier(item: item)) } } private struct InteractiveQuickLookModifier: ViewModifier { @Binding var item: MediaPreviewItem? - let shouldHideControls: Bool - @State private var dismissalPublisher = PassthroughSubject() func body(content: Content) -> some View { content.background { if let item { MediaPreviewViewController(previewItem: item, - shouldHideControls: shouldHideControls, dismissalPublisher: dismissalPublisher) { self.item = nil } } else { // Work around QLPreviewController dismissal issues, see below. @@ -39,13 +36,11 @@ private struct InteractiveQuickLookModifier: ViewModifier { private struct MediaPreviewViewController: UIViewControllerRepresentable { let previewItem: MediaPreviewItem - let shouldHideControls: Bool let dismissalPublisher: PassthroughSubject let onDismiss: () -> Void func makeUIViewController(context: Context) -> PreviewHostingController { PreviewHostingController(previewItem: previewItem, - shouldHideControls: shouldHideControls, dismissalPublisher: dismissalPublisher, onDismiss: onDismiss) } @@ -58,7 +53,6 @@ private struct MediaPreviewViewController: UIViewControllerRepresentable { /// animations and interactions which don't work if you represent it directly to SwiftUI 🤷‍♂️ class PreviewHostingController: UIViewController, QLPreviewControllerDataSource, QLPreviewControllerDelegate { let previewItem: MediaPreviewItem - let shouldHideControls: Bool let onDismiss: () -> Void private var dismissalObserver: AnyCancellable? @@ -66,11 +60,9 @@ private struct MediaPreviewViewController: UIViewControllerRepresentable { var previewController: QLPreviewController? init(previewItem: MediaPreviewItem, - shouldHideControls: Bool, dismissalPublisher: PassthroughSubject, onDismiss: @escaping () -> Void) { self.previewItem = previewItem - self.shouldHideControls = shouldHideControls self.onDismiss = onDismiss super.init(nibName: nil, bundle: nil) @@ -100,7 +92,7 @@ private struct MediaPreviewViewController: UIViewControllerRepresentable { guard self.previewController == nil else { return } - let previewController = (shouldHideControls ? NoControlsPreviewController() : QLPreviewController()) + let previewController = QLPreviewController() previewController.dataSource = self previewController.delegate = self present(previewController, animated: true) @@ -139,28 +131,6 @@ class MediaPreviewItem: NSObject, QLPreviewItem { } } -private class NoControlsPreviewController: QLPreviewController { - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - - guard let navigationController = children.first as? UINavigationController else { - return - } - - // Remove top file details bar - navigationController.navigationBar.isHidden = true - - // Remove the toolbars and their buttons - navigationController.view.subviews.compactMap { $0 as? UIToolbar }.forEach { toolbar in - toolbar.subviews.forEach { item in - item.isHidden = true - } - - toolbar.isHidden = true - } - } -} - // MARK: - Previews struct PreviewView_Previews: PreviewProvider { @@ -170,7 +140,6 @@ struct PreviewView_Previews: PreviewProvider { static var previews: some View { MediaPreviewViewController(previewItem: previewItem, - shouldHideControls: false, dismissalPublisher: .init()) { } } } diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index ff6c5d59e8..aece688444 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -57,7 +57,7 @@ struct RoomDetailsScreen: View { .navigationTitle(L10n.screenRoomDetailsTitle) .navigationBarTitleDisplayMode(.inline) .track(screen: .RoomDetails) - .interactiveQuickLook(item: $context.mediaPreviewItem, shouldHideControls: true) + .interactiveQuickLook(item: $context.mediaPreviewItem) } // MARK: - Private diff --git a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift index 39c2cda68c..32e555d905 100644 --- a/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberDetailsScreen/View/RoomMemberDetailsScreen.swift @@ -24,7 +24,7 @@ struct RoomMemberDetailsScreen: View { .alert(item: $context.ignoreUserAlert, actions: blockUserAlertActions, message: blockUserAlertMessage) .alert(item: $context.alertInfo) .track(screen: .User) - .interactiveQuickLook(item: $context.mediaPreviewItem, shouldHideControls: true) + .interactiveQuickLook(item: $context.mediaPreviewItem) } // MARK: - Private diff --git a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift index 5d76819a6e..413ad55ed1 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift @@ -21,7 +21,7 @@ struct UserProfileScreen: View { .toolbar { toolbar } .alert(item: $context.alertInfo) .track(screen: .User) - .interactiveQuickLook(item: $context.mediaPreviewItem, shouldHideControls: true) + .interactiveQuickLook(item: $context.mediaPreviewItem) } // MARK: - Private