You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2012/06/07 22:20:53 UTC
[9/50] [abbrv] Merge commit. TABS ARE NOT SPACES
http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/0ad9ff0d/framework/src/org/apache/cordova/ContactAccessorSdk5.java
----------------------------------------------------------------------
diff --cc framework/src/org/apache/cordova/ContactAccessorSdk5.java
index 0f41814,02047e8..ec7b39f
--- a/framework/src/org/apache/cordova/ContactAccessorSdk5.java
+++ b/framework/src/org/apache/cordova/ContactAccessorSdk5.java
@@@ -73,51 -75,51 +76,51 @@@ import android.webkit.WebView
*/
public class ContactAccessorSdk5 extends ContactAccessor {
- /**
- * Keep the photo size under the 1 MB blog limit.
- */
- private static final long MAX_PHOTO_SIZE = 1048576;
-
- private static final String EMAIL_REGEXP = ".+@.+\\.+.+"; /* <anything>@<anything>.<anything>*/
+ /**
+ * Keep the photo size under the 1 MB blog limit.
+ */
+ private static final long MAX_PHOTO_SIZE = 1048576;
- /**
- * A static map that converts the JavaScript property name to Android database column name.
- */
+ private static final String EMAIL_REGEXP = ".+@.+\\.+.+"; /* <anything>@<anything>.<anything>*/
+
+ /**
+ * A static map that converts the JavaScript property name to Android database column name.
+ */
private static final Map<String, String> dbMap = new HashMap<String, String>();
static {
- dbMap.put("id", ContactsContract.Data.CONTACT_ID);
- dbMap.put("displayName", ContactsContract.Contacts.DISPLAY_NAME);
- dbMap.put("name", ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
- dbMap.put("name.formatted", ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
- dbMap.put("name.familyName", ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
- dbMap.put("name.givenName", ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
- dbMap.put("name.middleName", ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
- dbMap.put("name.honorificPrefix", ContactsContract.CommonDataKinds.StructuredName.PREFIX);
- dbMap.put("name.honorificSuffix", ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
- dbMap.put("nickname", ContactsContract.CommonDataKinds.Nickname.NAME);
- dbMap.put("phoneNumbers", ContactsContract.CommonDataKinds.Phone.NUMBER);
- dbMap.put("phoneNumbers.value", ContactsContract.CommonDataKinds.Phone.NUMBER);
- dbMap.put("emails", ContactsContract.CommonDataKinds.Email.DATA);
- dbMap.put("emails.value", ContactsContract.CommonDataKinds.Email.DATA);
- dbMap.put("addresses", ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
- dbMap.put("addresses.formatted", ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
- dbMap.put("addresses.streetAddress", ContactsContract.CommonDataKinds.StructuredPostal.STREET);
- dbMap.put("addresses.locality", ContactsContract.CommonDataKinds.StructuredPostal.CITY);
- dbMap.put("addresses.region", ContactsContract.CommonDataKinds.StructuredPostal.REGION);
- dbMap.put("addresses.postalCode", ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE);
- dbMap.put("addresses.country", ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY);
- dbMap.put("ims", ContactsContract.CommonDataKinds.Im.DATA);
- dbMap.put("ims.value", ContactsContract.CommonDataKinds.Im.DATA);
- dbMap.put("organizations", ContactsContract.CommonDataKinds.Organization.COMPANY);
- dbMap.put("organizations.name", ContactsContract.CommonDataKinds.Organization.COMPANY);
- dbMap.put("organizations.department", ContactsContract.CommonDataKinds.Organization.DEPARTMENT);
- dbMap.put("organizations.title", ContactsContract.CommonDataKinds.Organization.TITLE);
- dbMap.put("birthday", ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
- dbMap.put("note", ContactsContract.CommonDataKinds.Note.NOTE);
- dbMap.put("photos.value", ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
- //dbMap.put("categories.value", null);
- dbMap.put("urls", ContactsContract.CommonDataKinds.Website.URL);
- dbMap.put("urls.value", ContactsContract.CommonDataKinds.Website.URL);
+ dbMap.put("id", ContactsContract.Data.CONTACT_ID);
+ dbMap.put("displayName", ContactsContract.Contacts.DISPLAY_NAME);
+ dbMap.put("name", ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+ dbMap.put("name.formatted", ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+ dbMap.put("name.familyName", ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
+ dbMap.put("name.givenName", ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
+ dbMap.put("name.middleName", ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
+ dbMap.put("name.honorificPrefix", ContactsContract.CommonDataKinds.StructuredName.PREFIX);
+ dbMap.put("name.honorificSuffix", ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
+ dbMap.put("nickname", ContactsContract.CommonDataKinds.Nickname.NAME);
+ dbMap.put("phoneNumbers", ContactsContract.CommonDataKinds.Phone.NUMBER);
+ dbMap.put("phoneNumbers.value", ContactsContract.CommonDataKinds.Phone.NUMBER);
+ dbMap.put("emails", ContactsContract.CommonDataKinds.Email.DATA);
+ dbMap.put("emails.value", ContactsContract.CommonDataKinds.Email.DATA);
+ dbMap.put("addresses", ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
+ dbMap.put("addresses.formatted", ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
+ dbMap.put("addresses.streetAddress", ContactsContract.CommonDataKinds.StructuredPostal.STREET);
+ dbMap.put("addresses.locality", ContactsContract.CommonDataKinds.StructuredPostal.CITY);
+ dbMap.put("addresses.region", ContactsContract.CommonDataKinds.StructuredPostal.REGION);
+ dbMap.put("addresses.postalCode", ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE);
+ dbMap.put("addresses.country", ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY);
+ dbMap.put("ims", ContactsContract.CommonDataKinds.Im.DATA);
+ dbMap.put("ims.value", ContactsContract.CommonDataKinds.Im.DATA);
+ dbMap.put("organizations", ContactsContract.CommonDataKinds.Organization.COMPANY);
+ dbMap.put("organizations.name", ContactsContract.CommonDataKinds.Organization.COMPANY);
+ dbMap.put("organizations.department", ContactsContract.CommonDataKinds.Organization.DEPARTMENT);
+ dbMap.put("organizations.title", ContactsContract.CommonDataKinds.Organization.TITLE);
+ dbMap.put("birthday", ContactsContract.CommonDataKinds.Event.START_DATE);
+ dbMap.put("note", ContactsContract.CommonDataKinds.Note.NOTE);
+ dbMap.put("photos.value", ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
+ //dbMap.put("categories.value", null);
+ dbMap.put("urls", ContactsContract.CommonDataKinds.Website.URL);
+ dbMap.put("urls.value", ContactsContract.CommonDataKinds.Website.URL);
}
/**
@@@ -536,102 -540,117 +539,106 @@@
where.add("(" + dbMap.get(key) + " LIKE ? )");
whereArgs.add(searchTerm);
}
- else if (key.startsWith("name")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("nickname")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("phoneNumbers")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("emails")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("addresses")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("ims")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("organizations")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
- }
- // else if (key.startsWith("birthday")) {
- // where.add("(" + dbMap.get(key) + " LIKE ? AND "
- // + ContactsContract.Data.MIMETYPE + " = ? )");
- // }
- else if (key.startsWith("note")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);
- }
- else if (key.startsWith("urls")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
- }
+ else if (key.startsWith("name")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("nickname")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("phoneNumbers")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("emails")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("addresses")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("ims")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("organizations")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
+ }
+ else if (key.startsWith("birthday")) {
+ try {
+ SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
+ Date searchDate = format.parse(searchTerm.substring(1, searchTerm.length()-1));
+ // Have to subtract one from the month as JavaScript's January is 01
+ // while Java's January is 00.
+ searchDate.setMonth(searchDate.getMonth()-1);
+ SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+ where.add("(" + dbMap.get(key) + " = ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(newFormat.format(searchDate));
+ whereArgs.add(ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
+ }
+ catch (ParseException e) {
+ Log.d(LOG_TAG, "Bad romance format");
}
- } catch (JSONException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
+ }
+ else if (key.startsWith("note")) {
+ where.add("(" + dbMap.get(key) + " LIKE ? AND "
+ + ContactsContract.Data.MIMETYPE + " = ? )");
+ whereArgs.add(searchTerm);
+ whereArgs.add(ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);
}
- else if (key.startsWith("urls")) {
- where.add("(" + dbMap.get(key) + " LIKE ? AND "
- + ContactsContract.Data.MIMETYPE + " = ? )");
- whereArgs.add(searchTerm);
- whereArgs.add(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
+
+ // Creating the where string
+ StringBuffer selection = new StringBuffer();
+ for (int i = 0; i < where.size(); i++) {
+ selection.append(where.get(i));
+ if (i != (where.size() - 1)) {
+ selection.append(" OR ");
+ }
}
- }
- }
- catch (JSONException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
- }
+ options.setWhere(selection.toString());
- // Creating the where string
- StringBuffer selection = new StringBuffer();
- for (int i=0; i<where.size(); i++) {
- selection.append(where.get(i));
- if (i != (where.size()-1)) {
- selection.append(" OR ");
- }
- }
- options.setWhere(selection.toString());
+ // Creating the where args array
+ String[] selectionArgs = new String[whereArgs.size()];
+ for (int i = 0; i < whereArgs.size(); i++) {
+ selectionArgs[i] = whereArgs.get(i);
+ }
+ options.setWhereArgs(selectionArgs);
- // Creating the where args array
- String[] selectionArgs = new String[whereArgs.size()];
- for (int i=0; i<whereArgs.size(); i++) {
- selectionArgs[i] = whereArgs.get(i);
+ return options;
}
- options.setWhereArgs(selectionArgs);
-
- return options;
- }
- /**
- * If the user passes in the '*' wildcard character for search then they want all fields for each contact
- *
- * @param fields
- * @return true if wildcard search requested, false otherwise
- */
- private boolean isWildCardSearch(JSONArray fields) {
- // Only do a wildcard search if we are passed ["*"]
- if (fields.length() == 1) {
- try {
+ /**
+ * If the user passes in the '*' wildcard character for search then they want all fields for each contact
+ *
+ * @param fields
+ * @return true if wildcard search requested, false otherwise
+ */
+ private boolean isWildCardSearch(JSONArray fields) {
+ // Only do a wildcard search if we are passed ["*"]
+ if (fields.length() == 1) {
+ try {
if ("*".equals(fields.getString(0))) {
return true;
- }
+ }
} catch (JSONException e) {
return false;
}
@@@ -864,736 -873,751 +871,765 @@@
}
}
}
- }
-
- String id = getJsonString(contact, "id");
- // Create new contact
- if (id == null) {
- return createNewContact(contact, accountType, accountName);
- }
- // Modify existing contact
- else {
- return modifyContact(id, contact, accountType, accountName);
- }
- }
-
- /**
- * Creates a new contact and stores it in the database
- *
- * @param id the raw contact id which is required for linking items to the contact
- * @param contact the contact to be saved
- * @param account the account to be saved under
- */
- private String modifyContact(String id, JSONObject contact, String accountType, String accountName) {
- // Get the RAW_CONTACT_ID which is needed to insert new values in an already existing contact.
- // But not needed to update existing values.
- int rawId = (new Integer(getJsonString(contact,"rawId"))).intValue();
-
- // Create a list of attributes to add to the contact database
- ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
-
- //Add contact type
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
- .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
- .build());
-
- // Modify name
- JSONObject name;
- try {
- String displayName = getJsonString(contact, "displayName");
- name = contact.getJSONObject("name");
- if (displayName != null || name != null) {
- ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE});
- if (displayName != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName);
- }
-
- String familyName = getJsonString(name, "familyName");
- if (familyName != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName);
- }
- String middleName = getJsonString(name, "middleName");
- if (middleName != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, middleName);
- }
- String givenName = getJsonString(name, "givenName");
- if (givenName != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName);
+ String id = getJsonString(contact, "id");
+ // Create new contact
+ if (id == null) {
+ return createNewContact(contact, accountType, accountName);
}
- String honorificPrefix = getJsonString(name, "honorificPrefix");
- if (honorificPrefix != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, honorificPrefix);
+ // Modify existing contact
+ else {
+ return modifyContact(id, contact, accountType, accountName);
}
- String honorificSuffix = getJsonString(name, "honorificSuffix");
- if (honorificSuffix != null) {
- builder.withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, honorificSuffix);
- }
-
- ops.add(builder.build());
- }
- } catch (JSONException e1) {
- Log.d(LOG_TAG, "Could not get name");
}
-
- // Modify phone numbers
- JSONArray phones = null;
- try {
- phones = contact.getJSONArray("phoneNumbers");
- if (phones != null) {
- for (int i=0; i<phones.length(); i++) {
- JSONObject phone = (JSONObject)phones.get(i);
- String phoneId = getJsonString(phone, "id");
- // This is a new phone so do a DB insert
- if (phoneId == null) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
- contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
- contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"));
- contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")));
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing phone so do a DB update
- else {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{phoneId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE})
- .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"))
- .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")))
- .build());
- }
+ /**
+ * Creates a new contact and stores it in the database
+ *
+ * @param id the raw contact id which is required for linking items to the contact
+ * @param contact the contact to be saved
+ * @param account the account to be saved under
+ */
+ private String modifyContact(String id, JSONObject contact, String accountType, String accountName) {
+ // Get the RAW_CONTACT_ID which is needed to insert new values in an already existing contact.
+ // But not needed to update existing values.
+ int rawId = (new Integer(getJsonString(contact, "rawId"))).intValue();
+
+ // Create a list of attributes to add to the contact database
+ ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
+
+ //Add contact type
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
+ .build());
+
+ // Modify name
+ JSONObject name;
+ try {
+ String displayName = getJsonString(contact, "displayName");
+ name = contact.getJSONObject("name");
+ if (displayName != null || name != null) {
+ ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE });
+
+ if (displayName != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName);
+ }
+
+ String familyName = getJsonString(name, "familyName");
+ if (familyName != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName);
+ }
+ String middleName = getJsonString(name, "middleName");
+ if (middleName != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, middleName);
+ }
+ String givenName = getJsonString(name, "givenName");
+ if (givenName != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName);
+ }
+ String honorificPrefix = getJsonString(name, "honorificPrefix");
+ if (honorificPrefix != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, honorificPrefix);
+ }
+ String honorificSuffix = getJsonString(name, "honorificSuffix");
+ if (honorificSuffix != null) {
+ builder.withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, honorificSuffix);
+ }
+
+ ops.add(builder.build());
+ }
+ } catch (JSONException e1) {
+ Log.d(LOG_TAG, "Could not get name");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get phone numbers");
- }
-
- // Modify emails
- JSONArray emails = null;
- try {
- emails = contact.getJSONArray("emails");
- if (emails != null) {
- for (int i=0; i<emails.length(); i++) {
- JSONObject email = (JSONObject)emails.get(i);
- String emailId = getJsonString(email, "id");
- // This is a new email so do a DB insert
- if (emailId==null) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
- contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
- contentValues.put(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"));
- contentValues.put(ContactsContract.CommonDataKinds.Email.TYPE, getContactType(getJsonString(email, "type")));
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing email so do a DB update
- else {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Email._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{emailId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE})
- .withValue(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"))
- .withValue(ContactsContract.CommonDataKinds.Email.TYPE, getContactType(getJsonString(email, "type")))
- .build());
- }
+ // Modify phone numbers
+ JSONArray phones = null;
+ try {
+ phones = contact.getJSONArray("phoneNumbers");
+ if (phones != null) {
+ for (int i = 0; i < phones.length(); i++) {
+ JSONObject phone = (JSONObject) phones.get(i);
+ String phoneId = getJsonString(phone, "id");
+ // This is a new phone so do a DB insert
+ if (phoneId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"));
+ contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing phone so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { phoneId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get phone numbers");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get emails");
- }
- // Modify addresses
- JSONArray addresses = null;
- try {
- addresses = contact.getJSONArray("addresses");
- if (addresses != null) {
- for (int i=0; i<addresses.length(); i++) {
- JSONObject address = (JSONObject)addresses.get(i);
- String addressId = getJsonString(address, "id");
- // This is a new address so do a DB insert
- if (addressId==null) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
- contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressType(getJsonString(address, "type")));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"));
- contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"));
+ // Modify emails
+ JSONArray emails = null;
+ try {
+ emails = contact.getJSONArray("emails");
+ if (emails != null) {
+ for (int i = 0; i < emails.length(); i++) {
+ JSONObject email = (JSONObject) emails.get(i);
+ String emailId = getJsonString(email, "id");
+ // This is a new email so do a DB insert
+ if (emailId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"));
+ contentValues.put(ContactsContract.CommonDataKinds.Email.TYPE, getContactType(getJsonString(email, "type")));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing email so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Email._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { emailId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Email.TYPE, getContactType(getJsonString(email, "type")))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get emails");
+ }
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing address so do a DB update
- else {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.StructuredPostal._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{addressId, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE})
+ // Modify addresses
+ JSONArray addresses = null;
+ try {
+ addresses = contact.getJSONArray("addresses");
+ if (addresses != null) {
+ for (int i = 0; i < addresses.length(); i++) {
+ JSONObject address = (JSONObject) addresses.get(i);
+ String addressId = getJsonString(address, "id");
+ // This is a new address so do a DB insert
+ if (addressId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressType(getJsonString(address, "type")));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"));
+ contentValues.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing address so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.StructuredPostal._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { addressId, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE })
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressType(getJsonString(address, "type")))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"))
- .build());
- }
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get addresses");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get addresses");
- }
- // Modify organizations
- JSONArray organizations = null;
- try {
- organizations = contact.getJSONArray("organizations");
- if (organizations != null) {
- for (int i=0; i<organizations.length(); i++) {
- JSONObject org = (JSONObject)organizations.get(i);
- String orgId = getJsonString(org, "id");
- // This is a new organization so do a DB insert
- if (orgId==null) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
- contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
+ // Modify organizations
+ JSONArray organizations = null;
+ try {
+ organizations = contact.getJSONArray("organizations");
+ if (organizations != null) {
+ for (int i = 0; i < organizations.length(); i++) {
+ JSONObject org = (JSONObject) organizations.get(i);
+ String orgId = getJsonString(org, "id");
+ // This is a new organization so do a DB insert
+ if (orgId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
contentValues.put(ContactsContract.CommonDataKinds.Organization.TYPE, getOrgType(getJsonString(org, "type")));
- contentValues.put(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"));
- contentValues.put(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"));
- contentValues.put(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"));
+ contentValues.put(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"));
+ contentValues.put(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"));
+ contentValues.put(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"));
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing organization so do a DB update
- else {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Organization._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{orgId, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE})
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing organization so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Organization._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { orgId, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE })
.withValue(ContactsContract.CommonDataKinds.Organization.TYPE, getOrgType(getJsonString(org, "type")))
- .withValue(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"))
- .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"))
- .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"))
- .build());
- }
+ .withValue(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"))
+ .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"))
+ .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get organizations");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get organizations");
- }
- // Modify IMs
- JSONArray ims = null;
- try {
- ims = contact.getJSONArray("ims");
- if (ims != null) {
- for (int i=0; i<ims.length(); i++) {
- JSONObject im = (JSONObject)ims.get(i);
- String imId = getJsonString(im, "id");
- // This is a new IM so do a DB insert
- if (imId==null) {
- ContentValues contentValues = new ContentValues();
- 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")));
-
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing IM so do a DB update
- else {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Im._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{imId, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE})
- .withValue(ContactsContract.CommonDataKinds.Im.DATA, getJsonString(im, "value"))
- .withValue(ContactsContract.CommonDataKinds.Im.TYPE, getContactType(getJsonString(im, "type")))
- .build());
- }
+ // Modify IMs
+ JSONArray ims = null;
+ try {
+ ims = contact.getJSONArray("ims");
+ if (ims != null) {
+ for (int i = 0; i < ims.length(); i++) {
+ JSONObject im = (JSONObject) ims.get(i);
+ String imId = getJsonString(im, "id");
+ // This is a new IM so do a DB insert
+ if (imId == null) {
+ ContentValues contentValues = new ContentValues();
+ 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")));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing IM so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Im._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { imId, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.CommonDataKinds.Im.DATA, getJsonString(im, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Im.TYPE, getContactType(getJsonString(im, "type")))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get emails");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get emails");
- }
- // Modify note
- String note = getJsonString(contact, "note");
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[] { id, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE })
- .withValue(ContactsContract.CommonDataKinds.Note.NOTE, note)
- .build());
-
- // Modify nickname
- String nickname = getJsonString(contact, "nickname");
- if (nickname != null) {
+ // Modify note
+ String note = getJsonString(contact, "note");
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[]{id,ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE})
+ .withValue(ContactsContract.CommonDataKinds.Note.NOTE, note)
+ .build());
+
+ // Modify nickname
+ String nickname = getJsonString(contact, "nickname");
+ if (nickname != null) {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[]{id,ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE})
+ .withValue(ContactsContract.CommonDataKinds.Nickname.NAME, nickname)
+ .build());
+ }
+
+ // Modify urls
+ JSONArray websites = null;
+ try {
+ websites = contact.getJSONArray("urls");
+ if (websites != null) {
+ for (int i=0; i<websites.length(); i++) {
+ JSONObject website = (JSONObject)websites.get(i);
+ String websiteId = getJsonString(website, "id");
+ // This is a new website so do a DB insert
+ if (websiteId==null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"));
+ contentValues.put(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing website so do a DB update
+ else {
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Website._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{websiteId, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE})
- .withValue(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"))
- .withValue(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")))
+ .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { id, ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.CommonDataKinds.Nickname.NAME, nickname)
.build());
- }
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get websites");
- }
-
- // Modify birthday
- String birthday = getJsonString(contact, "birthday");
- if (birthday != null) {
- ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=? AND " +
- ContactsContract.CommonDataKinds.Event.TYPE + "=?",
- new String[]{id,ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, new String(""+ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)})
- .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
- .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthday)
- .build());
- }
- // Modify photos
- JSONArray photos = null;
- try {
- photos = contact.getJSONArray("photos");
- if (photos != null) {
- for (int i=0; i<photos.length(); i++) {
- JSONObject photo = (JSONObject)photos.get(i);
- String photoId = getJsonString(photo, "id");
- byte[] bytes = getPhotoBytes(getJsonString(photo, "value"));
- // This is a new photo so do a DB insert
- if (photoId==null) {
- ContentValues contentValues = new ContentValues();
- contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
- contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
- contentValues.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
- contentValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes);
+ // Modify urls
+ JSONArray websites = null;
+ try {
+ websites = contact.getJSONArray("websites");
+ if (websites != null) {
+ for (int i = 0; i < websites.length(); i++) {
+ JSONObject website = (JSONObject) websites.get(i);
+ String websiteId = getJsonString(website, "id");
+ // This is a new website so do a DB insert
+ if (websiteId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"));
+ contentValues.put(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")));
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing website so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Website._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { websiteId, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")))
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get websites");
+ }
- ops.add(ContentProviderOperation.newInsert(
- ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
- }
- // This is an existing photo so do a DB update
- else {
+ // Modify birthday
+ String birthday = getJsonString(contact, "birthday");
+ if (birthday != null) {
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
- .withSelection(ContactsContract.CommonDataKinds.Photo._ID + "=? AND " +
- ContactsContract.Data.MIMETYPE + "=?",
- new String[]{photoId, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE})
- .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
- .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes)
+ .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=? AND " +
+ ContactsContract.CommonDataKinds.Event.TYPE + "=?",
+ new String[] { id, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE, new String("" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) })
+ .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
+ .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthday)
.build());
- }
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get photos");
- }
-
- boolean retVal = true;
-
- //Modify contact
- try {
- mApp.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (RemoteException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
- Log.e(LOG_TAG, Log.getStackTraceString(e), e);
- retVal = false;
- } catch (OperationApplicationException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
- Log.e(LOG_TAG, Log.getStackTraceString(e), e);
- retVal = false;
- }
-
- // if the save was a succes return the contact ID
- if (retVal) {
- return id;
- } else {
- return null;
- }
- }
- /**
- * Add a website to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param website the item to be inserted
- */
- private void insertWebsite(ArrayList<ContentProviderOperation> ops,
- JSONObject website) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"))
- .withValue(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")))
- .build());
- }
-
- /**
- * Add an im to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param im the item to be inserted
- */
- private void insertIm(ArrayList<ContentProviderOperation> ops, JSONObject im) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .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")))
- .build());
- }
+ // Modify photos
+ JSONArray photos = null;
+ try {
+ photos = contact.getJSONArray("photos");
+ if (photos != null) {
+ for (int i = 0; i < photos.length(); i++) {
+ JSONObject photo = (JSONObject) photos.get(i);
+ String photoId = getJsonString(photo, "id");
+ byte[] bytes = getPhotoBytes(getJsonString(photo, "value"));
+ // This is a new photo so do a DB insert
+ if (photoId == null) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, rawId);
+ contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
+ contentValues.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
+ contentValues.put(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes);
+
+ ops.add(ContentProviderOperation.newInsert(
+ ContactsContract.Data.CONTENT_URI).withValues(contentValues).build());
+ }
+ // This is an existing photo so do a DB update
+ else {
+ ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+ .withSelection(ContactsContract.CommonDataKinds.Photo._ID + "=? AND " +
+ ContactsContract.Data.MIMETYPE + "=?",
+ new String[] { photoId, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE })
+ .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
+ .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes)
+ .build());
+ }
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get photos");
+ }
- /**
- * Add an organization to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param org the item to be inserted
- */
- private void insertOrganization(ArrayList<ContentProviderOperation> ops,
- JSONObject org) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, getOrgType(getJsonString(org, "type")))
- .withValue(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"))
- .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"))
- .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"))
- .build());
- }
+ boolean retVal = true;
- /**
- * Add an address to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param address the item to be inserted
- */
- private void insertAddress(ArrayList<ContentProviderOperation> ops,
- JSONObject address) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressType(getJsonString(address, "type")))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"))
- .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"))
- .build());
- }
+ //Modify contact
+ try {
+ mApp.getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, e.getMessage(), e);
+ Log.e(LOG_TAG, Log.getStackTraceString(e), e);
+ retVal = false;
+ } catch (OperationApplicationException e) {
+ Log.e(LOG_TAG, e.getMessage(), e);
+ Log.e(LOG_TAG, Log.getStackTraceString(e), e);
+ retVal = false;
+ }
- /**
- * Add an email to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param email the item to be inserted
- */
- private void insertEmail(ArrayList<ContentProviderOperation> ops,
- JSONObject email) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"))
- .withValue(ContactsContract.CommonDataKinds.Email.TYPE, getPhoneType(getJsonString(email, "type")))
- .build());
- }
+ // if the save was a succes return the contact ID
+ if (retVal) {
+ return id;
+ } else {
+ return null;
+ }
+ }
- /**
- * Add a phone to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param phone the item to be inserted
- */
- private void insertPhone(ArrayList<ContentProviderOperation> ops,
- JSONObject phone) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"))
- .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")))
- .build());
- }
+ /**
+ * Add a website to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param website the item to be inserted
+ */
+ private void insertWebsite(ArrayList<ContentProviderOperation> ops,
+ JSONObject website) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.Website.DATA, getJsonString(website, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Website.TYPE, getContactType(getJsonString(website, "type")))
+ .build());
+ }
- /**
- * Add a phone to a list of database actions to be performed
- *
- * @param ops the list of database actions
- * @param phone the item to be inserted
- */
- private void insertPhoto(ArrayList<ContentProviderOperation> ops,
- JSONObject photo) {
- byte[] bytes = getPhotoBytes(getJsonString(photo, "value"));
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes)
- .build());
- }
-
- /**
- * Gets the raw bytes from the supplied filename
- *
- * @param filename the file to read the bytes from
- * @return a byte array
- * @throws IOException
- */
- private byte[] getPhotoBytes(String filename) {
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- try {
- int bytesRead = 0;
- long totalBytesRead = 0;
- byte[] data = new byte[8192];
- InputStream in = getPathFromUri(filename);
-
- while ((bytesRead = in.read(data, 0, data.length)) != -1 && totalBytesRead <= MAX_PHOTO_SIZE) {
- buffer.write(data, 0, bytesRead);
- totalBytesRead += bytesRead;
- }
-
- in.close();
- buffer.flush();
- } catch (FileNotFoundException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
- } catch (IOException e) {
- Log.e(LOG_TAG, e.getMessage(), e);
+ /**
+ * Add an im to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param im the item to be inserted
+ */
+ private void insertIm(ArrayList<ContentProviderOperation> ops, JSONObject im) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .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")))
+ .build());
}
- return buffer.toByteArray();
- }
- /**
- * Get an input stream based on file path or uri content://, http://, file://
+
+ /**
+ * Add an organization to a list of database actions to be performed
*
- * @param path
- * @return an input stream
- * @throws IOException
+ * @param ops the list of database actions
+ * @param org the item to be inserted
*/
- private InputStream getPathFromUri(String path) throws IOException {
- if (path.startsWith("content:")) {
- Uri uri = Uri.parse(path);
- return mApp.getContentResolver().openInputStream(uri);
- }
- if (path.startsWith("http:") || path.startsWith("file:")) {
- URL url = new URL(path);
- return url.openStream();
- }
- else {
- return new FileInputStream(path);
- }
- }
+ private void insertOrganization(ArrayList<ContentProviderOperation> ops,
+ JSONObject org) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, getOrgType(getJsonString(org, "type")))
+ .withValue(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, getJsonString(org, "department"))
+ .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, getJsonString(org, "name"))
+ .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, getJsonString(org, "title"))
+ .build());
+ }
- /**
- * Creates a new contact and stores it in the database
- *
- * @param contact the contact to be saved
- * @param account the account to be saved under
- */
- private String createNewContact(JSONObject contact, String accountType, String accountName) {
- // Create a list of attributes to add to the contact database
- ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
+ /**
+ * Add an address to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param address the item to be inserted
+ */
+ private void insertAddress(ArrayList<ContentProviderOperation> ops,
+ JSONObject address) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, getAddressType(getJsonString(address, "type")))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, getJsonString(address, "formatted"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, getJsonString(address, "streetAddress"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, getJsonString(address, "locality"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, getJsonString(address, "region"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, getJsonString(address, "postalCode"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, getJsonString(address, "country"))
+ .build());
+ }
- //Add contact type
- ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
- .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
- .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
- .build());
+ /**
+ * Add an email to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param email the item to be inserted
+ */
+ private void insertEmail(ArrayList<ContentProviderOperation> ops,
+ JSONObject email) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.Email.DATA, getJsonString(email, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Email.TYPE, getPhoneType(getJsonString(email, "type")))
+ .build());
+ }
- // Add name
- try {
- JSONObject name = contact.optJSONObject("name");
- String displayName = contact.getString("displayName");
- if (displayName != null || name != null) {
+ /**
+ * Add a phone to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param phone the item to be inserted
+ */
+ private void insertPhone(ArrayList<ContentProviderOperation> ops,
+ JSONObject phone) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName)
- .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, getJsonString(name, "familyName"))
- .withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, getJsonString(name, "middleName"))
- .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, getJsonString(name, "givenName"))
- .withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, getJsonString(name, "honorificPrefix"))
- .withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, getJsonString(name, "honorificSuffix"))
- .build());
- }
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, getJsonString(phone, "value"))
+ .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, getPhoneType(getJsonString(phone, "type")))
+ .build());
}
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get name object");
+
+ /**
+ * Add a phone to a list of database actions to be performed
+ *
+ * @param ops the list of database actions
+ * @param phone the item to be inserted
+ */
+ private void insertPhoto(ArrayList<ContentProviderOperation> ops,
+ JSONObject photo) {
+ byte[] bytes = getPhotoBytes(getJsonString(photo, "value"));
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes)
+ .build());
}
-
- //Add phone numbers
- JSONArray phones = null;
- try {
- phones = contact.getJSONArray("phoneNumbers");
- if (phones != null) {
- for (int i=0; i<phones.length(); i++) {
- JSONObject phone = (JSONObject)phones.get(i);
- insertPhone(ops, phone);
+
+ /**
+ * Gets the raw bytes from the supplied filename
+ *
+ * @param filename the file to read the bytes from
+ * @return a byte array
+ * @throws IOException
+ */
+ private byte[] getPhotoBytes(String filename) {
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ try {
+ int bytesRead = 0;
+ long totalBytesRead = 0;
+ byte[] data = new byte[8192];
+ InputStream in = getPathFromUri(filename);
+
+ while ((bytesRead = in.read(data, 0, data.length)) != -1 && totalBytesRead <= MAX_PHOTO_SIZE) {
+ buffer.write(data, 0, bytesRead);
+ totalBytesRead += bytesRead;
+ }
+
+ in.close();
+ buffer.flush();
+ } catch (FileNotFoundException e) {
+ Log.e(LOG_TAG, e.getMessage(), e);
+ } catch (IOException e) {
+ Log.e(LOG_TAG, e.getMessage(), e);
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get phone numbers");
+ return buffer.toByteArray();
}
-
- // Add emails
- JSONArray emails = null;
- try {
- emails = contact.getJSONArray("emails");
- if (emails != null) {
- for (int i=0; i<emails.length(); i++) {
- JSONObject email = (JSONObject)emails.get(i);
- insertEmail(ops, email);
+
+ /**
+ * Get an input stream based on file path or uri content://, http://, file://
+ *
+ * @param path
+ * @return an input stream
+ * @throws IOException
+ */
+ private InputStream getPathFromUri(String path) throws IOException {
+ if (path.startsWith("content:")) {
+ Uri uri = Uri.parse(path);
+ return mApp.getActivity().getContentResolver().openInputStream(uri);
+ }
+ if (path.startsWith("http:") || path.startsWith("file:")) {
+ URL url = new URL(path);
+ return url.openStream();
+ }
+ else {
+ return new FileInputStream(path);
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get emails");
}
- // Add addresses
- JSONArray addresses = null;
- try {
- addresses = contact.getJSONArray("addresses");
- if (addresses != null) {
- for (int i=0; i<addresses.length(); i++) {
- JSONObject address = (JSONObject)addresses.get(i);
- insertAddress(ops, address);
+ /**
+ * Creates a new contact and stores it in the database
+ *
+ * @param contact the contact to be saved
+ * @param account the account to be saved under
+ */
+ private String createNewContact(JSONObject contact, String accountType, String accountName) {
+ // Create a list of attributes to add to the contact database
+ ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
+
+ //Add contact type
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
+ .build());
+
+ // Add name
+ try {
+ JSONObject name = contact.optJSONObject("name");
+ String displayName = contact.getString("displayName");
+ if (displayName != null || name != null) {
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+ .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName)
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, getJsonString(name, "familyName"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, getJsonString(name, "middleName"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, getJsonString(name, "givenName"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.PREFIX, getJsonString(name, "honorificPrefix"))
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, getJsonString(name, "honorificSuffix"))
+ .build());
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get name object");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get addresses");
- }
- // Add organizations
- JSONArray organizations = null;
- try {
- organizations = contact.getJSONArray("organizations");
- if (organizations != null) {
- for (int i=0; i<organizations.length(); i++) {
- JSONObject org = (JSONObject)organizations.get(i);
- insertOrganization(ops, org);
+ //Add phone numbers
+ JSONArray phones = null;
+ try {
+ phones = contact.getJSONArray("phoneNumbers");
+ if (phones != null) {
+ for (int i = 0; i < phones.length(); i++) {
+ JSONObject phone = (JSONObject) phones.get(i);
+ insertPhone(ops, phone);
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get phone numbers");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get organizations");
- }
- // Add IMs
- JSONArray ims = null;
- try {
- ims = contact.getJSONArray("ims");
- if (ims != null) {
- for (int i=0; i<ims.length(); i++) {
- JSONObject im = (JSONObject)ims.get(i);
- insertIm(ops, im);
+ // Add emails
+ JSONArray emails = null;
+ try {
+ emails = contact.getJSONArray("emails");
+ if (emails != null) {
+ for (int i = 0; i < emails.length(); i++) {
+ JSONObject email = (JSONObject) emails.get(i);
+ insertEmail(ops, email);
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get emails");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get emails");
- }
- // Add note
- String note = getJsonString(contact, "note");
- if (note != null) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Note.NOTE, note)
- .build());
- }
+ // Add addresses
+ JSONArray addresses = null;
+ try {
+ addresses = contact.getJSONArray("addresses");
+ if (addresses != null) {
+ for (int i = 0; i < addresses.length(); i++) {
+ JSONObject address = (JSONObject) addresses.get(i);
+ insertAddress(ops, address);
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get addresses");
+ }
- // Add nickname
- String nickname = getJsonString(contact, "nickname");
- if (nickname != null) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Nickname.NAME, nickname)
- .build());
- }
-
- // Add urls
- JSONArray websites = null;
- try {
- websites = contact.getJSONArray("websites");
- if (websites != null) {
- for (int i=0; i<websites.length(); i++) {
- JSONObject website = (JSONObject)websites.get(i);
- insertWebsite(ops, website);
+ // Add organizations
+ JSONArray organizations = null;
+ try {
+ organizations = contact.getJSONArray("organizations");
+ if (organizations != null) {
+ for (int i = 0; i < organizations.length(); i++) {
+ JSONObject org = (JSONObject) organizations.get(i);
+ insertOrganization(ops, org);
+ }
+ }
+ } catch (JSONException e) {
+ Log.d(LOG_TAG, "Could not get organizations");
}
- }
- }
- catch (JSONException e) {
- Log.d(LOG_TAG, "Could not get websites");
- }
-
- // Add birthday
- String birthday = getJsonString(contact, "birthday");
- if (birthday != null) {
- ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
- .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
- .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
- .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
- .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthday)
- .build());
- }
-
- // Add photos
- JSONArray photos = null;
- try {
- photos = contact.getJSONArray("photos");
- if
<TRUNCATED>