Fix flicker of "no contacts" screen on message compose

// FREEBIE
pull/1/head
Michael Kirk 8 years ago
parent 74a0e285a6
commit c31fd0dfcc

@ -40,6 +40,9 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) NSDictionary<NSString *, SignalAccount *> *signalAccountMap; @property (nonatomic, readonly) NSDictionary<NSString *, SignalAccount *> *signalAccountMap;
@property (nonatomic, readonly) NSArray<SignalAccount *> *signalAccounts; @property (nonatomic, readonly) NSArray<SignalAccount *> *signalAccounts;
// Useful to differentiate between having no signal accounts vs. haven't checked yet
@property (nonatomic, readonly) BOOL hasUpdatedContactsAtLeastOnce;
@property (nonatomic, readonly) NSArray<NSString *> *blockedPhoneNumbers; @property (nonatomic, readonly) NSArray<NSString *> *blockedPhoneNumbers;
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;

@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic) NSArray<NSString *> *blockedPhoneNumbers; @property (nonatomic) NSArray<NSString *> *blockedPhoneNumbers;
@property (nonatomic) BOOL shouldNotifyDelegateOfUpdatedContacts; @property (nonatomic) BOOL shouldNotifyDelegateOfUpdatedContacts;
@property (nonatomic) BOOL hasUpdatedContactsAtLeastOnce;
@end @end
@ -164,6 +165,7 @@ NS_ASSUME_NONNULL_BEGIN
// Don't fire delegate "change" events during initialization. // Don't fire delegate "change" events during initialization.
if (!self.shouldNotifyDelegateOfUpdatedContacts) { if (!self.shouldNotifyDelegateOfUpdatedContacts) {
[self.delegate contactsViewHelperDidUpdateContacts]; [self.delegate contactsViewHelperDidUpdateContacts];
self.hasUpdatedContactsAtLeastOnce = YES;
} }
} }

@ -397,7 +397,7 @@ NS_ASSUME_NONNULL_BEGIN
// No Contacts // No Contacts
if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized
&& self.contactsViewHelper.contactsManager.hasFetchedSignalAccountsAtLeastOnce) { && self.contactsViewHelper.hasUpdatedContactsAtLeastOnce) {
[section addItem:[OWSTableItem itemWithCustomCellBlock:^{ [section addItem:[OWSTableItem itemWithCustomCellBlock:^{
UITableViewCell *cell = [UITableViewCell new]; UITableViewCell *cell = [UITableViewCell new];
cell.textLabel.text = NSLocalizedString( cell.textLabel.text = NSLocalizedString(
@ -463,7 +463,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)showContactAppropriateViews - (void)showContactAppropriateViews
{ {
if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized) { if (self.contactsViewHelper.contactsManager.isSystemContactsAuthorized) {
if (self.contactsViewHelper.contactsManager.hasFetchedSignalAccountsAtLeastOnce if (self.contactsViewHelper.hasUpdatedContactsAtLeastOnce
&& self.contactsViewHelper.signalAccounts.count < 1 && self.contactsViewHelper.signalAccounts.count < 1
&& ![[Environment preferences] hasDeclinedNoContactsView]) { && ![[Environment preferences] hasDeclinedNoContactsView]) {
self.isNoContactsModeActive = YES; self.isNoContactsModeActive = YES;

@ -27,9 +27,6 @@ extern NSString *const OWSContactsManagerSignalAccountsDidChangeNotification;
@property (atomic, readonly) NSDictionary<NSString *, SignalAccount *> *signalAccountMap; @property (atomic, readonly) NSDictionary<NSString *, SignalAccount *> *signalAccountMap;
@property (atomic, readonly) NSArray<SignalAccount *> *signalAccounts; @property (atomic, readonly) NSArray<SignalAccount *> *signalAccounts;
// Useful to differentiate between having no signal accounts vs. haven't checked yet
@property (atomic, readonly) BOOL hasFetchedSignalAccountsAtLeastOnce;
- (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId; - (nullable SignalAccount *)signalAccountForRecipientId:(NSString *)recipientId;
- (Contact *)getOrBuildContactForPhoneIdentifier:(NSString *)identifier; - (Contact *)getOrBuildContactForPhoneIdentifier:(NSString *)identifier;

@ -25,7 +25,6 @@ NSString *const OWSContactsManagerSignalAccountsDidChangeNotification =
@property (atomic) NSArray<Contact *> *allContacts; @property (atomic) NSArray<Contact *> *allContacts;
@property (atomic) NSDictionary<NSString *, Contact *> *allContactsMap; @property (atomic) NSDictionary<NSString *, Contact *> *allContactsMap;
@property (atomic) NSArray<SignalAccount *> *signalAccounts; @property (atomic) NSArray<SignalAccount *> *signalAccounts;
@property (atomic) BOOL hasFetchedSignalAccountsAtLeastOnce;
@property (atomic) NSDictionary<NSString *, SignalAccount *> *signalAccountMap; @property (atomic) NSDictionary<NSString *, SignalAccount *> *signalAccountMap;
@property (nonatomic, readonly) SystemContactsFetcher *systemContactsFetcher; @property (nonatomic, readonly) SystemContactsFetcher *systemContactsFetcher;
@end @end
@ -184,7 +183,6 @@ NSString *const OWSContactsManagerSignalAccountsDidChangeNotification =
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
self.signalAccountMap = [signalAccountMap copy]; self.signalAccountMap = [signalAccountMap copy];
self.signalAccounts = [signalAccounts copy]; self.signalAccounts = [signalAccounts copy];
self.hasFetchedSignalAccountsAtLeastOnce = YES;
[[NSNotificationCenter defaultCenter] [[NSNotificationCenter defaultCenter]
postNotificationName:OWSContactsManagerSignalAccountsDidChangeNotification postNotificationName:OWSContactsManagerSignalAccountsDidChangeNotification
object:nil]; object:nil];

Loading…
Cancel
Save