From a16040f19f10841e2967aa83dd37a72dedae4a30 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 10 May 2018 11:27:15 -0400 Subject: [PATCH] Fix avatar sending in SAE // FREEBIE --- .../SharingThreadPickerViewController.m | 26 +++++++++----- SignalServiceKit/src/Contacts/Contact.h | 1 + SignalServiceKit/src/Contacts/Contact.m | 36 +++++++++++++++++++ .../src/Messages/Interactions/OWSContact.m | 5 --- .../ShareViewController.swift | 2 +- 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/SignalMessaging/attachments/SharingThreadPickerViewController.m b/SignalMessaging/attachments/SharingThreadPickerViewController.m index d82985f60..51daca53a 100644 --- a/SignalMessaging/attachments/SharingThreadPickerViewController.m +++ b/SignalMessaging/attachments/SharingThreadPickerViewController.m @@ -150,22 +150,30 @@ typedef void (^SendMessageBlock)(SendCompletionBlock completion); if (self.attachment.isConvertibleToContactShare) { NSData *data = self.attachment.data; - OWSContact *_Nullable contact = [OWSContacts contactForVCardData:data]; - if (!contact) { - // This should never happen since we verify that the contact can be parsed when building the attachment. - OWSFail(@"%@ could not parse contact share.", self.logTag); - [self.shareViewDelegate shareViewWasCancelled]; + Contact *_Nullable contact = [Contact contactWithVCardData:data]; + OWSContact *_Nullable contactShareRecord = [OWSContacts contactForSystemContact:contact.cnContact]; + if (!contactShareRecord) { + DDLogError(@"%@ Could not convert system contact.", self.logTag); return; } - // TODO: Populate avatar image. BOOL isProfileAvatar = NO; - NSData *_Nullable avatarImageData = nil; - contact.isProfileAvatar = isProfileAvatar; + NSData *_Nullable avatarImageData = contact.imageData; + for (NSString *recipientId in contact.textSecureIdentifiers) { + if (avatarImageData) { + break; + } + avatarImageData = [self.contactsManager profileImageDataForPhoneIdentifier:recipientId]; + if (avatarImageData) { + isProfileAvatar = YES; + } + } + contactShareRecord.isProfileAvatar = isProfileAvatar; ContactShareViewModel *contactShare = - [[ContactShareViewModel alloc] initWithContactShareRecord:contact avatarImageData:avatarImageData]; + [[ContactShareViewModel alloc] initWithContactShareRecord:contactShareRecord + avatarImageData:avatarImageData]; ApproveContactShareViewController *approvalVC = [[ApproveContactShareViewController alloc] initWithContactShare:contactShare diff --git a/SignalServiceKit/src/Contacts/Contact.h b/SignalServiceKit/src/Contacts/Contact.h index aec8c014b..72b5a31f8 100644 --- a/SignalServiceKit/src/Contacts/Contact.h +++ b/SignalServiceKit/src/Contacts/Contact.h @@ -41,6 +41,7 @@ NS_ASSUME_NONNULL_BEGIN #if TARGET_OS_IOS - (instancetype)initWithSystemContact:(CNContact *)contact NS_AVAILABLE_IOS(9_0); ++ (nullable Contact *)contactWithVCardData:(NSData *)data; - (NSString *)nameForPhoneNumber:(NSString *)recipientId; diff --git a/SignalServiceKit/src/Contacts/Contact.m b/SignalServiceKit/src/Contacts/Contact.m index 84d82b9a8..49d4d6f33 100644 --- a/SignalServiceKit/src/Contacts/Contact.m +++ b/SignalServiceKit/src/Contacts/Contact.m @@ -106,11 +106,25 @@ NS_ASSUME_NONNULL_BEGIN if (contact.thumbnailImageData) { _imageData = [contact.thumbnailImageData copy]; + } else if (contact.imageData) { + // This only occur