Repository: cordova-plugin-contacts Updated Branches: refs/heads/master ecf040a74 -> fe6ce1db5
CB-8115 Save contact birthday properly This closes #95 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/fe6ce1db Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/tree/fe6ce1db Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/diff/fe6ce1db Branch: refs/heads/master Commit: fe6ce1db54c95c8bafac243b5a7ab6e0633a71a5 Parents: ecf040a Author: Vladimir Kotikov <[email protected]> Authored: Wed Dec 2 14:10:46 2015 +0300 Committer: Vladimir Kotikov <[email protected]> Committed: Fri Dec 4 10:34:37 2015 +0300 ---------------------------------------------------------------------- src/android/ContactAccessorSdk5.java | 52 ++++++++++++++++++++++++++----- tests/tests.js | 4 +-- 2 files changed, 47 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/fe6ce1db/src/android/ContactAccessorSdk5.java ---------------------------------------------------------------------- diff --git a/src/android/ContactAccessorSdk5.java b/src/android/ContactAccessorSdk5.java index 1ddeb63..d2d44b5 100644 --- a/src/android/ContactAccessorSdk5.java +++ b/src/android/ContactAccessorSdk5.java @@ -25,6 +25,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.sql.Date; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -361,7 +362,6 @@ public class ContactAccessorSdk5 extends ContactAccessor { int colDisplayName = c.getColumnIndex(CommonDataKinds.StructuredName.DISPLAY_NAME); int colNote = c.getColumnIndex(CommonDataKinds.Note.NOTE); int colNickname = c.getColumnIndex(CommonDataKinds.Nickname.NAME); - int colBirthday = c.getColumnIndex(CommonDataKinds.Event.START_DATE); int colEventType = c.getColumnIndex(CommonDataKinds.Event.TYPE); if (c.getCount() > 0) { @@ -451,7 +451,11 @@ public class ContactAccessorSdk5 extends ContactAccessor { else if (mimetype.equals(CommonDataKinds.Event.CONTENT_ITEM_TYPE)) { if (isRequired("birthday", populate) && CommonDataKinds.Event.TYPE_BIRTHDAY == c.getInt(colEventType)) { - contact.put("birthday", c.getString(colBirthday)); + + Date birthday = getBirthday(c); + if (birthday != null) { + contact.put("birthday", birthday.getTime()); + } } } else if (mimetype.equals(CommonDataKinds.Photo.CONTENT_ITEM_TYPE) @@ -1399,15 +1403,15 @@ public class ContactAccessorSdk5 extends ContactAccessor { } // Modify birthday - String birthday = getJsonString(contact, "birthday"); + Date birthday = getBirthday(contact); if (birthday != null) { ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "=? AND " + CommonDataKinds.Event.TYPE + "=?", - new String[] { id, CommonDataKinds.Event.CONTENT_ITEM_TYPE, new String("" + CommonDataKinds.Event.TYPE_BIRTHDAY) }) + new String[]{id, CommonDataKinds.Event.CONTENT_ITEM_TYPE, "" + CommonDataKinds.Event.TYPE_BIRTHDAY}) .withValue(CommonDataKinds.Event.TYPE, CommonDataKinds.Event.TYPE_BIRTHDAY) - .withValue(CommonDataKinds.Event.START_DATE, birthday) + .withValue(CommonDataKinds.Event.START_DATE, birthday.toString()) .build()); } @@ -1792,13 +1796,13 @@ public class ContactAccessorSdk5 extends ContactAccessor { } // Add birthday - String birthday = getJsonString(contact, "birthday"); + Date birthday = getBirthday(contact); if (birthday != null) { ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, CommonDataKinds.Event.CONTENT_ITEM_TYPE) .withValue(CommonDataKinds.Event.TYPE, CommonDataKinds.Event.TYPE_BIRTHDAY) - .withValue(CommonDataKinds.Event.START_DATE, birthday) + .withValue(CommonDataKinds.Event.START_DATE, birthday.toString()) .build()); } @@ -1842,6 +1846,7 @@ public class ContactAccessorSdk5 extends ContactAccessor { null, ContactsContract.Contacts._ID + " = ?", new String[] { id }, null); + if (cursor.getCount() == 1) { cursor.moveToFirst(); String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); @@ -1854,6 +1859,39 @@ public class ContactAccessorSdk5 extends ContactAccessor { return (result > 0) ? true : false; } + /** + * Gets birthday date from contact JSON object + * @param contact an object to get birthday from + * @return birthday or null, if the field isn't present or + * is malformed in the contact + */ + private Date getBirthday(JSONObject contact) { + try { + Long timestamp = contact.getLong("birthday"); + return new Date(timestamp); + } catch (JSONException e) { + Log.e(LOG_TAG, "Could not get birthday from JSON object", e); + return null; + } + } + + /** + * Gets birthday from contacts database cursor object + * @param c cursor for the contact + * @return birthday or null, if birthday column is empty or + * the value can't be parsed into valid date object + */ + private Date getBirthday(Cursor c) { + int colBirthday = c.getColumnIndex(CommonDataKinds.Event.START_DATE); + + try { + return Date.valueOf(c.getString(colBirthday)); + } catch (IllegalArgumentException e) { + Log.e(LOG_TAG, "Failed to get birthday for contact from cursor", e); + return null; + } + } + /************************************************************************** * * All methods below this comment are used to convert from JavaScript http://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts/blob/fe6ce1db/tests/tests.js ---------------------------------------------------------------------- diff --git a/tests/tests.js b/tests/tests.js index 9a32a6e..52250e6 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -606,9 +606,9 @@ exports.defineManualTests = function(contentEl, createActionButton) { phoneNumbers[0] = new ContactField('work', '512-555-1234', true); contact.phoneNumbers = phoneNumbers; - contact.save( + contact.birthday = new Date(1985, 0, 23); - function() { + contact.save(function() { results.innerHTML = "Contact saved."; }, function(e) { if (e.code === ContactError.NOT_SUPPORTED_ERROR) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
