diff --git a/Classes/Base.lproj/ChatConversationCreateView.xib b/Classes/Base.lproj/ChatConversationCreateView.xib index 7cc500ccb..d201a3cc7 100644 --- a/Classes/Base.lproj/ChatConversationCreateView.xib +++ b/Classes/Base.lproj/ChatConversationCreateView.xib @@ -1,13 +1,22 @@ - - + + + + + - + + + + + + + @@ -17,26 +26,74 @@ - + - + - + - + + + + + + + + + - - + + + + + + + + - - + + - + @@ -65,11 +143,11 @@ - + - - + + @@ -78,12 +156,21 @@ + - - + + + + + + + + + + diff --git a/Classes/CallSideMenuView.m b/Classes/CallSideMenuView.m index 32a769338..91fb32b7e 100644 --- a/Classes/CallSideMenuView.m +++ b/Classes/CallSideMenuView.m @@ -146,9 +146,9 @@ linphone_call_stats_get_upload_bandwidth(stats)]]; [result appendString:@"\n"]; if (stream == LinphoneStreamTypeVideo) { - [result appendString:[NSString stringWithFormat:@"Estimated download bandwidth: %1.1f kbits/s", + /*[result appendString:[NSString stringWithFormat:@"Estimated download bandwidth: %1.1f kbits/s", linphone_call_stats_get_estimated_download_bandwidth(stats)]]; - [result appendString:@"\n"]; + [result appendString:@"\n"];*/ } [result appendString:[NSString stringWithFormat:@"ICE state: %@", diff --git a/Classes/ChatConversationCreateCollectionViewController.h b/Classes/ChatConversationCreateCollectionViewController.h new file mode 100644 index 000000000..06324f691 --- /dev/null +++ b/Classes/ChatConversationCreateCollectionViewController.h @@ -0,0 +1,12 @@ +// +// ChatConversationCreateCollectionViewController.h +// linphone +// +// Created by REIS Benjamin on 03/10/2017. +// + +#import + +@interface ChatConversationCreateCollectionViewController : UICollectionViewController + +@end diff --git a/Classes/ChatConversationCreateCollectionViewController.m b/Classes/ChatConversationCreateCollectionViewController.m new file mode 100644 index 000000000..2329c59ae --- /dev/null +++ b/Classes/ChatConversationCreateCollectionViewController.m @@ -0,0 +1,97 @@ +// +// ChatConversationCreateCollectionViewController.m +// linphone +// +// Created by REIS Benjamin on 03/10/2017. +// + +#import "ChatConversationCreateCollectionViewController.h" + +@interface ChatConversationCreateCollectionViewController () + +@end + +@implementation ChatConversationCreateCollectionViewController + +static NSString * const reuseIdentifier = @"Cell"; + +- (void)viewDidLoad { + [super viewDidLoad]; + + // Uncomment the following line to preserve selection between presentations + // self.clearsSelectionOnViewWillAppear = NO; + + // Register cell classes + [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier]; + + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +/*#pragma mark + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { +#warning Incomplete implementation, return the number of sections + return 0; +} + + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { +#warning Incomplete implementation, return the number of items + return 0; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; + + // Configure the cell + + return cell; +}*/ + +#pragma mark + +/* +// Uncomment this method to specify if the specified item should be highlighted during tracking +- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} +*/ + +/* +// Uncomment this method to specify if the specified item should be selected +- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} +*/ + +/* +// Uncomment these methods to specify if an action menu should be displayed for the specified item, and react to actions performed on the item +- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath { + return NO; +} + +- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + return NO; +} + +- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { + +} +*/ + +@end diff --git a/Classes/ChatConversationCreateTableView.h b/Classes/ChatConversationCreateTableView.h index 252a08158..00dc2e94a 100644 --- a/Classes/ChatConversationCreateTableView.h +++ b/Classes/ChatConversationCreateTableView.h @@ -10,5 +10,10 @@ @interface ChatConversationCreateTableView : UITableViewController @property(weak, nonatomic) IBOutlet UISearchBar *searchBar; +@property(nonatomic) Boolean allFilter; +@property(nonatomic, strong) NSMutableArray *contactsGroup; +@property(nonatomic, strong) NSMutableDictionary *contactsDict; +@property (weak, nonatomic) IBOutlet UICollectionView *collectionView; +- (void) loadData; @end diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index aaa9cd5e9..9f0246c68 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -10,6 +10,7 @@ #import "UIChatCreateCell.h" #import "LinphoneManager.h" #import "PhoneMainView.h" +#import "UIChatCreateCollectionViewCell.h" @interface ChatConversationCreateTableView () @@ -21,26 +22,37 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - self.allContacts = + _allContacts = [[NSDictionary alloc] initWithDictionary:LinphoneManager.instance.fastAddressBook.addressBookMap]; - self.contacts = [[NSMutableDictionary alloc] initWithCapacity:_allContacts.count]; - [_searchBar becomeFirstResponder]; + _contacts = [[NSMutableDictionary alloc] initWithCapacity:_allContacts.count]; + _contactsGroup = [[NSMutableArray alloc] init]; + _contactsDict = [[NSMutableDictionary alloc] init]; + _allFilter = TRUE; [_searchBar setText:@""]; [self searchBar:_searchBar textDidChange:_searchBar.text]; self.tableView.accessibilityIdentifier = @"Suggested addresses"; } +- (void) loadData { + [self reloadDataWithFilter:_searchBar.text]; +} + - (void)reloadDataWithFilter:(NSString *)filter { [_contacts removeAllObjects]; [_allContacts enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - NSString *address = (NSString *)key; - NSString *name = [FastAddressBook displayNameForContact:value]; - if ((filter.length == 0) || ([name.lowercaseString containsSubstring:filter.lowercaseString]) || - ([address.lowercaseString containsSubstring:filter.lowercaseString])) { - _contacts[address] = name; - } + NSString *address = (NSString *)key; + NSString *name = [FastAddressBook displayNameForContact:value]; + Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; + Boolean linphoneContact = (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + BOOL add = _allFilter || linphoneContact; + if (((filter.length == 0) + || ([name.lowercaseString containsSubstring:filter.lowercaseString]) + || ([address.lowercaseString containsSubstring:filter.lowercaseString])) + && add) { + _contacts[address] = name; + } }]; // also add current entry, if not listed NSString *nsuri = filter.lowercaseString; @@ -74,48 +86,34 @@ } cell.displayNameLabel.text = [_contacts.allValues objectAtIndex:indexPath.row]; LinphoneAddress *addr = [LinphoneUtils normalizeSipOrPhoneAddress:[_contacts.allKeys objectAtIndex:indexPath.row]]; + Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:[_contacts.allKeys objectAtIndex:indexPath.row]]; + Boolean linphoneContact = (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + cell.linphoneImage.hidden = !linphoneContact; if (addr) { - cell.addressLabel.text = [NSString stringWithUTF8String:linphone_address_as_string(addr)]; + cell.addressLabel.text = [NSString stringWithUTF8String:linphone_address_as_string_uri_only(addr)]; } else { cell.addressLabel.text = [_contacts.allKeys objectAtIndex:indexPath.row]; } + cell.selectedImage.hidden = ![_contactsGroup containsObject:cell.addressLabel.text]; + return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; - NSString *uri; - LinphoneAddress *addr = [LinphoneUtils normalizeSipOrPhoneAddress:[_contacts.allKeys objectAtIndex:indexPath.row]]; - if (addr) { - uri = [NSString stringWithUTF8String:linphone_address_as_string(addr)]; - } else { - uri = [_contacts.allKeys objectAtIndex:indexPath.row]; - } - LinphoneChatRoom *room = linphone_core_get_chat_room_from_uri(LC, uri.UTF8String); - if (!room) { - [PhoneMainView.instance popCurrentView]; - UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Invalid address", nil) - message:NSLocalizedString(@"Please specify the entire SIP address for the chat", - nil) - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) {}]; - defaultAction.accessibilityLabel = @"OK"; - [errView addAction:defaultAction]; - [PhoneMainView.instance presentViewController:errView animated:YES completion:nil]; - } else { - ChatConversationView *view = VIEW(ChatConversationView); - [view setChatRoom:room]; - [PhoneMainView.instance popCurrentView]; - [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; - // refresh list of chatrooms if we are using fragment - if (IPAD) { - ChatsListView *listView = VIEW(ChatsListView); - [listView.tableController loadData]; + UIChatCreateCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + if(cell.selectedImage.hidden) { + if(![_contactsGroup containsObject:cell.addressLabel.text]) { + [_contactsGroup addObject:cell.addressLabel.text]; + _contactsDict[cell.addressLabel.text] = cell.displayNameLabel.text; + [_collectionView registerClass:UIChatCreateCollectionViewCell.class forCellWithReuseIdentifier:cell.addressLabel.text]; } + } else if([_contactsGroup containsObject:cell.addressLabel.text]) { + [_contactsGroup removeObject:cell.addressLabel.text]; + [_contactsDict removeObjectForKey:cell.addressLabel.text]; } + cell.selectedImage.hidden = !cell.selectedImage.hidden; + [_collectionView reloadData]; } - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { diff --git a/Classes/ChatConversationCreateView.h b/Classes/ChatConversationCreateView.h index 297a24d52..15e529eb4 100644 --- a/Classes/ChatConversationCreateView.h +++ b/Classes/ChatConversationCreateView.h @@ -8,13 +8,23 @@ #import #import "ChatConversationCreateTableView.h" +#import "ChatConversationCreateCollectionViewController.h" #import "UICompositeView.h" -@interface ChatConversationCreateView : UIViewController +@interface ChatConversationCreateView : UIViewController @property(strong, nonatomic) IBOutlet ChatConversationCreateTableView *tableController; +@property(strong, nonatomic) IBOutlet ChatConversationCreateCollectionViewController *collectionController; +@property (weak, nonatomic) IBOutlet UICollectionView *collectionView; + @property(weak, nonatomic) IBOutlet UIIconButton *backButton; +@property (weak, nonatomic) IBOutlet UIIconButton *nextButton; + +@property (weak, nonatomic) IBOutlet UIIconButton *allButton; +@property (weak, nonatomic) IBOutlet UIIconButton *linphoneButton; +@property (weak, nonatomic) IBOutlet UIImageView *selectedButtonImage; - (IBAction)onBackClick:(id)sender; +- (IBAction)onNextClick:(id)sender; @end diff --git a/Classes/ChatConversationCreateView.m b/Classes/ChatConversationCreateView.m index e477424e2..d844d2e8c 100644 --- a/Classes/ChatConversationCreateView.m +++ b/Classes/ChatConversationCreateView.m @@ -8,6 +8,7 @@ #import "ChatConversationCreateView.h" #import "PhoneMainView.h" +#import "UIChatCreateCollectionViewCell.h" @implementation ChatConversationCreateView @@ -34,7 +35,6 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewDidLoad { [super viewDidLoad]; - // if we use fragments, remove back button if (IPAD) { _backButton.hidden = YES; @@ -44,11 +44,20 @@ static UICompositeViewDescription *compositeDescription = nil; action:@selector(dismissKeyboards)]; tap.delegate = self; [self.view addGestureRecognizer:tap]; + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; + layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; + layout.itemSize = CGSizeMake(100.0 , 50.0); + _collectionController.collectionView = _collectionView; + _collectionController = (ChatConversationCreateCollectionViewController *)[[UICollectionViewController alloc] initWithCollectionViewLayout:layout]; + _collectionView.dataSource = self; + [_collectionView setCollectionViewLayout:layout]; + _tableController.collectionView = _collectionView; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [_tableController.tableView reloadData]; + [_collectionView reloadData]; + [self changeView:ContactsAll]; } #pragma mark - searchBar delegate @@ -57,12 +66,77 @@ static UICompositeViewDescription *compositeDescription = nil; [PhoneMainView.instance popCurrentView]; } +- (IBAction)onNextClick:(id)sender { + /*NSString *uri; + LinphoneAddress *addr = [LinphoneUtils normalizeSipOrPhoneAddress:[_contacts.allKeys objectAtIndex:indexPath.row]]; + if (addr) { + uri = [NSString stringWithUTF8String:linphone_address_as_string_uri_only(addr)]; + } else { + uri = [_contacts.allKeys objectAtIndex:indexPath.row]; + } + LinphoneChatRoom *room = linphone_core_get_chat_room_from_uri(LC, uri.UTF8String); + if (!room) { + [PhoneMainView.instance popCurrentView]; + UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Invalid address", nil) + message:NSLocalizedString(@"Please specify the entire SIP address for the chat", + nil) + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) {}]; + defaultAction.accessibilityLabel = @"OK"; + [errView addAction:defaultAction]; + [PhoneMainView.instance presentViewController:errView animated:YES completion:nil]; + } else { + ChatConversationView *view = VIEW(ChatConversationView); + [view setChatRoom:room]; + [PhoneMainView.instance popCurrentView]; + [PhoneMainView.instance changeCurrentView:view.compositeViewDescription]; + // refresh list of chatrooms if we are using fragment + if (IPAD) { + ChatsListView *listView = VIEW(ChatsListView); + [listView.tableController loadData]; + } + }*/ +} + - (void)dismissKeyboards { if ([self.tableController.searchBar isFirstResponder]) { [self.tableController.searchBar resignFirstResponder]; } } +#pragma mark - Contacts filter + +typedef enum { ContactsAll, ContactsLinphone, ContactsMAX } ContactsCategory; + +- (void)changeView:(ContactsCategory)view { + CGRect frame = _selectedButtonImage.frame; + if (view == ContactsAll && !_allButton.selected) { + frame.origin.x = _allButton.frame.origin.x; + _allButton.selected = TRUE; + _linphoneButton.selected = FALSE; + _tableController.allFilter = TRUE; + [_tableController loadData]; + } else if (view == ContactsLinphone && !_linphoneButton.selected) { + frame.origin.x = _linphoneButton.frame.origin.x; + _linphoneButton.selected = TRUE; + _allButton.selected = FALSE; + _tableController.allFilter = FALSE; + [_tableController loadData]; + } + _selectedButtonImage.frame = frame; +} + +- (IBAction)onAllClick:(id)event { + [self changeView:ContactsAll]; +} + +- (IBAction)onLinphoneClick:(id)event { + [self changeView:ContactsLinphone]; +} + #pragma mark - GestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch @@ -70,4 +144,22 @@ static UICompositeViewDescription *compositeDescription = nil; return NO; } +#pragma mark - UICollectionViewDataSource +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return _tableController.contactsGroup.count; +} + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { + return 1; +} + +- (UIChatCreateCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + NSString *name = _tableController.contactsGroup[indexPath.item]; + UIChatCreateCollectionViewCell *cell = (UIChatCreateCollectionViewCell *)[_collectionView dequeueReusableCellWithReuseIdentifier:name forIndexPath:indexPath]; + cell.controller = self; + cell.uri = name; + cell = [cell initWithName:_tableController.contactsDict[name]]; + return cell; +} + @end diff --git a/Classes/LinphoneUI/Base.lproj/UIChatCreateCell.xib b/Classes/LinphoneUI/Base.lproj/UIChatCreateCell.xib index 5ec042951..52c92ee81 100644 --- a/Classes/LinphoneUI/Base.lproj/UIChatCreateCell.xib +++ b/Classes/LinphoneUI/Base.lproj/UIChatCreateCell.xib @@ -1,14 +1,20 @@ - - + + + + + - + + + + @@ -16,33 +22,38 @@ - - - + - - - - - + + + + diff --git a/Classes/LinphoneUI/UIChatCreateCell.h b/Classes/LinphoneUI/UIChatCreateCell.h index 723245629..424683497 100644 --- a/Classes/LinphoneUI/UIChatCreateCell.h +++ b/Classes/LinphoneUI/UIChatCreateCell.h @@ -11,6 +11,8 @@ @interface UIChatCreateCell : UITableViewCell @property(weak, nonatomic) IBOutlet UILabel *displayNameLabel; @property(weak, nonatomic) IBOutlet UILabel *addressLabel; +@property (weak, nonatomic) IBOutlet UIImageView *selectedImage; +@property (weak, nonatomic) IBOutlet UIImageView *linphoneImage; - (id)initWithIdentifier:(NSString *)identifier; diff --git a/Classes/LinphoneUI/UIChatCreateCell.m b/Classes/LinphoneUI/UIChatCreateCell.m index e7fdcf73a..6a0c8fe4f 100644 --- a/Classes/LinphoneUI/UIChatCreateCell.m +++ b/Classes/LinphoneUI/UIChatCreateCell.m @@ -23,6 +23,8 @@ [self addSubview:sub]; } } + _selectedImage.hidden = TRUE; + _linphoneImage.hidden = TRUE; return self; } diff --git a/Classes/LinphoneUI/UIChatCreateCollectionViewCell.h b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.h new file mode 100644 index 000000000..59fb81c6b --- /dev/null +++ b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.h @@ -0,0 +1,17 @@ +// +// UIChatCreateCollectionViewCell.h +// linphone +// +// Created by REIS Benjamin on 03/10/2017. +// + +#import +#import "ChatConversationCreateView.h" + +@interface UIChatCreateCollectionViewCell : UICollectionViewCell +@property (weak, nonatomic) IBOutlet UILabel *nameLabel; +@property (strong, nonatomic) ChatConversationCreateView *controller; +@property (strong, nonatomic) NSString *uri; +- (id)initWithName:(NSString *)identifier; +- (void)onDelete; +@end diff --git a/Classes/LinphoneUI/UIChatCreateCollectionViewCell.m b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.m new file mode 100644 index 000000000..5c734a02c --- /dev/null +++ b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.m @@ -0,0 +1,39 @@ +// +// UIChatCreateCollectionViewCell.m +// linphone +// +// Created by REIS Benjamin on 03/10/2017. +// + +#import "UIChatCreateCollectionViewCell.h" + +@implementation UIChatCreateCollectionViewCell +- (void)awakeFromNib { + [super awakeFromNib]; +} + +- (id)initWithName:(NSString *)identifier { + if (self != nil) { + NSArray *arrayOfViews = + [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil]; + if ([arrayOfViews count] >= 1) { + UIChatCreateCollectionViewCell *sub = ((UIChatCreateCollectionViewCell *)[arrayOfViews objectAtIndex:0]); + [self addSubview:sub]; + _nameLabel = sub.nameLabel; + } + } + [_nameLabel setText:identifier]; + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onDelete)]; + tap.numberOfTouchesRequired = 1; + [self addGestureRecognizer:tap]; + return self; +} + +- (void) onDelete { + [_controller.tableController.contactsGroup removeObject:_uri]; + [_controller.tableController.contactsDict removeObjectForKey:_uri]; + [_controller.collectionView reloadData]; + [_controller.tableController.tableView reloadData]; +} +@end diff --git a/Classes/LinphoneUI/UIChatCreateCollectionViewCell.xib b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.xib new file mode 100644 index 000000000..6e5d3ac22 --- /dev/null +++ b/Classes/LinphoneUI/UIChatCreateCollectionViewCell.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/images/conference_delete.png b/Resources/images/conference_delete.png new file mode 100644 index 000000000..c3306f173 Binary files /dev/null and b/Resources/images/conference_delete.png differ diff --git a/Resources/images/conference_delete@2x.png b/Resources/images/conference_delete@2x.png new file mode 100644 index 000000000..5faeae4b4 Binary files /dev/null and b/Resources/images/conference_delete@2x.png differ diff --git a/Resources/images/next_default.png b/Resources/images/next_default.png new file mode 100644 index 000000000..4f77e0c2a Binary files /dev/null and b/Resources/images/next_default.png differ diff --git a/Resources/images/next_default@2x.png b/Resources/images/next_default@2x.png new file mode 100644 index 000000000..7d34fbe5b Binary files /dev/null and b/Resources/images/next_default@2x.png differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 9f6f0c305..d130b28c6 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -681,7 +681,16 @@ 8C5BCEDF1EB385B100A9AAEF /* bctoolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5BCEC71EB3859200A9AAEF /* bctoolbox.framework */; }; 8C5BCEE01EB385B100A9AAEF /* linphone.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5BCEC81EB3859200A9AAEF /* linphone.framework */; }; 8C73477C1D9BA3A00022EE8C /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */; }; + 8C9C5E0D1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */; }; + 8C9C5E111F83BD97006987FA /* UIChatCreateCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C9C5E0F1F83BD97006987FA /* UIChatCreateCollectionViewCell.m */; }; + 8C9C5E121F83BD97006987FA /* UIChatCreateCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8C9C5E101F83BD97006987FA /* UIChatCreateCollectionViewCell.xib */; }; 8CA2004C1D8158440095F859 /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA2004B1D8158440095F859 /* PushKit.framework */; }; + 8CDC61951F84D89B0087CF7F /* check_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CDC618C1F84D89B0087CF7F /* check_selected.png */; }; + 8CDC61971F84D9270087CF7F /* check_selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CDC61961F84D9270087CF7F /* check_selected@2x.png */; }; + 8CE24F4B1F8234A30077AC0A /* next_default.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CE24F491F8234A20077AC0A /* next_default.png */; }; + 8CE24F4C1F8234A30077AC0A /* next_default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CE24F4A1F8234A30077AC0A /* next_default@2x.png */; }; + 8CE24F571F8268850077AC0A /* conference_delete.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CE24F551F8268840077AC0A /* conference_delete.png */; }; + 8CE24F581F8268850077AC0A /* conference_delete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CE24F561F8268840077AC0A /* conference_delete@2x.png */; }; 8CE845651EC3500A00A94D60 /* bctoolbox-tester.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5BCEC61EB3859200A9AAEF /* bctoolbox-tester.framework */; }; C90FAA7915AF54E6002091CB /* HistoryDetailsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C90FAA7715AF54E6002091CB /* HistoryDetailsView.m */; }; D306459E1611EC2A00BB571E /* UILoadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D306459D1611EC2900BB571E /* UILoadingImageView.m */; }; @@ -1675,7 +1684,18 @@ 8C5D1B9A1D9BC48100DC6539 /* UIShopTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIShopTableCell.m; sourceTree = ""; }; 8C5D1B9B1D9BC48100DC6539 /* UIShopTableCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIShopTableCell.xib; sourceTree = ""; }; 8C73477B1D9BA3A00022EE8C /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; + 8C9C5E0B1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChatConversationCreateCollectionViewController.h; sourceTree = ""; }; + 8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChatConversationCreateCollectionViewController.m; sourceTree = ""; }; + 8C9C5E0E1F83BD97006987FA /* UIChatCreateCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIChatCreateCollectionViewCell.h; sourceTree = ""; }; + 8C9C5E0F1F83BD97006987FA /* UIChatCreateCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UIChatCreateCollectionViewCell.m; sourceTree = ""; }; + 8C9C5E101F83BD97006987FA /* UIChatCreateCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UIChatCreateCollectionViewCell.xib; sourceTree = ""; }; 8CA2004B1D8158440095F859 /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; }; + 8CDC618C1F84D89B0087CF7F /* check_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = check_selected.png; path = "../../../ressources 27.07.17/check_selected.png"; sourceTree = ""; }; + 8CDC61961F84D9270087CF7F /* check_selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "check_selected@2x.png"; path = "../../../ressources 27.07.17/check_selected@2x.png"; sourceTree = ""; }; + 8CE24F491F8234A20077AC0A /* next_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = next_default.png; sourceTree = ""; }; + 8CE24F4A1F8234A30077AC0A /* next_default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "next_default@2x.png"; sourceTree = ""; }; + 8CE24F551F8268840077AC0A /* conference_delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = conference_delete.png; sourceTree = ""; }; + 8CE24F561F8268840077AC0A /* conference_delete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "conference_delete@2x.png"; sourceTree = ""; }; C90FAA7615AF54E6002091CB /* HistoryDetailsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryDetailsView.h; sourceTree = ""; }; C90FAA7715AF54E6002091CB /* HistoryDetailsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryDetailsView.m; sourceTree = ""; }; C9B3A6FD15B485DB006F52EE /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Utils/Utils.h; sourceTree = ""; }; @@ -1997,6 +2017,8 @@ D3F83EEA1582021700336684 /* CallView.m */, D381881C15FE3FCA00C3EDCA /* CallView.xib */, 638F1A861C2167C2004B8E02 /* CallView~ipad.xib */, + 8C9C5E0B1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.h */, + 8C9C5E0C1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m */, 6341807A1BBC103100F71761 /* ChatConversationCreateTableView.h */, 6341807B1BBC103100F71761 /* ChatConversationCreateTableView.m */, 6336715E1BCBAAD200BFCBDE /* ChatConversationCreateView.h */, @@ -2135,6 +2157,9 @@ D3EA540F159853750037DC6B /* UIChatCell.h */, D3EA5410159853750037DC6B /* UIChatCell.m */, 639CEB0B1A1DF4FA004DE38F /* UIChatCell.xib */, + 8C9C5E0E1F83BD97006987FA /* UIChatCreateCollectionViewCell.h */, + 8C9C5E0F1F83BD97006987FA /* UIChatCreateCollectionViewCell.m */, + 8C9C5E101F83BD97006987FA /* UIChatCreateCollectionViewCell.xib */, 63B8D69F1BCBF43100C12B09 /* UIChatCreateCell.h */, 63B8D6A01BCBF43100C12B09 /* UIChatCreateCell.m */, 639E9CA81C0DB7F200019A75 /* UIChatCreateCell.xib */, @@ -2387,6 +2412,12 @@ 633FEBE11D3CD5570014B822 /* images */ = { isa = PBXGroup; children = ( + 8CDC61961F84D9270087CF7F /* check_selected@2x.png */, + 8CDC618C1F84D89B0087CF7F /* check_selected.png */, + 8CE24F551F8268840077AC0A /* conference_delete.png */, + 8CE24F561F8268840077AC0A /* conference_delete@2x.png */, + 8CE24F491F8234A20077AC0A /* next_default.png */, + 8CE24F4A1F8234A30077AC0A /* next_default@2x.png */, 8C300D981E40E0CC00728EF3 /* lime_ko.png */, 8C300D991E40E0CC00728EF3 /* lime_ko@2x.png */, 8C2595E01DEDDC67007A6424 /* callkit_logo.png */, @@ -3314,6 +3345,7 @@ 63AADBFF1B6A0FF200AA16FD /* assistant_external_sip.rc in Resources */, 633FEE9E1D3CD55A0014B822 /* numpad_0_over@2x.png in Resources */, 634610121B6140A500548952 /* CallOutgoingView.xib in Resources */, + 8CE24F581F8268850077AC0A /* conference_delete@2x.png in Resources */, 633FEDC21D3CD5590014B822 /* call_hangup_default.png in Resources */, 633FEEB41D3CD55A0014B822 /* numpad_3_default@2x.png in Resources */, 8C2595E11DEDDC67007A6424 /* callkit_logo.png in Resources */, @@ -3354,6 +3386,7 @@ 633FEE041D3CD5590014B822 /* cancel_edit_disabled.png in Resources */, 633FEF4C1D3CD55A0014B822 /* splashscreen~ipad.png in Resources */, 633FEDE61D3CD5590014B822 /* call_status_missed.png in Resources */, + 8CDC61971F84D9270087CF7F /* check_selected@2x.png in Resources */, 633FEE7A1D3CD5590014B822 /* history_missed_default.png in Resources */, 633FEF121D3CD55A0014B822 /* pause_big_over_selected.png in Resources */, 633FED9D1D3CD5590014B822 /* add_field_default@2x.png in Resources */, @@ -3396,6 +3429,7 @@ 633FEF301D3CD55A0014B822 /* route_speaker_disabled.png in Resources */, 639CEAFD1A1DF4D9004DE38F /* StatusBarView.xib in Resources */, 633FEDE91D3CD5590014B822 /* call_status_missed~ipad@2x.png in Resources */, + 8CE24F4C1F8234A30077AC0A /* next_default@2x.png in Resources */, 244523B11E8266CC0037A187 /* chat_read.png in Resources */, 639E9CAC1C0DB80300019A75 /* UIContactDetailsCell.xib in Resources */, 633FEE511D3CD5590014B822 /* deselect_all@2x.png in Resources */, @@ -3542,6 +3576,7 @@ 633FEDB31D3CD5590014B822 /* call_alt_back_default@2x.png in Resources */, 633FEDCF1D3CD5590014B822 /* call_quality_indicator_1@2x.png in Resources */, 633FEF131D3CD55A0014B822 /* pause_big_over_selected@2x.png in Resources */, + 8CDC61951F84D89B0087CF7F /* check_selected.png in Resources */, 633FEEF01D3CD55A0014B822 /* numpad_hash_over~ipad@2x.png in Resources */, 63AADBF81B6A0FF200AA16FD /* linphonerc~ipad in Resources */, 633FEE8F1D3CD55A0014B822 /* list_details_default@2x.png in Resources */, @@ -3629,6 +3664,7 @@ 633FEE621D3CD5590014B822 /* footer_chat_default.png in Resources */, 633FEE0D1D3CD5590014B822 /* chat_attachment_disabled@2x.png in Resources */, 639E9CA61C0DB7F200019A75 /* UIChatCreateCell.xib in Resources */, + 8C9C5E121F83BD97006987FA /* UIChatCreateCollectionViewCell.xib in Resources */, 633FEEA31D3CD55A0014B822 /* numpad_1_default.png in Resources */, 633FEEA51D3CD55A0014B822 /* numpad_1_over.png in Resources */, 633FEF2E1D3CD55A0014B822 /* route_speaker_default.png in Resources */, @@ -3649,10 +3685,12 @@ 633FEF061D3CD55A0014B822 /* options_start_conference_default.png in Resources */, 63AADC021B6A0FF200AA16FD /* assistant_remote.rc in Resources */, 633FEF1E1D3CD55A0014B822 /* presence_online.png in Resources */, + 8CE24F571F8268850077AC0A /* conference_delete.png in Resources */, 633FEDF41D3CD5590014B822 /* call_video_start_disabled.png in Resources */, 633FEDD31D3CD5590014B822 /* call_quality_indicator_3@2x.png in Resources */, 633FEE3A1D3CD5590014B822 /* contact_add_disabled.png in Resources */, 633FEEA11D3CD55A0014B822 /* numpad_0~ipad.png in Resources */, + 8CE24F4B1F8234A30077AC0A /* next_default.png in Resources */, 633FEE751D3CD5590014B822 /* history_all_disabled@2x.png in Resources */, 633FEEF71D3CD55A0014B822 /* numpad_star_over@2x.png in Resources */, 633FEE461D3CD5590014B822 /* contacts_sip_selected.png in Resources */, @@ -3890,6 +3928,7 @@ 2214EB8912F84EBB002A5394 /* UIHangUpButton.m in Sources */, 630CF5571AF7CE1500539F7A /* UITextField+DoneButton.m in Sources */, 2214EBF312F86360002A5394 /* UIMutedMicroButton.m in Sources */, + 8C9C5E111F83BD97006987FA /* UIChatCreateCollectionViewCell.m in Sources */, 22968A5F12F875C600588287 /* UISpeakerButton.m in Sources */, 63701DDF1BA32039006A9AE3 /* UIConfirmationDialog.m in Sources */, 22C755601317E59C007BC101 /* UIBluetoothButton.m in Sources */, @@ -3940,6 +3979,7 @@ D3F26BF115986B73005F9CAB /* CallIncomingView.m in Sources */, D31B4B21159876C0002E6C72 /* UICompositeView.m in Sources */, D31AAF5E159B3919002C6B02 /* CallPausedTableView.m in Sources */, + 8C9C5E0D1F83B2EF006987FA /* ChatConversationCreateCollectionViewController.m in Sources */, 631098491D4660580041F2B3 /* CountryListView.m in Sources */, D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */, D350F20E15A43BB100149E54 /* AssistantView.m in Sources */, @@ -4598,7 +4638,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = "-DORTP_LOG_DOMAIN=\\\"ios\\\""; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; @@ -4701,7 +4741,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = "-DORTP_LOG_DOMAIN=\\\"ios\\\""; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; @@ -4804,7 +4844,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = "-DORTP_LOG_DOMAIN=\\\"ios\\\""; OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; @@ -4908,7 +4948,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LIBRARY_SEARCH_PATHS = ""; ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "-DORTP_LOG_DOMAIN=\\\"ios\\\""; diff --git a/submodules/linphone b/submodules/linphone index 127d5aa72..ab1e07c8b 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 127d5aa728a421151c7cd497701181859b271978 +Subproject commit ab1e07c8b702a93a7fd7d654bc61ccccd7ccfdc4