diff --git a/Classes/ChatRoomViewController.m b/Classes/ChatRoomViewController.m index e68a0e096..8dd06a482 100644 --- a/Classes/ChatRoomViewController.m +++ b/Classes/ChatRoomViewController.m @@ -74,7 +74,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar:@"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/ChatViewController.m b/Classes/ChatViewController.m index 390b91d5d..ac91c6d5b 100644 --- a/Classes/ChatViewController.m +++ b/Classes/ChatViewController.m @@ -93,7 +93,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar: @"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/ContactDetailsLabelViewController.h b/Classes/ContactDetailsLabelViewController.h index cefe72273..f67e4a253 100644 --- a/Classes/ContactDetailsLabelViewController.h +++ b/Classes/ContactDetailsLabelViewController.h @@ -18,18 +18,25 @@ */ #import +#import "UICompositeViewController.h" -#import "UIModalViewController.h" +@protocol ContactDetailsLabelViewDelegate -@interface ContactDetailsLabelViewController : UIModalViewController { +- (void)changeContactDetailsLabel:(NSString*)label; + +@end + +@interface ContactDetailsLabelViewController : UIViewController { NSDictionary *dataList; UITableView *tableView; NSString *selectedData; + id delegate; } @property (nonatomic, copy) NSString *selectedData; @property (nonatomic, retain) NSDictionary *dataList; @property (nonatomic, retain) IBOutlet UITableView *tableView; +@property (nonatomic, retain) id delegate; - (IBAction)onBackClick:(id)event; diff --git a/Classes/ContactDetailsLabelViewController.m b/Classes/ContactDetailsLabelViewController.m index 81cb0ec1c..be5a95f12 100644 --- a/Classes/ContactDetailsLabelViewController.m +++ b/Classes/ContactDetailsLabelViewController.m @@ -21,12 +21,26 @@ #import "UACellBackgroundView.h" #import "UILinphone.h" +#import "PhoneMainView.h" @implementation ContactDetailsLabelViewController @synthesize dataList; @synthesize tableView; @synthesize selectedData; +@synthesize delegate; + + +#pragma mark - Lifecycle Functions + +- (void)dealloc { + [selectedData release]; + [dataList release]; + [tableView release]; + [delegate release]; + + [super dealloc]; +} #pragma mark - ViewController Functions @@ -37,6 +51,34 @@ } +#pragma mark - UICompositeViewDelegate Functions + +static UICompositeViewDescription *compositeDescription = nil; + ++ (UICompositeViewDescription *)compositeViewDescription { + if(compositeDescription == nil) { + compositeDescription = [[UICompositeViewDescription alloc] init:@"ContactDetailsLabel" + content:@"ContactDetailsLabelViewController" + stateBar:nil + stateBarEnabled:false + tabBar:@"UIMainBar" + tabBarEnabled:true + fullscreen:false + landscapeMode:true + portraitMode:true]; + } + return compositeDescription; +} + + +#pragma mark - + +- (void)dismiss { + if([[[PhoneMainView instance] currentView] equal:[ContactDetailsLabelViewController compositeViewDescription]]) { + [[PhoneMainView instance] popCurrentView]; + } +} + #pragma mark - Property Functions - (void)setDataList:(NSDictionary *)adatalist { @@ -56,6 +98,7 @@ [tableView reloadData]; } + #pragma mark - UITableViewDataSource Functions - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { @@ -90,7 +133,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString* key = [[dataList allKeys] objectAtIndex:[indexPath row]]; [self setSelectedData:key]; - [self dismiss:key]; + [delegate changeContactDetailsLabel:key]; + [self dismiss]; } diff --git a/Classes/ContactDetailsLabelViewController.xib b/Classes/ContactDetailsLabelViewController.xib index 8c0a5eb90..838b54351 100644 --- a/Classes/ContactDetailsLabelViewController.xib +++ b/Classes/ContactDetailsLabelViewController.xib @@ -61,7 +61,7 @@ - 292 + 290 {320, 58} @@ -133,7 +133,6 @@ {{0, 59}, {320, 401}} - _NS:9 10 diff --git a/Classes/ContactDetailsTableViewController.h b/Classes/ContactDetailsTableViewController.h index e05883262..24407db95 100644 --- a/Classes/ContactDetailsTableViewController.h +++ b/Classes/ContactDetailsTableViewController.h @@ -24,11 +24,10 @@ #import "UIContactDetailsHeader.h" #import "UIContactDetailsFooter.h" -@interface ContactDetailsTableViewController : UITableViewController { +@interface ContactDetailsTableViewController : UITableViewController { @private ABRecordRef contact; NSMutableArray *dataCache; - ContactDetailsLabelViewController *contactDetailsLabelViewController; NSMutableArray *labelArray; NSIndexPath *editingIndexPath; @public diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m index 7b3e36aa1..44b404088 100644 --- a/Classes/ContactDetailsTableViewController.m +++ b/Classes/ContactDetailsTableViewController.m @@ -20,7 +20,6 @@ #import "ContactDetailsTableViewController.h" #import "PhoneMainView.h" #import "UIEditableTableViewCell.h" -#import "UIView+ModalStack.h" #import "UACellBackgroundView.h" #import "UILinphone.h" #import "OrderedDictionary.h" @@ -61,7 +60,6 @@ #pragma mark - Lifecycle Functions - (void)initContactDetailsTableViewController { - dataCache = [[NSMutableArray alloc] init]; labelArray = [[NSMutableArray alloc] initWithObjects: @"Linphone", @@ -70,6 +68,7 @@ [NSString stringWithString:(NSString*)kABPersonPhoneMainLabel], nil]; headerController = [[UIContactDetailsHeader alloc] init]; footerController = [[UIContactDetailsFooter alloc] init]; + editingIndexPath = nil; } - (id)init { @@ -88,7 +87,13 @@ return self; } -- (void)dealloc { +- (void)dealloc { + if(contact != nil && ABRecordGetRecordID(contact) == kABRecordInvalidID) { + CFRelease(contact); + } + if(editingIndexPath != nil) { + [editingIndexPath release]; + } [labelArray release]; [dataCache release]; [headerController release]; @@ -105,27 +110,8 @@ [self.tableView setBackgroundColor:[UIColor clearColor]]; // Can't do it in Xib: issue with ios4 } -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - if(contactDetailsLabelViewController != nil) { - [[[self view] superview] removeModalView:[contactDetailsLabelViewController view]]; - [editingIndexPath release]; - editingIndexPath = nil; - [contactDetailsLabelViewController release]; - contactDetailsLabelViewController = nil; - } -} - - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; - if(contact != nil && ABRecordGetRecordID(contact) == kABRecordInvalidID) { - CFRelease(contact); - } - contact = nil; } @@ -344,6 +330,9 @@ #pragma mark - Property Functions - (void)setContact:(ABRecordRef)acontact { + if(contact != nil && ABRecordGetRecordID(contact) == kABRecordInvalidID) { + CFRelease(contact); + } self->contact = acontact; [self loadData]; } @@ -490,13 +479,16 @@ CFRelease(lMap); } if(key != nil) { - contactDetailsLabelViewController = [[ContactDetailsLabelViewController alloc] initWithNibName:@"ContactDetailsLabelViewController" - bundle:[NSBundle mainBundle]]; - [contactDetailsLabelViewController setSelectedData:key]; - [contactDetailsLabelViewController setDataList:[self getLocalizedLabels]]; - [contactDetailsLabelViewController setModalDelegate:self]; + if(editingIndexPath != nil) { + [editingIndexPath release]; + } editingIndexPath = [indexPath copy]; - [[[self view] superview] addModalView:[contactDetailsLabelViewController view]]; + ContactDetailsLabelViewController *controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:[ContactDetailsLabelViewController compositeViewDescription] push:TRUE], ContactDetailsLabelViewController); + if(controller != nil) { + [controller setDataList:[self getLocalizedLabels]]; + [controller setSelectedData:key]; + [controller setDelegate:self]; + } } } } @@ -604,11 +596,9 @@ } -#pragma mark - UIModalViewDeletage Functions +#pragma mark - ContactDetailsLabelDelegate Functions -- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value { - [[[self view]superview] removeModalView:[contactDetailsLabelViewController view]]; - contactDetailsLabelViewController = nil; +- (void)changeContactDetailsLabel:(NSString *)value { if(value != nil) { NSMutableArray *sectionDict = [dataCache objectAtIndex:[editingIndexPath section]]; Entry *entry = [sectionDict objectAtIndex:[editingIndexPath row]]; @@ -617,7 +607,7 @@ ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap); CFRelease(lcMap); int index = ABMultiValueGetIndexForIdentifier(lMap, [entry identifier]); - ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)((NSString*)value), index); + ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)(value), index); ABRecordSetValue(contact, kABPersonPhoneProperty, lMap, nil); CFRelease(lMap); } else if([editingIndexPath section] == 1) { @@ -625,7 +615,7 @@ ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap); CFRelease(lcMap); int index = ABMultiValueGetIndexForIdentifier(lMap, [entry identifier]); - ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)((NSString*)value), index); + ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)(value), index); ABRecordSetValue(contact, kABPersonInstantMessageProperty, lMap, nil); CFRelease(lMap); } diff --git a/Classes/ContactDetailsViewController.m b/Classes/ContactDetailsViewController.m index 0c120384f..6a74878a9 100644 --- a/Classes/ContactDetailsViewController.m +++ b/Classes/ContactDetailsViewController.m @@ -141,6 +141,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf - (void)newContact { [LinphoneLogger logc:LinphoneLoggerLog format:"New contact"]; + self->contact = NULL; + [self resetData]; self->contact = ABPersonCreate(); [tableController setContact:self->contact]; [self enableEdit:FALSE]; @@ -149,6 +151,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf - (void)newContact:(NSString*)address { [LinphoneLogger logc:LinphoneLoggerLog format:"New contact"]; + self->contact = NULL; + [self resetData]; self->contact = ABPersonCreate(); [tableController setContact:self->contact]; [tableController addSipField:address]; @@ -158,6 +162,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf - (void)editContact:(ABRecordRef)acontact { [LinphoneLogger logc:LinphoneLoggerLog format:"Edit contact %p", acontact]; + self->contact = NULL; + [self resetData]; self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact)); [tableController setContact:self->contact]; [self enableEdit:FALSE]; @@ -166,6 +172,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf - (void)editContact:(ABRecordRef)acontact address:(NSString*)address { [LinphoneLogger logc:LinphoneLoggerLog format:"Edit contact %p", acontact]; + self->contact = NULL; + [self resetData]; self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact)); [tableController setContact:self->contact]; [tableController addSipField:address]; @@ -178,6 +186,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf - (void)setContact:(ABRecordRef)acontact { [LinphoneLogger logc:LinphoneLoggerLog format:"Set contact %p", acontact]; + self->contact = NULL; + [self resetData]; self->contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(acontact)); [tableController setContact:self->contact]; [self disableEdit:FALSE]; @@ -211,9 +221,6 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { [tableController viewWillDisappear:animated]; } - [self disableEdit:FALSE]; - self->contact = NULL; - [self resetData]; } - (void)viewWillAppear:(BOOL)animated { @@ -257,7 +264,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar:@"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/ContactsViewController.m b/Classes/ContactsViewController.m index c23b5967c..13b1eecdf 100644 --- a/Classes/ContactsViewController.m +++ b/Classes/ContactsViewController.m @@ -109,7 +109,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar:@"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/HistoryDetailsViewController.m b/Classes/HistoryDetailsViewController.m index 8dc60041e..bc171e708 100644 --- a/Classes/HistoryDetailsViewController.m +++ b/Classes/HistoryDetailsViewController.m @@ -69,7 +69,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar:@"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/HistoryViewController.m b/Classes/HistoryViewController.m index 6db361946..92cb769b3 100644 --- a/Classes/HistoryViewController.m +++ b/Classes/HistoryViewController.m @@ -65,7 +65,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar:@"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/Classes/IncomingCallViewController.h b/Classes/IncomingCallViewController.h index dbdbc41e0..cea938b97 100644 --- a/Classes/IncomingCallViewController.h +++ b/Classes/IncomingCallViewController.h @@ -19,26 +19,29 @@ #import -#import "UIModalViewController.h" - +#import "UICompositeViewController.h" #include "linphonecore.h" -typedef enum _IncomingCallStates { - IncomingCall_Accepted, - IncomingCall_Decline, - IncomingCall_Aborted -} IncomingCallStats; +@protocol IncomingCallViewDelegate -@interface IncomingCallViewController : UIModalViewController { +- (void)incomingCallAccepted:(LinphoneCall*)call; +- (void)incomingCallDeclined:(LinphoneCall*)call; +- (void)incomingCallAborted:(LinphoneCall*)call; + +@end + +@interface IncomingCallViewController : UIViewController { @private UILabel* addressLabel; UIImageView* avatarImage; LinphoneCall *call; + id delegate; } @property (nonatomic, retain) IBOutlet UILabel* addressLabel; @property (nonatomic, retain) IBOutlet UIImageView* avatarImage; @property (nonatomic, assign) LinphoneCall* call; +@property (nonatomic, retain) id delegate; - (IBAction)onAcceptClick:(id) event; - (IBAction)onDeclineClick:(id) event; diff --git a/Classes/IncomingCallViewController.m b/Classes/IncomingCallViewController.m index 7553a0fbe..7ec92fa6b 100644 --- a/Classes/IncomingCallViewController.m +++ b/Classes/IncomingCallViewController.m @@ -20,13 +20,14 @@ #import "IncomingCallViewController.h" #import "LinphoneManager.h" #import "FastAddressBook.h" +#import "PhoneMainView.h" @implementation IncomingCallViewController @synthesize addressLabel; @synthesize avatarImage; @synthesize call; - +@synthesize delegate; #pragma mark - Lifecycle Functions @@ -37,6 +38,9 @@ - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; + [avatarImage release]; + [addressLabel release]; + [delegate release]; [super dealloc]; } @@ -50,7 +54,6 @@ selector:@selector(callUpdateEvent:) name:@"LinphoneCallUpdate" object:nil]; - [self callUpdate:call state:linphone_call_get_state(call)]; } - (void)viewWillDisappear:(BOOL)animated { @@ -62,6 +65,25 @@ } +#pragma mark - UICompositeViewDelegate Functions + +static UICompositeViewDescription *compositeDescription = nil; + ++ (UICompositeViewDescription *)compositeViewDescription { + if(compositeDescription == nil) { + compositeDescription = [[UICompositeViewDescription alloc] init:@"IncomingCall" + content:@"IncomingCallViewController" + stateBar:nil + stateBarEnabled:false + tabBar:nil + tabBarEnabled:false + fullscreen:false + landscapeMode:true + portraitMode:true]; + } + return compositeDescription; +} + #pragma mark - Event Functions @@ -76,16 +98,16 @@ - (void)callUpdate:(LinphoneCall *)acall state:(LinphoneCallState)astate { if(call == acall && (astate == LinphoneCallEnd || astate == LinphoneCallError)) { - [self dismiss: [NSNumber numberWithInt: IncomingCall_Aborted]]; + [delegate incomingCallAborted:call]; + [self dismiss]; } } -#pragma mark - Property Functions - -- (void)setCall:(LinphoneCall*)acall { - call = acall; - [self update]; +- (void)dismiss { + if([[[PhoneMainView instance] currentView] equal:[IncomingCallViewController compositeViewDescription]]) { + [[PhoneMainView instance] popCurrentView]; + } } - (void)update { @@ -131,21 +153,26 @@ [addressLabel setText:address]; } -- (LinphoneCall*) getCall { - return call; + +#pragma mark - Property Functions + +- (void)setCall:(LinphoneCall*)acall { + call = acall; + [self update]; + [self callUpdate:call state:linphone_call_get_state(call)]; } #pragma mark - Action Functions - (IBAction)onAcceptClick:(id)event { - linphone_core_accept_call([LinphoneManager getLc], call); - [self dismiss: [NSNumber numberWithInt:IncomingCall_Accepted]]; + [self dismiss]; + [delegate incomingCallAccepted:call]; } - (IBAction)onDeclineClick:(id)event { - linphone_core_terminate_call([LinphoneManager getLc], call); - [self dismiss: [NSNumber numberWithInt:IncomingCall_Decline]]; + [self dismiss]; + [delegate incomingCallDeclined:call]; } @end diff --git a/Classes/IncomingCallViewController.xib b/Classes/IncomingCallViewController.xib index b2de27e48..435a55df5 100644 --- a/Classes/IncomingCallViewController.xib +++ b/Classes/IncomingCallViewController.xib @@ -33,15 +33,15 @@ IBFirstResponder IBCocoaTouchFramework - + 274 - + 274 - {{0, 20}, {320, 460}} - + {320, 460} + _NS:9 @@ -56,12 +56,12 @@ - + 290 - 292 + 290 {{0, 49}, {320, 63}} @@ -76,7 +76,7 @@ - 292 + 290 {320, 68} @@ -4512,7 +4512,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - 292 + 293 {{0, 96}, {320, 262}} @@ -4527,7 +4527,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - 292 + 293 {{80, 113}, {160, 170}} @@ -4541,8 +4541,8 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - {{0, 20}, {320, 395}} - + {320, 395} + _NS:9 @@ -4550,7 +4550,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE IBCocoaTouchFramework - + 266 @@ -4591,11 +4591,11 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 3 MC41AA - + NSImage accept_over.png - + NSImage accept_default.png @@ -4615,6 +4615,7 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE {{160, 0}, {160, 77}} + _NS:9 NO @@ -4624,11 +4625,11 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 0 0 - + NSImage decline_over.png - + NSImage decline_default.png @@ -4636,41 +4637,26 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - {{0, 403}, {320, 77}} - + {{0, 383}, {320, 77}} + _NS:9 - - 1 - MCAxIDAuMTkxOTQ1NDc1NSAwAA - - NO + IBCocoaTouchFramework - {320, 480} + {320, 460} - - 3 - MAA - - NO + _NS:9 + IBCocoaTouchFramework - - - view - - - - 3 - avatarImage @@ -4687,6 +4673,14 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE 14 + + + view + + + + 26 + onDeclineClick: @@ -4726,55 +4720,32 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - 1 - + 25 + - - + + - 4 - - - - - - - - tabBar - - - 5 - - - mask - - - 6 - - - declineButton - - - 7 - - - acceptButton + 22 + + + background 8 - - - - + + + + - + 21 @@ -4807,10 +4778,33 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE headerBackground - 22 - - - background + 4 + + + + + + + + tabBar + + + 5 + + + mask + + + 6 + + + declineButton + + + 7 + + + acceptButton @@ -4819,18 +4813,18 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 @@ -4838,13 +4832,13 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE - 24 + 30 IncomingCallViewController - UIModalViewController + UIViewController id id @@ -4878,14 +4872,6 @@ AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE ./Classes/IncomingCallViewController.h - - UIModalViewController - UIViewController - - IBProjectSource - ./Classes/UIModalViewController.h - - 0 diff --git a/Classes/LinphoneCoreSettingsStore.m b/Classes/LinphoneCoreSettingsStore.m index d75a6aefe..4790470b0 100644 --- a/Classes/LinphoneCoreSettingsStore.m +++ b/Classes/LinphoneCoreSettingsStore.m @@ -119,11 +119,12 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); } } { - LinphoneAddress *parsed=linphone_core_get_primary_contact_parsed(lc); + LinphoneAddress *parsed = linphone_core_get_primary_contact_parsed(lc); if(parsed != NULL) { [self setString: linphone_address_get_display_name(parsed) forKey:@"primary_displayname_preference"]; [self setString: linphone_address_get_username(parsed) forKey:@"primary_username_preference"]; } + linphone_address_destroy(parsed); } { LCSipTransports tp; @@ -320,11 +321,11 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); // add username password LinphoneAddress *from = linphone_address_new(identity); LinphoneAuthInfo *info; - if (from !=0){ + if (from != 0){ info=linphone_auth_info_new(linphone_address_get_username(from),NULL,password,NULL,NULL); linphone_core_add_auth_info(lc,info); + linphone_address_destroy(from); } - linphone_address_destroy(from); // configure proxy entries linphone_proxy_config_set_identity(proxyCfg,identity); @@ -425,12 +426,14 @@ extern void linphone_iphone_log_handler(int lev, const char *fmt, va_list args); // Primary contact NSString* displayname = [self stringForKey:@"primary_displayname_preference"]; NSString* username = [self stringForKey:@"primary_username_preference"]; - LinphoneAddress *parsed=linphone_core_get_primary_contact_parsed(lc); + LinphoneAddress *parsed = linphone_core_get_primary_contact_parsed(lc); if(parsed != NULL) { linphone_address_set_display_name(parsed,[displayname cStringUsingEncoding:[NSString defaultCStringEncoding]]); linphone_address_set_username(parsed,[username cStringUsingEncoding:[NSString defaultCStringEncoding]]); char *contact = linphone_address_as_string(parsed); linphone_core_set_primary_contact(lc, contact); + ms_free(contact); + linphone_address_destroy(parsed); } diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index 4eb34c7fc..408fee075 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -837,8 +837,9 @@ static LinphoneCoreVTable linphonec_vtable = { if(transfer) { linphone_core_transfer_call([LinphoneManager getLc], linphone_core_get_current_call([LinphoneManager getLc]), normalizedUserName); } else { - linphone_core_invite_address_with_params([LinphoneManager getLc], linphoneAddress,lcallParams); + linphone_core_invite_address_with_params([LinphoneManager getLc], linphoneAddress, lcallParams); } + linphone_address_destroy(linphoneAddress); } linphone_call_params_destroy(lcallParams); } diff --git a/Classes/LinphoneUI/UIMainBar.m b/Classes/LinphoneUI/UIMainBar.m index 31c482d80..ec2b88989 100644 --- a/Classes/LinphoneUI/UIMainBar.m +++ b/Classes/LinphoneUI/UIMainBar.m @@ -198,7 +198,7 @@ [self startBounceAnimation:@"Bounce" target:historyNotificationView]; }]; } else { - [self startBounceAnimation:@"Bounce" target:chatNotificationView]; + [self startBounceAnimation:@"Bounce" target:historyNotificationView]; } } [historyNotificationLabel setText:[NSString stringWithFormat:@"%i", missedCall]]; diff --git a/Classes/LinphoneUI/UIModalViewController.h b/Classes/LinphoneUI/UIModalViewController.h deleted file mode 100644 index 929414823..000000000 --- a/Classes/LinphoneUI/UIModalViewController.h +++ /dev/null @@ -1,39 +0,0 @@ -/* UIModalViewController.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 - -@class UIModalViewController; - -@protocol UIModalViewDelegate - -- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value; - -@end - -@interface UIModalViewController : UIViewController { - BOOL dismissed; - id modalDelegate; -} - -- (void)setModalDelegate:(id)delegate; -- (void)dismiss:(id)value; -- (void)dismiss; - -@end diff --git a/Classes/LinphoneUI/UIModalViewController.m b/Classes/LinphoneUI/UIModalViewController.m deleted file mode 100644 index dfda1b240..000000000 --- a/Classes/LinphoneUI/UIModalViewController.m +++ /dev/null @@ -1,90 +0,0 @@ -/* UIModalViewController.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 "UIModalViewController.h" - -@implementation UIModalViewController - -- (void)initUIModalViewController { - dismissed = FALSE; -} - -- (id)init { - self = [super init]; - if (self) { - [self initUIModalViewController]; - } - return self; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - [self initUIModalViewController]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - self = [super initWithCoder:decoder]; - if (self) { - [self initUIModalViewController]; - } - return self; -} - -- (void)hideView { - if([self.view superview] !=nil) { - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [self viewWillDisappear:NO]; - } - [self.view removeFromSuperview]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [self viewDidDisappear:NO]; - } - } -} - -- (void)dismiss:(id)value { - if(modalDelegate != nil) - [modalDelegate modalViewDismiss:self value:value]; - - if(!dismissed) { - [self hideView]; - dismissed = true; - [self autorelease]; - } -} - -- (void)dismiss{ - if(modalDelegate != nil) - [modalDelegate modalViewDismiss:self value:nil]; - - if(!dismissed) { - [self hideView]; - dismissed = true; - [self autorelease]; - } -} - -- (void)setModalDelegate:(id)delegate { - modalDelegate = delegate; -} - -@end diff --git a/Classes/LinphoneUI/UIView+ModalStack.h b/Classes/LinphoneUI/UIView+ModalStack.h deleted file mode 100644 index c036ad7ff..000000000 --- a/Classes/LinphoneUI/UIView+ModalStack.h +++ /dev/null @@ -1,29 +0,0 @@ -/* UIView+ModalStack.h - * - * Copyright (C) 2012 Belledonne Comunications, Grenoble, France - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#import - -#import "UIModalViewController.h" - -@interface UIView (ModalStack) - -- (void)addModalView:(UIView*)view; -- (void)removeModalView:(UIView*)view; - -@end diff --git a/Classes/LinphoneUI/UIView+ModalStack.m b/Classes/LinphoneUI/UIView+ModalStack.m deleted file mode 100644 index 24170c292..000000000 --- a/Classes/LinphoneUI/UIView+ModalStack.m +++ /dev/null @@ -1,49 +0,0 @@ -/* UIView+ModalStack.m - * - * Copyright (C) 2012 Belledonne Comunications, Grenoble, France - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#import - -#import "UIView+ModalStack.h" - -@implementation UIView (ModalStack) - -- (void)addModalView:(UIView*)view { - CATransition* trans = [CATransition animation]; - [trans setType:kCATransitionFade]; - [trans setDuration:0.35]; - [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; - [trans setSubtype:kCATransitionFromRight]; - [self.layer addAnimation:trans forKey:@"Appear"]; - - [self addSubview:view]; - [self bringSubviewToFront:view]; -} - -- (void)removeModalView:(UIView*)view { - CATransition* trans = [CATransition animation]; - [trans setType:kCATransitionFade]; - [trans setDuration:0.35]; - [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; - [trans setSubtype:kCATransitionFromRight]; - [self.layer addAnimation:trans forKey:@"Disappear"]; - - [view removeFromSuperview]; -} - -@end diff --git a/Classes/PhoneMainView.h b/Classes/PhoneMainView.h index 7cc50ca26..36ffef4d5 100644 --- a/Classes/PhoneMainView.h +++ b/Classes/PhoneMainView.h @@ -21,7 +21,6 @@ #import "LinphoneManager.h" #import "UICompositeViewController.h" -#import "UIModalViewController.h" #import "FirstLoginViewController.h" #import "IncomingCallViewController.h" @@ -36,8 +35,9 @@ #import "SettingsViewController.h" #import "FirstLoginViewController.h" #import "WizardViewController.h" +#import "IncomingCallViewController.h" -@interface PhoneMainView : UIViewController { +@interface PhoneMainView : UIViewController { @private UICompositeViewController *mainViewController; diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m index f53928728..61f3a0dcf 100644 --- a/Classes/PhoneMainView.m +++ b/Classes/PhoneMainView.m @@ -22,7 +22,6 @@ #import "PhoneMainView.h" #import "Utils.h" -#import "UIView+ModalStack.h" static PhoneMainView* phoneMainViewInstance=nil; @@ -232,6 +231,11 @@ static PhoneMainView* phoneMainViewInstance=nil; bool canHideInCallView = (linphone_core_get_calls([LinphoneManager getLc]) == NULL); + // Don't handle call state during incoming call view + if([[self currentView] equal:[IncomingCallViewController compositeViewDescription]] && state != LinphoneCallError && state != LinphoneCallEnd) { + return; + } + switch (state) { case LinphoneCallIncomingReceived: { @@ -529,18 +533,12 @@ static PhoneMainView* phoneMainViewInstance=nil; [[UIApplication sharedApplication] presentLocalNotificationNow:appData->notification]; } - } else { - IncomingCallViewController *controller = [[IncomingCallViewController alloc] init]; - [controller setWantsFullScreenLayout:TRUE]; - [controller setCall:call]; - [controller setModalDelegate:self]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewWillAppear:NO]; - } - [[self view] addModalView:[controller view]]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [controller viewDidAppear:NO]; - } + } else { + IncomingCallViewController *controller = DYNAMIC_CAST([self changeCurrentView:[IncomingCallViewController compositeViewDescription] push:TRUE],IncomingCallViewController); + if(controller != nil) { + [controller setCall:call]; + [controller setDelegate:self]; + } } } @@ -599,11 +597,17 @@ static PhoneMainView* phoneMainViewInstance=nil; } -#pragma mark - Modal Functions +#pragma mark - IncomingCallDelegate Functions -- (void)modalViewDismiss:(UIModalViewController*)controller value:(id)value { - [controller setModalDelegate:nil]; - [[self view] removeModalView:[controller view]]; +- (void)incomingCallAborted:(LinphoneCall*)call { +} + +- (void)incomingCallAccepted:(LinphoneCall*)call { + linphone_core_accept_call([LinphoneManager getLc], call); +} + +- (void)incomingCallDeclined:(LinphoneCall*)call { + linphone_core_terminate_call([LinphoneManager getLc], call); } @end \ No newline at end of file diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m index dc2f054c3..91ea51d15 100644 --- a/Classes/SettingsViewController.m +++ b/Classes/SettingsViewController.m @@ -345,7 +345,7 @@ static UICompositeViewDescription *compositeDescription = nil; tabBar: @"UIMainBar" tabBarEnabled:true fullscreen:false - landscapeMode:false + landscapeMode:[LinphoneManager runningOnIpad] portraitMode:true]; } return compositeDescription; diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index a8ebc6802..7d3f16feb 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -670,8 +670,6 @@ D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; }; D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */; }; D378906715AC373B00BD776C /* ContactDetailsLabelViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */; }; - D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */ = {isa = PBXBuildFile; fileRef = D378907415AC448A00BD776C /* UIView+ModalStack.m */; }; - D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */ = {isa = PBXBuildFile; fileRef = D378907415AC448A00BD776C /* UIView+ModalStack.m */; }; D37B96B715A1A6F20005CCD2 /* call_state_delete_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */; }; D37B96B915A1A6F20005CCD2 /* call_state_delete_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */; }; D37C638E15AAD251009D0BAC /* contact_number_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D37C638C15AAD251009D0BAC /* contact_number_over.png */; }; @@ -1061,8 +1059,6 @@ D3F26BF915986DAD005F9CAB /* history_ok_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F26BF615986DAD005F9CAB /* history_ok_over.png */; }; D3F26BFC15987083005F9CAB /* header_incoming.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F26BFB15987083005F9CAB /* header_incoming.png */; }; D3F34F301599B008005BE94F /* avatar_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F34F2F1599B008005BE94F /* avatar_shadow.png */; }; - D3F34F351599C354005BE94F /* UIModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F34F341599C354005BE94F /* UIModalViewController.m */; }; - D3F34F361599C354005BE94F /* UIModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F34F341599C354005BE94F /* UIModalViewController.m */; }; D3F795D615A582810077328B /* ChatRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F795D415A582800077328B /* ChatRoomViewController.m */; }; D3F795D715A582810077328B /* ChatRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F795D415A582800077328B /* ChatRoomViewController.m */; }; D3F795D815A582810077328B /* ChatRoomViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3F795D515A582800077328B /* ChatRoomViewController.xib */; }; @@ -1653,8 +1649,6 @@ D378906215AC373B00BD776C /* ContactDetailsLabelViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsLabelViewController.h; sourceTree = ""; }; D378906315AC373B00BD776C /* ContactDetailsLabelViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsLabelViewController.m; sourceTree = ""; }; D378906415AC373B00BD776C /* ContactDetailsLabelViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactDetailsLabelViewController.xib; sourceTree = ""; }; - D378907415AC448A00BD776C /* UIView+ModalStack.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ModalStack.m"; sourceTree = ""; }; - D378907715AC44A300BD776C /* UIView+ModalStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ModalStack.h"; sourceTree = ""; }; D37B96B515A1A6F20005CCD2 /* call_state_delete_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_default.png; path = Resources/call_state_delete_default.png; sourceTree = ""; }; D37B96B615A1A6F20005CCD2 /* call_state_delete_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = call_state_delete_over.png; path = Resources/call_state_delete_over.png; sourceTree = ""; }; D37C638C15AAD251009D0BAC /* contact_number_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_number_over.png; path = Resources/contact_number_over.png; sourceTree = ""; }; @@ -1952,8 +1946,6 @@ D3F26BF615986DAD005F9CAB /* history_ok_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_ok_over.png; path = Resources/history_ok_over.png; sourceTree = ""; }; D3F26BFB15987083005F9CAB /* header_incoming.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_incoming.png; path = Resources/header_incoming.png; sourceTree = ""; }; D3F34F2F1599B008005BE94F /* avatar_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = avatar_shadow.png; path = Resources/avatar_shadow.png; sourceTree = ""; }; - D3F34F331599C354005BE94F /* UIModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIModalViewController.h; sourceTree = ""; }; - D3F34F341599C354005BE94F /* UIModalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIModalViewController.m; sourceTree = ""; }; D3F795D315A582800077328B /* ChatRoomViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatRoomViewController.h; sourceTree = ""; }; D3F795D415A582800077328B /* ChatRoomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatRoomViewController.m; sourceTree = ""; }; D3F795D515A582800077328B /* ChatRoomViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ChatRoomViewController.xib; sourceTree = ""; }; @@ -2462,8 +2454,6 @@ D3A74E5B15C6922A001500B9 /* UIMainBar~ipad.xib */, 2214EBF112F86360002A5394 /* UIMicroButton.h */, 2214EBF212F86360002A5394 /* UIMicroButton.m */, - D3F34F331599C354005BE94F /* UIModalViewController.h */, - D3F34F341599C354005BE94F /* UIModalViewController.m */, D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */, D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */, 22968A5D12F875C600588287 /* UISpeakerButton.h */, @@ -2479,8 +2469,6 @@ D32460E5159D9AAD00BA7F3A /* UITransparentView.m */, 340751E5150F38FC00B89C47 /* UIVideoButton.h */, 340751E6150F38FD00B89C47 /* UIVideoButton.m */, - D378907715AC44A300BD776C /* UIView+ModalStack.h */, - D378907415AC448A00BD776C /* UIView+ModalStack.m */, ); path = LinphoneUI; sourceTree = ""; @@ -4223,7 +4211,6 @@ D3EA5411159853750037DC6B /* UIChatCell.m in Sources */, D3F26BF115986B73005F9CAB /* IncomingCallViewController.m in Sources */, D31B4B21159876C0002E6C72 /* UICompositeViewController.m in Sources */, - D3F34F351599C354005BE94F /* UIModalViewController.m in Sources */, D31AAF5E159B3919002C6B02 /* InCallTableViewController.m in Sources */, D3211BB0159C4EF10098460B /* UIConferenceHeader.m in Sources */, D32460E6159D9AAD00BA7F3A /* UITransparentView.m in Sources */, @@ -4241,7 +4228,6 @@ D37C639B15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */, D3C6526715AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */, D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */, - D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */, D3E8F68615ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */, C90FAA7915AF54E6002091CB /* HistoryDetailsViewController.m in Sources */, D3F9A9E215AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */, @@ -4318,7 +4304,6 @@ D3EA5412159853750037DC6B /* UIChatCell.m in Sources */, D3F26BF215986B73005F9CAB /* IncomingCallViewController.m in Sources */, D31B4B22159876C0002E6C72 /* UICompositeViewController.m in Sources */, - D3F34F361599C354005BE94F /* UIModalViewController.m in Sources */, D31AAF5F159B3919002C6B02 /* InCallTableViewController.m in Sources */, D3211BB1159C4EF10098460B /* UIConferenceHeader.m in Sources */, D32460E7159D9AAD00BA7F3A /* UITransparentView.m in Sources */, @@ -4336,7 +4321,6 @@ D37C639C15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */, D3C6526815AC1A8F0092A874 /* UIEditableTableViewCell.m in Sources */, D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */, - D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */, D3E8F68715ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */, C90FAA7A15AF54E6002091CB /* HistoryDetailsViewController.m in Sources */, D3F9A9E315AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */,