From dcf7a059860d7c900fef0e0e26c6c0bbc97c66ca Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 2 May 2018 13:25:38 -0400 Subject: [PATCH] Use default avatars for contact shares in contact view. --- .../ContactViewController.swift | 23 ++++++++++++++++--- .../Cells/OWSContactShareView.m | 1 + .../translations/en.lproj/Localizable.strings | 3 +++ .../Interactions/OWSContact+Private.h | 2 +- .../src/Messages/Interactions/OWSContact.h | 2 +- .../src/Messages/Interactions/OWSContact.m | 11 +++++---- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Signal/src/ViewControllers/ContactViewController.swift b/Signal/src/ViewControllers/ContactViewController.swift index 37d02f53e..b52e81c89 100644 --- a/Signal/src/ViewControllers/ContactViewController.swift +++ b/Signal/src/ViewControllers/ContactViewController.swift @@ -202,9 +202,26 @@ class ContactViewController: OWSViewController, CNContactViewControllerDelegate // TODO: Use actual avatar. let avatarSize = CGFloat(100) - let avatarView = UIView.container() - avatarView.backgroundColor = UIColor.ows_materialBlue - avatarView.layer.cornerRadius = avatarSize * 0.5 + + let avatarView = AvatarImageView() + // TODO: What's the best colorSeed value to use? + let avatarBuilder = OWSContactAvatarBuilder(nonSignalName: contact.displayName, + colorSeed: contact.displayName, + diameter: UInt(avatarSize), + contactsManager: contactsManager) +// [[OWSContactAvatarBuilder alloc] initWithNonSignalName:self.contactShare.displayName +// colorSeed:self.contactShare.displayName +// diameter:(NSUInteger)self.iconSize +// contactsManager:[Environment current].contactsManager]; + avatarView.image = avatarBuilder.build() +// [avatarView autoSetDimension:ALDimensionWidth toSize:self.iconSize]; +// [avatarView autoSetDimension:ALDimensionHeight toSize:self.iconSize]; +// [avatarView setCompressionResistanceHigh]; +// [avatarView setContentHuggingHigh]; + +// let avatarView = UIView.container() +// avatarView.backgroundColor = UIColor.ows_materialBlue +// avatarView.layer.cornerRadius = avatarSize * 0.5 topView.addSubview(avatarView) avatarView.autoPin(toTopLayoutGuideOf: self, withInset: 20) avatarView.autoHCenterInSuperview() diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m index 7cb72f65e..7001104df 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m @@ -105,6 +105,7 @@ NS_ASSUME_NONNULL_BEGIN [contentView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:self.vMargin]; [contentView autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:self.vMargin]; + // TODO: Use the contact's avatar if present and downloaded. AvatarImageView *avatarView = [AvatarImageView new]; // TODO: What's the best colorSeed value to use? OWSAvatarBuilder *avatarBuilder = diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 131814aa5..a0242eeca 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -424,6 +424,9 @@ /* navbar title for contact picker when sharing a contact */ "CONTACT_PICKER_TITLE" = "Select Contact"; +/* Indicates that a contact has no name. */ +"CONTACT_WITHOUT_NAME" = "Unnamed Contact"; + /* title for conversation settings screen */ "CONVERSATION_SETTINGS" = "Conversation Settings"; diff --git a/SignalServiceKit/src/Messages/Interactions/OWSContact+Private.h b/SignalServiceKit/src/Messages/Interactions/OWSContact+Private.h index 5a037eb84..e8f37c6cb 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSContact+Private.h +++ b/SignalServiceKit/src/Messages/Interactions/OWSContact+Private.h @@ -55,7 +55,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, nullable) NSString *namePrefix; @property (nonatomic, nullable) NSString *middleName; @property (nonatomic, nullable) NSString *organizationName; -@property (nonatomic, nullable) NSString *displayName; +@property (nonatomic) NSString *displayName; @property (nonatomic) NSArray *phoneNumbers; @property (nonatomic) NSArray *emails; diff --git a/SignalServiceKit/src/Messages/Interactions/OWSContact.h b/SignalServiceKit/src/Messages/Interactions/OWSContact.h index 517debc26..4a87832e6 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSContact.h +++ b/SignalServiceKit/src/Messages/Interactions/OWSContact.h @@ -109,7 +109,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value); @property (nonatomic, readonly, nullable) NSString *namePrefix; @property (nonatomic, readonly, nullable) NSString *middleName; @property (nonatomic, readonly, nullable) NSString *organizationName; -@property (nonatomic, readonly, nullable) NSString *displayName; +@property (nonatomic, readonly) NSString *displayName; @property (nonatomic, readonly) NSArray *phoneNumbers; @property (nonatomic, readonly) NSArray *emails; diff --git a/SignalServiceKit/src/Messages/Interactions/OWSContact.m b/SignalServiceKit/src/Messages/Interactions/OWSContact.m index b7c7f9fb2..21a26f51a 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSContact.m +++ b/SignalServiceKit/src/Messages/Interactions/OWSContact.m @@ -288,7 +288,7 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value) @property (nonatomic, nullable) NSString *namePrefix; @property (nonatomic, nullable) NSString *middleName; @property (nonatomic, nullable) NSString *organizationName; -@property (nonatomic, nullable) NSString *displayName; +@property (nonatomic) NSString *displayName; @property (nonatomic) NSArray *phoneNumbers; @property (nonatomic) NSArray *emails; @@ -360,10 +360,14 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value) return hasValue; } -- (nullable NSString *)displayName +- (NSString *)displayName { [self ensureDisplayName]; + if (_displayName.length < 1) { + OWSProdLogAndFail(@"%@ could not derive a valid display name.", self.logTag); + return NSLocalizedString(@"CONTACT_WITHOUT_NAME", @"Indicates that a contact has no name."); + } return _displayName; } @@ -377,9 +381,6 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value) // Fall back to using the organization name. _displayName = self.organizationName; } - if (_displayName.length < 1) { - OWSProdLogAndFail(@"%@ could not derive a valid display name.", self.logTag); - } } - (NSString *)debugDescription