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 */; };
|
34330A5C1E787A9800DF2FB9 /* dripicons-v2.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5B1E787A9800DF2FB9 /* dripicons-v2.ttf */; };
|
||||||
34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; };
|
34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; };
|
||||||
34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34330AA21E79686200DF2FB9 /* OWSProgressView.m */; };
|
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 */; };
|
34386A51207D0C01009F5D9C /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A4D207D0C01009F5D9C /* HomeViewController.m */; };
|
||||||
34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A50207D0C01009F5D9C /* HomeViewCell.m */; };
|
34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A50207D0C01009F5D9C /* HomeViewCell.m */; };
|
||||||
34386A54207D271D009F5D9C /* NeverClearView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34386A53207D271C009F5D9C /* NeverClearView.swift */; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
34386A4F207D0C01009F5D9C /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
|
||||||
|
@ -1551,12 +1553,12 @@
|
||||||
346129A11FD1F09100532771 /* contacts */ = {
|
346129A11FD1F09100532771 /* contacts */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
|
||||||
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
|
||||||
346129A21FD1F09100532771 /* OWSContactsManager.h */,
|
346129A21FD1F09100532771 /* OWSContactsManager.h */,
|
||||||
346129A31FD1F09100532771 /* OWSContactsManager.m */,
|
346129A31FD1F09100532771 /* OWSContactsManager.m */,
|
||||||
34612A041FD7238500532771 /* OWSContactsSyncing.h */,
|
34612A041FD7238500532771 /* OWSContactsSyncing.h */,
|
||||||
34612A051FD7238500532771 /* OWSContactsSyncing.m */,
|
34612A051FD7238500532771 /* OWSContactsSyncing.m */,
|
||||||
|
3400C7941EAF99F4008A8584 /* SelectThreadViewController.h */,
|
||||||
|
3400C7951EAF99F4008A8584 /* SelectThreadViewController.m */,
|
||||||
346129AE1FD1F5D900532771 /* SystemContactsFetcher.swift */,
|
346129AE1FD1F5D900532771 /* SystemContactsFetcher.swift */,
|
||||||
);
|
);
|
||||||
path = contacts;
|
path = contacts;
|
||||||
|
@ -1596,6 +1598,7 @@
|
||||||
346129DB1FD5C02900532771 /* viewControllers */ = {
|
346129DB1FD5C02900532771 /* viewControllers */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
34382265209A4E3F0094FEB7 /* ApproveContactShareViewController.swift */,
|
||||||
344F2498200FD03200CFB4F4 /* AttachmentApprovalViewController.swift */,
|
344F2498200FD03200CFB4F4 /* AttachmentApprovalViewController.swift */,
|
||||||
344F248220069E9B00CFB4F4 /* CountryCodeViewController.h */,
|
344F248220069E9B00CFB4F4 /* CountryCodeViewController.h */,
|
||||||
344F248320069E9B00CFB4F4 /* CountryCodeViewController.m */,
|
344F248320069E9B00CFB4F4 /* CountryCodeViewController.m */,
|
||||||
|
@ -3093,6 +3096,7 @@
|
||||||
451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */,
|
451F8A3F1FD71455005CB9DA /* OWSTableViewController.m in Sources */,
|
||||||
451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */,
|
451F8A351FD710DE005CB9DA /* Searcher.swift in Sources */,
|
||||||
451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */,
|
451F8A481FD715BA005CB9DA /* OWSContactAvatarBuilder.m in Sources */,
|
||||||
|
34382266209A4E400094FEB7 /* ApproveContactShareViewController.swift in Sources */,
|
||||||
4503F1C3204711D300CEE724 /* OWS107LegacySounds.m in Sources */,
|
4503F1C3204711D300CEE724 /* OWS107LegacySounds.m in Sources */,
|
||||||
346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */,
|
346129A61FD1F09100532771 /* OWSContactsManager.m in Sources */,
|
||||||
4598198F204E2F28009414F2 /* OWS108CallLoggingPreference.m in Sources */,
|
4598198F204E2F28009414F2 /* OWS108CallLoggingPreference.m in Sources */,
|
||||||
|
|
|
@ -60,7 +60,8 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView
|
||||||
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
|
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
|
||||||
CNContactThumbnailImageDataKey as CNKeyDescriptor,
|
CNContactThumbnailImageDataKey as CNKeyDescriptor,
|
||||||
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
||||||
CNContactEmailAddressesKey as CNKeyDescriptor
|
CNContactEmailAddressesKey as CNKeyDescriptor,
|
||||||
|
CNContactPostalAddressesKey as CNKeyDescriptor
|
||||||
]
|
]
|
||||||
|
|
||||||
// MARK: - Lifecycle Methods
|
// MARK: - Lifecycle Methods
|
||||||
|
|
|
@ -117,6 +117,7 @@ typedef enum : NSUInteger {
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
@interface ConversationViewController () <AttachmentApprovalViewControllerDelegate,
|
@interface ConversationViewController () <AttachmentApprovalViewControllerDelegate,
|
||||||
|
ApproveContactShareViewControllerDelegate,
|
||||||
AVAudioPlayerDelegate,
|
AVAudioPlayerDelegate,
|
||||||
CNContactViewControllerDelegate,
|
CNContactViewControllerDelegate,
|
||||||
ContactEditingDelegate,
|
ContactEditingDelegate,
|
||||||
|
@ -337,8 +338,26 @@ typedef enum : NSUInteger {
|
||||||
OWSAssertIsOnMainThread();
|
OWSAssertIsOnMainThread();
|
||||||
|
|
||||||
[self ensureDynamicInteractions];
|
[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
|
- (void)otherUsersProfileDidChange:(NSNotification *)notification
|
||||||
{
|
{
|
||||||
OWSAssertIsOnMainThread();
|
OWSAssertIsOnMainThread();
|
||||||
|
@ -489,6 +508,11 @@ typedef enum : NSUInteger {
|
||||||
|
|
||||||
[self addNotificationListeners];
|
[self addNotificationListeners];
|
||||||
[self loadDraftInCompose];
|
[self loadDraftInCompose];
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[self showPhonyContactShareApproval];
|
||||||
|
// [self tryToShowContactShareUI];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadView
|
- (void)loadView
|
||||||
|
@ -2522,6 +2546,7 @@ typedef enum : NSUInteger {
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Attachment Picking: Contacts
|
#pragma mark - Attachment Picking: Contacts
|
||||||
|
|
||||||
- (void)chooseContactForSending
|
- (void)chooseContactForSending
|
||||||
{
|
{
|
||||||
ContactsPicker *contactsPicker =
|
ContactsPicker *contactsPicker =
|
||||||
|
@ -4903,6 +4928,79 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
||||||
|
|
||||||
#pragma mark - ContactsPickerDelegate
|
#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
|
- (void)contactsPickerDidCancel:(ContactsPicker *)contactsPicker
|
||||||
{
|
{
|
||||||
DDLogDebug(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__);
|
DDLogDebug(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||||
|
@ -4915,10 +5013,32 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
||||||
|
|
||||||
- (void)contactsPicker:(ContactsPicker *)contactsPicker didSelectContact:(Contact *)contact
|
- (void)contactsPicker:(ContactsPicker *)contactsPicker didSelectContact:(Contact *)contact
|
||||||
{
|
{
|
||||||
|
OWSAssert(contact);
|
||||||
|
OWSAssert(contact.cnContact);
|
||||||
|
|
||||||
DDLogDebug(@"%@ in %s with contact: %@", self.logTag, __PRETTY_FUNCTION__, contact);
|
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.
|
// 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
|
- (void)contactsPicker:(ContactsPicker *)contactsPicker didSelectMultipleContacts:(NSArray<Contact *> *)contacts
|
||||||
|
@ -4932,6 +5052,17 @@ interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransiti
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - ApproveContactShareViewControllerDelegate
|
||||||
|
|
||||||
|
- (void)approveContactShare:(ApproveContactShareViewController *)approveContactShare
|
||||||
|
didApproveContactShare:(OWSContact *)contactShare
|
||||||
|
{
|
||||||
|
DDLogInfo(@"%@ in %s", self.logTag, __PRETTY_FUNCTION__);
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
|
@ -421,6 +421,27 @@
|
||||||
/* Label for a contact's email address. */
|
/* Label for a contact's email address. */
|
||||||
"CONTACT_EMAIL" = "Email";
|
"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. */
|
/* Label for a contact's phone number. */
|
||||||
"CONTACT_PHONE" = "Phone";
|
"CONTACT_PHONE" = "Phone";
|
||||||
|
|
||||||
|
@ -433,6 +454,9 @@
|
||||||
/* navbar title for contact picker when sharing a contact */
|
/* navbar title for contact picker when sharing a contact */
|
||||||
"CONTACT_PICKER_TITLE" = "Select 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. */
|
/* Indicates that a contact has no name. */
|
||||||
"CONTACT_WITHOUT_NAME" = "Unnamed Contact";
|
"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();
|
OWSAssertIsOnMainThread();
|
||||||
|
|
||||||
if ([signalAccounts isEqual:self.signalAccounts]) {
|
// if ([signalAccounts isEqual:self.signalAccounts]) {
|
||||||
DDLogDebug(@"%@ SignalAccounts unchanged.", self.logTag);
|
// DDLogDebug(@"%@ SignalAccounts unchanged.", self.logTag);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
NSMutableDictionary<NSString *, SignalAccount *> *signalAccountMap = [NSMutableDictionary new];
|
NSMutableDictionary<NSString *, SignalAccount *> *signalAccountMap = [NSMutableDictionary new];
|
||||||
for (SignalAccount *signalAccount in signalAccounts) {
|
for (SignalAccount *signalAccount in signalAccounts) {
|
||||||
|
|
|
@ -34,6 +34,7 @@ class ContactsFrameworkContactStoreAdaptee: ContactStoreAdaptee {
|
||||||
CNContactThumbnailImageDataKey as CNKeyDescriptor, // TODO full image instead of thumbnail?
|
CNContactThumbnailImageDataKey as CNKeyDescriptor, // TODO full image instead of thumbnail?
|
||||||
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
CNContactPhoneNumbersKey as CNKeyDescriptor,
|
||||||
CNContactEmailAddressesKey as CNKeyDescriptor,
|
CNContactEmailAddressesKey as CNKeyDescriptor,
|
||||||
|
CNContactPostalAddressesKey as CNKeyDescriptor,
|
||||||
CNContactViewController.descriptorForRequiredKeys()
|
CNContactViewController.descriptorForRequiredKeys()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,10 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||||
{
|
{
|
||||||
OWSAssert(phoneNumber);
|
OWSAssert(phoneNumber);
|
||||||
|
|
||||||
|
if (![phoneNumber hasPrefix:COUNTRY_CODE_PREFIX]) {
|
||||||
|
return phoneNumber;
|
||||||
|
}
|
||||||
|
|
||||||
PhoneNumber *_Nullable parsedPhoneNumber = [self tryParsePhoneNumberFromE164:phoneNumber];
|
PhoneNumber *_Nullable parsedPhoneNumber = [self tryParsePhoneNumberFromE164:phoneNumber];
|
||||||
if (!parsedPhoneNumber) {
|
if (!parsedPhoneNumber) {
|
||||||
DDLogWarn(@"%@ could not parse phone number.", self.logTag);
|
DDLogWarn(@"%@ could not parse phone number.", self.logTag);
|
||||||
|
@ -356,6 +360,9 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||||
|
|
||||||
+ (PhoneNumber *)tryParsePhoneNumberFromE164:(NSString *)text {
|
+ (PhoneNumber *)tryParsePhoneNumberFromE164:(NSString *)text {
|
||||||
OWSAssert(text != nil);
|
OWSAssert(text != nil);
|
||||||
|
if (![text hasPrefix:COUNTRY_CODE_PREFIX]) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
return [self phoneNumberFromE164:text];
|
return [self phoneNumberFromE164:text];
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,10 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value);
|
||||||
+ (nullable OWSSignalServiceProtosDataMessageContact *)protoForContact:(OWSContact *)contact;
|
+ (nullable OWSSignalServiceProtosDataMessageContact *)protoForContact:(OWSContact *)contact;
|
||||||
+ (OWSContact *_Nullable)contactForDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage;
|
+ (OWSContact *_Nullable)contactForDataMessage:(OWSSignalServiceProtosDataMessage *)dataMessage;
|
||||||
|
|
||||||
|
//#pragma mark - Old Contacts
|
||||||
|
//
|
||||||
|
//+ (nullable OWSContact *)contactForOldContact:(Contact *)oldContact
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#import "OWSContact+Private.h"
|
#import "OWSContact+Private.h"
|
||||||
#import "OWSSignalServiceProtos.pb.h"
|
#import "OWSSignalServiceProtos.pb.h"
|
||||||
#import "PhoneNumber.h"
|
#import "PhoneNumber.h"
|
||||||
|
|
||||||
|
//#import "Contact.h"
|
||||||
#import "TSAttachment.h"
|
#import "TSAttachment.h"
|
||||||
#import <YapDatabase/YapDatabaseTransaction.h>
|
#import <YapDatabase/YapDatabaseTransaction.h>
|
||||||
|
|
||||||
|
@ -45,8 +47,8 @@ NSString *NSStringForContactPhoneType(OWSContactPhoneType value)
|
||||||
|
|
||||||
- (BOOL)ows_isValid
|
- (BOOL)ows_isValid
|
||||||
{
|
{
|
||||||
if (![PhoneNumber tryParsePhoneNumberFromE164:self.phoneNumber]) {
|
if (self.phoneNumber.ows_stripped.length < 1) {
|
||||||
DDLogWarn(@"%@ invalid phone number; not e164: %@.", self.logTag, self.phoneNumber);
|
DDLogWarn(@"%@ invalid phone number: %@.", self.logTag, self.phoneNumber);
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
return YES;
|
return YES;
|
||||||
|
@ -958,6 +960,76 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
return result;
|
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
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|
Loading…
Reference in a new issue