From 6d669665c90331eb2b00031e6da3eb79227592f9 Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Wed, 27 Jun 2012 18:06:59 +0200 Subject: [PATCH] Add multi call support Call details --- Classes/DialerViewController.h | 14 +- Classes/DialerViewController.m | 44 ++- Classes/DialerViewController.xib | 208 ++++++++-- Classes/HistoryTableViewController.h | 2 + Classes/HistoryTableViewController.m | 14 +- Classes/HistoryViewController.h | 5 +- Classes/HistoryViewController.m | 7 + Classes/InCallTableViewController.h | 37 ++ Classes/InCallTableViewController.m | 277 +++++++++++++ Classes/InCallViewController.h | 40 +- Classes/InCallViewController.m | 444 ++++----------------- Classes/InCallViewController.xib | 82 +++- Classes/LinphoneUI/UICallBar.h | 10 +- Classes/LinphoneUI/UICallBar.m | 48 ++- Classes/LinphoneUI/UICallBar.xib | 186 +++++++-- Classes/LinphoneUI/UICallButton.m | 1 - Classes/LinphoneUI/UICallCell.h | 39 +- Classes/LinphoneUI/UICallCell.m | 154 ++++++-- Classes/LinphoneUI/UICallCell.xib | 543 ++++++++++++++++++-------- Classes/LinphoneUI/UIHistoryCell.m | 6 + Classes/LinphoneUI/UIMainBar.m | 7 +- Classes/LinphoneUI/UIToggleButton.h | 13 +- Classes/LinphoneUI/UIToggleButton.m | 16 + Resources/add-call-actif.png | Bin 7123 -> 0 bytes Resources/add-call-over.png | Bin 7259 -> 0 bytes Resources/add_call_more_default.png | Bin 0 -> 3587 bytes Resources/add_call_more_disable.png | Bin 0 -> 3465 bytes Resources/add_call_more_over.png | Bin 0 -> 3554 bytes Resources/cadenas-barre.png | Bin 0 -> 1876 bytes Resources/cadenas-interrogation.png | Bin 0 -> 1658 bytes Resources/cadenas.png | Bin 0 -> 1340 bytes Resources/finir-conference-actif.png | Bin 0 -> 6850 bytes Resources/finir-conference-over.png | Bin 0 -> 4511 bytes Resources/options_default.png | Bin 0 -> 7422 bytes Resources/options_disabled.png | Bin 0 -> 7265 bytes Resources/options_over.png | Bin 0 -> 7447 bytes Resources/ring-champ-numero-actif.png | Bin 0 -> 2431 bytes Resources/start-conference-actif.png | Bin 0 -> 8390 bytes Resources/start-conference-over.png | Bin 0 -> 5518 bytes linphone.xcodeproj/project.pbxproj | 104 ++++- 40 files changed, 1567 insertions(+), 734 deletions(-) create mode 100644 Classes/InCallTableViewController.h create mode 100644 Classes/InCallTableViewController.m delete mode 100644 Resources/add-call-actif.png delete mode 100644 Resources/add-call-over.png create mode 100644 Resources/add_call_more_default.png create mode 100644 Resources/add_call_more_disable.png create mode 100644 Resources/add_call_more_over.png create mode 100644 Resources/cadenas-barre.png create mode 100644 Resources/cadenas-interrogation.png create mode 100644 Resources/cadenas.png create mode 100644 Resources/finir-conference-actif.png create mode 100644 Resources/finir-conference-over.png create mode 100644 Resources/options_default.png create mode 100644 Resources/options_disabled.png create mode 100644 Resources/options_over.png create mode 100644 Resources/ring-champ-numero-actif.png create mode 100644 Resources/start-conference-actif.png create mode 100644 Resources/start-conference-over.png diff --git a/Classes/DialerViewController.h b/Classes/DialerViewController.h index 6fd7025d7..3f9083caf 100644 --- a/Classes/DialerViewController.h +++ b/Classes/DialerViewController.h @@ -26,9 +26,11 @@ @private //Buttons UITextField* addressField; - UIButton* addContact; + UIButton* addContactButton; + UIButton* cancelButton; UIEraseButton* eraseButton; UICallButton* callButton; + UICallButton* addCallButton; //Key pad UIDigitButton* oneButton; @@ -48,8 +50,10 @@ - (void)setAddress:(NSString*) address; @property (nonatomic, retain) IBOutlet UITextField* addressField; -@property (nonatomic, retain) IBOutlet UIButton* addContact; -@property (nonatomic, retain) IBOutlet UIButton* callButton; +@property (nonatomic, retain) IBOutlet UIButton* addContactButton; +@property (nonatomic, retain) IBOutlet UICallButton* callButton; +@property (nonatomic, retain) IBOutlet UICallButton* addCallButton; +@property (nonatomic, retain) IBOutlet UIButton* cancelButton; @property (nonatomic, retain) IBOutlet UIEraseButton* eraseButton; @property (nonatomic, retain) IBOutlet UIButton* oneButton; @property (nonatomic, retain) IBOutlet UIButton* twoButton; @@ -64,7 +68,9 @@ @property (nonatomic, retain) IBOutlet UIButton* zeroButton; @property (nonatomic, retain) IBOutlet UIButton* hashButton; -- (IBAction)onAddContact: (id) event; +- (IBAction)onAddContactClick: (id) event; +- (IBAction)onCancelClick: (id) event; +- (IBAction)onAddCallClick: (id) event; - (IBAction)onAddressChange: (id)sender; @end diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m index 39b91711d..c66283bf3 100644 --- a/Classes/DialerViewController.m +++ b/Classes/DialerViewController.m @@ -31,7 +31,9 @@ @implementation DialerViewController @synthesize addressField; -@synthesize addContact; +@synthesize addContactButton; +@synthesize cancelButton; +@synthesize addCallButton; @synthesize callButton; @synthesize eraseButton; @@ -52,12 +54,27 @@ return [super initWithNibName:@"DialerViewController" bundle:[NSBundle mainBundle]]; } -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; +- (void)viewWillAppear:(BOOL)animated { // [[LinphoneManager instance] setRegistrationDelegate:self]; //TODO //[mMainScreenWithVideoPreview showPreview:YES]; + + if([LinphoneManager isLcReady]) { + LinphoneCore *lc = [LinphoneManager getLc]; + if(linphone_core_get_calls_nb(lc) > 0) { + [addCallButton setHidden:false]; + [callButton setHidden:true]; + [cancelButton setHidden:false]; + [addContactButton setHidden:true]; + } else { + [addCallButton setHidden:true]; + [callButton setHidden:false]; + [cancelButton setHidden:true]; + [addContactButton setHidden:false]; + } + } + [super viewWillAppear:animated]; } - (void)viewDidLoad { @@ -76,6 +93,7 @@ [starButton initWithNumber:'*' addressField:addressField dtmf:false]; [hashButton initWithNumber:'#' addressField:addressField dtmf:false]; [callButton initWithAddress:addressField]; + [addCallButton initWithAddress:addressField]; [eraseButton initWithAddressField:addressField]; } @@ -85,9 +103,11 @@ - (void)dealloc { [addressField release]; - [addContact release]; + [addContactButton release]; + [cancelButton release]; [eraseButton release]; [callButton release]; + [addCallButton release]; [oneButton release]; [twoButton release]; @@ -111,19 +131,29 @@ return YES; } -- (IBAction)onAddContact: (id) event { +- (IBAction)onAddContactClick: (id) event { + +} + +- (IBAction)onCancelClick: (id) event { + [[LinphoneManager instance] changeView:PhoneView_InCall]; +} + +- (IBAction)onAddCallClick: (id) event { } - (IBAction)onAddressChange: (id)sender { if([[addressField text] length] > 0) { - [addContact setEnabled:TRUE]; + [addContactButton setEnabled:TRUE]; [eraseButton setEnabled:TRUE]; [callButton setEnabled:TRUE]; + [addCallButton setEnabled:TRUE]; } else { - [addContact setEnabled:FALSE]; + [addContactButton setEnabled:FALSE]; [eraseButton setEnabled:FALSE]; [callButton setEnabled:FALSE]; + [addCallButton setEnabled:FALSE]; } } diff --git a/Classes/DialerViewController.xib b/Classes/DialerViewController.xib index d306d0e8d..5063349d6 100644 --- a/Classes/DialerViewController.xib +++ b/Classes/DialerViewController.xib @@ -518,13 +518,13 @@ 288 YES - + 292 {106, 69} - + _NS:9 NO IBCocoaTouchFramework @@ -534,15 +534,15 @@ NO NO - + NSImage add-contact-over.png - + NSImage add-contact-inactif.png - + NSImage add-contact-actif.png @@ -552,13 +552,34 @@ - + + + -2147483356 + {106, 69} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + NO + NO + + + + + + + + 292 {{106, 0}, {108, 69}} - + _NS:9 NO IBCocoaTouchFramework @@ -583,6 +604,37 @@ + + + -2147483356 + {{106, 0}, {108, 69}} + + + + _NS:9 + NO + IBCocoaTouchFramework + NO + 0 + 0 + NO + NO + + + NSImage + add_call_more_over.png + + + NSImage + add_call_more_disable.png + + + NSImage + add_call_more_default.png + + + + 292 @@ -622,7 +674,7 @@ {{0, 305}, {320, 69}} - + _NS:9 3 @@ -751,14 +803,6 @@ 202 - - - callButton - - - - 203 - eightButton @@ -777,11 +821,35 @@ - addContact + addContactButton + + + + 225 + + + + cancelButton - 206 + 226 + + + + addCallButton + + + + 227 + + + + callButton + + + + 231 @@ -802,12 +870,30 @@ - onAddContact: + onCancelClick: 7 - 187 + 229 + + + + onAddCallClick: + + + 7 + + 228 + + + + onAddContactClick: + + + 7 + + 230 @@ -972,9 +1058,11 @@ YES - + + + toolBar @@ -983,19 +1071,31 @@ 183 - addContact + cancelButton 185 - backspace + backspaceButton 184 - call + addCallButton + + + 222 + + + addContactButton + + + 224 + + + callButton @@ -1021,6 +1121,11 @@ 185.CustomClassName 185.IBPluginDependency 185.IBUIButtonInspectorSelectedStateConfigurationMetadataKey + 222.IBPluginDependency + 222.IBUIButtonInspectorSelectedStateConfigurationMetadataKey + 224.CustomClassName + 224.IBPluginDependency + 224.IBUIButtonInspectorSelectedStateConfigurationMetadataKey 29.CustomClassName 29.IBPluginDependency 30.CustomClassName @@ -1075,10 +1180,15 @@ UICallButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin - + UIEraseButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + UICallButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIDigitButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIDigitButton @@ -1130,7 +1240,7 @@ - 221 + 231 @@ -1142,41 +1252,57 @@ YES YES - onAddContact: + onAddCallClick: + onAddContactClick: onAddressChange: + onCancelClick: YES id id + id + id YES YES - onAddContact: + onAddCallClick: + onAddContactClick: onAddressChange: + onCancelClick: YES - onAddContact: + onAddCallClick: + id + + + onAddContactClick: id onAddressChange: id + + onCancelClick: + id + YES YES - addContact + addCallButton + addContactButton addressField callButton + cancelButton eightButton eraseButton fiveButton @@ -1193,8 +1319,10 @@ YES + UICallButton UIButton UITextField + UICallButton UIButton UIButton UIEraseButton @@ -1215,9 +1343,11 @@ YES YES - addContact + addCallButton + addContactButton addressField callButton + cancelButton eightButton eraseButton fiveButton @@ -1235,7 +1365,11 @@ YES - addContact + addCallButton + UICallButton + + + addContactButton UIButton @@ -1244,6 +1378,10 @@ callButton + UICallButton + + + cancelButton UIButton @@ -1389,6 +1527,9 @@ add-contact-actif.png add-contact-inactif.png add-contact-over.png + add_call_more_default.png + add_call_more_disable.png + add_call_more_over.png appeler-actif.png appeler-disabled.png appeler-over.png @@ -1429,6 +1570,9 @@ {214, 138} {214, 138} {214, 138} + {214, 138} + {214, 138} + {214, 138} {213, 138} {213, 138} {213, 138} diff --git a/Classes/HistoryTableViewController.h b/Classes/HistoryTableViewController.h index 1d3add2c2..09f55b9e7 100644 --- a/Classes/HistoryTableViewController.h +++ b/Classes/HistoryTableViewController.h @@ -25,5 +25,7 @@ } - (void) toggleEditMode; +- (void) enterEditMode; +- (void) exitEditMode; @end diff --git a/Classes/HistoryTableViewController.m b/Classes/HistoryTableViewController.m index f96b3d10d..abef2df6c 100644 --- a/Classes/HistoryTableViewController.m +++ b/Classes/HistoryTableViewController.m @@ -30,8 +30,6 @@ return self; } -#pragma mark Table view methods - - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } @@ -104,6 +102,18 @@ [(UITableView*)[self view] reloadData]; } +- (void) enterEditMode { + if(!editMode) { + [self toggleEditMode]; + } +} + +- (void) exitEditMode { + if(editMode) { + [self toggleEditMode]; + } +} + - (void)dealloc { [super dealloc]; } diff --git a/Classes/HistoryViewController.h b/Classes/HistoryViewController.h index e7158b1bc..10b329ab0 100644 --- a/Classes/HistoryViewController.h +++ b/Classes/HistoryViewController.h @@ -20,6 +20,7 @@ #import #import "HistoryTableViewController.h" +#import "UIToggleButton.h" @interface HistoryViewController : UIViewController { @private @@ -28,7 +29,7 @@ UIButton *allButton; UIButton *missedButton; - UIButton *editButton; + UIToggleButton *editButton; } @property (nonatomic, retain) IBOutlet HistoryTableViewController* tableController; @@ -36,7 +37,7 @@ @property (nonatomic, retain) IBOutlet UIButton* allButton; @property (nonatomic, retain) IBOutlet UIButton* missedButton; -@property (nonatomic, retain) IBOutlet UIButton* editButton; +@property (nonatomic, retain) IBOutlet UIToggleButton* editButton; - (IBAction)onAllClick:(id) event; - (IBAction)onMissedClick:(id) event; diff --git a/Classes/HistoryViewController.m b/Classes/HistoryViewController.m index 0a1f8c4e8..261e2fb3f 100644 --- a/Classes/HistoryViewController.m +++ b/Classes/HistoryViewController.m @@ -78,6 +78,13 @@ typedef enum _HistoryView { [tableController toggleEditMode]; } + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [tableController exitEditMode]; + [editButton setOff]; +} + - (void)dealloc { [allButton release]; [missedButton release]; diff --git a/Classes/InCallTableViewController.h b/Classes/InCallTableViewController.h new file mode 100644 index 000000000..518cf947a --- /dev/null +++ b/Classes/InCallTableViewController.h @@ -0,0 +1,37 @@ +/* InCallTableViewController.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 "UICallCell.h" + +#include "linphonecore.h" + +@interface InCallTableViewController : UITableViewController { + NSMutableDictionary* callCellData; + NSTimer *updateTime; +} + +- (void)removeCallData:(LinphoneCall*) call; +- (UICallCellData*)addCallData:(LinphoneCall*) call; +- (UICallCellData*)getCallData:(LinphoneCall*) call; +- (void)minimizeAll; +- (void)maximizeAll; + +@end diff --git a/Classes/InCallTableViewController.m b/Classes/InCallTableViewController.m new file mode 100644 index 000000000..f5db69eeb --- /dev/null +++ b/Classes/InCallTableViewController.m @@ -0,0 +1,277 @@ +/* InCallTableViewController.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 "InCallTableViewController.h" +#import "UICallCell.h" +#import "LinphoneManager.h" + +#include "private.h" + +@implementation InCallTableViewController + +- (void)myInit { + self->callCellData = [[NSMutableDictionary alloc] init]; +} + +- (id)init{ + self = [super init]; + if (self) { + [self myInit]; + } + return self; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + [self myInit]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (self) { + [self myInit]; + } + return self; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + updateTime = [NSTimer scheduledTimerWithTimeInterval:1 + target:self + selector:@selector(update) + userInfo:nil + repeats:YES]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + if (updateTime != nil) { + [updateTime invalidate]; + updateTime = nil; + } +} + ++ (bool)isInConference:(LinphoneCall*) call { + if (!call) + return false; + return linphone_call_get_current_params(call)->in_conference; +} + ++ (int)callCount:(LinphoneCore*) lc { + int count = 0; + const MSList* calls = linphone_core_get_calls(lc); + + while (calls != 0) { + if (![InCallTableViewController isInConference:((LinphoneCall*)calls->data)]) { + count++; + } + calls = calls->next; + } + return count; +} + ++ (LinphoneCall*)retrieveCallAtIndex: (NSInteger) index inConference:(bool) conf{ + const MSList* calls = linphone_core_get_calls([LinphoneManager getLc]); + + if (!conf && linphone_core_get_conference_size([LinphoneManager getLc])) + index--; + + while (calls != 0) { + if ([InCallTableViewController isInConference:(LinphoneCall*)calls->data] == conf) { + if (index == 0) + break; + index--; + } + calls = calls->next; + } + + if (calls == 0) { + ms_error("Cannot find call with index %d (in conf: %d)", index, conf); + return nil; + } else { + return (LinphoneCall*)calls->data; + } +} + + +- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UICallCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UICallCell"]; + if (cell == nil) { + cell = [[UICallCell alloc] init]; + } + + LinphoneCore* lc = [LinphoneManager getLc]; + LinphoneCall* call = [InCallTableViewController retrieveCallAtIndex:indexPath.row inConference:NO]; + [cell setData:[self addCallData:call]]; + [cell update]; + + if ([indexPath row] == 0) { + [cell firstCell]; + } else { + [cell otherCell]; + } + + if (linphone_core_get_calls_nb(lc) > 1) { + tableView.scrollEnabled = TRUE; + } else { + tableView.scrollEnabled = FALSE; + } + return cell; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + LinphoneCore* lc = [LinphoneManager getLc]; + + return [InCallTableViewController callCount:lc] + (int)(linphone_core_get_conference_size(lc) > 0); +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; + LinphoneCore* lc = [LinphoneManager getLc]; + int count = 0; + + if ([InCallTableViewController callCount:lc] > 0) + count++; + + if (linphone_core_get_conference_size([LinphoneManager getLc]) > 0) + count ++; + + return count; +} + +- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + return nil; +} + +- (NSString*)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section +{ + return nil; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + LinphoneCall* call = [InCallTableViewController retrieveCallAtIndex:indexPath.row inConference:NO]; + UICallCellData* data = [callCellData objectForKey:[NSValue valueWithPointer:call]]; + if(data != nil &&data->minimize) + return [UICallCell getMinimizedHeight]; + return [UICallCell getMaximizedHeight]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:NO]; + + LinphoneCore* lc = [LinphoneManager getLc]; + + bool inConf = (indexPath.row == 0 && linphone_core_get_conference_size(lc) > 0); + + LinphoneCall* selectedCall = [InCallTableViewController retrieveCallAtIndex:indexPath.row inConference:inConf]; + + if (inConf) { + if (linphone_core_is_in_conference(lc)) + return; + LinphoneCall* current = linphone_core_get_current_call(lc); + if (current) + linphone_core_pause_call(lc, current); + linphone_core_enter_conference([LinphoneManager getLc]); + } else if (selectedCall) { + if (linphone_core_is_in_conference(lc)) { + linphone_core_leave_conference(lc); + } + if(!linphone_core_sound_resources_locked(lc)) { + linphone_core_resume_call([LinphoneManager getLc], selectedCall); + } + } +} + +- (void)removeCallData:(LinphoneCall*) call { + // Remove data associated with the call + if(call != NULL) { + NSValue *value = [NSValue valueWithPointer:call]; + UICallCellData * data = [callCellData objectForKey:value]; + if(data == nil) { + [callCellData removeObjectForKey:value]; + } + } +} + +- (UICallCellData*)addCallData:(LinphoneCall*) call { + // Handle data associated with the call + UICallCellData * data = nil; + if(call != NULL) { + NSValue *value = [NSValue valueWithPointer:call]; + data = [callCellData objectForKey:value]; + if(data == nil) { + data = [[UICallCellData alloc] init:call]; + [callCellData setObject:data forKey:value]; + } + } + return data; +} + +- (UICallCellData*)getCallData:(LinphoneCall*) call { + // Handle data associated with the call + UICallCellData * data = nil; + if(call != NULL) { + NSValue *value = [NSValue valueWithPointer:call]; + data = [callCellData objectForKey:value]; + } + return data; +} + +- (void)update { + UITableView *tableView = [self tableView]; + for (int section = 0; section < [tableView numberOfSections]; section++) { + for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) { + NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section]; + UICallCell* cell = (UICallCell*) [tableView cellForRowAtIndexPath:cellPath]; + [cell update]; + } + } +} + +- (void)dealloc { + [callCellData removeAllObjects]; + [callCellData dealloc]; + [super dealloc]; +} + +- (void)minimizeAll { + for(id key in callCellData) { + UICallCellData *data = [callCellData objectForKey:key]; + data->minimize = true; + } + [[self tableView] reloadData]; +} + +- (void)maximizeAll { + for(id key in callCellData) { + UICallCellData *data = [callCellData objectForKey:key]; + data->minimize = false; + } + [[self tableView] reloadData]; +} + + +@end diff --git a/Classes/InCallViewController.h b/Classes/InCallViewController.h index 8234edf1a..651baac8e 100644 --- a/Classes/InCallViewController.h +++ b/Classes/InCallViewController.h @@ -18,20 +18,18 @@ */ #import -#import -#import "ConferenceCallDetailView.h" -#import "UIVideoButton.h" #import "VideoZoomHandler.h" -#import "UILinphone.h" +#import "UICamSwitch.h" #import "CallDelegate.h" -#include "linphonecore.h" +#import "InCallTableViewController.h" @class VideoViewController; -@interface InCallViewController : UIViewController { +@interface InCallViewController : UIViewController { + InCallTableViewController* callTableController; UITableView* callTableView; UIView* videoGroup; @@ -41,38 +39,20 @@ UIView* testVideoView; #endif UICamSwitch* videoCameraSwitch; + UIActivityIndicatorView* videoWaitingForFirstImage; - NSTimer *durationRefreasher; - NSTimer *glowingTimer; - - float glow; - NSIndexPath* activePath; - - ABPeoplePickerNavigationController* myPeoplePickerController; - - UITableViewCell* activeCallCell; - - VideoViewController* mVideoViewController; - ConferenceCallDetailView* conferenceDetail; - BOOL mVideoShown; - BOOL mVideoIsPending; - - UIImage* verified, *unverified; - UIActionSheet* visibleActionSheet; - NSTimer* hideControlsTimer; + + BOOL videoShown; VideoZoomHandler* videoZoomHandler; + + UIActionSheet* visibleActionSheet; } -+ (LinphoneCall*)retrieveCallAtIndex: (NSInteger) index inConference:(bool) conf; -//+ (void)updateCellImageView:(UIImageView*)imageView Label:(UILabel*)label DetailLabel:(UILabel*)detailLabel AndAccessoryView:(UIView*)accessoryView withCall:(LinphoneCall*) call; - -@property (nonatomic, retain) IBOutlet UIViewController* conferenceDetail; +@property (nonatomic, retain) IBOutlet InCallTableViewController* callTableController; @property (nonatomic, retain) IBOutlet UITableView* callTableView; -@property (nonatomic, retain) IBOutlet VideoViewController* videoViewController; - @property (nonatomic, retain) IBOutlet UIView* videoGroup; @property (nonatomic, retain) IBOutlet UIView* videoView; #ifdef TEST_VIDEO_VIEW_CHANGE diff --git a/Classes/InCallViewController.m b/Classes/InCallViewController.m index 4b39572f3..e7b625855 100644 --- a/Classes/InCallViewController.m +++ b/Classes/InCallViewController.m @@ -33,11 +33,11 @@ const NSInteger SECURE_BUTTON_TAG=5; + @implementation InCallViewController -@synthesize conferenceDetail; +@synthesize callTableController; @synthesize callTableView; -@synthesize videoViewController; @synthesize videoGroup; @synthesize videoView; @@ -52,32 +52,6 @@ const NSInteger SECURE_BUTTON_TAG=5; return [super initWithNibName:@"InCallViewController" bundle:[NSBundle mainBundle]]; } -+ (bool)isInConference:(LinphoneCall*) call { - if (!call) - return false; - return linphone_call_get_current_params(call)->in_conference; -} - -+ (int)callCount:(LinphoneCore*) lc { - int count = 0; - const MSList* calls = linphone_core_get_calls(lc); - - while (calls != 0) { - if (![InCallViewController isInConference:((LinphoneCall*)calls->data)]) { - count++; - } - calls = calls->next; - } - return count; -} - -void addAnimationFadeTransition(UIView* view, float duration) { - CATransition* animation = [CATransition animation]; - animation.type = kCATransitionFromBottom; // kCATransitionFade; - animation.duration = duration; - [view.layer addAnimation:animation forKey:nil]; -} - - (void)orientationChanged: (NSNotification*) notif { int oldLinphoneOrientation = linphone_core_get_device_rotation([LinphoneManager getLc]); UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; @@ -163,7 +137,7 @@ void addAnimationFadeTransition(UIView* view, float duration) { [videoCameraSwitch setAlpha:0.0]; [UIView commitAnimations]; - if([[LinphoneManager instance] currentView] == PhoneView_InCall) + if([[LinphoneManager instance] currentView] == PhoneView_InCall && videoShown) [[LinphoneManager instance] showTabBar: false]; if (hideControlsTimer) { @@ -186,6 +160,7 @@ void addAnimationFadeTransition(UIView* view, float duration) { #endif - (void)enableVideoDisplay:(BOOL)animation { + videoShown = true; [self orientationChanged:nil]; [videoZoomHandler resetZoom]; @@ -228,6 +203,7 @@ void addAnimationFadeTransition(UIView* view, float duration) { } - (void)disableVideoDisplay:(BOOL)animation { + videoShown = false; if(animation) { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0]; @@ -264,8 +240,6 @@ void addAnimationFadeTransition(UIView* view, float duration) { /* Update in call view buttons (visibility, state, ...) and call duration text. This is called periodically. The fullUpdate boolean is set when called after an event (call state change for instance) */ - (void)updateUIFromLinphoneState:(BOOL) fullUpdate { - activeCallCell = nil; - // check LinphoneCore is initialized LinphoneCore* lc = nil; if([LinphoneManager isLcReady]) @@ -277,12 +251,13 @@ void addAnimationFadeTransition(UIView* view, float duration) { [callTableView reloadData]; // update conference details view if displayed - if (self.presentedViewController == conferenceDetail) { + //TODO + /*if (self.presentedViewController == conferenceDetail) { if (!linphone_core_is_in_conference(lc)) [self dismissModalViewControllerAnimated:YES]; else [conferenceDetail.table reloadData]; - } + }*/ } // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. @@ -296,8 +271,6 @@ void addAnimationFadeTransition(UIView* view, float duration) { /*[mute initWithOnImage:[UIImage imageNamed:@"micro_inverse.png"] offImage:[UIImage imageNamed:@"micro.png"] debugName:"MUTE button"]; [speaker initWithOnImage:[UIImage imageNamed:@"HP_inverse.png"] offImage:[UIImage imageNamed:@"HP.png"] debugName:"SPEAKER button"]; */ - verified = [[UIImage imageNamed:@"secured.png"] retain]; - unverified = [[UIImage imageNamed:@"unverified.png"] retain]; //Dialer init /*[zero initWithNumber:'0']; @@ -317,6 +290,8 @@ void addAnimationFadeTransition(UIView* view, float duration) { [mergeCalls addTarget:self action:@selector(mergeCallsPressed) forControlEvents:UIControlEventTouchUpInside]; [LinphoneManager set:mergeCalls hidden:YES withName:"MERGE button" andReason:"initialisation"];*/ + //TODO + /* if ([LinphoneManager runningOnIpad]) { ms_message("Running on iPad"); conferenceDetail = [[ConferenceCallDetailView alloc] initWithNibName:@"ConferenceCallDetailView-ipad" @@ -324,7 +299,7 @@ void addAnimationFadeTransition(UIView* view, float duration) { } else { conferenceDetail = [[ConferenceCallDetailView alloc] initWithNibName:@"ConferenceCallDetailView" bundle:[NSBundle mainBundle]]; - } + }*/ UITapGestureRecognizer* singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showControls:)]; [singleFingerTap setNumberOfTapsRequired:1]; @@ -335,9 +310,7 @@ void addAnimationFadeTransition(UIView* view, float duration) { videoZoomHandler = [[VideoZoomHandler alloc] init]; [videoZoomHandler setup:videoGroup]; videoGroup.alpha = 0; - - mVideoShown=FALSE; - mVideoIsPending=FALSE; + //selectedCall = nil; //callTableView.rowHeight = 80; @@ -361,7 +334,6 @@ void addAnimationFadeTransition(UIView* view, float duration) { contacts.imageView.contentMode = UIViewContentModeCenter; addCall.imageView.contentMode = UIViewContentModeCenter; dialer.imageView.contentMode = UIViewContentModeCenter;*/ - } - (void)transferPressed { @@ -404,7 +376,8 @@ void addAnimationFadeTransition(UIView* view, float duration) { [visibleActionSheet release]; visibleActionSheet = nil; - [UICallButton enableTransforMode:YES]; + //TODO + /*[UICallButton enableTransforMode:YES];*/ [[LinphoneManager instance] changeView:PhoneView_Dialer]; } else { // add 'Other' option @@ -423,40 +396,9 @@ void addAnimationFadeTransition(UIView* view, float duration) { } } -- (void)updateCallsDurations { - [self updateUIFromLinphoneState: NO]; -} - - (void)viewDidAppear:(BOOL)animated { [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; - [super viewDidAppear:animated]; - - [self updateCallsDurations]; - durationRefreasher = [NSTimer scheduledTimerWithTimeInterval:1 - target:self - selector:@selector(updateCallsDurations) - userInfo:nil - repeats:YES]; - glowingTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(updateGlow) - userInfo:nil - repeats:YES]; - glow = 0; - if (mVideoIsPending) { - mVideoIsPending=FALSE; - [self enableVideoDisplay: FALSE]; - } else { - [self disableVideoDisplay: FALSE]; - } - - UIDevice* device = [UIDevice currentDevice]; - if ([device respondsToSelector:@selector(isMultitaskingSupported)] - && [device isMultitaskingSupported]) { - //bool enableVideo = [[NSUserDefaults standardUserDefaults] boolForKey:@"enable_video_preference"]; - //[LinphoneManager set:contacts hidden:enableVideo withName:"CONTACT button" andReason:AT]; - //[LinphoneManager set:addVideo hidden:!contacts.hidden withName:"ADD_VIDEO button" andReason:AT]; - } + [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { @@ -467,23 +409,13 @@ void addAnimationFadeTransition(UIView* view, float duration) { [hideControlsTimer invalidate]; hideControlsTimer = nil; } - if (durationRefreasher != nil) { - [durationRefreasher invalidate]; - durationRefreasher = nil; - } - if (glowingTimer != nil) { - [glowingTimer invalidate]; - glowingTimer = nil; - } } - (void)viewDidDisappear:(BOOL)animated { - if (!mVideoShown) [[UIApplication sharedApplication] setIdleTimerDisabled:false]; + if (!videoShown) [[UIApplication sharedApplication] setIdleTimerDisabled:false]; } - (void)viewDidUnload { - [verified release]; - [unverified release]; [[NSNotificationCenter defaultCenter] removeObserver:self]; } @@ -494,17 +426,19 @@ void addAnimationFadeTransition(UIView* view, float duration) { [LinphoneManager set:controlSubView hidden:enable withName:"CONTROL view" andReason:AT]; [LinphoneManager set:padSubView hidden:!enable withName:"PAD view" andReason:AT];*/ } -- (void)displayCall:(LinphoneCall*) call InProgressFromUI:(UIViewController*) viewCtrl forUser:(NSString*) username withDisplayName:(NSString*) displayName { - //restore view - [self displayPad:false]; + +- (void)displayVideoCall:(LinphoneCall*) call { UIDevice *device = [UIDevice currentDevice]; device.proximityMonitoringEnabled = YES; - //if ([speaker isOn]) - // [speaker toggle]; - [self updateUIFromLinphoneState: YES]; + if (call !=nil && linphone_call_get_dir(call)==LinphoneCallIncoming) { + //if ([speaker isOn]) [speaker toggle]; + } + [self updateUIFromLinphoneState: YES]; + + [self enableVideoDisplay: TRUE]; } -- (void)displayInCall:(LinphoneCall*) call FromUI:(UIViewController*) viewCtrl forUser:(NSString*) username withDisplayName:(NSString*) displayName { +- (void)displayInCall:(LinphoneCall*) call { UIDevice *device = [UIDevice currentDevice]; device.proximityMonitoringEnabled = YES; if (call !=nil && linphone_call_get_dir(call)==LinphoneCallIncoming) { @@ -515,27 +449,6 @@ void addAnimationFadeTransition(UIView* view, float duration) { [self disableVideoDisplay: TRUE]; } -- (void)displayDialerFromUI:(UIViewController*) viewCtrl forUser:(NSString*) username withDisplayName:(NSString*) displayName { - [self disableVideoDisplay: TRUE]; - UIViewController* modalVC = self.modalViewController; - UIDevice *device = [UIDevice currentDevice]; - device.proximityMonitoringEnabled = NO; - if (modalVC != nil) { - mVideoIsPending=FALSE; - // clear previous native window ids - /*if (modalVC == mVideoViewController) { - mVideoShown=FALSE; - linphone_core_set_native_video_window_id([LinphoneManager getLc],0); - linphone_core_set_native_preview_window_id([LinphoneManager getLc],0); - }*/ - [[LinphoneManager instance] fullScreen:false]; - //[self dismissModalViewControllerAnimated:FALSE];//just in case - } - - //[self dismissModalViewControllerAnimated:FALSE]; //disable animation to avoid blanc bar just below status bar*/ - [self updateUIFromLinphoneState: YES]; -} - static void hideSpinner(LinphoneCall* lc, void* user_data); - (void)hideSpinnerIndicator: (LinphoneCall*)call { @@ -550,33 +463,31 @@ static void hideSpinner(LinphoneCall* lc, void* user_data); LinphoneCall *call = [[notif.userInfo objectForKey: @"call"] pointerValue]; LinphoneCallState state = [[notif.userInfo objectForKey: @"state"] intValue]; - const char* lUserNameChars=linphone_address_get_username(linphone_call_get_remote_address(call)); - NSString* lUserName = lUserNameChars?[[[NSString alloc] initWithUTF8String:lUserNameChars] autorelease]:NSLocalizedString(@"Unknown",nil); - const char* lDisplayNameChars = linphone_address_get_display_name(linphone_call_get_remote_address(call)); - NSString* lDisplayName = [lDisplayNameChars?[[NSString alloc] initWithUTF8String:lDisplayNameChars]:@"" autorelease]; - - //bool canHideInCallView = (linphone_core_get_calls([LinphoneManager getLc]) == NULL); + // Handle data associated with the call + if(state == LinphoneCallReleased) { + [callTableController removeCallData: call]; + } else { + [callTableController addCallData: call]; + } switch (state) { - /*case LinphoneCallIncomingReceived: - [self displayIncomingCall:call - NotificationFromUI:nil - forUser:lUserName - withDisplayName:lDisplayName]; - break;*/ - + case LinphoneCallIncomingReceived: case LinphoneCallOutgoingInit: - [self displayCall:call - InProgressFromUI:nil - forUser:lUserName - withDisplayName:lDisplayName]; - break; + { + if(linphone_core_get_calls_nb([LinphoneManager getLc]) > 1) { + [callTableController minimizeAll]; + } + } case LinphoneCallPausedByRemote: case LinphoneCallConnected: - [self displayInCall: call - FromUI:nil - forUser:lUserName - withDisplayName:lDisplayName]; + case LinphoneCallStreamsRunning: + case LinphoneCallUpdated: + //check video + if (linphone_call_params_video_enabled(linphone_call_get_current_params(call))) { + [self displayVideoCall:call]; + } else { + [self displayInCall:call]; + } break; case LinphoneCallUpdatedByRemote: { @@ -588,37 +499,27 @@ static void hideSpinner(LinphoneCall* lc, void* user_data); linphone_call_params_video_enabled(remote) && !linphone_core_get_video_policy([LinphoneManager getLc])->automatically_accept) { linphone_core_defer_call_update([LinphoneManager getLc], call); - [self displayAskToEnableVideoCall:call forUser:lUserName withDisplayName:lDisplayName]; + [self displayAskToEnableVideoCall:call]; } else if (linphone_call_params_video_enabled(current) && !linphone_call_params_video_enabled(remote)) { - [self displayInCall:call FromUI:nil forUser:lUserName withDisplayName:lDisplayName]; + [self displayInCall:call]; } break; } - case LinphoneCallUpdated: - { - const LinphoneCallParams* current = linphone_call_get_current_params(call); - if (linphone_call_params_video_enabled(current)) { - [self enableVideoDisplay:TRUE]; - } else { - [self displayInCall:call FromUI:nil forUser:lUserName withDisplayName:lDisplayName]; - } - break; - - } case LinphoneCallPausing: case LinphoneCallPaused: { [self disableVideoDisplay: TRUE]; break; } - case LinphoneCallStreamsRunning: - //check video - if (linphone_call_params_video_enabled(linphone_call_get_current_params(call))) { - [self enableVideoDisplay:TRUE]; - } else { - [self displayInCall:call FromUI:nil forUser:lUserName withDisplayName:lDisplayName]; + case LinphoneCallEnd: + case LinphoneCallError: + { + if(linphone_core_get_calls_nb([LinphoneManager getLc]) <= 1) { + [callTableController maximizeAll]; } - break; + //[self updateUIFromLinphoneState: YES]; + break; + } default: break; } @@ -637,10 +538,15 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { } } -- (void)displayAskToEnableVideoCall:(LinphoneCall*) call forUser:(NSString*) username withDisplayName:(NSString*) displayName { +- (void)displayAskToEnableVideoCall:(LinphoneCall*) call { if (linphone_core_get_video_policy([LinphoneManager getLc])->automatically_accept) return; + const char* lUserNameChars = linphone_address_get_username(linphone_call_get_remote_address(call)); + NSString* lUserName = lUserNameChars?[[[NSString alloc] initWithUTF8String:lUserNameChars] autorelease]:NSLocalizedString(@"Unknown",nil); + const char* lDisplayNameChars = linphone_address_get_display_name(linphone_call_get_remote_address(call)); + NSString* lDisplayName = [lDisplayNameChars?[[NSString alloc] initWithUTF8String:lDisplayNameChars]:@"" autorelease]; + // ask the user if he agrees CallDelegate* cd = [[CallDelegate alloc] init]; cd.eventType = CD_VIDEO_UPDATE; @@ -650,7 +556,7 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { if (visibleActionSheet != nil) { [visibleActionSheet dismissWithClickedButtonIndex:visibleActionSheet.cancelButtonIndex animated:TRUE]; } - NSString* title = [NSString stringWithFormat : NSLocalizedString(@"'%@' would like to enable video",nil), ([displayName length] > 0) ?displayName:username]; + NSString* title = [NSString stringWithFormat : NSLocalizedString(@"'%@' would like to enable video",nil), ([lDisplayName length] > 0)?lDisplayName:lUserName]; visibleActionSheet = [[UIActionSheet alloc] initWithTitle:title delegate:cd cancelButtonTitle:NSLocalizedString(@"Decline",nil) @@ -682,66 +588,11 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { [videoWaitingForFirstImage release]; [[NSNotificationCenter defaultCenter] removeObserver:self]; - + [super dealloc]; } -+ (LinphoneCall*)retrieveCallAtIndex: (NSInteger) index inConference:(bool) conf{ - const MSList* calls = linphone_core_get_calls([LinphoneManager getLc]); - - if (!conf && linphone_core_get_conference_size([LinphoneManager getLc])) - index--; - - while (calls != 0) { - if ([InCallViewController isInConference:(LinphoneCall*)calls->data] == conf) { - if (index == 0) - break; - index--; - } - calls = calls->next; - } - - if (calls == 0) { - ms_error("Cannot find call with index %d (in conf: %d)", index, conf); - return nil; - } else { - return (LinphoneCall*)calls->data; - } -} - -- (void)updateActive:(bool_t)active cell:(UITableViewCell*) cell { - if (!active) { - - cell.backgroundColor = [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:0.2]; - - UIColor* c = [[UIColor blackColor] colorWithAlphaComponent:0.5]; - [cell.textLabel setTextColor:c]; - [cell.detailTextLabel setTextColor:c]; - } else { - cell.backgroundColor = [UIColor colorWithRed:0.4 green:0.4 blue:0.4 alpha:(0.7+sin(2*glow)*0.3)]; - [cell.textLabel setTextColor:[UIColor whiteColor]]; - [cell.detailTextLabel setTextColor:[UIColor whiteColor]]; - } - [cell.textLabel setBackgroundColor:[UIColor clearColor]]; - [cell.detailTextLabel setBackgroundColor:[UIColor clearColor]]; -} - -- (void)updateGlow { - if (!activeCallCell) - return; - - glow += 0.1; - - [self updateActive:YES cell:activeCallCell]; - [activeCallCell.backgroundView setNeedsDisplay]; - [activeCallCell setNeedsDisplay]; - [callTableView setNeedsDisplay]; -} - -- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { - [self updateActive:(cell == activeCallCell) cell:cell]; -} - +//TODO /* + (void)updateCellImageView:(UIImageView*)imageView Label:(UILabel*)label DetailLabel:(UILabel*)detailLabel AndAccessoryView:(UIView*)accessoryView withCall:(LinphoneCall*) call { if (call == NULL) { @@ -827,7 +678,7 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { [ms release]; } }*/ - +/* - (void)updateConferenceCell:(UITableViewCell*) cell at:(NSIndexPath*)indexPath { LinphoneCore* lc = [LinphoneManager getLc]; @@ -850,105 +701,6 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { cell.imageView.image = nil; } -- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath -{ - // show conference detail view - [self presentModalViewController:conferenceDetail animated:true]; - -} - -- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UICallCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UICallCell"]; - if (cell == nil) { - cell = [[UICallCell alloc] init]; - } - - if([indexPath row] == 0) { - [cell firstCell]; - } else { - [cell otherCell]; - } - - LinphoneCore* lc = [LinphoneManager getLc]; - LinphoneCall* call = [InCallViewController retrieveCallAtIndex:indexPath.row inConference:NO]; - [cell updateCell:call]; - if(linphone_core_get_conference_size(lc) > 0) { - tableView.scrollEnabled = TRUE; - } else { - tableView.scrollEnabled = FALSE; - } - /* - if (indexPath.row == 0 && linphone_core_get_conference_size(lc) > 0) { - [self updateConferenceCell:cell at:indexPath]; - if (linphone_core_is_in_conference(lc)) - activeCallCell = cell; - cell.accessoryView = nil; - if (linphone_core_is_in_conference(lc)) - cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; - else - cell.accessoryType = UITableViewCellAccessoryNone; - } else { - LinphoneCall* call = [InCallViewController retrieveCallAtIndex:indexPath.row inConference:NO]; - if (call == nil) - return cell; // return dummy cell - - if (cell.accessoryView == nil) { - UIView *containerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)] autorelease]; - cell.accessoryView = containerView; - } - else { - for (UIView *view in cell.accessoryView.subviews) { - [view removeFromSuperview]; - } - } - [InCallViewController updateCellImageView:cell.imageView Label:cell.textLabel DetailLabel:cell.detailTextLabel AndAccessoryView:(UIView*)cell.accessoryView withCall:call]; - if (linphone_core_get_current_call(lc) == call) - activeCallCell = cell; - //cell.accessoryType = UITableViewCellAccessoryNone; - - // Call Quality Indicator - //TODO - UIImageView* callquality = [UIImageView new]; - [callquality setFrame:CGRectMake(0, 0, 28, 28)]; - if (call->state == LinphoneCallStreamsRunning) - { - [InCallViewController updateIndicator: callquality withCallQuality:linphone_call_get_average_quality(call)]; - } - else { - [callquality setImage:nil]; - } - - LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)); - if (enc != LinphoneMediaEncryptionNone) { - cell.accessoryView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 28)] autorelease]; - UIButton* accessoryBtn = [UIButton buttonWithType:UIButtonTypeCustom]; - [accessoryBtn setFrame:CGRectMake(30, 0, 28, 28)]; - [accessoryBtn setImage:nil forState:UIControlStateNormal]; - [accessoryBtn setTag:SECURE_BUTTON_TAG]; - accessoryBtn.backgroundColor = [UIColor clearColor]; - accessoryBtn.userInteractionEnabled = YES; - - if (enc == LinphoneMediaEncryptionSRTP || linphone_call_get_authentication_token_verified(call)) { - [accessoryBtn setImage: verified forState:UIControlStateNormal]; - } else { - [accessoryBtn setImage: unverified forState:UIControlStateNormal]; - } - [cell.accessoryView addSubview:accessoryBtn]; - - if (((UIButton*)accessoryBtn).imageView.image != nil && linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)) == LinphoneMediaEncryptionZRTP) { - [((UIButton*)accessoryBtn) addTarget:self action:@selector(secureIconPressed:withEvent:) forControlEvents:UIControlEventTouchUpInside]; - } - } - - //[cell.accessoryView addSubview:callquality]; - //[callquality release]; - } - */ - /*cell.userInteractionEnabled = YES; - cell.selectionStyle = UITableViewCellSelectionStyleNone;*/ - return cell; -} - - (void)secureIconPressed:(UIControl*) button withEvent: (UIEvent*) evt { NSSet* touches = [evt allTouches]; UITouch* touch = [touches anyObject]; @@ -979,7 +731,7 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { [visibleActionSheet release]; } } - +*/ - (void)actionSheet:(UIActionSheet *)actionSheet ofType:(enum CallDelegateType)type clickedButtonAtIndex:(NSInteger)buttonIndex withUserDatas:(void *)datas { LinphoneCall* call = (LinphoneCall*)datas; // maybe we could verify call validity @@ -1029,7 +781,8 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { } // user must jhave pressed 'other...' button as we did not find a call // with the correct indice - [UICallButton enableTransforMode:YES]; + //TODO + //[UICallButton enableTransforMode:YES]; [[LinphoneManager instance] changeView:PhoneView_Dialer]; break; } @@ -1037,65 +790,4 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { ms_error("Unhandled CallDelegate event of type: %d received - ignoring", type); } } - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - LinphoneCore* lc = [LinphoneManager getLc]; - - return [InCallViewController callCount:lc] + (int)(linphone_core_get_conference_size(lc) > 0); -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; - LinphoneCore* lc = [LinphoneManager getLc]; - int count = 0; - - if ([InCallViewController callCount:lc] > 0) - count++; - - if (linphone_core_get_conference_size([LinphoneManager getLc]) > 0) - count ++; - - return count; -} - -- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - return nil; -} - -- (NSString*)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section -{ - return nil; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - - LinphoneCore* lc = [LinphoneManager getLc]; - - bool inConf = (indexPath.row == 0 && linphone_core_get_conference_size(lc) > 0); - - LinphoneCall* selectedCall = [InCallViewController retrieveCallAtIndex:indexPath.row inConference:inConf]; - - if (inConf) { - if (linphone_core_is_in_conference(lc)) - return; - LinphoneCall* current = linphone_core_get_current_call(lc); - if (current) - linphone_core_pause_call(lc, current); - linphone_core_enter_conference([LinphoneManager getLc]); - } else if (selectedCall) { - if (linphone_core_is_in_conference(lc)) { - linphone_core_leave_conference(lc); - } - if(!linphone_core_sound_resources_locked(lc)) { - linphone_core_resume_call([LinphoneManager getLc], selectedCall); - } - } - - [self updateUIFromLinphoneState: YES]; -} - @end diff --git a/Classes/InCallViewController.xib b/Classes/InCallViewController.xib index 5640c3dad..bbec5dd1a 100644 --- a/Classes/InCallViewController.xib +++ b/Classes/InCallViewController.xib @@ -12,6 +12,7 @@ YES + IBUITableViewController IBUITableView IBUIActivityIndicatorView IBUIView @@ -108,7 +109,7 @@ YES IBCocoaTouchFramework 0.0 - 10 + 20 0.0 0.0 YES @@ -166,6 +167,15 @@ NO IBCocoaTouchFramework + + + + 1 + 1 + + IBCocoaTouchFramework + NO + @@ -226,21 +236,37 @@ 161 + + + callTableController + + + + 167 + dataSource - + - 107 + 168 delegate - + - 108 + 169 + + + + view + + + + 166 @@ -313,7 +339,7 @@ 106 - tableView + callTableView 160 @@ -321,6 +347,15 @@ camSwitch + + 162 + + + YES + + + callTableController + @@ -339,6 +374,8 @@ 160.CustomClassName 160.IBPluginDependency 160.IBUIButtonInspectorSelectedStateConfigurationMetadataKey + 162.CustomClassName + 162.IBPluginDependency 9.IBPluginDependency @@ -355,6 +392,8 @@ UICamSwitch com.apple.InterfaceBuilder.IBCocoaTouchPlugin + InCallTableViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -370,11 +409,19 @@ - 161 + 169 YES + + InCallTableViewController + UITableViewController + + IBProjectSource + ./Classes/InCallTableViewController.h + + InCallViewController UIViewController @@ -382,26 +429,24 @@ YES YES + callTableController callTableView - conferenceDetail testVideoView videoCameraSwitch videoGroup videoPreview videoView - videoViewController videoWaitingForFirstImage YES + InCallTableViewController UITableView - UIViewController UIView UICamSwitch UIView UIView UIView - VideoViewController UIActivityIndicatorView @@ -409,25 +454,24 @@ YES YES + callTableController callTableView - conferenceDetail testVideoView videoCameraSwitch videoGroup videoPreview videoView - videoViewController videoWaitingForFirstImage YES - callTableView - UITableView + callTableController + InCallTableViewController - conferenceDetail - UIViewController + callTableView + UITableView testVideoView @@ -449,10 +493,6 @@ videoView UIView - - videoViewController - VideoViewController - videoWaitingForFirstImage UIActivityIndicatorView diff --git a/Classes/LinphoneUI/UICallBar.h b/Classes/LinphoneUI/UICallBar.h index 28c0cfc14..9733ee39a 100644 --- a/Classes/LinphoneUI/UICallBar.h +++ b/Classes/LinphoneUI/UICallBar.h @@ -26,14 +26,22 @@ @interface UICallBar: UIViewController { UIPauseButton* pauseButton; + UIButton* startConferenceButton; + UIButton* stopConferenceButton; UIVideoButton* videoButton; UIMicroButton* microButton; - UISpeakerButton* speakerButton; + UISpeakerButton* speakerButton; + UIButton* optionsButton; } @property (nonatomic, retain) IBOutlet UIPauseButton* pauseButton; +@property (nonatomic, retain) IBOutlet UIButton* startConferenceButton; +@property (nonatomic, retain) IBOutlet UIButton* stopConferenceButton; @property (nonatomic, retain) IBOutlet UIVideoButton* videoButton; @property (nonatomic, retain) IBOutlet UIMicroButton* microButton; @property (nonatomic, retain) IBOutlet UISpeakerButton* speakerButton; +@property (nonatomic, retain) IBOutlet UIButton* optionsButton; + +- (IBAction)onOptionsClick:(id)sender; @end diff --git a/Classes/LinphoneUI/UICallBar.m b/Classes/LinphoneUI/UICallBar.m index 59cc5417c..b568553a3 100644 --- a/Classes/LinphoneUI/UICallBar.m +++ b/Classes/LinphoneUI/UICallBar.m @@ -26,9 +26,12 @@ @implementation UICallBar @synthesize pauseButton; +@synthesize startConferenceButton; +@synthesize stopConferenceButton; @synthesize videoButton; @synthesize microButton; -@synthesize speakerButton; +@synthesize speakerButton; +@synthesize optionsButton; - (id)init { return [super initWithNibName:@"UICallBar" bundle:[NSBundle mainBundle]]; @@ -38,6 +41,10 @@ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callUpdate:) name:@"LinphoneCallUpdate" object:nil]; } +- (void)viewDidUnload { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + - (void)callUpdate: (NSNotification*) notif { // check LinphoneCore is initialized LinphoneCore* lc = nil; @@ -51,6 +58,45 @@ [microButton update]; [pauseButton update]; [videoButton update]; + + if(linphone_core_get_calls_nb(lc) > 1) { + [pauseButton setHidden:true]; + LinphoneCall *currentCall = linphone_core_get_current_call(lc); + if(currentCall == NULL || !linphone_call_get_current_params(currentCall)->in_conference) { + [startConferenceButton setHidden:false]; + [stopConferenceButton setHidden:true]; + } else { + [startConferenceButton setHidden:true]; + [stopConferenceButton setHidden:false]; + } + } else { + [pauseButton setHidden:false]; + [startConferenceButton setHidden:true]; + [stopConferenceButton setHidden:true]; + } +} + +- (void)dealloc { + [pauseButton release]; + [startConferenceButton release]; + [stopConferenceButton release]; + [videoButton release]; + [microButton release]; + [speakerButton release]; + [optionsButton release]; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +- (IBAction)onOptionsClick:(id)sender { + // Go to dialer view + NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys: + [[[NSArray alloc] initWithObjects: @"", nil] autorelease] + , @"setAddress:", + nil] autorelease]; + [[LinphoneManager instance] changeView:PhoneView_Dialer dict:dict]; } @end diff --git a/Classes/LinphoneUI/UICallBar.xib b/Classes/LinphoneUI/UICallBar.xib index 644ab0de9..76785e424 100644 --- a/Classes/LinphoneUI/UICallBar.xib +++ b/Classes/LinphoneUI/UICallBar.xib @@ -185,14 +185,17 @@ 0 NO - + + NSImage + options_over.png + + NSImage add-call-over.png - NSImage - add-call-actif.png + options_default.png @@ -203,7 +206,7 @@ {{0, 67}, {105, 68}} - + _NS:9 NO @@ -218,7 +221,7 @@ NSImage pause-over.png - + NSImage play-actif.png @@ -229,6 +232,58 @@ + + + -2147483384 + {{0, 67}, {105, 68}} + + + + _NS:9 + NO + + Start Conference + + IBCocoaTouchFramework + 0 + 0 + NO + + + NSImage + start-conference-over.png + + + + NSImage + start-conference-actif.png + + + + + + + -2147483384 + {{0, 67}, {105, 68}} + + + + _NS:9 + NO + + Stop conference + + IBCocoaTouchFramework + 0 + 0 + NO + + + + + + + 264 @@ -263,7 +318,6 @@ {{215, 67}, {105, 68}} - _NS:9 NO @@ -342,6 +396,39 @@ 16 + + + optionsButton + + + + 19 + + + + stopConferenceButton + + + + 25 + + + + startConferenceButton + + + + 26 + + + + onOptionsClick: + + + 7 + + 20 + @@ -374,6 +461,8 @@ + + callTabBar @@ -389,43 +478,55 @@ 6 - back + dialerButton 7 - hangup + hangupButton 8 - pause + pauseButton 10 - addCall + optionsButton 12 - video + videoButton 11 - micro + microButton 9 - speaker + speakerButton + + + 21 + + + startConferenceButton + + + 23 + + + stopConferenceButton @@ -435,13 +536,17 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin - + UIMicroButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIVideoButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -451,7 +556,7 @@ UIPauseButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin - + UISpeakerButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -460,17 +565,31 @@ - 18 + 26 UICallBar UIViewController + + onOptionsClick: + id + + + onOptionsClick: + + onOptionsClick: + id + + UIMicroButton + UIButton UIPauseButton UISpeakerButton + UIButton + UIButton UIVideoButton @@ -478,6 +597,10 @@ microButton UIMicroButton + + optionsButton + UIButton + pauseButton UIPauseButton @@ -486,6 +609,14 @@ speakerButton UISpeakerButton + + startConferenceButton + UIButton + + + stopConferenceButton + UIButton + videoButton UIVideoButton @@ -504,22 +635,6 @@ ./Classes/UIHangUpButton.h - - UIMicroButton - UIToggleButton - - IBProjectSource - ./Classes/UIMicroButton.h - - - - UIPauseButton - UIToggleButton - - IBProjectSource - ./Classes/UIPauseButton.h - - UISpeakerButton UIToggleButton @@ -566,13 +681,14 @@ YES 3 - {160, 134} - {160, 134} + {16, 16} {209, 136} {209, 136} {160, 134} {160, 134} {160, 134} + {160, 134} + {160, 134} {209, 136} {209, 136} {209, 136} @@ -581,6 +697,8 @@ {160, 134} {160, 134} {160, 134} + {209, 136} + {209, 136} {160, 134} {160, 134} {160, 134} diff --git a/Classes/LinphoneUI/UICallButton.m b/Classes/LinphoneUI/UICallButton.m index 6957344e5..850ad2df5 100644 --- a/Classes/LinphoneUI/UICallButton.m +++ b/Classes/LinphoneUI/UICallButton.m @@ -21,7 +21,6 @@ #import "LinphoneManager.h" #import "CoreTelephony/CTCallCenter.h" - @implementation UICallButton static BOOL transferMode = NO; diff --git a/Classes/LinphoneUI/UICallCell.h b/Classes/LinphoneUI/UICallCell.h index e19eb8e62..306c53423 100644 --- a/Classes/LinphoneUI/UICallCell.h +++ b/Classes/LinphoneUI/UICallCell.h @@ -21,24 +21,53 @@ #include "linphonecore.h" + +@interface UICallCellData : NSObject { + @public + bool minimize; + LinphoneCall *call; +} + +- (id)init:(LinphoneCall*) call; + +@end + @interface UICallCell : UITableViewCell { + @private UIView *firstBackground; UIView *otherBackground; UILabel *addressLabel; - UILabel *timeLabel; - UIImageView *stateView; + UILabel *stateLabel; + UIImageView *stateImage; + UIImageView *avatarImage; + + UIView *headerView; + UIView *avatarView; + + UICallCellData *data; } +@property (weak) UICallCellData *data; + @property (nonatomic, retain) IBOutlet UIView* firstBackground; @property (nonatomic, retain) IBOutlet UIView* otherBackground; @property (nonatomic, retain) IBOutlet UILabel* addressLabel; -@property (nonatomic, retain) IBOutlet UILabel* timeLabel; -@property (nonatomic, retain) IBOutlet UIImageView* stateView; +@property (nonatomic, retain) IBOutlet UILabel* stateLabel; +@property (nonatomic, retain) IBOutlet UIImageView* stateImage; +@property (nonatomic, retain) IBOutlet UIImageView* avatarImage; + +@property (nonatomic, retain) IBOutlet UIView* headerView; +@property (nonatomic, retain) IBOutlet UIView* avatarView; - (void)firstCell; - (void)otherCell; -- (void)updateCell:(LinphoneCall *)call; +- (void)update; + +- (IBAction)doHeaderClick:(id)sender; + ++ (int)getMaximizedHeight; ++ (int)getMinimizedHeight; @end diff --git a/Classes/LinphoneUI/UICallCell.m b/Classes/LinphoneUI/UICallCell.m index e1f37e1fa..adcddb327 100644 --- a/Classes/LinphoneUI/UICallCell.m +++ b/Classes/LinphoneUI/UICallCell.m @@ -19,13 +19,32 @@ #import "UICallCell.h" +@implementation UICallCellData + +- (id)init:(LinphoneCall*) acall { + self = [super init]; + if(self != nil) { + self->minimize = false; + self->call = acall; + } + return self; +} +@end + @implementation UICallCell +@synthesize data; + @synthesize firstBackground; @synthesize otherBackground; -@synthesize stateView; + @synthesize addressLabel; -@synthesize timeLabel; +@synthesize stateLabel; +@synthesize stateImage; +@synthesize avatarImage; + +@synthesize headerView; +@synthesize avatarView; - (id)init { if ((self = [super init]) != nil) { @@ -50,37 +69,106 @@ [otherBackground setHidden:false]; } -- (void)updateCell:(LinphoneCall *)call { - const LinphoneAddress* addr = linphone_call_get_remote_address(call); - - if (addr) { - const char* lUserNameChars=linphone_address_get_username(addr); - NSString* lUserName = lUserNameChars?[[[NSString alloc] initWithUTF8String:lUserNameChars] autorelease]:NSLocalizedString(@"Unknown",nil); - NSMutableString* mss = [[NSMutableString alloc] init]; - // contact name - const char* n = linphone_address_get_display_name(addr); - if (n) - [mss appendFormat:@"%s", n, nil]; - else - [mss appendFormat:@"%@",lUserName , nil]; - - [addressLabel setText:mss]; - - // TODO - //imageView.image = [[LinphoneManager instance] getImageFromAddressBook:lUserName]; - [mss release]; - } else { - [addressLabel setText:@"Unknown"]; - //TODO - //imageView.image = nil; - } - - - NSMutableString* msDuration = [[NSMutableString alloc] init ]; - int duration = linphone_call_get_duration(call); - [msDuration appendFormat:@"%02i:%02i", (duration/60), duration - 60 * (duration / 60), nil]; - [timeLabel setText:msDuration]; - [msDuration release]; +- (void)update:(UICallCellData*) adata { + self->data = adata; + [self update]; } +- (void)update { + if(data) { + LinphoneCall *call = data->call; + const LinphoneAddress* addr = linphone_call_get_remote_address(call); + + if (addr) { + const char* lUserNameChars=linphone_address_get_username(addr); + NSString* lUserName = lUserNameChars?[[[NSString alloc] initWithUTF8String:lUserNameChars] autorelease]:NSLocalizedString(@"Unknown",nil); + NSMutableString* mss = [[NSMutableString alloc] init]; + // contact name + const char* n = linphone_address_get_display_name(addr); + if (n) + [mss appendFormat:@"%s", n, nil]; + else + [mss appendFormat:@"%@",lUserName , nil]; + + [addressLabel setText:mss]; + + // TODO + //imageView.image = [[LinphoneManager instance] getImageFromAddressBook:lUserName]; + [mss release]; + } else { + [addressLabel setText:@"Unknown"]; + //TODO + //imageView.image = nil; + } + + + LinphoneCallState state = linphone_call_get_state(call); + if(state == LinphoneCallPaused || state == LinphoneCallPausing) { + [stateImage setImage:[UIImage imageNamed:@"pause-champ-numero-actif"]]; + } else if(state == LinphoneCallOutgoingRinging) { + [stateImage setImage:[UIImage imageNamed:@"ring-champ-numero-actif"]]; + } else if(state == LinphoneCallOutgoingInit || state == LinphoneCallOutgoingProgress){ + [stateImage setImage:nil]; + } else { + [stateImage setImage:[UIImage imageNamed:@"play-champ-numero-actif"]]; + } + + NSMutableString* msDuration = [[NSMutableString alloc] init]; + int duration = linphone_call_get_duration(call); + [msDuration appendFormat:@"%02i:%02i", (duration/60), duration - 60 * (duration / 60), nil]; + [stateLabel setText:msDuration]; + [msDuration release]; + + if(!data->minimize) { + CGRect frame = [self frame]; + frame.size.height = [avatarView frame].size.height; + [self setFrame:frame]; + [avatarView setHidden:false]; + } else { + CGRect frame = [self frame]; + frame.size.height = [headerView frame].size.height; + [self setFrame:frame]; + [avatarView setHidden:true]; + } + } +} + +- (IBAction)doHeaderClick:(id)sender { + NSLog(@"Toggle UICallCell"); + if(data) { + data->minimize = !data->minimize; + [self selfUpdate]; + } +} + +- (void)selfUpdate { + UITableView *parentTable = (UITableView *)self.superview; + if(parentTable) { + NSIndexPath *index= [parentTable indexPathForCell:self]; + if(index != nil) { + [parentTable reloadRowsAtIndexPaths:[[NSArray alloc] initWithObjects:index, nil] withRowAnimation:false]; + } + } +} + +- (void)dealloc { + [firstBackground release]; + [otherBackground release]; + [addressLabel release]; + [stateLabel release]; + [stateImage release]; + [avatarImage release]; + [headerView release]; + [super dealloc]; +} + ++ (int)getMaximizedHeight { + return 300; +} + ++ (int)getMinimizedHeight { + return 58; +} + + @end diff --git a/Classes/LinphoneUI/UICallCell.xib b/Classes/LinphoneUI/UICallCell.xib index 9b55b8c9e..c64c44004 100644 --- a/Classes/LinphoneUI/UICallCell.xib +++ b/Classes/LinphoneUI/UICallCell.xib @@ -37,83 +37,158 @@ 288 - + 292 - {320, 63} + + + + 292 + {{0, 63}, {320, 250}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + + 3 + MQA + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + {{0, 48}, {320, 262}} + + + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + ombre-cotes-avatar.png + + + + + 292 + {{80, 65}, {160, 170}} + + + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + avatar-inconnu.png + + + + {320, 300} - + _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - NO - + 3 - MC41AA + MCAwAA - - NSImage - champ-courbe-autres-numeros.png - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - -2147483356 - {320, 68} - - - - _NS:9 - NO + NO IBCocoaTouchFramework - 0 - 0 - NO - - - NSImage - champ-saisie-numero.png - - - - + 292 - {{10, 0}, {206, 51}} - - - - _NS:9 - NO - NO - 7 - NO - IBCocoaTouchFramework - 0102030405 - - 10 - - 549453824 - {256, 256} - - - - - - TU0AKgAEAAh1eIH/cHJ5/3Bzff9vcXX/bnB3/3Byef9vcXX/bG51/2xudf9ucHf/cHN9/2dqdP9ucXv/ + + + + 292 + {320, 63} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + NO + + + NSImage + champ-courbe-autres-numeros.png + + + + + + + -2147483356 + {320, 68} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + NO + + + NSImage + champ-saisie-numero.png + + + + + + + 292 + {{10, 0}, {206, 51}} + + + + _NS:9 + NO + NO + 7 + NO + IBCocoaTouchFramework + 0102030405 + + 10 + + 549453824 + {256, 256} + + + + + + TU0AKgAEAAh1eIH/cHJ5/3Bzff9vcXX/bnB3/3Byef9vcXX/bG51/2xudf9ucHf/cHN9/2dqdP9ucXv/ cHJ5/3Bzff9qbHP/b3F1/3N1fP9sbnX/am13/2ptd/9sbnX/am13/3l7gf91d33/bG95/2xudf9sb3n/ bG95/2dqdP9qbXf/c3V8/3Bzff93eoP/bG51/3Bzff9sbnX/dXd9/2dqdP9qbHP/bG51/2psc/9sb3n/ am13/2ptd/9sb3n/bG51/3V3ff97fYP/YmVu/25xe/9sb3n/c3Z//2psc/9zdXz/cHN9/2dqcf9qbHP/ @@ -4486,75 +4561,100 @@ cHN9/2xvef9wc33/AA0BAAADAAAAAQEAAAABAQADAAAAAQEAAAABAgADAAAABAAEAKoBAwADAAAAAQAB AAABBgADAAAAAQACAAABEQAEAAAAAgAEALIBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQCA AAABFwAEAAAAAgAEALoBHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAEAMIAAAAAAAgACAAI AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - - - - - - 3 - MCAwAA + + + + + + + scrollViewTexturedBackgroundColor + + + 0 + 10 + + 1 + 30 + + + Helvetica + 30 + 16 - scrollViewTexturedBackgroundColor - - - 0 - 10 - - 1 - 30 - - - Helvetica - 30 - 16 - - - - - 292 - {{224, 14}, {25, 25}} + + + 292 + {{224, 14}, {25, 25}} + + + + _NS:9 + NO + IBCocoaTouchFramework + + + + 292 + {{262, 12}, {50, 29}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + 12:34 + + + 0 + 10 + 1 + + 1 + 15 + + + Helvetica + 15 + 16 + + + + + 292 + {{0, 5}, {200, 40}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + + + + + + + + {320, 63} - + _NS:9 - NO + + NO IBCocoaTouchFramework - - - 292 - {{262, 12}, {50, 29}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - 00:01 - - - 0 - 10 - 1 - - 1 - 15 - - - Helvetica - 15 - 16 - - - {320, 53} + {320, 300} - + _NS:9 NO IBCocoaTouchFramework @@ -4564,27 +4664,11 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - stateView + avatarImage - + - 24 - - - - timeLabel - - - - 25 - - - - firstBackground - - - - 26 + 34 @@ -4594,6 +4678,14 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 27 + + + firstBackground + + + + 26 + addressLabel @@ -4602,6 +4694,47 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 28 + + + stateImage + + + + 33 + + + + stateLabel + + + + 32 + + + + avatarView + + + + 41 + + + + headerView + + + + 42 + + + + doHeaderClick: + + + 7 + + 39 + @@ -4626,43 +4759,88 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 16 - - - - - + + + + 31 + + + + + + + + avatarView + + + 29 + + + avatarImage + + + 36 + + + + + + + + + + + headerView + 14 - + otherBackground + + 20 + + + firstBackground + 17 - + addressLabel 18 - + stateView 19 - - timeLabel + + stateLabel - 20 - - - firstBackground + 38 + + + toggleButton + + + 30 + + + avatarShadowImage + + + 44 + + @@ -4679,44 +4857,77 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 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 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 28 + 44 UICallCell UITableViewCell + + doHeaderClick: + id + + + doHeaderClick: + + doHeaderClick: + id + + UILabel + UIImageView + UIView UIView + UIView UIView - UIImageView - UILabel + UIImageView + UILabel addressLabel UILabel + + avatarImage + UIImageView + + + avatarView + UIView + firstBackground UIView + + headerView + UIView + otherBackground UIView - - stateView + + stateImage UIImageView - - timeLabel + + stateLabel UILabel @@ -4736,8 +4947,10 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE YES 3 + {320, 339} {640, 125} {640, 135} + {640, 523} 1181 diff --git a/Classes/LinphoneUI/UIHistoryCell.m b/Classes/LinphoneUI/UIHistoryCell.m index 22c874a59..4b6ba19d1 100644 --- a/Classes/LinphoneUI/UIHistoryCell.m +++ b/Classes/LinphoneUI/UIHistoryCell.m @@ -27,6 +27,8 @@ @synthesize deleteButton; @synthesize detailsButton; +#define DETAILS_DISABLED + - (id)init { if ((self = [super init]) != nil) { NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"UIHistoryCell" @@ -87,7 +89,11 @@ } - (void)exitEditMode { +#ifdef DETAILS_DISABLED + [detailsButton setHidden:true]; +#else [detailsButton setHidden:false]; +#endif [deleteButton setHidden:true]; } diff --git a/Classes/LinphoneUI/UIMainBar.m b/Classes/LinphoneUI/UIMainBar.m index c7bd8aa41..de9e36f8a 100644 --- a/Classes/LinphoneUI/UIMainBar.m +++ b/Classes/LinphoneUI/UIMainBar.m @@ -37,9 +37,10 @@ [self update:[[LinphoneManager instance] currentView]]; } -- (void)receiveLinphoneMainViewChangeEvent: (NSNotification*) notif { - PhoneView view = [[notif.userInfo objectForKey: @"view"] intValue]; - [self update:view]; +- (void)receiveLinphoneMainViewChangeEvent: (NSNotification*) notif { + NSNumber *viewNumber = [notif.userInfo objectForKey: @"view"]; + if(viewNumber != nil) + [self update:[viewNumber intValue]]; } - (void)update:(PhoneView) view { diff --git a/Classes/LinphoneUI/UIToggleButton.h b/Classes/LinphoneUI/UIToggleButton.h index 433fe8840..f3265e903 100644 --- a/Classes/LinphoneUI/UIToggleButton.h +++ b/Classes/LinphoneUI/UIToggleButton.h @@ -20,14 +20,17 @@ #import @protocol UIToggleButtonDelegate - -(void) onOn; - -(void) onOff; - -(bool) onUpdate; + - (void)onOn; + - (void)onOff; + - (bool)onUpdate; @end @interface UIToggleButton : UIButton { } --(bool) update; --(bool) toggle; + +- (bool)update; +- (void)setOn; +- (void)setOff; +- (bool)toggle; @end diff --git a/Classes/LinphoneUI/UIToggleButton.m b/Classes/LinphoneUI/UIToggleButton.m index 02c2b4dd4..5194912bc 100644 --- a/Classes/LinphoneUI/UIToggleButton.m +++ b/Classes/LinphoneUI/UIToggleButton.m @@ -36,6 +36,18 @@ return self.selected; } +- (void)setOn { + if (!self.selected) { + [self toggle]; + } +} + +- (void)setOff { + if (self.selected) { + [self toggle]; + } +} + - (bool)update { self.selected = [self onUpdate]; return self.selected; @@ -63,18 +75,22 @@ return self; } + - (void)dealloc { [super dealloc]; } + -(void) onOn { /*[NSException raise:NSInternalInconsistencyException format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];*/ } + -(void) onOff { /*[NSException raise:NSInternalInconsistencyException format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];*/ } + -(bool) onUpdate { /*[NSException raise:NSInternalInconsistencyException format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];*/ diff --git a/Resources/add-call-actif.png b/Resources/add-call-actif.png deleted file mode 100644 index 8dbce108c7a13b7215c5678dbd60029435a5a3ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7123 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 diff --git a/Resources/add_call_more_default.png b/Resources/add_call_more_default.png new file mode 100644 index 0000000000000000000000000000000000000000..0932c749d964806d504320892ec3ae231700510e GIT binary patch literal 3587 zcmbVPd00|u7squ>aceQfG{QZQOD! zbD37lCERTqZBZ*V)7&yOwbBangQn*D=6U9sKfe1s_rCAB_nhB3=XZYZANQooUVBw# zkTL)OP$fFxT_tOeH`yU{Uy-=z|P%5e;VDFDFAyjSsb1vWVW^*0_HF* zAqUY;2q%AACY$3B8ptGv?scPw`qC{Jklnk$JB2t20GBDCfrVT@UJy=b3HgSLlkBCh z;SlgQ7lE%O6l{t>BH##9IMUPviNTqf z;t&Y%_X{G)7Rd0yx#9`mb4e^q2wNcV$HCztAtA63GZ;UR1xH#~SV%EUO-&>oCPBw| z0-Df-7i91Q0nZGg2Xg!c96k>$MWlK2g9VllNu__b!1Z@>`U{vB^qnXPWpE+QAC80} z;9Rb>uW#N#0$1jL%lJp{Ah%=wOt>pEh#wqCm(0V*;7728yMIq4b(B`|&&is*=Bgy+c7W=QUINLxb zO~4OyB+zYY(RCpj^J zlB03J!BZXpP&Omtt=)vry~QglyXEcy*2w9}bmp+GSs&h^)cjMFaQFFX|JX-r$t#oE zX9TK*YACt4hqd%&apUswl42INjXY8xxzg4{`t@*2-tNfNq|^MtI;Ov1uAzKv{?p^w z@Q+^>`O!&BpO&;yXw;B+3d4)yWKo0^gdB1VQ5U(A`}(*KkE>qdtZ(Vyerfshhf{B{ z2K(X9GLT5*SwEeTf!dJC1BW!vTg8_!BUio_Ut|Jgny^=V-^g{jf0osV%-`oU4QTpU zh(;5foYr@?U1v``dGdO~;MbBKG-?Z51BphDWWqfY9Y1#m5GlSK4ayz1e!wn+>m^%n zW|Ul>-)z6JJ%dZBiQWX>91ZOx_`WGPNS2e=@bGFd6w>kd@`Czcfb{9@v=Il?pC zWUaM@xuBU`T<~Y05SMyxTch=OSzjyz8#Z1sAcB9I9<1S`oKJ@yq1;?Hq88b!0nlD- zuHjQcKySs%2AAG0(pjB@@Z91vrHNFGH4yB>RoGQ<%c zJj~sZvPtdd%d)ch#U-w;uG&WuJ#N{gmrhtdoOw0V(e;Sp{NhncuJ2~A;*D3Qi|R|i zs@glNwq|+L>3R{l#>Q=hw@c$kpQsJck31oZ3bIikvH`3lzPL1ggaokysJ;lkCDKHk zR%~Q5PRqKdPlx2*(^rkN2D%mDHP0%%;if3I4=J=|bNXf~w6E3>q;ApOZJ^Uv_93F2 z7GDjYmFUt`UOs_#zOZ#n)P2cLwqe~qunW}#1ESh005erB3xj*4*cVU;!hJwXq{art zuMDwtgzuXd#^Kuc3+Xz8caQBk7&blar&Hpbjl~*F^^vF?!`@h42)$N{xP}n1)M$P?m;2}$M@>#9&a8R|06HKPDRw$ z4=TNsP^)X}OI}W09H~4M8{Z8QucXkhOF^;to|SKne0#jor(U{r3HY);vekHeY8nlN zoSJ(jN)Y+noqSd^4xDS}_}8VUZx-1Y>%GPpL8b=pg%y@xjCVw0H-u~fzGwrjQcdo@ zgjOa5^%!aYP8Atc6Eg3p>j5;P?ky~GAju=|7D3lMOv;iw5(BybHqkB3Ct|ZTw1!ib zHaaNDUoAs5YOGnU1TwVMer*p4Ag|Yho{%}+Fy^|3vZ2Y`>G^ARRc}^O@$cD6AH(>0 zhPMlPGit-~A_l`|Z!LyTewr{4dMQ$)pbVL6097?S$BrL9;5K!2_NdqAfC;nq;rZ*s zVYB7pt08O0cWc66nZ`XiyY9{$%yKmAboV@3AF%)J8b{mh={`eH@zJr@3)P-Tk>`yL zKT7-Z1;`@$= z4|$(HT-A*+HQgBt<=(OsZ%wur>uj4c!K>@Yf&N~uWi`OsAni*e!tSOYsXx$b!TMzj0wYkjsT_QU1CRN;qDEnK}CdHwf{Al8;pzMF^WmqV%- z5N=CT7(NpUDmRI+Y}5myLlB_RqiL(;xX0QNOa#*QT(DKOgH}5(f@)JOHYopQK&YxY zSG*7o)nXg_Fx~cf=W0KWa>D4B!NIeOTMdWDcE->iH6cS1?3qEnwPKw9DaV83OtPBu z6^3bhR|46o8*L?w4#9Xs(eCb> zjMhW}Z_q@4yl;7)cP*Qsxow`u3BaBijJ(2ThG9lX zmVJ|;w35=uROiGK*o*5h>H;TH;tRd-5uK1b!}DLl4Kr2(YO_r=9eO75<@@Udy+_dG z)}&Bw;p2|GMVq4)9@yR8uA~8t@{*BPk(8mNWmO3R4Jox9!e`5Ynur@%rj0~U^$af(Qz(Edwber67=>> z7xqq#b}xsWJ9myGL#1!(su_p>qIN!IfS0L~2_suY$9YAlskPjlZD>$ecBqul@vRC8 z9ZFj7Ui$lLqvwpCJ^j*5Sq+s}PdMjdnqjQ0wIwlUwurLl8k*NSH8quT%=1g7$DKR7 zo2L2H)LfX3j*8A}ZB9QA;~b=Ur#p1dgI3+<(ZDVJ^lL_#_LC)wMB>=-ro`ycoXzsv zffuK1-MAIRHY){OWn|vlzPi&yO&DcwX_{BuP%VWuc_giGTC`R)JAB)$`q$rLZDQT& zRYR)N7mG7p6og-9?xkm3Dbgs29t|V3yw_ssZo#llzCZrS5h*75cElcAGgh20dX>+# z^BS+XH$T6hWz!2r2iKuI??I^4Q&}3XqS5B&gh~hshck9EbSA#Y`4}78|BMiW+EAW% zr$-S2%m}I0fSza9zJMj1$)Z0G@nFWG%(J#Ze4+C5q?WH6#&`I}RJrY|6drW3YaCAB ziqo2)*2F0ZlJGi_@% literal 0 HcmV?d00001 diff --git a/Resources/add_call_more_disable.png b/Resources/add_call_more_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..caee628d048ef6f36a869da034e38a35e0982fa5 GIT binary patch literal 3465 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 CI_M4n literal 0 HcmV?d00001 diff --git a/Resources/add_call_more_over.png b/Resources/add_call_more_over.png new file mode 100644 index 0000000000000000000000000000000000000000..09e5b91978ecd75e57f89e100ab2d39428d8c09b GIT binary patch literal 3554 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�H|q_gAuUy6A}l=AgWHi``Zi87ZBHLb=;Fb^*1g!Laja9 zd@lGFLavr_-vwnz(}GIEj)U<$DAoiCAy5eOU_qQnB#HqM2!{9&!iSMqSR@f35(ok( z9xmn0j^#^qD)odf%93&mNzx|a^PNs7&ne&$_5waE7K=R^2og&nVjX2x5_QE|9g&j? zD%@eRn{A|-u!0^%G><4DrCch~cPUtGX=(3;t&WL8Q6=NMP#YiSL41qFlh<3cgVf>w zgz-VNLtkdY`8wP|l-NzwdE`e}fwsD%oF0!BpK z2`=`3YR0F6;d`3nU(GVPMRlNO`M&ijqp zcAwl>MxYUOyT`$*jWoYDEKKg51i*K1eKW;FEJE-)N)hiz?OdHW|dOx-f`I)E^+TkD)pGo1^^v)L!YRF6xS z-){Xm=K->TeT}9o0}c+~zAWQk9Zewn)t?+c^X9Jz9&<*KhsEn>@|yO{O~{&S=o({p|H9N?1WI}Ya$$bQg*)rg zM|vGMzx3%Ky|55@Yp~H2x^`sba{Pq`(f+WCAD)>K{IY&KoGxpwnb~q6AmHPjs4XH% zPCvf#$<@twGG~%kTS>v2Ti+ylBQ#ESFNc2CH;@*XWSci9Ifj|g zmdz~j_i7%T1F*k+tz|7vXN8Z|F9ui5ocp4vE52nBaw=%>yw2kHYFcTX^K8(Qp_}4C z7nG!X#6+&A>|AB}YI|aD*0Tjfapl<4`w;=V9bt`8fHd<6sOka6kT0z?w0Wv*yh6DoomDvG+YQjxZ=HSgBbBx$6ewP(8$7pN5n1k)nzUn2 z8a-@Q(A3tk@}m#Wo@S561iGUPUWv_E&G*~%s#GqgHvFdqLyIwQo3*75N88v#`%aw< z+%T`P-~eJI*Jwugm%BM3wHq7Oy|S$A*fnqeALa;YB{!mviOjfe)ZW;O&0hd7Ud9|6 zxVg77XNmY(7YDP=KSZ_%sit)GpJmoX&qaUdOxr3}Ji5e4VdRR3hd0GWM>OuKMQL4s zzB-C+E`p-(uAx`c^&mH*V)SmoD($ecc~fK19rxiz-_tX08;wh|cpEV2;Cbor!vJA5 z91L6ozd3It0}Qt5tkg~edrG7cQui&=Ov^_cZpO`wcH>E(x|T=C>!@R|+XjT**ZcP! zX|2le*~Msg2sXKSmUNA_f@+`e6$CqNVc X%+t(>((I3fJolU?d8w*dVXXQaSpuga literal 0 HcmV?d00001 diff --git a/Resources/cadenas-interrogation.png b/Resources/cadenas-interrogation.png new file mode 100644 index 0000000000000000000000000000000000000000..1f68accf219a5d0c035feb80ff39ef4db62c198e GIT binary patch literal 1658 zcmbVNX;2eq82*xQ1mwslVw8$&L_xGo+B#WCuvdLzFfKCDH z5iKfEtY}+HEw)&-GKw?WORKh3samb}5NFzPhT2v|ahxfRSi9k{{o(kdJF~Oj`|a~Q z@A19w?uOz;g{jHYk^umzwgs4jede&Yke>hmr~erB6KhOmEG}j#RnFAlGyzOr%1uBv zKfZ!+5V*HCbcVTnGS}b zu}j2yqrK%i2WB1f#aen1$uL2kR9aJ0BdL)~D0+ny(Q36Z4Vg^LBE;d^0E0)wf$*$x z1&j!LXkU==Q2{8Xh`XsOMlWI`9ZkU>wA-Hu2f|~8VoN5C;6W)Ofu(+bEUyuCm~jyQ zhVfK%*jXDSqz)oXRnZ>yJj!Q{liAum+ffY2Mx$Fy``AOlD>2GbPj7X{Ki-6Fht^qoGF$LZB$i2#}qBU33E302(h$ zRW0ZF48YsR8=L`^bN;9Ur#7W@9nW5PsNtQYeofgDej?zUirz9Qwq%0AxbBdVb7Wq} zN@2@zL=b(57vO8$%&(w?9}+rmn7c|Ix1cH7JQKv(c5=Hg%6>)Sl8X{Z{`1DK(u@zF zEgcVsvIOB>Z#7o-#dVp|ia%_;_8G9BtnZrHv|z~aZGATw0=wfIT-j%W?G-03reKM8 zS{|j}JHIlgPXe9U4+${t>4e7C-Lo#2pcPsHhZIx;`6!C(Wb_vb4O!AAyq<2viQ{0W;g zdZV3PpzuLM%0OA~&rROW!pu1d^EloET1Rikqm0OH!zVvx@7fDKxSNCtGm->lSijQE zDc#w&KJ#9+Yt@74(Ohn5_Kx?zto?yAH*&Xe(|4`E@!lM68fd=h+F0!ct$Q2XkuTO0 zg5rW>{Ql)@O0V&E8$?sDr;DRJzGk>!hey>>GNohR-_O~yov-Gji?M{re6aTHs-Ej1 zUfSW`w@-AE@ow94NAZQEj>+P@J=3Nb5Af5PoA=!x?7A_t?VPaLycbMU4wLkx(AJg5 zdxo-JujRTHR=)k>Wb$iMWg1tTlP!)8S|;rq_P%Gf9?s1@OD1=3y^=~EU5$54XTbh} z2|_ZlWfE~S)RSk6zp&@!svcAxm%E|#7Z4J4Cuq1Jo;>vKD=pv5jr|R5mPOdd=CalQ E0Au+)`v3p{ literal 0 HcmV?d00001 diff --git a/Resources/cadenas.png b/Resources/cadenas.png new file mode 100644 index 0000000000000000000000000000000000000000..0a48c7d1464962b9304307449de57e3c806ec44b GIT binary patch literal 1340 zcmbVMTWs4@7(VGGbQ>*Ms}(x7$~a*K(Zv@bMH<7KyA2N=*8a#{60`)2Ee3D-kHHhlOBxgeM(v%7BvKX zDWx9~;hZ>tdXbnK$zMbr092->SX_@s4suB)XBQ2Oy_i!m8-R|kqADf_kxulZ0ZHb` z)wxeeLQ3)EQ|%ELQ3EI=b&qPOZ?q?t934!0Qe;;r(NW~EKo035QOsrK0$1e8bzKgx zjctk~)*<>JPi_Pik3@-pq9LN)4%?E@1ql~zryWj~Wm^db(vX4-MKf(Q%Q+YhLSpkF zu{SN1=6Z$DrY~&qWJcFjj-rN#hwZ}-yP^$Hw8!HyG#I80BiafhvMv_eT5K997uOvbglyCVaLqu~x|5{r5mH@WV+a=CzpL|xHhijpmNKs2N1N+F}DM4+#oh=@r^Hf-Z~HnJ6vCcS`C zAx+5<>-FWNZT!1K(9bxa(*ZZ~_TbP%t{@X~`5k_mVaZKy>i^V?!og5RbNr`S%3HVt zjpbJBV`FQ0kc=lr!=vFp^34x;I(f-s#}0Tnd|s_S|1{m(VuepwP$Uz2<$V0tCn(*29+<*$}4rnWil}rqA3YtL`;b)LdF#64$_qCU1Uz%r?@zQh4)Npl-@+t3C<)61(qloNa!( zCDza}{p%kZIk7NyweHsR0QjuJJ#(tXQdM_w(fr7%JrCDMe>V~H@1Nh_db<(iJEv?z zroE3nn8?4r@AS3t8yD)Amw@e~<|%&i@Wjmve`d^kNYoTRcd2B%?{ok451PhLKj}R( zQ);$*_Z^%1yHXu#X!_Cm)`4rt{7J?2PJ6Yj6pBCOJ?p!CPN0{{|#{L1!>$r#j literal 0 HcmV?d00001 diff --git a/Resources/finir-conference-actif.png b/Resources/finir-conference-actif.png new file mode 100644 index 0000000000000000000000000000000000000000..baf09bc3dde2df17e802aef29c1f37f57caa0c53 GIT binary patch literal 6850 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 E0~pY=6951J literal 0 HcmV?d00001 diff --git a/Resources/finir-conference-over.png b/Resources/finir-conference-over.png new file mode 100644 index 0000000000000000000000000000000000000000..132af8c6d0a088fbeca3b9592ada28506bc53d26 GIT binary patch literal 4511 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 literal 0 HcmV?d00001 diff --git a/Resources/options_default.png b/Resources/options_default.png new file mode 100644 index 0000000000000000000000000000000000000000..dd06140cdd230d95643de0c3b131e2cda0dcd9c6 GIT binary patch literal 7422 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 literal 0 HcmV?d00001 diff --git a/Resources/options_disabled.png b/Resources/options_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0339da9723b59af1d887d92a092694bf0f5462be GIT binary patch literal 7265 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 literal 0 HcmV?d00001 diff --git a/Resources/ring-champ-numero-actif.png b/Resources/ring-champ-numero-actif.png new file mode 100644 index 0000000000000000000000000000000000000000..1231ba873cf5bcceeaea871b36567ee72158ee4e GIT binary patch literal 2431 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 literal 0 HcmV?d00001 diff --git a/Resources/start-conference-actif.png b/Resources/start-conference-actif.png new file mode 100644 index 0000000000000000000000000000000000000000..ca03a9940a7263c85dc6ddf6a27cd6c13db86b38 GIT binary patch literal 8390 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 literal 0 HcmV?d00001 diff --git a/Resources/start-conference-over.png b/Resources/start-conference-over.png new file mode 100644 index 0000000000000000000000000000000000000000..6446f9dea2de4d5b9fac7faf0c4e6ce1595e639b GIT binary patch literal 5518 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 UVOt-bUtdUXXx>CUQMZr!AG_-bHvj+t literal 0 HcmV?d00001 diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 8fb12ee79..d6a3dc5c7 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -181,6 +181,18 @@ 7066FC0C13E830E400EFC6DC /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7066FC0B13E830E400EFC6DC /* libvpx.a */; }; 70E542F313E147E3002BA2C0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F213E147E3002BA2C0 /* OpenGLES.framework */; }; 70E542F513E147EB002BA2C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F413E147EB002BA2C0 /* QuartzCore.framework */; }; + D31AAF5E159B3919002C6B02 /* InCallTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D31AAF5D159B3919002C6B02 /* InCallTableViewController.m */; }; + D31AAF5F159B3919002C6B02 /* InCallTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D31AAF5D159B3919002C6B02 /* InCallTableViewController.m */; }; + D31AAF63159B5B6F002C6B02 /* start-conference-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF61159B5B6E002C6B02 /* start-conference-actif.png */; }; + D31AAF64159B5B6F002C6B02 /* start-conference-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF61159B5B6E002C6B02 /* start-conference-actif.png */; }; + D31AAF65159B5B6F002C6B02 /* start-conference-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF62159B5B6E002C6B02 /* start-conference-over.png */; }; + D31AAF66159B5B6F002C6B02 /* start-conference-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF62159B5B6E002C6B02 /* start-conference-over.png */; }; + D31AAF69159B5C68002C6B02 /* finir-conference-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF67159B5C68002C6B02 /* finir-conference-actif.png */; }; + D31AAF6A159B5C68002C6B02 /* finir-conference-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF67159B5C68002C6B02 /* finir-conference-actif.png */; }; + D31AAF6B159B5C68002C6B02 /* finir-conference-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF68159B5C68002C6B02 /* finir-conference-over.png */; }; + D31AAF6C159B5C68002C6B02 /* finir-conference-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF68159B5C68002C6B02 /* finir-conference-over.png */; }; + D31AAF6E159B65E1002C6B02 /* ring-champ-numero-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF6D159B65E1002C6B02 /* ring-champ-numero-actif.png */; }; + D31AAF6F159B65E1002C6B02 /* ring-champ-numero-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D31AAF6D159B65E1002C6B02 /* ring-champ-numero-actif.png */; }; D31AC4B0158A29C600C2638B /* UIHistoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */; }; D31AC4B1158A29C600C2638B /* UIHistoryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */; }; D31B4B21159876C0002E6C72 /* UICompositeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D31B4B1F159876C0002E6C72 /* UICompositeViewController.m */; }; @@ -370,6 +382,24 @@ D3A55FBD15877E5E003FD403 /* UIContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A55FBB15877E5E003FD403 /* UIContactCell.m */; }; D3A55FBF15877E69003FD403 /* UIContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3A55FBE15877E69003FD403 /* UIContactCell.xib */; }; D3A55FC015877E69003FD403 /* UIContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3A55FBE15877E69003FD403 /* UIContactCell.xib */; }; + D3D6A39E159B0EEF005F692C /* add_call_more_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39B159B0EEF005F692C /* add_call_more_default.png */; }; + D3D6A39F159B0EEF005F692C /* add_call_more_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39B159B0EEF005F692C /* add_call_more_default.png */; }; + D3D6A3A0159B0EEF005F692C /* add_call_more_disable.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */; }; + D3D6A3A1159B0EEF005F692C /* add_call_more_disable.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */; }; + D3D6A3A2159B0EEF005F692C /* add_call_more_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39D159B0EEF005F692C /* add_call_more_over.png */; }; + D3D6A3A3159B0EEF005F692C /* add_call_more_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39D159B0EEF005F692C /* add_call_more_over.png */; }; + D3D6A3AB159B0EFE005F692C /* cadenas-barre.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A5159B0EFE005F692C /* cadenas-barre.png */; }; + D3D6A3AC159B0EFE005F692C /* cadenas-barre.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A5159B0EFE005F692C /* cadenas-barre.png */; }; + D3D6A3AD159B0EFE005F692C /* cadenas-interrogation.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A6159B0EFE005F692C /* cadenas-interrogation.png */; }; + D3D6A3AE159B0EFE005F692C /* cadenas-interrogation.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A6159B0EFE005F692C /* cadenas-interrogation.png */; }; + D3D6A3AF159B0EFE005F692C /* cadenas.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A7159B0EFE005F692C /* cadenas.png */; }; + D3D6A3B0159B0EFE005F692C /* cadenas.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A7159B0EFE005F692C /* cadenas.png */; }; + D3D6A3B1159B0EFE005F692C /* options_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A8159B0EFE005F692C /* options_default.png */; }; + D3D6A3B2159B0EFE005F692C /* options_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A8159B0EFE005F692C /* options_default.png */; }; + D3D6A3B3159B0EFE005F692C /* options_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A9159B0EFE005F692C /* options_disabled.png */; }; + D3D6A3B4159B0EFE005F692C /* options_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3A9159B0EFE005F692C /* options_disabled.png */; }; + D3D6A3B5159B0EFE005F692C /* options_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3AA159B0EFE005F692C /* options_over.png */; }; + D3D6A3B6159B0EFE005F692C /* options_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A3AA159B0EFE005F692C /* options_over.png */; }; D3EA53FD159850E80037DC6B /* LinphoneManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D3EA53FC159850E80037DC6B /* LinphoneManager.m */; }; D3EA53FE159850E80037DC6B /* LinphoneManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D3EA53FC159850E80037DC6B /* LinphoneManager.m */; }; D3EA5403159852080037DC6B /* tchat-edit-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D3EA53FF159852080037DC6B /* tchat-edit-actif.png */; }; @@ -452,10 +482,6 @@ D3F83EED1582021700336684 /* InCallViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F83EEA1582021700336684 /* InCallViewController.m */; }; D3F83EEE1582021700336684 /* InCallViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EEB1582021700336684 /* InCallViewController.xib */; }; D3F83EEF1582021700336684 /* InCallViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EEB1582021700336684 /* InCallViewController.xib */; }; - D3F83F04158205A100336684 /* add-call-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF0158205A100336684 /* add-call-actif.png */; }; - D3F83F05158205A100336684 /* add-call-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF0158205A100336684 /* add-call-actif.png */; }; - D3F83F06158205A100336684 /* add-call-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF1158205A100336684 /* add-call-over.png */; }; - D3F83F07158205A100336684 /* add-call-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF1158205A100336684 /* add-call-over.png */; }; D3F83F08158205A100336684 /* dialer-meteo-sortir-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF2158205A100336684 /* dialer-meteo-sortir-actif.png */; }; D3F83F09158205A100336684 /* dialer-meteo-sortir-actif.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF2158205A100336684 /* dialer-meteo-sortir-actif.png */; }; D3F83F0A158205A100336684 /* dialer-meteo-sortir-over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F83EF3158205A100336684 /* dialer-meteo-sortir-over.png */; }; @@ -888,6 +914,13 @@ 70E542F213E147E3002BA2C0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 70E542F413E147EB002BA2C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 8D1107310486CEB800E47090 /* linphone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "linphone-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + D31AAF5C159B3919002C6B02 /* InCallTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InCallTableViewController.h; sourceTree = ""; }; + D31AAF5D159B3919002C6B02 /* InCallTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InCallTableViewController.m; sourceTree = ""; }; + D31AAF61159B5B6E002C6B02 /* start-conference-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "start-conference-actif.png"; path = "Resources/start-conference-actif.png"; sourceTree = ""; }; + D31AAF62159B5B6E002C6B02 /* start-conference-over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "start-conference-over.png"; path = "Resources/start-conference-over.png"; sourceTree = ""; }; + D31AAF67159B5C68002C6B02 /* finir-conference-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "finir-conference-actif.png"; path = "Resources/finir-conference-actif.png"; sourceTree = ""; }; + D31AAF68159B5C68002C6B02 /* finir-conference-over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "finir-conference-over.png"; path = "Resources/finir-conference-over.png"; sourceTree = ""; }; + D31AAF6D159B65E1002C6B02 /* ring-champ-numero-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ring-champ-numero-actif.png"; path = "Resources/ring-champ-numero-actif.png"; sourceTree = ""; }; D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIHistoryCell.xib; sourceTree = ""; }; D31B4B1E159876C0002E6C72 /* UICompositeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICompositeViewController.h; sourceTree = ""; }; D31B4B1F159876C0002E6C72 /* UICompositeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICompositeViewController.m; sourceTree = ""; }; @@ -1022,6 +1055,15 @@ D3A55FBA15877E5E003FD403 /* UIContactCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIContactCell.h; sourceTree = ""; }; D3A55FBB15877E5E003FD403 /* UIContactCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIContactCell.m; sourceTree = ""; }; D3A55FBE15877E69003FD403 /* UIContactCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIContactCell.xib; sourceTree = ""; }; + D3D6A39B159B0EEF005F692C /* add_call_more_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_default.png; path = Resources/add_call_more_default.png; sourceTree = ""; }; + D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_disable.png; path = Resources/add_call_more_disable.png; sourceTree = ""; }; + D3D6A39D159B0EEF005F692C /* add_call_more_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_over.png; path = Resources/add_call_more_over.png; sourceTree = ""; }; + D3D6A3A5159B0EFE005F692C /* cadenas-barre.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "cadenas-barre.png"; path = "Resources/cadenas-barre.png"; sourceTree = ""; }; + D3D6A3A6159B0EFE005F692C /* cadenas-interrogation.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "cadenas-interrogation.png"; path = "Resources/cadenas-interrogation.png"; sourceTree = ""; }; + D3D6A3A7159B0EFE005F692C /* cadenas.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cadenas.png; path = Resources/cadenas.png; sourceTree = ""; }; + D3D6A3A8159B0EFE005F692C /* options_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_default.png; path = Resources/options_default.png; sourceTree = ""; }; + D3D6A3A9159B0EFE005F692C /* options_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_disabled.png; path = Resources/options_disabled.png; sourceTree = ""; }; + D3D6A3AA159B0EFE005F692C /* options_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_over.png; path = Resources/options_over.png; sourceTree = ""; }; D3EA53FB159850E80037DC6B /* LinphoneManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneManager.h; sourceTree = ""; }; D3EA53FC159850E80037DC6B /* LinphoneManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneManager.m; sourceTree = ""; }; D3EA53FF159852080037DC6B /* tchat-edit-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "tchat-edit-actif.png"; path = "Resources/tchat-edit-actif.png"; sourceTree = ""; }; @@ -1073,8 +1115,6 @@ D3F83EE91582021700336684 /* InCallViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InCallViewController.h; sourceTree = ""; }; D3F83EEA1582021700336684 /* InCallViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InCallViewController.m; sourceTree = ""; }; D3F83EEB1582021700336684 /* InCallViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = InCallViewController.xib; sourceTree = ""; }; - D3F83EF0158205A100336684 /* add-call-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "add-call-actif.png"; path = "Resources/add-call-actif.png"; sourceTree = ""; }; - D3F83EF1158205A100336684 /* add-call-over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "add-call-over.png"; path = "Resources/add-call-over.png"; sourceTree = ""; }; D3F83EF2158205A100336684 /* dialer-meteo-sortir-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dialer-meteo-sortir-actif.png"; path = "Resources/dialer-meteo-sortir-actif.png"; sourceTree = ""; }; D3F83EF3158205A100336684 /* dialer-meteo-sortir-over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "dialer-meteo-sortir-over.png"; path = "Resources/dialer-meteo-sortir-over.png"; sourceTree = ""; }; D3F83EF4158205A100336684 /* micro-OFF-actif.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "micro-OFF-actif.png"; path = "Resources/micro-OFF-actif.png"; sourceTree = ""; }; @@ -1264,6 +1304,8 @@ D3ED3EB515873928006C0DE4 /* HistoryViewController.h */, D3ED3EB615873929006C0DE4 /* HistoryViewController.m */, D3ED3EB2158738FA006C0DE4 /* HistoryViewController.xib */, + D31AAF5C159B3919002C6B02 /* InCallTableViewController.h */, + D31AAF5D159B3919002C6B02 /* InCallTableViewController.m */, 3422AA4F14975EC9000D4E8A /* InCallViewController-ipad.xib */, D3F83EE91582021700336684 /* InCallViewController.h */, D3F83EEA1582021700336684 /* InCallViewController.m */, @@ -1744,13 +1786,14 @@ D3F83F3D1582223B00336684 /* 8-over.png */, D3F83F3E1582223B00336684 /* 9-actif.png */, D3F83F3F1582223B00336684 /* 9-over.png */, - D3F83EF0158205A100336684 /* add-call-actif.png */, - D3F83EF1158205A100336684 /* add-call-over.png */, D3ED3E6715861A53006C0DE4 /* add-contact-actif.png */, D354980E15875608000081D8 /* add-contact-depuis-detail-actif.png */, D354980F15875608000081D8 /* add-contact-depuis-detail-over.png */, D3ED3E6815861A53006C0DE4 /* add-contact-inactif.png */, D3ED3E6915861A53006C0DE4 /* add-contact-over.png */, + D3D6A39B159B0EEF005F692C /* add_call_more_default.png */, + D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */, + D3D6A39D159B0EEF005F692C /* add_call_more_over.png */, D3ED3E9215872EF1006C0DE4 /* all-call-actif.png */, D3ED3E9315872EF1006C0DE4 /* all-call-selectionne.png */, D354980215875534000081D8 /* all-contacts-actif.png */, @@ -1769,6 +1812,9 @@ D3ED3E511585FFFD006C0DE4 /* barre-noire-top.png */, D354981815876FE7000081D8 /* bouton-detail-contact-actif.png */, D354981915876FE7000081D8 /* bouton-detail-contact-over.png */, + D3D6A3A5159B0EFE005F692C /* cadenas-barre.png */, + D3D6A3A6159B0EFE005F692C /* cadenas-interrogation.png */, + D3D6A3A7159B0EFE005F692C /* cadenas.png */, D3F83F801582278D00336684 /* cancel-actif.png */, D3F83F811582278D00336684 /* cancel-over.png */, D36C43CC158F2F370048BA40 /* champ-courbe-autres-numeros.png */, @@ -1798,6 +1844,8 @@ D3ED3E9515872EF1006C0DE4 /* edit-history-over.png */, D3F83F421582223B00336684 /* etoile-actif.png */, D3F83F431582223B00336684 /* etoile-over.png */, + D31AAF67159B5C68002C6B02 /* finir-conference-actif.png */, + D31AAF68159B5C68002C6B02 /* finir-conference-over.png */, D3ED3E401585FB4A006C0DE4 /* fond-clavier.png */, D31C9C89158A179A00756B45 /* fond-detail-numero.png */, D347347C1580E5F8003C7B8C /* history-actif.png */, @@ -1825,6 +1873,9 @@ 2242E312125235120061DDCE /* oldphone-mono-30s.caf */, 2237D4081084D7A9001383EE /* oldphone-mono.wav */, D3F34F2F1599B008005BE94F /* ombre-cotes-avatar.png */, + D3D6A3A8159B0EFE005F692C /* options_default.png */, + D3D6A3A9159B0EFE005F692C /* options_disabled.png */, + D3D6A3AA159B0EFE005F692C /* options_over.png */, D3F83EF8158205A100336684 /* pause-actif.png */, D36C43ED158F61EA0048BA40 /* pause-champ-numero-actif.png */, D36C43EE158F61EA0048BA40 /* pause-champ-numero-over.png */, @@ -1842,6 +1893,7 @@ D3F83F761582253100336684 /* refuser-actif.png */, D3F83F771582253100336684 /* refuser-over.png */, D37295C9158B1E2D00D2C0C7 /* registration_inprogress.png */, + D31AAF6D159B65E1002C6B02 /* ring-champ-numero-actif.png */, 22F254801073D99800AC9B3F /* ringback.wav */, 70571E1913FABCB000CDD3C2 /* rootca.pem */, D38327EF1580FE3A00FA0D23 /* settings-actif.png */, @@ -1851,6 +1903,8 @@ D3F83EFD158205A100336684 /* speacker-OFF-over.png */, D3F83EFE158205A100336684 /* speacker-ON-actif.png */, D3F83EFF158205A100336684 /* speacker-ON-over.png */, + D31AAF61159B5B6E002C6B02 /* start-conference-actif.png */, + D31AAF62159B5B6E002C6B02 /* start-conference-over.png */, 22226C11118197C0000CA27B /* startcall-green.png */, D3432A5C158A4446001C6B0B /* status_connected.png */, D3432A70158A45AF001C6B0B /* status_disconnected.png */, @@ -2100,8 +2154,6 @@ D3832802158100E400FA0D23 /* settings-over.png in Resources */, D3832803158100E400FA0D23 /* tchat-over.png in Resources */, D3F83EEE1582021700336684 /* InCallViewController.xib in Resources */, - D3F83F04158205A100336684 /* add-call-actif.png in Resources */, - D3F83F06158205A100336684 /* add-call-over.png in Resources */, D3F83F08158205A100336684 /* dialer-meteo-sortir-actif.png in Resources */, D3F83F0A158205A100336684 /* dialer-meteo-sortir-over.png in Resources */, D3F83F0C158205A100336684 /* micro-OFF-actif.png in Resources */, @@ -2238,6 +2290,20 @@ D31B4B281598A390002E6C72 /* avatar-inconnu.png in Resources */, D31B4B2A1598A390002E6C72 /* avatar-small.png in Resources */, D3F34F301599B008005BE94F /* ombre-cotes-avatar.png in Resources */, + D3D6A39E159B0EEF005F692C /* add_call_more_default.png in Resources */, + D3D6A3A0159B0EEF005F692C /* add_call_more_disable.png in Resources */, + D3D6A3A2159B0EEF005F692C /* add_call_more_over.png in Resources */, + D3D6A3AB159B0EFE005F692C /* cadenas-barre.png in Resources */, + D3D6A3AD159B0EFE005F692C /* cadenas-interrogation.png in Resources */, + D3D6A3AF159B0EFE005F692C /* cadenas.png in Resources */, + D3D6A3B1159B0EFE005F692C /* options_default.png in Resources */, + D3D6A3B3159B0EFE005F692C /* options_disabled.png in Resources */, + D3D6A3B5159B0EFE005F692C /* options_over.png in Resources */, + D31AAF63159B5B6F002C6B02 /* start-conference-actif.png in Resources */, + D31AAF65159B5B6F002C6B02 /* start-conference-over.png in Resources */, + D31AAF69159B5C68002C6B02 /* finir-conference-actif.png in Resources */, + D31AAF6B159B5C68002C6B02 /* finir-conference-over.png in Resources */, + D31AAF6E159B65E1002C6B02 /* ring-champ-numero-actif.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2273,8 +2339,6 @@ 57282931154AF1460076F540 /* history-orange.png in Resources */, 57282933154AF14D0076F540 /* dialer-orange.png in Resources */, D3F83EEF1582021700336684 /* InCallViewController.xib in Resources */, - D3F83F05158205A100336684 /* add-call-actif.png in Resources */, - D3F83F07158205A100336684 /* add-call-over.png in Resources */, D3F83F09158205A100336684 /* dialer-meteo-sortir-actif.png in Resources */, D3F83F0B158205A100336684 /* dialer-meteo-sortir-over.png in Resources */, D3F83F0D158205A100336684 /* micro-OFF-actif.png in Resources */, @@ -2411,6 +2475,20 @@ D31B4B291598A390002E6C72 /* avatar-inconnu.png in Resources */, D31B4B2B1598A390002E6C72 /* avatar-small.png in Resources */, D3F34F311599B008005BE94F /* ombre-cotes-avatar.png in Resources */, + D3D6A39F159B0EEF005F692C /* add_call_more_default.png in Resources */, + D3D6A3A1159B0EEF005F692C /* add_call_more_disable.png in Resources */, + D3D6A3A3159B0EEF005F692C /* add_call_more_over.png in Resources */, + D3D6A3AC159B0EFE005F692C /* cadenas-barre.png in Resources */, + D3D6A3AE159B0EFE005F692C /* cadenas-interrogation.png in Resources */, + D3D6A3B0159B0EFE005F692C /* cadenas.png in Resources */, + D3D6A3B2159B0EFE005F692C /* options_default.png in Resources */, + D3D6A3B4159B0EFE005F692C /* options_disabled.png in Resources */, + D3D6A3B6159B0EFE005F692C /* options_over.png in Resources */, + D31AAF64159B5B6F002C6B02 /* start-conference-actif.png in Resources */, + D31AAF66159B5B6F002C6B02 /* start-conference-over.png in Resources */, + D31AAF6A159B5C68002C6B02 /* finir-conference-actif.png in Resources */, + D31AAF6C159B5C68002C6B02 /* finir-conference-over.png in Resources */, + D31AAF6F159B65E1002C6B02 /* ring-champ-numero-actif.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2484,6 +2562,7 @@ D3F26BF115986B73005F9CAB /* IncomingCallViewController.m in Sources */, D31B4B21159876C0002E6C72 /* UICompositeViewController.m in Sources */, D3F34F351599C354005BE94F /* UIModalViewController.m in Sources */, + D31AAF5E159B3919002C6B02 /* InCallTableViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2554,6 +2633,7 @@ D3F26BF215986B73005F9CAB /* IncomingCallViewController.m in Sources */, D31B4B22159876C0002E6C72 /* UICompositeViewController.m in Sources */, D3F34F361599C354005BE94F /* UIModalViewController.m in Sources */, + D31AAF5F159B3919002C6B02 /* InCallTableViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };