From b40f6acd017dcc4d63dcf0987ffa568596b567d7 Mon Sep 17 00:00:00 2001 From: Russ Shanahan Date: Mon, 14 Nov 2016 13:28:51 -0500 Subject: [PATCH] Voiceover fix: Message author read as thread name (#1437) FREEBIE There was a bug in voiceover mode. When reading messages, Voiceover would read out "message author: message content" for each chat bubble, but the message author was always the name of the chat. So if it was a contact chat, every message would be read as if from the other party, and if it was a group chat, every message would be from the title of the group. This patch looks up the display name for the given signal id so Voiceover reads the correct name for each message. It will read "Me" if the message is outgoing. --- .../TSMessageAdapaters/TSMessageAdapter.h | 3 ++- .../TSMessageAdapaters/TSMessageAdapter.m | 17 +++++------------ .../view controllers/MessagesViewController.m | 2 +- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.h b/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.h index 5bc1ba3f5..363c0f8ee 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.h +++ b/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.h @@ -9,6 +9,7 @@ #import "OWSMessageData.h" #import "OWSMessageEditing.h" #import "TSInfoMessage.h" +#import "ContactsManagerProtocol.h" NS_ASSUME_NONNULL_BEGIN @@ -19,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN @interface TSMessageAdapter : NSObject -+ (id)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread; ++ (id)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread contactsManager:(id)contactsManager; @property (nonatomic) TSInteraction *interaction; @property (readonly) TSInfoMessageType infoMessageType; diff --git a/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.m b/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.m index 25fe2a909..0f1af5a14 100644 --- a/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.m +++ b/Signal/src/Models/TSMessageAdapaters/TSMessageAdapter.m @@ -28,8 +28,8 @@ // OR for groups -@property (nonatomic, retain) NSString *senderId; -@property (nonatomic, retain) NSString *senderDisplayName; +@property (nonatomic, copy) NSString *senderId; +@property (nonatomic, copy) NSString *senderDisplayName; // for InfoMessages @@ -91,7 +91,7 @@ return self; } -+ (id)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread ++ (id)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread contactsManager:(id)contactsManager { TSMessageAdapter *adapter = [[TSMessageAdapter alloc] initWithInteraction:interaction]; @@ -100,7 +100,7 @@ if ([interaction isKindOfClass:[TSIncomingMessage class]]) { NSString *contactId = ((TSContactThread *)thread).contactIdentifier; adapter.senderId = contactId; - adapter.senderDisplayName = contactId; + adapter.senderDisplayName = [contactsManager nameStringForPhoneIdentifier:contactId]; adapter.messageType = TSIncomingMessageAdapter; } else { adapter.senderId = ME_MESSAGE_IDENTIFIER; @@ -111,7 +111,7 @@ if ([interaction isKindOfClass:[TSIncomingMessage class]]) { TSIncomingMessage *message = (TSIncomingMessage *)interaction; adapter.senderId = message.authorId; - adapter.senderDisplayName = message.authorId; + adapter.senderDisplayName = [contactsManager nameStringForPhoneIdentifier:message.authorId]; adapter.messageType = TSIncomingMessageAdapter; } else { adapter.senderId = ME_MESSAGE_IDENTIFIER; @@ -216,13 +216,6 @@ } } -- (NSString *)senderDisplayName { - if (self.thread) { - return _thread.name; - } - return _senderDisplayName; -} - - (NSDate *)date { return self.messageDate; } diff --git a/Signal/src/view controllers/MessagesViewController.m b/Signal/src/view controllers/MessagesViewController.m index 62fdd8c0f..1168fc9eb 100644 --- a/Signal/src/view controllers/MessagesViewController.m +++ b/Signal/src/view controllers/MessagesViewController.m @@ -1957,7 +1957,7 @@ typedef enum : NSUInteger { id messageAdapter = [self.messageAdapterCache objectForKey:interaction.uniqueId]; if (!messageAdapter) { - messageAdapter = [TSMessageAdapter messageViewDataWithInteraction:interaction inThread:self.thread]; + messageAdapter = [TSMessageAdapter messageViewDataWithInteraction:interaction inThread:self.thread contactsManager:self.contactsManager]; [self.messageAdapterCache setObject:messageAdapter forKey: interaction.uniqueId]; }