From 6071b9c75a581dfb9490273ba715042e2ad5d44f Mon Sep 17 00:00:00 2001 From: macdonst Date: Fri, 1 Oct 2010 11:09:59 +0800 Subject: [PATCH] Adding Contact.remove method --- framework/assets/js/contact.js | 23 +++++++++++------- framework/assets/www/phonegap.js | 24 ++++++++++++------- .../src/com/phonegap/ContactAccessor.java | 10 ++++++++ .../com/phonegap/ContactAccessorSdk3_4.java | 19 +++++++++++++++ .../src/com/phonegap/ContactAccessorSdk5.java | 18 ++++++++++++++ .../src/com/phonegap/ContactManager.java | 10 +++++++- 6 files changed, 86 insertions(+), 18 deletions(-) diff --git a/framework/assets/js/contact.js b/framework/assets/js/contact.js index d5f0529b..02bfc7f4 100644 --- a/framework/assets/js/contact.js +++ b/framework/assets/js/contact.js @@ -28,7 +28,14 @@ var Contact = function(id, displayName, name, nickname, phoneNumbers, emails, ad }; -Contact.prototype.remove = function(contact) { +Contact.prototype.remove = function(successCB, errorCB) { + if (this.id == null) { + var errorObj = new ContactError(); + errorObj.code = ContactError.NOT_FOUND_ERROR; + errorCB(errorObj); + } + + PhoneGap.execAsync(successCB, errorCB, "Contacts", "remove", [this.id]); }; Contact.prototype.clone = function() { @@ -37,7 +44,7 @@ Contact.prototype.clone = function() { return clonedContact; }; -Contact.prototype.save = function(contact) { +Contact.prototype.save = function(win, fail) { }; @@ -118,14 +125,14 @@ var ContactError = function() { this.code=null; }; -ContactError.INVALID_ARGUMENT_ERROR = 0; -ContactError.IO_ERROR = 1; +ContactError.UNKNOWN_ERROR = 0; +ContactError.INVALID_ARGUMENT_ERROR = 1; ContactError.NOT_FOUND_ERROR = 2; -ContactError.NOT_SUPPORTED_ERROR = 3; +ContactError.TIMEOUT_ERROR = 3; ContactError.PENDING_OPERATION_ERROR = 4; -ContactError.PERMISSION_DENIED_ERROR = 5; -ContactError.TIMEOUT_ERROR = 6; -ContactError.UNKNOWN_ERROR = 7; +ContactError.IO_ERROR = 5; +ContactError.NOT_SUPPORTED_ERROR = 6; +ContactError.PERMISSION_DENIED_ERROR = 20; PhoneGap.addConstructor(function() { if(typeof navigator.service == "undefined") navigator.service = new Object(); diff --git a/framework/assets/www/phonegap.js b/framework/assets/www/phonegap.js index 5c047c2f..9b3f3955 100644 --- a/framework/assets/www/phonegap.js +++ b/framework/assets/www/phonegap.js @@ -977,17 +977,23 @@ var Contact = function(id, displayName, name, nickname, phoneNumbers, emails, ad }; -Contact.prototype.remove = function(contact) { +Contact.prototype.remove = function(successCB, errorCB) { + if (this.id == null) { + var errorObj = new ContactError(); + errorObj.code = ContactError.NOT_FOUND_ERROR; + errorCB(errorObj); + } + + PhoneGap.execAsync(successCB, errorCB, "Contacts", "remove", [this.id]); }; Contact.prototype.clone = function() { - console.log("PhoneGap clone version 2"); var clonedContact = PhoneGap.clone(this); clonedContact.id = null; return clonedContact; }; -Contact.prototype.save = function(contact) { +Contact.prototype.save = function(win, fail) { }; @@ -1068,14 +1074,14 @@ var ContactError = function() { this.code=null; }; -ContactError.INVALID_ARGUMENT_ERROR = 0; -ContactError.IO_ERROR = 1; +ContactError.UNKNOWN_ERROR = 0; +ContactError.INVALID_ARGUMENT_ERROR = 1; ContactError.NOT_FOUND_ERROR = 2; -ContactError.NOT_SUPPORTED_ERROR = 3; +ContactError.TIMEOUT_ERROR = 3; ContactError.PENDING_OPERATION_ERROR = 4; -ContactError.PERMISSION_DENIED_ERROR = 5; -ContactError.TIMEOUT_ERROR = 6; -ContactError.UNKNOWN_ERROR = 7; +ContactError.IO_ERROR = 5; +ContactError.NOT_SUPPORTED_ERROR = 6; +ContactError.PERMISSION_DENIED_ERROR = 20; PhoneGap.addConstructor(function() { if(typeof navigator.service == "undefined") navigator.service = new Object(); diff --git a/framework/src/com/phonegap/ContactAccessor.java b/framework/src/com/phonegap/ContactAccessor.java index ac03c414..0fc02b41 100644 --- a/framework/src/com/phonegap/ContactAccessor.java +++ b/framework/src/com/phonegap/ContactAccessor.java @@ -83,8 +83,18 @@ public abstract class ContactAccessor { return sInstance; } + /** + * Handles adding a JSON Contact object into the database. + */ + public abstract void save(); + /** * Handles searching through SDK-specific contacts API. */ public abstract void search(JSONArray filter, JSONObject options); + + /** + * Handles removing a contact from the database. + */ + public abstract boolean remove(String id); } \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactAccessorSdk3_4.java b/framework/src/com/phonegap/ContactAccessorSdk3_4.java index 086e1052..ce608db9 100644 --- a/framework/src/com/phonegap/ContactAccessorSdk3_4.java +++ b/framework/src/com/phonegap/ContactAccessorSdk3_4.java @@ -31,6 +31,7 @@ import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; +import android.provider.ContactsContract; import android.provider.Contacts.ContactMethods; import android.provider.Contacts.ContactMethodsColumns; import android.provider.Contacts.Organizations; @@ -359,4 +360,22 @@ public class ContactAccessorSdk3_4 extends ContactAccessor { } return emails; } + + @Override + public void save() { + // TODO Auto-generated method stub + + } + + @Override + public boolean remove(String id) { + ContentResolver cr = mApp.getContentResolver(); + + int result = cr.delete(People.CONTENT_URI, "people._id = ?", new String[] {id}); + Log.d(LOG_TAG, "Content URI = " + People.CONTENT_URI); + Log.d(LOG_TAG, "Where = " + "people._id = ?"); + Log.d(LOG_TAG, "Number of rows deleted = " + result); + + return (result > 0) ? true : false; + } } \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactAccessorSdk5.java b/framework/src/com/phonegap/ContactAccessorSdk5.java index bcad148f..84117569 100644 --- a/framework/src/com/phonegap/ContactAccessorSdk5.java +++ b/framework/src/com/phonegap/ContactAccessorSdk5.java @@ -549,5 +549,23 @@ public class ContactAccessorSdk5 extends ContactAccessor { } cursor.close(); return retVal; + } + + @Override + public void save() { + // TODO Auto-generated method stub + } + + @Override + public boolean remove(String id) { + ContentResolver cr = mApp.getContentResolver(); + int result = cr.delete(ContactsContract.Data.CONTENT_URI, + ContactsContract.Data.CONTACT_ID + " = ?", + new String[] {id}); + Log.d(LOG_TAG, "Content URI = " + ContactsContract.Data.CONTENT_URI); + Log.d(LOG_TAG, "Where = " + ContactsContract.Data.CONTACT_ID + " = ?"); + Log.d(LOG_TAG, "Number of rows deleted = " + result); + + return (result > 0) ? true : false; } } \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactManager.java b/framework/src/com/phonegap/ContactManager.java index 9cf6a891..38cc899e 100755 --- a/framework/src/com/phonegap/ContactManager.java +++ b/framework/src/com/phonegap/ContactManager.java @@ -2,6 +2,7 @@ package com.phonegap; import org.json.JSONArray; import org.json.JSONException; +import org.json.JSONObject; import com.phonegap.api.Plugin; import com.phonegap.api.PluginResult; @@ -69,7 +70,14 @@ public class ContactManager implements Plugin { // TODO Coming soon! } else if (action.equals("remove")) { - // TODO Coming soon! + if (contactAccessor.remove(args.getString(0))) { + return new PluginResult(status, result); + } + else { + JSONObject r = new JSONObject(); + r.put("code", 2); + return new PluginResult(PluginResult.Status.ERROR, r); + } } return new PluginResult(status, result); } catch (JSONException e) {