Changed search function to take filter and option parameters

This commit is contained in:
macdonst
2010-09-16 11:35:49 -04:00
parent d955502ca2
commit 8da131cc45
7 changed files with 196 additions and 689 deletions
@@ -21,12 +21,11 @@ package com.phonegap;
import java.lang.reflect.Constructor;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.webkit.WebView;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* This abstract class defines SDK-independent API for communication with
* Contacts Provider. The actual implementation used by the application depends
@@ -94,5 +93,5 @@ public abstract class ContactAccessor {
/**
* Handles searching through SDK-specific contacts API.
*/
public abstract void search(String name, String npa, String email);
public abstract void search(JSONArray filter, JSONObject options);
}
@@ -17,6 +17,9 @@
package com.phonegap;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.content.AsyncQueryHandler;
import android.database.Cursor;
@@ -54,11 +57,12 @@ public class ContactAccessorSdk3_4 extends ContactAccessor {
}
@Override
public void search(String name, String npa, String email) {
if (email.length() > 0)
searchByEmail(email);
else
searchPeople(name, npa);
public void search(JSONArray filter, JSONObject options) {
//if (email.length() > 0)
// searchByEmail(email);
//else
// searchPeople(name, npa);
searchPeople("", "");
}
private void searchByEmail(String email)
@@ -17,6 +17,10 @@
package com.phonegap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
@@ -57,8 +61,15 @@ public class ContactAccessorSdk5 extends ContactAccessor {
}
@Override
public void search(String name, String npa, String email) {
if (name.length()==0) name = "%";
public void search(JSONArray filter, JSONObject options) {
String searchTerm = "";
try {
searchTerm = options.getString("filter");
if (searchTerm.length()==0) searchTerm = "%";
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Get a cursor by creating the query.
// TODO: parse name/number/email and dispatch to different query types.
// Right now assumption is only name search. Lame but I'm on time constraints.
@@ -67,7 +78,7 @@ public class ContactAccessorSdk5 extends ContactAccessor {
ContactsContract.Contacts.CONTENT_URI,
new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.HAS_PHONE_NUMBER, ContactsContract.Contacts.DISPLAY_NAME},
ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?",
new String[] {name},
new String[] {searchTerm},
ContactsContract.Contacts.DISPLAY_NAME + " ASC");
while (cursor.moveToNext()) {
String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
+7 -277
View File
@@ -2,29 +2,19 @@ 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;
import android.provider.Contacts.ContactMethods;
import android.provider.Contacts.People;
import android.util.Log;
import android.webkit.WebView;
import android.content.Intent;
import android.net.Uri;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
@SuppressWarnings("deprecation")
public class ContactManager implements Plugin {
// public class ContactTriplet
// {
// public String name = "";
// public String email = "";
// public String phone = "";
// }
private static ContactAccessor contactAccessor;
WebView webView; // WebView object
DroidGap ctx; // DroidGap object
@@ -81,7 +71,12 @@ public class ContactManager implements Plugin {
//else if (action.equals("search")) {
if (action.equals("search")) {
Log.d(LOG_TAG, "Executing search using accessor");
contactAccessor.search(args.getString(0), args.getString(1), args.getString(2));
JSONArray fields = args.getJSONArray(0);
for (int i=0; i<fields.length(); i++) {
Log.d(LOG_TAG, "Field = " + fields.getString(i));
}
JSONObject options = args.getJSONObject(1);
contactAccessor.search(fields, options);
}
return new PluginResult(status, result);
} catch (JSONException e) {
@@ -129,269 +124,4 @@ public class ContactManager implements Plugin {
*/
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
}
//--------------------------------------------------------------------------
// LOCAL METHODS
//--------------------------------------------------------------------------
// This is to add backwards compatibility to the OLD Contacts API\
// public void getContactsAndSendBack()
// {
// String[] projection = new String[] {
// People._ID,
// People.NAME,
// People.NUMBER,
// People.PRIMARY_EMAIL_ID
// };
//
// try{
// Cursor myCursor = this.ctx.managedQuery(mPeople, projection,
// null, null , People.NAME + " ASC");
// processResults(myCursor, true);
// }
// catch (SQLiteException ex)
// {
// Log.d(LOG_TAG, ex.getMessage());
// }
// }
//
// public void search(String name, String npa, String email)
// {
//
// if (email.length() > 0)
// searchByEmail(email);
// else
// searchPeople(name, npa);
// }
//
// private void searchByEmail(String email)
// {
// String[] projection = new String[] {
// ContactMethods._ID,
// ContactMethods.DATA,
// ContactMethods.KIND,
// ContactMethods.PERSON_ID
// };
// String[] variables = new String[] {
// email
// };
//
// try{
// Cursor myCursor = this.ctx.managedQuery(mEmail, projection,
// "contact_methods." + ContactMethods.DATA + " = ?" + "AND contact_methods.kind = 1", variables , ContactMethods.DATA + " ASC");
// getMethodData(myCursor);
//
// }
// catch (SQLiteException ex)
// {
// Log.d(LOG_TAG, ex.getMessage());
// }
//
// }
//
// private void searchPeople(String name, String number)
// {
// String conditions = "";
//
// if (name.length() == 0)
// {
// name = "%";
// conditions += People.NAME + " LIKE ? AND ";
// }
// else
// {
// conditions += People.NAME + " = ? AND ";
// }
//
// if (number.length() == 0)
// number = "%";
// else
// {
// number = number.replace('+', '%');
// number = number.replace('.', '%');
// number = number.replace('-', '%');
// }
//
// conditions += People.NUMBER + " LIKE ? ";
//
// String[] projection = new String[] {
// People._ID,
// People.NAME,
// People.NUMBER,
// People.PRIMARY_EMAIL_ID
// };
//
// String[] variables = new String[] {
// name, number
// };
//
// try{
// Cursor myCursor = this.ctx.managedQuery(mPeople, projection,
// conditions, variables , People.NAME + " ASC");
// processResults(myCursor, false);
// }
// catch (SQLiteException ex)
// {
// Log.d(LOG_TAG, ex.getMessage());
// }
//
// }
//
// private void processResults(Cursor cur, boolean all){
//
// if (cur.moveToFirst()) {
//
// String name;
// String phoneNumber;
// String email_id;
// String email;
//
// int nameColumn = cur.getColumnIndex(People.NAME);
// int phoneColumn = cur.getColumnIndex(People.NUMBER);
// int emailIdColumn = cur.getColumnIndex(People.PRIMARY_EMAIL_ID);
//
// do {
// // Get the field values
// name = cur.getString(nameColumn);
// phoneNumber = cur.getString(phoneColumn);
// email_id = cur.getString(emailIdColumn);
// if (email_id != null && email_id.length() > 0)
// email = getEmail(email_id);
// else
// email = "";
//
// // Code for backwards compatibility with the OLD Contacts API
// if (all) {
// this.ctx.sendJavascript("navigator.ContactManager.droidAddContact('" + name + "','" + phoneNumber + "','" + email +"');");
// }
// else {
// this.ctx.sendJavascript("navigator.contacts.droidFoundContact('" + name + "','" + phoneNumber + "','" + email +"');");
// }
// } while (cur.moveToNext());
// if (all) {
// this.ctx.sendJavascript("navigator.ContactManager.droidDone();");
// }
// else {
// this.ctx.sendJavascript("navigator.contacts.droidDone();");
// }
// }
// else
// {
// if (all) {
// this.ctx.sendJavascript("navigator.ContactManager.fail();");
// }
// else {
// this.ctx.sendJavascript("navigator.contacts.fail('None found!');");
// }
// }
// }
//
// private void getMethodData(Cursor cur)
// {
// ContactTriplet data = new ContactTriplet();
// String id;
// String email;
//
// if (cur.moveToFirst()) {
//
// int idColumn = cur.getColumnIndex(ContactMethods._ID);
// int emailColumn = cur.getColumnIndex(ContactMethods.DATA);
// do {
// // Get the field values
// id = cur.getString(idColumn);
// email = cur.getString(emailColumn);
//
// data = getContactData(id);
// if(data != null)
// {
// data.email = email;
// this.ctx.sendJavascript("navigator.Contacts.droidFoundContact('" + data.name + "','" + data.phone + "','" + data.email +"');");
// }
// } while (cur.moveToNext());
// this.ctx.sendJavascript("navigator.contacts.droidDoneContacts();");
// }
// }
//
// private ContactTriplet getContactData(String id) {
// ContactTriplet data = null;
// String[] projection = new String[] {
// People._ID,
// People.NAME,
// People.NUMBER,
// People.PRIMARY_EMAIL_ID
// };
//
// String[] variables = new String[] {
// id
// };
//
// try{
// Cursor myCursor = this.ctx.managedQuery(mPeople, projection,
// People.PRIMARY_EMAIL_ID + " = ?", variables , People.NAME + " ASC");
// data = getTriplet(myCursor);
// }
// catch (SQLiteException ex)
// {
// Log.d(LOG_TAG, ex.getMessage());
// }
//
// return data;
// }
//
// private ContactTriplet getTriplet(Cursor cur) {
// ContactTriplet data = new ContactTriplet();
// if (cur.moveToFirst()) {
//
// int nameColumn = cur.getColumnIndex(People.NAME);
// int numberColumn = cur.getColumnIndex(People.NUMBER);
// do {
//
// data.name = cur.getString(nameColumn);
// data.phone = cur.getString(numberColumn);
//
// } while (cur.moveToNext());
// }
// return data;
// }
//
// private String getEmailColumnData(Cursor cur)
// {
// String email = "";
// if (cur != null && cur.moveToFirst()) {
// int emailColumn = cur.getColumnIndex(ContactMethods.DATA);
// do {
// // Get the field values
// email = cur.getString(emailColumn);
// } while (cur.moveToNext());
// }
// return email;
// }
//
// private String getEmail(String id)
// {
// String email = "";
// String[] projection = new String[] {
// ContactMethods._ID,
// ContactMethods.DATA,
// ContactMethods.KIND
// };
// String[] variables = new String[] {
// id
// };
//
// try
// {
// Cursor myCursor = this.ctx.managedQuery(mEmail, projection,
// "contact_methods." + ContactMethods._ID + " = ?" + " AND contact_methods.kind = 1", variables , ContactMethods.DATA + " ASC");
// email = getEmailColumnData(myCursor);
// }
// catch (SQLiteException ex)
// {
// Log.d(LOG_TAG, ex.getMessage());
// }
//
// return email;
// }
}