diff --git a/Classes/ContactDetailsTableViewController.m b/Classes/ContactDetailsTableViewController.m
index 4bf5a1c3a..9d4d71a90 100644
--- a/Classes/ContactDetailsTableViewController.m
+++ b/Classes/ContactDetailsTableViewController.m
@@ -55,15 +55,15 @@
@implementation ContactDetailsTableViewController
-enum _ContactSections {
+typedef enum _ContactSections {
ContactSections_None = 0,
ContactSections_Number,
ContactSections_Sip,
ContactSections_Email,
ContactSections_MAX
-};
+} ContactSections_e;
-static const int contactSections[ContactSections_MAX] = {ContactSections_None, ContactSections_Number, ContactSections_Sip, ContactSections_Email};
+static const ContactSections_e contactSections[ContactSections_MAX] = {ContactSections_None, ContactSections_Number, ContactSections_Sip, ContactSections_Email};
@synthesize footerController;
@synthesize headerController;
@@ -515,6 +515,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
[cell.detailTextField setDelegate:self];
[cell.detailTextField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
[cell.detailTextField setAutocorrectionType:UITextAutocorrectionTypeNo];
+ [cell setBackgroundColor:[UIColor whiteColor]];
// Background View
UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease];
@@ -708,7 +709,6 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
#pragma mark - UITableViewDelegate Functions
-
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
bool_t showEmails = [[LinphoneManager instance] lpConfigBoolForKey:@"show_contacts_emails_preference"];
// Resign keyboard
@@ -723,18 +723,25 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
[self.tableView beginUpdates];
}
if(editing) {
+ // add phony entries so that the user can add new data
for (int section = 0; section < [self numberOfSectionsInTableView:[self tableView]]; ++section) {
if(contactSections[section] == ContactSections_Number ||
contactSections[section] == ContactSections_Sip ||
- (showEmails && contactSections[section] == ContactSections_Email))
- [self addEntry:self.tableView section:section animated:animated];
+ (showEmails && contactSections[section] == ContactSections_Email)) {
+ [self addEntry:self.tableView section:section animated:animated];
+ }
}
} else {
for (int section = 0; section < [self numberOfSectionsInTableView:[self tableView]]; ++section) {
+ // remove phony entries that were not filled by the user
if(contactSections[section] == ContactSections_Number ||
- contactSections[section] == ContactSections_Sip ||
- (showEmails && contactSections[section] == ContactSections_Email))
- [self removeEmptyEntry:self.tableView section:section animated:animated];
+ contactSections[section] == ContactSections_Sip ||
+ (showEmails && contactSections[section] == ContactSections_Email)) {
+ [self removeEmptyEntry:self.tableView section:section animated:animated];
+ if( [[self getSectionData:section] count] == 0 ) // the section is empty -> remove titles
+ [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section]
+ withRowAnimation:animated?UITableViewRowAnimationFade:UITableViewRowAnimationNone];
+ }
}
}
if(animated) {
@@ -773,6 +780,8 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
}
- (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
+ if( [[self getSectionData:section] count] == 0) return nil;
+
if(contactSections[section] == ContactSections_Number) {
return NSLocalizedString(@"Phone numbers", nil);
} else if(contactSections[section] == ContactSections_Sip) {
@@ -784,7 +793,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
}
- (NSString*)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
- return @"";
+ return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
@@ -819,7 +828,8 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
if(value != nil) {
NSMutableArray *sectionDict = [self getSectionData:[editingIndexPath section]];
Entry *entry = [sectionDict objectAtIndex:[editingIndexPath row]];
- if(contactSections[[editingIndexPath section]] == ContactSections_Number) {
+ ContactSections_e thesection = contactSections[[editingIndexPath section]];
+ if(thesection == ContactSections_Number) {
ABMultiValueRef lcMap = ABRecordCopyValue(contact, kABPersonPhoneProperty);
ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap);
CFRelease(lcMap);
@@ -827,7 +837,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)(value), index);
ABRecordSetValue(contact, kABPersonPhoneProperty, lMap, nil);
CFRelease(lMap);
- } else if(contactSections[[editingIndexPath section]] == ContactSections_Sip) {
+ } else if(thesection == ContactSections_Sip) {
ABMultiValueRef lcMap = ABRecordCopyValue(contact, kABPersonInstantMessageProperty);
ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap);
CFRelease(lcMap);
@@ -835,7 +845,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
ABMultiValueReplaceLabelAtIndex(lMap, (CFStringRef)(value), index);
ABRecordSetValue(contact, kABPersonInstantMessageProperty, lMap, nil);
CFRelease(lMap);
- } else if(contactSections[[editingIndexPath section]] == ContactSections_Email) {
+ } else if(thesection == ContactSections_Email) {
ABMultiValueRef lcMap = ABRecordCopyValue(contact, kABPersonEmailProperty);
ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap);
CFRelease(lcMap);
@@ -846,6 +856,7 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
}
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject: editingIndexPath] withRowAnimation:FALSE];
+ [self.tableView reloadSectionIndexTitles];
[self.tableView endUpdates];
}
[editingIndexPath release];
@@ -876,8 +887,10 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
NSIndexPath *path = [self.tableView indexPathForCell:cell];
NSMutableArray *sectionDict = [self getSectionData:[path section]];
Entry *entry = [sectionDict objectAtIndex:[path row]];
+ ContactSections_e sect = contactSections[[path section]];
+
NSString *value = [textField text];
- if(contactSections[[path section]] == ContactSections_Number) {
+ if(sect == ContactSections_Number) {
ABMultiValueRef lcMap = ABRecordCopyValue(contact, kABPersonPhoneProperty);
ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap);
CFRelease(lcMap);
@@ -885,9 +898,9 @@ static const int contactSections[ContactSections_MAX] = {ContactSections_None, C
ABMultiValueReplaceValueAtIndex(lMap, (CFStringRef)value, index);
ABRecordSetValue(contact, kABPersonPhoneProperty, lMap, nil);
CFRelease(lMap);
- } else if(contactSections[[path section]] == ContactSections_Sip) {
+ } else if(sect == ContactSections_Sip) {
[self setSipContactEntry:entry withValue:value];
- } else if(contactSections[[path section]] == ContactSections_Email) {
+ } else if(sect == ContactSections_Email) {
ABMultiValueRef lcMap = ABRecordCopyValue(contact, kABPersonEmailProperty);
ABMutableMultiValueRef lMap = ABMultiValueCreateMutableCopy(lcMap);
CFRelease(lcMap);
diff --git a/Classes/LinphoneUI/UIContactDetailsHeader.m b/Classes/LinphoneUI/UIContactDetailsHeader.m
index 87fd448bb..6c78c743b 100644
--- a/Classes/LinphoneUI/UIContactDetailsHeader.m
+++ b/Classes/LinphoneUI/UIContactDetailsHeader.m
@@ -140,7 +140,7 @@
+ (CGFloat)height:(BOOL)editing {
if(editing) {
- return 160.0f;
+ return 170.0f;
} else {
return 80.0f;
}
@@ -206,15 +206,22 @@
[cell.detailTextField setAutocapitalizationType:UITextAutocapitalizationTypeWords];
[cell.detailTextField setAutocorrectionType:UITextAutocorrectionTypeNo];
[cell.detailTextField setKeyboardType:UIKeyboardTypeDefault];
+ [cell setBackgroundColor:[UIColor whiteColor]];
}
-
+
+ // setup placeholder
ABPropertyID property = [[propertyList objectAtIndex:[indexPath row]] intValue];
if(property == kABPersonFirstNameProperty) {
[cell.detailTextField setPlaceholder:NSLocalizedString(@"First name", nil)];
} else if (property == kABPersonLastNameProperty) {
[cell.detailTextField setPlaceholder:NSLocalizedString(@"Last name", nil)];
+ } else if (property == kABPersonOrganizationProperty) {
+ [cell.detailTextField setPlaceholder:NSLocalizedString(@"Company name", nil)];
}
+
[cell.detailTextField setKeyboardType:UIKeyboardTypeDefault];
+
+ // setup values, if they exist
if(contact) {
CFStringRef lValue = ABRecordCopyValue(contact, property);
if(lValue != NULL) {
diff --git a/Classes/LinphoneUI/UIEditableTableViewCell.m b/Classes/LinphoneUI/UIEditableTableViewCell.m
index eabd28611..b8d8d64b9 100644
--- a/Classes/LinphoneUI/UIEditableTableViewCell.m
+++ b/Classes/LinphoneUI/UIEditableTableViewCell.m
@@ -54,20 +54,16 @@
- (void)layoutSubviews {
[super layoutSubviews];
-
+
CGRect fieldframe;
fieldframe.origin.x = 15;
fieldframe.origin.y = 0;
fieldframe.size.height = 44;
if([[self.textLabel text] length] != 0)
- fieldframe.origin.x += [self.textLabel frame].size.width;
- CGRect superframe = [[self.detailTextField superview]frame];
+ fieldframe.origin.x += [self.textLabel frame].size.width + 5;
+ CGRect superframe = [[self.detailTextField superview] frame];
fieldframe.size.width = superframe.size.width - fieldframe.origin.x;
[self.detailTextField setFrame:fieldframe];
-
- CGRect labelFrame = [self.detailTextLabel frame];
- labelFrame.origin.x = fieldframe.origin.x;
- [self.detailTextLabel setFrame:labelFrame];
}
diff --git a/Classes/LinphoneUI/en.lproj/UIContactDetailsHeader.xib b/Classes/LinphoneUI/en.lproj/UIContactDetailsHeader.xib
index 729262f8a..ce91e660c 100644
--- a/Classes/LinphoneUI/en.lproj/UIContactDetailsHeader.xib
+++ b/Classes/LinphoneUI/en.lproj/UIContactDetailsHeader.xib
@@ -194,7 +194,7 @@
IBCocoaTouchFramework
- {320, 160}
+ {320, 170}