diff --git a/Signal/src/Models/MessageActions.swift b/Signal/src/Models/MessageActions.swift index a12541bb3..0183bf787 100644 --- a/Signal/src/Models/MessageActions.swift +++ b/Signal/src/Models/MessageActions.swift @@ -8,6 +8,7 @@ import Foundation protocol MessageActionsDelegate: class { func messageActionsShowDetailsForItem(_ conversationViewItem: ConversationViewItem) func messageActionsReplyToItem(_ conversationViewItem: ConversationViewItem) + func copyPublicKey(for conversationViewItem: ConversationViewItem) } struct MessageActionBuilder { @@ -29,6 +30,14 @@ struct MessageActionBuilder { conversationViewItem.copyTextAction() }) } + + static func copyPublicKey(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> MenuAction { + return MenuAction(image: #imageLiteral(resourceName: "table_ic_add_to_existing_contact"), + title: NSLocalizedString("Copy Public Key", comment: ""), + subtitle: nil, + block: { [weak delegate] _ in delegate?.copyPublicKey(for: conversationViewItem) } + ) + } static func showDetails(conversationViewItem: ConversationViewItem, delegate: MessageActionsDelegate) -> MenuAction { return MenuAction(image: #imageLiteral(resourceName: "ic_info"), @@ -86,6 +95,11 @@ class ConversationViewItemActions: NSObject { let copyTextAction = MessageActionBuilder.copyText(conversationViewItem: conversationViewItem, delegate: delegate) actions.append(copyTextAction) } + + if isGroup && !isRSSFeed && conversationViewItem.interaction is TSIncomingMessage { + let copyPublicKeyAction = MessageActionBuilder.copyPublicKey(conversationViewItem: conversationViewItem, delegate: delegate) + actions.append(copyPublicKeyAction) + } if !isGroup || conversationViewItem.userCanDeleteGroupMessage { let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate) @@ -137,6 +151,12 @@ class ConversationViewItemActions: NSObject { } let isGroup = conversationViewItem.isGroupThread; + let isRSSFeed = conversationViewItem.isRSSFeed; + + if isGroup && !isRSSFeed && conversationViewItem.interaction is TSIncomingMessage { + let copyPublicKeyAction = MessageActionBuilder.copyPublicKey(conversationViewItem: conversationViewItem, delegate: delegate) + actions.append(copyPublicKeyAction) + } if !isGroup || conversationViewItem.userCanDeleteGroupMessage { let deleteAction = MessageActionBuilder.deleteMessage(conversationViewItem: conversationViewItem, delegate: delegate) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 8181d7c8c..af507073b 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2037,6 +2037,11 @@ typedef enum : NSUInteger { [self populateReplyForViewItem:conversationViewItem]; } +- (void)copyPublicKeyFor:(id)conversationViewItem +{ + UIPasteboard.generalPasteboard.string = ((TSIncomingMessage *)conversationViewItem.interaction).authorId; +} + #pragma mark - MessageDetailViewDelegate - (void)detailViewMessageWasDeleted:(MessageDetailViewController *)messageDetailViewController diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 4714ea0e5..354437c05 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -2620,3 +2620,4 @@ "Can't Start Conversation" = "Can't Start Conversation"; "Please enter the public key of the person you'd like to message." = "Please enter the public key of the person you'd like to message."; "Loki Messenger is currently in beta. For development purposes the beta version collects basic usage statistics and crash logs. In addition, the beta version doesn't provide full privacy and shouldn't be used to transmit sensitive information." = "Loki Messenger is currently in beta. For development purposes the beta version collects basic usage statistics and crash logs. In addition, the beta version doesn't provide full privacy and shouldn't be used to transmit sensitive information."; +"Copy Public Key" = "Copy Public Key";