mirror of
https://github.com/apache/cordova-android.git
synced 2026-04-23 00:00:09 +08:00
Changed search function to take filter and option parameters
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user