From b3d6a82c4fdfbbea46e1993f38e8595057f240c6 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 5 Apr 2017 13:27:29 -0400 Subject: [PATCH] =?UTF-8?q?Show=20blocked=20users=20in=20=E2=80=9Cadd=20to?= =?UTF-8?q?=20block=20list=E2=80=9D=20view.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // FREEBIE --- .../AddToBlockListViewController.m | 40 +++++++++++++++++-- Signal/src/views/ContactTableViewCell.h | 2 + Signal/src/views/ContactTableViewCell.m | 16 +++++++- .../translations/en.lproj/Localizable.strings | 17 ++++---- 4 files changed, 64 insertions(+), 11 deletions(-) diff --git a/Signal/src/ViewControllers/AddToBlockListViewController.m b/Signal/src/ViewControllers/AddToBlockListViewController.m index d7a8695a0..fa26877e4 100644 --- a/Signal/src/ViewControllers/AddToBlockListViewController.m +++ b/Signal/src/ViewControllers/AddToBlockListViewController.m @@ -341,11 +341,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 +357,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 +386,7 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI { NSMutableArray *result = [NSMutableArray new]; for (Contact *contact in self.contactsManager.signalContacts) { - if (![self isContactBlockedOrHidden:contact] && ![self isCurrentUserContact:contact]) { + if (![self isContactHidden:contact]) { [result addObject:contact]; } } @@ -436,6 +450,7 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI if (!cell) { cell = [ContactTableViewCell new]; } + cell.isBlocked = [self isContactBlocked:contact]; [cell configureWithContact:contact contactsManager:self.contactsManager]; return cell; } @@ -459,6 +474,25 @@ NSString *const kContactsTable_CellReuseIdentifier = @"kContactsTable_CellReuseI __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 diff --git a/Signal/src/views/ContactTableViewCell.h b/Signal/src/views/ContactTableViewCell.h index 91011d6c2..bc635c37d 100644 --- a/Signal/src/views/ContactTableViewCell.h +++ b/Signal/src/views/ContactTableViewCell.h @@ -17,6 +17,8 @@ NS_ASSUME_NONNULL_BEGIN @interface ContactTableViewCell : UITableViewCell +@property (nonatomic) BOOL isBlocked; + + (CGFloat)rowHeight; - (void)configureWithContact:(Contact *)contact contactsManager:(OWSContactsManager *)contactsManager; diff --git a/Signal/src/views/ContactTableViewCell.m b/Signal/src/views/ContactTableViewCell.m index c45f4fd3c..ca9271f4c 100644 --- a/Signal/src/views/ContactTableViewCell.m +++ b/Signal/src/views/ContactTableViewCell.m @@ -68,7 +68,21 @@ NS_ASSUME_NONNULL_BEGIN - (void)configureWithContact:(Contact *)contact contactsManager:(OWSContactsManager *)contactsManager { - self.nameLabel.attributedText = [contactsManager formattedFullNameForContact:contact font:self.nameLabel.font]; + NSMutableAttributedString *attributedText = + [[contactsManager formattedFullNameForContact:contact font:self.nameLabel.font] mutableCopy]; + if (self.isBlocked) { + // Add whitespace between the contact name and the blocked indicator. + [attributedText appendAttributedString:[[NSAttributedString alloc] initWithString:@" " attributes:nil]]; + [attributedText appendAttributedString:[[NSAttributedString alloc] + initWithString:NSLocalizedString(@"CONTACT_BLOCKED_INDICATOR", + @"An indicator that a contact has been blocked.") + attributes:@{ + NSFontAttributeName : [UIFont + ows_mediumFontWithSize:self.nameLabel.font.pointSize], + NSForegroundColorAttributeName : [UIColor blackColor], + }]]; + } + self.nameLabel.attributedText = attributedText; self.avatarView.image = [[[OWSContactAvatarBuilder alloc] initWithContactId:contact.textSecureIdentifiers.firstObject name:contact.fullName diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index edcda7c21..6ebef7355 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -109,6 +109,12 @@ /* A format for the 'unblock user' action sheet title. Embeds {{the blocked user's name or phone number}}. */ "BLOCK_LIST_UNBLOCK_TITLE_FORMAT" = "Unblock %@?"; +/* 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}}. */ +"BLOCK_LIST_VIEW_ALREADY_BLOCKED_ALERT_MESSAGE_FORMAT" = "%@ is already blocked."; + +/* A title of the alert if user tries to block a user who is already blocked. */ +"BLOCK_LIST_VIEW_ALREADY_BLOCKED_ALERT_TITLE" = "Already Blocked"; + /* A label for the block button in the block list view */ "BLOCK_LIST_VIEW_BLOCK_BUTTON" = "Block"; @@ -187,6 +193,9 @@ /* No comment provided by engineer. */ "CONFIRMATION_TITLE" = "Confirm"; +/* An indicator that a contact has been blocked. */ +"CONTACT_BLOCKED_INDICATOR" = "(Blocked)"; + /* No comment provided by engineer. */ "CONTACT_DETAIL_COMM_TYPE_INSECURE" = "Unregistered Number"; @@ -346,9 +355,6 @@ /* No comment provided by engineer. */ "ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Safety number changed. Tap to verify."; -/* No comment provided by engineer. */ -"ERROR_WAS_DETECTED_TITLE" = "Bummer!"; - /* during registration */ "EXISTING_USER_REGISTRATION_ALERT_BODY" = "At this time Signal can only be active on one mobile device per phone number."; @@ -535,7 +541,7 @@ /* Indicates that a single member of this group has been blocked. */ "MESSAGES_VIEW_GROUP_1_MEMBER_BLOCKED" = "You Blocked 1 Member of this Group"; -/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked user in this group}}. */ +/* Indicates that some members of this group has been blocked. Embeds {{the number of blocked users in this group}}. */ "MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %d Members of this Group"; /* The subtitle for the messages view title indicates that the title can be tapped to access settings for this conversation. */ @@ -979,9 +985,6 @@ /* No comment provided by engineer. */ "SUCCESSFUL_VERIFICATION_TITLE" = "Safety Number Verified!"; -/* No comment provided by engineer. */ -"TIMEOUT_CONTACTS_DETAIL" = "We couldn't fetch an updated contact list from the server. Please try again later."; - /* No comment provided by engineer. */ "TXT_CANCEL_TITLE" = "Cancel";