From ce3030917fbcee81c8d88b757e59c752c7f836bf Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 11 Jul 2018 22:48:48 -0600 Subject: [PATCH] MessageActions for info messages --- .../Cells/ConversationViewCell.h | 2 + .../Cells/OWSSystemMessageCell.m | 45 +------------------ .../ConversationViewController.m | 10 ++++- .../MessageActionsViewController.swift | 7 +++ 4 files changed, 19 insertions(+), 45 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h index 1661b7003..8348a091d 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/ConversationViewCell.h @@ -25,6 +25,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(ConversationViewItem *)viewItem; - (void)conversationCell:(ConversationViewCell *)cell didLongpressMediaViewItem:(ConversationViewItem *)viewItem; - (void)conversationCell:(ConversationViewCell *)cell didLongpressQuoteViewItem:(ConversationViewItem *)viewItem; +- (void)conversationCell:(ConversationViewCell *)cell + didLongpressSystemMessageViewItem:(ConversationViewItem *)viewItem; - (void)didPanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer viewItem:(ConversationViewItem *)conversationItem; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m index 87f46700d..0646032be 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m @@ -75,6 +75,7 @@ typedef void (^SystemMessageActionBlock)(void); self.layoutMargins = UIEdgeInsetsZero; self.contentView.layoutMargins = UIEdgeInsetsZero; + self.contentView.backgroundColor = UIColor.whiteColor; self.iconView = [UIImageView new]; [self.iconView autoSetDimension:ALDimensionWidth toSize:self.iconSize]; @@ -380,48 +381,6 @@ typedef void (^SystemMessageActionBlock)(void); return result; } -#pragma mark - UIMenuController - -- (void)showMenuController -{ - OWSAssertIsOnMainThread(); - - DDLogDebug(@"%@ long pressed system message cell: %@", self.logTag, self.viewItem.interaction.debugDescription); - - [self becomeFirstResponder]; - - if ([UIMenuController sharedMenuController].isMenuVisible) { - [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; - } - - UIMenuController *menuController = [UIMenuController sharedMenuController]; - menuController.menuItems = @[]; - UIView *fromView = self.titleLabel; - CGRect targetRect = [fromView.superview convertRect:fromView.frame toView:self]; - [menuController setTargetRect:targetRect inView:self]; - [menuController setMenuVisible:YES animated:YES]; -} - -- (BOOL)canPerformAction:(SEL)action withSender:(nullable id)sender -{ - return action == @selector(delete:); -} - -- (void)delete:(nullable id)sender -{ - DDLogInfo(@"%@ chose delete", self.logTag); - - TSInteraction *interaction = self.viewItem.interaction; - OWSAssert(interaction); - - [interaction remove]; -} - -- (BOOL)canBecomeFirstResponder -{ - return YES; -} - #pragma mark - Actions - (nullable SystemMessageAction *)actionForInteraction:(TSInteraction *)interaction @@ -575,7 +534,7 @@ typedef void (^SystemMessageActionBlock)(void); OWSAssert(interaction); if (longPress.state == UIGestureRecognizerStateBegan) { - [self showMenuController]; + [self.delegate conversationCell:self didLongpressSystemMessageViewItem:self.viewItem]; } } diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 15f951881..1b5aff030 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2006,15 +2006,21 @@ typedef enum : NSUInteger { [self presentMessageActions:messageActions withFocusedCell:cell]; } +- (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(ConversationViewItem *)viewItem +{ + NSArray *messageActions = [viewItem textActionsWithDelegate:self]; + [self presentMessageActions:messageActions withFocusedCell:cell]; +} + - (void)conversationCell:(ConversationViewCell *)cell didLongpressQuoteViewItem:(ConversationViewItem *)viewItem { NSArray *messageActions = [viewItem quotedMessageActionsWithDelegate:self]; [self presentMessageActions:messageActions withFocusedCell:cell]; } -- (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(ConversationViewItem *)viewItem +- (void)conversationCell:(ConversationViewCell *)cell didLongpressSystemMessageViewItem:(ConversationViewItem *)viewItem { - NSArray *messageActions = [viewItem textActionsWithDelegate:self]; + NSArray *messageActions = [viewItem infoMessageActionsWithDelegate:self]; [self presentMessageActions:messageActions withFocusedCell:cell]; } diff --git a/Signal/src/ViewControllers/MessageActionsViewController.swift b/Signal/src/ViewControllers/MessageActionsViewController.swift index 935b23a2f..b2f52e8eb 100644 --- a/Signal/src/ViewControllers/MessageActionsViewController.swift +++ b/Signal/src/ViewControllers/MessageActionsViewController.swift @@ -122,6 +122,13 @@ extension ConversationViewItem { return [replyAction, deleteAction, showDetailsAction] } + + @objc + func infoMessageActions(delegate: MessageActionsDelegate) -> [MessageAction] { + let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: self, delegate: delegate) + + return [deleteAction] + } } @objc