From e2b1cbb154d2ff67640db20c8bcfd8543276ac59 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Mon, 15 May 2017 13:56:59 -0400 Subject: [PATCH] Don't show "no signal accounts" until contact intersection has completed at least once // FREEBIE --- .../MessageComposeTableViewController.m | 14 ++++++++++---- Signal/src/contact/OWSContactsManager.h | 3 +++ Signal/src/contact/OWSContactsManager.m | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Signal/src/ViewControllers/MessageComposeTableViewController.m b/Signal/src/ViewControllers/MessageComposeTableViewController.m index af8c8add4..d1bea0a66 100644 --- a/Signal/src/ViewControllers/MessageComposeTableViewController.m +++ b/Signal/src/ViewControllers/MessageComposeTableViewController.m @@ -396,7 +396,8 @@ NS_ASSUME_NONNULL_BEGIN if (!hasSearchText && helper.signalAccounts.count < 1) { // No Contacts - if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized) { + if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized + && self.contactsViewHelper.contactsManager.hasFetchedSignalAccountsAtLeastOnce) { [section addItem:[OWSTableItem itemWithCustomCellBlock:^{ UITableViewCell *cell = [UITableViewCell new]; cell.textLabel.text = NSLocalizedString( @@ -462,10 +463,15 @@ NS_ASSUME_NONNULL_BEGIN - (void)showContactAppropriateViews { if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized) { - BOOL hasNoContacts = self.contactsViewHelper.signalAccounts.count < 1; - self.isNoContactsModeActive = (hasNoContacts && ![[Environment preferences] hasDeclinedNoContactsView]); - [self showContactsPermissionReminder:NO]; + if (self.contactsViewHelper.contactsManager.hasFetchedSignalAccountsAtLeastOnce + && self.contactsViewHelper.signalAccounts.count < 1 + && ![[Environment preferences] hasDeclinedNoContactsView]) { + self.isNoContactsModeActive = YES; + } else { + self.isNoContactsModeActive = NO; + } + [self showContactsPermissionReminder:NO]; [self showSearchBar:YES]; } else { // don't show "no signal contacts", show "no contact access" diff --git a/Signal/src/contact/OWSContactsManager.h b/Signal/src/contact/OWSContactsManager.h index 5b6ba75f2..d553508b0 100644 --- a/Signal/src/contact/OWSContactsManager.h +++ b/Signal/src/contact/OWSContactsManager.h @@ -27,6 +27,9 @@ extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification; @property (atomic, readonly) NSDictionary *signalAccountMap; @property (atomic, readonly) NSArray *signalAccounts; +// Useful to differentiate between having no signal accounts vs. haven't checked yet +@property (atomic, readonly) BOOL hasFetchedSignalAccountsAtLeastOnce; + - (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId; - (Contact *)getOrBuildContactForPhoneIdentifier:(NSString *)identifier; diff --git a/Signal/src/contact/OWSContactsManager.m b/Signal/src/contact/OWSContactsManager.m index 7889595f6..a52b142c0 100644 --- a/Signal/src/contact/OWSContactsManager.m +++ b/Signal/src/contact/OWSContactsManager.m @@ -25,6 +25,7 @@ NSString *const OWSContactsManagerSignalAccountsDidChangeNotification = @property (atomic) NSArray *allContacts; @property (atomic) NSDictionary *allContactsMap; @property (atomic) NSArray *signalAccounts; +@property (atomic) BOOL hasFetchedSignalAccountsAtLeastOnce; @property (atomic) NSDictionary *signalAccountMap; @property (nonatomic, readonly) SystemContactsFetcher *systemContactsFetcher; @end @@ -183,7 +184,7 @@ NSString *const OWSContactsManagerSignalAccountsDidChangeNotification = dispatch_async(dispatch_get_main_queue(), ^{ self.signalAccountMap = [signalAccountMap copy]; self.signalAccounts = [signalAccounts copy]; - + self.hasFetchedSignalAccountsAtLeastOnce = YES; [[NSNotificationCenter defaultCenter] postNotificationName:OWSContactsManagerSignalAccountsDidChangeNotification object:nil];