From a8caae73cf68798ab08a336bacce8cf6f9a900c3 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 28 Mar 2019 13:02:09 -0600 Subject: [PATCH] remove redundant state --- .../ConversationViewController.m | 25 ++++++++++++++++--- .../SendMediaNavigationController.swift | 20 +++++++++------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 77874febc..64ae0b959 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2858,8 +2858,7 @@ typedef enum : NSUInteger { UIViewController *pickerModal; if (SSKFeatureFlags.useCustomPhotoCapture) { - SendMediaNavigationController *navController = - [SendMediaNavigationController showingCameraFirstWithMessageText:self.inputToolbar.messageText]; + SendMediaNavigationController *navController = [SendMediaNavigationController showingCameraFirst]; navController.sendMediaNavDelegate = self; pickerModal = navController; } else { @@ -2904,8 +2903,7 @@ typedef enum : NSUInteger { return; } - SendMediaNavigationController *pickerModal = - [SendMediaNavigationController showingMediaLibraryFirstWithMessageText:self.inputToolbar.messageText]; + SendMediaNavigationController *pickerModal = [SendMediaNavigationController showingMediaLibraryFirst]; pickerModal.sendMediaNavDelegate = self; [self dismissKeyBoard]; @@ -2941,9 +2939,26 @@ typedef enum : NSUInteger { messageText:(nullable NSString *)messageText { [self tryToSendAttachments:attachments messageText:messageText]; + [self.inputToolbar clearTextMessageAnimated:NO]; + + // we want to already be at the bottom when the user returns, rather than have to watch + // the new message scroll into view. + [self scrollToBottomAnimated:NO]; + [self dismissViewControllerAnimated:YES completion:nil]; } +- (nullable NSString *)sendMediaNavInitialMessageText:(SendMediaNavigationController *)sendMediaNavigationController +{ + return self.inputToolbar.messageText; +} + +- (void)sendMediaNav:(SendMediaNavigationController *)sendMediaNavigationController + didChangeMessageText:(nullable NSString *)messageText +{ + [self.inputToolbar setMessageText:messageText animated:NO]; +} + #pragma mark - UIImagePickerControllerDelegate /* @@ -3910,7 +3925,9 @@ typedef enum : NSUInteger { messageText:(NSString *_Nullable)messageText { [self tryToSendAttachments:attachments messageText:messageText]; + [self.inputToolbar clearTextMessageAnimated:NO]; [self dismissViewControllerAnimated:YES completion:nil]; + // We always want to scroll to the bottom of the conversation after the local user // sends a message. Normally, this is taken care of in yapDatabaseModified:, but // we don't listen to db modifications when this view isn't visible, i.e. when the diff --git a/Signal/src/ViewControllers/Photos/SendMediaNavigationController.swift b/Signal/src/ViewControllers/Photos/SendMediaNavigationController.swift index 08002d79b..79918b935 100644 --- a/Signal/src/ViewControllers/Photos/SendMediaNavigationController.swift +++ b/Signal/src/ViewControllers/Photos/SendMediaNavigationController.swift @@ -10,6 +10,9 @@ import PromiseKit protocol SendMediaNavDelegate: AnyObject { func sendMediaNavDidCancel(_ sendMediaNavigationController: SendMediaNavigationController) func sendMediaNav(_ sendMediaNavigationController: SendMediaNavigationController, didApproveAttachments attachments: [SignalAttachment], messageText: String?) + + func sendMediaNavInitialMessageText(_ sendMediaNavigationController: SendMediaNavigationController) -> String? + func sendMediaNav(_ sendMediaNavigationController: SendMediaNavigationController, didChangeMessageText newMessageText: String?) } @objc @@ -19,8 +22,6 @@ class SendMediaNavigationController: OWSNavigationController { override var prefersStatusBarHidden: Bool { return true } - var messageText: String? - override func viewDidLoad() { super.viewDidLoad() @@ -53,21 +54,19 @@ class SendMediaNavigationController: OWSNavigationController { public weak var sendMediaNavDelegate: SendMediaNavDelegate? @objc - public class func showingCameraFirst(messageText: String) -> SendMediaNavigationController { + public class func showingCameraFirst() -> SendMediaNavigationController { let navController = SendMediaNavigationController() navController.setViewControllers([navController.captureViewController], animated: false) navController.updateButtons() - navController.messageText = messageText return navController } @objc - public class func showingMediaLibraryFirst(messageText: String) -> SendMediaNavigationController { + public class func showingMediaLibraryFirst() -> SendMediaNavigationController { let navController = SendMediaNavigationController() navController.setViewControllers([navController.mediaLibraryViewController], animated: false) navController.updateButtons() - navController.messageText = messageText return navController } @@ -212,9 +211,14 @@ class SendMediaNavigationController: OWSNavigationController { }() private func pushApprovalViewController() { + guard let sendMediaNavDelegate = self.sendMediaNavDelegate else { + owsFailDebug("sendMediaNavDelegate was unexpectedly nil") + return + } + let approvalViewController = AttachmentApprovalViewController(mode: .sharedNavigation, attachments: self.attachments) approvalViewController.approvalDelegate = self - approvalViewController.messageText = messageText + approvalViewController.messageText = sendMediaNavDelegate.sendMediaNavInitialMessageText(self) pushViewController(approvalViewController, animated: true) updateButtons() @@ -367,7 +371,7 @@ extension SendMediaNavigationController: ImagePickerGridControllerDelegate { extension SendMediaNavigationController: AttachmentApprovalViewControllerDelegate { func attachmentApproval(_ attachmentApproval: AttachmentApprovalViewController, didChangeMessageText newMessageText: String?) { - self.messageText = newMessageText + sendMediaNavDelegate?.sendMediaNav(self, didChangeMessageText: newMessageText) } func attachmentApproval(_ attachmentApproval: AttachmentApprovalViewController, didRemoveAttachment attachment: SignalAttachment) {