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
-
+
+ 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 62508669a..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]];
@@ -87,6 +93,7 @@
[self dismiss:key];
}
+
#pragma mark - Action Functions
- (IBAction)onBackClick:(id)event {
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.h b/Classes/ContactDetailsTableViewController.h
index 0a4ca9519..7ec5903b4 100644
--- a/Classes/ContactDetailsTableViewController.h
+++ b/Classes/ContactDetailsTableViewController.h
@@ -42,8 +42,8 @@
@property (nonatomic, assign) ABRecordID contactID;
- (void)newContact;
-- (void)newContact:(NSString*)address;
- (void)removeContact;
+- (void)addSipField:(NSString*)address;
- (void)loadData;
- (void)saveData;
diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m
index 8f65d82f9..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) {
@@ -277,6 +285,10 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
}
- (void)addEntry:(UITableView*)tableview section:(NSInteger)section animated:(BOOL)animated {
+ [self addEntry:tableview section:section animated:animated value:@""];
+}
+
+- (void)addEntry:(UITableView*)tableview section:(NSInteger)section animated:(BOOL)animated value:(NSString *)value{
NSMutableArray *sectionArray = [dataCache objectAtIndex:section];
NSUInteger count = [sectionArray count];
if(section == 0) {
@@ -307,7 +319,7 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
lMap = ABMultiValueCreateMutable(kABDictionaryPropertyType);
}
CFStringRef keys[] = { kABPersonInstantMessageUsernameKey, kABPersonInstantMessageServiceKey};
- CFTypeRef values[] = { @"", CONTACT_SIP_FIELD };
+ CFTypeRef values[] = { [value copy], CONTACT_SIP_FIELD };
CFDictionaryRef lDict = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values, 2, NULL, NULL);
ABMultiValueAddValueAndLabel(lMap, lDict, (CFStringRef)[labelArray objectAtIndex:0], &identifier);
CFRelease(lDict);
@@ -395,20 +407,8 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
[self loadData];
}
-- (void)newContact:(NSString*)address {
- contact = ABPersonCreate();
- ABMultiValueRef lMap = ABMultiValueCreateMutable(kABDictionaryPropertyType);
- CFStringRef keys[] = { kABPersonInstantMessageUsernameKey, kABPersonInstantMessageServiceKey};
- CFTypeRef values[] = { [address copy], CONTACT_SIP_FIELD };
- CFDictionaryRef lDict = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values, 2, NULL, NULL);
- ABMultiValueAddValueAndLabel(lMap, lDict, (CFStringRef)[labelArray objectAtIndex:0], NULL);
- CFRelease(lDict);
-
- ABRecordSetValue(contact, kABPersonInstantMessageProperty, lMap, nil);
- CFRelease(lMap);
-
- self->contactID = kABRecordInvalidID;
- [self loadData];
+- (void)addSipField:(NSString*)address {
+ [self addEntry:[self tableView] section:1 animated:FALSE value:address];
}
@@ -427,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]];
@@ -457,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 0628ffe9e..5f4a8e454 100644
--- a/Classes/ContactDetailsViewController.h
+++ b/Classes/ContactDetailsViewController.h
@@ -28,16 +28,23 @@
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;
- (void)newContact:(NSString*)address;
+- (void)editContact:(ABRecordRef)contact;
+- (void)editContact:(ABRecordRef)contact address:(NSString*)address;
@end
diff --git a/Classes/ContactDetailsViewController.m b/Classes/ContactDetailsViewController.m
index 289d3ea67..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,24 +52,36 @@
- (void)newContact {
[tableController newContact];
- [tableController setEditing:TRUE animated:FALSE];
+ [self enableEdit:FALSE];
[[tableController tableView] reloadData];
- [editButton setOn];
}
- (void)newContact:(NSString*)address {
- [tableController newContact:address];
- [tableController setEditing:TRUE animated:FALSE];
+ [tableController newContact];
+ [tableController addSipField:address];
+ [self enableEdit:FALSE];
[[tableController tableView] reloadData];
- [editButton setOn];
}
+- (void)editContact:(ABRecordRef)acontact {
+ [self setContact:acontact];
+ [self enableEdit:FALSE];
+ [[tableController tableView] reloadData];
+}
+
+- (void)editContact:(ABRecordRef)acontact address:(NSString*)address {
+ [self setContact:acontact];
+ [tableController addSipField:address];
+ [self enableEdit:FALSE];
+ [[tableController tableView] reloadData];
+}
#pragma mark - Property Functions
- (void)setContact:(ABRecordRef)acontact {
self->contact = acontact;
[tableController setContactID:ABRecordGetRecordID(acontact)];
+ [self disableEdit:FALSE];
}
@@ -79,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 {
@@ -89,15 +107,37 @@
forControlEvents:UIControlEventTouchUpInside];
}
-- (void)viewWillAppear:(BOOL)animated {
- if([tableController isEditing]) {
- [tableController resetData];
- [tableController setEditing:FALSE animated:FALSE];
+- (void)viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewWillDisappear:NO];
}
- [super viewWillAppear:animated];
- [editButton setOff];
+ [self disableEdit:FALSE];
+ [tableController resetData];
}
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewWillAppear:NO];
+ }
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewDidAppear:NO];
+ }
+}
+
+- (void)viewDidDisappear:(BOOL)animated {
+ [super viewDidDisappear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewDidDisappear:NO];
+ }
+}
+
+
#pragma mark - UICompositeViewDelegate Functions
+ (UICompositeViewDescription*) compositeViewDescription {
@@ -112,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.h b/Classes/ContactsTableViewController.h
index 7ae506cb8..5ab544424 100644
--- a/Classes/ContactsTableViewController.h
+++ b/Classes/ContactsTableViewController.h
@@ -27,8 +27,10 @@
ABAddressBookRef addressBook;
BOOL sipFilter;
+ NSString *tempAddress;
}
+@property (nonatomic, retain) NSString* tempAddress;
@property (nonatomic, assign) BOOL sipFilter;
@end
diff --git a/Classes/ContactsTableViewController.m b/Classes/ContactsTableViewController.m
index a1b564d9f..a40e80853 100644
--- a/Classes/ContactsTableViewController.m
+++ b/Classes/ContactsTableViewController.m
@@ -21,10 +21,13 @@
#import "UIContactCell.h"
#import "LinphoneManager.h"
#import "PhoneMainView.h"
+#import "UACellBackgroundView.h"
+#import "UILinphone.h"
@implementation ContactsTableViewController
@synthesize sipFilter;
+@synthesize tempAddress;
#pragma mark - Lifecycle Functions
@@ -56,6 +59,7 @@
ABAddressBookUnregisterExternalChangeCallback(addressBook, sync_address_book, self);
CFRelease(addressBook);
[addressBookMap removeAllObjects];
+ [tempAddress release];
[super dealloc];
}
@@ -70,27 +74,6 @@
#pragma mark -
-static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
- ContactsTableViewController* controller = (ContactsTableViewController*)context;
- ABAddressBookRevert(addressBook);
- [(UITableView *)controller.view reloadData];
-}
-
-
-#pragma mark - ViewController Functions
-
-- (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- [self reloadData];
-}
-
-- (void)viewWillDisappear:(BOOL)animated {
- [super viewWillDisappear:animated];
-}
-
-
-#pragma mark - UITableViewDataSource Functions
-
- (void)reloadData {
NSLog(@"Load contact list");
@synchronized (addressBookMap) {
@@ -157,73 +140,73 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf
[self.tableView reloadData];
}
+static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
+ ContactsTableViewController* controller = (ContactsTableViewController*)context;
+ ABAddressBookRevert(addressBook);
+ [controller reloadData];
+}
+
+
+#pragma mark - ViewController Functions
+
+- (void)viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+ [self setTempAddress:nil];
+}
+
+
+#pragma mark - UITableViewDataSource Functions
+
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
- return [addressBookMap count] + 1;
+ return [addressBookMap count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- if(section == 0) {
- return 1;
- } else {
- return [(OrderedDictionary *)[addressBookMap objectForKey: [addressBookMap keyAtIndex: section - 1]] count];
- }
+ return [(OrderedDictionary *)[addressBookMap objectForKey: [addressBookMap keyAtIndex: section]] count];
+
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *kCellId = @"UIContactCell";
- static NSString *kNewContactCellId = @"NewContactCell";
-
- if([indexPath section] != 0) {
- UIContactCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
- if (cell == nil) {
- cell = [[[UIContactCell alloc] initWithIdentifier:kCellId] autorelease];
- }
- OrderedDictionary *subDic = [addressBookMap objectForKey: [addressBookMap keyAtIndex: [indexPath section] - 1]];
-
- NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
- ABRecordRef contact = [subDic objectForKey:key];
- [cell setContact: contact];
- return cell;
- } else {
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kNewContactCellId];
- if (cell == nil) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kNewContactCellId] autorelease];
- //TODO
- /*
- [cell setSelectedBackgroundView:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"list_highlight.png"]]autorelease]];*/
- }
- [cell.textLabel setText:@"Add new contact"];
- return cell;
+ static NSString *kCellId = @"UIContactCell";
+ 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]]];
+
+ NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
+ ABRecordRef contact = [subDic objectForKey:key];
+ [cell setContact: contact];
+ return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
- if (section == 0) {
- return @"";
- } else {
- return [addressBookMap keyAtIndex: section - 1];
- }
+ return [addressBookMap keyAtIndex: section];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- if([indexPath section] == 0) {
- // Go to Contact details view
- NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
- [[[NSArray alloc] initWithObjects: nil] autorelease]
- , @"newContact",
- nil] autorelease];
- [[PhoneMainView instance] changeView:PhoneView_ContactDetails dict:dict push:TRUE];
+ OrderedDictionary *subDic = [addressBookMap objectForKey: [addressBookMap keyAtIndex: [indexPath section]]];
+ ABRecordRef lPerson = [subDic objectForKey: [subDic keyAtIndex:[indexPath row]]];
+
+ // Go to Contact details view
+ NSDictionary * dict;
+ if(tempAddress == nil) {
+ dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
+ [[[NSArray alloc] initWithObjects: lPerson, nil] autorelease]
+ , @"setContact:",
+ nil] autorelease];
} else {
- OrderedDictionary *subDic = [addressBookMap objectForKey: [addressBookMap keyAtIndex: [indexPath section] - 1]];
- ABRecordRef lPerson = [subDic objectForKey: [subDic keyAtIndex:[indexPath row]]];
-
- // Go to Contact details view
- NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
- [[[NSArray alloc] initWithObjects: lPerson, nil] autorelease]
- , @"setContact:",
- nil] autorelease];
- [[PhoneMainView instance] changeView:PhoneView_ContactDetails dict:dict push:TRUE];
+ dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
+ [[[NSArray alloc] initWithObjects: lPerson, tempAddress, nil] autorelease]
+ , @"editContact:address:",
+ nil] autorelease];
+ [self setTempAddress:nil];
}
+ [[PhoneMainView instance] changeView:PhoneView_ContactDetails dict:dict push:TRUE];
}
@end
diff --git a/Classes/ContactsViewController.h b/Classes/ContactsViewController.h
index f713dd8b7..3c7a81d01 100644
--- a/Classes/ContactsViewController.h
+++ b/Classes/ContactsViewController.h
@@ -36,7 +36,10 @@
@property (nonatomic, retain) IBOutlet UIButton* allButton;
@property (nonatomic, retain) IBOutlet UIButton* linphoneButton;
-- (IBAction)onAllClick:(id) event;
-- (IBAction)onLinphoneClick:(id) event;
+- (IBAction)onAllClick:(id)event;
+- (IBAction)onLinphoneClick:(id)event;
+- (IBAction)onAddContactClick:(id)event;
+
+- (void)setAddress:(NSString*)address;
@end
diff --git a/Classes/ContactsViewController.m b/Classes/ContactsViewController.m
index add579a53..17f8b6efb 100644
--- a/Classes/ContactsViewController.m
+++ b/Classes/ContactsViewController.m
@@ -18,6 +18,7 @@
*/
#import "ContactsViewController.h"
+#import "PhoneMainView.h"
#import "AddressBook/ABPerson.h"
@@ -69,9 +70,34 @@ typedef enum _HistoryView {
#pragma mark - ViewController Functions
+- (void)viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewWillDisappear:NO];
+ }
+}
+
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
- [self changeView:History_All];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewWillAppear:NO];
+ }
+
+ [self changeView:History_All];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewDidAppear:NO];
+ }
+}
+
+- (void)viewDidDisappear:(BOOL)animated {
+ [super viewDidDisappear:animated];
+ if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
+ [tableController viewDidDisappear:NO];
+ }
}
- (void)viewDidLoad {
@@ -90,6 +116,10 @@ typedef enum _HistoryView {
#pragma mark -
+- (void)setAddress:(NSString*)address {
+ [tableController setTempAddress:address];
+}
+
- (void)changeView: (HistoryView) view {
if(view == History_All) {
@@ -110,12 +140,30 @@ typedef enum _HistoryView {
#pragma mark - Action Functions
-- (IBAction)onAllClick: (id) event {
+- (IBAction)onAllClick:(id)event {
[self changeView: History_All];
}
-- (IBAction)onLinphoneClick: (id) event {
+- (IBAction)onLinphoneClick:(id)event {
[self changeView: History_Linphone];
}
+- (IBAction)onAddContactClick:(id)event {
+ // Go to Contact details view
+ NSDictionary * dict;
+ if([tableController tempAddress] == nil) {
+ dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
+ [[[NSArray alloc] initWithObjects: nil] autorelease]
+ , @"newContact",
+ nil] autorelease];
+ } else {
+ dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
+ [[[NSArray alloc] initWithObjects: [tableController tempAddress], nil] autorelease]
+ , @"newContact:",
+ nil] autorelease];
+ [tableController setTempAddress:nil];
+ }
+ [[PhoneMainView instance] changeView:PhoneView_ContactDetails dict:dict push:TRUE];
+}
+
@end
diff --git a/Classes/ContactsViewController.xib b/Classes/ContactsViewController.xib
index abc6f1e2e..cd8f7e34e 100644
--- a/Classes/ContactsViewController.xib
+++ b/Classes/ContactsViewController.xib
@@ -2,10 +2,10 @@
1296
- 11E53
+ 11D50
2182
- 1138.47
- 569.00
+ 1138.32
+ 568.00
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
1181
@@ -46,6 +46,7 @@
292
{106, 58}
+
_NS:9
NO
@@ -84,6 +85,7 @@
292
{{106, 0}, {106, 58}}
+
_NS:9
NO
@@ -112,6 +114,7 @@
292
{{212, 0}, {108, 58}}
+
_NS:9
NO
@@ -137,6 +140,7 @@
{320, 58}
+
_NS:9
@@ -153,6 +157,8 @@
274
{{0, 58}, {320, 402}}
+
+
_NS:10
1
@@ -179,6 +185,7 @@
{320, 460}
+
_NS:9
@@ -259,6 +266,15 @@
47
+
+
+ onAddContactClick:
+
+
+ 7
+
+ 86
+
dataSource
@@ -321,7 +337,7 @@
- header
+ toolBar
4
@@ -377,9 +393,71 @@
- 84
+ 86
+
+
+
+
+ ContactsTableViewController
+ UITableViewController
+
+ IBProjectSource
+ ./Classes/ContactsTableViewController.h
+
+
+
+ ContactsViewController
+ UIViewController
+
+ id
+ id
+ id
+
+
+
+ onAddContactClick:
+ id
+
+
+ onAllClick:
+ id
+
+
+ onLinphoneClick:
+ id
+
+
+
+ UIButton
+ UIButton
+ ContactsTableViewController
+ UITableView
+
+
+
+ allButton
+ UIButton
+
+
+ linphoneButton
+ UIButton
+
+
+ tableController
+ ContactsTableViewController
+
+
+ tableView
+ UITableView
+
+
+
+ IBProjectSource
+ ./Classes/ContactsViewController.h
+
+
+
-
0
IBCocoaTouchFramework
diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m
index 1fc186f4e..dd5370a0a 100644
--- a/Classes/DialerViewController.m
+++ b/Classes/DialerViewController.m
@@ -217,9 +217,9 @@
// Go to Contact details view
NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
[[[NSArray alloc] initWithObjects:[addressField text], nil] autorelease]
- , @"newContact:",
+ , @"setAddress:",
nil] autorelease];
- [[PhoneMainView instance] changeView:PhoneView_ContactDetails dict:dict push:TRUE];
+ [[PhoneMainView instance] changeView:PhoneView_Contacts dict:dict push:TRUE];
}
- (IBAction)onBackClick: (id) event {
diff --git a/Classes/HistoryDetailsViewController.h b/Classes/HistoryDetailsViewController.h
new file mode 100644
index 000000000..e31835684
--- /dev/null
+++ b/Classes/HistoryDetailsViewController.h
@@ -0,0 +1,53 @@
+/* HistoryDetailsViewController.h
+ *
+ * Copyright (C) 2012 Belledonne Comunications, Grenoble, France
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import
+#import "linphonecore.h"
+
+#import
+
+@interface HistoryDetailsViewController : UIViewController {
+ LinphoneCallLog *callLog;
+ UIImageView *avatarImage;
+ UILabel *addressLabel;
+ UILabel *dateLabel;
+ UILabel *dateHeaderLabel;
+ UILabel *durationLabel;
+ UILabel *durationHeaderLabel;
+ UILabel *typeLabel;
+ UILabel *typeHeaderLabel;
+ UIButton *addressButton;
+}
+@property (nonatomic, retain) IBOutlet UIImageView *avatarImage;
+@property (nonatomic, retain) IBOutlet UILabel *addressLabel;
+@property (nonatomic, retain) IBOutlet UILabel *dateLabel;
+@property (nonatomic, retain) IBOutlet UILabel *dateHeaderLabel;
+@property (nonatomic, retain) IBOutlet UILabel *durationLabel;
+@property (nonatomic, retain) IBOutlet UILabel *durationHeaderLabel;
+@property (nonatomic, retain) IBOutlet UILabel *typeLabel;
+@property (nonatomic, retain) IBOutlet UILabel *typeHeaderLabel;
+@property (nonatomic, retain) IBOutlet UIButton *addressButton;
+
+@property (nonatomic, assign) LinphoneCallLog *callLog;
+
+- (IBAction)onBackClick:(id)event;
+- (IBAction)onContactClick:(id)event;
+- (IBAction)onAddressClick:(id)event;
+
+@end
diff --git a/Classes/HistoryDetailsViewController.m b/Classes/HistoryDetailsViewController.m
new file mode 100644
index 000000000..ccbabf51a
--- /dev/null
+++ b/Classes/HistoryDetailsViewController.m
@@ -0,0 +1,90 @@
+/* HistoryDetailsViewController.m
+ *
+ * Copyright (C) 2012 Belledonne Comunications, Grenoble, France
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#import "HistoryDetailsViewController.h"
+#import "PhoneMainView.h"
+#import "FastAddressBook.h"
+
+@implementation HistoryDetailsViewController
+
+@synthesize callLog;
+@synthesize avatarImage;
+@synthesize addressLabel;
+@synthesize dateLabel;
+@synthesize dateHeaderLabel;
+@synthesize durationLabel;
+@synthesize durationHeaderLabel;
+@synthesize typeLabel;
+@synthesize typeHeaderLabel;
+@synthesize addressButton;
+
+
+#pragma mark - LifeCycle Functions
+
+- (void)dealloc {
+ [avatarImage release];
+ [addressLabel release];
+ [dateLabel release];
+ [dateHeaderLabel release];
+ [durationLabel release];
+ [durationHeaderLabel release];
+ [typeLabel release];
+ [typeHeaderLabel release];
+ [addressButton release];
+
+ [super dealloc];
+}
+
+
+#pragma mark - Property Functions
+
+- (void)setCallLog:(LinphoneCallLog *)acallLog {
+ self->callLog = acallLog;
+ [self update];
+}
+
+
+#pragma mark -
+
+- (void)update {
+ // Set up the cell...
+ LinphoneAddress* partyToDisplay;
+ if (callLog->dir == LinphoneCallIncoming) {
+ partyToDisplay = callLog->from;
+ } else {
+ partyToDisplay = callLog->to;
+ }
+}
+
+
+#pragma mark - Action Functions
+
+- (IBAction)onBackClick:(id)event {
+ [[PhoneMainView instance] popView];
+}
+
+- (IBAction)onContactClick:(id)event {
+
+}
+
+- (IBAction)onAddressClick:(id)event {
+
+}
+
+@end
diff --git a/Classes/HistoryDetailsViewController.xib b/Classes/HistoryDetailsViewController.xib
new file mode 100644
index 000000000..206d6c9c4
--- /dev/null
+++ b/Classes/HistoryDetailsViewController.xib
@@ -0,0 +1,836 @@
+
+
+
+ 1296
+ 11D50
+ 2182
+ 1138.32
+ 568.00
+
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ 1181
+
+
+ IBUIButton
+ IBUIImageView
+ IBUIView
+ IBUILabel
+ IBProxyObject
+
+
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+
+ PluginDependencyRecalculationVersion
+
+
+
+
+ IBFilesOwner
+ IBCocoaTouchFramework
+
+
+ IBFirstResponder
+ IBCocoaTouchFramework
+
+
+
+ 274
+
+
+
+ 290
+
+
+
+ 292
+ {160, 58}
+
+
+
+ _NS:9
+ NO
+
+ Add contact
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+ 3
+ MC41AA
+
+
+ NSImage
+ contact_back_over.png
+
+
+ NSImage
+ contact_back_default.png
+
+
+ 2
+ 15
+
+
+ Helvetica-Bold
+ 15
+ 16
+
+
+
+
+ 292
+ {{160, 0}, {160, 58}}
+
+
+
+ _NS:9
+ NO
+ IBCocoaTouchFramework
+
+ NSImage
+ contact_bar_background.png
+
+
+
+ {320, 58}
+
+
+
+ _NS:9
+
+ 3
+ MQA
+
+ 2
+
+
+ IBCocoaTouchFramework
+
+
+
+ 292
+
+
+
+ 292
+ {320, 100}
+
+
+
+ _NS:9
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+ 3
+ MQA
+
+
+ 1
+ MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA
+
+
+
+
+
+
+
+ 292
+ {{-13, -5}, {131, 107}}
+
+
+
+ _NS:9
+ NO
+ IBCocoaTouchFramework
+
+ NSImage
+ avatar_shadow_small.png
+
+
+
+
+ 292
+ {{20, 6}, {65, 65}}
+
+
+
+ _NS:9
+ NO
+ IBCocoaTouchFramework
+
+ NSImage
+ avatar_unknown_small.png
+
+
+
+
+ 292
+ {{101, 37}, {199, 43}}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ Contact1
+
+ 3
+ MC4zMzMzMzMzMzMzAA
+
+
+ 0
+ 10
+
+ 1
+ 22
+
+
+ Helvetica
+ 22
+ 16
+
+
+
+ {{0, 58}, {320, 100}}
+
+
+
+ _NS:9
+
+ 3
+ MCAwAA
+
+ IBCocoaTouchFramework
+
+
+
+ 292
+
+
+
+ 292
+ {49, 21}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ Date:
+
+ 0
+ 10
+
+ 2
+ 17
+
+
+ Helvetica-Bold
+ 17
+ 16
+
+
+
+
+ 292
+ {{57, 0}, {223, 21}}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ 11/11/2011 at 10:01
+
+ 0
+ 10
+
+ 1
+ 17
+
+
+ Helvetica
+ 17
+ 16
+
+
+
+ {{20, 166}, {280, 21}}
+
+
+
+ _NS:9
+
+ IBCocoaTouchFramework
+
+
+
+ 292
+
+
+
+ 292
+ {80, 21}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ Duration:
+
+ 0
+ 10
+
+
+
+
+
+ 292
+ {{88, 0}, {192, 21}}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ 9:05
+
+ 0
+ 10
+
+
+
+
+ {{20, 195}, {280, 21}}
+
+
+
+ _NS:9
+
+ IBCocoaTouchFramework
+
+
+
+ 292
+
+
+
+ 292
+ {57, 21}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ Type:
+
+ 0
+ 10
+
+
+
+
+
+ 292
+ {{65, 0}, {215, 21}}
+
+
+
+ _NS:9
+ NO
+ YES
+ 7
+ NO
+ IBCocoaTouchFramework
+ outgoing call
+
+ 0
+ 10
+
+
+
+
+ {{20, 224}, {280, 21}}
+
+
+
+ _NS:9
+
+ IBCocoaTouchFramework
+
+
+
+ 292
+ {{33, 273}, {255, 50}}
+
+
+
+ _NS:9
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+ 0102030405
+
+
+
+ NSImage
+ button_background_over.png
+
+
+ NSImage
+ button_background_default.png
+
+
+ 2
+ 20
+
+
+ Helvetica-Bold
+ 20
+ 16
+
+
+
+ {{0, 20}, {320, 460}}
+
+
+
+
+
+ IBCocoaTouchFramework
+
+
+
+
+
+
+ view
+
+
+
+ 10
+
+
+
+ addressButton
+
+
+
+ 41
+
+
+
+ addressLabel
+
+
+
+ 42
+
+
+
+ avatarImage
+
+
+
+ 43
+
+
+
+ dateHeaderLabel
+
+
+
+ 44
+
+
+
+ dateLabel
+
+
+
+ 45
+
+
+
+ durationHeaderLabel
+
+
+
+ 46
+
+
+
+ durationLabel
+
+
+
+ 47
+
+
+
+ typeHeaderLabel
+
+
+
+ 48
+
+
+
+ typeLabel
+
+
+
+ 49
+
+
+
+ onBackClick:
+
+
+ 7
+
+ 11
+
+
+
+ onAddressClick:
+
+
+ 7
+
+ 39
+
+
+
+ onContactClick:
+
+
+ 7
+
+ 40
+
+
+
+
+
+ 0
+
+
+
+
+
+ -1
+
+
+ File's Owner
+
+
+ -2
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+ 6
+
+
+
+
+
+
+ navigationBar
+
+
+ 8
+
+
+ barBackground
+
+
+ 9
+
+
+ backButton
+
+
+ 29
+
+
+
+
+
+
+ dateView
+
+
+ 27
+
+
+ dateHeaderLabel
+
+
+ 28
+
+
+ dateLabel
+
+
+ 30
+
+
+
+
+
+
+ durationView
+
+
+ 31
+
+
+ durationHeaderLabel
+
+
+ 32
+
+
+ durationLabel
+
+
+ 33
+
+
+
+
+
+
+
+
+ headerView
+
+
+ 25
+
+
+ addressLabel
+
+
+ 23
+
+
+ avatarImage
+
+
+ 24
+
+
+ avatarShadowBackground
+
+
+ 34
+
+
+
+
+
+
+ typeView
+
+
+ 35
+
+
+ typeLabel
+
+
+ 36
+
+
+ typeHeaderLabel
+
+
+ 37
+
+
+ addressButton
+
+
+ 38
+
+
+ headerButton
+
+
+
+
+ HistoryDetailsViewController
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIResponder
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+
+
+
+
+
+ 49
+
+
+
+
+ HistoryDetailsViewController
+ UIViewController
+
+ id
+ id
+ id
+
+
+
+ onAddressClick:
+ id
+
+
+ onBackClick:
+ id
+
+
+ onContactClick:
+ id
+
+
+
+ UIButton
+ UILabel
+ UIImageView
+ UILabel
+ UILabel
+ UILabel
+ UILabel
+ UILabel
+ UILabel
+
+
+
+ addressButton
+ UIButton
+
+
+ addressLabel
+ UILabel
+
+
+ avatarImage
+ UIImageView
+
+
+ dateHeaderLabel
+ UILabel
+
+
+ dateLabel
+ UILabel
+
+
+ durationHeaderLabel
+ UILabel
+
+
+ durationLabel
+ UILabel
+
+
+ typeHeaderLabel
+ UILabel
+
+
+ typeLabel
+ UILabel
+
+
+
+ IBProjectSource
+ ./Classes/HistoryDetailsViewController.h
+
+
+
+
+ 0
+ IBCocoaTouchFramework
+
+ com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS
+
+
+ YES
+ 3
+
+ {262, 214}
+ {131, 131}
+ {550, 101}
+ {550, 101}
+ {320, 117}
+ {320, 117}
+ {5, 117}
+
+ 1181
+
+
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 7c1826803..5337f2045 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];
@@ -384,66 +383,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];
}
@@ -545,31 +484,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 fa91953b2..94a0b4597 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 8b6202734..c8b4c6a30 100644
--- a/Classes/LinphoneUI/UICallBar.xib
+++ b/Classes/LinphoneUI/UICallBar.xib
@@ -672,6 +672,10 @@
NSImage
dialer_alt_over.png
+
+ NSImage
+ dialer_alt_back_default.png
+
NSImage
dialer_alt_default.png
@@ -1131,6 +1135,9 @@
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
UIResponder
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIToggleButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
UIMicroButton
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -1145,8 +1152,9 @@
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIToggleButton
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
+
UIDigitButton
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -1238,6 +1246,7 @@
UIButton
+ UIButton
UIButton
UIButton
UIButton
@@ -1266,6 +1275,10 @@
conferenceButton
UIButton
+
+ dialerButton
+ UIButton
+
eightButton
UIButton
@@ -1468,6 +1481,7 @@
{640, 523}
{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/UIChatRoomHeader.h b/Classes/LinphoneUI/UIChatRoomHeader.h
index 63bb715ba..2af647bc9 100644
--- a/Classes/LinphoneUI/UIChatRoomHeader.h
+++ b/Classes/LinphoneUI/UIChatRoomHeader.h
@@ -21,7 +21,7 @@
#import "ChatModel.h"
@interface UIChatRoomHeader : UIViewController {
- UILabel *contactLabel;
+ UILabel *addressLabel;
UIImageView *avatarImage;
NSString *contact;
@@ -29,7 +29,7 @@
@property (nonatomic, copy) NSString *contact;
-@property (nonatomic, retain) IBOutlet UILabel *contactLabel;
+@property (nonatomic, retain) IBOutlet UILabel *addressLabel;
@property (nonatomic, retain) IBOutlet UIImageView *avatarImage;
+ (CGFloat)height;
diff --git a/Classes/LinphoneUI/UIChatRoomHeader.m b/Classes/LinphoneUI/UIChatRoomHeader.m
index 26059a166..25c4de26e 100644
--- a/Classes/LinphoneUI/UIChatRoomHeader.m
+++ b/Classes/LinphoneUI/UIChatRoomHeader.m
@@ -22,7 +22,7 @@
@implementation UIChatRoomHeader
@synthesize avatarImage;
-@synthesize contactLabel;
+@synthesize addressLabel;
@synthesize contact;
@@ -34,7 +34,7 @@
- (void)dealloc {
[avatarImage release];
- [contactLabel release];
+ [addressLabel release];
[contact release];
[super dealloc];
}
@@ -56,7 +56,7 @@
- (void)update {
if(contact != nil) {
[avatarImage setImage:[UIImage imageNamed:@"avatar_unknown_small.png"]];
- [contactLabel setText:contact];
+ [addressLabel setText:contact];
}
}
diff --git a/Classes/LinphoneUI/UIChatRoomHeader.xib b/Classes/LinphoneUI/UIChatRoomHeader.xib
index c8bdedf3d..7f6464409 100644
--- a/Classes/LinphoneUI/UIChatRoomHeader.xib
+++ b/Classes/LinphoneUI/UIChatRoomHeader.xib
@@ -2,10 +2,10 @@
1296
- 11E53
+ 11D50
2182
- 1138.47
- 569.00
+ 1138.32
+ 568.00
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
1181
@@ -69,9 +69,10 @@
292
- {{101, 27}, {199, 43}}
+ {{101, 37}, {199, 43}}
+
_NS:9
NO
YES
@@ -129,11 +130,11 @@
- contactLabel
+ addressLabel
- 11
+ 12
@@ -181,7 +182,7 @@
8
- contactLabel
+ addressLabel
@@ -199,7 +200,7 @@
- 11
+ 12
@@ -207,18 +208,18 @@
UIChatRoomHeader
UIViewController
+ UILabel
UIImageView
- UILabel
+
+ addressLabel
+ UILabel
+
avatarImage
UIImageView
-
- contactLabel
- UILabel
-
IBProjectSource
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/UIContactDetailsHeader.h b/Classes/LinphoneUI/UIContactDetailsHeader.h
index db7f45af8..86e5d69a5 100644
--- a/Classes/LinphoneUI/UIContactDetailsHeader.h
+++ b/Classes/LinphoneUI/UIContactDetailsHeader.h
@@ -21,7 +21,7 @@
#import
@interface UIContactDetailsHeader : UIViewController {
- UILabel *contactLabel;
+ UILabel *addressLabel;
UIImageView *avatarImage;
UIView *normalView;
UIView *editView;
@@ -34,7 +34,7 @@
@property (nonatomic, assign) ABRecordRef contact;
-@property (nonatomic, retain) IBOutlet UILabel *contactLabel;
+@property (nonatomic, retain) IBOutlet UILabel *addressLabel;
@property (nonatomic, retain) IBOutlet UIImageView *avatarImage;
@property (nonatomic, retain) IBOutlet UIView *normalView;
diff --git a/Classes/LinphoneUI/UIContactDetailsHeader.m b/Classes/LinphoneUI/UIContactDetailsHeader.m
index 17354bbb4..99009ef95 100644
--- a/Classes/LinphoneUI/UIContactDetailsHeader.m
+++ b/Classes/LinphoneUI/UIContactDetailsHeader.m
@@ -25,7 +25,7 @@
@implementation UIContactDetailsHeader
@synthesize avatarImage;
-@synthesize contactLabel;
+@synthesize addressLabel;
@synthesize contact;
@synthesize normalView;
@synthesize editView;
@@ -45,7 +45,7 @@
- (void)dealloc {
[avatarImage release];
- [contactLabel release];
+ [addressLabel release];
[normalView release];
[editView release];
[tableView release];
@@ -88,7 +88,7 @@
// Contact label
{
- [contactLabel setText:[FastAddressBook getContactDisplayName:contact]];
+ [addressLabel setText:[FastAddressBook getContactDisplayName:contact]];
}
}
}
diff --git a/Classes/LinphoneUI/UIContactDetailsHeader.xib b/Classes/LinphoneUI/UIContactDetailsHeader.xib
index 58ee2556c..bbe9f59c5 100644
--- a/Classes/LinphoneUI/UIContactDetailsHeader.xib
+++ b/Classes/LinphoneUI/UIContactDetailsHeader.xib
@@ -58,7 +58,7 @@
{{20, 6}, {65, 65}}
-
+
_NS:9
NO
IBCocoaTouchFramework
@@ -74,9 +74,10 @@
292
- {{14, 37}, {199, 43}}
+ {{0, 37}, {199, 43}}
+
_NS:9
NO
YES
@@ -102,7 +103,7 @@
- {{93, 0}, {227, 80}}
+ {{101, 0}, {219, 80}}
@@ -120,10 +121,9 @@
274
- {227, 130}
+ {219, 130}
-
_NS:9
10
@@ -193,7 +193,7 @@ AAgACAAIAAEAAQABAAE
10
- {{93, 0}, {227, 130}}
+ {{101, 0}, {219, 130}}
@@ -229,14 +229,6 @@ AAgACAAIAAEAAQABAAE
9
-
-
- contactLabel
-
-
-
- 11
-
editView
@@ -261,6 +253,14 @@ AAgACAAIAAEAAQABAAE
20
+
+
+ addressLabel
+
+
+
+ 21
+
dataSource
@@ -342,7 +342,7 @@ AAgACAAIAAEAAQABAAE
8
- contactLabel
+ addressLabel
15
@@ -368,7 +368,7 @@ AAgACAAIAAEAAQABAAE
- 20
+ 21
@@ -376,6 +376,7 @@ AAgACAAIAAEAAQABAAE
UIContactDetailsHeader
UIViewController
+ UILabel
UIImageView
UILabel
UIView
@@ -383,6 +384,10 @@ AAgACAAIAAEAAQABAAE
UITableView
+
+ addressLabel
+ UILabel
+
avatarImage
UIImageView
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 0ddd6a9cd..d0a9491e8 100644
--- a/Classes/LinphoneUI/UIMainBar.h
+++ b/Classes/LinphoneUI/UIMainBar.h
@@ -27,7 +27,9 @@
/* MODIFICATION Remove chat
UIButton *chatButton;
*/
- UIButton *moreButton;
+ UIButton *moreButton;
+ UIView *historyNotificationView;
+ UILabel *historyNotificationLabel;
}
@property (nonatomic, retain) IBOutlet UIButton* historyButton;
@@ -38,6 +40,9 @@
@property (nonatomic, retain) IBOutlet UIButton* chatButton;
*/
@property (nonatomic, retain) IBOutlet UIButton* moreButton;
+@property (nonatomic, retain) IBOutlet UIView *historyNotificationView;
+@property (nonatomic, retain) IBOutlet UILabel *historyNotificationLabel;
+
-(IBAction) onHistoryClick: (id) event;
-(IBAction) onContactsClick: (id) event;
-(IBAction) onDialerClick: (id) event;
@@ -46,4 +51,5 @@
-(IBAction) onChatClick: (id) event;
*/
-(IBAction) onMoreClick: (id) event;
+
@end
diff --git a/Classes/LinphoneUI/UIMainBar.m b/Classes/LinphoneUI/UIMainBar.m
index a7cdfdc49..bade7ed74 100644
--- a/Classes/LinphoneUI/UIMainBar.m
+++ b/Classes/LinphoneUI/UIMainBar.m
@@ -31,6 +31,8 @@
*/
@synthesize moreButton;
+@synthesize historyNotificationView;
+@synthesize historyNotificationLabel;
#pragma mark - Lifecycle Functions
@@ -46,6 +48,11 @@
[dialerButton release];
[settingsButton release];
[moreButton release];
+/*
+ [chatButton release];
+ */
+ [historyNotificationView release];
+ [historyNotificationLabel release];
[super dealloc];
}
@@ -60,7 +67,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 {
@@ -69,21 +85,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 0133c226e..2da434622 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
@@ -287,6 +354,22 @@
31
+
+
+ historyNotificationLabel
+
+
+
+ 35
+
+
+
+ historyNotificationView
+
+
+
+ 36
+
onMoreClick:
@@ -362,6 +445,7 @@
+
mainTabBar
@@ -403,6 +487,28 @@
more
+
+ 32
+
+
+
+
+
+
+ historyNotificationView
+
+
+ 33
+
+
+ historyNotificationImage
+
+
+ 34
+
+
+ historyNotificationLabel
+
@@ -412,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
@@ -428,7 +537,7 @@
- 31
+ 36
@@ -469,6 +578,8 @@
UIButton
UIButton
UIButton
+ UILabel
+ UIView
UIButton
@@ -488,6 +599,14 @@
moreButton
UIButton
+
+ historyNotificationLabel
+ UILabel
+
+
+ historyNotificationView
+ UIView
+
settingsButton
UIButton
@@ -516,6 +635,7 @@
{128, 154}
{128, 154}
{128, 154}
+ {43, 43}
{128, 154}
{128, 154}
{128, 154}
diff --git a/Classes/SettingsViewController.m b/Classes/SettingsViewController.m
index 8062de0a5..7480c0708 100644
--- a/Classes/SettingsViewController.m
+++ b/Classes/SettingsViewController.m
@@ -73,8 +73,6 @@
[self.view addSubview: navigationController.view];
}
-
-
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) {
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/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/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 5bddd1cad..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 1c14e324e..357348c7d 100755
--- a/linphone.xcodeproj/project.pbxproj
+++ b/linphone.xcodeproj/project.pbxproj
@@ -148,6 +148,10 @@
7066FC0C13E830E400EFC6DC /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7066FC0B13E830E400EFC6DC /* libvpx.a */; };
70E542F313E147E3002BA2C0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F213E147E3002BA2C0 /* OpenGLES.framework */; };
70E542F513E147EB002BA2C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70E542F413E147EB002BA2C0 /* QuartzCore.framework */; };
+ C90FAA7915AF54E6002091CB /* HistoryDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */; };
+ C90FAA7A15AF54E6002091CB /* HistoryDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */; };
+ C90FAA7B15AF54E6002091CB /* HistoryDetailsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C90FAA7815AF54E6002091CB /* HistoryDetailsViewController.xib */; };
+ C90FAA7C15AF54E6002091CB /* HistoryDetailsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C90FAA7815AF54E6002091CB /* HistoryDetailsViewController.xib */; };
C9C8254315AE204D00D493FA /* options_add_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = C9C8253F15AE204D00D493FA /* options_add_disabled.png */; };
C9C8254415AE204D00D493FA /* options_add_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = C9C8253F15AE204D00D493FA /* options_add_disabled.png */; };
C9C8254515AE204D00D493FA /* options_transfer_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = C9C8254015AE204D00D493FA /* options_transfer_disabled.png */; };
@@ -172,8 +176,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 */; };
@@ -524,6 +526,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 */; };
@@ -712,6 +728,14 @@
D3F9A9B415AEBC060045320F /* more_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F9A9AE15AEBC060045320F /* more_selected.png */; };
D3F9A9B615AEBD2D0045320F /* contact_edit_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F9A9B515AEBD2D0045320F /* contact_edit_background.png */; };
D3F9A9B715AEBD2D0045320F /* contact_edit_background.png in Resources */ = {isa = PBXBuildFile; fileRef = D3F9A9B515AEBD2D0045320F /* contact_edit_background.png */; };
+ 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 */
@@ -1035,6 +1059,9 @@
70E542F213E147E3002BA2C0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
70E542F413E147EB002BA2C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
8D1107310486CEB800E47090 /* linphone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "linphone-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; };
+ C90FAA7615AF54E6002091CB /* HistoryDetailsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryDetailsViewController.h; sourceTree = ""; };
+ C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryDetailsViewController.m; sourceTree = ""; };
+ C90FAA7815AF54E6002091CB /* HistoryDetailsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryDetailsViewController.xib; sourceTree = ""; };
C9C8253F15AE204D00D493FA /* options_add_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_add_disabled.png; path = Resources/options_add_disabled.png; sourceTree = ""; };
C9C8254015AE204D00D493FA /* options_transfer_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = options_transfer_disabled.png; path = Resources/options_transfer_disabled.png; sourceTree = ""; };
C9C8254115AE204D00D493FA /* transfer_call_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transfer_call_default.png; path = Resources/transfer_call_default.png; sourceTree = ""; };
@@ -1048,7 +1075,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 = ""; };
@@ -1289,6 +1315,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 = ""; };
@@ -1401,6 +1435,13 @@
D3F9A9AD15AEBC060045320F /* more_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = more_over.png; path = Resources/more_over.png; sourceTree = ""; };
D3F9A9AE15AEBC060045320F /* more_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = more_selected.png; path = Resources/more_selected.png; sourceTree = ""; };
D3F9A9B515AEBD2D0045320F /* contact_edit_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contact_edit_background.png; path = Resources/contact_edit_background.png; 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 */
@@ -1542,6 +1583,9 @@
2218A92212FBE1340088A667 /* FirstLoginViewController.h */,
2218A92312FBE1340088A667 /* FirstLoginViewController.m */,
2218A92412FBE1340088A667 /* FirstLoginViewController.xib */,
+ C90FAA7615AF54E6002091CB /* HistoryDetailsViewController.h */,
+ C90FAA7715AF54E6002091CB /* HistoryDetailsViewController.m */,
+ C90FAA7815AF54E6002091CB /* HistoryDetailsViewController.xib */,
D3ED3EA41587334B006C0DE4 /* HistoryTableViewController.h */,
D3ED3EA51587334C006C0DE4 /* HistoryTableViewController.m */,
D3ED3EB515873928006C0DE4 /* HistoryViewController.h */,
@@ -1843,6 +1887,7 @@
D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */,
D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */,
D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */,
+ D3E84F3C15B018A600420DAC /* UILinphone.h */,
D32409C1158B49A600C8C119 /* UILongTouchButton.h */,
D32409C2158B49A600C8C119 /* UILongTouchButton.m */,
D3ED3E841586291B006C0DE4 /* UIMainBar.h */,
@@ -2074,6 +2119,8 @@
D31C9C8F158A1C1000756B45 /* call_status_outgoing.png */,
D3F9A9A315AEBA460045320F /* castel_icon_57.png */,
D3F9A9A415AEBA460045320F /* castel_icon_72.png */,
+ D3E84F1715B00F4100420DAC /* cancel_default.png */,
+ D3E84F1815B00F4100420DAC /* cancel_over.png */,
D36C43CC158F2F370048BA40 /* cell_call.png */,
D3211BB8159C8A820098460B /* cell_call_first.png */,
D38D14AD15A30B3D008497E8 /* cell_call_first_highlight.png */,
@@ -2104,6 +2151,8 @@
D3128FE815AABE4E00A2147A /* contact_back_over.png */,
D378906915AC37C800BD776C /* contact_bar_background.png */,
D3F9A9B515AEBD2D0045320F /* contact_edit_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 */,
@@ -2123,6 +2172,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 */,
@@ -2140,6 +2192,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 */,
@@ -2155,7 +2208,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 */,
@@ -2260,13 +2312,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 = "";
@@ -2387,6 +2441,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 */
@@ -2662,7 +2736,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 */,
@@ -2724,6 +2797,15 @@
D3F9A9B115AEBC060045320F /* more_over.png in Resources */,
D3F9A9B315AEBC060045320F /* more_selected.png in Resources */,
D3F9A9B615AEBD2D0045320F /* contact_edit_background.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;
};
@@ -2901,7 +2983,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 */,
@@ -2963,6 +3044,15 @@
D3F9A9B215AEBC060045320F /* more_over.png in Resources */,
D3F9A9B415AEBC060045320F /* more_selected.png in Resources */,
D3F9A9B715AEBD2D0045320F /* contact_edit_background.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;
};
@@ -3045,6 +3135,10 @@
D378906515AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */,
D378907515AC448A00BD776C /* UIView+ModalStack.m in Sources */,
D3E8F68615ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */,
+ C90FAA7915AF54E6002091CB /* HistoryDetailsViewController.m in Sources */,
+ D3F9A9E215AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */,
+ D3F9A9E415AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */,
+ D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3124,6 +3218,10 @@
D378906615AC373B00BD776C /* ContactDetailsLabelViewController.m in Sources */,
D378907615AC448A00BD776C /* UIView+ModalStack.m in Sources */,
D3E8F68715ADE05B0065A226 /* UIContactDetailsFooter.m in Sources */,
+ C90FAA7A15AF54E6002091CB /* HistoryDetailsViewController.m in Sources */,
+ D3F9A9E315AF100D0045320F /* TPKeyboardAvoidingScrollView.m in Sources */,
+ D3F9A9E515AF100D0045320F /* TPKeyboardAvoidingTableView.m in Sources */,
+ D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};