diff --git a/example/index.html b/example/index.html index e12e895b..dca39dd4 100644 --- a/example/index.html +++ b/example/index.html @@ -101,7 +101,11 @@ function get_contacts() { - navigator.ContactManager.getAllContacts(count_contacts, fail, null); + var obj = new Contact(); + var name = new ContactName(); + name.givenName = ''; + obj.name = name; + navigator.contacts.find(obj, count_contacts, fail); } function count_contacts(contacts) diff --git a/framework/src/com/phonegap/ContactAccessor.java b/framework/src/com/phonegap/ContactAccessor.java new file mode 100644 index 00000000..8f12f635 --- /dev/null +++ b/framework/src/com/phonegap/ContactAccessor.java @@ -0,0 +1,98 @@ +// Taken from Android Tutorials + +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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; + +/** + * This abstract class defines SDK-independent API for communication with + * Contacts Provider. The actual implementation used by the application depends + * on the level of API available on the device. If the API level is Cupcake or + * Donut, we want to use the {@link ContactAccessorSdk3_4} class. If it is + * Eclair or higher, we want to use {@link ContactAccessorSdk5}. + */ +public abstract class ContactAccessor { + + public class ContactTriplet + { + public String name = ""; + public String email = ""; + public String phone = ""; + } + + /** + * Static singleton instance of {@link ContactAccessor} holding the + * SDK-specific implementation of the class. + */ + private static ContactAccessor sInstance; + protected final String LOG_TAG = "ContactsAccessor"; + protected Activity mApp; + protected WebView mView; + + public static ContactAccessor getInstance(WebView view, Activity app) { + if (sInstance == null) { + String className; + + /* + * Check the version of the SDK we are running on. Choose an + * implementation class designed for that version of the SDK. + * + * Unfortunately we have to use strings to represent the class + * names. If we used the conventional ContactAccessorSdk5.class.getName() + * syntax, we would get a ClassNotFoundException at runtime on pre-Eclair SDKs. + * Using the above syntax would force Dalvik to load the class and try to + * resolve references to all other classes it uses. Since the pre-Eclair + * does not have those classes, the loading of ContactAccessorSdk5 would fail. + */ + + if (android.os.Build.VERSION.RELEASE.startsWith("1.")) { + className = "com.phonegap.ContactAccessorSdk3_4"; + } else { + className = "com.phonegap.ContactAccessorSdk5"; + } + + /* + * Find the required class by name and instantiate it. + */ + try { + Class clazz = + Class.forName(className).asSubclass(ContactAccessor.class); + // Grab constructor for contactsmanager class dynamically. + Constructor classConstructor = clazz.getConstructor(Class.forName("android.webkit.WebView"), Class.forName("android.app.Activity")); + sInstance = classConstructor.newInstance(view, app); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + return sInstance; + } + + /** + * Handles searching through SDK-specific contacts API. + */ + public abstract void search(String name, String npa, String email); +} \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactAccessorSdk3_4.java b/framework/src/com/phonegap/ContactAccessorSdk3_4.java new file mode 100644 index 00000000..a806edf3 --- /dev/null +++ b/framework/src/com/phonegap/ContactAccessorSdk3_4.java @@ -0,0 +1,287 @@ +// Taken from Android tutorials +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.phonegap; + +import android.app.Activity; +import android.content.AsyncQueryHandler; +import android.database.Cursor; +import android.database.sqlite.SQLiteException; +import android.net.Uri; +import android.provider.Contacts.ContactMethods; +import android.provider.Contacts.People; +import android.util.Log; +import android.webkit.WebView; + +/** + * An implementation of {@link ContactAccessor} that uses legacy Contacts API. + * These APIs are deprecated and should not be used unless we are running on a + * pre-Eclair SDK. + *

+ * There are several reasons why we wouldn't want to use this class on an Eclair device: + *

+ */ +@SuppressWarnings("deprecation") +public class ContactAccessorSdk3_4 extends ContactAccessor { + + private Uri mPeople = android.provider.Contacts.People.CONTENT_URI; + private Uri mPhone = android.provider.Contacts.Phones.CONTENT_URI; + private Uri mEmail = android.provider.Contacts.ContactMethods.CONTENT_URI; + + public ContactAccessorSdk3_4(WebView view, Activity app) + { + mApp = app; + mView = view; + } + + @Override + 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 = mApp.managedQuery(mEmail, projection, + "contact_methods." + ContactMethods.DATA + " = ?" + "AND contact_methods.kind = 1", variables , ContactMethods.DATA + " ASC"); + getMethodData(myCursor); + + } + catch (SQLiteException ex) + { + Log.d(this.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 = mApp.managedQuery(mPeople, projection, + conditions, variables , People.NAME + " ASC"); + processResults(myCursor, false); + } + catch (SQLiteException ex) + { + Log.d(this.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) + mView.loadUrl("javascript:navigator.ContactManager.droidAddContact('" + name + "','" + phoneNumber + "','" + email +"')"); + else + mView.loadUrl("javascript:navigator.contacts.droidFoundContact('" + name + "','" + phoneNumber + "','" + email +"')"); + + } while (cur.moveToNext()); + if (all) + mView.loadUrl("javascript:navigator.ContactManager.droidDone()"); + else + mView.loadUrl("javascript:navigator.contacts.droidDone();"); + } + else + { + if(all) + mView.loadUrl("javascript:navigator.ContactManager.fail()"); + else + mView.loadUrl("javascript: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; + mView.loadUrl("javascript:navigator.Contacts.droidFoundContact('" + data.name + "','" + data.phone + "','" + data.email +"')"); + } + } while (cur.moveToNext()); + mView.loadUrl("javascript: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 = mApp.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 = mApp.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; + } +} \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactAccessorSdk5.java b/framework/src/com/phonegap/ContactAccessorSdk5.java new file mode 100644 index 00000000..a7d27d1e --- /dev/null +++ b/framework/src/com/phonegap/ContactAccessorSdk5.java @@ -0,0 +1,108 @@ +// Taken from Android tutorials +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.phonegap; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteException; +import android.net.Uri; +import android.provider.ContactsContract; +import android.provider.Contacts.People; +import android.provider.ContactsContract.Contacts; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.util.Log; +import android.webkit.WebView; + +/** + * An implementation of {@link ContactAccessor} that uses current Contacts API. + * This class should be used on Eclair or beyond, but would not work on any earlier + * release of Android. As a matter of fact, it could not even be loaded. + *

+ * This implementation has several advantages: + *

+ */ +public class ContactAccessorSdk5 extends ContactAccessor { + + public ContactAccessorSdk5(WebView view, Activity app) + { + mApp = app; + mView = view; + } + + @Override + public void search(String name, String npa, String email) { + if (name.length()==0) name = "%"; + // 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. + ContentResolver cr = mApp.getContentResolver(); + Cursor cursor = cr.query( + 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}, + ContactsContract.Contacts.DISPLAY_NAME + " ASC"); + while (cursor.moveToNext()) { + String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); + if (contactName.trim().length() == 0) continue; + String phoneNumber = "null"; + String emailAddress = "null"; + + String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); + String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); + if (Boolean.parseBoolean(hasPhone)) { + Cursor phones = cr.query( + ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + null, + ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, + null, null); + if (phones.moveToFirst()) { + phoneNumber = "'" + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replace('\'', '`') + "'"; + } + phones.close(); + } + Cursor emails = cr.query( + ContactsContract.CommonDataKinds.Email.CONTENT_URI, + null, + ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, + null, null); + if (emails.moveToFirst()) { + // This would allow you get several email addresses + emailAddress = "'" + emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)).replace('\'', '`') + "'"; + } + emails.close(); + String contactAddJS = "javascript:navigator.contacts.droidFoundContact('" + contactName.replace('\'', '`') + "'," + phoneNumber + "," + emailAddress +")"; + mView.loadUrl(contactAddJS); + } + cursor.close(); + mView.loadUrl("javascript:navigator.contacts.droidDone();"); + } + +} \ No newline at end of file diff --git a/framework/src/com/phonegap/ContactManager.java b/framework/src/com/phonegap/ContactManager.java index 82cc5644..d498fb82 100755 --- a/framework/src/com/phonegap/ContactManager.java +++ b/framework/src/com/phonegap/ContactManager.java @@ -18,13 +18,14 @@ import android.database.sqlite.SQLiteException; @SuppressWarnings("deprecation") public class ContactManager implements Plugin { - public class ContactTriplet - { - public String name = ""; - public String email = ""; - public String phone = ""; - } +// public class ContactTriplet +// { +// public String name = ""; +// public String email = ""; +// public String phone = ""; +// } + private static ContactAccessor contactAccessor; WebView webView; // WebView object DroidGap ctx; // DroidGap object @@ -67,15 +68,20 @@ public class ContactManager implements Plugin { * @return A CommandResult object with a status and message. */ public PluginResult execute(String action, JSONArray args) { + if (contactAccessor == null) { + contactAccessor = ContactAccessor.getInstance(webView, ctx); + } PluginResult.Status status = PluginResult.Status.OK; String result = ""; try { - if (action.equals("getContactsAndSendBack")) { - this.getContactsAndSendBack(); - } - else if (action.equals("search")) { - this.search(args.getString(0), args.getString(1), args.getString(2)); + //if (action.equals("getContactsAndSendBack")) { + // contactAccessor.getContactsAndSendBack(); + //} + //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)); } return new PluginResult(status, result); } catch (JSONException e) { @@ -129,263 +135,263 @@ public class ContactManager implements Plugin { //-------------------------------------------------------------------------- // 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; - } +// 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; +// } }