From 1b952fcd1fbdba2d5c6c5f07e9136c03ecee096c Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Tue, 10 Jul 2012 15:57:55 +0200 Subject: [PATCH] Continue working on Contact views --- Classes/ChatRoomTableViewController.m | 5 +- Classes/ChatRoomViewController.m | 8 +- Classes/ChatTableViewController.m | 14 +- Classes/ChatViewController.m | 8 +- Classes/ContactDetailsLabelViewController.h | 36 ++ Classes/ContactDetailsLabelViewController.m | 86 +++++ Classes/ContactDetailsLabelViewController.xib | 354 ++++++++++++++++++ Classes/ContactDetailsTableViewController.h | 7 +- Classes/ContactDetailsTableViewController.m | 273 +++++++++++--- Classes/ContactDetailsViewController.h | 4 + Classes/ContactDetailsViewController.m | 23 +- Classes/ContactDetailsViewController.xib | 79 +++- Classes/ContactsTableViewController.m | 5 +- Classes/FirstLoginViewController.m | 12 +- Classes/HistoryTableViewController.m | 5 +- Classes/HistoryViewController.m | 7 +- Classes/InCallTableViewController.m | 7 +- Classes/IncomingCallViewController.m | 6 +- Classes/LinphoneUI/UICallBar.m | 2 + .../LinphoneUI/UICompositeViewController.m | 4 +- Classes/LinphoneUI/UIEditableTableViewCell.h | 28 ++ Classes/LinphoneUI/UIEditableTableViewCell.m | 100 +++++ Classes/LinphoneUI/UIModalViewController.h | 5 +- Classes/LinphoneUI/UIModalViewController.m | 42 ++- Classes/LinphoneUI/UIView+ModalStack.h | 29 ++ Classes/LinphoneUI/UIView+ModalStack.m | 49 +++ Classes/PhoneMainView.h | 2 - Classes/PhoneMainView.m | 40 +- Classes/SettingsViewController.m | 17 + Classes/SettingsViewController.xib | 97 ++--- Classes/WizardViewController.m | 1 + Resources/contact_bar_background.png | Bin 0 -> 161 bytes Resources/contact_ok_default.png | Bin 0 -> 4336 bytes Resources/contact_ok_over.png | Bin 0 -> 4006 bytes linphone.xcodeproj/project.pbxproj | 80 +++- 35 files changed, 1215 insertions(+), 220 deletions(-) create mode 100644 Classes/ContactDetailsLabelViewController.h create mode 100644 Classes/ContactDetailsLabelViewController.m create mode 100644 Classes/ContactDetailsLabelViewController.xib create mode 100644 Classes/LinphoneUI/UIEditableTableViewCell.h create mode 100644 Classes/LinphoneUI/UIEditableTableViewCell.m create mode 100644 Classes/LinphoneUI/UIView+ModalStack.h create mode 100644 Classes/LinphoneUI/UIView+ModalStack.m create mode 100644 Resources/contact_bar_background.png create mode 100644 Resources/contact_ok_default.png create mode 100644 Resources/contact_ok_over.png diff --git a/Classes/ChatRoomTableViewController.m b/Classes/ChatRoomTableViewController.m index 80f9a4ede..32dcbc629 100644 --- a/Classes/ChatRoomTableViewController.m +++ b/Classes/ChatRoomTableViewController.m @@ -54,9 +54,10 @@ } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UIChatRoomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UIChatRoomCell"]; + static NSString *kCellId = @"UIChatRoomCell"; + UIChatRoomCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { - cell = [[UIChatRoomCell alloc] initWithIdentifier:@"UIChatRoomCell"]; + cell = [[[UIChatRoomCell alloc] initWithIdentifier:kCellId] autorelease]; } [cell setChat:[data objectAtIndex:[indexPath row]]]; diff --git a/Classes/ChatRoomViewController.m b/Classes/ChatRoomViewController.m index 6be06c8e7..515db7f71 100644 --- a/Classes/ChatRoomViewController.m +++ b/Classes/ChatRoomViewController.m @@ -63,6 +63,8 @@ - (void)viewDidLoad { + [super viewDidLoad]; + // Set selected+over background: IB lack ! [editButton setImage:[UIImage imageNamed:@"chat_ok_over.png"] forState:(UIControlStateHighlighted | UIControlStateSelected)]; @@ -83,8 +85,8 @@ selector:@selector(textReceivedEvent:) name:@"LinphoneTextReceived" object:nil]; - - [[tableController tableView] setEditing:FALSE]; + if([tableController isEditing]) + [tableController setEditing:FALSE]; [editButton setOff]; [[tableController tableView] reloadData]; } @@ -180,7 +182,7 @@ } - (IBAction)onEditClick:(id)event { - [[tableController tableView] setEditing:![[tableController tableView] isEditing] animated:TRUE]; + [tableController setEditing:![tableController isEditing] animated:TRUE]; } - (IBAction)onSendClick:(id)event { diff --git a/Classes/ChatTableViewController.m b/Classes/ChatTableViewController.m index 769179480..c919595ed 100644 --- a/Classes/ChatTableViewController.m +++ b/Classes/ChatTableViewController.m @@ -45,22 +45,20 @@ #pragma mark - UITableViewDataSource Functions -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { [self reloadData]; return [data count]; } -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UIChatCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UIChatCell"]; +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *kCellId = @"UIChatCell"; + UIChatCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { - cell = [[UIChatCell alloc] initWithIdentifier:@"UIChatCell"]; + cell = [[[UIChatCell alloc] initWithIdentifier:kCellId] autorelease]; } [cell setChat:[data objectAtIndex:[indexPath row]]]; diff --git a/Classes/ChatViewController.m b/Classes/ChatViewController.m index 8a92ae4b6..25a7fb3f6 100644 --- a/Classes/ChatViewController.m +++ b/Classes/ChatViewController.m @@ -45,6 +45,8 @@ #pragma mark - ViewController Functions - (void)viewDidLoad { + [super viewDidLoad]; + // Set selected+over background: IB lack ! [editButton setImage:[UIImage imageNamed:@"chat_ok_over.png"] forState:(UIControlStateHighlighted | UIControlStateSelected)]; @@ -56,8 +58,8 @@ selector:@selector(textReceivedEvent:) name:@"LinphoneTextReceived" object:nil]; - - [[tableController tableView] setEditing:FALSE]; + if([tableController isEditing]) + [tableController setEditing:FALSE]; [editButton setOff]; [[tableController tableView] reloadData]; } @@ -99,7 +101,7 @@ } - (IBAction)onEditClick:(id)event { - [[tableController tableView] setEditing:![[tableController tableView] isEditing] animated:TRUE]; + [tableController setEditing:![tableController isEditing] animated:TRUE]; } @end diff --git a/Classes/ContactDetailsLabelViewController.h b/Classes/ContactDetailsLabelViewController.h new file mode 100644 index 000000000..cefe72273 --- /dev/null +++ b/Classes/ContactDetailsLabelViewController.h @@ -0,0 +1,36 @@ +/* ContactDetailsLabelViewController.h + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import + +#import "UIModalViewController.h" + +@interface ContactDetailsLabelViewController : UIModalViewController { + NSDictionary *dataList; + UITableView *tableView; + NSString *selectedData; +} + +@property (nonatomic, copy) NSString *selectedData; +@property (nonatomic, retain) NSDictionary *dataList; +@property (nonatomic, retain) IBOutlet UITableView *tableView; + +- (IBAction)onBackClick:(id)event; + +@end diff --git a/Classes/ContactDetailsLabelViewController.m b/Classes/ContactDetailsLabelViewController.m new file mode 100644 index 000000000..7ec07dd90 --- /dev/null +++ b/Classes/ContactDetailsLabelViewController.m @@ -0,0 +1,86 @@ +/* ContactDetailsLabelViewController.m + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import "ContactDetailsLabelViewController.h" + +@implementation ContactDetailsLabelViewController + +@synthesize dataList; +@synthesize tableView; +@synthesize selectedData; + + +#pragma mark - Property Functions + +- (void)setDataList:(NSDictionary *)adatalist { + if (self->dataList != nil) { + [self->dataList release]; + } + self->dataList = [adatalist retain]; + [tableView reloadData]; +} + + +- (void)setSelectedData:(NSString *)aselectedData { + if (selectedData != nil) { + [selectedData release]; + } + selectedData = [[NSString alloc] initWithString:aselectedData]; + [tableView reloadData]; +} + +#pragma mark - UITableViewDataSource Functions + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return [dataList count]; +} + +- (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *kCellId = @"ContactDetailsLabelCell"; + UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:kCellId]; + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kCellId] autorelease]; + } + NSString* key = [[dataList allKeys] objectAtIndex:[indexPath row]]; + [cell.textLabel setText:[dataList objectForKey:key]]; + if ([key compare:selectedData]==0) { + [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; + } else { + [cell setAccessoryType:UITableViewCellAccessoryNone]; + } + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + NSString* key = [[dataList allKeys] objectAtIndex:[indexPath row]]; + [self setSelectedData:key]; + [self dismiss:key]; +} + +#pragma mark - Action Functions + +- (IBAction)onBackClick:(id)event { + [self dismiss]; +} + +@end diff --git a/Classes/ContactDetailsLabelViewController.xib b/Classes/ContactDetailsLabelViewController.xib new file mode 100644 index 000000000..dbc7d7a22 --- /dev/null +++ b/Classes/ContactDetailsLabelViewController.xib @@ -0,0 +1,354 @@ + + + + 1296 + 11E53 + 2182 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1181 + + + IBUITableView + IBUIImageView + IBUIView + IBUIButton + IBProxyObject + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {320, 460} + + + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + numpad_background.png + + + + + 290 + + + + 292 + {160, 58} + + + + _NS:9 + NO + + Add contact + + IBCocoaTouchFramework + 0 + 0 + NO + + 3 + MC41AA + + + NSImage + contact_back_over.png + + + NSImage + contact_back_default.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + {{160, 0}, {160, 58}} + + + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + contact_bar_background.png + + + + {320, 58} + + + + _NS:9 + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + 306 + {{0, 59}, {320, 401}} + + + + _NS:9 + + 3 + MCAwAA + + YES + IBCocoaTouchFramework + 0.0 + 10 + 0.0 + 0.0 + YES + 1 + 2 + 0 + YES + 44 + 10 + 10 + + + {{0, 20}, {320, 460}} + + + + + 3 + MQA + + + + IBCocoaTouchFramework + + + + + + + view + + + + 12 + + + + tableView + + + + 15 + + + + dataSource + + + + 13 + + + + delegate + + + + 14 + + + + onBackClick: + + + 7 + + 11 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + + + + 5 + + + tableView + + + 6 + + + + + + + header + + + 7 + + + background + + + 8 + + + backButton + + + 10 + + + barBackground + + + + + ContactDetailsLabelViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + + 15 + + + + + ContactDetailsLabelViewController + UIModalViewController + + onBackClick: + id + + + onBackClick: + + onBackClick: + id + + + + tableView + UITableView + + + tableView + + tableView + UITableView + + + + IBProjectSource + ./Classes/ContactDetailsLabelViewController.h + + + + UIModalViewController + UIViewController + + IBProjectSource + ./Classes/UIModalViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + + {320, 117} + {320, 117} + {5, 117} + {640, 523} + + 1181 + + diff --git a/Classes/ContactDetailsTableViewController.h b/Classes/ContactDetailsTableViewController.h index 955868e99..7eb886d69 100644 --- a/Classes/ContactDetailsTableViewController.h +++ b/Classes/ContactDetailsTableViewController.h @@ -20,11 +20,16 @@ #import #import -@interface ContactDetailsTableViewController : UITableViewController { +#import "ContactDetailsLabelViewController.h" + +@interface ContactDetailsTableViewController : UITableViewController { @private ABRecordRef contact; NSMutableArray *dataCache; ABAddressBookRef addressBook; + ContactDetailsLabelViewController *contactDetailsLabelViewController; + NSMutableArray *labelArray; + NSIndexPath *editingIndexPath; } @property (nonatomic, assign) ABRecordRef contact; diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m index d8f355650..e4cee9949 100644 --- a/Classes/ContactDetailsTableViewController.m +++ b/Classes/ContactDetailsTableViewController.m @@ -20,6 +20,41 @@ #import "ContactDetailsTableViewController.h" #import "UIContactDetailsHeader.h" #import "PhoneMainView.h" +#import "UIEditableTableViewCell.h" +#import "UIView+ModalStack.h" + +@interface Entry : NSObject + +@property (retain) NSString *key; +@property (retain) NSString *value; + +@end + +@implementation Entry + +@synthesize key; +@synthesize value; + + +#pragma mark - Lifecycle Functions + +- (id)initWithData:(NSString*)akey value:(NSString*)avalue { + self = [super init]; + if (self != NULL) { + [self setKey:akey]; + [self setValue:avalue]; + } + return self; +} + +- (void)dealloc { + [key release]; + [value release]; + [super dealloc]; +} + +@end + @implementation ContactDetailsTableViewController @@ -31,6 +66,12 @@ - (void)initContactDetailsTableViewController { addressBook = ABAddressBookCreate(); dataCache = [[NSMutableArray alloc] init]; + labelArray = [[NSMutableArray alloc] initWithObjects: + [NSString stringWithString:(NSString*)kABPersonPhoneMobileLabel], + [NSString stringWithString:(NSString*)kABPersonPhoneIPhoneLabel], + [NSString stringWithString:(NSString*)kABPersonPhoneMainLabel], + [NSString stringWithString:(NSString*)kABPersonPhoneHomeFAXLabel], + [NSString stringWithString:(NSString*)kABPersonPhoneWorkFAXLabel], nil]; } - (id)init { @@ -50,7 +91,8 @@ } - (void)dealloc { - [dataCache dealloc]; + [labelArray release]; + [dataCache release]; [super dealloc]; } @@ -64,12 +106,47 @@ - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; + contact = nil; // Clear previous selection ABAddressBookUnregisterExternalChangeCallback(addressBook, sync_toc_address_book, self); + if(contactDetailsLabelViewController != nil) { + [[[self view] superview] removeModalView:[contactDetailsLabelViewController view]]; + [editingIndexPath release]; + editingIndexPath = nil; + [contactDetailsLabelViewController release]; + contactDetailsLabelViewController = nil; + } } #pragma mark - ++ (BOOL)findAndResignFirstResponder:(UIView*)view { + if (view.isFirstResponder) { + [view resignFirstResponder]; + return YES; + } + for (UIView *subView in view.subviews) { + if ([ContactDetailsTableViewController findAndResignFirstResponder:subView]) + return YES; + } + return NO; +} + ++ (NSString*)localizeLabel:(NSString*)str { + CFStringRef lLocalizedLabel = ABAddressBookCopyLocalizedLabel((CFStringRef) str); + NSString * retStr = [NSString stringWithString:(NSString*) lLocalizedLabel]; + CFRelease(lLocalizedLabel); + return retStr; +} + +- (NSDictionary*)getLocalizedLabels { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[labelArray count]]; + for(NSString *str in labelArray) { + [dict setObject:[ContactDetailsTableViewController localizeLabel:str] forKey:str]; + } + return [dict autorelease]; +} + static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef info, void *context) { ContactDetailsTableViewController* controller = (ContactDetailsTableViewController*)context; ABRecordID recordID = ABRecordGetRecordID([controller contact]); @@ -92,10 +169,9 @@ static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef for(int i = 0; i < ABMultiValueGetCount(lMap); ++i) { CFStringRef lValue = ABMultiValueCopyValueAtIndex(lMap, i); CFStringRef lLabel = ABMultiValueCopyLabelAtIndex(lMap, i); - CFStringRef lLocalizedLabel = ABAddressBookCopyLocalizedLabel(lLabel); - [subArray addObject:[NSArray arrayWithObjects:[NSString stringWithString:(NSString*)lValue], [NSString stringWithString:(NSString*)lLocalizedLabel], nil]]; - if(lLocalizedLabel) - CFRelease(lLocalizedLabel); + Entry *entry = [[Entry alloc] initWithData:[NSString stringWithString:(NSString*)lLabel] value:[NSString stringWithString:(NSString*)lValue]]; + [subArray addObject: entry]; + [entry release]; CFRelease(lLabel); CFRelease(lValue); } @@ -109,16 +185,15 @@ static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef NSMutableArray *subArray = [[NSMutableArray alloc] init]; for(int i = 0; i < ABMultiValueGetCount(lMap); ++i) { CFDictionaryRef lDict = ABMultiValueCopyValueAtIndex(lMap, i); - if(CFDictionaryContainsKey(lDict, @"service")) { - if(CFStringCompare((CFStringRef)@"SIP", CFDictionaryGetValue(lDict, @"service"), kCFCompareCaseInsensitive) == 0) { - CFStringRef lValue = CFDictionaryGetValue(lDict, @"username"); + if(CFDictionaryContainsKey(lDict, kABPersonInstantMessageServiceKey)) { + if(CFStringCompare((CFStringRef)@"SIP", CFDictionaryGetValue(lDict, kABPersonInstantMessageServiceKey), kCFCompareCaseInsensitive) == 0) { + CFStringRef lValue = CFDictionaryGetValue(lDict, kABPersonInstantMessageUsernameKey); CFStringRef lLabel = ABMultiValueCopyLabelAtIndex(lMap, i); - CFStringRef lLocalizedLabel = ABAddressBookCopyLocalizedLabel(lLabel); - [subArray addObject:[NSArray arrayWithObjects:[NSString stringWithString:(NSString*)lValue], [NSString stringWithString:(NSString*)lLocalizedLabel], nil]]; - if(lLocalizedLabel) - CFRelease(lLocalizedLabel); + Entry *entry = [[Entry alloc] initWithData:[NSString stringWithString:(NSString*)lLabel] value:[NSString stringWithString:(NSString*)lValue]]; + [subArray addObject: entry]; + [entry release]; CFRelease(lLabel); - + CFRelease(lValue); } } CFRelease(lDict); @@ -128,62 +203,150 @@ static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef } } +- (void)addEntry:(UITableView*)tableview section:(NSInteger)section editing:(BOOL)editing animated:(BOOL)animated { + NSMutableArray *sectionArray = [dataCache objectAtIndex:section]; + NSUInteger count = [sectionArray count]; + Entry *entry = [[Entry alloc] initWithData:[labelArray objectAtIndex:0] value:@""]; + [sectionArray addObject:entry]; + + NSArray *tagInsertIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:section]]; + + // Add or remove the Add row as appropriate. + UITableViewRowAnimation animationStyle = UITableViewRowAnimationNone; + if (animated) { + animationStyle = UITableViewRowAnimationFade; + } + [self.tableView insertRowsAtIndexPaths:tagInsertIndexPath withRowAnimation:animationStyle]; +} + +- (void)removeEntry:(UITableView*)tableview section:(NSInteger)section editing:(BOOL)editing animated:(BOOL)animated { + NSMutableArray *sectionArray = [dataCache objectAtIndex:section]; + for (int i = 0; i < [sectionArray count]; ++i) { + Entry *entry = [sectionArray objectAtIndex:i]; + if(![[entry value] length]) { + [sectionArray removeObjectAtIndex:i]; + NSArray *tagInsertIndexPath = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:i inSection:section]]; + UITableViewRowAnimation animationStyle = UITableViewRowAnimationNone; + if (animated) { + animationStyle = UITableViewRowAnimationFade; + } + [self.tableView deleteRowsAtIndexPaths:tagInsertIndexPath withRowAnimation:animationStyle]; + } + } +} + #pragma mark - Property Functions - (void)setContact:(ABRecordRef)acontact { self->contact = acontact; - [[self tableView] reloadData]; + [self loadData]; + [self.tableView reloadData]; } #pragma mark - UITableViewDataSource Functions - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - [self loadData]; return [dataCache count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - NSMutableDictionary *dict = [dataCache objectAtIndex:section]; - return [dict count]; + return [[dataCache objectAtIndex:section] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ContactDetailsCell"]; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"ContactDetailsCell"]; - //[cell setSelectedBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_hightlight.png"]]]; + static NSString *kCellId = @"ContactDetailsCell"; + UIEditableTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; + if (cell == nil) { + cell = [[[UIEditableTableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:kCellId] autorelease]; + // [cell setEditingAccessoryType:UITableViewCellAccessoryNone]; + // [cell setSelectionStyle: UITableViewCellSelectionStyleNone]; + } + if ([indexPath row] < [[dataCache objectAtIndex:[indexPath section]] count]) { + NSMutableArray *sectionDict = [dataCache objectAtIndex:[indexPath section]]; + Entry *entry = [sectionDict objectAtIndex:[indexPath row]]; + [cell.textLabel setText:[ContactDetailsTableViewController localizeLabel:[entry key]]]; + NSString *value = [entry value]; + [cell.detailTextLabel setText:value]; + [cell.detailTextField setText:value]; + } + if ([indexPath section] == 0) { + [cell.detailTextField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation]; + [cell.detailTextField setPlaceholder:@"Phone number"]; + } else { + [cell.detailTextField setKeyboardType:UIKeyboardTypeEmailAddress]; + [cell.detailTextField setPlaceholder:@"SIP address"]; } - NSMutableArray *sectionDict = [dataCache objectAtIndex:[indexPath section]]; - NSArray *tuple = [sectionDict objectAtIndex:[indexPath row]]; - [cell.textLabel setText:[tuple objectAtIndex:1]]; - [cell.detailTextLabel setText:[tuple objectAtIndex:0]]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:NO]; NSMutableArray *sectionDict = [dataCache objectAtIndex:[indexPath section]]; - NSArray *tuple = [sectionDict objectAtIndex:[indexPath row]]; - - NSString *dest = [tuple objectAtIndex:0]; - if(![dest hasPrefix:@"sip:"]) - dest = [NSString stringWithFormat:@"sip:%@", [tuple objectAtIndex:0]]; - CFStringRef lDisplayName = ABRecordCopyCompositeName(contact); - NSString *displayName = [NSString stringWithString:(NSString*) lDisplayName]; - CFRelease(lDisplayName); - - // Go to dialer view - NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys: - [[[NSArray alloc] initWithObjects: dest, displayName, nil] autorelease] - , @"call:displayName:", - nil] autorelease]; - [[PhoneMainView instance] changeView:PhoneView_Dialer dict:dict]; + Entry *entry = [sectionDict objectAtIndex:[indexPath row]]; + if (![self isEditing]) { + NSString *dest = [entry value]; + if(![dest hasPrefix:@"sip:"]) + dest = [NSString stringWithFormat:@"sip:%@", [entry key]]; + CFStringRef lDisplayName = ABRecordCopyCompositeName(contact); + NSString *displayName = [NSString stringWithString:(NSString*) lDisplayName]; + CFRelease(lDisplayName); + + // Go to dialer view + NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys: + [[[NSArray alloc] initWithObjects: dest, displayName, nil] autorelease] + , @"call:displayName:", + nil] autorelease]; + [[PhoneMainView instance] changeView:PhoneView_Dialer dict:dict]; + } else { + contactDetailsLabelViewController = [[ContactDetailsLabelViewController alloc] initWithNibName:@"ContactDetailsLabelViewController" + bundle:[NSBundle mainBundle]]; + [contactDetailsLabelViewController setSelectedData:[entry key]]; + [contactDetailsLabelViewController setDataList:[self getLocalizedLabels]]; + [contactDetailsLabelViewController setModalDelegate:self]; + editingIndexPath = [indexPath copy]; + [[[self view] superview] addModalView:[contactDetailsLabelViewController view]]; + } } #pragma mark - UITableViewDelegate Functions +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + // Add entries + + if(editing) { + [self.tableView beginUpdates]; + for (int section = 0; section <[self numberOfSectionsInTableView:[self tableView]]; ++section) { + [self addEntry:self.tableView section:section editing:editing animated:animated]; + } + [self.tableView endUpdates]; + } else { + [self.tableView beginUpdates]; + for (int section = 0; section <[self numberOfSectionsInTableView:[self tableView]]; ++section) { + [self removeEntry:self.tableView section:section editing:editing animated:animated]; + } + [self.tableView endUpdates]; + } + + // Set animated + [super setEditing:editing animated:animated]; + + // Resign keyboard + if(!editing) { + [ContactDetailsTableViewController findAndResignFirstResponder:[self tableView]]; + } +} + +- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { + int last_index = [[dataCache objectAtIndex:[indexPath section]] count] - 1; + if (indexPath.row == last_index) { + return UITableViewCellEditingStyleInsert; + } + return UITableViewCellEditingStyleDelete; +} + - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if(section == 0) { UIContactDetailsHeader *headerController = [[UIContactDetailsHeader alloc] init]; @@ -193,16 +356,38 @@ static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef [headerController release]; return headerView; } else { - return [[UIView alloc] initWithFrame:CGRectZero]; + return [super tableView:tableView viewForHeaderInSection:section]; + } +} + +- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + if(section == 0) { + return [super tableView:tableView titleForHeaderInSection:section]; + } else { + return @"SIP"; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if(section == 0) + if(section == 0) { return [UIContactDetailsHeader height]; - else { - return 0.000001f; // Hack UITableView = 0 + } else { + return 22; } } + +#pragma mark - UIModalViewDeletage Functions + +- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value { + [[[self view]superview] removeModalView:[contactDetailsLabelViewController view]]; + contactDetailsLabelViewController = nil; + NSMutableArray *sectionDict = [dataCache objectAtIndex:[editingIndexPath section]]; + Entry *entry = [sectionDict objectAtIndex:[editingIndexPath row]]; + [entry setKey:value]; + [[self tableView] reloadRowsAtIndexPaths:[NSArray arrayWithObject: editingIndexPath] withRowAnimation:FALSE]; + [editingIndexPath release]; + editingIndexPath = nil; +} + @end diff --git a/Classes/ContactDetailsViewController.h b/Classes/ContactDetailsViewController.h index bf50a77b3..2cc90bcbc 100644 --- a/Classes/ContactDetailsViewController.h +++ b/Classes/ContactDetailsViewController.h @@ -22,15 +22,19 @@ #import "UICompositeViewController.h" #import "ContactDetailsTableViewController.h" +#import "UIToggleButton.h" @interface ContactDetailsViewController : UIViewController { ContactDetailsTableViewController *tableController; ABRecordRef contact; + UIToggleButton *editButton; } @property (nonatomic, assign) ABRecordRef contact; @property (nonatomic, retain) IBOutlet ContactDetailsTableViewController *tableController; +@property (nonatomic, retain) IBOutlet UIToggleButton *editButton; - (IBAction)onBackClick:(id)event; +- (IBAction)onEditClick:(id)event; @end diff --git a/Classes/ContactDetailsViewController.m b/Classes/ContactDetailsViewController.m index c025949a1..4142ce1be 100644 --- a/Classes/ContactDetailsViewController.m +++ b/Classes/ContactDetailsViewController.m @@ -24,6 +24,7 @@ @synthesize tableController; @synthesize contact; +@synthesize editButton; #pragma mark - Lifecycle Functions @@ -40,13 +41,29 @@ #pragma mark - Property Functions - - (void)setContact:(ABRecordRef)acontact { self->contact = acontact; [tableController setContact:contact]; } +#pragma mark - ViewController Functions + +- (void)viewDidLoad{ + [super viewDidLoad]; + // Set selected+over background: IB lack ! + [editButton setImage:[UIImage imageNamed:@"contact_ok_over.png"] + forState:(UIControlStateHighlighted | UIControlStateSelected)]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + if([tableController isEditing]) + [tableController setEditing:FALSE]; + [editButton setOff]; +} + + #pragma mark - UICompositeViewDelegate Functions + (UICompositeViewDescription*) compositeViewDescription { @@ -67,4 +84,8 @@ [[PhoneMainView instance] popView]; } +- (IBAction)onEditClick:(id)event { + [tableController setEditing:![tableController isEditing] animated:TRUE]; +} + @end diff --git a/Classes/ContactDetailsViewController.xib b/Classes/ContactDetailsViewController.xib index 91f6d8dd2..fa5d16d7b 100644 --- a/Classes/ContactDetailsViewController.xib +++ b/Classes/ContactDetailsViewController.xib @@ -116,6 +116,10 @@ NSImage contact_edit_over.png + + NSImage + contact_ok_default.png + NSImage contact_edit_default.png @@ -144,7 +148,6 @@ {{0, 59}, {320, 401}} - _NS:9 3 @@ -152,10 +155,15 @@ YES IBCocoaTouchFramework + 0.0 + 10 + 0.0 + 0.0 YES 1 2 0 + YES YES 44 10 @@ -202,6 +210,23 @@ 27 + + + editButton + + + + 31 + + + + onEditClick: + + + 7 + + 30 + onBackClick: @@ -319,8 +344,9 @@ ContactDetailsTableViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIToggleButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin - + com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -328,7 +354,7 @@ - 29 + 46 @@ -343,33 +369,47 @@ ContactDetailsViewController UIViewController - - onBackClick: - id - - - onBackClick: - + + id + id + + + onBackClick: id - - - tableController - ContactDetailsTableViewController - - - tableController - + + onEditClick: + id + + + + UIToggleButton + ContactDetailsTableViewController + + + + editButton + UIToggleButton + + tableController ContactDetailsTableViewController - + IBProjectSource ./Classes/ContactDetailsViewController.h + + UIToggleButton + UIButton + + IBProjectSource + ./Classes/UIToggleButton.h + + 0 @@ -385,6 +425,7 @@ {320, 117} {320, 117} {320, 117} + {320, 117} {640, 523} 1181 diff --git a/Classes/ContactsTableViewController.m b/Classes/ContactsTableViewController.m index 643fbb361..054367e77 100644 --- a/Classes/ContactsTableViewController.m +++ b/Classes/ContactsTableViewController.m @@ -155,9 +155,10 @@ static void sync_toc_address_book (ABAddressBookRef addressBook, CFDictionaryRef } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UIContactCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UIContactCell"]; + static NSString *kCellId = @"UIContactCell"; + UIContactCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { - cell = [[UIContactCell alloc] initWithIdentifier:@"UIContactCell"]; + cell = [[[UIContactCell alloc] initWithIdentifier:kCellId] autorelease]; } OrderedDictionary *subDic = [addressBookMap objectForKey: [addressBookMap keyAtIndex: [indexPath section]]]; diff --git a/Classes/FirstLoginViewController.m b/Classes/FirstLoginViewController.m index c8e2f61bf..554c5fdd8 100644 --- a/Classes/FirstLoginViewController.m +++ b/Classes/FirstLoginViewController.m @@ -37,11 +37,11 @@ } - (void)dealloc { - [loginButton dealloc]; - [siteButton dealloc]; - [usernameField dealloc]; - [passwordField dealloc]; - [waitView dealloc]; + [loginButton release]; + [siteButton release]; + [usernameField release]; + [passwordField release]; + [waitView release]; // Remove all observer [[NSNotificationCenter defaultCenter] removeObserver:self]; @@ -97,6 +97,8 @@ } - (void)viewDidLoad { + [super viewDidLoad]; + NSString* siteUrl = [[LinphoneManager instance].settingsStore objectForKey:@"first_login_view_url"]; if (siteUrl==nil) { siteUrl=@"http://www.linphone.org"; diff --git a/Classes/HistoryTableViewController.m b/Classes/HistoryTableViewController.m index 15f4bba32..72f54f72f 100644 --- a/Classes/HistoryTableViewController.m +++ b/Classes/HistoryTableViewController.m @@ -91,9 +91,10 @@ } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UIHistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UIHistoryCell"]; + static NSString *kCellId = @"UIHistoryCell"; + UIHistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { - cell = [[UIHistoryCell alloc] initWithIdentifier:@"UIHistoryCell"]; + cell = [[[UIHistoryCell alloc] initWithIdentifier:kCellId] autorelease]; } LinphoneCallLog *log = [[callLogs objectAtIndex:[indexPath row]] pointerValue]; diff --git a/Classes/HistoryViewController.m b/Classes/HistoryViewController.m index f60c676ac..4ea5cc67b 100644 --- a/Classes/HistoryViewController.m +++ b/Classes/HistoryViewController.m @@ -70,9 +70,10 @@ typedef enum _HistoryView { - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [[tableController tableView] setEditing:FALSE]; - [self changeView: History_All]; + if([tableController isEditing]) + [tableController setEditing:FALSE]; [editButton setOff]; + [self changeView: History_All]; [self.tableView reloadData]; } @@ -124,7 +125,7 @@ typedef enum _HistoryView { } - (IBAction)onEditClick:(id) event { - [[tableController tableView] setEditing:![[tableController tableView] isEditing] animated:TRUE]; + [tableController setEditing:![tableController isEditing] animated:TRUE]; } diff --git a/Classes/InCallTableViewController.m b/Classes/InCallTableViewController.m index b4bd3d8c0..533dec6fe 100644 --- a/Classes/InCallTableViewController.m +++ b/Classes/InCallTableViewController.m @@ -63,7 +63,7 @@ enum TableSection { - (void)dealloc { [callCellData removeAllObjects]; - [callCellData dealloc]; + [callCellData release]; [super dealloc]; } @@ -196,9 +196,10 @@ enum TableSection { #pragma mark - UITableViewDataSource Functions - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UICallCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UICallCell"]; + static NSString *kCellId = @"UICallCell"; + UICallCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { - cell = [[UICallCell alloc] initWithIdentifier:@"UICallCell"]; + cell = [[[UICallCell alloc] initWithIdentifier:kCellId] autorelease]; } bool inConference = indexPath.section == ConferenceSection; diff --git a/Classes/IncomingCallViewController.m b/Classes/IncomingCallViewController.m index 833ddb811..d41bc09d2 100644 --- a/Classes/IncomingCallViewController.m +++ b/Classes/IncomingCallViewController.m @@ -75,7 +75,7 @@ - (void)callUpdate:(LinphoneCall *)acall state:(LinphoneCallState)astate { if(call == acall && (astate == LinphoneCallEnd || astate == LinphoneCallError)) { - [self dismiss: IncomingCall_Aborted]; + [self dismiss: [NSNumber numberWithInt: IncomingCall_Aborted]]; } } @@ -103,12 +103,12 @@ - (IBAction)onAcceptClick:(id)event { linphone_core_accept_call([LinphoneManager getLc], call); - [self dismiss: IncomingCall_Accepted]; + [self dismiss: [NSNumber numberWithInt:IncomingCall_Accepted]]; } - (IBAction)onDeclineClick:(id)event { linphone_core_terminate_call([LinphoneManager getLc], call); - [self dismiss: IncomingCall_Decline]; + [self dismiss: [NSNumber numberWithInt:IncomingCall_Decline]]; } @end diff --git a/Classes/LinphoneUI/UICallBar.m b/Classes/LinphoneUI/UICallBar.m index e34be52e5..58cf6000c 100644 --- a/Classes/LinphoneUI/UICallBar.m +++ b/Classes/LinphoneUI/UICallBar.m @@ -99,6 +99,8 @@ #pragma mark - ViewController Functions - (void)viewDidLoad { + [super viewDidLoad]; + [pauseButton setType:UIPauseButtonType_CurrentCall call:nil]; [zeroButton setDigit:'0']; diff --git a/Classes/LinphoneUI/UICompositeViewController.m b/Classes/LinphoneUI/UICompositeViewController.m index 280bc5834..7279cef15 100644 --- a/Classes/LinphoneUI/UICompositeViewController.m +++ b/Classes/LinphoneUI/UICompositeViewController.m @@ -93,7 +93,7 @@ [stateBarView release]; [tabBarView release]; [viewControllerCache removeAllObjects]; - [currentViewDescription dealloc]; + [currentViewDescription release]; [super dealloc]; } @@ -268,7 +268,7 @@ // Dealloc old view description if(oldViewDescription != nil) { - [oldViewDescription dealloc]; + [oldViewDescription release]; } } diff --git a/Classes/LinphoneUI/UIEditableTableViewCell.h b/Classes/LinphoneUI/UIEditableTableViewCell.h new file mode 100644 index 000000000..d36708e9e --- /dev/null +++ b/Classes/LinphoneUI/UIEditableTableViewCell.h @@ -0,0 +1,28 @@ +/* UIEditableTableViewCell.h + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import + +@interface UIEditableTableViewCell : UITableViewCell { + UITextField *detailTextField; +} + +@property (nonatomic, retain) IBOutlet UITextField *detailTextField; + +@end diff --git a/Classes/LinphoneUI/UIEditableTableViewCell.m b/Classes/LinphoneUI/UIEditableTableViewCell.m new file mode 100644 index 000000000..6ae24eaaa --- /dev/null +++ b/Classes/LinphoneUI/UIEditableTableViewCell.m @@ -0,0 +1,100 @@ +/* UIEditableTableViewCell.m + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import "UIEditableTableViewCell.h" + +@implementation UIEditableTableViewCell + +@synthesize detailTextField; + + +#pragma mark - Lifecycle Functions + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + UIView *parent = [self.detailTextLabel superview]; + self.detailTextField = [[UITextField alloc] init]; + [self.detailTextField setHidden:TRUE]; + [self.detailTextField setDelegate:self]; + [self.detailTextField setClearButtonMode: UITextFieldViewModeWhileEditing]; + [self.detailTextField setContentVerticalAlignment: UIControlContentVerticalAlignmentCenter]; + + UIFont *font = [UIFont fontWithName:@"Helvetica-Bold" size:[UIFont systemFontSize]]; + [self.detailTextLabel setFont:font]; + [self.detailTextField setFont:font]; + [parent addSubview:detailTextField]; + } + return self; +} + +- (void)dealloc { + [self.detailTextField release]; + [super dealloc]; +} + + +#pragma mark - View Functions + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGRect frame; + frame.origin.x = 83; + frame.origin.y = 0; + frame.size.height = 44; + + CGRect superframe = [self frame]; + frame.size.width = superframe.size.width - frame.origin.x - 10; + [self.detailTextField setFrame:frame]; +} + + +#pragma mark - UITableViewCell Functions + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + if(editing) { + [self.detailTextField setHidden:FALSE]; + [self.detailTextLabel setHidden:TRUE]; + } else { + [self.detailTextField setHidden:TRUE]; + [self.detailTextLabel setHidden:FALSE]; + } +} + +- (void)setEditing:(BOOL)editing { + [self setEditing:editing animated:FALSE]; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; +} + + +#pragma mark - UITextFieldDelegate Functions + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +@end diff --git a/Classes/LinphoneUI/UIModalViewController.h b/Classes/LinphoneUI/UIModalViewController.h index f422b632a..929414823 100644 --- a/Classes/LinphoneUI/UIModalViewController.h +++ b/Classes/LinphoneUI/UIModalViewController.h @@ -23,16 +23,17 @@ @protocol UIModalViewDelegate -- (void)modalViewDismiss:(UIModalViewController*)controller value:(int)value; +- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value; @end @interface UIModalViewController : UIViewController { + BOOL dismissed; id modalDelegate; } - (void)setModalDelegate:(id)delegate; -- (void)dismiss:(int)value; +- (void)dismiss:(id)value; - (void)dismiss; @end diff --git a/Classes/LinphoneUI/UIModalViewController.m b/Classes/LinphoneUI/UIModalViewController.m index 6207ccbb8..e2c888f13 100644 --- a/Classes/LinphoneUI/UIModalViewController.m +++ b/Classes/LinphoneUI/UIModalViewController.m @@ -21,14 +21,52 @@ @implementation UIModalViewController -- (void)dismiss:(int)value { +- (void)initUIModalViewController { + dismissed = FALSE; +} + +- (id)init { + self = [super init]; + if (self) { + [self initUIModalViewController]; + } + return self; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + [self initUIModalViewController]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (self) { + [self initUIModalViewController]; + } + return self; +} + +- (void)dismiss:(id)value { if(modalDelegate != nil) [modalDelegate modalViewDismiss:self value:value]; + + if(!dismissed) { + dismissed = true; + [self autorelease]; + } } - (void)dismiss{ if(modalDelegate != nil) - [modalDelegate modalViewDismiss:self value:0]; + [modalDelegate modalViewDismiss:self value:nil]; + + if(!dismissed) { + dismissed = true; + [self autorelease]; + } } - (void)setModalDelegate:(id)delegate { diff --git a/Classes/LinphoneUI/UIView+ModalStack.h b/Classes/LinphoneUI/UIView+ModalStack.h new file mode 100644 index 000000000..c036ad7ff --- /dev/null +++ b/Classes/LinphoneUI/UIView+ModalStack.h @@ -0,0 +1,29 @@ +/* UIView+ModalStack.h + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import + +#import "UIModalViewController.h" + +@interface UIView (ModalStack) + +- (void)addModalView:(UIView*)view; +- (void)removeModalView:(UIView*)view; + +@end diff --git a/Classes/LinphoneUI/UIView+ModalStack.m b/Classes/LinphoneUI/UIView+ModalStack.m new file mode 100644 index 000000000..24170c292 --- /dev/null +++ b/Classes/LinphoneUI/UIView+ModalStack.m @@ -0,0 +1,49 @@ +/* UIView+ModalStack.m + * + * Copyright (C) 2012 Belledonne Comunications, Grenoble, France + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#import + +#import "UIView+ModalStack.h" + +@implementation UIView (ModalStack) + +- (void)addModalView:(UIView*)view { + CATransition* trans = [CATransition animation]; + [trans setType:kCATransitionFade]; + [trans setDuration:0.35]; + [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; + [trans setSubtype:kCATransitionFromRight]; + [self.layer addAnimation:trans forKey:@"Appear"]; + + [self addSubview:view]; + [self bringSubviewToFront:view]; +} + +- (void)removeModalView:(UIView*)view { + CATransition* trans = [CATransition animation]; + [trans setType:kCATransitionFade]; + [trans setDuration:0.35]; + [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; + [trans setSubtype:kCATransitionFromRight]; + [self.layer addAnimation:trans forKey:@"Disappear"]; + + [view removeFromSuperview]; +} + +@end diff --git a/Classes/PhoneMainView.h b/Classes/PhoneMainView.h index fab26455c..212884dea 100644 --- a/Classes/PhoneMainView.h +++ b/Classes/PhoneMainView.h @@ -43,8 +43,6 @@ typedef enum _PhoneView { @private UICompositeViewController *mainViewController; - NSMutableArray *modalControllers; - NSMutableDictionary *viewDescriptions; UIActionSheet *incomingCallActionSheet; diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index a74aea4df..0eab53ed0 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -36,6 +36,7 @@ #import "ContactDetailsViewController.h" #import "AbstractCall.h" +#import "UIView+ModalStack.h" static PhoneMainView* phoneMainViewInstance=nil; @@ -55,7 +56,6 @@ static PhoneMainView* phoneMainViewInstance=nil; // Init view descriptions viewDescriptions = [[NSMutableDictionary alloc] init]; - modalControllers = [[NSMutableArray alloc] init]; } - (id)init { @@ -90,9 +90,6 @@ static PhoneMainView* phoneMainViewInstance=nil; [viewDescriptions removeAllObjects]; [viewDescriptions release]; - [modalControllers removeAllObjects]; - [modalControllers release]; - [viewStack release]; [super dealloc]; @@ -458,7 +455,8 @@ static PhoneMainView* phoneMainViewInstance=nil; } else { IncomingCallViewController *controller = [[IncomingCallViewController alloc] init]; [controller setCall:call]; - [self addModalViewController:controller]; + [controller setModalDelegate:self]; + [[self view] addModalView:[controller view]]; } } @@ -519,37 +517,9 @@ static PhoneMainView* phoneMainViewInstance=nil; #pragma mark - Modal Functions -- (void)modalViewDismiss:(UIModalViewController*)controller value:(int)value { - [self removeModalViewController:controller]; -} - -- (void)addModalViewController:(UIModalViewController*)controller { - [controller setModalDelegate:self]; - [modalControllers insertObject:controller atIndex:0]; - - CATransition* trans = [CATransition animation]; - [trans setType:kCATransitionFade]; - [trans setDuration:0.35]; - [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; - [trans setSubtype:kCATransitionFromRight]; - [[self view].layer addAnimation:trans forKey:@"Appear"]; - - [[self view] addSubview:[controller view]]; - [[self view] bringSubviewToFront:[controller view]]; -} - -- (void)removeModalViewController:(UIModalViewController*)controller { +- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value { [controller setModalDelegate:nil]; - [modalControllers removeObject:controller]; - - CATransition* trans = [CATransition animation]; - [trans setType:kCATransitionFade]; - [trans setDuration:0.35]; - [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; - [trans setSubtype:kCATransitionFromRight]; - [[self view].layer addAnimation:trans forKey:@"Disappear"]; - - [[controller view] removeFromSuperview]; + [[self view] removeModalView:[controller view]]; } @end \ No newline at end of file diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 41e117729..8062de0a5 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -46,18 +46,35 @@ } +#pragma mark - + ++ (void)removeBackground:(UIView*)view { + if([view isKindOfClass:[UITableView class]]) { + [view setBackgroundColor:[UIColor clearColor]]; + } + for(UIView *subview in [view subviews]) { + [SettingsViewController removeBackground:subview]; + } +} + #pragma mark - ViewController Functions - (void)viewDidLoad { + [super viewDidLoad]; + settingsController.delegate = self; settingsController.settingsReaderDelegate = self; settingsController.settingsStore=[[LinphoneManager instance] settingsStore]; settingsController.showCreditsFooter = FALSE; navigationController.view.frame = self.view.frame; + [SettingsViewController removeBackground:navigationController.view]; + [SettingsViewController removeBackground:settingsController.view]; [self.view addSubview: navigationController.view]; } + + - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { diff --git a/Classes/SettingsViewController.xib b/Classes/SettingsViewController.xib index 38b76b8c3..09bf98376 100644 --- a/Classes/SettingsViewController.xib +++ b/Classes/SettingsViewController.xib @@ -11,12 +11,13 @@ 1181 + IBProxyObject + IBUINavigationController + IBUIViewController + IBUIImageView IBUINavigationBar IBUINavigationItem - IBUIViewController IBUIView - IBUINavigationController - IBProxyObject com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -37,9 +38,23 @@ 274 + + + + 292 + {320, 460} + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + numpad_background.png + + + {320, 460} - _NS:9 IBCocoaTouchFramework @@ -66,7 +81,6 @@ NO - Settings IBCocoaTouchFramework @@ -132,6 +146,9 @@ 4 + + + @@ -165,6 +182,12 @@ settingsItem + + 16 + + + background + @@ -175,6 +198,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin IASKAppSettingsViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -183,64 +207,9 @@ - 15 - - - - - IASKAppSettingsViewController - UITableViewController - - dismiss: - id - - - dismiss: - - dismiss: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/IASKAppSettingsViewController.h - - - - SettingsViewController - UIViewController - - UINavigationController - IASKAppSettingsViewController - - - - navigationController - UINavigationController - - - settingsController - IASKAppSettingsViewController - - - - IBProjectSource - ./Classes/SettingsViewController.h - - - + 17 + 0 IBCocoaTouchFramework @@ -249,6 +218,10 @@ YES 3 + + numpad_background.png + {640, 523} + 1181 diff --git a/Classes/WizardViewController.m b/Classes/WizardViewController.m index 226f61ece..c32db0ad4 100644 --- a/Classes/WizardViewController.m +++ b/Classes/WizardViewController.m @@ -93,6 +93,7 @@ UICompositeViewDescription *description = [UICompositeViewDescription alloc]; #pragma mark - ViewController Functions - (void)viewDidLoad { + [super viewDidLoad]; [self changeView:welcomeView back:FALSE animation:FALSE]; } diff --git a/Resources/contact_bar_background.png b/Resources/contact_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..e3638e1976b397c669e71c428631487b600fe13e GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^tUz4K!2~2Z_4gEmr~;2jAk8fd!i)^F=12eq*-Jcq zUD@xjb8+$VX`9TE0SY;Ix;TbdoKF7p|Gz!6P(qRe>*7CwcBVgdST0F(cfOn$^x0#o ze8y*uQ2QHS`gf%#TxQ;T*?R5U#SymKSBR)Sm1em7dBT_DR>iJBvlu*G{an^LB{Ts5 D?eH-_ literal 0 HcmV?d00001 diff --git a/Resources/contact_ok_default.png b/Resources/contact_ok_default.png new file mode 100644 index 0000000000000000000000000000000000000000..0c49ac3d5414176c98d001554a4c31ece99bb328 GIT binary patch literal 4336 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 literal 0 HcmV?d00001 diff --git a/Resources/contact_ok_over.png b/Resources/contact_ok_over.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe6248f82917e3f2aad61b5c687d3170e82ad29 GIT binary patch literal 4006 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 literal 0 HcmV?d00001 diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index bd29d5d5e..63551e32d 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -370,6 +370,14 @@ D37295DB158B3C9600D2C0C7 /* video_off_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D37295DA158B3C9600D2C0C7 /* video_off_disabled.png */; }; D37295DC158B3C9600D2C0C7 /* video_off_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D37295DA158B3C9600D2C0C7 /* video_off_disabled.png */; }; D377BBFA15A19DA6002B696B /* video_on_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D377BBF915A19DA6002B696B /* video_on_disabled.png */; }; + D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; }; + D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; }; + D378906715AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */; }; + D378906815AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */; }; + D378906A15AC37C800BD776C /* contact_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D378906915AC37C800BD776C /* contact_bar_background.png */; }; + D378906B15AC37C800BD776C /* contact_bar_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D378906915AC37C800BD776C /* contact_bar_background.png */; }; + D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */ = {isa = PBXBuildFile; fileRef = D378907415AC448A00BD776C /* UIView+ModalStack.m */; }; + D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */ = {isa = PBXBuildFile; fileRef = D378907415AC448A00BD776C /* UIView+ModalStack.m */; }; D37B96B715A1A6F20005CCD2 /* call_state_delete_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */; }; D37B96B815A1A6F20005CCD2 /* call_state_delete_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */; }; D37B96B915A1A6F20005CCD2 /* call_state_delete_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */; }; @@ -487,6 +495,12 @@ D3C2814C15A2D38D0098AA42 /* dialer_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C2814A15A2D38D0098AA42 /* dialer_selected.png */; }; D3C2815215A2D64A0098AA42 /* numpad_star_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C2815115A2D64A0098AA42 /* numpad_star_over.png */; }; D3C2815315A2D64A0098AA42 /* numpad_star_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C2815115A2D64A0098AA42 /* numpad_star_over.png */; }; + D3C6526715AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3C6526615AC1A8F0092A874 /* UIEditableTableViewCell.m */; }; + D3C6526815AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3C6526615AC1A8F0092A874 /* UIEditableTableViewCell.m */; }; + D3C6526B15AC228A0092A874 /* contact_ok_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C6526915AC228A0092A874 /* contact_ok_default.png */; }; + D3C6526C15AC228A0092A874 /* contact_ok_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C6526915AC228A0092A874 /* contact_ok_default.png */; }; + D3C6526D15AC228A0092A874 /* contact_ok_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C6526A15AC228A0092A874 /* contact_ok_over.png */; }; + D3C6526E15AC228A0092A874 /* contact_ok_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3C6526A15AC228A0092A874 /* contact_ok_over.png */; }; D3C714B3159DB84400705B8E /* toy-mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = D3C714B2159DB84400705B8E /* toy-mono.wav */; }; D3C714B4159DB84400705B8E /* toy-mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = D3C714B2159DB84400705B8E /* toy-mono.wav */; }; D3D14E7715A70EE30074A527 /* UIChatRoomHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D14E7515A70EE20074A527 /* UIChatRoomHeader.m */; }; @@ -869,7 +883,7 @@ 2214EBF212F86360002A5394 /* UIMicroButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIMicroButton.m; sourceTree = ""; }; 2218A5CE12F973450088A667 /* LogView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogView.h; sourceTree = ""; }; 2218A92212FBE1340088A667 /* FirstLoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirstLoginViewController.h; sourceTree = ""; }; - 2218A92312FBE1340088A667 /* FirstLoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FirstLoginViewController.m; sourceTree = ""; }; + 2218A92312FBE1340088A667 /* FirstLoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = FirstLoginViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 2218A92412FBE1340088A667 /* FirstLoginViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FirstLoginViewController.xib; sourceTree = ""; }; 22276E8013C73D3100210156 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavcodec.a; path = "liblinphone-sdk/apple-darwin/lib/libavcodec.a"; sourceTree = ""; }; 22276E8113C73D3100210156 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavutil.a; path = "liblinphone-sdk/apple-darwin/lib/libavutil.a"; sourceTree = ""; }; @@ -914,11 +928,11 @@ 22C7555F1317E59C007BC101 /* UIBluetoothButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIBluetoothButton.m; sourceTree = ""; }; 22C7560513265C6A007BC101 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; 22C7560613265C6A007BC101 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = ""; }; - 22C7560713265C6A007BC101 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = ""; }; + 22C7560713265C6A007BC101 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = asn1_mac.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 22C7560813265C6A007BC101 /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = ""; }; 22C7560913265C6A007BC101 /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = ""; }; 22C7560A13265C6A007BC101 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; - 22C7560B13265C6A007BC101 /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = ""; }; + 22C7560B13265C6A007BC101 /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = bn.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 22C7560C13265C6A007BC101 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = ""; }; 22C7560D13265C6A007BC101 /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = ""; }; 22C7560E13265C6A007BC101 /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = ""; }; @@ -936,7 +950,7 @@ 22C7561A13265C6A007BC101 /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = ""; }; 22C7561B13265C6A007BC101 /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = ""; }; 22C7561C13265C6A007BC101 /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = ""; }; - 22C7561D13265C6A007BC101 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = ""; }; + 22C7561D13265C6A007BC101 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = engine.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 22C7561E13265C6A007BC101 /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = ""; }; 22C7561F13265C6A007BC101 /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = ""; }; 22C7562013265C6A007BC101 /* fips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fips.h; sourceTree = ""; }; @@ -994,7 +1008,7 @@ 22E5B0AD133B5EA20044EA25 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "liblinphone-sdk/apple-darwin/lib/libssl.a"; sourceTree = ""; }; 22E5B0AE133B5EA20044EA25 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "liblinphone-sdk/apple-darwin/lib/libcrypto.a"; sourceTree = ""; }; 22F2508B107141E100AC9B3F /* DialerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialerViewController.h; sourceTree = ""; }; - 22F2508C107141E100AC9B3F /* DialerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DialerViewController.m; sourceTree = ""; }; + 22F2508C107141E100AC9B3F /* DialerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = DialerViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 22F2508D107141E100AC9B3F /* DialerViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DialerViewController.xib; sourceTree = ""; }; 22F254801073D99800AC9B3F /* ringback.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringback.wav; path = "liblinphone-sdk/apple-darwin/share/sounds/linphone/ringback.wav"; sourceTree = ""; }; 22F51EF5107FA66500F98953 /* untitled.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = untitled.plist; sourceTree = ""; }; @@ -1075,7 +1089,7 @@ D32B6E2B15A5C0800033019F /* database.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = database.sqlite; path = Resources/database.sqlite; sourceTree = ""; }; D32B6E2E15A5C0AC0033019F /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; D32B6E3615A5C2430033019F /* ChatModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChatModel.h; path = Model/ChatModel.h; sourceTree = ""; }; - D32B6E3715A5C2430033019F /* ChatModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ChatModel.m; path = Model/ChatModel.m; sourceTree = ""; }; + D32B6E3715A5C2430033019F /* ChatModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ChatModel.m; path = Model/ChatModel.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FastAddressBook.h; path = Utils/FastAddressBook.h; sourceTree = ""; }; D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FastAddressBook.m; path = Utils/FastAddressBook.m; sourceTree = ""; }; D3432A5C158A4446001C6B0B /* led_connected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = led_connected.png; path = Resources/led_connected.png; sourceTree = ""; }; @@ -1105,7 +1119,7 @@ D35406F515A47E9E007E7E81 /* button_background_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_background_default.png; path = Resources/button_background_default.png; sourceTree = ""; }; D35406F615A47E9E007E7E81 /* button_background_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_background_over.png; path = Resources/button_background_over.png; sourceTree = ""; }; D35497FB15875372000081D8 /* ContactsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsViewController.h; sourceTree = ""; }; - D35497FC15875372000081D8 /* ContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsViewController.m; sourceTree = ""; }; + D35497FC15875372000081D8 /* ContactsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ContactsViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D35497FD15875372000081D8 /* ContactsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactsViewController.xib; sourceTree = ""; }; D354980215875534000081D8 /* contacts_all_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_all_selected.png; path = Resources/contacts_all_selected.png; sourceTree = ""; }; D354980315875534000081D8 /* contacts_all_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_all_default.png; path = Resources/contacts_all_default.png; sourceTree = ""; }; @@ -1114,7 +1128,7 @@ D354980E15875608000081D8 /* contacts_add_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_add_default.png; path = Resources/contacts_add_default.png; sourceTree = ""; }; D354980F15875608000081D8 /* contacts_add_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_add_over.png; path = Resources/contacts_add_over.png; sourceTree = ""; }; D3549814158761CF000081D8 /* ContactsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsTableViewController.h; sourceTree = ""; }; - D3549815158761D0000081D8 /* ContactsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsTableViewController.m; sourceTree = ""; }; + D3549815158761D0000081D8 /* ContactsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = ContactsTableViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D354981815876FE7000081D8 /* list_details_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = list_details_default.png; path = Resources/list_details_default.png; sourceTree = ""; }; D354981915876FE7000081D8 /* list_details_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = list_details_over.png; path = Resources/list_details_over.png; sourceTree = ""; }; D354981E1587716B000081D8 /* UIStateBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIStateBar.h; sourceTree = ""; }; @@ -1153,6 +1167,12 @@ D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPauseButton.m; sourceTree = ""; }; D37295DA158B3C9600D2C0C7 /* video_off_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = video_off_disabled.png; path = Resources/video_off_disabled.png; sourceTree = ""; }; D377BBF915A19DA6002B696B /* video_on_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = video_on_disabled.png; path = Resources/video_on_disabled.png; sourceTree = ""; }; + D378906215AC373B00BD776C /* ContactDetailsLabelViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsLabelViewController.h; sourceTree = ""; }; + D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsLabelViewController.m; sourceTree = ""; }; + D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactDetailsLabelViewController.xib; sourceTree = ""; }; + D378906915AC37C800BD776C /* contact_bar_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_bar_background.png; path = Resources/contact_bar_background.png; sourceTree = ""; }; + D378907415AC448A00BD776C /* UIView+ModalStack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ModalStack.m"; sourceTree = ""; }; + D378907715AC44A300BD776C /* UIView+ModalStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ModalStack.h"; sourceTree = ""; }; D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_default.png; path = Resources/call_state_delete_default.png; sourceTree = ""; }; D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_over.png; path = Resources/call_state_delete_over.png; sourceTree = ""; }; D37C638C15AAD251009D0BAC /* contact_number_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_number_over.png; path = Resources/contact_number_over.png; sourceTree = ""; }; @@ -1165,18 +1185,18 @@ D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneCoreSettingsStore.h; sourceTree = ""; }; D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneCoreSettingsStore.m; sourceTree = ""; }; D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = ""; }; - D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = ""; }; + D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = ""; }; - D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsWebViewController.m; sourceTree = ""; }; + D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsWebViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = ""; }; D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = ""; }; D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = ""; }; D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = ""; }; - D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsReader.m; sourceTree = ""; }; + D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsReader.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = ""; }; D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = ""; }; D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = ""; }; - D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreFile.m; sourceTree = ""; }; + D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsStoreFile.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = ""; }; D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = ""; }; D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = ""; }; @@ -1188,7 +1208,7 @@ D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = ""; }; D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = ""; }; D37DC6DE1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSToggleSwitchSpecifierViewCell.h; sourceTree = ""; }; - D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSToggleSwitchSpecifierViewCell.m; sourceTree = ""; }; + D37DC6DF1594AE6F00B2A5EB /* IASKPSToggleSwitchSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKPSToggleSwitchSpecifierViewCell.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = ""; }; D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = ""; }; D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = ""; }; @@ -1241,6 +1261,10 @@ D3B9A3DE15A58C450096EA4E /* chat_send_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chat_send_over.png; path = Resources/chat_send_over.png; sourceTree = ""; }; D3C2814A15A2D38D0098AA42 /* dialer_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_selected.png; path = Resources/dialer_selected.png; sourceTree = ""; }; D3C2815115A2D64A0098AA42 /* numpad_star_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = numpad_star_over.png; path = Resources/numpad_star_over.png; sourceTree = ""; }; + D3C6526515AC1A8F0092A874 /* UIEditableTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIEditableTableViewCell.h; sourceTree = ""; }; + D3C6526615AC1A8F0092A874 /* UIEditableTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIEditableTableViewCell.m; sourceTree = ""; }; + D3C6526915AC228A0092A874 /* contact_ok_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_ok_default.png; path = Resources/contact_ok_default.png; sourceTree = ""; }; + D3C6526A15AC228A0092A874 /* contact_ok_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_ok_over.png; path = Resources/contact_ok_over.png; sourceTree = ""; }; D3C714B2159DB84400705B8E /* toy-mono.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = "toy-mono.wav"; path = "Resources/toy-mono.wav"; sourceTree = ""; }; D3D14E7415A70EE20074A527 /* UIChatRoomHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIChatRoomHeader.h; sourceTree = ""; }; D3D14E7515A70EE20074A527 /* UIChatRoomHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIChatRoomHeader.m; sourceTree = ""; }; @@ -1288,12 +1312,12 @@ D3ED3E9615872EF1006C0DE4 /* history_missed_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_missed_selected.png; path = Resources/history_missed_selected.png; sourceTree = ""; }; D3ED3E9715872EF1006C0DE4 /* history_missed_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_missed_default.png; path = Resources/history_missed_default.png; sourceTree = ""; }; D3ED3EA41587334B006C0DE4 /* HistoryTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryTableViewController.h; sourceTree = ""; }; - D3ED3EA51587334C006C0DE4 /* HistoryTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryTableViewController.m; sourceTree = ""; }; + D3ED3EA51587334C006C0DE4 /* HistoryTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = HistoryTableViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D3ED3EB2158738FA006C0DE4 /* HistoryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryViewController.xib; sourceTree = ""; }; D3ED3EB515873928006C0DE4 /* HistoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryViewController.h; sourceTree = ""; }; - D3ED3EB615873929006C0DE4 /* HistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryViewController.m; sourceTree = ""; }; + D3ED3EB615873929006C0DE4 /* HistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = HistoryViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D3F26BEA159869A6005F9CAB /* AbstractCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AbstractCall.h; path = Utils/AbstractCall.h; sourceTree = ""; }; - D3F26BEB159869A6005F9CAB /* AbstractCall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AbstractCall.m; path = Utils/AbstractCall.m; sourceTree = ""; }; + D3F26BEB159869A6005F9CAB /* AbstractCall.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = AbstractCall.m; path = Utils/AbstractCall.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; D3F26BEE15986B71005F9CAB /* IncomingCallViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IncomingCallViewController.h; sourceTree = ""; }; D3F26BEF15986B71005F9CAB /* IncomingCallViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IncomingCallViewController.m; sourceTree = ""; }; D3F26BF015986B72005F9CAB /* IncomingCallViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IncomingCallViewController.xib; sourceTree = ""; }; @@ -1479,6 +1503,9 @@ 22E0A820111C44E100B04932 /* ConsoleViewController.h */, 22E0A81F111C44E100B04932 /* ConsoleViewController.m */, 22E0A81E111C44E100B04932 /* ConsoleViewController.xib */, + D378906215AC373B00BD776C /* ContactDetailsLabelViewController.h */, + D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */, + D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */, D37C639915AADEF4009D0BAC /* ContactDetailsTableViewController.h */, D37C639A15AADEF5009D0BAC /* ContactDetailsTableViewController.m */, D3128FDE15AABC7E00A2147A /* ContactDetailsViewController.h */, @@ -1784,6 +1811,8 @@ D37C639415AADDAF009D0BAC /* UIContactDetailsHeader.xib */, 2248E90C12F7E4CF00220D9C /* UIDigitButton.h */, 2248E90D12F7E4CF00220D9C /* UIDigitButton.m */, + D3C6526515AC1A8F0092A874 /* UIEditableTableViewCell.h */, + D3C6526615AC1A8F0092A874 /* UIEditableTableViewCell.m */, 22BB1A67132FF16A005CD7AA /* UIEraseButton.h */, 22BB1A68132FF16A005CD7AA /* UIEraseButton.m */, 2214EB8712F84EBB002A5394 /* UIHangUpButton.h */, @@ -1815,6 +1844,8 @@ D3196D3D15A32BD8007FEEBA /* UITransferButton.m */, 340751E5150F38FC00B89C47 /* UIVideoButton.h */, 340751E6150F38FD00B89C47 /* UIVideoButton.m */, + D378907715AC44A300BD776C /* UIView+ModalStack.h */, + D378907415AC448A00BD776C /* UIView+ModalStack.m */, ); path = LinphoneUI; sourceTree = ""; @@ -2042,10 +2073,13 @@ D31AAF62159B5B6E002C6B02 /* conference_over.png */, D3128FE715AABE4E00A2147A /* contact_back_default.png */, D3128FE815AABE4E00A2147A /* contact_back_over.png */, + D378906915AC37C800BD776C /* contact_bar_background.png */, D3128FE915AABE4E00A2147A /* contact_edit_default.png */, D3128FEA15AABE4E00A2147A /* contact_edit_over.png */, D37C638D15AAD251009D0BAC /* contact_number.png */, D37C638C15AAD251009D0BAC /* contact_number_over.png */, + D3C6526915AC228A0092A874 /* contact_ok_default.png */, + D3C6526A15AC228A0092A874 /* contact_ok_over.png */, D354980E15875608000081D8 /* contacts_add_default.png */, D354980F15875608000081D8 /* contacts_add_over.png */, D354980315875534000081D8 /* contacts_all_default.png */, @@ -2643,6 +2677,10 @@ D37C638E15AAD251009D0BAC /* contact_number_over.png in Resources */, D37C639015AAD251009D0BAC /* contact_number.png in Resources */, D37C639715AADDAF009D0BAC /* UIContactDetailsHeader.xib in Resources */, + D3C6526B15AC228A0092A874 /* contact_ok_default.png in Resources */, + D3C6526D15AC228A0092A874 /* contact_ok_over.png in Resources */, + D378906715AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */, + D378906A15AC37C800BD776C /* contact_bar_background.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2869,6 +2907,10 @@ D37C638F15AAD251009D0BAC /* contact_number_over.png in Resources */, D37C639115AAD251009D0BAC /* contact_number.png in Resources */, D37C639815AADDAF009D0BAC /* UIContactDetailsHeader.xib in Resources */, + D3C6526C15AC228A0092A874 /* contact_ok_default.png in Resources */, + D3C6526E15AC228A0092A874 /* contact_ok_over.png in Resources */, + D378906815AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */, + D378906B15AC37C800BD776C /* contact_bar_background.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2954,6 +2996,9 @@ D3128FE115AABC7E00A2147A /* ContactDetailsViewController.m in Sources */, D37C639515AADDAF009D0BAC /* UIContactDetailsHeader.m in Sources */, D37C639B15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */, + D3C6526715AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */, + D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */, + D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3036,6 +3081,9 @@ D3128FE215AABC7E00A2147A /* ContactDetailsViewController.m in Sources */, D37C639615AADDAF009D0BAC /* UIContactDetailsHeader.m in Sources */, D37C639C15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */, + D3C6526815AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */, + D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */, + D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };