CB-1321: IMS types returning as other

Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/0f42c657
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/0f42c657
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/0f42c657

Branch: refs/heads/master
Commit: 0f42c65792b70f7fe039f31eafc5723e86a1aeeb
Parents: 37b3e98
Author: Simon MacDonald <simon.macdon...@gmail.com>
Authored: Thu Sep 13 12:30:07 2012 -0400
Committer: Simon MacDonald <simon.macdon...@gmail.com>
Committed: Mon Sep 17 22:09:51 2012 -0400

----------------------------------------------------------------------
 .../org/apache/cordova/ContactAccessorSdk5.java    |   91 ++++++++++++++-
 1 files changed, 85 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/0f42c657/framework/src/org/apache/cordova/ContactAccessorSdk5.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ContactAccessorSdk5.java 
b/framework/src/org/apache/cordova/ContactAccessorSdk5.java
index 9bffac8..17b2602 100644
--- a/framework/src/org/apache/cordova/ContactAccessorSdk5.java
+++ b/framework/src/org/apache/cordova/ContactAccessorSdk5.java
@@ -28,7 +28,6 @@ import android.content.ContentValues;
 import android.content.OperationApplicationException;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.Debug;
 import android.os.RemoteException;
 import android.provider.ContactsContract;
 import android.util.Log;
@@ -331,8 +330,6 @@ public class ContactAccessorSdk5 extends ContactAccessor {
         JSONArray websites = new JSONArray();
         JSONArray photos = new JSONArray();
 
-        ArrayList<String> names = new ArrayList<String>();
-
         // Column indices
         int colContactId = c.getColumnIndex(ContactsContract.Data.CONTACT_ID);
         int colRawContactId = 
c.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID);
@@ -862,7 +859,8 @@ public class ContactAccessorSdk5 extends ContactAccessor {
             im.put("id", 
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im._ID)));
             im.put("pref", false); // Android does not store pref attribute
             im.put("value", 
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)));
-            im.put("type", 
getContactType(cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE))));
+            String type = 
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL));
+            im.put("type", getImType(new Integer(type).intValue()));
         } catch (JSONException e) {
             Log.e(LOG_TAG, e.getMessage(), e);
         }
@@ -1248,7 +1246,7 @@ public class ContactAccessorSdk5 extends ContactAccessor {
                             
contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
                             contentValues.put(ContactsContract.Data.MIMETYPE, 
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
                             
contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, getJsonString(im, 
"value"));
-                            
contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE, 
getContactType(getJsonString(im, "type")));
+                            
contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE, 
getImType(getJsonString(im, "type")));
 
                             ops.add(ContentProviderOperation.newInsert(
                                     
ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
@@ -1447,7 +1445,7 @@ public class ContactAccessorSdk5 extends ContactAccessor {
                 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
0)
                 .withValue(ContactsContract.Data.MIMETYPE, 
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE)
                 .withValue(ContactsContract.CommonDataKinds.Im.DATA, 
getJsonString(im, "value"))
-                .withValue(ContactsContract.CommonDataKinds.Im.TYPE, 
getContactType(getJsonString(im, "type")))
+                .withValue(ContactsContract.CommonDataKinds.Im.TYPE, 
getImType(getJsonString(im, "type")))
                 .build());
     }
 
@@ -2091,5 +2089,86 @@ public class ContactAccessorSdk5 extends ContactAccessor 
{
         }
         return stringType;
     }
+
+    /**
+     * Converts a string from the W3C Contact API to it's Android int value.
+     * @param string
+     * @return Android int value
+     */
+    private int getImType(String string) {
+        int type = ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM;
+        if (string != null) {
+            if ("aim".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM;
+            }
+            else if ("google talk".equals(string.toLowerCase())) {
+                return 
ContactsContract.CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK;
+            }
+            else if ("icq".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_ICQ;
+            }
+            else if ("jabber".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER;
+            }
+            else if ("msn".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_MSN;
+            }
+            else if ("netmeeting".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_NETMEETING;
+            }
+            else if ("qq".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ;
+            }
+            else if ("skype".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_SKYPE;
+            }
+            else if ("yahoo".equals(string.toLowerCase())) {
+                return ContactsContract.CommonDataKinds.Im.PROTOCOL_YAHOO;
+            }
+        }
+        return type;
+    }
+
+    /**
+     * getPhoneType converts an Android phone type into a string
+     * @param type
+     * @return phone type as string.
+     */
+    private String getImType(int type) {
+        String stringType;
+        switch (type) {
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM:
+            stringType = "AIM";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK:
+            stringType = "Google Talk";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_ICQ:
+            stringType = "ICQ";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER:
+            stringType = "Jabber";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_MSN:
+            stringType = "MSN";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_NETMEETING:
+            stringType = "NetMeeting";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ:
+            stringType = "QQ";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_SKYPE:
+            stringType = "Skype";
+            break;
+        case ContactsContract.CommonDataKinds.Im.PROTOCOL_YAHOO:
+            stringType = "Yahoo";
+            break;
+        default:
+            stringType = "custom";
+            break;
+        }
+        return stringType;
+    }
 }
 

Reply via email to