diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 389c95ae3..4bc40b0d4 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -405,6 +405,10 @@ NS_ASSUME_NONNULL_BEGIN return; } + if ([self isGestureInCellHeader:sender]) { + return; + } + if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) { TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction; if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) { @@ -427,6 +431,10 @@ NS_ASSUME_NONNULL_BEGIN return; } + if ([self isGestureInCellHeader:sender]) { + return; + } + if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) { TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction; if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) { @@ -460,9 +468,26 @@ NS_ASSUME_NONNULL_BEGIN { OWSAssert(self.delegate); + if ([self isGestureInCellHeader:panRecognizer]) { + return; + } + [self.delegate didPanWithGestureRecognizer:panRecognizer viewItem:self.viewItem]; } +- (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender +{ + OWSAssert(self.viewItem); + + if (!self.viewItem.hasCellHeader) { + return NO; + } + + CGPoint location = [sender locationInView:self]; + CGPoint headerBottom = [self convertPoint:CGPointMake(0, self.headerView.height) fromView:self.headerView]; + return location.y <= headerBottom.y; +} + @end NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m index 2851ee105..4c9cd0b5f 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSSystemMessageCell.m @@ -556,6 +556,10 @@ typedef void (^SystemMessageActionBlock)(void); { OWSAssert(self.delegate); + if ([self isGestureInCellHeader:longPress]) { + return; + } + TSInteraction *interaction = self.viewItem.interaction; OWSAssert(interaction); @@ -564,6 +568,19 @@ typedef void (^SystemMessageActionBlock)(void); } } +- (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender +{ + OWSAssert(self.viewItem); + + if (!self.viewItem.hasCellHeader) { + return NO; + } + + CGPoint location = [sender locationInView:self]; + CGPoint headerBottom = [self convertPoint:CGPointMake(0, self.headerView.height) fromView:self.headerView]; + return location.y <= headerBottom.y; +} + - (void)buttonWasPressed:(id)sender { if (!self.action.block) {