You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2016/12/08 00:56:39 UTC

[09/11] cordova-plugin-contacts git commit: CB-11541 iOS: Add extra labels for phone, ims

CB-11541 iOS: Add extra labels for phone, ims

Refactor converting methods. Add posibility to use default labels: 'home fax', 'work fax'

Fix bug with contact's removal in tests


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/commit/539ad679
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/539ad679
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/539ad679

Branch: refs/heads/2.2.x
Commit: 539ad679caed235f87812767bb5cd7464031bac8
Parents: 76f695e
Author: Nikita Matrosov <ma...@gmail.com>
Authored: Thu Nov 3 15:33:51 2016 +0300
Committer: Nikita Matrosov <ma...@gmail.com>
Committed: Thu Nov 3 15:33:51 2016 +0300

----------------------------------------------------------------------
 src/ios/CDVContact.h |  13 ++++-
 src/ios/CDVContact.m | 138 +++++++++++++++++++---------------------------
 tests/tests.js       |  25 ++++++++-
 3 files changed, 90 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/539ad679/src/ios/CDVContact.h
----------------------------------------------------------------------
diff --git a/src/ios/CDVContact.h b/src/ios/CDVContact.h
index 47aa764..7aed45d 100644
--- a/src/ios/CDVContact.h
+++ b/src/ios/CDVContact.h
@@ -53,6 +53,8 @@ typedef NSUInteger CDVContactError;
 - (bool)setFromContactDict:(NSDictionary*)aContact asUpdate:(BOOL)bUpdate;
 
 + (BOOL)needsConversion:(NSString*)W3Label;
++ (NSDictionary *) getContactLabels;
++ (NSArray *) filterLabels: (NSString *) contactApiLabel;
 + (CFStringRef)convertContactTypeToPropertyLabel:(NSString*)label;
 + (NSString*)convertPropertyLabelToContactType:(NSString*)label;
 + (BOOL)isValidW3ContactType:(NSString*)label;
@@ -91,15 +93,24 @@ typedef NSUInteger CDVContactError;
 #define kW3ContactWorkLabel @"work"
 #define kW3ContactHomeLabel @"home"
 #define kW3ContactOtherLabel @"other"
-#define kW3ContactPhoneFaxLabel @"fax"
+#define kW3ContactPhoneWorkFaxLabel @"work fax"
+#define kW3ContactPhoneHomeFaxLabel @"home fax"
 #define kW3ContactPhoneMobileLabel @"mobile"
 #define kW3ContactPhonePagerLabel @"pager"
+#define kW3ContactPhoneIPhoneLabel @"iphone"
+#define kW3ContactPhoneMainLabel @"main"
 #define kW3ContactUrlBlog @"blog"
 #define kW3ContactUrlProfile @"profile"
 #define kW3ContactImAIMLabel @"aim"
 #define kW3ContactImICQLabel @"icq"
 #define kW3ContactImMSNLabel @"msn"
 #define kW3ContactImYahooLabel @"yahoo"
+#define kW3ContactImSkypeLabel @"skype"
+#define kW3ContactImFacebookMessengerLabel @"facebook"
+#define kW3ContactImGoogleTalkLabel @"gtalk"
+#define kW3ContactImJabberLabel @"jabber"
+#define kW3ContactImQQLabel @"qq"
+#define kW3ContactImGaduLabel @"gadu"  
 #define kW3ContactFieldId @"id"
 // special translation for IM field value and type
 #define kW3ContactImType @"type"

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/539ad679/src/ios/CDVContact.m
----------------------------------------------------------------------
diff --git a/src/ios/CDVContact.m b/src/ios/CDVContact.m
index 676ba5e..2d56333 100644
--- a/src/ios/CDVContact.m
+++ b/src/ios/CDVContact.m
@@ -722,86 +722,80 @@ static NSDictionary* org_apache_cordova_contacts_defaultFields = nil;
     return bConvert;
 }
 
+/* Return dictionary where key is contact api label, value is iPhone constant
+*/
++ (NSDictionary*) getContactLabels
+{
+    return @{
+             kW3ContactWorkLabel : (NSString*) kABWorkLabel,
+             kW3ContactHomeLabel : (NSString*) kABHomeLabel,
+             kW3ContactOtherLabel: (NSString*) kABOtherLabel,
+             kW3ContactPhoneMobileLabel: (NSString*) kABPersonPhoneMobileLabel,
+             kW3ContactPhonePagerLabel: (NSString*) kABPersonPhonePagerLabel,
+             kW3ContactPhoneWorkFaxLabel: (NSString*) kABPersonPhoneWorkFAXLabel,
+             kW3ContactPhoneHomeFaxLabel: (NSString*) kABPersonPhoneHomeFAXLabel,
+             kW3ContactPhoneIPhoneLabel: (NSString*) kABPersonPhoneIPhoneLabel,
+             kW3ContactPhoneMainLabel: (NSString*) kABPersonPhoneMainLabel,
+             kW3ContactImAIMLabel: (NSString*) kABPersonInstantMessageServiceAIM,
+             kW3ContactImICQLabel: (NSString*) kABPersonInstantMessageServiceICQ,
+             kW3ContactImMSNLabel: (NSString*) kABPersonInstantMessageServiceMSN,
+             kW3ContactImYahooLabel: (NSString*) kABPersonInstantMessageServiceYahoo,
+             kW3ContactImSkypeLabel: (NSString*) kABPersonInstantMessageServiceSkype,
+             kW3ContactImGoogleTalkLabel: (NSString*) kABPersonInstantMessageServiceGoogleTalk,
+             kW3ContactImFacebookMessengerLabel: (NSString*) kABPersonInstantMessageServiceFacebook,
+             kW3ContactImJabberLabel: (NSString*) kABPersonInstantMessageServiceJabber,
+             kW3ContactImQQLabel: (NSString*) kABPersonInstantMessageServiceQQ,
+             kW3ContactImGaduLabel: (NSString*) kABPersonInstantMessageServiceGaduGadu,
+             kW3ContactUrlProfile: (NSString*) kABPersonHomePageLabel
+            };
+}
+
+/* Make case insensitive search in labels dictionary by contact API label
+*/
++ (NSArray *) filterLabels: (NSString *) contactApiLabel
+{
+    NSDictionary *labels = [CDVContact getContactLabels];
+    NSPredicate * labelFilter = [NSPredicate predicateWithFormat:@"SELF LIKE[c] %@", contactApiLabel];
+    NSArray *labelKeys = [labels allKeys];
+    NSArray *result = [labelKeys filteredArrayUsingPredicate: labelFilter];
+    return result;
+}
+
 /* Translation of property type labels  contact API ---> iPhone
  *
- *	phone:  work, home, other, mobile, fax, pager -->
- *		kABWorkLabel, kABHomeLabel, kABOtherLabel, kABPersonPhoneMobileLabel, kABPersonHomeFAXLabel || kABPersonHomeFAXLabel, kABPersonPhonePagerLabel
+ *	phone:  work, home, other, mobile, home fax, work fax, main, iphone, pager -->
+ *		kABWorkLabel, kABHomeLabel, kABOtherLabel, kABPersonPhoneMobileLabel, kABPersonHomeFAXLabel, kABPersonHomeFAXLabel, kABPersonPhonePagerLabel, kABPersonPhoneIPhoneLabel, kABPersonPhoneMainLabel
  *	emails:  work, home, other ---> kABWorkLabel, kABHomeLabel, kABOtherLabel
- *	ims: aim, gtalk, icq, xmpp, msn, skype, qq, yahoo --> kABPersonInstantMessageService + (AIM, ICG, MSN, Yahoo).  No support for gtalk, xmpp, skype, qq
+ *	ims: aim, gtalk, icq, xmpp, msn, skype, qq, yahoo, gadu --> kABPersonInstantMessageService + (AIM, ICG, MSN, Yahoo, Gtalk, Skype, QQ, Gadu).  No support for xmpp
  * addresses: work, home, other --> kABWorkLabel, kABHomeLabel, kABOtherLabel
  *
  *
  */
 + (CFStringRef)convertContactTypeToPropertyLabel:(NSString*)label
 {
-    CFStringRef type;
-
+    CFStringRef type; 
+    NSDictionary *labels = [CDVContact getContactLabels];
     if ([label isKindOfClass:[NSNull class]] || ![label isKindOfClass:[NSString class]]) {
         type = NULL; // no label
-    } else if ([label caseInsensitiveCompare:kW3ContactWorkLabel] == NSOrderedSame) {
-        type = kABWorkLabel;
-    } else if ([label caseInsensitiveCompare:kW3ContactHomeLabel] == NSOrderedSame) {
-        type = kABHomeLabel;
-    } else if ([label caseInsensitiveCompare:kW3ContactOtherLabel] == NSOrderedSame) {
-        type = kABOtherLabel;
-    } else if ([label caseInsensitiveCompare:kW3ContactPhoneMobileLabel] == NSOrderedSame) {
-        type = kABPersonPhoneMobileLabel;
-    } else if ([label caseInsensitiveCompare:kW3ContactPhonePagerLabel] == NSOrderedSame) {
-        type = kABPersonPhonePagerLabel;
-    } else if ([label caseInsensitiveCompare:kW3ContactImAIMLabel] == NSOrderedSame) {
-        type = kABPersonInstantMessageServiceAIM;
-    } else if ([label caseInsensitiveCompare:kW3ContactImICQLabel] == NSOrderedSame) {
-        type = kABPersonInstantMessageServiceICQ;
-    } else if ([label caseInsensitiveCompare:kW3ContactImMSNLabel] == NSOrderedSame) {
-        type = kABPersonInstantMessageServiceMSN;
-    } else if ([label caseInsensitiveCompare:kW3ContactImYahooLabel] == NSOrderedSame) {
-        type = kABPersonInstantMessageServiceYahoo;
-    } else if ([label caseInsensitiveCompare:kW3ContactUrlProfile] == NSOrderedSame) {
-        type = kABPersonHomePageLabel;
-    } else {
+    }
+    else {        
+        NSArray *filteredLabels = [CDVContact filterLabels:label];
         // CB-3950 If label is not one of kW3*Label constants, threat it as custom label,
         // otherwise fetching contact and then saving it will break this label in address book.
-        type = (__bridge CFStringRef)(label);
+        type = (__bridge CFStringRef) ([filteredLabels count] != 0 ? [labels objectForKey:[filteredLabels firstObject]] : label);
     }
-
     return type;
 }
 
 + (NSString*)convertPropertyLabelToContactType:(NSString*)label
 {
-    NSString* type = nil;
-
-    if (label != nil) { // improve efficiency......
-        if ([label isEqualToString:(NSString*)kABPersonPhoneMobileLabel]) {
-            type = kW3ContactPhoneMobileLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonPhoneHomeFAXLabel] ||
-            [label isEqualToString:(NSString*)kABPersonPhoneWorkFAXLabel]) {
-            type = kW3ContactPhoneFaxLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonPhonePagerLabel]) {
-            type = kW3ContactPhonePagerLabel;
-        } else if ([label isEqualToString:(NSString*)kABHomeLabel]) {
-            type = kW3ContactHomeLabel;
-        } else if ([label isEqualToString:(NSString*)kABWorkLabel]) {
-            type = kW3ContactWorkLabel;
-        } else if ([label isEqualToString:(NSString*)kABOtherLabel]) {
-            type = kW3ContactOtherLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonInstantMessageServiceAIM]) {
-            type = kW3ContactImAIMLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonInstantMessageServiceICQ]) {
-            type = kW3ContactImICQLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonInstantMessageServiceJabber]) {
-            type = kW3ContactOtherLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonInstantMessageServiceMSN]) {
-            type = kW3ContactImMSNLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonInstantMessageServiceYahoo]) {
-            type = kW3ContactImYahooLabel;
-        } else if ([label isEqualToString:(NSString*)kABPersonHomePageLabel]) {
-            type = kW3ContactUrlProfile;
-        } else {
-            // CB-3950 If label is not one of kW3*Label constants, threat it as custom label,
-            // otherwise fetching contact and then saving it will break this label in address book.
-            type = label;
-        }
+    NSString* type = nil;  
+    NSDictionary *labels = [CDVContact getContactLabels];
+    if (label != nil) {
+        NSArray *labelKeys = [labels allKeysForObject:label];
+        // CB-3950 If label is not one of kW3*Label constants, threat it as custom label,
+        // otherwise fetching contact and then saving it will break this label in address book.
+        type = [labelKeys count] != 0 ? [labelKeys firstObject] : label;
     }
     return type;
 }
@@ -814,31 +808,11 @@ static NSDictionary* org_apache_cordova_contacts_defaultFields = nil;
 + (BOOL)isValidW3ContactType:(NSString*)label
 {
     BOOL isValid = NO;
-
     if ([label isKindOfClass:[NSNull class]] || ![label isKindOfClass:[NSString class]]) {
         isValid = NO; // no label
-    } else if ([label caseInsensitiveCompare:kW3ContactWorkLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactHomeLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactOtherLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactPhoneMobileLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactPhonePagerLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactImAIMLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactImICQLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactImMSNLabel] == NSOrderedSame) {
-        isValid = YES;
-    } else if ([label caseInsensitiveCompare:kW3ContactImYahooLabel] == NSOrderedSame) {
-        isValid = YES;
     } else {
-        isValid = NO;
+        isValid =  [[CDVContact filterLabels:label] count] != 0;
     }
-
     return isValid;
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/539ad679/tests/tests.js
----------------------------------------------------------------------
diff --git a/tests/tests.js b/tests/tests.js
index 8388a93..c560a9d 100644
--- a/tests/tests.js
+++ b/tests/tests.js
@@ -346,6 +346,25 @@ exports.defineAutoTests = function() {
                     };
                     specContext.contactObj.save(onSuccessSave, fail.bind(null, done));
                 });
+
+                it('spec 7.4 contact detail type should equal default label', function(done) {
+                    var specContext = this;
+                    specContext.contactObj = navigator.contacts.create({
+                        "displayName": "test name",
+                        "ims": [{
+                            "type": "SKYPE",
+                            "value": "000"
+                        }]
+                    });
+                    specContext.contactObj.save(onSuccessSave, fail.bind(null, done));
+                    function onSuccessSave(savedContact) {
+                        specContext.contactObj = savedContact;
+                        var imsType = savedContact.ims[0].type;
+                        var expectedType = (cordova.platformId == 'android') ? "Skype" : "skype";
+                        expect(imsType).toBe(expectedType);
+                        done();
+                    }
+                });
             });
         });
 
@@ -769,7 +788,7 @@ exports.defineAutoTests = function() {
                     expect(found.birthday).toEqual(jasmine.any(Date));
                     expect(found.birthday).toEqual(bDay);
                     done();
-                }, done, this);
+                }, this);
             }, MEDIUM_TIMEOUT);
 
             it("contacts.spec.32 Find should return a contact with correct IM field", function(done) {
@@ -791,11 +810,11 @@ exports.defineAutoTests = function() {
                     expect(found.ims).toEqual(jasmine.any(Array));
                     expect(found.ims[0]).toBeDefined();
                     if (found.ims[0]) {
-                        expect(found.ims[0].type).toEqual(ims[0].type);
+                        expect(found.ims[0].type).toEqual(cordova.platformId == 'android' ? ims[0].type : ims[0].type.toLowerCase());
                         expect(found.ims[0].value).toEqual(ims[0].value);
                     }
                     done();
-                }, done, this);
+                }, this);
             }, MEDIUM_TIMEOUT);
         });
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org