diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 12c4fdc79..1224b37ce 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -48,7 +48,7 @@ 34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */; }; 34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; }; 34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34330AA21E79686200DF2FB9 /* OWSProgressView.m */; }; - 34382266209A4E400094FEB7 /* ApproveContactShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */; }; + 34382266209A4E400094FEB7 /* ContactShareApprovalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34382265209A4E3F0094FEB7 /* ContactShareApprovalViewController.swift */; }; 3438226A209B63500094FEB7 /* EditContactShareNameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34382269209B63500094FEB7 /* EditContactShareNameViewController.swift */; }; 34386A51207D0C01009F5D9C /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A4D207D0C01009F5D9C /* HomeViewController.m */; }; 34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A50207D0C01009F5D9C /* HomeViewCell.m */; }; @@ -638,7 +638,7 @@ 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = ElegantIcons.ttf; sourceTree = ""; }; 34330AA11E79686200DF2FB9 /* OWSProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProgressView.h; sourceTree = ""; }; 34330AA21E79686200DF2FB9 /* OWSProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProgressView.m; sourceTree = ""; }; - 34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ApproveContactShareViewController.swift; path = SignalMessaging/attachments/ApproveContactShareViewController.swift; sourceTree = SOURCE_ROOT; }; + 34382265209A4E3F0094FEB7 /* ContactShareApprovalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ContactShareApprovalViewController.swift; path = SignalMessaging/attachments/ContactShareApprovalViewController.swift; sourceTree = SOURCE_ROOT; }; 34382269209B63500094FEB7 /* EditContactShareNameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EditContactShareNameViewController.swift; path = SignalMessaging/attachments/EditContactShareNameViewController.swift; sourceTree = SOURCE_ROOT; }; 34386A4D207D0C01009F5D9C /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; 34386A4E207D0C01009F5D9C /* HomeViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewCell.h; sourceTree = ""; }; @@ -1614,9 +1614,9 @@ 346129DB1FD5C02900532771 /* viewControllers */ = { isa = PBXGroup; children = ( - 34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */, 344F2498200FD03200CFB4F4 /* AttachmentApprovalViewController.swift */, 348BB253209CD4B80047AEC2 /* ContactFieldView.swift */, + 34382265209A4E3F0094FEB7 /* ContactShareApprovalViewController.swift */, 344F248220069E9B00CFB4F4 /* CountryCodeViewController.h */, 344F248320069E9B00CFB4F4 /* CountryCodeViewController.m */, 34382269209B63500094FEB7 /* EditContactShareNameViewController.swift */, @@ -3136,7 +3136,7 @@ 451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */, 451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */, 451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */, - 34382266209A4E400094FEB7 /* ApproveContactShareViewController.swift in Sources */, + 34382266209A4E400094FEB7 /* ContactShareApprovalViewController.swift in Sources */, 4503F1C3204711D300CEE724 /* OWS107LegacySounds.m in Sources */, 3438226A209B63500094FEB7 /* EditContactShareNameViewController.swift in Sources */, 346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */, diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m index 6b23a2ec7..58637437b 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSContactShareView.m @@ -188,8 +188,9 @@ NS_ASSUME_NONNULL_BEGIN [contentView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:self.vMargin]; AvatarImageView *avatarView = [AvatarImageView new]; - avatarView.image = - [self.contactShare getAvatarImageWithDiameter:self.iconSize contactsManager:self.contactsManager]; + avatarView.image = [self.contactShare getAvatarImageWithDiameter:self.iconSize + contactsManager:self.contactsManager + ignoreContactAndProfile:YES]; [avatarView autoSetDimension:ALDimensionWidth toSize:self.iconSize]; [avatarView autoSetDimension:ALDimensionHeight toSize:self.iconSize]; diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index a91cb5f9c..b895fe44c 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -118,7 +118,7 @@ typedef enum : NSUInteger { #pragma mark - @interface ConversationViewController () UIImage { + public func getAvatarImage(diameter: CGFloat, contactsManager: OWSContactsManager, ignoreContactAndProfile: Bool = false) -> UIImage { if let avatarImage = avatarImage { return avatarImage } @@ -59,6 +59,7 @@ public class ContactShareViewModel: NSObject { let avatarBuilder = OWSContactAvatarBuilder(nonSignalName: displayName, colorSeed: colorSeed, diameter: UInt(diameter), + ignoreContactAndProfile: ignoreContactAndProfile, contactsManager: contactsManager) return avatarBuilder.build() } diff --git a/SignalMessaging/attachments/ApproveContactShareViewController.swift b/SignalMessaging/attachments/ContactShareApprovalViewController.swift similarity index 96% rename from SignalMessaging/attachments/ApproveContactShareViewController.swift rename to SignalMessaging/attachments/ContactShareApprovalViewController.swift index 4434a6405..ef9b52b19 100644 --- a/SignalMessaging/attachments/ApproveContactShareViewController.swift +++ b/SignalMessaging/attachments/ContactShareApprovalViewController.swift @@ -6,10 +6,10 @@ import Foundation import SignalServiceKit @objc -public protocol ApproveContactShareViewControllerDelegate: class { - func approveContactShare(_ approveContactShare: ApproveContactShareViewController, +public protocol ContactShareApprovalViewControllerDelegate: class { + func approveContactShare(_ approveContactShare: ContactShareApprovalViewController, didApproveContactShare contactShare: ContactShareViewModel) - func approveContactShare(_ approveContactShare: ApproveContactShareViewController, + func approveContactShare(_ approveContactShare: ContactShareApprovalViewController, didCancelContactShare contactShare: ContactShareViewModel) } @@ -214,9 +214,9 @@ class ContactShareFieldView: UIStackView { // TODO: Rename to ContactShareApprovalViewController @objc -public class ApproveContactShareViewController: OWSViewController, EditContactShareNameViewControllerDelegate, ContactShareFieldViewDelegate { +public class ContactShareApprovalViewController: OWSViewController, EditContactShareNameViewControllerDelegate, ContactShareFieldViewDelegate { - weak var delegate: ApproveContactShareViewControllerDelegate? + weak var delegate: ContactShareApprovalViewControllerDelegate? let contactsManager: OWSContactsManager @@ -234,7 +234,7 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh } @objc - required public init(contactShare: ContactShareViewModel, contactsManager: OWSContactsManager, delegate: ApproveContactShareViewControllerDelegate) { + required public init(contactShare: ContactShareViewModel, contactsManager: OWSContactsManager, delegate: ContactShareApprovalViewControllerDelegate) { self.contactsManager = contactsManager self.contactShare = contactShare self.delegate = delegate @@ -463,6 +463,7 @@ public class ApproveContactShareViewController: OWSViewController, EditContactSh } let filteredContactShare = self.filteredContactShare() + assert(filteredContactShare.ows_isValid) delegate.approveContactShare(self, didApproveContactShare: filteredContactShare) diff --git a/SignalMessaging/attachments/SharingThreadPickerViewController.m b/SignalMessaging/attachments/SharingThreadPickerViewController.m index 51daca53a..65de3f7d1 100644 --- a/SignalMessaging/attachments/SharingThreadPickerViewController.m +++ b/SignalMessaging/attachments/SharingThreadPickerViewController.m @@ -24,7 +24,7 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); @interface SharingThreadPickerViewController () + ContactShareApprovalViewControllerDelegate> @property (nonatomic, readonly) OWSContactsManager *contactsManager; @property (nonatomic, readonly) OWSMessageSender *messageSender; @@ -175,10 +175,10 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); [[ContactShareViewModel alloc] initWithContactShareRecord:contactShareRecord avatarImageData:avatarImageData]; - ApproveContactShareViewController *approvalVC = - [[ApproveContactShareViewController alloc] initWithContactShare:contactShare - contactsManager:self.contactsManager - delegate:self]; + ContactShareApprovalViewController *approvalVC = + [[ContactShareApprovalViewController alloc] initWithContactShare:contactShare + contactsManager:self.contactsManager + delegate:self]; [self.navigationController pushViewController:approvalVC animated:YES]; return; } @@ -289,9 +289,9 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); [self cancelShareExperience]; } -#pragma mark - ApproveContactShareViewControllerDelegate +#pragma mark - ContactShareApprovalViewControllerDelegate -- (void)approveContactShare:(ApproveContactShareViewController *)approvalViewController +- (void)approveContactShare:(ContactShareApprovalViewController *)approvalViewController didApproveContactShare:(ContactShareViewModel *)contactShare { DDLogInfo(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__); @@ -321,7 +321,7 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); fromViewController:approvalViewController]; } -- (void)approveContactShare:(ApproveContactShareViewController *)approvalViewController +- (void)approveContactShare:(ContactShareApprovalViewController *)approvalViewController didCancelContactShare:(ContactShareViewModel *)contactShare { DDLogInfo(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__); diff --git a/SignalMessaging/utils/OWSContactAvatarBuilder.h b/SignalMessaging/utils/OWSContactAvatarBuilder.h index ad806da15..1fca66361 100644 --- a/SignalMessaging/utils/OWSContactAvatarBuilder.h +++ b/SignalMessaging/utils/OWSContactAvatarBuilder.h @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "OWSAvatarBuilder.h" @@ -24,9 +24,9 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithNonSignalName:(NSString *)nonSignalName colorSeed:(NSString *)colorSeed diameter:(NSUInteger)diameter + ignoreContactAndProfile:(BOOL)ignoreContactAndProfile contactsManager:(OWSContactsManager *)contactsManager; - @end NS_ASSUME_NONNULL_END diff --git a/SignalMessaging/utils/OWSContactAvatarBuilder.m b/SignalMessaging/utils/OWSContactAvatarBuilder.m index b8d6f3901..b94dceaba 100644 --- a/SignalMessaging/utils/OWSContactAvatarBuilder.m +++ b/SignalMessaging/utils/OWSContactAvatarBuilder.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "OWSContactAvatarBuilder.h" @@ -10,6 +10,7 @@ #import "UIColor+OWS.h" #import "UIFont+OWS.h" #import + // SHARINGEXTENSION FIXME // intern or reimplement this so that SignalMessaging doesn't depend on JSQ #import @@ -22,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSString *signalId; @property (nonatomic, readonly) NSString *contactName; @property (nonatomic, readonly) NSUInteger diameter; +@property (nonatomic, readonly) BOOL ignoreContactAndProfile; @end @@ -32,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithContactId:(NSString *)contactId name:(NSString *)name diameter:(NSUInteger)diameter + ignoreContactAndProfile:(BOOL)ignoreContactAndProfile contactsManager:(OWSContactsManager *)contactsManager { self = [super init]; @@ -42,6 +45,7 @@ NS_ASSUME_NONNULL_BEGIN _signalId = contactId; _contactName = name; _diameter = diameter; + _ignoreContactAndProfile = ignoreContactAndProfile; _contactsManager = contactsManager; return self; @@ -59,21 +63,33 @@ NS_ASSUME_NONNULL_BEGIN if (name.length == 0) { name = signalId; } - return [self initWithContactId:signalId name:name diameter:diameter contactsManager:contactsManager]; + return [self initWithContactId:signalId + name:name + diameter:diameter + ignoreContactAndProfile:NO + contactsManager:contactsManager]; } - (instancetype)initWithNonSignalName:(NSString *)nonSignalName colorSeed:(NSString *)colorSeed diameter:(NSUInteger)diameter + ignoreContactAndProfile:(BOOL)ignoreContactAndProfile contactsManager:(OWSContactsManager *)contactsManager { - return [self initWithContactId:colorSeed name:nonSignalName diameter:diameter contactsManager:contactsManager]; + return [self initWithContactId:colorSeed + name:nonSignalName + diameter:diameter + ignoreContactAndProfile:ignoreContactAndProfile + contactsManager:contactsManager]; } #pragma mark - Instance methods - (nullable UIImage *)buildSavedImage { + if (self.ignoreContactAndProfile) { + return nil; + } return [self.contactsManager imageForPhoneIdentifier:self.signalId]; }