diff --git a/Classes/CallDelegate.h b/Classes/CallDelegate.h index 216149417..df2bf75e0 100644 --- a/Classes/CallDelegate.h +++ b/Classes/CallDelegate.h @@ -24,8 +24,7 @@ enum CallDelegateType { CD_UNDEFINED = 0, CD_ZRTP, CD_VIDEO_UPDATE, - CD_STOP_VIDEO_ON_LOW_BATTERY, - CD_TRANSFER_CALL + CD_STOP_VIDEO_ON_LOW_BATTERY }; @protocol CallActionSheetDelegate diff --git a/Classes/ChatRoomTableViewController.m b/Classes/ChatRoomTableViewController.m index 735dec194..3dd075073 100644 --- a/Classes/ChatRoomTableViewController.m +++ b/Classes/ChatRoomTableViewController.m @@ -25,6 +25,15 @@ @synthesize remoteContact; + +#pragma mark - ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self.tableView setBackgroundColor:[UIColor clearColor]]; // Can't do it in Xib: issue with ios4 +} + + #pragma mark - - (void)reloadData { diff --git a/Classes/ChatRoomViewController.m b/Classes/ChatRoomViewController.m index fbfa3bedb..4d34bbc4e 100644 --- a/Classes/ChatRoomViewController.m +++ b/Classes/ChatRoomViewController.m @@ -73,14 +73,6 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardWillShow:) - name:UIKeyboardWillShowNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardWillHide:) - name:UIKeyboardWillHideNotification - object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textReceivedEvent:) name:@"LinphoneTextReceived" @@ -93,13 +85,6 @@ - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UIKeyboardWillShowNotification - object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UIKeyboardWillHideNotification - object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneTextReceived" object:nil]; @@ -131,42 +116,6 @@ } -#pragma mark - Keyboard Event Functions - -- (void)keyboardWillHide:(NSNotification *)notif { - //CGRect beginFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - UIViewAnimationCurve curve = [[[notif userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; - NSTimeInterval duration = [[[notif userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; - [UIView beginAnimations:@"resize" context:nil]; - [UIView setAnimationDuration:duration]; - [UIView setAnimationCurve:curve]; - [UIView setAnimationBeginsFromCurrentState:TRUE]; - CGRect endFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - CGRect frame = [[self view] frame]; - CGPoint pos = {0, 0}; - CGPoint gPos = [[self view] convertPoint:pos toView:nil]; - frame.size.height = endFrame.origin.y - gPos.y; - [[self view] setFrame:frame]; - [UIView commitAnimations]; -} - -- (void)keyboardWillShow:(NSNotification *)notif { - //CGRect beginFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - UIViewAnimationCurve curve = [[[notif userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; - NSTimeInterval duration = [[[notif userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; - [UIView beginAnimations:@"resize" context:nil]; - [UIView setAnimationDuration:duration]; - [UIView setAnimationCurve:curve]; - [UIView setAnimationBeginsFromCurrentState:TRUE]; - CGRect endFrame = [[[notif userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; - CGRect frame = [[self view] frame]; - CGPoint pos = {0, 0}; - CGPoint gPos = [[self view] convertPoint:pos toView:nil]; - frame.size.height = endFrame.origin.y - gPos.y; - [[self view] setFrame:frame]; - [UIView commitAnimations]; -} - #pragma mark - UITextFieldDelegate Functions - (BOOL)textFieldShouldReturn:(UITextField *)textField { diff --git a/Classes/ChatRoomViewController.xib b/Classes/ChatRoomViewController.xib index f4708c7a5..0d2dede5d 100644 --- a/Classes/ChatRoomViewController.xib +++ b/Classes/ChatRoomViewController.xib @@ -136,9 +136,64 @@ _NS:9 - - 3 - MCAwAA + + 10 + + 549453824 + {512, 1} + + + + + + TU0AKgAACAjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ +y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ +xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ +xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ +xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ +xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ +xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ +y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ +y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ +xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ +xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ +xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ +xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ +xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ +y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ +y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ +xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ +xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ +xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ +xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ +xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ +y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ +y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ +xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ +xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ +xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ +xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ +xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ +y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ +y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ +xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ +xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ +xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ +xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ +xczS/8vS2P/L0tj/xczU/wANAQAAAwAAAAECAAAAAQEAAwAAAAEAAQAAAQIAAwAAAAQAAAiqAQMAAwAA +AAEAAQAAAQYAAwAAAAEAAgAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEABAAAARYAAwAA +AAEAAQAAARcABAAAAAEAAAgAARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAQAAAiyAAAAAAAI +AAgACAAIAAEAAQABAAE + + + + + + 3 + MCAwAA + + + groupTableViewBackgroundColor YES IBCocoaTouchFramework @@ -161,6 +216,7 @@ {{250, 0}, {70, 59}} + _NS:9 NO @@ -254,7 +310,7 @@ {320, 460} - + _NS:9 IBCocoaTouchFramework @@ -493,6 +549,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + TPKeyboardAvoidingTableView com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -569,6 +626,14 @@ ./Classes/ChatRoomViewController.h + + TPKeyboardAvoidingTableView + UITableView + + IBProjectSource + ./Classes/TPKeyboardAvoidingTableView.h + + UIToggleButton UIButton diff --git a/Classes/ChatTableViewController.m b/Classes/ChatTableViewController.m index ba4d6c934..1bdd7e8a3 100644 --- a/Classes/ChatTableViewController.m +++ b/Classes/ChatTableViewController.m @@ -22,6 +22,8 @@ #import "linphonecore.h" #import "PhoneMainView.h" +#import "UACellBackgroundView.h" +#import "UILinphone.h" @implementation ChatTableViewController @@ -59,6 +61,12 @@ UIChatCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { cell = [[[UIChatCell alloc] initWithIdentifier:kCellId] autorelease]; + + + // Background View + UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease]; + cell.selectedBackgroundView = selectedBackgroundView; + [selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR]; } [cell setChat:[data objectAtIndex:[indexPath row]]]; diff --git a/Classes/ContactDetailsLabelViewController.m b/Classes/ContactDetailsLabelViewController.m index a2e9a3e40..81cb0ec1c 100644 --- a/Classes/ContactDetailsLabelViewController.m +++ b/Classes/ContactDetailsLabelViewController.m @@ -19,6 +19,9 @@ #import "ContactDetailsLabelViewController.h" +#import "UACellBackgroundView.h" +#import "UILinphone.h" + @implementation ContactDetailsLabelViewController @synthesize dataList; @@ -68,8 +71,11 @@ UITableViewCell *cell = [atableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kCellId] autorelease]; - //TODO - /*[cell setSelectedBackgroundView:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_highlight.png"]]autorelease]];*/ + + // Background View + UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease]; + cell.selectedBackgroundView = selectedBackgroundView; + [selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR]; } NSString* key = [[dataList allKeys] objectAtIndex:[indexPath row]]; [cell.textLabel setText:[dataList objectForKey:key]]; diff --git a/Classes/ContactDetailsLabelViewController.xib b/Classes/ContactDetailsLabelViewController.xib index 443013919..c3e832ab4 100644 --- a/Classes/ContactDetailsLabelViewController.xib +++ b/Classes/ContactDetailsLabelViewController.xib @@ -2,10 +2,10 @@ 1296 - 11D50 + 11E53 2182 - 1138.32 - 568.00 + 1138.47 + 569.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1181 @@ -200,6 +200,7 @@ AAgACAAIAAEAAQABAAE 0.0 0.0 YES + NO 1 2 0 diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m index 40f5c3f09..8efb57129 100644 --- a/Classes/ContactDetailsTableViewController.m +++ b/Classes/ContactDetailsTableViewController.m @@ -21,6 +21,8 @@ #import "PhoneMainView.h" #import "UIEditableTableViewCell.h" #import "UIView+ModalStack.h" +#import "UACellBackgroundView.h" +#import "UILinphone.h" @interface Entry : NSObject @@ -104,6 +106,11 @@ #pragma mark - ViewController Functions +- (void)viewDidLoad { + [super viewDidLoad]; + [self.tableView setBackgroundColor:[UIColor clearColor]]; // Can't do it in Xib: issue with ios4 +} + - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self loadData]; @@ -128,7 +135,8 @@ contact = nil; } -#pragma mark - + +#pragma mark - + (BOOL)findAndResignFirstResponder:(UIView*)view { if (view.isFirstResponder) { @@ -419,6 +427,14 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf UIEditableTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { cell = [[[UIEditableTableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:kCellId] autorelease]; + [cell.detailTextField setDelegate:self]; + [cell.detailTextField setAutocapitalizationType:UITextAutocapitalizationTypeNone]; + [cell.detailTextField setAutocorrectionType:UITextAutocorrectionTypeNo]; + + // Background View + UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease]; + cell.selectedBackgroundView = selectedBackgroundView; + [selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR]; } NSMutableArray *sectionDict = [dataCache objectAtIndex:[indexPath section]]; @@ -449,16 +465,15 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf CFRelease(lDict); CFRelease(lMap); } - + [cell.textLabel setText:label]; [cell.detailTextLabel setText:value]; [cell.detailTextField setText:value]; - [cell.detailTextField setDelegate:self]; if ([indexPath section] == 0) { [cell.detailTextField setKeyboardType:UIKeyboardTypePhonePad]; [cell.detailTextField setPlaceholder:@"Phone number"]; } else { - [cell.detailTextField setKeyboardType:UIKeyboardTypeEmailAddress]; + [cell.detailTextField setKeyboardType:UIKeyboardTypeASCIICapable]; [cell.detailTextField setPlaceholder:@"SIP address"]; } diff --git a/Classes/ContactDetailsViewController.h b/Classes/ContactDetailsViewController.h index 853bf28a3..5f4a8e454 100644 --- a/Classes/ContactDetailsViewController.h +++ b/Classes/ContactDetailsViewController.h @@ -28,13 +28,18 @@ ContactDetailsTableViewController *tableController; ABRecordRef contact; UIToggleButton *editButton; + UIButton *backButton; + UIButton *cancelButton; } @property (nonatomic, assign) ABRecordRef contact; @property (nonatomic, retain) IBOutlet ContactDetailsTableViewController *tableController; @property (nonatomic, retain) IBOutlet UIToggleButton *editButton; +@property (nonatomic, retain) IBOutlet UIButton *backButton; +@property (nonatomic, retain) IBOutlet UIButton *cancelButton; - (IBAction)onBackClick:(id)event; +- (IBAction)onCancelClick:(id)event; - (IBAction)onEditClick:(id)event; - (void)newContact; diff --git a/Classes/ContactDetailsViewController.m b/Classes/ContactDetailsViewController.m index 280fdd6d1..f00b1c3dc 100644 --- a/Classes/ContactDetailsViewController.m +++ b/Classes/ContactDetailsViewController.m @@ -25,6 +25,8 @@ @synthesize tableController; @synthesize contact; @synthesize editButton; +@synthesize backButton; +@synthesize cancelButton; #pragma mark - Lifecycle Functions @@ -35,8 +37,13 @@ } - (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; [tableController release]; + [editButton release]; + [backButton release]; + [cancelButton release]; + [super dealloc]; } @@ -45,32 +52,28 @@ - (void)newContact { [tableController newContact]; - [tableController setEditing:TRUE animated:FALSE]; + [self enableEdit:FALSE]; [[tableController tableView] reloadData]; - [editButton setOn]; } - (void)newContact:(NSString*)address { [tableController newContact]; [tableController addSipField:address]; - [tableController setEditing:TRUE animated:FALSE]; + [self enableEdit:FALSE]; [[tableController tableView] reloadData]; - [editButton setOn]; } - (void)editContact:(ABRecordRef)acontact { [self setContact:acontact]; - [tableController setEditing:TRUE animated:FALSE]; + [self enableEdit:FALSE]; [[tableController tableView] reloadData]; - [editButton setOn]; } - (void)editContact:(ABRecordRef)acontact address:(NSString*)address { [self setContact:acontact]; [tableController addSipField:address]; - [tableController setEditing:TRUE animated:FALSE]; + [self enableEdit:FALSE]; [[tableController tableView] reloadData]; - [editButton setOn]; } #pragma mark - Property Functions @@ -78,6 +81,7 @@ - (void)setContact:(ABRecordRef)acontact { self->contact = acontact; [tableController setContactID:ABRecordGetRecordID(acontact)]; + [self disableEdit:FALSE]; } @@ -94,7 +98,6 @@ [tableController->footerController->removeButton addTarget:self action:@selector(onRemove:) forControlEvents:UIControlEventTouchUpInside]; - [[tableController tableView] setBackgroundColor:[UIColor clearColor]]; // Can't do it in Xib: issue with ios4 } - (void)viewDidUnload { @@ -109,11 +112,8 @@ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { [tableController viewWillDisappear:NO]; } - if([tableController isEditing]) { - [tableController setEditing:FALSE animated:FALSE]; - [tableController resetData]; - [editButton setOff]; - } + [self disableEdit:FALSE]; + [tableController resetData]; } - (void)viewWillAppear:(BOOL)animated { @@ -137,6 +137,7 @@ } } + #pragma mark - UICompositeViewDelegate Functions + (UICompositeViewDescription*) compositeViewDescription { @@ -151,34 +152,54 @@ } +- (void)enableEdit:(BOOL)animated { + if(![tableController isEditing]) { + if(animated) + [[tableController tableView] beginUpdates]; + [tableController setEditing:TRUE animated:animated]; + if(animated) + [[tableController tableView] endUpdates]; + } + [editButton setOn]; + [cancelButton setHidden:FALSE]; + [backButton setHidden:TRUE]; +} + +- (void)disableEdit:(BOOL)animated { + if([tableController isEditing]) { + [tableController setEditing:FALSE animated:animated]; + } + [editButton setOff]; + [cancelButton setHidden:TRUE]; + [backButton setHidden:FALSE]; +} + #pragma mark - Action Functions -- (IBAction)onBackClick:(id)event { - if([tableController isEditing]) { - [tableController setEditing:FALSE animated:FALSE]; - [tableController resetData]; - [editButton setOff]; - if([tableController contactID] == kABRecordInvalidID) { - [[PhoneMainView instance] popView]; - } - } else { +- (IBAction)onCancelClick:(id)event { + [self disableEdit:FALSE]; + [tableController resetData]; + if([tableController contactID] == kABRecordInvalidID) { [[PhoneMainView instance] popView]; } } +- (IBAction)onBackClick:(id)event { + [[PhoneMainView instance] popView]; +} + - (IBAction)onEditClick:(id)event { - [[tableController tableView] beginUpdates]; - [tableController setEditing:![tableController isEditing] animated:TRUE]; - [[tableController tableView] endUpdates]; - if(![tableController isEditing]) { + if([tableController isEditing]) { + [self disableEdit:TRUE]; [tableController saveData]; + } else { + [self enableEdit:TRUE]; } } -- (IBAction)onRemove:(id)event { - [tableController setEditing:FALSE animated:FALSE]; +- (void)onRemove:(id)event { + [self disableEdit:FALSE]; [tableController removeContact]; - [editButton setOff]; [[PhoneMainView instance] popView]; } diff --git a/Classes/ContactDetailsViewController.xib b/Classes/ContactDetailsViewController.xib index 192b39e41..aa51f1437 100644 --- a/Classes/ContactDetailsViewController.xib +++ b/Classes/ContactDetailsViewController.xib @@ -2,10 +2,10 @@ 1296 - 11D50 + 11E53 2182 - 1138.32 - 568.00 + 1138.47 + 569.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1181 @@ -47,7 +47,7 @@ {160, 58} - + _NS:9 NO @@ -79,6 +79,34 @@ 16 + + + -2147483356 + {160, 58} + + + + _NS:9 + NO + + Add contact + + IBCocoaTouchFramework + 0 + 0 + NO + + + NSImage + contact_cancel_over.png + + + NSImage + contact_cancel_default.png + + + + 292 @@ -132,6 +160,7 @@ {{0, 59}, {320, 401}} + _NS:9 10 @@ -212,6 +241,7 @@ AAgACAAIAAEAAQABAAE {{0, 20}, {320, 460}} + IBCocoaTouchFramework @@ -252,6 +282,22 @@ AAgACAAIAAEAAQABAAE 31 + + + backButton + + + + 50 + + + + cancelButton + + + + 51 + onEditClick: @@ -294,6 +340,15 @@ AAgACAAIAAEAAQABAAE 26 + + + onCancelClick: + + + 7 + + 49 + @@ -329,9 +384,10 @@ AAgACAAIAAEAAQABAAE + - header + toolBar 8 @@ -358,6 +414,12 @@ AAgACAAIAAEAAQABAAE tableController + + 47 + + + cancelButton + @@ -366,10 +428,13 @@ AAgACAAIAAEAAQABAAE UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + TPKeyboardAvoidingTableView com.apple.InterfaceBuilder.IBCocoaTouchPlugin ContactDetailsTableViewController com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIToggleButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -380,7 +445,7 @@ AAgACAAIAAEAAQABAAE - 46 + 51 @@ -397,6 +462,7 @@ AAgACAAIAAEAAQABAAE UIViewController id + id id @@ -404,16 +470,30 @@ AAgACAAIAAEAAQABAAE onBackClick: id + + onCancelClick: + id + onEditClick: id + UIButton + UIButton UIToggleButton ContactDetailsTableViewController + + backButton + UIButton + + + cancelButton + UIButton + editButton UIToggleButton @@ -428,6 +508,14 @@ AAgACAAIAAEAAQABAAE ./Classes/ContactDetailsViewController.h + + TPKeyboardAvoidingTableView + UITableView + + IBProjectSource + ./Classes/TPKeyboardAvoidingTableView.h + + UIToggleButton UIButton @@ -449,6 +537,8 @@ AAgACAAIAAEAAQABAAE {320, 117} {320, 117} + {320, 117} + {320, 117} {320, 117} {320, 117} {320, 117} diff --git a/Classes/ContactsTableViewController.m b/Classes/ContactsTableViewController.m index b422153f6..a40e80853 100644 --- a/Classes/ContactsTableViewController.m +++ b/Classes/ContactsTableViewController.m @@ -21,6 +21,8 @@ #import "UIContactCell.h" #import "LinphoneManager.h" #import "PhoneMainView.h" +#import "UACellBackgroundView.h" +#import "UILinphone.h" @implementation ContactsTableViewController @@ -169,6 +171,10 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf UIContactCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { cell = [[[UIContactCell alloc] initWithIdentifier:kCellId] autorelease]; + // Background View + UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease]; + cell.selectedBackgroundView = selectedBackgroundView; + [selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR]; } OrderedDictionary *subDic = [addressBookMap objectForKey: [addressBookMap keyAtIndex: [indexPath section]]]; diff --git a/Classes/HistoryTableViewController.m b/Classes/HistoryTableViewController.m index d4e280a3f..4dff3398e 100644 --- a/Classes/HistoryTableViewController.m +++ b/Classes/HistoryTableViewController.m @@ -21,6 +21,8 @@ #import "UIHistoryCell.h" #import "LinphoneManager.h" #import "PhoneMainView.h" +#import "UACellBackgroundView.h" +#import "UILinphone.h" @implementation HistoryTableViewController @@ -95,6 +97,10 @@ UIHistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId]; if (cell == nil) { cell = [[[UIHistoryCell alloc] initWithIdentifier:kCellId] autorelease]; + // Background View + UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease]; + cell.selectedBackgroundView = selectedBackgroundView; + [selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR]; } LinphoneCallLog *log = [[callLogs objectAtIndex:[indexPath row]] pointerValue]; diff --git a/Classes/InCallViewController.m b/Classes/InCallViewController.m index f55b992aa..34cecf468 100644 --- a/Classes/InCallViewController.m +++ b/Classes/InCallViewController.m @@ -180,7 +180,6 @@ const NSInteger SECURE_BUTTON_TAG=5; #pragma mark - - - (void)callUpdate:(LinphoneCall *)call state:(LinphoneCallState) state { // Update table [callTableView reloadData]; @@ -373,66 +372,6 @@ const NSInteger SECURE_BUTTON_TAG=5; [[PhoneMainView instance] fullScreen:false]; } -- (void)transferPressed { - /* allow only if call is active */ - if (!linphone_core_get_current_call([LinphoneManager getLc])) - return; - - /* build UIActionSheet */ - if (visibleActionSheet != nil) { - [visibleActionSheet dismissWithClickedButtonIndex:visibleActionSheet.cancelButtonIndex animated:TRUE]; - } - - CallDelegate* cd = [[CallDelegate alloc] init]; - cd.eventType = CD_TRANSFER_CALL; - cd.delegate = self; - cd.call = linphone_core_get_current_call([LinphoneManager getLc]); - NSString* title = NSLocalizedString(@"Transfer to ...",nil); - visibleActionSheet = [[UIActionSheet alloc] initWithTitle:title - delegate:cd - cancelButtonTitle:nil - destructiveButtonTitle:nil // NSLocalizedString(@"Other...",nil) - otherButtonTitles:nil]; - - // add button for each trasnfer-to valid call - const MSList* calls = linphone_core_get_calls([LinphoneManager getLc]); - while (calls) { - LinphoneCall* call = (LinphoneCall*) calls->data; - LinphoneCallAppData* data = ((LinphoneCallAppData*)linphone_call_get_user_pointer(call)); - if (call != cd.call && !linphone_call_get_current_params(call)->in_conference) { - const LinphoneAddress* addr = linphone_call_get_remote_address(call); - NSString* btnTitle = [NSString stringWithFormat : NSLocalizedString(@"%s",nil), (linphone_address_get_display_name(addr) ?linphone_address_get_display_name(addr):linphone_address_get_username(addr))]; - data->transferButtonIndex = [visibleActionSheet addButtonWithTitle:btnTitle]; - } else { - data->transferButtonIndex = -1; - } - calls = calls->next; - } - - if (visibleActionSheet.numberOfButtons == 0) { - [visibleActionSheet release]; - visibleActionSheet = nil; - - //TODO - /*[UICallButton enableTransforMode:YES];*/ - [[PhoneMainView instance] changeView:PhoneView_Dialer]; - } else { - // add 'Other' option - [visibleActionSheet addButtonWithTitle:NSLocalizedString(@"Other...",nil)]; - - // add cancel button on iphone - if (![LinphoneManager runningOnIpad]) { - [visibleActionSheet addButtonWithTitle:NSLocalizedString(@"Cancel",nil)]; - } - - visibleActionSheet.actionSheetStyle = UIActionSheetStyleDefault; - if ([LinphoneManager runningOnIpad]) { - //[visibleActionSheet showFromRect:transfer.bounds inView:transfer animated:NO]; - } else - [visibleActionSheet showInView:[[UIApplication sharedApplication].delegate window]]; - } -} - - (void)displayVideoCall { [self enableVideoDisplay: TRUE]; } @@ -534,31 +473,6 @@ static void hideSpinner(LinphoneCall* call, void* user_data) { visibleActionSheet = nil; break; } - case CD_TRANSFER_CALL: { - LinphoneCall* call = (LinphoneCall*)datas; - // browse existing call and trasnfer to the one matching the btn id - const MSList* calls = linphone_core_get_calls([LinphoneManager getLc]); - while (calls) { - LinphoneCall* call2 = (LinphoneCall*) calls->data; - LinphoneCallAppData* data = ((LinphoneCallAppData*)linphone_call_get_user_pointer(call2)); - if (data->transferButtonIndex == buttonIndex) { - linphone_core_transfer_call_to_another([LinphoneManager getLc], call, call2); - return; - } - data->transferButtonIndex = -1; - calls = calls->next; - } - if (![LinphoneManager runningOnIpad] && buttonIndex == (actionSheet.numberOfButtons - 1)) { - // cancel button - return; - } - // user must jhave pressed 'other...' button as we did not find a call - // with the correct indice - //TODO - //[UICallButton enableTransforMode:YES]; - [[PhoneMainView instance] changeView:PhoneView_Dialer]; - break; - } default: ms_error("Unhandled CallDelegate event of type: %d received - ignoring", type); } diff --git a/Classes/LinphoneUI/UICallBar.h b/Classes/LinphoneUI/UICallBar.h index ac8019936..e00398c5f 100644 --- a/Classes/LinphoneUI/UICallBar.h +++ b/Classes/LinphoneUI/UICallBar.h @@ -32,12 +32,13 @@ UIVideoButton* videoButton; UIMicroButton* microButton; UISpeakerButton* speakerButton; - UIButton* optionsButton; + UIToggleButton* optionsButton; UIHangUpButton* hangupButton; UIView* padView; UIView* optionsView; UIButton* optionsAddButton; UIButton* optionsTransferButton; + UIToggleButton* dialerButton; //Key pad UIDigitButton* oneButton; @@ -59,13 +60,14 @@ @property (nonatomic, retain) IBOutlet UIVideoButton* videoButton; @property (nonatomic, retain) IBOutlet UIMicroButton* microButton; @property (nonatomic, retain) IBOutlet UISpeakerButton* speakerButton; -@property (nonatomic, retain) IBOutlet UIButton* optionsButton; +@property (nonatomic, retain) IBOutlet UIToggleButton* optionsButton; @property (nonatomic, retain) IBOutlet UIHangUpButton* hangupButton; @property (nonatomic, retain) IBOutlet UIView* padView; @property (nonatomic, retain) IBOutlet UIView* optionsView; @property (nonatomic, retain) IBOutlet UIButton* optionsAddButton; @property (nonatomic, retain) IBOutlet UIButton* optionsTransferButton; +@property (nonatomic, retain) IBOutlet UIToggleButton* dialerButton; @property (nonatomic, retain) IBOutlet UIButton* oneButton; @property (nonatomic, retain) IBOutlet UIButton* twoButton; diff --git a/Classes/LinphoneUI/UICallBar.m b/Classes/LinphoneUI/UICallBar.m index d60e846a9..42a9319c5 100644 --- a/Classes/LinphoneUI/UICallBar.m +++ b/Classes/LinphoneUI/UICallBar.m @@ -39,6 +39,7 @@ @synthesize optionsAddButton; @synthesize optionsTransferButton; +@synthesize dialerButton; @synthesize padView; @synthesize optionsView; @@ -73,6 +74,7 @@ [optionsAddButton release]; [optionsTransferButton release]; + [dialerButton release]; [oneButton release]; [twoButton release]; @@ -156,6 +158,10 @@ // Set selected+over background: IB lack ! [optionsButton setImage:[UIImage imageNamed:@"options_over.png"] forState:(UIControlStateHighlighted | UIControlStateSelected)]; + + // Set selected+over background: IB lack ! + [dialerButton setImage:[UIImage imageNamed:@"dialer_alt_back_over.png"] + forState:(UIControlStateHighlighted | UIControlStateSelected)]; } - (void)viewWillAppear:(BOOL)animated { @@ -245,6 +251,7 @@ #pragma mark - - (void)showPad{ + [dialerButton setOn]; if([padView isHidden]) { CGRect frame = [padView frame]; int original_y = frame.origin.y; @@ -267,6 +274,7 @@ } - (void)hidePad{ + [dialerButton setOff]; if(![padView isHidden]) { CGRect frame = [padView frame]; int original_y = frame.origin.y; @@ -294,7 +302,7 @@ } - (void)showOptions{ - [optionsButton setSelected:TRUE]; + [optionsButton setOn]; if([optionsView isHidden]) { CGRect frame = [optionsView frame]; int original_y = frame.origin.y; @@ -317,7 +325,7 @@ } - (void)hideOptions{ - [optionsButton setSelected:FALSE]; + [optionsButton setOff]; if(![optionsView isHidden]) { CGRect frame = [optionsView frame]; int original_y = frame.origin.y; diff --git a/Classes/LinphoneUI/UICallBar.xib b/Classes/LinphoneUI/UICallBar.xib index ed272ddb2..71d94f926 100644 --- a/Classes/LinphoneUI/UICallBar.xib +++ b/Classes/LinphoneUI/UICallBar.xib @@ -2,10 +2,10 @@ 1296 - 11D50 + 11E53 2182 - 1138.32 - 568.00 + 1138.47 + 569.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin 1181 @@ -738,6 +738,10 @@ NSImage dialer_alt_over.png + + NSImage + dialer_alt_back_default.png + NSImage dialer_alt_default.png @@ -1261,6 +1265,7 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIToggleButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIMicroButton @@ -1277,8 +1282,9 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIToggleButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin - + UIDigitButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -1372,6 +1378,7 @@ UIButton + UIButton UIButton UIButton UIButton @@ -1400,6 +1407,10 @@ conferenceButton UIButton + + dialerButton + UIButton + eightButton UIButton @@ -1601,6 +1612,7 @@ {209, 136} {209, 136} + {209, 136} {209, 136} {209, 136} {222, 136} diff --git a/Classes/LinphoneUI/UIChatCell.xib b/Classes/LinphoneUI/UIChatCell.xib index dda98e6a6..d64d8a989 100644 --- a/Classes/LinphoneUI/UIChatCell.xib +++ b/Classes/LinphoneUI/UIChatCell.xib @@ -42,6 +42,7 @@ 292 {{10, 8}, {27, 27}} + _NS:9 NO @@ -56,6 +57,7 @@ 274 {{45, 0}, {60, 44}} + _NS:328 NO @@ -91,6 +93,7 @@ 274 {{110, 0}, {170, 44}} + _NS:328 NO @@ -123,6 +126,7 @@ 292 {{276, 0}, {44, 44}} + _NS:9 NO @@ -161,7 +165,7 @@ 292 {{276, 0}, {44, 44}} - + _NS:9 NO IBCocoaTouchFramework @@ -187,39 +191,15 @@ {320, 44} + _NS:9 - + 3 MCAwAA IBCocoaTouchFramework - - - 292 - {320, 44} - - - _NS:9 - NO - IBCocoaTouchFramework - - NSImage - list_highlight.png - - - - - 292 - {320, 44} - - - _NS:9 - - NO - IBCocoaTouchFramework - @@ -239,22 +219,6 @@ 24 - - - backgroundView - - - - 28 - - - - selectedBackgroundView - - - - 29 - avatarImage @@ -353,18 +317,6 @@ chatContentLabel - - 26 - - - selectedBackground - - - 27 - - - background - 32 @@ -385,8 +337,6 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -397,7 +347,61 @@ 37 - + + + + UIChatCell + UITableViewCell + + id + id + + + + onDeleteClick: + id + + + onDetailsClick: + id + + + + UIImageView + UILabel + UIButton + UIButton + UILabel + + + + avatarImage + UIImageView + + + chatContentLabel + UILabel + + + deleteButton + UIButton + + + detailsButton + UIButton + + + displayNameLabel + UILabel + + + + IBProjectSource + ./Classes/UIChatCell.h + + + + 0 IBCocoaTouchFramework @@ -412,7 +416,6 @@ {45, 45} {45, 45} {45, 45} - {640, 88} 1181 diff --git a/Classes/LinphoneUI/UIContactCell.m b/Classes/LinphoneUI/UIContactCell.m index 24a9af109..624db9c53 100644 --- a/Classes/LinphoneUI/UIContactCell.m +++ b/Classes/LinphoneUI/UIContactCell.m @@ -125,4 +125,19 @@ [lastNameLabel setFrame: lastNameFrame]; } +- (void)setHighlighted:(BOOL)highlighted { + [self setHighlighted:highlighted animated:FALSE]; +} + +- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { + [super setHighlighted:highlighted animated:animated]; + if(highlighted) { + [lastNameLabel setTextColor:[UIColor whiteColor]]; + [firstNameLabel setTextColor:[UIColor whiteColor]]; + } else { + [lastNameLabel setTextColor:[UIColor blackColor]]; + [firstNameLabel setTextColor:[UIColor blackColor]]; + } +} + @end diff --git a/Classes/LinphoneUI/UIContactCell.xib b/Classes/LinphoneUI/UIContactCell.xib index 0b696c528..3a2893e5d 100644 --- a/Classes/LinphoneUI/UIContactCell.xib +++ b/Classes/LinphoneUI/UIContactCell.xib @@ -41,6 +41,7 @@ 292 {{6, 6}, {32, 32}} + _NS:9 NO @@ -51,6 +52,7 @@ 274 {{46, 0}, {55, 44}} + _NS:328 NO @@ -63,10 +65,6 @@ IBCocoaTouchFramework John - - 1 - MCAwIDAAA - 1 10 @@ -86,7 +84,7 @@ 274 {{111, 0}, {200, 44}} - + _NS:328 NO YES @@ -98,7 +96,6 @@ IBCocoaTouchFramework Doe - 1 10 @@ -116,39 +113,15 @@ {320, 44} + _NS:9 - + 3 MCAwAA IBCocoaTouchFramework - - - 292 - {320, 44} - - - _NS:9 - NO - IBCocoaTouchFramework - - NSImage - list_highlight.png - - - - - 292 - {320, 44} - - - _NS:9 - - NO - IBCocoaTouchFramework - @@ -168,22 +141,6 @@ 18 - - - selectedBackgroundView - - - - 20 - - - - backgroundView - - - - 22 - avatarImage @@ -234,18 +191,6 @@ lastName - - 19 - - - selectedBackground - - - 21 - - - background - 23 @@ -261,8 +206,6 @@ 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 @@ -272,7 +215,37 @@ 24 - + + + + UIContactCell + UITableViewCell + + UIImageView + UILabel + UILabel + + + + avatarImage + UIImageView + + + firstNameLabel + UILabel + + + lastNameLabel + UILabel + + + + IBProjectSource + ./Classes/UIContactCell.h + + + + 0 IBCocoaTouchFramework @@ -281,10 +254,6 @@ YES 3 - - list_highlight.png - {640, 88} - 1181 diff --git a/Classes/LinphoneUI/UIHistoryCell.xib b/Classes/LinphoneUI/UIHistoryCell.xib index 4a1efe211..cfca19597 100644 --- a/Classes/LinphoneUI/UIHistoryCell.xib +++ b/Classes/LinphoneUI/UIHistoryCell.xib @@ -129,7 +129,6 @@ {{276, 0}, {44, 44}} - _NS:9 NO IBCocoaTouchFramework @@ -158,39 +157,12 @@ _NS:9 - + 3 MCAwAA IBCocoaTouchFramework - - - 292 - {320, 44} - - - - _NS:9 - NO - IBCocoaTouchFramework - - NSImage - list_highlight.png - - - - - 292 - {320, 44} - - - - _NS:9 - - NO - IBCocoaTouchFramework - @@ -226,22 +198,6 @@ 17 - - - selectedBackgroundView - - - - 22 - - - - backgroundView - - - - 24 - onDetails: @@ -315,18 +271,6 @@ deleteButton - - 21 - - - selectedBackground - - - 23 - - - background - @@ -338,8 +282,6 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -415,7 +357,6 @@ {45, 45} {45, 45} {45, 45} - {640, 88} 1181 diff --git a/Classes/LinphoneUI/UILinphone.h b/Classes/LinphoneUI/UILinphone.h new file mode 100644 index 000000000..42fc6c2ba --- /dev/null +++ b/Classes/LinphoneUI/UILinphone.h @@ -0,0 +1,25 @@ +/* UILinphone.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. + */ + +#ifndef UILINPHONE_H +#define UILINPHONE_H + +#define LINPHONE_TABLE_CELL_BACKGROUND_COLOR [UIColor colorWithRed:207.0f/255.0f green:76.0f/255.0f blue:41.0f/255.0f alpha:1.0f] + +#endif diff --git a/Classes/LinphoneUI/UIMainBar.h b/Classes/LinphoneUI/UIMainBar.h index efb58843e..783a29074 100644 --- a/Classes/LinphoneUI/UIMainBar.h +++ b/Classes/LinphoneUI/UIMainBar.h @@ -25,6 +25,8 @@ UIButton *dialerButton; UIButton *settingsButton; UIButton *chatButton; + UIView *historyNotificationView; + UILabel *historyNotificationLabel; } @property (nonatomic, retain) IBOutlet UIButton* historyButton; @@ -32,9 +34,13 @@ @property (nonatomic, retain) IBOutlet UIButton* dialerButton; @property (nonatomic, retain) IBOutlet UIButton* settingsButton; @property (nonatomic, retain) IBOutlet UIButton* chatButton; +@property (nonatomic, retain) IBOutlet UIView *historyNotificationView; +@property (nonatomic, retain) IBOutlet UILabel *historyNotificationLabel; + -(IBAction) onHistoryClick: (id) event; -(IBAction) onContactsClick: (id) event; -(IBAction) onDialerClick: (id) event; -(IBAction) onSettingsClick: (id) event; -(IBAction) onChatClick: (id) event; + @end diff --git a/Classes/LinphoneUI/UIMainBar.m b/Classes/LinphoneUI/UIMainBar.m index 8c498efd1..f7cd3c63e 100644 --- a/Classes/LinphoneUI/UIMainBar.m +++ b/Classes/LinphoneUI/UIMainBar.m @@ -27,7 +27,8 @@ @synthesize dialerButton; @synthesize settingsButton; @synthesize chatButton; - +@synthesize historyNotificationView; +@synthesize historyNotificationLabel; #pragma mark - Lifecycle Functions @@ -43,6 +44,8 @@ [dialerButton release]; [settingsButton release]; [chatButton release]; + [historyNotificationView release]; + [historyNotificationLabel release]; [super dealloc]; } @@ -57,7 +60,16 @@ selector:@selector(changeViewEvent:) name:@"LinphoneMainViewChange" object:nil]; - [self update:[[PhoneMainView instance] currentView]]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(callUpdate:) + name:@"LinphoneCallUpdate" + object:nil]; + [self updateView:[[PhoneMainView instance] currentView]]; + if([LinphoneManager isLcReady]) { + [self updateMissed:linphone_core_get_missed_calls_count([LinphoneManager getLc])]; + } else { + [self updateMissed:0]; + } } - (void)viewWillDisappear:(BOOL)animated { @@ -66,21 +78,83 @@ [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneMainViewChange" object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self + name:@"LinphoneCallUpdate" + object:nil]; } #pragma mark - Event Functions +- (void)callUpdate: (NSNotification*) notif { + //LinphoneCall *call = [[notif.userInfo objectForKey: @"call"] pointerValue]; + //LinphoneCallState state = [[notif.userInfo objectForKey: @"state"] intValue]; + [self updateMissed:linphone_core_get_missed_calls_count([LinphoneManager getLc])]; +} + - (void)changeViewEvent: (NSNotification*) notif { NSNumber *viewNumber = [notif.userInfo objectForKey: @"view"]; if(viewNumber != nil) - [self update:[viewNumber intValue]]; + [self updateView:[viewNumber intValue]]; } #pragma mark - -- (void)update:(PhoneView) view { +- (void)updateMissed:(int)missedCall { + if (missedCall > 0) { + if([historyNotificationView isHidden]) { + historyNotificationView.transform = CGAffineTransformIdentity; + [self startShakeAnimation:@"Shake" target:historyNotificationView]; + [historyNotificationView setHidden:FALSE]; + } + [historyNotificationLabel setText:[NSString stringWithFormat:@"%i", missedCall]]; + } else { + if(![historyNotificationView isHidden]) { + [self stopShakeAnimation:@"Shake" target:historyNotificationView]; + CGAffineTransform startCGA = [historyNotificationView transform]; + [UIView animateWithDuration:0.4 + delay:0 + options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAllowUserInteraction + animations:^{ + historyNotificationView.transform = CGAffineTransformConcat(startCGA, CGAffineTransformMakeScale(0.01f, 0.01f)); + } + completion:^(BOOL finished){ + [historyNotificationView setHidden:TRUE]; + } + ]; + } + } +} + +- (void)startShakeAnimation:(NSString *)animationID target:(UIView *)target { + [target setTransform:CGAffineTransformMakeTranslation(0, -4)]; + [UIView animateWithDuration: 0.3 + delay: 0 + options: UIViewAnimationOptionRepeat | + UIViewAnimationOptionAutoreverse | + UIViewAnimationOptionAllowUserInteraction | + UIViewAnimationOptionCurveEaseIn + animations:^{ + [target setTransform:CGAffineTransformMakeTranslation(0, 4)]; + } + completion:^(BOOL finished){ + }]; + +} + +- (void)stopShakeAnimation:(NSString *)animationID target:(UIView *)target { + [target.layer removeAnimationForKey:animationID]; +} + +- (void)updateView:(PhoneView) view { + // Reset missed call + if(view == PhoneView_History) { + linphone_core_reset_missed_calls_count([LinphoneManager getLc]); + [self updateMissed:0]; + } + + // Update buttons if(view == PhoneView_History) { historyButton.selected = TRUE; } else { diff --git a/Classes/LinphoneUI/UIMainBar.xib b/Classes/LinphoneUI/UIMainBar.xib index fa4fa09b3..a861b8642 100644 --- a/Classes/LinphoneUI/UIMainBar.xib +++ b/Classes/LinphoneUI/UIMainBar.xib @@ -11,9 +11,11 @@ 1181 - IBProxyObject - IBUIView IBUIButton + IBUIImageView + IBUIView + IBUILabel + IBProxyObject com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -41,7 +43,7 @@ {{0, 11}, {320, 66}} - + _NS:9 1 @@ -96,6 +98,71 @@ 16 + + + -2147483356 + + + + 274 + {21, 21} + + + + _NS:9 + NO + IBCocoaTouchFramework + + NSImage + history_notification.png + + + + + 292 + {21, 21} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + 99 + + 3 + MQA + + + 0 + 10 + 1 + + 1 + 14 + + + Helvetica + 14 + 16 + + + + {{38, 5}, {21, 21}} + + + + _NS:9 + + 3 + MCAwAA + + NO + NO + IBCocoaTouchFramework + 292 @@ -198,7 +265,6 @@ {{256, 0}, {64, 77}} - _NS:9 NO @@ -288,6 +354,22 @@ 12 + + + historyNotificationLabel + + + + 35 + + + + historyNotificationView + + + + 36 + onChatClick: @@ -363,6 +445,7 @@ + mainTabBar @@ -404,6 +487,28 @@ dialer + + 32 + + + + + + + historyNotificationView + + + 33 + + + historyNotificationImage + + + 34 + + + historyNotificationLabel + @@ -413,6 +518,9 @@ 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 @@ -429,7 +537,7 @@ - 29 + 36 @@ -470,6 +578,8 @@ UIButton UIButton UIButton + UILabel + UIView UIButton @@ -489,6 +599,14 @@ historyButton UIButton + + historyNotificationLabel + UILabel + + + historyNotificationView + UIView + settingsButton UIButton @@ -520,6 +638,7 @@ {128, 154} {128, 154} {128, 154} + {43, 43} {128, 154} {128, 154} {128, 154} diff --git a/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.h b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.h new file mode 100755 index 000000000..262c841c6 --- /dev/null +++ b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.h @@ -0,0 +1,17 @@ +// +// TPKeyboardAvoidingScrollView.h +// +// Created by Michael Tyson on 11/04/2011. +// Copyright 2011 A Tasty Pixel. All rights reserved. +// + +@interface TPKeyboardAvoidingScrollView : UIScrollView { + UIEdgeInsets _priorInset; + BOOL _priorInsetSaved; + BOOL _keyboardVisible; + CGRect _keyboardRect; + CGSize _originalContentSize; +} + +- (void)adjustOffsetToIdealIfNeeded; +@end diff --git a/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m new file mode 100755 index 000000000..ee0372065 --- /dev/null +++ b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m @@ -0,0 +1,186 @@ +// +// TPKeyboardAvoidingScrollView.m +// +// Created by Michael Tyson on 11/04/2011. +// Copyright 2011 A Tasty Pixel. All rights reserved. +// + +#import "TPKeyboardAvoidingScrollView.h" + +#define _UIKeyboardFrameEndUserInfoKey (&UIKeyboardFrameEndUserInfoKey != NULL ? UIKeyboardFrameEndUserInfoKey : @"UIKeyboardBoundsUserInfoKey") + +@interface TPKeyboardAvoidingScrollView () +- (UIView*)findFirstResponderBeneathView:(UIView*)view; +- (UIEdgeInsets)contentInsetForKeyboard; +- (CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space; +- (CGRect)keyboardRect; +@end + +@implementation TPKeyboardAvoidingScrollView + +- (void)setup { + _priorInsetSaved = NO; + if ( CGSizeEqualToSize(self.contentSize, CGSizeZero) ) { + self.contentSize = self.bounds.size; + } + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +-(id)initWithFrame:(CGRect)frame { + if ( !(self = [super initWithFrame:frame]) ) return nil; + [self setup]; + return self; +} + +-(void)awakeFromNib { + [self setup]; +} + +-(void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +#if !__has_feature(objc_arc) + [super dealloc]; +#endif +} + +-(void)setFrame:(CGRect)frame { + [super setFrame:frame]; + + CGSize contentSize = _originalContentSize; + contentSize.width = MAX(contentSize.width, self.frame.size.width); + contentSize.height = MAX(contentSize.height, self.frame.size.height); + [super setContentSize:contentSize]; + + if ( _keyboardVisible ) { + self.contentInset = [self contentInsetForKeyboard]; + } +} + +-(void)setContentSize:(CGSize)contentSize { + _originalContentSize = contentSize; + + contentSize.width = MAX(contentSize.width, self.frame.size.width); + contentSize.height = MAX(contentSize.height, self.frame.size.height); + [super setContentSize:contentSize]; + + if ( _keyboardVisible ) { + self.contentInset = [self contentInsetForKeyboard]; + } +} + +- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + [[self findFirstResponderBeneathView:self] resignFirstResponder]; + [super touchesEnded:touches withEvent:event]; +} + +- (void)keyboardWillShow:(NSNotification*)notification { + _keyboardRect = [[[notification userInfo] objectForKey:_UIKeyboardFrameEndUserInfoKey] CGRectValue]; + _keyboardVisible = YES; + + UIView *firstResponder = [self findFirstResponderBeneathView:self]; + if ( !firstResponder ) { + // No child view is the first responder - nothing to do here + return; + } + + if (!_priorInsetSaved) { + _priorInset = self.contentInset; + _priorInsetSaved = YES; + } + + // Shrink view's inset by the keyboard's height, and scroll to show the text field/view being edited + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; + [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]]; + + self.contentInset = [self contentInsetForKeyboard]; + [self setContentOffset:CGPointMake(self.contentOffset.x, + [self idealOffsetForView:firstResponder withSpace:[self keyboardRect].origin.y - self.bounds.origin.y]) + animated:YES]; + [self setScrollIndicatorInsets:self.contentInset]; + + [UIView commitAnimations]; +} + +- (void)keyboardWillHide:(NSNotification*)notification { + _keyboardRect = CGRectZero; + _keyboardVisible = NO; + + // Restore dimensions to prior size + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; + [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]]; + self.contentInset = _priorInset; + [self setScrollIndicatorInsets:self.contentInset]; + _priorInsetSaved = NO; + [UIView commitAnimations]; +} + +- (UIView*)findFirstResponderBeneathView:(UIView*)view { + // Search recursively for first responder + for ( UIView *childView in view.subviews ) { + if ( [childView respondsToSelector:@selector(isFirstResponder)] && [childView isFirstResponder] ) return childView; + UIView *result = [self findFirstResponderBeneathView:childView]; + if ( result ) return result; + } + return nil; +} + +- (UIEdgeInsets)contentInsetForKeyboard { + UIEdgeInsets newInset = self.contentInset; + CGRect keyboardRect = [self keyboardRect]; + newInset.bottom = keyboardRect.size.height - ((keyboardRect.origin.y+keyboardRect.size.height) - (self.bounds.origin.y+self.bounds.size.height)); + return newInset; +} + +-(CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space { + + // Convert the rect to get the view's distance from the top of the scrollView. + CGRect rect = [view convertRect:view.bounds toView:self]; + + // Set starting offset to that point + CGFloat offset = rect.origin.y; + + + if ( self.contentSize.height - offset < space ) { + // Scroll to the bottom + offset = self.contentSize.height - space; + } else { + if ( view.bounds.size.height < space ) { + // Center vertically if there's room + offset -= floor((space-view.bounds.size.height)/2.0); + } + if ( offset + space > self.contentSize.height ) { + // Clamp to content size + offset = self.contentSize.height - space; + } + } + + if (offset < 0) offset = 0; + + return offset; +} + +-(void)adjustOffsetToIdealIfNeeded { + + // Only do this if the keyboard is already visible + if ( !_keyboardVisible ) return; + + CGFloat visibleSpace = self.bounds.size.height - self.contentInset.top - self.contentInset.bottom; + + CGPoint idealOffset = CGPointMake(0, [self idealOffsetForView:[self findFirstResponderBeneathView:self] withSpace:visibleSpace]); + + [self setContentOffset:idealOffset animated:YES]; +} + +- (CGRect)keyboardRect { + CGRect keyboardRect = [self convertRect:_keyboardRect fromView:nil]; + if ( keyboardRect.origin.y == 0 ) { + CGRect screenBounds = [self convertRect:[UIScreen mainScreen].bounds fromView:nil]; + keyboardRect.origin = CGPointMake(0, screenBounds.size.height - keyboardRect.size.height); + } + return keyboardRect; +} + +@end diff --git a/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.h b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.h new file mode 100755 index 000000000..7485c6005 --- /dev/null +++ b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.h @@ -0,0 +1,16 @@ +// +// TPKeyboardAvoidingTableView.h +// +// Created by Michael Tyson on 11/04/2011. +// Copyright 2011 A Tasty Pixel. All rights reserved. +// + +@interface TPKeyboardAvoidingTableView : UITableView { + UIEdgeInsets _priorInset; + BOOL _priorInsetSaved; + BOOL _keyboardVisible; + CGRect _keyboardRect; +} + +- (void)adjustOffsetToIdealIfNeeded; +@end diff --git a/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.m b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.m new file mode 100755 index 000000000..9eea88c74 --- /dev/null +++ b/Classes/Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.m @@ -0,0 +1,173 @@ +// +// TPKeyboardAvoidingTableView.m +// +// Created by Michael Tyson on 11/04/2011. +// Copyright 2011 A Tasty Pixel. All rights reserved. +// + +#import "TPKeyboardAvoidingTableView.h" + +#define _UIKeyboardFrameEndUserInfoKey (&UIKeyboardFrameEndUserInfoKey != NULL ? UIKeyboardFrameEndUserInfoKey : @"UIKeyboardBoundsUserInfoKey") + +@interface TPKeyboardAvoidingTableView () +- (UIView*)findFirstResponderBeneathView:(UIView*)view; +- (UIEdgeInsets)contentInsetForKeyboard; +- (CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space; +- (CGRect)keyboardRect; +@end + +@implementation TPKeyboardAvoidingTableView + +- (void)setup { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +-(id)initWithFrame:(CGRect)frame { + if ( !(self = [super initWithFrame:frame]) ) return nil; + [self setup]; + return self; +} + +-(id)initWithCoder:(NSCoder *)aDecoder { + if ( !(self = [super initWithCoder:aDecoder]) ) return nil; + [self setup]; + return self; +} + +-(void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +#if !__has_feature(objc_arc) + [super dealloc]; +#endif +} + +-(void)setFrame:(CGRect)frame { + [super setFrame:frame]; + if ( _keyboardVisible ) { + self.contentInset = [self contentInsetForKeyboard]; + } +} + +-(void)setContentSize:(CGSize)contentSize { + [super setContentSize:contentSize]; + if ( _keyboardVisible ) { + self.contentInset = [self contentInsetForKeyboard]; + } +} + +- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { + [[self findFirstResponderBeneathView:self] resignFirstResponder]; + [super touchesEnded:touches withEvent:event]; +} + +- (void)keyboardWillShow:(NSNotification*)notification { + _keyboardRect = [[[notification userInfo] objectForKey:_UIKeyboardFrameEndUserInfoKey] CGRectValue]; + _keyboardVisible = YES; + + UIView *firstResponder = [self findFirstResponderBeneathView:self]; + if ( !firstResponder ) { + // No child view is the first responder - nothing to do here + return; + } + + if (!_priorInsetSaved) { + _priorInset = self.contentInset; + _priorInsetSaved = YES; + } + + // Shrink view's inset by the keyboard's height, and scroll to show the text field/view being edited + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; + [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]]; + + self.contentInset = [self contentInsetForKeyboard]; + [self setContentOffset:CGPointMake(self.contentOffset.x, + [self idealOffsetForView:firstResponder withSpace:[self keyboardRect].origin.y - self.bounds.origin.y]) + animated:YES]; + [self setScrollIndicatorInsets:self.contentInset]; + + [UIView commitAnimations]; +} + +- (void)keyboardWillHide:(NSNotification*)notification { + _keyboardRect = CGRectZero; + _keyboardVisible = NO; + + // Restore dimensions to prior size + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; + [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]]; + self.contentInset = _priorInset; + [self setScrollIndicatorInsets:self.contentInset]; + _priorInsetSaved = NO; + [UIView commitAnimations]; +} + +- (UIView*)findFirstResponderBeneathView:(UIView*)view { + // Search recursively for first responder + for ( UIView *childView in view.subviews ) { + if ( [childView respondsToSelector:@selector(isFirstResponder)] && [childView isFirstResponder] ) return childView; + UIView *result = [self findFirstResponderBeneathView:childView]; + if ( result ) return result; + } + return nil; +} + +- (UIEdgeInsets)contentInsetForKeyboard { + UIEdgeInsets newInset = self.contentInset; + CGRect keyboardRect = [self keyboardRect]; + newInset.bottom = keyboardRect.size.height - ((keyboardRect.origin.y+keyboardRect.size.height) - (self.bounds.origin.y+self.bounds.size.height)); + return newInset; +} + +-(CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space { + + // Convert the rect to get the view's distance from the top of the scrollView. + CGRect rect = [view convertRect:view.bounds toView:self]; + + // Set starting offset to that point + CGFloat offset = rect.origin.y; + + + if ( self.contentSize.height - offset < space ) { + // Scroll to the bottom + offset = self.contentSize.height - space; + } else { + if ( view.bounds.size.height < space ) { + // Center vertically if there's room + offset -= floor((space-view.bounds.size.height)/2.0); + } + if ( offset + space > self.contentSize.height ) { + // Clamp to content size + offset = self.contentSize.height - space; + } + } + + if (offset < 0) offset = 0; + + return offset; +} + +-(void)adjustOffsetToIdealIfNeeded { + + // Only do this if the keyboard is already visible + if ( !_keyboardVisible ) return; + + CGFloat visibleSpace = self.bounds.size.height - self.contentInset.top - self.contentInset.bottom; + + CGPoint idealOffset = CGPointMake(0, [self idealOffsetForView:[self findFirstResponderBeneathView:self] withSpace:visibleSpace]); + + [self setContentOffset:idealOffset animated:YES]; +} + +- (CGRect)keyboardRect { + CGRect keyboardRect = [self convertRect:_keyboardRect fromView:nil]; + if ( keyboardRect.origin.y == 0 ) { + CGRect screenBounds = [self convertRect:[UIScreen mainScreen].bounds fromView:nil]; + keyboardRect.origin = CGPointMake(0, screenBounds.size.height - keyboardRect.size.height); + } + return keyboardRect; +} + +@end diff --git a/Classes/Utils/UACellBackgroundView/UACellBackgroundView.h b/Classes/Utils/UACellBackgroundView/UACellBackgroundView.h new file mode 100644 index 000000000..a2a397792 --- /dev/null +++ b/Classes/Utils/UACellBackgroundView/UACellBackgroundView.h @@ -0,0 +1,30 @@ +// +// UACellBackgroundView.h +// Ambiance +// +// Created by Matt Coneybeare on 1/31/10. +// Copyright 2010 Urban Apps LLC. All rights reserved. +// +// Modified by Diorcet Yann on 07/12/12 + +#import + +#import + +typedef enum { + UACellBackgroundViewPositionSingle = 0, + UACellBackgroundViewPositionTop, + UACellBackgroundViewPositionBottom, + UACellBackgroundViewPositionMiddle +} UACellBackgroundViewPosition; + +@interface UACellBackgroundView : UIView { + UACellBackgroundViewPosition position; + BOOL automaticPositioning; +} + +@property(nonatomic) UACellBackgroundViewPosition position; +@property(nonatomic, copy) UIColor *backgroundColor; +@property(assign) BOOL automaticPositioning; + +@end diff --git a/Classes/Utils/UACellBackgroundView/UACellBackgroundView.m b/Classes/Utils/UACellBackgroundView/UACellBackgroundView.m new file mode 100644 index 000000000..78cb23633 --- /dev/null +++ b/Classes/Utils/UACellBackgroundView/UACellBackgroundView.m @@ -0,0 +1,274 @@ +// +// UACellBackgroundView.m +// Ambiance +// +// Created by Matt Coneybeare on 1/31/10. +// Copyright 2010 Urban Apps LLC. All rights reserved. +// +// Modified by Diorcet Yann on 07/12/12 + +#define kDefaultMargin 10 + +#import "UACellBackgroundView.h" + +static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth,float ovalHeight); + +@implementation UACellBackgroundView + +@synthesize position; +@synthesize backgroundColor; +@synthesize automaticPositioning; + +- (void)initUACellBackgroundView { + [super setBackgroundColor:[UIColor clearColor]]; + self->automaticPositioning = TRUE; +} + +- (id)init { + self = [super init]; + if(self != nil) { + [self initUACellBackgroundView]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if(self != nil) { + [self initUACellBackgroundView]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if(self != nil) { + [self initUACellBackgroundView]; + } + return self; +} + +- (BOOL)isOpaque { + return NO; +} + +- (void)setBackgroundColor:(UIColor *)abackgroundColor { + if(self->backgroundColor != nil) { + [self->backgroundColor release]; + } + self->backgroundColor = [[UIColor alloc]initWithCGColor:abackgroundColor.CGColor]; + [self setNeedsDisplay]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + if(!automaticPositioning) + return; + + // + // Auto found position + // + + UIView *view = [self superview]; + // Find TableViewCell + if(view != nil && ![view isKindOfClass:[UITableView class]]) view = [view superview]; + + UIView *cellView = [self superview]; + // Find TableViewCell + if(cellView != nil && ![cellView isKindOfClass:[UITableViewCell class]]) cellView = [cellView superview]; + + if(view != nil && cellView != nil) { + UITableViewCell *cell = (UITableViewCell*)cellView; + UITableView *tableView = (UITableView*)view; + + if([tableView style] == UITableViewStyleGrouped) { + NSIndexPath *path = [tableView indexPathForCell:cell]; + if(path) { + int count = [tableView numberOfRowsInSection:[path section]]; + // Set Position for background view + if([path row] == 0) { + if([path row] == (count - 1)) { + [self setPosition:UACellBackgroundViewPositionSingle]; + } else { + [self setPosition:UACellBackgroundViewPositionTop]; + } + } else if([path row] == (count - 1)) { + [self setPosition:UACellBackgroundViewPositionBottom]; + } else { + [self setPosition:UACellBackgroundViewPositionMiddle]; + } + } + } else { + [self setPosition:UACellBackgroundViewPositionMiddle]; + } + } + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)aRect { + // Drawing code + + CGContextRef c = UIGraphicsGetCurrentContext(); + + int lineWidth = 1; + + CGRect rect = [self bounds]; + CGFloat minx = CGRectGetMinX(rect), midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect); + CGFloat miny = CGRectGetMinY(rect), midy = CGRectGetMidY(rect), maxy = CGRectGetMaxY(rect); + miny -= 1; + + CGFloat locations[2] = { 0.0, 1.0 }; + CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); + CGGradientRef myGradient = nil; + CGFloat redColor, greenColor, blueColor, alphaColor; + [[self backgroundColor] getRed:&redColor green:&greenColor blue:&blueColor alpha:&alphaColor]; + CGFloat components[8] = {redColor, greenColor, blueColor, alphaColor, redColor * 0.766f, greenColor * 0.766f, blueColor * 0.766f, alphaColor}; + CGContextSetStrokeColorWithColor(c, [[UIColor grayColor] CGColor]); + CGContextSetLineWidth(c, lineWidth); + CGContextSetAllowsAntialiasing(c, YES); + CGContextSetShouldAntialias(c, YES); + + if (position == UACellBackgroundViewPositionTop) { + + miny += 1; + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, NULL, minx, maxy); + CGPathAddArcToPoint(path, NULL, minx, miny, midx, miny, kDefaultMargin); + CGPathAddArcToPoint(path, NULL, maxx, miny, maxx, maxy, kDefaultMargin); + CGPathAddLineToPoint(path, NULL, maxx, maxy); + CGPathAddLineToPoint(path, NULL, minx, maxy); + CGPathCloseSubpath(path); + + // Fill and stroke the path + CGContextSaveGState(c); + CGContextAddPath(c, path); + CGContextClip(c); + + myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2); + CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0); + + CGContextAddPath(c, path); + CGPathRelease(path); + CGContextStrokePath(c); + CGContextRestoreGState(c); + + } else if (position == UACellBackgroundViewPositionBottom) { + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, NULL, minx, miny); + CGPathAddArcToPoint(path, NULL, minx, maxy, midx, maxy, kDefaultMargin); + CGPathAddArcToPoint(path, NULL, maxx, maxy, maxx, miny, kDefaultMargin); + CGPathAddLineToPoint(path, NULL, maxx, miny); + CGPathAddLineToPoint(path, NULL, minx, miny); + CGPathCloseSubpath(path); + + // Fill and stroke the path + CGContextSaveGState(c); + CGContextAddPath(c, path); + CGContextClip(c); + + myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2); + CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0); + + CGContextAddPath(c, path); + CGPathRelease(path); + CGContextStrokePath(c); + CGContextRestoreGState(c); + + + } else if (position == UACellBackgroundViewPositionMiddle) { + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, NULL, minx, miny); + CGPathAddLineToPoint(path, NULL, maxx, miny); + CGPathAddLineToPoint(path, NULL, maxx, maxy); + CGPathAddLineToPoint(path, NULL, minx, maxy); + CGPathAddLineToPoint(path, NULL, minx, miny); + CGPathCloseSubpath(path); + + // Fill and stroke the path + CGContextSaveGState(c); + CGContextAddPath(c, path); + CGContextClip(c); + + myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2); + CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0); + + CGContextAddPath(c, path); + CGPathRelease(path); + CGContextStrokePath(c); + CGContextRestoreGState(c); + + } else if (position == UACellBackgroundViewPositionSingle) { + miny += 1; + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathMoveToPoint(path, NULL, minx, midy); + CGPathAddArcToPoint(path, NULL, minx, miny, midx, miny, kDefaultMargin); + CGPathAddArcToPoint(path, NULL, maxx, miny, maxx, midy, kDefaultMargin); + CGPathAddArcToPoint(path, NULL, maxx, maxy, midx, maxy, kDefaultMargin); + CGPathAddArcToPoint(path, NULL, minx, maxy, minx, midy, kDefaultMargin); + CGPathCloseSubpath(path); + + + // Fill and stroke the path + CGContextSaveGState(c); + CGContextAddPath(c, path); + CGContextClip(c); + + + myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2); + CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0); + + CGContextAddPath(c, path); + CGPathRelease(path); + CGContextStrokePath(c); + CGContextRestoreGState(c); + } + + CGColorSpaceRelease(myColorspace); + CGGradientRelease(myGradient); + return; +} + +- (void)dealloc { + [backgroundColor release]; + [super dealloc]; +} + +- (void)setPosition:(UACellBackgroundViewPosition)newPosition { + if (position != newPosition) { + position = newPosition; + [self setNeedsDisplay]; + } +} + +@end + +static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth,float ovalHeight) { + float fw, fh; + + if (ovalWidth == 0 || ovalHeight == 0) {// 1 + CGContextAddRect(context, rect); + return; + } + + CGContextSaveGState(context);// 2 + + CGContextTranslateCTM (context, CGRectGetMinX(rect),// 3 + CGRectGetMinY(rect)); + CGContextScaleCTM (context, ovalWidth, ovalHeight);// 4 + fw = CGRectGetWidth (rect) / ovalWidth;// 5 + fh = CGRectGetHeight (rect) / ovalHeight;// 6 + + CGContextMoveToPoint(context, fw, fh/2); // 7 + CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);// 8 + CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);// 9 + CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);// 10 + CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // 11 + CGContextClosePath(context);// 12 + + CGContextRestoreGState(context);// 13 +} diff --git a/Resources/add_call_default.png b/Resources/add_call_default.png index 0932c749d..81d6c7ed4 100644 Binary files a/Resources/add_call_default.png and b/Resources/add_call_default.png differ diff --git a/Resources/add_call_disabled.png b/Resources/add_call_disabled.png index caee628d0..1e629a0cf 100644 Binary files a/Resources/add_call_disabled.png and b/Resources/add_call_disabled.png differ diff --git a/Resources/add_call_over.png b/Resources/add_call_over.png index 09e5b9197..7561d358b 100644 Binary files a/Resources/add_call_over.png and b/Resources/add_call_over.png differ diff --git a/Resources/button_alert_background_default.png b/Resources/button_alert_background_default.png index 6c3578ed2..eb9ba367d 100644 Binary files a/Resources/button_alert_background_default.png and b/Resources/button_alert_background_default.png differ diff --git a/Resources/button_alert_background_over.png b/Resources/button_alert_background_over.png index 4c5247427..1781eee3c 100644 Binary files a/Resources/button_alert_background_over.png and b/Resources/button_alert_background_over.png differ diff --git a/Resources/cancel_default.png b/Resources/cancel_default.png new file mode 100644 index 000000000..069a5185d Binary files /dev/null and b/Resources/cancel_default.png differ diff --git a/Resources/cancel_over.png b/Resources/cancel_over.png new file mode 100644 index 000000000..8da4f454f Binary files /dev/null and b/Resources/cancel_over.png differ diff --git a/Resources/contact_cancel_default.png b/Resources/contact_cancel_default.png new file mode 100644 index 000000000..80809dc95 Binary files /dev/null and b/Resources/contact_cancel_default.png differ diff --git a/Resources/contact_cancel_over.png b/Resources/contact_cancel_over.png new file mode 100644 index 000000000..d5bd87d17 Binary files /dev/null and b/Resources/contact_cancel_over.png differ diff --git a/Resources/contacts_add_default.png b/Resources/contacts_add_default.png index 786389930..e5ccfb54f 100644 Binary files a/Resources/contacts_add_default.png and b/Resources/contacts_add_default.png differ diff --git a/Resources/contacts_add_over.png b/Resources/contacts_add_over.png index 247777430..a858a1406 100644 Binary files a/Resources/contacts_add_over.png and b/Resources/contacts_add_over.png differ diff --git a/Resources/dialer_alt_back_default.png b/Resources/dialer_alt_back_default.png new file mode 100644 index 000000000..bacd50f44 Binary files /dev/null and b/Resources/dialer_alt_back_default.png differ diff --git a/Resources/dialer_alt_back_over.png b/Resources/dialer_alt_back_over.png new file mode 100644 index 000000000..3e3a6dfd2 Binary files /dev/null and b/Resources/dialer_alt_back_over.png differ diff --git a/Resources/dialer_alt_background.png b/Resources/dialer_alt_background.png new file mode 100644 index 000000000..5a2a26716 Binary files /dev/null and b/Resources/dialer_alt_background.png differ diff --git a/Resources/history_notification.png b/Resources/history_notification.png new file mode 100644 index 000000000..7eb396f7b Binary files /dev/null and b/Resources/history_notification.png differ diff --git a/Resources/list_highlight.png b/Resources/list_highlight.png deleted file mode 100644 index 929bfbdbf..000000000 Binary files a/Resources/list_highlight.png and /dev/null differ diff --git a/Resources/micro_on_defauly.png b/Resources/micro_on_defauly.png deleted file mode 100644 index ca63b44ff..000000000 Binary files a/Resources/micro_on_defauly.png and /dev/null differ diff --git a/Resources/transfer_call_default.png b/Resources/transfer_call_default.png index 8d66dc15e..b67e4509e 100644 Binary files a/Resources/transfer_call_default.png and b/Resources/transfer_call_default.png differ diff --git a/Resources/transfer_call_disabled.png b/Resources/transfer_call_disabled.png index 3cb5c1db7..0307f6bf8 100644 Binary files a/Resources/transfer_call_disabled.png and b/Resources/transfer_call_disabled.png differ diff --git a/Resources/transfer_call_over.png b/Resources/transfer_call_over.png index dee256062..9f3e9ac36 100644 Binary files a/Resources/transfer_call_over.png and b/Resources/transfer_call_over.png differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 60dd6691d..088237180 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -181,8 +181,6 @@ D3128FF415AABE4E00A2147A /* contact_edit_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3128FE915AABE4E00A2147A /* contact_edit_default.png */; }; D3128FF515AABE4E00A2147A /* contact_edit_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3128FEA15AABE4E00A2147A /* contact_edit_over.png */; }; D3128FF615AABE4E00A2147A /* contact_edit_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3128FEA15AABE4E00A2147A /* contact_edit_over.png */; }; - D3196D2D15A3199D007FEEBA /* list_highlight.png in Resources */ = {isa = PBXBuildFile; fileRef = D3196D2C15A3199D007FEEBA /* list_highlight.png */; }; - D3196D2E15A3199D007FEEBA /* list_highlight.png in Resources */ = {isa = PBXBuildFile; fileRef = D3196D2C15A3199D007FEEBA /* list_highlight.png */; }; D3196D3415A321E3007FEEBA /* options_add_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3196D3015A321E2007FEEBA /* options_add_default.png */; }; D3196D3515A321E3007FEEBA /* options_add_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3196D3015A321E2007FEEBA /* options_add_default.png */; }; D3196D3615A321E3007FEEBA /* options_add_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3196D3115A321E2007FEEBA /* options_add_over.png */; }; @@ -547,6 +545,20 @@ 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 */; }; + D3E84F1E15B00F4100420DAC /* cancel_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1715B00F4100420DAC /* cancel_default.png */; }; + D3E84F1F15B00F4100420DAC /* cancel_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1715B00F4100420DAC /* cancel_default.png */; }; + D3E84F2015B00F4100420DAC /* cancel_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1815B00F4100420DAC /* cancel_over.png */; }; + D3E84F2115B00F4100420DAC /* cancel_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1815B00F4100420DAC /* cancel_over.png */; }; + D3E84F2615B00F4100420DAC /* dialer_alt_back_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1B15B00F4100420DAC /* dialer_alt_back_default.png */; }; + D3E84F2715B00F4100420DAC /* dialer_alt_back_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1B15B00F4100420DAC /* dialer_alt_back_default.png */; }; + D3E84F2815B00F4100420DAC /* dialer_alt_back_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1C15B00F4100420DAC /* dialer_alt_back_over.png */; }; + D3E84F2915B00F4100420DAC /* dialer_alt_back_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1C15B00F4100420DAC /* dialer_alt_back_over.png */; }; + D3E84F2A15B00F4100420DAC /* dialer_alt_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1D15B00F4100420DAC /* dialer_alt_background.png */; }; + D3E84F2B15B00F4100420DAC /* dialer_alt_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F1D15B00F4100420DAC /* dialer_alt_background.png */; }; + D3E84F3815B011AF00420DAC /* contact_cancel_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F3615B011AF00420DAC /* contact_cancel_default.png */; }; + D3E84F3915B011AF00420DAC /* contact_cancel_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F3615B011AF00420DAC /* contact_cancel_default.png */; }; + D3E84F3A15B011AF00420DAC /* contact_cancel_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F3715B011AF00420DAC /* contact_cancel_over.png */; }; + D3E84F3B15B011AF00420DAC /* contact_cancel_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3E84F3715B011AF00420DAC /* contact_cancel_over.png */; }; D3E8F68615ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E8F68415ADE0580065A226 /* UIContactDetailsFooter.m */; }; D3E8F68715ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E8F68415ADE0580065A226 /* UIContactDetailsFooter.m */; }; D3E8F68815ADE05B0065A226 /* UIContactDetailsFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3E8F68515ADE05A0065A226 /* UIContactDetailsFooter.xib */; }; @@ -731,6 +743,14 @@ D3F83F8F15822ABE00336684 /* PhoneMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F83F8D15822ABD00336684 /* PhoneMainView.m */; }; D3F83F9215824D3600336684 /* LinphoneApp.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3F83F9115824D3500336684 /* LinphoneApp.xib */; }; D3F83F9315824D3600336684 /* LinphoneApp.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3F83F9115824D3500336684 /* LinphoneApp.xib */; }; + D3F9A9DB15AEEB940045320F /* history_notification.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F9A9DA15AEEB940045320F /* history_notification.png */; }; + D3F9A9DC15AEEB940045320F /* history_notification.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F9A9DA15AEEB940045320F /* history_notification.png */; }; + D3F9A9E215AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9DF15AF100D0045320F /* TPKeyboardAvoidingScrollView.m */; }; + D3F9A9E315AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9DF15AF100D0045320F /* TPKeyboardAvoidingScrollView.m */; }; + D3F9A9E415AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9E115AF100D0045320F /* TPKeyboardAvoidingTableView.m */; }; + D3F9A9E515AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9E115AF100D0045320F /* TPKeyboardAvoidingTableView.m */; }; + D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9ED15AF277D0045320F /* UACellBackgroundView.m */; }; + D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F9A9ED15AF277D0045320F /* UACellBackgroundView.m */; }; F476004B147AAF2800FFF19B /* liblinphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2211DB911475562600DEE054 /* liblinphone.a */; }; F476004C147AAF4600FFF19B /* libmediastreamer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2211DB8F147555C800DEE054 /* libmediastreamer.a */; }; /* End PBXBuildFile section */ @@ -1073,7 +1093,6 @@ D3128FE815AABE4E00A2147A /* contact_back_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_back_over.png; path = Resources/contact_back_over.png; sourceTree = ""; }; D3128FE915AABE4E00A2147A /* contact_edit_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_edit_default.png; path = Resources/contact_edit_default.png; sourceTree = ""; }; D3128FEA15AABE4E00A2147A /* contact_edit_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_edit_over.png; path = Resources/contact_edit_over.png; sourceTree = ""; }; - D3196D2C15A3199D007FEEBA /* list_highlight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = list_highlight.png; path = Resources/list_highlight.png; sourceTree = ""; }; D3196D3015A321E2007FEEBA /* options_add_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_add_default.png; path = Resources/options_add_default.png; sourceTree = ""; }; D3196D3115A321E2007FEEBA /* options_add_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_add_over.png; path = Resources/options_add_over.png; sourceTree = ""; }; D3196D3215A321E3007FEEBA /* options_transfer_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_transfer_default.png; path = Resources/options_transfer_default.png; sourceTree = ""; }; @@ -1314,6 +1333,14 @@ 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 = ""; }; + D3E84F1715B00F4100420DAC /* cancel_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cancel_default.png; path = Resources/cancel_default.png; sourceTree = ""; }; + D3E84F1815B00F4100420DAC /* cancel_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cancel_over.png; path = Resources/cancel_over.png; sourceTree = ""; }; + D3E84F1B15B00F4100420DAC /* dialer_alt_back_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_alt_back_default.png; path = Resources/dialer_alt_back_default.png; sourceTree = ""; }; + D3E84F1C15B00F4100420DAC /* dialer_alt_back_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_alt_back_over.png; path = Resources/dialer_alt_back_over.png; sourceTree = ""; }; + D3E84F1D15B00F4100420DAC /* dialer_alt_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_alt_background.png; path = Resources/dialer_alt_background.png; sourceTree = ""; }; + D3E84F3615B011AF00420DAC /* contact_cancel_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_cancel_default.png; path = Resources/contact_cancel_default.png; sourceTree = ""; }; + D3E84F3715B011AF00420DAC /* contact_cancel_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_cancel_over.png; path = Resources/contact_cancel_over.png; sourceTree = ""; }; + D3E84F3C15B018A600420DAC /* UILinphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILinphone.h; sourceTree = ""; }; D3E8F68315ADE0570065A226 /* UIContactDetailsFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIContactDetailsFooter.h; sourceTree = ""; }; D3E8F68415ADE0580065A226 /* UIContactDetailsFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIContactDetailsFooter.m; sourceTree = ""; }; D3E8F68515ADE05A0065A226 /* UIContactDetailsFooter.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIContactDetailsFooter.xib; sourceTree = ""; }; @@ -1419,6 +1446,13 @@ D3F83F8C158229C500336684 /* PhoneMainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhoneMainView.h; sourceTree = ""; }; D3F83F8D15822ABD00336684 /* PhoneMainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhoneMainView.m; sourceTree = ""; }; D3F83F9115824D3500336684 /* LinphoneApp.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LinphoneApp.xib; sourceTree = ""; }; + D3F9A9DA15AEEB940045320F /* history_notification.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = history_notification.png; path = Resources/history_notification.png; sourceTree = ""; }; + D3F9A9DE15AF100D0045320F /* TPKeyboardAvoidingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TPKeyboardAvoidingScrollView.h; path = Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.h; sourceTree = ""; }; + D3F9A9DF15AF100D0045320F /* TPKeyboardAvoidingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TPKeyboardAvoidingScrollView.m; path = Utils/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m; sourceTree = ""; }; + D3F9A9E015AF100D0045320F /* TPKeyboardAvoidingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TPKeyboardAvoidingTableView.h; path = Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.h; sourceTree = ""; }; + D3F9A9E115AF100D0045320F /* TPKeyboardAvoidingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TPKeyboardAvoidingTableView.m; path = Utils/TPKeyboardAvoiding/TPKeyboardAvoidingTableView.m; sourceTree = ""; }; + D3F9A9EC15AF277D0045320F /* UACellBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UACellBackgroundView.h; path = Utils/UACellBackgroundView/UACellBackgroundView.h; sourceTree = ""; }; + D3F9A9ED15AF277D0045320F /* UACellBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UACellBackgroundView.m; path = Utils/UACellBackgroundView/UACellBackgroundView.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1864,6 +1898,7 @@ D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */, D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */, D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */, + D3E84F3C15B018A600420DAC /* UILinphone.h */, D32409C1158B49A600C8C119 /* UILongTouchButton.h */, D32409C2158B49A600C8C119 /* UILongTouchButton.m */, D3ED3E841586291B006C0DE4 /* UIMainBar.h */, @@ -2092,6 +2127,8 @@ D31C9C8D158A1C1000756B45 /* call_status_incoming.png */, D31C9C8E158A1C1000756B45 /* call_status_missed.png */, D31C9C8F158A1C1000756B45 /* call_status_outgoing.png */, + D3E84F1715B00F4100420DAC /* cancel_default.png */, + D3E84F1815B00F4100420DAC /* cancel_over.png */, D36C43CC158F2F370048BA40 /* cell_call.png */, D3211BB8159C8A820098460B /* cell_call_first.png */, D38D14AD15A30B3D008497E8 /* cell_call_first_highlight.png */, @@ -2121,6 +2158,8 @@ D3128FE715AABE4E00A2147A /* contact_back_default.png */, D3128FE815AABE4E00A2147A /* contact_back_over.png */, D378906915AC37C800BD776C /* contact_bar_background.png */, + D3E84F3615B011AF00420DAC /* contact_cancel_default.png */, + D3E84F3715B011AF00420DAC /* contact_cancel_over.png */, D3128FE915AABE4E00A2147A /* contact_edit_default.png */, D3128FEA15AABE4E00A2147A /* contact_edit_over.png */, D37C638D15AAD251009D0BAC /* contact_number.png */, @@ -2140,6 +2179,9 @@ D3F83F761582253100336684 /* decline_default.png */, D3F83F771582253100336684 /* decline_over.png */, D3ED3E441585FB8C006C0DE4 /* dialer_address_background.png */, + D3E84F1B15B00F4100420DAC /* dialer_alt_back_default.png */, + D3E84F1C15B00F4100420DAC /* dialer_alt_back_over.png */, + D3E84F1D15B00F4100420DAC /* dialer_alt_background.png */, D36C43CF158F2F370048BA40 /* dialer_alt_default.png */, D36C43D0158F2F370048BA40 /* dialer_alt_over.png */, D38327ED1580FE3A00FA0D23 /* dialer_default.png */, @@ -2157,6 +2199,7 @@ D3ED3E9515872EF1006C0DE4 /* history_edit_over.png */, D3ED3E9715872EF1006C0DE4 /* history_missed_default.png */, D3ED3E9615872EF1006C0DE4 /* history_missed_selected.png */, + D3F9A9DA15AEEB940045320F /* history_notification.png */, D3F26BF515986DAD005F9CAB /* history_ok_default.png */, D3F26BF615986DAD005F9CAB /* history_ok_over.png */, D38327FD158100E400FA0D23 /* history_over.png */, @@ -2175,7 +2218,6 @@ D3EA5417159858A80037DC6B /* list_delete_over.png */, D354981815876FE7000081D8 /* list_details_default.png */, D354981915876FE7000081D8 /* list_details_over.png */, - D3196D2C15A3199D007FEEBA /* list_highlight.png */, D3F83EF4158205A100336684 /* micro_off_default.png */, D35EA76115A2DF8D003E025D /* micro_off_disabled.png */, D3F83EF5158205A100336684 /* micro_off_over.png */, @@ -2277,13 +2319,15 @@ D326483415887D4400930C67 /* Utils */ = { isa = PBXGroup; children = ( - D38935F715A6D06800A3A3AA /* CPAnimation */, D3F26BEA159869A6005F9CAB /* AbstractCall.h */, D3F26BEB159869A6005F9CAB /* AbstractCall.m */, + D38935F715A6D06800A3A3AA /* CPAnimation */, D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */, D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */, D326483615887D5200930C67 /* OrderedDictionary.h */, D326483715887D5200930C67 /* OrderedDictionary.m */, + D3F9A9DD15AF0FFE0045320F /* TPKeyboardAvoiding */, + D3F9A9EB15AF27620045320F /* UACellBackgroundView */, ); name = Utils; sourceTree = ""; @@ -2404,6 +2448,26 @@ path = Settings; sourceTree = ""; }; + D3F9A9DD15AF0FFE0045320F /* TPKeyboardAvoiding */ = { + isa = PBXGroup; + children = ( + D3F9A9DE15AF100D0045320F /* TPKeyboardAvoidingScrollView.h */, + D3F9A9DF15AF100D0045320F /* TPKeyboardAvoidingScrollView.m */, + D3F9A9E015AF100D0045320F /* TPKeyboardAvoidingTableView.h */, + D3F9A9E115AF100D0045320F /* TPKeyboardAvoidingTableView.m */, + ); + name = TPKeyboardAvoiding; + sourceTree = ""; + }; + D3F9A9EB15AF27620045320F /* UACellBackgroundView */ = { + isa = PBXGroup; + children = ( + D3F9A9EC15AF277D0045320F /* UACellBackgroundView.h */, + D3F9A9ED15AF277D0045320F /* UACellBackgroundView.m */, + ); + name = UACellBackgroundView; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -2684,7 +2748,6 @@ D35EA76515A2DF8D003E025D /* micro_on_disabled.png in Resources */, D38D14AF15A30B3D008497E8 /* cell_call_first_highlight.png in Resources */, D38D14B115A30B3D008497E8 /* cell_call_highlight.png in Resources */, - D3196D2D15A3199D007FEEBA /* list_highlight.png in Resources */, D3196D3415A321E3007FEEBA /* options_add_default.png in Resources */, D3196D3615A321E3007FEEBA /* options_add_over.png in Resources */, D3196D3815A321E3007FEEBA /* options_transfer_default.png in Resources */, @@ -2743,6 +2806,14 @@ C9C8254C15AE207B00D493FA /* options_selected.png in Resources */, C9C8254F15AE256100D493FA /* transfer_call_disabled.png in Resources */, C90FAA7B15AF54E6002091CB /* HistoryDetailsViewController.xib in Resources */, + D3F9A9DB15AEEB940045320F /* history_notification.png in Resources */, + D3E84F1E15B00F4100420DAC /* cancel_default.png in Resources */, + D3E84F2015B00F4100420DAC /* cancel_over.png in Resources */, + D3E84F2615B00F4100420DAC /* dialer_alt_back_default.png in Resources */, + D3E84F2815B00F4100420DAC /* dialer_alt_back_over.png in Resources */, + D3E84F2A15B00F4100420DAC /* dialer_alt_background.png in Resources */, + D3E84F3815B011AF00420DAC /* contact_cancel_default.png in Resources */, + D3E84F3A15B011AF00420DAC /* contact_cancel_over.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2924,7 +2995,6 @@ D35EA76615A2DF8D003E025D /* micro_on_disabled.png in Resources */, D38D14B015A30B3D008497E8 /* cell_call_first_highlight.png in Resources */, D38D14B215A30B3D008497E8 /* cell_call_highlight.png in Resources */, - D3196D2E15A3199D007FEEBA /* list_highlight.png in Resources */, D3196D3515A321E3007FEEBA /* options_add_default.png in Resources */, D3196D3715A321E3007FEEBA /* options_add_over.png in Resources */, D3196D3915A321E3007FEEBA /* options_transfer_default.png in Resources */, @@ -2983,6 +3053,14 @@ C9C8254D15AE207B00D493FA /* options_selected.png in Resources */, C9C8255015AE256100D493FA /* transfer_call_disabled.png in Resources */, C90FAA7C15AF54E6002091CB /* HistoryDetailsViewController.xib in Resources */, + D3F9A9DC15AEEB940045320F /* history_notification.png in Resources */, + D3E84F1F15B00F4100420DAC /* cancel_default.png in Resources */, + D3E84F2115B00F4100420DAC /* cancel_over.png in Resources */, + D3E84F2715B00F4100420DAC /* dialer_alt_back_default.png in Resources */, + D3E84F2915B00F4100420DAC /* dialer_alt_back_over.png in Resources */, + D3E84F2B15B00F4100420DAC /* dialer_alt_background.png in Resources */, + D3E84F3915B011AF00420DAC /* contact_cancel_default.png in Resources */, + D3E84F3B15B011AF00420DAC /* contact_cancel_over.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3073,6 +3151,9 @@ D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */, D3E8F68615ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */, C90FAA7915AF54E6002091CB /* HistoryDetailsViewController.m in Sources */, + D3F9A9E215AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */, + D3F9A9E415AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */, + D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3160,6 +3241,9 @@ D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */, D3E8F68715ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */, C90FAA7A15AF54E6002091CB /* HistoryDetailsViewController.m in Sources */, + D3F9A9E315AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */, + D3F9A9E515AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */, + D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };