From 708b44e3c538061c9da80b207d4673e3bd58a8b9 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 1 May 2018 11:44:03 -0400 Subject: [PATCH] Improve handling of contact display names. --- .../Cells/OWSContactShareView.h | 6 ++--- .../Cells/OWSContactShareView.m | 12 +++------ .../Cells/OWSMessageBubbleView.m | 2 -- .../ConversationView/ConversationViewItem.h | 5 ++-- .../ConversationView/ConversationViewItem.m | 16 ++++-------- .../ViewControllers/DebugUI/DebugUIMessages.m | 2 ++ .../src/Messages/Interactions/OWSContact.m | 26 +++++++++++++++++++ 7 files changed, 41 insertions(+), 28 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.h b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.h index 4fd824a3a..3a62a0813 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.h +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.h @@ -4,13 +4,11 @@ NS_ASSUME_NONNULL_BEGIN -@class OWSContactShare; +@class OWSContact; @interface OWSContactShareView : UIView -- (instancetype)initWithContactShare:(OWSContactShare *)contactShare - contactShareName:(NSString *)contactShareName - isIncoming:(BOOL)isIncoming; +- (instancetype)initWithContactShare:(OWSContact *)contactShare isIncoming:(BOOL)isIncoming; - (void)createContents; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m index 97f40be75..d9719dbaa 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m @@ -7,14 +7,13 @@ #import "UIColor+OWS.h" #import "UIFont+OWS.h" #import "UIView+OWS.h" -#import +#import NS_ASSUME_NONNULL_BEGIN @interface OWSContactShareView () -@property (nonatomic) OWSContactShare *contactShare; -@property (nonatomic) NSString *contactShareName; +@property (nonatomic) OWSContact *contactShare; @property (nonatomic) BOOL isIncoming; @end @@ -23,15 +22,12 @@ NS_ASSUME_NONNULL_BEGIN @implementation OWSContactShareView -- (instancetype)initWithContactShare:(OWSContactShare *)contactShare - contactShareName:(NSString *)contactShareName - isIncoming:(BOOL)isIncoming +- (instancetype)initWithContactShare:(OWSContact *)contactShare isIncoming:(BOOL)isIncoming { self = [super init]; if (self) { _contactShare = contactShare; - _contactShareName = contactShareName; _isIncoming = isIncoming; } @@ -123,7 +119,7 @@ NS_ASSUME_NONNULL_BEGIN [imageView autoCenterInSuperview]; UILabel *topLabel = [UILabel new]; - topLabel.text = self.contactShareName; + topLabel.text = self.contactShare.displayName; topLabel.textColor = [UIColor blackColor]; topLabel.lineBreakMode = NSLineBreakByTruncatingTail; topLabel.font = [UIFont ows_dynamicTypeBodyFont]; diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m index f29db24c9..da7c26b8d 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageBubbleView.m @@ -796,11 +796,9 @@ NS_ASSUME_NONNULL_BEGIN - (UIView *)loadViewForShareContact { OWSAssert(self.viewItem.contactShare); - OWSAssert(self.viewItem.contactShareName.length > 0); OWSContactShareView *contactShareView = [[OWSContactShareView alloc] initWithContactShare:self.viewItem.contactShare - contactShareName:self.viewItem.contactShareName isIncoming:self.isIncoming]; [contactShareView createContents]; // [self addAttachmentUploadViewIfNecessary:attachmentView]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h index 78170e225..a20c3d1ab 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h @@ -27,7 +27,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); @class ConversationViewCell; @class DisplayableText; @class OWSAudioMessageView; -@class OWSContactShare; +@class OWSContact; @class OWSQuotedReplyModel; @class TSAttachmentPointer; @class TSAttachmentStream; @@ -103,8 +103,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType); // if a load has previously failed. @property (nonatomic) BOOL didCellMediaFailToLoad; -- (nullable OWSContactShare *)contactShare; -- (nullable NSString *)contactShareName; +- (nullable OWSContact *)contactShare; #pragma mark - UIMenuController diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m index 1404d99bb..bab413b18 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewItem.m @@ -11,7 +11,7 @@ #import "Signal-Swift.h" #import #import -#import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -65,8 +65,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) @property (nonatomic, readonly, nullable) NSString *quotedRecipientId; @property (nonatomic, nullable) TSAttachmentStream *attachmentStream; @property (nonatomic, nullable) TSAttachmentPointer *attachmentPointer; -@property (nonatomic, nullable) OWSContactShare *contactShare; -@property (nonatomic, nullable) NSString *contactShareName; +@property (nonatomic, nullable) OWSContact *contactShare; @property (nonatomic) CGSize mediaSize; @end @@ -407,14 +406,9 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType) TSMessage *message = (TSMessage *)self.interaction; if (message.contactShare) { - // TODO: Format contact share name. - NSString *contactShareName = @"Alice"; - if (contactShareName.length > 0) { - self.contactShare = message.contactShare; - self.contactShareName = contactShareName; - self.messageCellType = OWSMessageCellType_ShareContact; - return; - } + self.contactShare = message.contactShare; + self.messageCellType = OWSMessageCellType_ShareContact; + return; } TSAttachment *_Nullable attachment = [self firstAttachmentIfAnyOfMessage:message transaction:transaction]; if (attachment) { diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index e308dbbad..7e5ba7aeb 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -2942,6 +2942,7 @@ typedef OWSContact * (^OWSContactBlock)(void); contactBlock:^{ OWSContact *contact = [OWSContact new]; contact.givenName = @"Alice"; + contact.displayName = @"Alice"; OWSContactPhoneNumber *phoneNumber = [OWSContactPhoneNumber new]; phoneNumber.phoneType = OWSContactPhoneType_Home; phoneNumber.phoneNumber = @"+13213214321"; @@ -2955,6 +2956,7 @@ typedef OWSContact * (^OWSContactBlock)(void); contactBlock:^{ OWSContact *contact = [OWSContact new]; contact.givenName = @"Bob"; + contact.displayName = @"Bob"; OWSContactEmail *email = [OWSContactEmail new]; email.emailType = OWSContactEmailType_Home; email.email = @"a@b.com"; diff --git a/SignalServiceKit/src/Messages/Interactions/OWSContact.m b/SignalServiceKit/src/Messages/Interactions/OWSContact.m index 15ebbf36d..8b08339b3 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSContact.m +++ b/SignalServiceKit/src/Messages/Interactions/OWSContact.m @@ -186,6 +186,28 @@ NS_ASSUME_NONNULL_BEGIN return hasValue; } +- (nullable NSString *)displayName +{ + [self ensureDisplayName]; + + return _displayName; +} + +- (void)ensureDisplayName +{ + if (_displayName.length < 1) { + CNContact *_Nullable systemContact = [OWSContacts systemContactForContact:self]; + _displayName = [CNContactFormatter stringFromContact:systemContact style:CNContactFormatterStyleFullName]; + } + if (_displayName.length < 1) { + // Fall back to using the organization name. + _displayName = self.organizationName; + } + if (_displayName.length < 1) { + DDLogError(@"%@ could not derive a valid display name.", self.logTag); + } +} + @end #pragma mark - @@ -318,6 +340,8 @@ NS_ASSUME_NONNULL_BEGIN // @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *imageData; // @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *thumbnailImageData; + [contact ensureDisplayName]; + return contact; } @@ -635,6 +659,8 @@ NS_ASSUME_NONNULL_BEGIN // TODO: Avatar + [contact ensureDisplayName]; + return contact; }