diff --git a/Signal/src/view controllers/MessageComposeTableViewController.m b/Signal/src/view controllers/MessageComposeTableViewController.m index 810bef22b..d2ff1bf04 100644 --- a/Signal/src/view controllers/MessageComposeTableViewController.m +++ b/Signal/src/view controllers/MessageComposeTableViewController.m @@ -1,9 +1,5 @@ // -// MessageComposeTableViewController.m -// -// -// Created by Dylan Bourgeois on 02/11/14. -// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. // #import "MessageComposeTableViewController.h" @@ -24,24 +20,30 @@ NS_ASSUME_NONNULL_BEGIN UISearchResultsUpdating, MFMessageComposeViewControllerDelegate> -@property (nonatomic, strong) IBOutlet UITableViewCell *inviteCell; -@property (nonatomic, strong) IBOutlet OWSNoSignalContactsView *noSignalContactsView; +@property (nonatomic) IBOutlet UITableViewCell *inviteCell; +@property (nonatomic) UITableViewCell *conversationForNonContactCell; +@property (nonatomic) IBOutlet OWSNoSignalContactsView *noSignalContactsView; @property (nonatomic) UIButton *sendTextButton; -@property (nonatomic, strong) UISearchController *searchController; -@property (nonatomic, strong) UIActivityIndicatorView *activityIndicator; -@property (nonatomic, strong) UIBarButtonItem *addGroup; -@property (nonatomic, strong) UIView *loadingBackgroundView; +@property (nonatomic) UISearchController *searchController; +@property (nonatomic) UIActivityIndicatorView *activityIndicator; +@property (nonatomic) UIBarButtonItem *addGroup; +@property (nonatomic) UIView *loadingBackgroundView; @property (nonatomic) NSString *currentSearchTerm; @property (copy) NSArray *contacts; @property (copy) NSArray *searchResults; @property (nonatomic, readonly) OWSContactsManager *contactsManager; +@property (nonatomic) BOOL showNewConversationForNonContactButton; +// This property should be set IFF showNewConversationForNonContactButton is YES. +@property (nonatomic) NSString *nonContactPhoneNumber; + @end NSInteger const MessageComposeTableViewControllerSectionInvite = 0; NSInteger const MessageComposeTableViewControllerSectionContacts = 1; +NSInteger const MessageComposeTableViewControllerSectionNewConversationForNonContact = 2; NSString *const MessageComposeTableViewControllerCellInvite = @"ContactTableInviteCell"; NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableViewCell"; @@ -87,6 +89,8 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie self.searchController.searchBar.backgroundColor = [UIColor whiteColor]; self.inviteCell.textLabel.text = NSLocalizedString( @"INVITE_FRIENDS_CONTACT_TABLE_BUTTON", @"Text for button at the top of the contact picker"); + + self.conversationForNonContactCell = [UITableViewCell new]; self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; [self createLoadingAndBackgroundViews]; @@ -201,6 +205,7 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie self.inviteCell.hidden = YES; + self.conversationForNonContactCell.hidden = YES; self.searchController.searchBar.hidden = YES; self.tableView.backgroundView = self.noSignalContactsView; self.tableView.backgroundView.opaque = YES; @@ -212,6 +217,7 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie self.searchController.searchBar.hidden = NO; self.tableView.backgroundView = nil; self.inviteCell.hidden = NO; + self.conversationForNonContactCell.hidden = NO; } } @@ -296,11 +302,24 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie [self.sendTextButton setTitle:sendTextTo forState:UIControlStateNormal]; self.sendTextButton.hidden = NO; self.currentSearchTerm = formattedNumber; + self.showNewConversationForNonContactButton = YES; + self.nonContactPhoneNumber = formattedNumber; } else { self.sendTextButton.hidden = YES; + self.showNewConversationForNonContactButton = NO; + _nonContactPhoneNumber = nil; } } +- (void)setShowNewConversationForNonContactButton:(BOOL)showNewConversationForNonContactButton { + if (_showNewConversationForNonContactButton == showNewConversationForNonContactButton) { + return; + } + + _showNewConversationForNonContactButton = showNewConversationForNonContactButton; + + [self.tableView reloadData]; +} #pragma mark - Send Normal Text to Unknown Contact @@ -407,7 +426,7 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie #pragma mark - Table View Data Source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 2; + return 4; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { @@ -417,6 +436,8 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie return 0; } return 1; + } else if (section == MessageComposeTableViewControllerSectionNewConversationForNonContact) { + return _showNewConversationForNonContactButton ? 1 : 0; } else { if (self.searchController.active) { return (NSInteger)[self.searchResults count]; @@ -430,6 +451,13 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie { if (indexPath.section == MessageComposeTableViewControllerSectionInvite) { return self.inviteCell; + } else if (indexPath.section == MessageComposeTableViewControllerSectionNewConversationForNonContact) { + OWSAssert(self.nonContactPhoneNumber.length > 0); + + self.conversationForNonContactCell.textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"NEW_CONVERSATION_FOR_NON_CONTACT_FORMAT", + @"Text for button to start a new conversation with a non-contact"), + self.nonContactPhoneNumber]; + return self.conversationForNonContactCell; } else { ContactTableViewCell *cell = (ContactTableViewCell *)[tableView dequeueReusableCellWithIdentifier:MessageComposeTableViewControllerCellContact]; @@ -461,6 +489,15 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie } else { showInvite(); } + } else if (indexPath.section == MessageComposeTableViewControllerSectionNewConversationForNonContact) { + OWSAssert(self.nonContactPhoneNumber.length > 0); + + if (self.nonContactPhoneNumber.length > 0) { + [self dismissViewControllerAnimated:YES + completion:^() { + [Environment messageIdentifier:self.nonContactPhoneNumber withCompose:YES]; + }]; + } } else { NSString *identifier = [[[self contactForIndexPath:indexPath] textSecureIdentifiers] firstObject]; diff --git a/Signal/translations/en.lproj/Localizable.strings b/Signal/translations/en.lproj/Localizable.strings index 4527c079e..8fe4c9cd6 100644 --- a/Signal/translations/en.lproj/Localizable.strings +++ b/Signal/translations/en.lproj/Localizable.strings @@ -489,6 +489,9 @@ /* No comment provided by engineer. */ "NETWORK_STATUS_TEXT" = "You can check your network status by looking at the colored bar above your inbox."; +/* Text for button to start a new conversation with a non-contact */ +"NEW_CONVERSATION_FOR_NON_CONTACT_FORMAT" = "New conversation with %@"; + /* Action Sheet title prompting the user for a group avatar */ "NEW_GROUP_ADD_PHOTO_ACTION" = "Set Group Photo";