// // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // NS_ASSUME_NONNULL_BEGIN @class Contact; @class ContactsViewHelper; @class SignalAccount; @class TSThread; @protocol CNContactViewControllerDelegate; @protocol ContactsViewHelperDelegate - (void)contactsViewHelperDidUpdateContacts; @optional - (BOOL)shouldHideLocalNumber; @end @protocol ContactEditingDelegate - (void)didFinishEditingContact; @end #pragma mark - @class CNContact; @class OWSBlockingManager; @class OWSContactsManager; @interface ContactsViewHelper : NSObject @property (nonatomic, readonly, weak) id delegate; @property (nonatomic, readonly) OWSContactsManager *contactsManager; @property (nonatomic, readonly) OWSBlockingManager *blockingManager; @property (nonatomic, readonly) NSDictionary *signalAccountMap; @property (nonatomic, readonly) NSArray *signalAccounts; // Useful to differentiate between having no signal accounts vs. haven't checked yet @property (nonatomic, readonly) BOOL hasUpdatedContactsAtLeastOnce; // Suitable when the user tries to perform an action which is not possible due to the user having // previously denied contact access. - (void)presentMissingContactAccessAlertControllerFromViewController:(UIViewController *)viewController; - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithDelegate:(id)delegate; - (nullable SignalAccount *)fetchSignalAccountForRecipientId:(NSString *)recipientId; - (SignalAccount *)fetchOrBuildSignalAccountForRecipientId:(NSString *)recipientId; // This method is faster than OWSBlockingManager but // is only safe to be called on the main thread. - (BOOL)isRecipientIdBlocked:(NSString *)recipientId; // This method is faster than OWSBlockingManager but // is only safe to be called on the main thread. - (BOOL)isThreadBlocked:(TSThread *)thread; // NOTE: This method uses a transaction. - (NSString *)localNumber; - (NSArray *)signalAccountsMatchingSearchString:(NSString *)searchText; - (void)warmNonSignalContactsCacheAsync; - (NSArray *)nonSignalContactsMatchingSearchString:(NSString *)searchText; - (void)presentContactViewControllerForRecipientId:(NSString *)recipientId fromViewController:(UIViewController *)fromViewController editImmediately:(BOOL)shouldEditImmediately; // This method can be used to edit existing contacts. - (void)presentContactViewControllerForRecipientId:(NSString *)recipientId fromViewController:(UIViewController *)fromViewController editImmediately:(BOOL)shouldEditImmediately addToExistingCnContact:(CNContact *_Nullable)cnContact; + (void)presentMissingContactAccessAlertControllerFromViewController:(UIViewController *)viewController; @end NS_ASSUME_NONNULL_END