From 210cba3e37efc6da5fd85abbca068a5e2f335b2d Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 11 Jul 2018 22:11:36 -0600 Subject: [PATCH] Media actions --- .../ConversationViewController.m | 15 ++++-- .../ConversationView/ConversationViewItem.h | 1 + .../MessageActionsViewController.swift | 50 +++++++++++++++++++ .../translations/en.lproj/Localizable.strings | 14 ++++-- 4 files changed, 72 insertions(+), 8 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index affc66fe9..15f951881 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2002,15 +2002,23 @@ typedef enum : NSUInteger { - (void)conversationCell:(ConversationViewCell *)cell didLongpressMediaViewItem:(ConversationViewItem *)viewItem { - DDLogDebug(@"%@ in %s TODO", self.logTag, __PRETTY_FUNCTION__); + NSArray *messageActions = [viewItem mediaActionsWithDelegate:self]; + [self presentMessageActions:messageActions withFocusedCell:cell]; } - (void)conversationCell:(ConversationViewCell *)cell didLongpressQuoteViewItem:(ConversationViewItem *)viewItem { - DDLogDebug(@"%@ in %s TODO", self.logTag, __PRETTY_FUNCTION__); + NSArray *messageActions = [viewItem quotedMessageActionsWithDelegate:self]; + [self presentMessageActions:messageActions withFocusedCell:cell]; } - (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(ConversationViewItem *)viewItem +{ + NSArray *messageActions = [viewItem textActionsWithDelegate:self]; + [self presentMessageActions:messageActions withFocusedCell:cell]; +} + +- (void)presentMessageActions:(NSArray *)messageActions withFocusedCell:(ConversationViewCell *)cell { // TODO Interpolate from 0->0.3 depending on distance to make visible. NSTimeInterval animationDuration = 0.3; @@ -2023,8 +2031,7 @@ typedef enum : NSUInteger { } completion:^(BOOL finished) { // TODO pass in real actions - - NSArray *messageActions = [viewItem textActionsWithDelegate:self]; + MessageActionsViewController *messageActionsViewController = [[MessageActionsViewController alloc] initWithFocusedView:cell actions:messageActions]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h index 9e649b77a..44c25020d 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h @@ -112,6 +112,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); #pragma mark - MessageActions @property (nonatomic, readonly) BOOL hasBodyTextActionContent; +@property (nonatomic, readonly) BOOL hasMediaActionContent; - (void)copyTextAction; - (void)shareMediaAction; diff --git a/Signal/src/ViewControllers/MessageActionsViewController.swift b/Signal/src/ViewControllers/MessageActionsViewController.swift index 49c499c2e..24d9ee34a 100644 --- a/Signal/src/ViewControllers/MessageActionsViewController.swift +++ b/Signal/src/ViewControllers/MessageActionsViewController.swift @@ -48,6 +48,24 @@ struct MessageActionBuilder { conversationViewItem.deleteAction() }) } + + static func copyMedia(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> MessageAction { + return MessageAction(image: #imageLiteral(resourceName: "generic-attachment-small"), + title: NSLocalizedString("MESSAGE_ACTION_COPY_MEDIA", comment: "Action sheet button title"), + subtitle: nil, + block: { (_) in + conversationViewItem.copyMediaAction() + }) + } + + static func saveMedia(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> MessageAction { + return MessageAction(image: #imageLiteral(resourceName: "generic-attachment-small"), + title: NSLocalizedString("MESSAGE_ACTION_SAVE_MEDIA", comment: "Action sheet button title"), + subtitle: nil, + block: { (_) in + conversationViewItem.saveMediaAction() + }) + } } extension ConversationViewItem { @@ -72,6 +90,38 @@ extension ConversationViewItem { return actions } + + @objc + func mediaActions(delegate: MessageActionsDelegate) -> [MessageAction] { + var actions: [MessageAction] = [] + + let replyAction = MessageActionBuilder.reply(conversationViewItem: self, delegate: delegate) + actions.append(replyAction) + + if self.hasMediaActionContent { + let copyMediaAction = MessageActionBuilder.copyMedia(conversationViewItem: self, delegate: delegate) + actions.append(copyMediaAction) + let saveMediaAction = MessageActionBuilder.saveMedia(conversationViewItem: self, delegate: delegate) + actions.append(saveMediaAction) + } + + let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: self, delegate: delegate) + actions.append(deleteAction) + + let showInfoAction = MessageActionBuilder.showDetails(conversationViewItem: self, delegate: delegate) + actions.append(showInfoAction) + + return actions + } + + @objc + func quotedMessageActions(delegate: MessageActionsDelegate) -> [MessageAction] { + var actions: [MessageAction] = [] + + owsFail("\(self.logTag) in \(#function) TODO") + + return actions + } } @objc diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 2ae6ba39a..d3e77ee70 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -1162,19 +1162,25 @@ "MEDIA_GALLERY_THIS_MONTH_HEADER" = "This Month"; /* Action sheet button title */ -"MESSAGE_ACTION_COPY_TEXT" = "Copy message text"; +"MESSAGE_ACTION_COPY_MEDIA" = "Copy Media"; /* Action sheet button title */ -"MESSAGE_ACTION_DELETE_MESSAGE" = "Delete this message"; +"MESSAGE_ACTION_COPY_TEXT" = "Copy Message Text"; + +/* Action sheet button title */ +"MESSAGE_ACTION_DELETE_MESSAGE" = "Delete this Message"; /* Action sheet button subtitle */ "MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "This will delete it on this device only"; /* Action sheet button title */ -"MESSAGE_ACTION_REPLY" = "Reply to this message"; +"MESSAGE_ACTION_DETAILS" = "More Info"; + +/* Action sheet button title */ +"MESSAGE_ACTION_REPLY" = "Reply to this Message"; /* Action sheet button title */ -"MESSAGE_ACTION_DETAILS" = "More info"; +"MESSAGE_ACTION_SAVE_MEDIA" = "Save Media"; /* Title for the 'message approval' dialog. */ "MESSAGE_APPROVAL_DIALOG_TITLE" = "Message";