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.
pull/1/head
Russ Shanahan 9 years ago committed by Michael Kirk
parent 89451013d9
commit b40f6acd01

@ -9,6 +9,7 @@
#import "OWSMessageData.h" #import "OWSMessageData.h"
#import "OWSMessageEditing.h" #import "OWSMessageEditing.h"
#import "TSInfoMessage.h" #import "TSInfoMessage.h"
#import "ContactsManagerProtocol.h"
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@ -19,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface TSMessageAdapter : NSObject <OWSMessageData> @interface TSMessageAdapter : NSObject <OWSMessageData>
+ (id<OWSMessageData>)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread; + (id<OWSMessageData>)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread contactsManager:(id<ContactsManagerProtocol>)contactsManager;
@property (nonatomic) TSInteraction *interaction; @property (nonatomic) TSInteraction *interaction;
@property (readonly) TSInfoMessageType infoMessageType; @property (readonly) TSInfoMessageType infoMessageType;

@ -28,8 +28,8 @@
// OR for groups // OR for groups
@property (nonatomic, retain) NSString *senderId; @property (nonatomic, copy) NSString *senderId;
@property (nonatomic, retain) NSString *senderDisplayName; @property (nonatomic, copy) NSString *senderDisplayName;
// for InfoMessages // for InfoMessages
@ -91,7 +91,7 @@
return self; return self;
} }
+ (id<OWSMessageData>)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread + (id<OWSMessageData>)messageViewDataWithInteraction:(TSInteraction *)interaction inThread:(TSThread *)thread contactsManager:(id<ContactsManagerProtocol>)contactsManager
{ {
TSMessageAdapter *adapter = [[TSMessageAdapter alloc] initWithInteraction:interaction]; TSMessageAdapter *adapter = [[TSMessageAdapter alloc] initWithInteraction:interaction];
@ -100,7 +100,7 @@
if ([interaction isKindOfClass:[TSIncomingMessage class]]) { if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
NSString *contactId = ((TSContactThread *)thread).contactIdentifier; NSString *contactId = ((TSContactThread *)thread).contactIdentifier;
adapter.senderId = contactId; adapter.senderId = contactId;
adapter.senderDisplayName = contactId; adapter.senderDisplayName = [contactsManager nameStringForPhoneIdentifier:contactId];
adapter.messageType = TSIncomingMessageAdapter; adapter.messageType = TSIncomingMessageAdapter;
} else { } else {
adapter.senderId = ME_MESSAGE_IDENTIFIER; adapter.senderId = ME_MESSAGE_IDENTIFIER;
@ -111,7 +111,7 @@
if ([interaction isKindOfClass:[TSIncomingMessage class]]) { if ([interaction isKindOfClass:[TSIncomingMessage class]]) {
TSIncomingMessage *message = (TSIncomingMessage *)interaction; TSIncomingMessage *message = (TSIncomingMessage *)interaction;
adapter.senderId = message.authorId; adapter.senderId = message.authorId;
adapter.senderDisplayName = message.authorId; adapter.senderDisplayName = [contactsManager nameStringForPhoneIdentifier:message.authorId];
adapter.messageType = TSIncomingMessageAdapter; adapter.messageType = TSIncomingMessageAdapter;
} else { } else {
adapter.senderId = ME_MESSAGE_IDENTIFIER; adapter.senderId = ME_MESSAGE_IDENTIFIER;
@ -216,13 +216,6 @@
} }
} }
- (NSString *)senderDisplayName {
if (self.thread) {
return _thread.name;
}
return _senderDisplayName;
}
- (NSDate *)date { - (NSDate *)date {
return self.messageDate; return self.messageDate;
} }

@ -1957,7 +1957,7 @@ typedef enum : NSUInteger {
id<OWSMessageData> messageAdapter = [self.messageAdapterCache objectForKey:interaction.uniqueId]; id<OWSMessageData> messageAdapter = [self.messageAdapterCache objectForKey:interaction.uniqueId];
if (!messageAdapter) { 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]; [self.messageAdapterCache setObject:messageAdapter forKey: interaction.uniqueId];
} }

Loading…
Cancel
Save