From 370b589a6bac2669bb52d78e7f8a1237c4bf9ec5 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 4 Feb 2025 19:12:16 -0500 Subject: [PATCH] Disallow interactive gallery dismissal while editing attachment description --- ...chmentWrapperGalleryContentViewController.swift} | 13 +++++++++++-- .../Attachments/AttachmentsGalleryDataSource.swift | 2 +- .../GalleryVC/GalleryContentViewController.swift | 5 +++++ .../GalleryVC/GalleryDismissInteraction.swift | 6 +----- .../GalleryVC/GalleryItemViewController.swift | 10 ++++++++++ 5 files changed, 28 insertions(+), 8 deletions(-) rename Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/{EditAttachmentWrapperGalleryContentViewController.swift => AttachmentWrapperGalleryContentViewController.swift} (93%) diff --git a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/EditAttachmentWrapperGalleryContentViewController.swift b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift similarity index 93% rename from Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/EditAttachmentWrapperGalleryContentViewController.swift rename to Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift index cd107fe9..ffc5fe3d 100644 --- a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/EditAttachmentWrapperGalleryContentViewController.swift +++ b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift @@ -1,5 +1,5 @@ // -// EditAttachmentWrapperGalleryContentViewController.swift +// AttachmentWrapperGalleryContentViewController.swift // ComposeUI // // Created by Shadowfacts on 11/22/24. @@ -8,7 +8,7 @@ import UIKit import GalleryVC -class EditAttachmentWrapperGalleryContentViewController: UIViewController, GalleryContentViewController { +class AttachmentWrapperGalleryContentViewController: UIViewController, GalleryContentViewController { let draftAttachment: DraftAttachment let wrapped: any GalleryContentViewController @@ -94,6 +94,15 @@ class EditAttachmentWrapperGalleryContentViewController: UIViewController, Galle return true } } + + func galleryShouldBeginInteractiveDismiss() -> Bool { + if editDescriptionViewController.textView.isFirstResponder { + editDescriptionViewController.textView.resignFirstResponder() + return false + } else { + return true + } + } } private class EditAttachmentDescriptionViewController: UIViewController { diff --git a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentsGalleryDataSource.swift b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentsGalleryDataSource.swift index 6a013e62..b5779757 100644 --- a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentsGalleryDataSource.swift +++ b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentsGalleryDataSource.swift @@ -60,7 +60,7 @@ struct AttachmentsGalleryDataSource: GalleryDataSource { } } - return EditAttachmentWrapperGalleryContentViewController(draftAttachment: attachment, wrapped: content) + return AttachmentWrapperGalleryContentViewController(draftAttachment: attachment, wrapped: content) } func galleryContentTransitionSourceView(forItemAt index: Int) -> UIView? { diff --git a/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift index f77b5570..e88b5528 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift @@ -23,6 +23,7 @@ public protocol GalleryContentViewController: UIViewController { func setControlsVisible(_ visible: Bool, animated: Bool, dueToUserInteraction: Bool) func galleryContentDidAppear() func galleryContentWillDisappear() + func galleryShouldBeginInteractiveDismiss() -> Bool } public extension GalleryContentViewController { @@ -58,6 +59,10 @@ public extension GalleryContentViewController { func galleryContentWillDisappear() { } + + func galleryShouldBeginInteractiveDismiss() -> Bool { + true + } } public enum GalleryContentPresentationAnimation { diff --git a/Packages/GalleryVC/Sources/GalleryVC/GalleryDismissInteraction.swift b/Packages/GalleryVC/Sources/GalleryVC/GalleryDismissInteraction.swift index d7153b30..9dcf9866 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/GalleryDismissInteraction.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/GalleryDismissInteraction.swift @@ -106,12 +106,8 @@ extension GalleryDismissInteraction: UIGestureRecognizerDelegate { let itemVC = viewController.currentItemViewController if viewController.galleryDataSource.galleryContentTransitionSourceView(forItemAt: itemVC.itemIndex) == nil { return false - } else if itemVC.scrollView.zoomScale > itemVC.scrollView.minimumZoomScale { - return false - } else if !itemVC.scrollAndZoomEnabled { - return false } else { - return true + return itemVC.shouldBeginInteractiveDismiss() } } } diff --git a/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift index dfde3f79..a9567752 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift @@ -528,6 +528,16 @@ class GalleryItemViewController: UIViewController { present(activityVC, animated: true) } + func shouldBeginInteractiveDismiss() -> Bool { + if scrollView.zoomScale > scrollView.minimumZoomScale { + false + } else if !scrollAndZoomEnabled { + false + } else { + content.galleryShouldBeginInteractiveDismiss() + } + } + } extension GalleryItemViewController: GalleryContentViewControllerContainer {