Merge branch 'mkirk/more-name'

pull/1/head
Michael Kirk 8 years ago
commit 75ceb62f2f

@ -360,6 +360,11 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId]; NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId];
OWSAssert(recipientId.length > 0); OWSAssert(recipientId.length > 0);
if (recipientId.length > 0 && [self.thread.recipientIdentifiers containsObject:recipientId]) { if (recipientId.length > 0 && [self.thread.recipientIdentifiers containsObject:recipientId]) {
if ([self.thread isKindOfClass:[TSContactThread class]]) {
// update title with profile name
[self setNavigationTitle];
}
// Reload all cells. // Reload all cells.
[self resetContentAndLayout]; [self resetContentAndLayout];
} }
@ -1118,17 +1123,26 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
- (void)setNavigationTitle - (void)setNavigationTitle
{ {
NSString *navTitle = self.thread.name; NSAttributedString *name;
if (self.isGroupConversation && [navTitle length] == 0) { if (self.thread.isGroupThread) {
navTitle = NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @""); if (self.thread.name.length == 0) {
name = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @"")];
} else {
name = [[NSAttributedString alloc] initWithString:self.thread.name];
}
} else {
name = [self.contactsManager
attributedStringForConversationTitleWithPhoneIdentifier:self.thread.contactIdentifier
primaryFont:self.navigationBarTitleLabel.font
secondaryFont:[UIFont ows_footnoteFont]];
} }
self.title = nil; self.title = nil;
if ([navTitle isEqualToString:self.navigationBarTitleLabel.text]) { if ([name isEqual:self.navigationBarTitleLabel.attributedText]) {
return; return;
} }
self.navigationBarTitleLabel.text = navTitle; self.navigationBarTitleLabel.attributedText = name;
// Changing the title requires relayout of the nav bar contents. // Changing the title requires relayout of the nav bar contents.
OWSDisappearingMessagesConfiguration *configuration = OWSDisappearingMessagesConfiguration *configuration =

@ -31,7 +31,8 @@ const NSUInteger kAvatarViewDiameter = 52;
@property (nonatomic) UIView *unreadBadge; @property (nonatomic) UIView *unreadBadge;
@property (nonatomic) UILabel *unreadLabel; @property (nonatomic) UILabel *unreadLabel;
@property (nonatomic) NSString *threadId; @property (nonatomic) TSThread *thread;
@property (nonatomic) OWSContactsManager *contactsManager;
@end @end
@ -76,6 +77,7 @@ const NSUInteger kAvatarViewDiameter = 52;
self.nameLabel = [UILabel new]; self.nameLabel = [UILabel new];
self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail; self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
self.nameLabel.font = [UIFont ows_boldFontWithSize:14.0f];
[self.contentView addSubview:self.nameLabel]; [self.contentView addSubview:self.nameLabel];
[self.nameLabel autoPinLeadingToTrailingOfView:self.avatarView margin:13.f]; [self.nameLabel autoPinLeadingToTrailingOfView:self.avatarView margin:13.f];
[self.nameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self.avatarView]; [self.nameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self.avatarView];
@ -157,17 +159,15 @@ const NSUInteger kAvatarViewDiameter = 52;
OWSAssert(contactsManager); OWSAssert(contactsManager);
OWSAssert(blockedPhoneNumberSet); OWSAssert(blockedPhoneNumberSet);
self.thread = thread;
self.contactsManager = contactsManager;
BOOL isBlocked = NO; BOOL isBlocked = NO;
if (!thread.isGroupThread) { if (!thread.isGroupThread) {
NSString *contactIdentifier = thread.contactIdentifier; NSString *contactIdentifier = thread.contactIdentifier;
isBlocked = [blockedPhoneNumberSet containsObject:contactIdentifier]; isBlocked = [blockedPhoneNumberSet containsObject:contactIdentifier];
} }
NSString *name = thread.name;
if (name.length == 0 && [thread isKindOfClass:[TSGroupThread class]]) {
name = NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @"");
}
self.threadId = thread.uniqueId;
NSMutableAttributedString *snippetText = [NSMutableAttributedString new]; NSMutableAttributedString *snippetText = [NSMutableAttributedString new];
if (isBlocked) { if (isBlocked) {
// If thread is blocked, don't show a snippet or mute status. // If thread is blocked, don't show a snippet or mute status.
@ -206,18 +206,21 @@ const NSUInteger kAvatarViewDiameter = 52;
NSAttributedString *attributedDate = [self dateAttributedString:thread.lastMessageDate]; NSAttributedString *attributedDate = [self dateAttributedString:thread.lastMessageDate];
NSUInteger unreadCount = [[TSMessagesManager sharedManager] unreadMessagesInThread:thread]; NSUInteger unreadCount = [[TSMessagesManager sharedManager] unreadMessagesInThread:thread];
self.nameLabel.text = name;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(otherUsersProfileDidChange:)
name:kNSNotificationName_OtherUsersProfileDidChange
object:nil];
[self updateNameLabel];
self.snippetLabel.attributedText = snippetText; self.snippetLabel.attributedText = snippetText;
self.timeLabel.attributedText = attributedDate; self.timeLabel.attributedText = attributedDate;
self.avatarView.image = nil; self.avatarView.image = nil;
self.separatorInset = UIEdgeInsetsMake(0, self.avatarSize * 1.5f, 0, 0); self.separatorInset = UIEdgeInsetsMake(0, self.avatarSize * 1.5f, 0, 0);
if (thread.hasUnreadMessages) { _timeLabel.textColor = thread.hasUnreadMessages ? [UIColor ows_materialBlueColor] : [UIColor ows_darkGrayColor];
[self updateCellForUnreadMessage];
} else {
[self updateCellForReadMessage];
}
if (unreadCount > 0) { if (unreadCount > 0) {
self.unreadBadge.hidden = NO; self.unreadBadge.hidden = NO;
self.unreadLabel.hidden = NO; self.unreadLabel.hidden = NO;
@ -231,18 +234,6 @@ const NSUInteger kAvatarViewDiameter = 52;
[OWSAvatarBuilder buildImageForThread:thread diameter:kAvatarViewDiameter contactsManager:contactsManager]; [OWSAvatarBuilder buildImageForThread:thread diameter:kAvatarViewDiameter contactsManager:contactsManager];
} }
- (void)updateCellForUnreadMessage {
_nameLabel.font = [UIFont ows_boldFontWithSize:14.0f];
_nameLabel.textColor = [UIColor ows_blackColor];
_timeLabel.textColor = [UIColor ows_materialBlueColor];
}
- (void)updateCellForReadMessage {
_nameLabel.font = [UIFont ows_boldFontWithSize:14.0f];
_nameLabel.textColor = [UIColor ows_blackColor];
_timeLabel.textColor = [UIColor ows_darkGrayColor];
}
#pragma mark - Date formatting #pragma mark - Date formatting
- (NSAttributedString *)dateAttributedString:(NSDate *)date { - (NSAttributedString *)dateAttributedString:(NSDate *)date {
@ -271,9 +262,78 @@ const NSUInteger kAvatarViewDiameter = 52;
- (void)prepareForReuse - (void)prepareForReuse
{ {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super prepareForReuse]; [super prepareForReuse];
} }
#pragma mark - Name
- (void)otherUsersProfileDidChange:(NSNotification *)notification
{
OWSAssert([NSThread isMainThread]);
NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId];
if (recipientId.length == 0) {
return;
}
if (![self.thread isKindOfClass:[TSContactThread class]]) {
return;
}
if (![self.thread.contactIdentifier isEqualToString:recipientId]) {
return;
}
[self updateNameLabel];
}
-(void)updateNameLabel
{
AssertIsOnMainThread();
TSThread *thread = self.thread;
if (thread == nil) {
OWSFail(@"%@ thread should not be nil", self.logTag);
self.nameLabel.attributedText = nil;
return;
}
OWSContactsManager *contactsManager = self.contactsManager;
if (contactsManager == nil) {
OWSFail(@"%@ contacts manager should not be nil", self.logTag);
self.nameLabel.attributedText = nil;
return;
}
NSAttributedString *name;
if (thread.isGroupThread) {
if (thread.name.length == 0) {
name = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"NEW_GROUP_DEFAULT_TITLE", @"")];
} else {
name = [[NSAttributedString alloc] initWithString:thread.name];
}
} else {
name = [contactsManager attributedStringForConversationTitleWithPhoneIdentifier:thread.contactIdentifier
primaryFont:self.nameLabel.font
secondaryFont:[UIFont ows_footnoteFont]];
}
self.nameLabel.attributedText = name;
}
#pragma mark - Logging
+ (NSString *)logTag
{
return [NSString stringWithFormat:@"[%@]", self.class];
}
- (NSString *)logTag
{
return self.class.logTag;
}
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -113,6 +113,10 @@ NS_ASSUME_NONNULL_BEGIN
selector:@selector(identityStateDidChange:) selector:@selector(identityStateDidChange:)
name:kNSNotificationName_IdentityStateDidChange name:kNSNotificationName_IdentityStateDidChange
object:nil]; object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(otherUsersProfileDidChange:)
name:kNSNotificationName_OtherUsersProfileDidChange
object:nil];
} }
- (NSString *)threadName - (NSString *)threadName
@ -670,6 +674,11 @@ NS_ASSUME_NONNULL_BEGIN
initWithString:[PhoneNumber initWithString:[PhoneNumber
bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:recipientId]]; bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:recipientId]];
addSubtitle(subtitle); addSubtitle(subtitle);
} else {
NSString *_Nullable profileName = [self.contactsManager formattedProfileNameForRecipientId:recipientId];
if (profileName) {
addSubtitle([[NSAttributedString alloc] initWithString:profileName]);
}
} }
BOOL isVerified = [[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId] BOOL isVerified = [[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
@ -1124,6 +1133,19 @@ NS_ASSUME_NONNULL_BEGIN
[self updateTableContents]; [self updateTableContents];
} }
- (void)otherUsersProfileDidChange:(NSNotification *)notification
{
OWSAssert([NSThread isMainThread]);
NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId];
OWSAssert(recipientId.length > 0);
if (recipientId.length > 0 && [self.thread isKindOfClass:[TSContactThread class]] &&
[self.thread.contactIdentifier isEqualToString:recipientId]) {
[self updateTableContents];
}
}
#pragma mark - Logging #pragma mark - Logging
+ (NSString *)tag + (NSString *)tag

@ -193,7 +193,9 @@ NS_ASSUME_NONNULL_BEGIN
} }
if (isVerified) { if (isVerified) {
[cell addVerifiedSubtitle]; cell.subtitle.attributedText = cell.verifiedSubtitle;
} else {
cell.subtitle.attributedText = nil;
} }
return cell; return cell;

@ -59,7 +59,9 @@ extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification;
- (NSAttributedString *)formattedDisplayNameForSignalAccount:(SignalAccount *)signalAccount font:(UIFont *_Nonnull)font; - (NSAttributedString *)formattedDisplayNameForSignalAccount:(SignalAccount *)signalAccount font:(UIFont *_Nonnull)font;
- (NSAttributedString *)formattedFullNameForRecipientId:(NSString *)recipientId font:(UIFont *)font; - (NSAttributedString *)formattedFullNameForRecipientId:(NSString *)recipientId font:(UIFont *)font;
- (NSAttributedString *)attributedStringForMessageFooterWithPhoneIdentifier:(NSString *)recipientId; - (NSAttributedString *)attributedStringForMessageFooterWithPhoneIdentifier:(NSString *)recipientId;
- (NSAttributedString *)attributedStringForConversationTitleWithPhoneIdentifier:(NSString *)recipientId
primaryFont:(UIFont *)primaryFont
secondaryFont:(UIFont *)secondaryFont;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -550,6 +550,39 @@ NSString *const kTSStorageManager_AccountLastNames = @"kTSStorageManager_Account
return [[NSAttributedString alloc] initWithString:recipientId]; return [[NSAttributedString alloc] initWithString:recipientId];
} }
- (NSAttributedString *)attributedStringForConversationTitleWithPhoneIdentifier:(NSString *)recipientId
primaryFont:(UIFont *)primaryFont
secondaryFont:(UIFont *)secondaryFont
{
// Prefer a saved name from system contacts, if available
NSString *_Nullable savedContactName = [self cachedDisplayNameForRecipientId:recipientId];
if (savedContactName.length > 0) {
return [[NSAttributedString alloc] initWithString:savedContactName];
}
NSString *_Nullable profileName = [self.profileManager profileNameForRecipientId:recipientId];
if (profileName.length > 0) {
NSString *numberAndProfileNameFormat = NSLocalizedString(@"PROFILE_NAME_AND_PHONE_NUMBER_LABEL_FORMAT",
@"Label text combining the phone number and profile name separated by a simple demarcation character. "
@"Phone number should be most prominent. '%1$@' is replaced with {{phone number}} and '%2$@' is replaced "
@"with {{profile name}}");
NSString *numberAndProfileName =
[NSString stringWithFormat:numberAndProfileNameFormat, recipientId, profileName];
NSRange recipientIdRange = [numberAndProfileName rangeOfString:recipientId];
NSMutableAttributedString *attributedString =
[[NSMutableAttributedString alloc] initWithString:numberAndProfileName
attributes:@{ NSFontAttributeName : secondaryFont }];
[attributedString addAttribute:NSFontAttributeName value:primaryFont range:recipientIdRange];
return [attributedString copy];
}
// else fall back to recipient id
return [[NSAttributedString alloc] initWithString:recipientId];
}
- (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId - (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId
{ {
OWSAssert(recipientId.length > 0); OWSAssert(recipientId.length > 0);

@ -22,6 +22,7 @@ extern NSString *const kContactsTable_CellReuseIdentifier;
@interface ContactTableViewCell : UITableViewCell @interface ContactTableViewCell : UITableViewCell
@property (nonatomic, nullable) NSString *accessoryMessage; @property (nonatomic, nullable) NSString *accessoryMessage;
@property (nonatomic, readonly) UILabel *subtitle;
+ (nullable NSString *)reuseIdentifier; + (nullable NSString *)reuseIdentifier;
@ -33,7 +34,7 @@ extern NSString *const kContactsTable_CellReuseIdentifier;
- (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager; - (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager;
- (void)addVerifiedSubtitle; - (NSAttributedString *)verifiedSubtitle;
@end @end

@ -21,10 +21,14 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
@interface ContactTableViewCell () @interface ContactTableViewCell ()
@property (nonatomic) IBOutlet UILabel *nameLabel; @property (nonatomic) UILabel *nameLabel;
@property (nonatomic) IBOutlet UILabel *profileNameLabel; @property (nonatomic) UILabel *profileNameLabel;
@property (nonatomic) IBOutlet UIImageView *avatarView; @property (nonatomic) UIImageView *avatarView;
@property (nonatomic, nullable) UILabel *subtitle; @property (nonatomic) UILabel *subtitle;
@property (nonatomic) UIView *nameContainerView;
@property (nonatomic) OWSContactsManager *contactsManager;
@property (nonatomic) NSString *recipientId;
@end @end
@ -61,19 +65,24 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
_avatarView = [AvatarImageView new]; _avatarView = [AvatarImageView new];
[self.contentView addSubview:_avatarView]; [self.contentView addSubview:_avatarView];
UIView *nameContainerView = [UIView containerView]; _nameContainerView = [UIView containerView];
[self.contentView addSubview:nameContainerView]; [self.contentView addSubview:_nameContainerView];
_nameLabel = [UILabel new]; _nameLabel = [UILabel new];
_nameLabel.lineBreakMode = NSLineBreakByTruncatingTail; _nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
_nameLabel.font = [UIFont ows_dynamicTypeBodyFont]; _nameLabel.font = [UIFont ows_dynamicTypeBodyFont];
[nameContainerView addSubview:_nameLabel]; [_nameContainerView addSubview:_nameLabel];
_profileNameLabel = [UILabel new]; _profileNameLabel = [UILabel new];
_profileNameLabel.lineBreakMode = NSLineBreakByTruncatingTail; _profileNameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
_profileNameLabel.font = [UIFont ows_footnoteFont]; _profileNameLabel.font = [UIFont ows_footnoteFont];
_profileNameLabel.textColor = [UIColor grayColor]; _profileNameLabel.textColor = [UIColor grayColor];
[nameContainerView addSubview:_profileNameLabel]; [_nameContainerView addSubview:_profileNameLabel];
_subtitle = [UILabel new];
_subtitle.font = [UIFont ows_footnoteFont];
_subtitle.textColor = [UIColor ows_darkGrayColor];
[_nameContainerView addSubview:self.subtitle];
[_avatarView autoVCenterInSuperview]; [_avatarView autoVCenterInSuperview];
[_avatarView autoPinLeadingToSuperView]; [_avatarView autoPinLeadingToSuperView];
@ -86,12 +95,15 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
// profileNameLabel can be zero sized, in which case nameLabel essentially occupies the totality of // profileNameLabel can be zero sized, in which case nameLabel essentially occupies the totality of
// nameContainerView's frame. // nameContainerView's frame.
[_profileNameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:_nameLabel]; [_profileNameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:_nameLabel];
[_profileNameLabel autoPinEdgeToSuperviewEdge:ALEdgeBottom];
[_profileNameLabel autoPinWidthToSuperview]; [_profileNameLabel autoPinWidthToSuperview];
[nameContainerView autoVCenterInSuperview]; [_subtitle autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:_profileNameLabel];
[nameContainerView autoPinLeadingToTrailingOfView:_avatarView margin:12.f]; [_subtitle autoPinWidthToSuperview];
[nameContainerView autoPinTrailingToSuperView]; [_subtitle autoPinEdgeToSuperviewEdge:ALEdgeBottom];
[_nameContainerView autoVCenterInSuperview];
[_nameContainerView autoPinLeadingToTrailingOfView:_avatarView margin:12.f];
[_nameContainerView autoPinTrailingToSuperView];
// Force layout, since imageView isn't being initally rendered on App Store optimized build. // Force layout, since imageView isn't being initally rendered on App Store optimized build.
[self layoutSubviews]; [self layoutSubviews];
@ -106,16 +118,17 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
- (void)configureWithRecipientId:(NSString *)recipientId - (void)configureWithRecipientId:(NSString *)recipientId
contactsManager:(OWSContactsManager *)contactsManager contactsManager:(OWSContactsManager *)contactsManager
{ {
self.recipientId = recipientId;
self.contactsManager = contactsManager;
self.nameLabel.attributedText = self.nameLabel.attributedText =
[contactsManager formattedFullNameForRecipientId:recipientId font:self.nameLabel.font]; [contactsManager formattedFullNameForRecipientId:recipientId font:self.nameLabel.font];
if ([contactsManager hasNameInSystemContactsForRecipientId:recipientId]) { [[NSNotificationCenter defaultCenter] addObserver:self
// Don't display profile name when we have a veritas name in system Contacts selector:@selector(otherUsersProfileDidChange:)
self.profileNameLabel.text = nil; name:kNSNotificationName_OtherUsersProfileDidChange
} else { object:nil];
// Use profile name, if any is available [self updateProfileName];
self.profileNameLabel.text = [contactsManager formattedProfileNameForRecipientId:recipientId];
}
if (self.accessoryMessage) { if (self.accessoryMessage) {
UILabel *blockedLabel = [[UILabel alloc] init]; UILabel *blockedLabel = [[UILabel alloc] init];
@ -139,6 +152,7 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
- (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager - (void)configureWithThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager
{ {
OWSAssert(thread); OWSAssert(thread);
self.contactsManager = contactsManager;
NSString *threadName = thread.name; NSString *threadName = thread.name;
if (threadName.length == 0 && [thread isKindOfClass:[TSGroupThread class]]) { if (threadName.length == 0 && [thread isKindOfClass:[TSGroupThread class]]) {
@ -152,6 +166,13 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
}]; }];
self.nameLabel.attributedText = attributedText; self.nameLabel.attributedText = attributedText;
if ([thread isKindOfClass:[TSContactThread class]]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(otherUsersProfileDidChange:)
name:kNSNotificationName_OtherUsersProfileDidChange
object:nil];
[self updateProfileName];
}
self.avatarView.image = [OWSAvatarBuilder buildImageForThread:thread self.avatarView.image = [OWSAvatarBuilder buildImageForThread:thread
diameter:kContactTableViewCellAvatarSize diameter:kContactTableViewCellAvatarSize
contactsManager:contactsManager]; contactsManager:contactsManager];
@ -160,39 +181,84 @@ const NSUInteger kContactTableViewCellAvatarSize = 40;
[self layoutSubviews]; [self layoutSubviews];
} }
- (void)addVerifiedSubtitle - (NSAttributedString *)verifiedSubtitle
{ {
[self.subtitle removeFromSuperview];
const CGFloat kSubtitlePointSize = 10.f;
NSMutableAttributedString *text = [NSMutableAttributedString new]; NSMutableAttributedString *text = [NSMutableAttributedString new];
// "checkmark" // "checkmark"
[text appendAttributedString:[[NSAttributedString alloc] [text appendAttributedString:[[NSAttributedString alloc]
initWithString:@"\uf00c " initWithString:@"\uf00c "
attributes:@{ attributes:@{
NSFontAttributeName : [UIFont ows_fontAwesomeFont:kSubtitlePointSize], NSFontAttributeName :
[UIFont ows_fontAwesomeFont:self.subtitle.font.pointSize],
}]]; }]];
[text appendAttributedString:[[NSAttributedString alloc] [text appendAttributedString:[[NSAttributedString alloc]
initWithString:NSLocalizedString(@"PRIVACY_IDENTITY_IS_VERIFIED_BADGE", initWithString:NSLocalizedString(@"PRIVACY_IDENTITY_IS_VERIFIED_BADGE",
@"Badge indicating that the user is verified.")]]; @"Badge indicating that the user is verified.")]];
self.subtitle = [UILabel new]; return [text copy];
self.subtitle.font = [UIFont ows_regularFontWithSize:kSubtitlePointSize]; }
self.subtitle.textColor = [UIColor ows_darkGrayColor];
self.subtitle.attributedText = text;
[self.subtitle sizeToFit]; - (void)updateProfileName
[self.contentView addSubview:self.subtitle]; {
[self.subtitle autoPinLeadingToView:self.nameLabel]; OWSContactsManager *contactsManager = self.contactsManager;
[self.subtitle autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.nameLabel]; if (contactsManager == nil) {
[self.subtitle autoPinEdgeToSuperviewEdge:ALEdgeBottom]; OWSFail(@"%@ contactsManager should not be nil", self.logTag);
self.profileNameLabel.text = nil;
return;
}
NSString *recipientId = self.recipientId;
if (recipientId.length == 0) {
OWSFail(@"%@ recipientId should not be nil", self.logTag);
self.profileNameLabel.text = nil;
return;
}
if ([contactsManager hasNameInSystemContactsForRecipientId:recipientId]) {
// Don't display profile name when we have a veritas name in system Contacts
self.profileNameLabel.text = nil;
} else {
// Use profile name, if any is available
self.profileNameLabel.text = [contactsManager formattedProfileNameForRecipientId:recipientId];
}
[self.profileNameLabel setNeedsLayout];
} }
- (void)prepareForReuse - (void)prepareForReuse
{ {
[[NSNotificationCenter defaultCenter] removeObserver:self];
self.accessoryMessage = nil; self.accessoryMessage = nil;
self.accessoryView = nil; self.accessoryView = nil;
self.accessoryType = UITableViewCellAccessoryNone; self.accessoryType = UITableViewCellAccessoryNone;
[self.subtitle removeFromSuperview]; self.nameLabel.text = nil;
self.subtitle = nil; self.subtitle.text = nil;
self.profileNameLabel.text = nil;
}
- (void)otherUsersProfileDidChange:(NSNotification *)notification
{
OWSAssert([NSThread isMainThread]);
NSString *recipientId = notification.userInfo[kNSNotificationKey_ProfileRecipientId];
OWSAssert(recipientId.length > 0);
if (recipientId.length > 0 && [self.recipientId isEqualToString:recipientId]) {
[self updateProfileName];
}
}
#pragma mark - Logging
+ (NSString *)logTag
{
return [NSString stringWithFormat:@"[%@]", self.class];
}
- (NSString *)logTag
{
return self.class.logTag;
} }
@end @end

Loading…
Cancel
Save