|
|
|
@ -65,7 +65,7 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
_contactsManager = [Environment getCurrent].contactsManager;
|
|
|
|
|
self.contacts = [self filteredContacts];
|
|
|
|
|
|
|
|
|
|
self.title = NSLocalizedString(@"SETTINGS_ADD_TO_BLOCK_LIST_TITLE", @"");
|
|
|
|
|
self.title = NSLocalizedString(@"SETTINGS_ADD_TO_BLOCK_LIST_TITLE", @"Title for the 'add to block list' view.");
|
|
|
|
|
|
|
|
|
|
[self createViews];
|
|
|
|
|
|
|
|
|
@ -98,8 +98,15 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (void)createViews {
|
|
|
|
|
|
|
|
|
|
// Block Phone Number Title Row
|
|
|
|
|
UIView *blockPhoneNumberTitleRow =
|
|
|
|
|
[self createTitleRowWithText:NSLocalizedString(@"SETTINGS_ADD_TO_BLOCK_LIST_BLOCK_PHONE_NUMBER_TITLE",
|
|
|
|
|
@"Title for the 'block phone number' section of the 'add to block list' view.")
|
|
|
|
|
previousRow:nil];
|
|
|
|
|
|
|
|
|
|
// Country Row
|
|
|
|
|
UIView *countryRow = [self createRowWithHeight:60 previousRow:nil];
|
|
|
|
|
UIView *countryRow = [self createRowWithHeight:60 previousRow:blockPhoneNumberTitleRow];
|
|
|
|
|
|
|
|
|
|
_countryNameButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
|
|
|
_countryNameButton.titleLabel.font = [UIFont ows_mediumFontWithSize:16.f];
|
|
|
|
@ -186,6 +193,15 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
[_blockButton autoSetDimension:ALDimensionWidth toSize:160];
|
|
|
|
|
[_blockButton autoSetDimension:ALDimensionHeight toSize:40];
|
|
|
|
|
|
|
|
|
|
// Separator Row
|
|
|
|
|
UIView *separatorRow = [self createRowWithHeight:10 previousRow:blockButtonRow];
|
|
|
|
|
|
|
|
|
|
// Block Contact Title Row
|
|
|
|
|
UIView *blockContactTitleRow =
|
|
|
|
|
[self createTitleRowWithText:NSLocalizedString(@"SETTINGS_ADD_TO_BLOCK_LIST_BLOCK_CONTACT_TITLE",
|
|
|
|
|
@"Title for the 'block contact' section of the 'add to block list' view.")
|
|
|
|
|
previousRow:separatorRow];
|
|
|
|
|
|
|
|
|
|
_contactsTableView = [UITableView new];
|
|
|
|
|
_contactsTableView.dataSource = self;
|
|
|
|
|
_contactsTableView.delegate = self;
|
|
|
|
@ -194,12 +210,29 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
_contactsTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
|
|
|
|
|
[self.view addSubview:_contactsTableView];
|
|
|
|
|
[_contactsTableView autoPinWidthToSuperview];
|
|
|
|
|
[_contactsTableView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:blockButtonRow withOffset:30];
|
|
|
|
|
[_contactsTableView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:blockContactTitleRow withOffset:10];
|
|
|
|
|
[_contactsTableView autoPinToBottomLayoutGuideOfViewController:self withInset:0];
|
|
|
|
|
|
|
|
|
|
[self updateBlockButtonEnabling];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (UIView *)createTitleRowWithText:(NSString *)text previousRow:(nullable UIView *)previousRow
|
|
|
|
|
{
|
|
|
|
|
UIView *row = [self createRowWithHeight:40 previousRow:previousRow];
|
|
|
|
|
|
|
|
|
|
UILabel *label = [UILabel new];
|
|
|
|
|
label.text = text;
|
|
|
|
|
label.font = [UIFont ows_boldFontWithSize:20.f];
|
|
|
|
|
label.textColor = [UIColor colorWithWhite:0.2f alpha:1.f];
|
|
|
|
|
label.textAlignment = NSTextAlignmentCenter;
|
|
|
|
|
[row addSubview:label];
|
|
|
|
|
[label autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:20.f];
|
|
|
|
|
[label autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:20.f];
|
|
|
|
|
[label autoPinEdgeToSuperviewEdge:ALEdgeBottom];
|
|
|
|
|
|
|
|
|
|
return row;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (UIView *)createRowWithHeight:(CGFloat)height previousRow:(nullable UIView *)previousRow
|
|
|
|
|
{
|
|
|
|
|
UIView *row = [UIView new];
|
|
|
|
@ -341,11 +374,11 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
[self.contactsTableView reloadData];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL)isContactBlockedOrHidden:(Contact *)contact
|
|
|
|
|
- (BOOL)isContactBlocked:(Contact *)contact
|
|
|
|
|
{
|
|
|
|
|
if (contact.parsedPhoneNumbers.count < 1) {
|
|
|
|
|
// Hide contacts without any valid phone numbers.
|
|
|
|
|
return YES;
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) {
|
|
|
|
@ -357,6 +390,20 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL)isContactHidden:(Contact *)contact
|
|
|
|
|
{
|
|
|
|
|
if (contact.parsedPhoneNumbers.count < 1) {
|
|
|
|
|
// Hide contacts without any valid phone numbers.
|
|
|
|
|
return YES;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ([self isCurrentUserContact:contact]) {
|
|
|
|
|
return YES;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (BOOL)isCurrentUserContact:(Contact *)contact
|
|
|
|
|
{
|
|
|
|
|
for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) {
|
|
|
|
@ -372,7 +419,7 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
{
|
|
|
|
|
NSMutableArray<Contact *> *result = [NSMutableArray new];
|
|
|
|
|
for (Contact *contact in self.contactsManager.signalContacts) {
|
|
|
|
|
if (![self isContactBlockedOrHidden:contact] && ![self isCurrentUserContact:contact]) {
|
|
|
|
|
if (![self isContactHidden:contact]) {
|
|
|
|
|
[result addObject:contact];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -418,6 +465,11 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
|
|
|
|
|
#pragma mark - UITableViewDataSource
|
|
|
|
|
|
|
|
|
|
- (BOOL)hasNoContacts
|
|
|
|
|
{
|
|
|
|
|
return self.contacts.count == 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
@ -425,17 +477,31 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
|
|
|
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
|
|
|
{
|
|
|
|
|
if (self.hasNoContacts) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return (NSInteger)self.contacts.count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
|
|
{
|
|
|
|
|
if (self.hasNoContacts) {
|
|
|
|
|
UITableViewCell *cell = [UITableViewCell new];
|
|
|
|
|
cell.textLabel.text = NSLocalizedString(
|
|
|
|
|
@"SETTINGS_BLOCK_LIST_NO_CONTACTS", @"A label that indicates the user has no Signal contacts.");
|
|
|
|
|
cell.textLabel.font = [UIFont ows_regularFontWithSize:18.f];
|
|
|
|
|
cell.textLabel.textColor = [UIColor colorWithWhite:0.5f alpha:1.f];
|
|
|
|
|
cell.textLabel.textAlignment = NSTextAlignmentCenter;
|
|
|
|
|
return cell;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Contact *contact = self.contacts[(NSUInteger)indexPath.item];
|
|
|
|
|
|
|
|
|
|
ContactTableViewCell *cell = [_contactsTableView cellForRowAtIndexPath:indexPath];
|
|
|
|
|
if (!cell) {
|
|
|
|
|
cell = [ContactTableViewCell new];
|
|
|
|
|
}
|
|
|
|
|
cell.isBlocked = [self isContactBlocked:contact];
|
|
|
|
|
[cell configureWithContact:contact contactsManager:self.contactsManager];
|
|
|
|
|
return cell;
|
|
|
|
|
}
|
|
|
|
@ -457,8 +523,31 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI
|
|
|
|
|
{
|
|
|
|
|
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
|
|
|
|
|
|
|
|
|
if (self.hasNoContacts) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__weak AddToBlockListViewController *weakSelf = self;
|
|
|
|
|
Contact *contact = self.contacts[(NSUInteger)indexPath.item];
|
|
|
|
|
if ([self isContactBlocked:contact]) {
|
|
|
|
|
NSString *displayName = [_contactsManager displayNameForContact:contact];
|
|
|
|
|
UIAlertController *controller = [UIAlertController
|
|
|
|
|
alertControllerWithTitle:NSLocalizedString(@"BLOCK_LIST_VIEW_ALREADY_BLOCKED_ALERT_TITLE",
|
|
|
|
|
@"A title of the alert if user tries to block a user who is already blocked.")
|
|
|
|
|
message:[NSString
|
|
|
|
|
stringWithFormat:NSLocalizedString(
|
|
|
|
|
@"BLOCK_LIST_VIEW_ALREADY_BLOCKED_ALERT_MESSAGE_FORMAT",
|
|
|
|
|
@"A format for the message of the alert if user tries to "
|
|
|
|
|
@"block a user who is already blocked. Embeds {{the "
|
|
|
|
|
@"blocked user's name or phone number}}."),
|
|
|
|
|
displayName]
|
|
|
|
|
preferredStyle:UIAlertControllerStyleAlert];
|
|
|
|
|
[controller addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil)
|
|
|
|
|
style:UIAlertActionStyleDefault
|
|
|
|
|
handler:nil]];
|
|
|
|
|
[self presentViewController:controller animated:YES completion:nil];
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
[BlockListUIUtils showBlockContactActionSheet:contact
|
|
|
|
|
fromViewController:self
|
|
|
|
|
blockingManager:_blockingManager
|
|
|
|
|