From bbccbe42c13a156c2339b4ff8b4765d0aef6651b Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 13 Dec 2021 15:51:42 +1100 Subject: [PATCH 1/5] copy / paste images directly --- .../ConversationVC+Interaction.swift | 10 ++++++++++ .../Input View/InputTextView.swift | 17 +++++++++++++++++ .../Conversations/Input View/InputView.swift | 5 +++++ .../SendMediaNavigationController.swift | 11 +++++++++++ 4 files changed, 43 insertions(+) diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 809d9f165..5a56aab8e 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -49,6 +49,16 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc } // MARK: Attachments + func didPasteImageFromPasteboard(_ image: UIImage) { + guard let imageData = image.jpegData(compressionQuality: 1.0) else { return } + let dataSource = DataSourceValue.dataSource(with: imageData, utiType: kUTTypeJPEG as String) + let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: kUTTypeJPEG as String, imageQuality: .medium) + + let sendMediaNavController = SendMediaNavigationController.showingWithImage(attachment, delegate: self) + sendMediaNavController.modalPresentationStyle = .fullScreen + self.present(sendMediaNavController, animated: true, completion: nil) + } + func sendMediaNavDidCancel(_ sendMediaNavigationController: SendMediaNavigationController) { dismiss(animated: true, completion: nil) } diff --git a/Session/Conversations/Input View/InputTextView.swift b/Session/Conversations/Input View/InputTextView.swift index 57546e407..69c61da67 100644 --- a/Session/Conversations/Input View/InputTextView.swift +++ b/Session/Conversations/Input View/InputTextView.swift @@ -37,6 +37,22 @@ public final class InputTextView : UITextView, UITextViewDelegate { public required init?(coder: NSCoder) { preconditionFailure("Use init(delegate:) instead.") } + + public override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { + if action == #selector(paste(_:)) { + if let _ = UIPasteboard.general.image { + return true + } + } + return super.canPerformAction(action, withSender: sender) + } + + public override func paste(_ sender: Any?) { + if let image = UIPasteboard.general.image { + snDelegate?.didPasteImageFromPasteboard(self, image: image) + } + super.paste(sender) + } private func setUpViewHierarchy() { showsHorizontalScrollIndicator = false @@ -80,4 +96,5 @@ protocol InputTextViewDelegate : AnyObject { func inputTextViewDidChangeSize(_ inputTextView: InputTextView) func inputTextViewDidChangeContent(_ inputTextView: InputTextView) + func didPasteImageFromPasteboard(_ inputTextView: InputTextView, image: UIImage) } diff --git a/Session/Conversations/Input View/InputView.swift b/Session/Conversations/Input View/InputView.swift index 599af7599..9b78dc9e6 100644 --- a/Session/Conversations/Input View/InputView.swift +++ b/Session/Conversations/Input View/InputView.swift @@ -143,6 +143,10 @@ final class InputView : UIView, InputViewButtonDelegate, InputTextViewDelegate, autoGenerateLinkPreviewIfPossible() delegate?.inputTextViewDidChangeContent(inputTextView) } + + func didPasteImageFromPasteboard(_ inputTextView: InputTextView, image: UIImage) { + delegate?.didPasteImageFromPasteboard(image) + } // We want to show either a link preview or a quote draft, but never both at the same time. When trying to // generate a link preview, wait until we're sure that we'll be able to build a link preview from the given @@ -351,4 +355,5 @@ protocol InputViewDelegate : AnyObject, ExpandingAttachmentsButtonDelegate, Voic func handleQuoteViewCancelButtonTapped() func inputTextViewDidChangeContent(_ inputTextView: InputTextView) func handleMentionSelected(_ mention: Mention, from view: MentionSelectionView) + func didPasteImageFromPasteboard(_ image: UIImage) } diff --git a/Session/Media Viewing & Editing/SendMediaNavigationController.swift b/Session/Media Viewing & Editing/SendMediaNavigationController.swift index de975713e..ff49dc45c 100644 --- a/Session/Media Viewing & Editing/SendMediaNavigationController.swift +++ b/Session/Media Viewing & Editing/SendMediaNavigationController.swift @@ -58,6 +58,17 @@ class SendMediaNavigationController: OWSNavigationController { @objc public weak var sendMediaNavDelegate: SendMediaNavDelegate? + + @objc class func showingWithImage(_ attachment: SignalAttachment, delegate: SendMediaNavDelegate) -> SendMediaNavigationController { + let navController = SendMediaNavigationController() + navController.sendMediaNavDelegate = delegate + let approvalViewController = AttachmentApprovalViewController(mode: .modal, attachments: [ attachment ]) + approvalViewController.approvalDelegate = navController + approvalViewController.messageText = delegate.sendMediaNavInitialMessageText(navController) + navController.setViewControllers([approvalViewController], animated: false) + + return navController + } @objc public class func showingCameraFirst() -> SendMediaNavigationController { From d74af622bcbd95754ffe27b5bb52c9e3e568ab2e Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 13 Dec 2021 16:22:45 +1100 Subject: [PATCH 2/5] fix photos from original camera is rotated in the preview page --- .../Image Editing/ImageEditorCanvasView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorCanvasView.swift b/SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorCanvasView.swift index 12fae43f5..92e4f93c1 100644 --- a/SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorCanvasView.swift +++ b/SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorCanvasView.swift @@ -166,7 +166,7 @@ public class ImageEditorCanvasView: UIView { // of code simplicity. We could modify the image layer's // transform to handle the normalization, which would // have perf benefits. - return srcImage + return srcImage.normalized() } // MARK: - Content From 324c421b46681ee3ad676ca4e37b9241f884d1c0 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 14 Dec 2021 11:43:40 +1100 Subject: [PATCH 3/5] rough fix on video progress bar UI --- Session/Media Viewing & Editing/MediaDetailViewController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Session/Media Viewing & Editing/MediaDetailViewController.m b/Session/Media Viewing & Editing/MediaDetailViewController.m index 1e19acaf4..446000b80 100644 --- a/Session/Media Viewing & Editing/MediaDetailViewController.m +++ b/Session/Media Viewing & Editing/MediaDetailViewController.m @@ -257,7 +257,7 @@ NS_ASSUME_NONNULL_BEGIN self.videoProgressBar = videoProgressBar; [self.view addSubview:videoProgressBar]; [videoProgressBar autoPinWidthToSuperview]; - [videoProgressBar autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self.view withOffset:0.0f]; + [videoProgressBar autoPinEdgeToSuperviewSafeArea:ALEdgeTop]; CGFloat kVideoProgressBarHeight = 44; [videoProgressBar autoSetDimension:ALDimensionHeight toSize:kVideoProgressBarHeight]; From 5803eae134279d1765df83746dba2d1f95b60d12 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 14 Dec 2021 15:12:48 +1100 Subject: [PATCH 4/5] clean --- .../Conversations/ConversationVC+Interaction.swift | 6 +++--- .../SendMediaNavigationController.swift | 11 ----------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/Session/Conversations/ConversationVC+Interaction.swift b/Session/Conversations/ConversationVC+Interaction.swift index 5a56aab8e..61ff20d9f 100644 --- a/Session/Conversations/ConversationVC+Interaction.swift +++ b/Session/Conversations/ConversationVC+Interaction.swift @@ -54,9 +54,9 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc let dataSource = DataSourceValue.dataSource(with: imageData, utiType: kUTTypeJPEG as String) let attachment = SignalAttachment.attachment(dataSource: dataSource, dataUTI: kUTTypeJPEG as String, imageQuality: .medium) - let sendMediaNavController = SendMediaNavigationController.showingWithImage(attachment, delegate: self) - sendMediaNavController.modalPresentationStyle = .fullScreen - self.present(sendMediaNavController, animated: true, completion: nil) + let approvalVC = AttachmentApprovalViewController.wrappedInNavController(attachments: [ attachment ], approvalDelegate: self) + approvalVC.modalPresentationStyle = .fullScreen + self.present(approvalVC, animated: true, completion: nil) } func sendMediaNavDidCancel(_ sendMediaNavigationController: SendMediaNavigationController) { diff --git a/Session/Media Viewing & Editing/SendMediaNavigationController.swift b/Session/Media Viewing & Editing/SendMediaNavigationController.swift index ff49dc45c..de975713e 100644 --- a/Session/Media Viewing & Editing/SendMediaNavigationController.swift +++ b/Session/Media Viewing & Editing/SendMediaNavigationController.swift @@ -58,17 +58,6 @@ class SendMediaNavigationController: OWSNavigationController { @objc public weak var sendMediaNavDelegate: SendMediaNavDelegate? - - @objc class func showingWithImage(_ attachment: SignalAttachment, delegate: SendMediaNavDelegate) -> SendMediaNavigationController { - let navController = SendMediaNavigationController() - navController.sendMediaNavDelegate = delegate - let approvalViewController = AttachmentApprovalViewController(mode: .modal, attachments: [ attachment ]) - approvalViewController.approvalDelegate = navController - approvalViewController.messageText = delegate.sendMediaNavInitialMessageText(navController) - navController.setViewControllers([approvalViewController], animated: false) - - return navController - } @objc public class func showingCameraFirst() -> SendMediaNavigationController { From c5635a39ddcaca6e606e5b8428a665e090641808 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Tue, 14 Dec 2021 15:51:17 +1100 Subject: [PATCH 5/5] set nickname to a person that never talked to --- .../Settings/OWSConversationSettingsViewController.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Session/Conversations/Settings/OWSConversationSettingsViewController.m b/Session/Conversations/Settings/OWSConversationSettingsViewController.m index b703a58ff..345a09bc5 100644 --- a/Session/Conversations/Settings/OWSConversationSettingsViewController.m +++ b/Session/Conversations/Settings/OWSConversationSettingsViewController.m @@ -1025,8 +1025,11 @@ CGFloat kIconViewLength = 24; - (void)saveName { if (![self.thread isKindOfClass:TSContactThread.class]) { return; } - SNContact *contact = [LKStorage.shared getContactWithSessionID:((TSContactThread *)self.thread).contactSessionID]; - if (contact == nil) { return; } + NSString *sessionID = ((TSContactThread *)self.thread).contactSessionID; + SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID]; + if (contact == nil) { + contact = [[SNContact alloc] initWithSessionID:sessionID]; + } NSString *text = [self.displayNameTextField.text stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet]; contact.nickname = text.length > 0 ? text : nil; [LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {