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 8dbce108c..000000000 Binary files a/Resources/add-call-actif.png and /dev/null differ diff --git a/Resources/add-call-over.png b/Resources/add-call-over.png deleted file mode 100644 index 50fefa47f..000000000 Binary files a/Resources/add-call-over.png and /dev/null differ diff --git a/Resources/add_call_more_default.png b/Resources/add_call_more_default.png new file mode 100644 index 000000000..0932c749d Binary files /dev/null and b/Resources/add_call_more_default.png differ diff --git a/Resources/add_call_more_disable.png b/Resources/add_call_more_disable.png new file mode 100644 index 000000000..caee628d0 Binary files /dev/null and b/Resources/add_call_more_disable.png differ diff --git a/Resources/add_call_more_over.png b/Resources/add_call_more_over.png new file mode 100644 index 000000000..09e5b9197 Binary files /dev/null and b/Resources/add_call_more_over.png differ diff --git a/Resources/cadenas-barre.png b/Resources/cadenas-barre.png new file mode 100644 index 000000000..bf75d1b27 Binary files /dev/null and b/Resources/cadenas-barre.png differ diff --git a/Resources/cadenas-interrogation.png b/Resources/cadenas-interrogation.png new file mode 100644 index 000000000..1f68accf2 Binary files /dev/null and b/Resources/cadenas-interrogation.png differ diff --git a/Resources/cadenas.png b/Resources/cadenas.png new file mode 100644 index 000000000..0a48c7d14 Binary files /dev/null and b/Resources/cadenas.png differ diff --git a/Resources/finir-conference-actif.png b/Resources/finir-conference-actif.png new file mode 100644 index 000000000..baf09bc3d Binary files /dev/null and b/Resources/finir-conference-actif.png differ diff --git a/Resources/finir-conference-over.png b/Resources/finir-conference-over.png new file mode 100644 index 000000000..132af8c6d Binary files /dev/null and b/Resources/finir-conference-over.png differ diff --git a/Resources/options_default.png b/Resources/options_default.png new file mode 100644 index 000000000..dd06140cd Binary files /dev/null and b/Resources/options_default.png differ diff --git a/Resources/options_disabled.png b/Resources/options_disabled.png new file mode 100644 index 000000000..0339da972 Binary files /dev/null and b/Resources/options_disabled.png differ diff --git a/Resources/options_over.png b/Resources/options_over.png new file mode 100644 index 000000000..c9c2eb3aa Binary files /dev/null and b/Resources/options_over.png differ diff --git a/Resources/ring-champ-numero-actif.png b/Resources/ring-champ-numero-actif.png new file mode 100644 index 000000000..1231ba873 Binary files /dev/null and b/Resources/ring-champ-numero-actif.png differ diff --git a/Resources/start-conference-actif.png b/Resources/start-conference-actif.png new file mode 100644 index 000000000..ca03a9940 Binary files /dev/null and b/Resources/start-conference-actif.png differ diff --git a/Resources/start-conference-over.png b/Resources/start-conference-over.png new file mode 100644 index 000000000..6446f9dea Binary files /dev/null and b/Resources/start-conference-over.png differ 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; };