diff --git a/Classes/ChatViewController.h b/Classes/ChatViewController.h index abc40aed9..3b30aa446 100644 --- a/Classes/ChatViewController.h +++ b/Classes/ChatViewController.h @@ -19,10 +19,14 @@ #import +#import "ChatTableViewController.h" + @interface ChatViewController : UIViewController { - + ChatTableViewController *tableController; } +@property (nonatomic, retain) IBOutlet ChatTableViewController* tableController; + - (IBAction)onNew:(id) event; - (IBAction)onEdit:(id) event; diff --git a/Classes/ChatViewController.m b/Classes/ChatViewController.m index bb6c94fae..dd8f609d1 100644 --- a/Classes/ChatViewController.m +++ b/Classes/ChatViewController.m @@ -21,6 +21,12 @@ @implementation ChatViewController +@synthesize tableController; + +- (id)init { + return [super initWithNibName:@"ChatViewController" bundle:[NSBundle mainBundle]]; +} + - (IBAction)onNew: (id) event { } diff --git a/Classes/ChatViewController.xib b/Classes/ChatViewController.xib index 6e6ce99bd..e3944cd49 100644 --- a/Classes/ChatViewController.xib +++ b/Classes/ChatViewController.xib @@ -189,6 +189,14 @@ 14 + + + tableController + + + + 18 + view @@ -315,7 +323,7 @@ - 17 + 18 @@ -344,6 +352,17 @@ id + + tableController + ChatTableViewController + + + tableController + + tableController + ChatTableViewController + + IBProjectSource ./Classes/ChatViewController.h diff --git a/Classes/ContactsViewController.m b/Classes/ContactsViewController.m index 2512f2e1c..a946c277b 100644 --- a/Classes/ContactsViewController.m +++ b/Classes/ContactsViewController.m @@ -35,6 +35,10 @@ typedef enum _HistoryView { History_MAX } HistoryView; +- (id)init { + return [super initWithNibName:@"ContactsViewController" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.tableView reloadData]; diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m index e9e7f6a5d..22247ba79 100644 --- a/Classes/DialerViewController.m +++ b/Classes/DialerViewController.m @@ -48,6 +48,10 @@ @synthesize zeroButton; @synthesize hashButton; +- (id)init { + return [super initWithNibName:@"DialerViewController" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //TODO diff --git a/Classes/HistoryViewController.m b/Classes/HistoryViewController.m index 9a4628b61..0a1f8c4e8 100644 --- a/Classes/HistoryViewController.m +++ b/Classes/HistoryViewController.m @@ -34,6 +34,10 @@ typedef enum _HistoryView { History_MAX } HistoryView; +- (id)init { + return [super initWithNibName:@"HistoryViewController" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.tableView reloadData]; diff --git a/Classes/InCallViewController.m b/Classes/InCallViewController.m index 310c3e0ee..4b39572f3 100644 --- a/Classes/InCallViewController.m +++ b/Classes/InCallViewController.m @@ -48,6 +48,10 @@ const NSInteger SECURE_BUTTON_TAG=5; @synthesize testVideoView; #endif +- (id)init { + return [super initWithNibName:@"InCallViewController" bundle:[NSBundle mainBundle]]; +} + + (bool)isInConference:(LinphoneCall*) call { if (!call) return false; diff --git a/Classes/IncomingCallViewController.m b/Classes/IncomingCallViewController.m index 69fc66e79..0e8a2acb3 100644 --- a/Classes/IncomingCallViewController.m +++ b/Classes/IncomingCallViewController.m @@ -23,6 +23,10 @@ @synthesize addressLabel; +- (id)init { + return [super initWithNibName:@"IncomingCallViewController" bundle:[NSBundle mainBundle]]; +} + - (IBAction)onAcceptClick:(id) event { } diff --git a/Classes/LinphoneUI/UICallBar.m b/Classes/LinphoneUI/UICallBar.m index fe0dc3bc0..59cc5417c 100644 --- a/Classes/LinphoneUI/UICallBar.m +++ b/Classes/LinphoneUI/UICallBar.m @@ -30,6 +30,10 @@ @synthesize microButton; @synthesize speakerButton; +- (id)init { + return [super initWithNibName:@"UICallBar" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidLoad { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callUpdate:) name:@"LinphoneCallUpdate" object:nil]; } diff --git a/Classes/LinphoneUI/UIChatCell.h b/Classes/LinphoneUI/UIChatCell.h index a0581bfa0..6d10e6374 100644 --- a/Classes/LinphoneUI/UIChatCell.h +++ b/Classes/LinphoneUI/UIChatCell.h @@ -20,10 +20,12 @@ #import @interface UIChatCell : UITableViewCell { + UIImageView *avatarView; UILabel *displayNameLabel; UILabel *chatContentLabel; } +@property (nonatomic, retain) IBOutlet UIImageView *avatarView; @property (nonatomic, retain) IBOutlet UILabel* displayNameLabel; @property (nonatomic, retain) IBOutlet UILabel* chatContentLabel; diff --git a/Classes/LinphoneUI/UIChatCell.m b/Classes/LinphoneUI/UIChatCell.m index 414584644..ae8693e42 100644 --- a/Classes/LinphoneUI/UIChatCell.m +++ b/Classes/LinphoneUI/UIChatCell.m @@ -21,6 +21,7 @@ @implementation UIChatCell +@synthesize avatarView; @synthesize displayNameLabel; @synthesize chatContentLabel; @@ -42,6 +43,9 @@ } - (void)update{ + + [avatarView setImage:[UIImage imageNamed:@"avatar-small.png"]]; + // // Adapt size // diff --git a/Classes/LinphoneUI/UIChatCell.xib b/Classes/LinphoneUI/UIChatCell.xib index 38bed9633..dcdc7cd9d 100644 --- a/Classes/LinphoneUI/UIChatCell.xib +++ b/Classes/LinphoneUI/UIChatCell.xib @@ -123,7 +123,6 @@ {{276, 0}, {44, 44}} - _NS:9 NO IBCocoaTouchFramework @@ -198,6 +197,14 @@ 24 + + + avatarView + + + + 25 + onDetails: @@ -281,7 +288,7 @@ - 24 + 25 @@ -300,10 +307,15 @@ + UIImageView UILabel UILabel + + avatarView + UIImageView + chatContentLabel UILabel diff --git a/Classes/LinphoneUI/UICompositeViewController.h b/Classes/LinphoneUI/UICompositeViewController.h index 71d7d97d3..c684228e0 100644 --- a/Classes/LinphoneUI/UICompositeViewController.h +++ b/Classes/LinphoneUI/UICompositeViewController.h @@ -18,9 +18,47 @@ */ #import +#import "LinphoneManager.h" + +@interface UICompositeViewDescription: NSObject{ +@public + NSString *content; + NSString *stateBar; + BOOL stateBarEnabled; + NSString *tabBar; + BOOL tabBarEnabled; + BOOL fullscreen; +} +- (id)copy; +- (id)init:(NSString *)content stateBar:(NSString*)stateBar + stateBarEnabled:(BOOL) stateBarEnabled + tabBar:(NSString*)tabBar + tabBarEnabled:(BOOL) tabBarEnabled + fullscreen:(BOOL) fullscreen; +@end @interface UICompositeViewController : UIViewController { + @private + UIView *stateBarView; + UIViewController *stateBarViewController; + UIView *contentView; + UIViewController *contentViewController; + UIView *tabBarView; + UIViewController *tabBarViewController; + NSMutableDictionary *viewControllerCache; + + UICompositeViewDescription *currentViewDescription; } +@property (nonatomic, retain) IBOutlet UIView* stateBarView; +@property (nonatomic, retain) IBOutlet UIView* contentView; +@property (nonatomic, retain) IBOutlet UIView* tabBarView; + +- (void) changeView:(UICompositeViewDescription *)description; +- (void) setFullScreen:(BOOL) enabled; +- (void) setToolBarHidden:(BOOL) hidden; + +- (UIViewController *) getCurrentViewController; + @end diff --git a/Classes/LinphoneUI/UICompositeViewController.m b/Classes/LinphoneUI/UICompositeViewController.m index 9472919b8..895f0f06a 100644 --- a/Classes/LinphoneUI/UICompositeViewController.m +++ b/Classes/LinphoneUI/UICompositeViewController.m @@ -19,6 +19,267 @@ #import "UICompositeViewController.h" -@implementation UICompositeViewController +#import + +@implementation UICompositeViewDescription + +- (id)copy { + UICompositeViewDescription *copy = [UICompositeViewDescription alloc]; + copy->content = self->content; + copy->tabBar = self->tabBar; + copy->tabBarEnabled = self->tabBarEnabled; + copy->stateBarEnabled = self->stateBarEnabled; + copy->fullscreen = self->fullscreen; + return copy; +} + +- (id)init:(NSString *)acontent stateBar:(NSString*)astateBar + stateBarEnabled:(BOOL) astateBarEnabled + tabBar:(NSString*)atabBar + tabBarEnabled:(BOOL) atabBarEnabled + fullscreen:(BOOL) afullscreen { + self->content = acontent; + self->stateBar = astateBar; + self->stateBarEnabled = astateBarEnabled; + self->tabBar = atabBar; + self->tabBarEnabled = atabBarEnabled; + self->fullscreen = afullscreen; + + return self; +} + +@end + +@implementation UICompositeViewController + +@synthesize stateBarView; +@synthesize contentView; +@synthesize tabBarView; + + +- (void)myInit { + self->viewControllerCache = [[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)dealloc { + [contentView release]; + [stateBarView release]; + [tabBarView release]; + [viewControllerCache removeAllObjects]; + [currentViewDescription dealloc]; + [super dealloc]; +} + ++ (void)addSubView:(UIViewController*)controller view:(UIView*)view { + if(controller != nil) { + if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { + [controller viewWillAppear:NO]; + } + [view addSubview: controller.view]; + if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { + [controller viewDidAppear:NO]; + } + } +} + ++ (void)removeSubView:(UIViewController*)controller { + if(controller != nil) { + if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { + [controller viewWillDisappear:NO]; + } + [controller.view removeFromSuperview]; + if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { + [controller viewDidDisappear:NO]; + } + } +} + +- (UIViewController*)getCachedController:(NSString*)name { + UIViewController *controller = nil; + if(name != nil) { + controller = [viewControllerCache objectForKey:name]; + if(controller == nil) { + controller = [[NSClassFromString(name) alloc] init]; + [viewControllerCache setValue:controller forKey:name]; + } + } + return controller; +} + +- (void)update: (UICompositeViewDescription*) description tabBar:(NSNumber*)tabBar fullscreen:(NSNumber*)fullscreen { + + // Copy view description + UICompositeViewDescription *oldViewDescription = (currentViewDescription != nil)? [currentViewDescription copy]: nil; + + if(description != nil) { + currentViewDescription = description; + + // Animate only with a previous screen + if(oldViewDescription != nil) { + CATransition* trans = [CATransition animation]; + [trans setType:kCATransitionPush]; + [trans setDuration:0.35]; + [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; + [trans setSubtype:kCATransitionFromRight]; + [contentView.layer addAnimation:trans forKey:@"Transition"]; + if((oldViewDescription->stateBarEnabled == true && currentViewDescription->stateBarEnabled == false) || + (oldViewDescription->stateBarEnabled == false && currentViewDescription->stateBarEnabled == true)) { + [stateBarView.layer addAnimation:trans forKey:@"Transition"]; + } + if(oldViewDescription->tabBar != currentViewDescription->tabBar) { + [tabBarView.layer addAnimation:trans forKey:@"Transition"]; + } + } + + if(contentViewController != nil) { + [UICompositeViewController removeSubView: contentViewController]; + } + if(tabBarViewController != nil) { + [UICompositeViewController removeSubView: tabBarViewController]; + } + if(stateBarViewController != nil) { + [UICompositeViewController removeSubView: stateBarViewController]; + } + + stateBarViewController = [self getCachedController:description->stateBar]; + contentViewController = [self getCachedController:description->content]; + tabBarViewController = [self getCachedController:description->tabBar]; + } + + if(currentViewDescription == nil) { + return; + } + + if(tabBar != nil) { + currentViewDescription->tabBarEnabled = [tabBar boolValue]; + } + + if(fullscreen != nil) { + currentViewDescription->fullscreen = [fullscreen boolValue]; + [[UIApplication sharedApplication] setStatusBarHidden:currentViewDescription->fullscreen withAnimation:UIStatusBarAnimationSlide ]; + } else { + [[UIApplication sharedApplication] setStatusBarHidden:currentViewDescription->fullscreen withAnimation:UIStatusBarAnimationNone]; + } + + // Start animation + if(tabBar != nil || fullscreen != nil) { + [UIView beginAnimations:@"resize" context:nil]; + [UIView setAnimationDuration:0.35]; + [UIView setAnimationBeginsFromCurrentState:TRUE]; + } + + UIView *innerView = contentViewController.view; + + CGRect contentFrame = contentView.frame; + + // Resize StateBar + CGRect stateBarFrame = stateBarView.frame; + if(currentViewDescription->fullscreen) + stateBarFrame.origin.y = -20; + else + stateBarFrame.origin.y = 0; + + if(stateBarViewController != nil && currentViewDescription->stateBarEnabled) { + stateBarView.hidden = false; + [stateBarView setFrame: stateBarFrame]; + contentFrame.origin.y = stateBarFrame.size.height + stateBarFrame.origin.y; + } else { + stateBarView.hidden = true; + contentFrame.origin.y = stateBarFrame.origin.y; + } + + // Resize TabBar + CGRect tabFrame = tabBarView.frame; + if(tabBarViewController != nil && currentViewDescription->tabBarEnabled) { + tabBarView.hidden = false; + tabFrame.origin.y = [[UIScreen mainScreen] bounds].size.height - 20; + tabFrame.origin.x = [[UIScreen mainScreen] bounds].size.width; + tabFrame.size.height = tabBarViewController.view.frame.size.height; + tabFrame.size.width = tabBarViewController.view.frame.size.width; + tabFrame.origin.y -= tabFrame.size.height; + tabFrame.origin.x -= tabFrame.size.width; + contentFrame.size.height = tabFrame.origin.y - contentFrame.origin.y; + for (UIView *view in tabBarViewController.view.subviews) { + if(view.tag == -1) { + contentFrame.size.height += view.frame.origin.y; + break; + } + } + } else { + tabBarView.hidden = true; + contentFrame.size.height = tabFrame.origin.y + tabFrame.size.height; + if(currentViewDescription->fullscreen) + contentFrame.size.height += 20; + tabFrame.origin.y = [[UIScreen mainScreen] bounds].size.height - 20; + } + + // Resize innerView + CGRect innerContentFrame = innerView.frame; + innerContentFrame.size = contentFrame.size; + + + // Set frames + [contentView setFrame: contentFrame]; + [innerView setFrame: innerContentFrame]; + [tabBarView setFrame: tabFrame]; + + // Commit animation + if(tabBar != nil || fullscreen != nil) { + [UIView commitAnimations]; + } + + // Change view + if(description != nil) { + [UICompositeViewController addSubView: contentViewController view:contentView]; + [UICompositeViewController addSubView: tabBarViewController view:tabBarView]; + [UICompositeViewController addSubView: stateBarViewController view:stateBarView]; + } + + // Dealloc old view description + if(oldViewDescription != nil) { + [oldViewDescription dealloc]; + } +} + +- (void) changeView:(UICompositeViewDescription *)description { + [self view]; // Force view load + [self update:description tabBar:nil fullscreen:nil]; +} + +- (void) setFullScreen:(BOOL) enabled { + [self update:nil tabBar:nil fullscreen:[NSNumber numberWithBool:enabled]]; +} + +- (void) setToolBarHidden:(BOOL) hidden { + [self update:nil tabBar:[NSNumber numberWithBool:!hidden] fullscreen:nil]; +} + +- (UIViewController *) getCurrentViewController { + return contentViewController; +} @end diff --git a/Classes/LinphoneUI/UICompositeViewController.xib b/Classes/LinphoneUI/UICompositeViewController.xib index 4546f97b3..15ca250eb 100644 --- a/Classes/LinphoneUI/UICompositeViewController.xib +++ b/Classes/LinphoneUI/UICompositeViewController.xib @@ -98,6 +98,30 @@ 3 + + + contentView + + + + 17 + + + + stateBarView + + + + 18 + + + + tabBarView + + + + 19 + @@ -162,13 +186,32 @@ - 16 + 19 UICompositeViewController UIViewController + + UIView + UIView + UIView + + + + contentView + UIView + + + stateBarView + UIView + + + tabBarView + UIView + + IBProjectSource ./Classes/UICompositeViewController.h diff --git a/Classes/LinphoneUI/UIMainBar.m b/Classes/LinphoneUI/UIMainBar.m index 32f84cbe1..c7bd8aa41 100644 --- a/Classes/LinphoneUI/UIMainBar.m +++ b/Classes/LinphoneUI/UIMainBar.m @@ -28,12 +28,21 @@ @synthesize settingsButton; @synthesize chatButton; +- (id)init { + return [super initWithNibName:@"UIMainBar" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidLoad { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveLinphoneMainViewChangeEvent:) name:@"LinphoneMainViewChange" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveLinphoneMainViewChangeEvent:) name:@"LinphoneMainViewChange" object:nil]; + [self update:[[LinphoneManager instance] currentView]]; } - (void)receiveLinphoneMainViewChangeEvent: (NSNotification*) notif { PhoneView view = [[notif.userInfo objectForKey: @"view"] intValue]; + [self update:view]; +} + +- (void)update:(PhoneView) view { if(view == PhoneView_History) { historyButton.selected = TRUE; } else { diff --git a/Classes/LinphoneUI/UIStateBar.m b/Classes/LinphoneUI/UIStateBar.m index 524f1366f..2600765b6 100644 --- a/Classes/LinphoneUI/UIStateBar.m +++ b/Classes/LinphoneUI/UIStateBar.m @@ -30,6 +30,10 @@ NSTimer *callQualityTimer; +- (id)init { + return [super initWithNibName:@"UIStateBar" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidLoad { [super viewDidLoad]; @@ -45,7 +49,10 @@ NSTimer *callQualityTimer; repeats:YES]; // Update to default state - [self proxyConfigUpdate: NULL]; + LinphoneProxyConfig* config = NULL; + if([LinphoneManager isLcReady]) + linphone_core_get_default_proxy([LinphoneManager getLc], &config); + [self proxyConfigUpdate: config]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { diff --git a/Classes/PhoneMainView.h b/Classes/PhoneMainView.h index c02e8ed8d..c9951908b 100644 --- a/Classes/PhoneMainView.h +++ b/Classes/PhoneMainView.h @@ -21,48 +21,21 @@ #import "LinphoneManager.h" #import "CallDelegate.h" - -@interface ViewsDescription: NSObject{ -@public - UIViewController *content; - UIViewController *tabBar; - bool tabBarEnabled; - bool statusEnabled; - bool fullscreen; - PhoneView viewId; -} --(id) copy; -@end +#import "UICompositeViewController.h" @interface PhoneMainView : UIViewController { - UIView *stateBarView; - UIView *contentView; - UIView *tabBarView; + UICompositeViewController *mainViewController; + UICompositeViewController *modalViewController; @private NSMutableDictionary *viewDescriptions; - NSArray *views; - - UIViewController *stateBarController; - - UIViewController *callTabBarController; - UIViewController *mainTabBarController; - UIViewController *incomingCallTabBarController; - ViewsDescription *currentViewDescription; + PhoneView currentPhoneView; UIActionSheet *incomingCallActionSheet; UIActionSheet *batteryActionSheet; } -@property (nonatomic, retain) IBOutlet UIView* stateBarView; -@property (nonatomic, retain) IBOutlet UIView* contentView; -@property (nonatomic, retain) IBOutlet UIView* tabBarView; +@property (nonatomic, retain) IBOutlet UICompositeViewController *mainViewController; +@property (nonatomic, retain) IBOutlet UICompositeViewController *modalViewController; -@property (nonatomic, retain) IBOutlet UIViewController* stateBarController; - -@property (nonatomic, retain) IBOutlet UIViewController* callTabBarController; -@property (nonatomic, retain) IBOutlet UIViewController* mainTabBarController; -@property (nonatomic, retain) IBOutlet UIViewController* incomingCallTabBarController; - --(void) changeView: (NSNotification*) notif; @end diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index 93a8736e8..e286a2786 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -30,313 +30,163 @@ #import "AbstractCall.h" -@implementation ViewsDescription - -- (id)copy { - ViewsDescription *copy = [ViewsDescription alloc]; - copy->content = self->content; - copy->tabBar = self->tabBar; - copy->tabBarEnabled = self->tabBarEnabled; - copy->statusEnabled = self->statusEnabled; - copy->fullscreen = self->fullscreen; - copy->viewId = self->viewId; - return copy; -} -@end - @implementation PhoneMainView -@synthesize stateBarView; -@synthesize contentView; -@synthesize tabBarView; +@synthesize mainViewController; +@synthesize modalViewController; -@synthesize stateBarController; - -@synthesize callTabBarController; -@synthesize mainTabBarController; -@synthesize incomingCallTabBarController; - -+ (void)addSubView:(UIViewController*)controller view:(UIView*)view { - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewWillAppear:NO]; - } - [view addSubview: controller.view]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewDidAppear:NO]; - } +- (void)myInit { + self->currentPhoneView = -1; } -+ (void)removeSubView:(UIViewController*)controller { - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewWillDisappear:NO]; - } - [controller.view removeFromSuperview]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewDidDisappear:NO]; +- (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)changeView: (NSNotification*) notif { NSNumber *viewId = [notif.userInfo objectForKey: @"view"]; NSNumber *tabBar = [notif.userInfo objectForKey: @"tabBar"]; NSNumber *fullscreen = [notif.userInfo objectForKey: @"fullscreen"]; - // Copy view description - ViewsDescription *oldViewDescription = (currentViewDescription != nil)? [currentViewDescription copy]: nil; - // Check view change if(viewId != nil) { PhoneView view = [viewId intValue]; - ViewsDescription* description = [viewDescriptions objectForKey:[NSNumber numberWithInt: view]]; + UICompositeViewDescription* description = [viewDescriptions objectForKey:[NSNumber numberWithInt: view]]; if(description == nil) return; - description->viewId = view; // Auto-set viewId - if(currentViewDescription == nil || description->viewId != currentViewDescription->viewId) { - if(currentViewDescription != nil) - [currentViewDescription dealloc]; - currentViewDescription = [description copy]; - } else { - viewId = nil; - } - } - - if(currentViewDescription == nil) { - return; + if(view != currentPhoneView) { + [mainViewController changeView:description]; + currentPhoneView = view; + } } if(tabBar != nil) { - currentViewDescription->tabBarEnabled = [tabBar boolValue]; + [mainViewController setToolBarHidden:![tabBar boolValue]]; } if(fullscreen != nil) { - currentViewDescription->fullscreen = [fullscreen boolValue]; - [[UIApplication sharedApplication] setStatusBarHidden:currentViewDescription->fullscreen withAnimation:UIStatusBarAnimationSlide ]; - } else { - [[UIApplication sharedApplication] setStatusBarHidden:currentViewDescription->fullscreen withAnimation:UIStatusBarAnimationNone]; - } - - // View Transitions - if(viewId != nil) { - if(oldViewDescription != nil) { - CATransition* trans = [CATransition animation]; - [trans setType:kCATransitionPush]; - [trans setDuration:0.35]; - [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; - [trans setSubtype:kCATransitionFromRight]; - [contentView.layer addAnimation:trans forKey:@"Transition"]; - if((oldViewDescription->statusEnabled == true && currentViewDescription->statusEnabled == false) || - (oldViewDescription->statusEnabled == false && currentViewDescription->statusEnabled == true)) { - [stateBarView.layer addAnimation:trans forKey:@"Transition"]; - } - if(oldViewDescription->tabBar != currentViewDescription->tabBar) { - [tabBarView.layer addAnimation:trans forKey:@"Transition"]; - } - [PhoneMainView removeSubView: oldViewDescription->content]; - [PhoneMainView removeSubView: oldViewDescription->tabBar]; - } - } - - // Start animation - if(tabBar != nil || fullscreen != nil) { - [UIView beginAnimations:@"resize" context:nil]; - [UIView setAnimationDuration:0.35]; - [UIView setAnimationBeginsFromCurrentState:TRUE]; - } - - UIView *innerView = currentViewDescription->content.view; - - CGRect contentFrame = contentView.frame; - - // Resize StateBar - CGRect stateBarFrame = stateBarView.frame; - if(currentViewDescription->fullscreen) - stateBarFrame.origin.y = -20; - else - stateBarFrame.origin.y = 0; - - if(currentViewDescription->statusEnabled) { - stateBarView.hidden = false; - [stateBarView setFrame: stateBarFrame]; - contentFrame.origin.y = stateBarFrame.size.height + stateBarFrame.origin.y; - } else { - stateBarView.hidden = true; - contentFrame.origin.y = stateBarFrame.origin.y; - } - - // Resize TabBar - CGRect tabFrame = tabBarView.frame; - if(currentViewDescription->tabBar != nil && currentViewDescription->tabBarEnabled) { - tabFrame.origin.y = [[UIScreen mainScreen] bounds].size.height - 20; - tabFrame.origin.x = [[UIScreen mainScreen] bounds].size.width; - tabFrame.size.height = currentViewDescription->tabBar.view.frame.size.height; - tabFrame.size.width = currentViewDescription->tabBar.view.frame.size.width; - tabFrame.origin.y -= tabFrame.size.height; - tabFrame.origin.x -= tabFrame.size.width; - contentFrame.size.height = tabFrame.origin.y - contentFrame.origin.y; - for (UIView *view in currentViewDescription->tabBar.view.subviews) { - if(view.tag == -1) { - contentFrame.size.height += view.frame.origin.y; - break; - } - } - } else { - contentFrame.size.height = tabFrame.origin.y + tabFrame.size.height; - if(currentViewDescription->fullscreen) - contentFrame.size.height += 20; - tabFrame.origin.y = [[UIScreen mainScreen] bounds].size.height - 20; - } - - // Resize innerView - CGRect innerContentFrame = innerView.frame; - innerContentFrame.size = contentFrame.size; - - - // Set frames - [contentView setFrame: contentFrame]; - [innerView setFrame: innerContentFrame]; - [tabBarView setFrame: tabFrame]; - - // Commit animation - if(tabBar != nil || fullscreen != nil) { - [UIView commitAnimations]; - } - - // Change view - if(viewId != nil) { - [PhoneMainView addSubView: currentViewDescription->content view:contentView]; - [PhoneMainView addSubView: currentViewDescription->tabBar view:tabBarView]; + [mainViewController setFullScreen:[fullscreen boolValue]]; } // Call abstractCall NSDictionary *dict = [notif.userInfo objectForKey: @"args"]; if(dict != nil) - [AbstractCall call:currentViewDescription->content dict:dict]; - - // Dealloc old view description - if(oldViewDescription != nil) { - [oldViewDescription dealloc]; - } + [AbstractCall call:[mainViewController getCurrentViewController] dict:dict]; } - (void)viewDidLoad { [super viewDidLoad]; - UIView *dumb; + + [[self view] addSubview: mainViewController.view]; // Init view descriptions viewDescriptions = [[NSMutableDictionary alloc] init]; - // Load Bars - dumb = mainTabBarController.view; - - // Status Bar - [stateBarView addSubview: stateBarController.view]; - // // Main View // - DialerViewController* myDialerViewController = [[DialerViewController alloc] - initWithNibName:@"DialerViewController" - bundle:[NSBundle mainBundle]]; - //[myPhoneViewController loadView]; - ViewsDescription *dialerDescription = [ViewsDescription alloc]; - dialerDescription->content = myDialerViewController; - dialerDescription->tabBar = mainTabBarController; - dialerDescription->statusEnabled = true; - dialerDescription->fullscreen = false; + UICompositeViewDescription *dialerDescription = [UICompositeViewDescription alloc]; + dialerDescription->content = @"DialerViewController"; + dialerDescription->tabBar = @"UIMainBar"; dialerDescription->tabBarEnabled = true; + dialerDescription->stateBar = @"UIStateBar"; + dialerDescription->stateBarEnabled = true; + dialerDescription->fullscreen = false; [viewDescriptions setObject:dialerDescription forKey:[NSNumber numberWithInt: PhoneView_Dialer]]; // // Contacts View // - ContactsViewController* myContactsController = [[ContactsViewController alloc] - initWithNibName:@"ContactsViewController" - bundle:[NSBundle mainBundle]]; - //[myContactsController loadView]; - ViewsDescription *contactsDescription = [ViewsDescription alloc]; - contactsDescription->content = myContactsController; - contactsDescription->tabBar = mainTabBarController; - contactsDescription->statusEnabled = false; - contactsDescription->fullscreen = false; + UICompositeViewDescription *contactsDescription = [UICompositeViewDescription alloc]; + contactsDescription->content = @"ContactsViewController"; + contactsDescription->tabBar = @"UIMainBar"; contactsDescription->tabBarEnabled = true; + contactsDescription->stateBar = nil; + contactsDescription->stateBarEnabled = false; + contactsDescription->fullscreen = false; [viewDescriptions setObject:contactsDescription forKey:[NSNumber numberWithInt: PhoneView_Contacts]]; // // Call History View // - HistoryViewController* myHistoryController = [[HistoryViewController alloc] - initWithNibName:@"HistoryViewController" - bundle:[NSBundle mainBundle]]; - //[myHistoryController loadView]; - ViewsDescription *historyDescription = [ViewsDescription alloc]; - historyDescription->content = myHistoryController; - historyDescription->tabBar = mainTabBarController; - historyDescription->statusEnabled = false; - historyDescription->fullscreen = false; + UICompositeViewDescription *historyDescription = [UICompositeViewDescription alloc]; + historyDescription->content = @"HistoryViewController"; + historyDescription->tabBar = @"UIMainBar"; historyDescription->tabBarEnabled = true; + historyDescription->stateBar = nil; + historyDescription->stateBarEnabled = false; + historyDescription->fullscreen = false; [viewDescriptions setObject:historyDescription forKey:[NSNumber numberWithInt: PhoneView_History]]; // // IncomingCall View // - IncomingCallViewController* myIncomingCallController = [[IncomingCallViewController alloc] - initWithNibName:@"IncomingCallViewController" - bundle:[NSBundle mainBundle]]; - //[myChatViewController loadView]; - ViewsDescription *incomingCallDescription = [ViewsDescription alloc]; - incomingCallDescription->content = myIncomingCallController; - incomingCallDescription->tabBar = mainTabBarController; - incomingCallDescription->statusEnabled = true; + UICompositeViewDescription *incomingCallDescription = [UICompositeViewDescription alloc]; + incomingCallDescription->content = @"IncomingCallViewController"; + incomingCallDescription->tabBar = nil; + incomingCallDescription->tabBarEnabled = false; + incomingCallDescription->stateBar = @"UIStateBar"; + incomingCallDescription->stateBarEnabled = true; incomingCallDescription->fullscreen = false; - incomingCallDescription->tabBarEnabled = true; - [viewDescriptions setObject:incomingCallDescription forKey:[NSNumber numberWithInt: PhoneView_Chat]]; + [viewDescriptions setObject:incomingCallDescription forKey:[NSNumber numberWithInt: PhoneView_IncomingCall]]; // // InCall View // - InCallViewController* myInCallController = [[InCallViewController alloc] - initWithNibName:@"InCallViewController" - bundle:[NSBundle mainBundle]]; - //[myInCallController loadView]; - ViewsDescription *inCallDescription = [ViewsDescription alloc]; - inCallDescription->content = myInCallController; - inCallDescription->tabBar = nil; - inCallDescription->statusEnabled = true; + UICompositeViewDescription *inCallDescription = [UICompositeViewDescription alloc]; + inCallDescription->content = @"InCallViewController"; + inCallDescription->tabBar = @"UICallBar"; + inCallDescription->tabBarEnabled = true; + inCallDescription->stateBar = @"UIStateBar"; + inCallDescription->stateBarEnabled = true; inCallDescription->fullscreen = false; - inCallDescription->tabBarEnabled = false; [viewDescriptions setObject:inCallDescription forKey:[NSNumber numberWithInt: PhoneView_InCall]]; // // Settings View // - SettingsViewController* mySettingsViewController = [[SettingsViewController alloc] - initWithNibName:@"SettingsViewController" - bundle:[NSBundle mainBundle]]; - //[mySettingsViewController loadView]; - ViewsDescription *settingsDescription = [ViewsDescription alloc]; - settingsDescription->content = mySettingsViewController; - settingsDescription->tabBar = mainTabBarController; - settingsDescription->statusEnabled = false; - settingsDescription->fullscreen = false; + UICompositeViewDescription *settingsDescription = [UICompositeViewDescription alloc]; + settingsDescription->content = @"SettingsViewController"; + settingsDescription->tabBar = @"UIMainBar"; settingsDescription->tabBarEnabled = true; + settingsDescription->stateBar = nil; + settingsDescription->stateBarEnabled = false; + settingsDescription->fullscreen = false; [viewDescriptions setObject:settingsDescription forKey:[NSNumber numberWithInt: PhoneView_Settings]]; // // Chat View // - ChatViewController* myChatViewController = [[ChatViewController alloc] - initWithNibName:@"ChatViewController" - bundle:[NSBundle mainBundle]]; - //[myChatViewController loadView]; - ViewsDescription *chatDescription = [ViewsDescription alloc]; - chatDescription->content = myChatViewController; - chatDescription->tabBar = mainTabBarController; - chatDescription->statusEnabled = false; - chatDescription->fullscreen = false; + UICompositeViewDescription *chatDescription = [UICompositeViewDescription alloc]; + chatDescription->content = @"ChatViewController"; + chatDescription->tabBar = @"UIMainBar"; chatDescription->tabBarEnabled = true; + chatDescription->stateBar = nil; + chatDescription->stateBarEnabled = false; + chatDescription->fullscreen = false; [viewDescriptions setObject:chatDescription forKey:[NSNumber numberWithInt: PhoneView_Chat]]; // Set observers @@ -395,7 +245,7 @@ } } -- (void)callUpdate: (NSNotification*) notif { +- (void)callUpdate:(NSNotification*) notif { LinphoneCall *call = [[notif.userInfo objectForKey: @"call"] pointerValue]; LinphoneCallState state = [[notif.userInfo objectForKey: @"state"] intValue]; NSString *message = [notif.userInfo objectForKey: @"message"]; @@ -521,6 +371,7 @@ - (void)displayIncomingCall:(LinphoneCall*) call{ +#if 0 const char* userNameChars=linphone_address_get_username(linphone_call_get_remote_address(call)); NSString* userName = userNameChars?[[[NSString alloc] initWithUTF8String:userNameChars] autorelease]:NSLocalizedString(@"Unknown",nil); const char* displayNameChars = linphone_address_get_display_name(linphone_call_get_remote_address(call)); @@ -567,6 +418,10 @@ } [incomingCallActionSheet release]; } +#endif + //UICompositeViewController *controller = [[UICompositeViewController alloc] initWithNibName:@"UICompositeViewController" bundle:[NSBundle mainBundle]]; + [modalViewController changeView:[viewDescriptions objectForKey:[NSNumber numberWithInt:PhoneView_IncomingCall]]]; + [self presentModalViewController:modalViewController animated:false]; } - (void)batteryLevelChanged: (NSNotification*) notif { @@ -637,10 +492,8 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; + [viewDescriptions removeAllObjects]; [viewDescriptions release]; - [stateBarView release]; - [stateBarController release]; - [mainTabBarController release]; [super dealloc]; } diff --git a/Classes/PhoneMainView.xib b/Classes/PhoneMainView.xib index f1857e52a..0976956ee 100644 --- a/Classes/PhoneMainView.xib +++ b/Classes/PhoneMainView.xib @@ -38,53 +38,10 @@ 292 - - YES - - - 314 - {{0, 23}, {320, 380}} - - - - _NS:9 - YES - IBCocoaTouchFramework - - - - 274 - {320, 23} - - - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - - - - 280 - {{0, 400}, {320, 60}} - - - _NS:9 - - 3 - MCAwAA - - YES - IBCocoaTouchFramework - - {320, 460} - + _NS:9 3 @@ -132,7 +89,10 @@ IBCocoaTouchFramework 0 0 - + + 3 + MQA + 1 MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA @@ -165,6 +125,7 @@ {{192, 0}, {128, 72}} + _NS:9 NO @@ -236,9 +197,9 @@ NO IBCocoaTouchFramework - + NO - UIMainBar + UICompositeViewController 1 @@ -247,20 +208,9 @@ IBCocoaTouchFramework NO - + NO - UICallBar - - - 1 - 1 - - IBCocoaTouchFramework - NO - - - NO - UIStateBar + UICompositeViewController 1 @@ -283,51 +233,19 @@ - tabBarView + mainViewController - + - 160 + 209 - mainTabBarController + modalViewController - + - 192 - - - - callTabBarController - - - - 196 - - - - stateBarController - - - - 201 - - - - stateBarView - - - - 202 - - - - contentView - - - - 159 + 211 @@ -388,31 +306,10 @@ YES - - - root - - 135 - - - YES - - - tabBar - - - 53 - - - YES - - - content - 169 @@ -420,28 +317,16 @@ mask - 175 - - - stateBar + 208 + + + mainViewController - 178 - + 210 + - mainTabBarController - - - 190 - - - stateBarController - - - 194 - - - callTabBarController + modalViewController @@ -460,17 +345,12 @@ 131.IBUIButtonInspectorSelectedStateConfigurationMetadataKey 133.IBPluginDependency 133.IBUIButtonInspectorSelectedStateConfigurationMetadataKey - 135.IBPluginDependency 152.IBPluginDependency 169.IBPluginDependency - 175.IBPluginDependency - 178.CustomClassName - 178.IBPluginDependency - 190.CustomClassName - 190.IBPluginDependency - 194.CustomClassName - 194.IBPluginDependency - 53.IBPluginDependency + 208.CustomClassName + 208.IBPluginDependency + 210.CustomClassName + 210.IBPluginDependency YES @@ -487,14 +367,9 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UICompositeViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIMainBar - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIStateBar - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UICallBar - com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UICompositeViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -510,7 +385,7 @@ - 207 + 211 @@ -522,21 +397,53 @@ YES YES - callTabBarController + mainViewController + modalViewController + + + YES + UICompositeViewController + UICompositeViewController + + + + YES + + YES + mainViewController + modalViewController + + + YES + + mainViewController + UICompositeViewController + + + modalViewController + UICompositeViewController + + + + + IBProjectSource + ./Classes/PhoneMainView.h + + + + UICompositeViewController + UIViewController + + YES + + YES contentView - incomingCallTabBarController - mainTabBarController - stateBarController stateBarView tabBarView YES - UIViewController UIView - UIViewController - UIViewController - UIViewController UIView UIView @@ -545,36 +452,16 @@ YES YES - callTabBarController contentView - incomingCallTabBarController - mainTabBarController - stateBarController stateBarView tabBarView YES - - callTabBarController - UIViewController - contentView UIView - - incomingCallTabBarController - UIViewController - - - mainTabBarController - UIViewController - - - stateBarController - UIViewController - stateBarView UIView @@ -587,273 +474,7 @@ IBProjectSource - ./Classes/PhoneMainView.h - - - - UICallBar - UIViewController - - YES - - YES - microButton - pauseButton - speakerButton - videoButton - - - YES - UIMicroButton - UIPauseButton - UISpeakerButton - UIVideoButton - - - - YES - - YES - microButton - pauseButton - speakerButton - videoButton - - - YES - - microButton - UIMicroButton - - - pauseButton - UIPauseButton - - - speakerButton - UISpeakerButton - - - videoButton - UIVideoButton - - - - - IBProjectSource - ./Classes/UICallBar.h - - - - UIMainBar - UIViewController - - YES - - YES - onChatClick: - onContactsClick: - onDialerClick: - onHistoryClick: - onSettingsClick: - - - YES - id - id - id - id - id - - - - YES - - YES - onChatClick: - onContactsClick: - onDialerClick: - onHistoryClick: - onSettingsClick: - - - YES - - onChatClick: - id - - - onContactsClick: - id - - - onDialerClick: - id - - - onHistoryClick: - id - - - onSettingsClick: - id - - - - - YES - - YES - chatButton - contactsButton - dialerButton - historyButton - settingsButton - - - YES - UIButton - UIButton - UIButton - UIButton - UIButton - - - - YES - - YES - chatButton - contactsButton - dialerButton - historyButton - settingsButton - - - YES - - chatButton - UIButton - - - contactsButton - UIButton - - - dialerButton - UIButton - - - historyButton - UIButton - - - settingsButton - UIButton - - - - - IBProjectSource - ./Classes/UIMainBar.h - - - - UIMicroButton - UIToggleButton - - IBProjectSource - ./Classes/UIMicroButton.h - - - - UIPauseButton - UIToggleButton - - IBProjectSource - ./Classes/UIPauseButton.h - - - - UISpeakerButton - UIToggleButton - - IBProjectSource - ./Classes/UISpeakerButton.h - - - - UIStateBar - UIViewController - - YES - - YES - callQualityImage - registrationStateImage - registrationStateLabel - - - YES - UIImageView - UIImageView - UILabel - - - - YES - - YES - callQualityImage - registrationStateImage - registrationStateLabel - - - YES - - callQualityImage - UIImageView - - - registrationStateImage - UIImageView - - - registrationStateLabel - UILabel - - - - - IBProjectSource - ./Classes/UIStateBar.h - - - - UIToggleButton - UIButton - - IBProjectSource - ./Classes/UIToggleButton.h - - - - UIVideoButton - UIToggleButton - - videoUpdateIndicator - UIActivityIndicatorView - - - videoUpdateIndicator - - videoUpdateIndicator - UIActivityIndicatorView - - - - IBProjectSource - ./Classes/UIVideoButton.h + ./Classes/UICompositeViewController.h diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index 8b4a8da4a..099c208c1 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -25,6 +25,10 @@ @synthesize settingsController; @synthesize navigationController; +- (id)init { + return [super initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]]; +} + - (void)viewDidLoad { settingsController.delegate = [LinphoneManager instance]; settingsController.settingsReaderDelegate = self; diff --git a/Resources/avatar-inconnu.png b/Resources/avatar-inconnu.png new file mode 100644 index 000000000..1d1a7f705 Binary files /dev/null and b/Resources/avatar-inconnu.png differ diff --git a/Resources/avatar-small.png b/Resources/avatar-small.png new file mode 100644 index 000000000..143da1512 Binary files /dev/null and b/Resources/avatar-small.png differ diff --git a/Resources/champ-titre-incoming.png b/Resources/champ-titre-incoming.png index 109575547..205064389 100644 Binary files a/Resources/champ-titre-incoming.png and b/Resources/champ-titre-incoming.png differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index e45e8ef95..21854c92d 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -187,6 +187,10 @@ D31B4B22159876C0002E6C72 /* UICompositeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D31B4B1F159876C0002E6C72 /* UICompositeViewController.m */; }; D31B4B23159876C0002E6C72 /* UICompositeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B20159876C0002E6C72 /* UICompositeViewController.xib */; }; D31B4B24159876C0002E6C72 /* UICompositeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B20159876C0002E6C72 /* UICompositeViewController.xib */; }; + D31B4B281598A390002E6C72 /* avatar-inconnu.png in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B261598A390002E6C72 /* avatar-inconnu.png */; }; + D31B4B291598A390002E6C72 /* avatar-inconnu.png in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B261598A390002E6C72 /* avatar-inconnu.png */; }; + D31B4B2A1598A390002E6C72 /* avatar-small.png in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B271598A390002E6C72 /* avatar-small.png */; }; + D31B4B2B1598A390002E6C72 /* avatar-small.png in Resources */ = {isa = PBXBuildFile; fileRef = D31B4B271598A390002E6C72 /* avatar-small.png */; }; D31C9C8A158A179A00756B45 /* fond-detail-numero.png in Resources */ = {isa = PBXBuildFile; fileRef = D31C9C89158A179A00756B45 /* fond-detail-numero.png */; }; D31C9C8B158A179A00756B45 /* fond-detail-numero.png in Resources */ = {isa = PBXBuildFile; fileRef = D31C9C89158A179A00756B45 /* fond-detail-numero.png */; }; D31C9C90158A1C1000756B45 /* appel-entrant.png in Resources */ = {isa = PBXBuildFile; fileRef = D31C9C8D158A1C1000756B45 /* appel-entrant.png */; }; @@ -884,6 +888,8 @@ 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 = ""; }; D31B4B20159876C0002E6C72 /* UICompositeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UICompositeViewController.xib; sourceTree = ""; }; + D31B4B261598A390002E6C72 /* avatar-inconnu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "avatar-inconnu.png"; path = "Resources/avatar-inconnu.png"; sourceTree = ""; }; + D31B4B271598A390002E6C72 /* avatar-small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "avatar-small.png"; path = "Resources/avatar-small.png"; sourceTree = ""; }; D31C9C89158A179A00756B45 /* fond-detail-numero.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fond-detail-numero.png"; path = "Resources/fond-detail-numero.png"; sourceTree = ""; }; D31C9C8D158A1C1000756B45 /* appel-entrant.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "appel-entrant.png"; path = "Resources/appel-entrant.png"; sourceTree = ""; }; D31C9C8E158A1C1000756B45 /* appel-manque.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "appel-manque.png"; path = "Resources/appel-manque.png"; sourceTree = ""; }; @@ -1746,6 +1752,8 @@ D3ED3E7015861ABD006C0DE4 /* appeler-actif.png */, D35E758C15934F360066B1C1 /* appeler-disabled.png */, D3ED3E7115861ABD006C0DE4 /* appeler-over.png */, + D31B4B261598A390002E6C72 /* avatar-inconnu.png */, + D31B4B271598A390002E6C72 /* avatar-small.png */, D3ED3E7615861B1B006C0DE4 /* backspace-actif.png */, D35E758815932DE60066B1C1 /* backspace-disabled.png */, D3ED3E7715861B1B006C0DE4 /* backspace-over.png */, @@ -2217,6 +2225,8 @@ D3F26BF915986DAD005F9CAB /* ok-edit-list-history-over.png in Resources */, D3F26BFC15987083005F9CAB /* champ-titre-incoming.png in Resources */, D31B4B23159876C0002E6C72 /* UICompositeViewController.xib in Resources */, + D31B4B281598A390002E6C72 /* avatar-inconnu.png in Resources */, + D31B4B2A1598A390002E6C72 /* avatar-small.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2387,6 +2397,8 @@ D3F26BFA15986DAD005F9CAB /* ok-edit-list-history-over.png in Resources */, D3F26BFD15987083005F9CAB /* champ-titre-incoming.png in Resources */, D31B4B24159876C0002E6C72 /* UICompositeViewController.xib in Resources */, + D31B4B291598A390002E6C72 /* avatar-inconnu.png in Resources */, + D31B4B2B1598A390002E6C72 /* avatar-small.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; };