Merge branch 'charlesmchen/alwaysMessageActions'

pull/1/head
Matthew Chen 6 years ago
commit 8b6386b64f

@ -71,11 +71,13 @@ struct MessageActionBuilder {
class ConversationViewItemActions: NSObject { class ConversationViewItemActions: NSObject {
@objc @objc
class func textActions(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> [MenuAction] { class func textActions(conversationViewItem: ConversationViewItem, shouldAllowReply: Bool, delegate: MessageActionsDelegate) -> [MenuAction] {
var actions: [MenuAction] = [] var actions: [MenuAction] = []
let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate) if shouldAllowReply {
actions.append(replyAction) let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate)
actions.append(replyAction)
}
if conversationViewItem.hasBodyTextActionContent { if conversationViewItem.hasBodyTextActionContent {
let copyTextAction = MessageActionBuilder.copyText(conversationViewItem: conversationViewItem, delegate: delegate) let copyTextAction = MessageActionBuilder.copyText(conversationViewItem: conversationViewItem, delegate: delegate)
@ -92,11 +94,13 @@ class ConversationViewItemActions: NSObject {
} }
@objc @objc
class func mediaActions(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> [MenuAction] { class func mediaActions(conversationViewItem: ConversationViewItem, shouldAllowReply: Bool, delegate: MessageActionsDelegate) -> [MenuAction] {
var actions: [MenuAction] = [] var actions: [MenuAction] = []
let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate) if shouldAllowReply {
actions.append(replyAction) let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate)
actions.append(replyAction)
}
if conversationViewItem.hasMediaActionContent { if conversationViewItem.hasMediaActionContent {
if conversationViewItem.canCopyMedia() { if conversationViewItem.canCopyMedia() {
@ -119,18 +123,26 @@ class ConversationViewItemActions: NSObject {
} }
@objc @objc
class func quotedMessageActions(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> [MenuAction] { class func quotedMessageActions(conversationViewItem: ConversationViewItem, shouldAllowReply: Bool, delegate: MessageActionsDelegate) -> [MenuAction] {
let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate) var actions: [MenuAction] = []
if shouldAllowReply {
let replyAction = MessageActionBuilder.reply(conversationViewItem: conversationViewItem, delegate: delegate)
actions.append(replyAction)
}
let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate) let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate)
actions.append(deleteAction)
let showDetailsAction = MessageActionBuilder.showDetails(conversationViewItem: conversationViewItem, delegate: delegate) let showDetailsAction = MessageActionBuilder.showDetails(conversationViewItem: conversationViewItem, delegate: delegate)
actions.append(showDetailsAction)
return [replyAction, deleteAction, showDetailsAction] return actions
} }
@objc @objc
class func infoMessageActions(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> [MenuAction] { class func infoMessageActions(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> [MenuAction] {
let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate) let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate)
return [deleteAction ]
return [deleteAction]
} }
} }

@ -21,9 +21,15 @@ NS_ASSUME_NONNULL_BEGIN
@protocol ConversationViewCellDelegate <NSObject> @protocol ConversationViewCellDelegate <NSObject>
- (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(id<ConversationViewItem>)viewItem; - (void)conversationCell:(ConversationViewCell *)cell
- (void)conversationCell:(ConversationViewCell *)cell didLongpressMediaViewItem:(id<ConversationViewItem>)viewItem; shouldAllowReply:(BOOL)shouldAllowReply
- (void)conversationCell:(ConversationViewCell *)cell didLongpressQuoteViewItem:(id<ConversationViewItem>)viewItem; didLongpressTextViewItem:(id<ConversationViewItem>)viewItem;
- (void)conversationCell:(ConversationViewCell *)cell
shouldAllowReply:(BOOL)shouldAllowReply
didLongpressMediaViewItem:(id<ConversationViewItem>)viewItem;
- (void)conversationCell:(ConversationViewCell *)cell
shouldAllowReply:(BOOL)shouldAllowReply
didLongpressQuoteViewItem:(id<ConversationViewItem>)viewItem;
- (void)conversationCell:(ConversationViewCell *)cell - (void)conversationCell:(ConversationViewCell *)cell
didLongpressSystemMessageViewItem:(id<ConversationViewItem>)viewItem; didLongpressSystemMessageViewItem:(id<ConversationViewItem>)viewItem;

@ -423,14 +423,15 @@ NS_ASSUME_NONNULL_BEGIN
return; return;
} }
BOOL shouldAllowReply = YES;
if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) { if (self.viewItem.interaction.interactionType == OWSInteractionType_OutgoingMessage) {
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction; TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)self.viewItem.interaction;
if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) { if (outgoingMessage.messageState == TSOutgoingMessageStateFailed) {
// Ignore long press on unsent messages. // Don't allow "delete" or "reply" on "failed" outgoing messages.
return; shouldAllowReply = NO;
} else if (outgoingMessage.messageState == TSOutgoingMessageStateSending) { } else if (outgoingMessage.messageState == TSOutgoingMessageStateSending) {
// Ignore long press on outgoing messages being sent. // Don't allow "delete" or "reply" on "sending" outgoing messages.
return; shouldAllowReply = NO;
} }
} }
@ -438,15 +439,21 @@ NS_ASSUME_NONNULL_BEGIN
switch ([self.messageBubbleView gestureLocationForLocation:locationInMessageBubble]) { switch ([self.messageBubbleView gestureLocationForLocation:locationInMessageBubble]) {
case OWSMessageGestureLocation_Default: case OWSMessageGestureLocation_Default:
case OWSMessageGestureLocation_OversizeText: { case OWSMessageGestureLocation_OversizeText: {
[self.delegate conversationCell:self didLongpressTextViewItem:self.viewItem]; [self.delegate conversationCell:self
shouldAllowReply:shouldAllowReply
didLongpressTextViewItem:self.viewItem];
break; break;
} }
case OWSMessageGestureLocation_Media: { case OWSMessageGestureLocation_Media: {
[self.delegate conversationCell:self didLongpressMediaViewItem:self.viewItem]; [self.delegate conversationCell:self
shouldAllowReply:shouldAllowReply
didLongpressMediaViewItem:self.viewItem];
break; break;
} }
case OWSMessageGestureLocation_QuotedReply: { case OWSMessageGestureLocation_QuotedReply: {
[self.delegate conversationCell:self didLongpressQuoteViewItem:self.viewItem]; [self.delegate conversationCell:self
shouldAllowReply:shouldAllowReply
didLongpressQuoteViewItem:self.viewItem];
break; break;
} }
} }

@ -1923,24 +1923,36 @@ typedef enum : NSUInteger {
#pragma mark - ConversationViewCellDelegate #pragma mark - ConversationViewCellDelegate
- (void)conversationCell:(ConversationViewCell *)cell didLongpressMediaViewItem:(id<ConversationViewItem>)viewItem - (void)conversationCell:(ConversationViewCell *)cell
shouldAllowReply:(BOOL)shouldAllowReply
didLongpressMediaViewItem:(id<ConversationViewItem>)viewItem
{ {
NSArray<MenuAction *> *messageActions = NSArray<MenuAction *> *messageActions =
[ConversationViewItemActions mediaActionsWithConversationViewItem:viewItem delegate:self]; [ConversationViewItemActions mediaActionsWithConversationViewItem:viewItem
shouldAllowReply:shouldAllowReply
delegate:self];
[self presentMessageActions:messageActions withFocusedCell:cell]; [self presentMessageActions:messageActions withFocusedCell:cell];
} }
- (void)conversationCell:(ConversationViewCell *)cell didLongpressTextViewItem:(id<ConversationViewItem>)viewItem - (void)conversationCell:(ConversationViewCell *)cell
shouldAllowReply:(BOOL)shouldAllowReply
didLongpressTextViewItem:(id<ConversationViewItem>)viewItem
{ {
NSArray<MenuAction *> *messageActions = NSArray<MenuAction *> *messageActions =
[ConversationViewItemActions textActionsWithConversationViewItem:viewItem delegate:self]; [ConversationViewItemActions textActionsWithConversationViewItem:viewItem
shouldAllowReply:shouldAllowReply
delegate:self];
[self presentMessageActions:messageActions withFocusedCell:cell]; [self presentMessageActions:messageActions withFocusedCell:cell];
} }
- (void)conversationCell:(ConversationViewCell *)cell didLongpressQuoteViewItem:(id<ConversationViewItem>)viewItem - (void)conversationCell:(ConversationViewCell *)cell
shouldAllowReply:(BOOL)shouldAllowReply
didLongpressQuoteViewItem:(id<ConversationViewItem>)viewItem
{ {
NSArray<MenuAction *> *messageActions = NSArray<MenuAction *> *messageActions =
[ConversationViewItemActions quotedMessageActionsWithConversationViewItem:viewItem delegate:self]; [ConversationViewItemActions quotedMessageActionsWithConversationViewItem:viewItem
shouldAllowReply:shouldAllowReply
delegate:self];
[self presentMessageActions:messageActions withFocusedCell:cell]; [self presentMessageActions:messageActions withFocusedCell:cell];
} }

Loading…
Cancel
Save