mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Add contact share approval view.
This commit is contained in:
parent
4fcbfe0e12
commit
0c745dd989
10 changed files with 1387 additions and 10 deletions
|
@ -48,6 +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 */; };
|
||||
34386A51207D0C01009F5D9C /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A4D207D0C01009F5D9C /* HomeViewController.m */; };
|
||||
34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A50207D0C01009F5D9C /* HomeViewCell.m */; };
|
||||
34386A54207D271D009F5D9C /* NeverClearView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34386A53207D271C009F5D9C /* NeverClearView.swift */; };
|
||||
|
@ -630,6 +631,7 @@
|
|||
34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = ElegantIcons.ttf; sourceTree = "<group>"; };
|
||||
34330AA11E79686200DF2FB9 /* OWSProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProgressView.h; sourceTree = "<group>"; };
|
||||
34330AA21E79686200DF2FB9 /* OWSProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProgressView.m; sourceTree = "<group>"; };
|
||||
34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ApproveContactShareViewController.swift; path = SignalMessaging/attachments/ApproveContactShareViewController.swift; sourceTree = SOURCE_ROOT; };
|
||||
34386A4D207D0C01009F5D9C /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; };
|
||||
34386A4E207D0C01009F5D9C /* HomeViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewCell.h; sourceTree = "<group>"; };
|
||||
34386A4F207D0C01009F5D9C /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
|
||||
|
@ -1551,12 +1553,12 @@
|
|||
346129A11FD1F09100532771 /* contacts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
||||
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
||||
346129A21FD1F09100532771 /* OWSContactsManager.h */,
|
||||
346129A31FD1F09100532771 /* OWSContactsManager.m */,
|
||||
34612A041FD7238500532771 /* OWSContactsSyncing.h */,
|
||||
34612A051FD7238500532771 /* OWSContactsSyncing.m */,
|
||||
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
||||
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
||||
346129AE1FD1F5D900532771 /* SystemContactsFetcher.swift */,
|
||||
);
|
||||
path = contacts;
|
||||
|
@ -1596,6 +1598,7 @@
|
|||
346129DB1FD5C02900532771 /* viewControllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */,
|
||||
344F2498200FD03200CFB4F4 /* AttachmentApprovalViewController.swift */,
|
||||
344F248220069E9B00CFB4F4 /* CountryCodeViewController.h */,
|
||||
344F248320069E9B00CFB4F4 /* CountryCodeViewController.m */,
|
||||
|
@ -3093,6 +3096,7 @@
|
|||
451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */,
|
||||
451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */,
|
||||
451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */,
|
||||
34382266209A4E400094FEB7 /* ApproveContactShareViewController.swift in Sources */,
|
||||
4503F1C3204711D300CEE724 /* OWS107LegacySounds.m in Sources */,
|
||||
346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */,
|
||||
4598198F204E2F28009414F2 /* OWS108CallLoggingPreference.m in Sources */,
|
||||
|
|
|
@ -60,7 +60,8 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView
|
|||
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
|
||||
CNContactThumbnailImageDataKey as CNKeyDescriptor,
|
||||
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
||||
CNContactEmailAddressesKey as CNKeyDescriptor
|
||||
CNContactEmailAddressesKey as CNKeyDescriptor,
|
||||
CNContactPostalAddressesKey as CNKeyDescriptor
|
||||
]
|
||||
|
||||
// MARK: - Lifecycle Methods
|
||||
|
|
|
@ -117,6 +117,7 @@ typedef enum : NSUInteger {
|
|||
#pragma mark -
|
||||
|
||||
@interface ConversationViewController () <AttachmentApprovalViewControllerDelegate,
|
||||
ApproveContactShareViewControllerDelegate,
|
||||
AVAudioPlayerDelegate,
|
||||
CNContactViewControllerDelegate,
|
||||
ContactEditingDelegate,
|
||||
|
@ -337,8 +338,26 @@ typedef enum : NSUInteger {
|
|||
OWSAssertIsOnMainThread();
|
||||
|
||||
[self ensureDynamicInteractions];
|
||||
|
||||
// [self tryToShowContactShareUI];
|
||||
}
|
||||
|
||||
//- (void)tryToShowContactShareUI
|
||||
//{
|
||||
// OWSAssertIsOnMainThread();
|
||||
//
|
||||
// Contact *_Nullable firstContact = self.contactsManager.allContacts.firstObject;
|
||||
// DDLogInfo(@"%@ firstContact: %@ %d", self.logTag, firstContact, firstContact.cnContact != nil);
|
||||
// [DDLog flushLog];
|
||||
// if (!firstContact.cnContact) {
|
||||
// return;
|
||||
// }
|
||||
// static dispatch_once_t onceToken;
|
||||
// dispatch_once(&onceToken, ^{
|
||||
// [self contactsPicker:nil didSelectContact:firstContact];
|
||||
// });
|
||||
//}
|
||||
|
||||
- (void)otherUsersProfileDidChange:(NSNotification *)notification
|
||||
{
|
||||
OWSAssertIsOnMainThread();
|
||||
|
@ -489,6 +508,11 @@ typedef enum : NSUInteger {
|
|||
|
||||
[self addNotificationListeners];
|
||||
[self loadDraftInCompose];
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self showPhonyContactShareApproval];
|
||||
// [self tryToShowContactShareUI];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)loadView
|
||||
|
@ -2522,6 +2546,7 @@ typedef enum : NSUInteger {
|
|||
}
|
||||
|
||||
#pragma mark - Attachment Picking: Contacts
|
||||
|
||||
- (void)chooseContactForSending
|
||||
{
|
||||
ContactsPicker *contactsPicker =
|
||||
|
@ -4903,6 +4928,79 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
|||
|
||||
#pragma mark - ContactsPickerDelegate
|
||||
|
||||
- (void)showPhonyContactShareApproval
|
||||
{
|
||||
ApproveContactShareViewController *approveContactShare =
|
||||
[[ApproveContactShareViewController alloc] initWithContactShare:self.makePhonyContact
|
||||
contactsManager:self.contactsManager
|
||||
delegate:self];
|
||||
// contactsPicker.title
|
||||
// = NSLocalizedString(@"CONTACT_PICKER_TITLE", @"navbar title for contact picker when sharing a contact");
|
||||
|
||||
UINavigationController *navigationController =
|
||||
[[UINavigationController alloc] initWithRootViewController:approveContactShare];
|
||||
[self dismissKeyBoard];
|
||||
[self presentViewController:navigationController animated:YES completion:nil];
|
||||
// [self contactsPicker:nil didSelectContact:self.makePhonyContact];
|
||||
}
|
||||
|
||||
- (OWSContact *)makePhonyContact
|
||||
{
|
||||
OWSContact *contact = [OWSContact new];
|
||||
contact.givenName = @"Alice";
|
||||
contact.familyName = @"Carol";
|
||||
contact.middleName = @"Bob";
|
||||
contact.namePrefix = @"Ms.";
|
||||
contact.nameSuffix = @"Esq.";
|
||||
contact.organizationName = @"Falafel Hut";
|
||||
|
||||
OWSContactPhoneNumber *phoneNumber1 = [OWSContactPhoneNumber new];
|
||||
phoneNumber1.phoneType = OWSContactPhoneType_Home;
|
||||
phoneNumber1.phoneNumber = @"+13213214321";
|
||||
OWSContactPhoneNumber *phoneNumber2 = [OWSContactPhoneNumber new];
|
||||
phoneNumber2.phoneType = OWSContactPhoneType_Custom;
|
||||
phoneNumber2.label = @"Carphone";
|
||||
phoneNumber2.phoneNumber = @"+13332221111";
|
||||
contact.phoneNumbers = @[
|
||||
phoneNumber1,
|
||||
phoneNumber2,
|
||||
];
|
||||
|
||||
NSMutableArray<OWSContactEmail *> *emails = [NSMutableArray new];
|
||||
for (NSUInteger i = 0; i < 16; i++) {
|
||||
OWSContactEmail *email = [OWSContactEmail new];
|
||||
email.emailType = OWSContactEmailType_Home;
|
||||
email.email = [NSString stringWithFormat:@"a%zd@b.com", i];
|
||||
[emails addObject:email];
|
||||
}
|
||||
contact.emails = emails;
|
||||
|
||||
OWSContactAddress *address1 = [OWSContactAddress new];
|
||||
address1.addressType = OWSContactAddressType_Home;
|
||||
address1.street = @"123 home st.";
|
||||
address1.neighborhood = @"round the bend.";
|
||||
address1.city = @"homeville";
|
||||
address1.region = @"HO";
|
||||
address1.postcode = @"12345";
|
||||
address1.country = @"USA";
|
||||
OWSContactAddress *address2 = [OWSContactAddress new];
|
||||
address2.addressType = OWSContactAddressType_Custom;
|
||||
address2.label = @"Otra casa";
|
||||
address2.pobox = @"caja 123";
|
||||
address2.street = @"123 casa calle";
|
||||
address2.city = @"barrio norte";
|
||||
address2.region = @"AB";
|
||||
address2.postcode = @"53421";
|
||||
address2.country = @"MX";
|
||||
contact.addresses = @[
|
||||
address1,
|
||||
address2,
|
||||
];
|
||||
|
||||
// TODO: Avatar
|
||||
return contact;
|
||||
}
|
||||
|
||||
- (void)contactsPickerDidCancel:(ContactsPicker *)contactsPicker
|
||||
{
|
||||
DDLogDebug(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
|
@ -4915,10 +5013,32 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
|||
|
||||
- (void)contactsPicker:(ContactsPicker *)contactsPicker didSelectContact:(Contact *)contact
|
||||
{
|
||||
OWSAssert(contact);
|
||||
OWSAssert(contact.cnContact);
|
||||
|
||||
DDLogDebug(@"%@ in %s with contact: %@", self.logTag, __PRETTY_FUNCTION__, contact);
|
||||
|
||||
OWSContact *_Nullable contactShare = [OWSContacts contactForSystemContact:contact.cnContact];
|
||||
if (!contactShare) {
|
||||
DDLogError(@"%@ Could not convert system contact.", self.logTag);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO actually build contact message.
|
||||
self.inputToolbar.messageText = contact.fullName;
|
||||
// self.inputToolbar.messageText = contact.fullName;
|
||||
|
||||
// TODO: We should probably show this in the same navigation view controller.
|
||||
ApproveContactShareViewController *approveContactShare =
|
||||
[[ApproveContactShareViewController alloc] initWithContactShare:contactShare
|
||||
contactsManager:self.contactsManager
|
||||
delegate:self];
|
||||
// contactsPicker.title
|
||||
// = NSLocalizedString(@"CONTACT_PICKER_TITLE", @"navbar title for contact picker when sharing a contact");
|
||||
|
||||
UINavigationController *navigationController =
|
||||
[[UINavigationController alloc] initWithRootViewController:approveContactShare];
|
||||
[self dismissKeyBoard];
|
||||
[self presentViewController:navigationController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)contactsPicker:(ContactsPicker *)contactsPicker didSelectMultipleContacts:(NSArray<Contact *> *)contacts
|
||||
|
@ -4932,6 +5052,17 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
|||
return YES;
|
||||
}
|
||||
|
||||
#pragma mark - ApproveContactShareViewControllerDelegate
|
||||
|
||||
- (void)approveContactShare:(ApproveContactShareViewController *)approveContactShare
|
||||
didApproveContactShare:(OWSContact *)contactShare
|
||||
{
|
||||
DDLogInfo(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||
|
||||
// TODO:
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -421,6 +421,27 @@
|
|||
/* Label for a contact's email address. */
|
||||
"CONTACT_EMAIL" = "Email";
|
||||
|
||||
/* Label for the 'city' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_CITY" = "City";
|
||||
|
||||
/* Label for the 'country' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_COUNTRY" = "Country";
|
||||
|
||||
/* Label for the 'neighborhood' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_NEIGHBORHOOD" = "Neighborhood";
|
||||
|
||||
/* Label for the 'pobox' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_POBOX" = "P.O. Box";
|
||||
|
||||
/* Label for the 'postcode' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_POSTCODE" = "Post Code";
|
||||
|
||||
/* Label for the 'region' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_REGION" = "Region";
|
||||
|
||||
/* Label for the 'street' field of a contact's address. */
|
||||
"CONTACT_FIELD_ADDRESS_STREET" = "Street";
|
||||
|
||||
/* Label for a contact's phone number. */
|
||||
"CONTACT_PHONE" = "Phone";
|
||||
|
||||
|
@ -433,6 +454,9 @@
|
|||
/* navbar title for contact picker when sharing a contact */
|
||||
"CONTACT_PICKER_TITLE" = "Select Contact";
|
||||
|
||||
/* Title for the 'Approve contact share' view. */
|
||||
"CONTACT_SHARE_APPROVAL_VIEW_TITLE" = "Share Contact";
|
||||
|
||||
/* Indicates that a contact has no name. */
|
||||
"CONTACT_WITHOUT_NAME" = "Unnamed Contact";
|
||||
|
||||
|
|
1133
SignalMessaging/attachments/ApproveContactShareViewController.swift
Normal file
1133
SignalMessaging/attachments/ApproveContactShareViewController.swift
Normal file
File diff suppressed because it is too large
Load diff
|
@ -343,10 +343,10 @@ NSString *const OWSContactsManagerSignalAccountsDidChangeNotification
|
|||
{
|
||||
OWSAssertIsOnMainThread();
|
||||
|
||||
if ([signalAccounts isEqual:self.signalAccounts]) {
|
||||
DDLogDebug(@"%@ SignalAccounts unchanged.", self.logTag);
|
||||
return;
|
||||
}
|
||||
// if ([signalAccounts isEqual:self.signalAccounts]) {
|
||||
// DDLogDebug(@"%@ SignalAccounts unchanged.", self.logTag);
|
||||
// return;
|
||||
// }
|
||||
|
||||
NSMutableDictionary<NSString *, SignalAccount *> *signalAccountMap = [NSMutableDictionary new];
|
||||
for (SignalAccount *signalAccount in signalAccounts) {
|
||||
|
|
|
@ -34,6 +34,7 @@ class ContactsFrameworkContactStoreAdaptee: ContactStoreAdaptee {
|
|||
CNContactThumbnailImageDataKey as CNKeyDescriptor, // TODO full image instead of thumbnail?
|
||||
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
||||
CNContactEmailAddressesKey as CNKeyDescriptor,
|
||||
CNContactPostalAddressesKey as CNKeyDescriptor,
|
||||
CNContactViewController.descriptorForRequiredKeys()
|
||||
]
|
||||
|
||||
|
|
|
@ -134,6 +134,10 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
|||
{
|
||||
OWSAssert(phoneNumber);
|
||||
|
||||
if (![phoneNumber hasPrefix:COUNTRY_CODE_PREFIX]) {
|
||||
return phoneNumber;
|
||||
}
|
||||
|
||||
PhoneNumber *_Nullable parsedPhoneNumber = [self tryParsePhoneNumberFromE164:phoneNumber];
|
||||
if (!parsedPhoneNumber) {
|
||||
DDLogWarn(@"%@ could not parse phone number.", self.logTag);
|
||||
|
@ -356,6 +360,9 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
|||
|
||||
+ (PhoneNumber *)tryParsePhoneNumberFromE164:(NSString *)text {
|
||||
OWSAssert(text != nil);
|
||||
if (![text hasPrefix:COUNTRY_CODE_PREFIX]) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
return [self phoneNumberFromE164:text];
|
||||
}
|
||||
|
|
|
@ -154,6 +154,10 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value);
|
|||
+ (nullable OWSSignalServiceProtosDataMessageContact *)protoForContact:(OWSContact *)contact;
|
||||
+ (OWSContact *_Nullable)contactForDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage;
|
||||
|
||||
//#pragma mark - Old Contacts
|
||||
//
|
||||
//+ (nullable OWSContact *)contactForOldContact:(Contact *)oldContact
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
#import "OWSContact+Private.h"
|
||||
#import "OWSSignalServiceProtos.pb.h"
|
||||
#import "PhoneNumber.h"
|
||||
|
||||
//#import "Contact.h"
|
||||
#import "TSAttachment.h"
|
||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||
|
||||
|
@ -45,8 +47,8 @@ NSString *NSStringForContactPhoneType(OWSContactPhoneType value)
|
|||
|
||||
- (BOOL)ows_isValid
|
||||
{
|
||||
if (![PhoneNumber tryParsePhoneNumberFromE164:self.phoneNumber]) {
|
||||
DDLogWarn(@"%@ invalid phone number; not e164: %@.", self.logTag, self.phoneNumber);
|
||||
if (self.phoneNumber.ows_stripped.length < 1) {
|
||||
DDLogWarn(@"%@ invalid phone number: %@.", self.logTag, self.phoneNumber);
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
|
@ -958,6 +960,76 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
|||
return result;
|
||||
}
|
||||
|
||||
//#pragma mark - Old Contacts
|
||||
//
|
||||
//+ (nullable OWSContact *)contactForOldContact:(Contact *)oldContact
|
||||
//{
|
||||
// OWSAssert(oldContact);
|
||||
// OWSAssert(oldContact.cnContact);
|
||||
//
|
||||
//// DDLogDebug(@"%@ in %s with contact: %@", self.logTag, __PRETTY_FUNCTION__, contact);
|
||||
//
|
||||
// return [self contactForSystemContact:oldContact.cnContact];
|
||||
//
|
||||
//// OWSContact *newContact = [OWSContact new];
|
||||
////
|
||||
//// newContact.givenName = oldContact.firstName;
|
||||
//// newContact.familyName = oldContact.lastName;
|
||||
////
|
||||
//// NSMutableArray<
|
||||
//// OWSContactPhoneNumber *> *newPhoneNumbers = [NSMutableArray new];
|
||||
//// for (NSString *oldPhoneNumber in oldContact.userTextPhoneNumbers) {
|
||||
//// OWSContactPhoneNumber *newPhoneNumber = [OWSContactPhoneNumber new];
|
||||
//// newPhoneNumber.phoneNumber = oldPhoneNumber;
|
||||
//// newPhoneNumber.phoneType = OWSContactPhoneType_Custom;
|
||||
//// [newPhoneNumbers addObject:newPhoneNumber];
|
||||
//// }
|
||||
//// newContact.phoneNumbers = newPhoneNumbers;
|
||||
////
|
||||
//// NSMutableArray<
|
||||
//// OWSContactEmail *> *newEmails = [NSMutableArray new];
|
||||
//// for (NSString *oldEmail in oldContact.emails) {
|
||||
//// OWSContactEmail *newEmail = [OWSContactEmail new];
|
||||
//// newEmail.email = oldEmail;
|
||||
//// newEmail.emailType = OWSContactEmailType_Custom;
|
||||
//// [newEmails addObject:newEmail];
|
||||
//// }
|
||||
//// newContact.emails = newEmails;
|
||||
////
|
||||
//// @interface Contact : MTLModel
|
||||
////
|
||||
//// @property (nullable, readonly, nonatomic) NSString *firstName;
|
||||
//// @property (nullable, readonly, nonatomic) NSString *lastName;
|
||||
//// @property (readonly, nonatomic) NSString *fullName;
|
||||
//// @property (readonly, nonatomic) NSString *comparableNameFirstLast;
|
||||
//// @property (readonly, nonatomic) NSString *comparableNameLastFirst;
|
||||
//// @property (readonly, nonatomic) NSArray<PhoneNumber *> *parsedPhoneNumbers;
|
||||
//// @property (readonly, nonatomic) NSArray<NSString *> *userTextPhoneNumbers;
|
||||
//// @property (readonly, nonatomic) NSArray<NSString *> *emails;
|
||||
//// @property (readonly, nonatomic) NSString *uniqueId;
|
||||
//// @property (nonatomic, readonly) BOOL isSignalContact;
|
||||
////#if TARGET_OS_IOS
|
||||
//// @property (nullable, readonly, nonatomic) UIImage *image;
|
||||
//// @property (nullable, nonatomic, readonly) CNContact *cnContact;
|
||||
////#endif // TARGET_OS_IOS
|
||||
////
|
||||
//// - (NSArray<SignalRecipient *> *)signalRecipientsWithTransaction:(YapDatabaseReadTransaction *)transaction;
|
||||
//// // TODO: Remove this method.
|
||||
//// - (NSArray<NSString *> *)textSecureIdentifiers;
|
||||
////
|
||||
////#if TARGET_OS_IOS
|
||||
////
|
||||
//// - (instancetype)initWithSystemContact:(CNContact *)contact NS_AVAILABLE_IOS(9_0);
|
||||
////
|
||||
//// - (NSString *)nameForPhoneNumber:(NSString *)recipientId;
|
||||
////
|
||||
////#endif // TARGET_OS_IOS
|
||||
////
|
||||
//// + (NSComparator)comparatorSortingNamesByFirstThenLast:(BOOL)firstNameOrdering;
|
||||
////
|
||||
//// @end
|
||||
//}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
Loading…
Reference in a new issue