Improve handling of contact display names.

pull/1/head
Matthew Chen 8 years ago
parent 7e35a7e7d7
commit 708b44e3c5

@ -4,13 +4,11 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@class OWSContactShare; @class OWSContact;
@interface OWSContactShareView : UIView @interface OWSContactShareView : UIView
- (instancetype)initWithContactShare:(OWSContactShare *)contactShare - (instancetype)initWithContactShare:(OWSContact *)contactShare isIncoming:(BOOL)isIncoming;
contactShareName:(NSString *)contactShareName
isIncoming:(BOOL)isIncoming;
- (void)createContents; - (void)createContents;

@ -7,14 +7,13 @@
#import "UIColor+OWS.h" #import "UIColor+OWS.h"
#import "UIFont+OWS.h" #import "UIFont+OWS.h"
#import "UIView+OWS.h" #import "UIView+OWS.h"
#import <SignalServiceKit/OWSContactShare.h> #import <SignalServiceKit/OWSContact.h>
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@interface OWSContactShareView () @interface OWSContactShareView ()
@property (nonatomic) OWSContactShare *contactShare; @property (nonatomic) OWSContact *contactShare;
@property (nonatomic) NSString *contactShareName;
@property (nonatomic) BOOL isIncoming; @property (nonatomic) BOOL isIncoming;
@end @end
@ -23,15 +22,12 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSContactShareView @implementation OWSContactShareView
- (instancetype)initWithContactShare:(OWSContactShare *)contactShare - (instancetype)initWithContactShare:(OWSContact *)contactShare isIncoming:(BOOL)isIncoming
contactShareName:(NSString *)contactShareName
isIncoming:(BOOL)isIncoming
{ {
self = [super init]; self = [super init];
if (self) { if (self) {
_contactShare = contactShare; _contactShare = contactShare;
_contactShareName = contactShareName;
_isIncoming = isIncoming; _isIncoming = isIncoming;
} }
@ -123,7 +119,7 @@ NS_ASSUME_NONNULL_BEGIN
[imageView autoCenterInSuperview]; [imageView autoCenterInSuperview];
UILabel *topLabel = [UILabel new]; UILabel *topLabel = [UILabel new];
topLabel.text = self.contactShareName; topLabel.text = self.contactShare.displayName;
topLabel.textColor = [UIColor blackColor]; topLabel.textColor = [UIColor blackColor];
topLabel.lineBreakMode = NSLineBreakByTruncatingTail; topLabel.lineBreakMode = NSLineBreakByTruncatingTail;
topLabel.font = [UIFont ows_dynamicTypeBodyFont]; topLabel.font = [UIFont ows_dynamicTypeBodyFont];

@ -796,11 +796,9 @@ NS_ASSUME_NONNULL_BEGIN
- (UIView *)loadViewForShareContact - (UIView *)loadViewForShareContact
{ {
OWSAssert(self.viewItem.contactShare); OWSAssert(self.viewItem.contactShare);
OWSAssert(self.viewItem.contactShareName.length > 0);
OWSContactShareView *contactShareView = OWSContactShareView *contactShareView =
[[OWSContactShareView alloc] initWithContactShare:self.viewItem.contactShare [[OWSContactShareView alloc] initWithContactShare:self.viewItem.contactShare
contactShareName:self.viewItem.contactShareName
isIncoming:self.isIncoming]; isIncoming:self.isIncoming];
[contactShareView createContents]; [contactShareView createContents];
// [self addAttachmentUploadViewIfNecessary:attachmentView]; // [self addAttachmentUploadViewIfNecessary:attachmentView];

@ -27,7 +27,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType);
@class ConversationViewCell; @class ConversationViewCell;
@class DisplayableText; @class DisplayableText;
@class OWSAudioMessageView; @class OWSAudioMessageView;
@class OWSContactShare; @class OWSContact;
@class OWSQuotedReplyModel; @class OWSQuotedReplyModel;
@class TSAttachmentPointer; @class TSAttachmentPointer;
@class TSAttachmentStream; @class TSAttachmentStream;
@ -103,8 +103,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType);
// if a load has previously failed. // if a load has previously failed.
@property (nonatomic) BOOL didCellMediaFailToLoad; @property (nonatomic) BOOL didCellMediaFailToLoad;
- (nullable OWSContactShare *)contactShare; - (nullable OWSContact *)contactShare;
- (nullable NSString *)contactShareName;
#pragma mark - UIMenuController #pragma mark - UIMenuController

@ -11,7 +11,7 @@
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import <AssetsLibrary/AssetsLibrary.h> #import <AssetsLibrary/AssetsLibrary.h>
#import <SignalMessaging/NSString+OWS.h> #import <SignalMessaging/NSString+OWS.h>
#import <SignalServiceKit/OWSContactShare.h> #import <SignalServiceKit/OWSContact.h>
#import <SignalServiceKit/TSInteraction.h> #import <SignalServiceKit/TSInteraction.h>
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
@ -65,8 +65,7 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
@property (nonatomic, readonly, nullable) NSString *quotedRecipientId; @property (nonatomic, readonly, nullable) NSString *quotedRecipientId;
@property (nonatomic, nullable) TSAttachmentStream *attachmentStream; @property (nonatomic, nullable) TSAttachmentStream *attachmentStream;
@property (nonatomic, nullable) TSAttachmentPointer *attachmentPointer; @property (nonatomic, nullable) TSAttachmentPointer *attachmentPointer;
@property (nonatomic, nullable) OWSContactShare *contactShare; @property (nonatomic, nullable) OWSContact *contactShare;
@property (nonatomic, nullable) NSString *contactShareName;
@property (nonatomic) CGSize mediaSize; @property (nonatomic) CGSize mediaSize;
@end @end
@ -407,14 +406,9 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
TSMessage *message = (TSMessage *)self.interaction; TSMessage *message = (TSMessage *)self.interaction;
if (message.contactShare) { if (message.contactShare) {
// TODO: Format contact share name. self.contactShare = message.contactShare;
NSString *contactShareName = @"Alice"; self.messageCellType = OWSMessageCellType_ShareContact;
if (contactShareName.length > 0) { return;
self.contactShare = message.contactShare;
self.contactShareName = contactShareName;
self.messageCellType = OWSMessageCellType_ShareContact;
return;
}
} }
TSAttachment *_Nullable attachment = [self firstAttachmentIfAnyOfMessage:message transaction:transaction]; TSAttachment *_Nullable attachment = [self firstAttachmentIfAnyOfMessage:message transaction:transaction];
if (attachment) { if (attachment) {

@ -2942,6 +2942,7 @@ typedef OWSContact * (^OWSContactBlock)(void);
contactBlock:^{ contactBlock:^{
OWSContact *contact = [OWSContact new]; OWSContact *contact = [OWSContact new];
contact.givenName = @"Alice"; contact.givenName = @"Alice";
contact.displayName = @"Alice";
OWSContactPhoneNumber *phoneNumber = [OWSContactPhoneNumber new]; OWSContactPhoneNumber *phoneNumber = [OWSContactPhoneNumber new];
phoneNumber.phoneType = OWSContactPhoneType_Home; phoneNumber.phoneType = OWSContactPhoneType_Home;
phoneNumber.phoneNumber = @"+13213214321"; phoneNumber.phoneNumber = @"+13213214321";
@ -2955,6 +2956,7 @@ typedef OWSContact * (^OWSContactBlock)(void);
contactBlock:^{ contactBlock:^{
OWSContact *contact = [OWSContact new]; OWSContact *contact = [OWSContact new];
contact.givenName = @"Bob"; contact.givenName = @"Bob";
contact.displayName = @"Bob";
OWSContactEmail *email = [OWSContactEmail new]; OWSContactEmail *email = [OWSContactEmail new];
email.emailType = OWSContactEmailType_Home; email.emailType = OWSContactEmailType_Home;
email.email = @"a@b.com"; email.email = @"a@b.com";

@ -186,6 +186,28 @@ NS_ASSUME_NONNULL_BEGIN
return hasValue; 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 @end
#pragma mark - #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 *imageData;
// @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *thumbnailImageData; // @property (readonly, copy, nullable, NS_NONATOMIC_IOSONLY) NSData *thumbnailImageData;
[contact ensureDisplayName];
return contact; return contact;
} }
@ -635,6 +659,8 @@ NS_ASSUME_NONNULL_BEGIN
// TODO: Avatar // TODO: Avatar
[contact ensureDisplayName];
return contact; return contact;
} }

Loading…
Cancel
Save