From 6071b9c75a581dfb9490273ba715042e2ad5d44f Mon Sep 17 00:00:00 2001
From: macdonst <simon.macdonald@gmail.com>
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) {