From ea82419a401766a4f43207151e8605a3a204381b Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 11 Apr 2018 11:25:28 -0400 Subject: [PATCH] Fix long press on quoted reply. --- .../ConversationView/Cells/OWSMessageCell.m | 39 +++++++++---------- .../ConversationView/ConversationViewItem.h | 1 + .../ConversationView/ConversationViewItem.m | 16 ++++++++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 05e54407f..c2f741518 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -511,9 +511,11 @@ NS_ASSUME_NONNULL_BEGIN [self showMediaMenuController:location]; break; } - case OWSMessageGestureLocation_QuotedReply: - // TODO: + case OWSMessageGestureLocation_QuotedReply: { + CGPoint location = [sender locationInView:self]; + [self showDefaultMenuController:location]; break; + } } } @@ -528,28 +530,26 @@ NS_ASSUME_NONNULL_BEGIN - (void)showTextMenuController:(CGPoint)fromLocation { - // We don't want taps on messages to hide the keyboard, - // so we only let messages become first responder - // while they are trying to present the menu controller. - self.isPresentingMenuController = YES; - - [self becomeFirstResponder]; + [self showMenuController:fromLocation menuItems:self.viewItem.textMenuControllerItems]; +} - if ([UIMenuController sharedMenuController].isMenuVisible) { - [[UIMenuController sharedMenuController] setMenuVisible:NO animated:NO]; - } +- (void)showMediaMenuController:(CGPoint)fromLocation +{ + [self showMenuController:fromLocation menuItems:self.viewItem.mediaMenuControllerItems]; +} - // We use custom action selectors so that we can control - // the ordering of the actions in the menu. - NSArray *menuItems = self.viewItem.textMenuControllerItems; - [UIMenuController sharedMenuController].menuItems = menuItems; - CGRect targetRect = CGRectMake(fromLocation.x, fromLocation.y, 1, 1); - [[UIMenuController sharedMenuController] setTargetRect:targetRect inView:self]; - [[UIMenuController sharedMenuController] setMenuVisible:YES animated:YES]; +- (void)showDefaultMenuController:(CGPoint)fromLocation +{ + [self showMenuController:fromLocation menuItems:self.viewItem.defaultMenuControllerItems]; } -- (void)showMediaMenuController:(CGPoint)fromLocation +- (void)showMenuController:(CGPoint)fromLocation menuItems:(NSArray *)menuItems { + if (menuItems.count < 1) { + OWSFail(@"%@ No menu items to present.", self.logTag); + return; + } + // We don't want taps on messages to hide the keyboard, // so we only let messages become first responder // while they are trying to present the menu controller. @@ -563,7 +563,6 @@ NS_ASSUME_NONNULL_BEGIN // We use custom action selectors so that we can control // the ordering of the actions in the menu. - NSArray *menuItems = self.viewItem.mediaMenuControllerItems; [UIMenuController sharedMenuController].menuItems = menuItems; CGRect targetRect = CGRectMake(fromLocation.x, fromLocation.y, 1, 1); [[UIMenuController sharedMenuController] setTargetRect:targetRect inView:self]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h index 6389804e4..dd175445e 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h @@ -105,6 +105,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); - (NSArray *)textMenuControllerItems; - (NSArray *)mediaMenuControllerItems; +- (NSArray *)defaultMenuControllerItems; - (BOOL)canPerformAction:(SEL)action; - (void)copyMediaAction; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index fc651808e..f9d6077a0 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -565,6 +565,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) action:self.deleteActionSelector] ]; } + - (NSArray *)mediaMenuControllerItems { return @[ @@ -586,6 +587,21 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) ]; } +- (NSArray *)defaultMenuControllerItems +{ + return @[ + [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"EDIT_ITEM_MESSAGE_METADATA_ACTION", + @"Short name for edit menu item to show message metadata.") + action:self.metadataActionSelector], + [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"REPLY_ITEM_ACTION", + @"Short name for edit menu item to reply to a message.") + action:self.replyActionSelector], + [[UIMenuItem alloc] initWithTitle:NSLocalizedString(@"EDIT_ITEM_DELETE_ACTION", + @"Short name for edit menu item to delete contents of media message.") + action:self.deleteActionSelector], + ]; +} + - (SEL)copyTextActionSelector { return NSSelectorFromString(@"copyTextAction:");