CB-849: Cannot search by birthday
Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/c21e8c9c Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/c21e8c9c Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/c21e8c9c Branch: refs/heads/CordovaWebView Commit: c21e8c9c87feea7d81779f6c12d92de0a0f857f7 Parents: 5f93a26 Author: macdonst <simon.macdon...@gmail.com> Authored: Wed May 30 21:07:56 2012 -0400 Committer: macdonst <simon.macdon...@gmail.com> Committed: Wed May 30 21:07:56 2012 -0400 ---------------------------------------------------------------------- .../src/org/apache/cordova/ContactAccessor.java | 191 +++++++-------- .../org/apache/cordova/ContactAccessorSdk5.java | 27 ++- 2 files changed, 117 insertions(+), 101 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/c21e8c9c/framework/src/org/apache/cordova/ContactAccessor.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/ContactAccessor.java b/framework/src/org/apache/cordova/ContactAccessor.java index 12669ce..d2bf66c 100644 --- a/framework/src/org/apache/cordova/ContactAccessor.java +++ b/framework/src/org/apache/cordova/ContactAccessor.java @@ -18,7 +18,6 @@ package org.apache.cordova; import java.util.HashMap; -import android.app.Activity; import android.content.Context; import android.util.Log; import android.webkit.WebView; @@ -48,21 +47,21 @@ public abstract class ContactAccessor { * @return true if the key data is required */ protected boolean isRequired(String key, HashMap<String,Boolean> map) { - Boolean retVal = map.get(key); - return (retVal == null) ? false : retVal.booleanValue(); - } + Boolean retVal = map.get(key); + return (retVal == null) ? false : retVal.booleanValue(); + } /** * Create a hash map of what data needs to be populated in the Contact object * @param fields the list of fields to populate * @return the hash map of required data */ - protected HashMap<String,Boolean> buildPopulationSet(JSONArray fields) { - HashMap<String,Boolean> map = new HashMap<String,Boolean>(); + protected HashMap<String,Boolean> buildPopulationSet(JSONArray fields) { + HashMap<String,Boolean> map = new HashMap<String,Boolean>(); - String key; - try { - if (fields.length() == 1 && fields.getString(0).equals("*")) { + String key; + try { + if (fields.length() == 1 && fields.getString(0).equals("*")) { map.put("displayName", true); map.put("name", true); map.put("nickname", true); @@ -76,90 +75,90 @@ public abstract class ContactAccessor { map.put("urls", true); map.put("photos", true); map.put("categories", true); - } - else { - for (int i=0; i<fields.length(); i++) { - key = fields.getString(i); - if (key.startsWith("displayName")) { - map.put("displayName", true); - } - else if (key.startsWith("name")) { - map.put("displayName", true); - map.put("name", true); - } - else if (key.startsWith("nickname")) { - map.put("nickname", true); - } - else if (key.startsWith("phoneNumbers")) { - map.put("phoneNumbers", true); - } - else if (key.startsWith("emails")) { - map.put("emails", true); - } - else if (key.startsWith("addresses")) { - map.put("addresses", true); - } - else if (key.startsWith("ims")) { - map.put("ims", true); - } - else if (key.startsWith("organizations")) { - map.put("organizations", true); - } - else if (key.startsWith("birthday")) { - map.put("birthday", true); - } - else if (key.startsWith("note")) { - map.put("note", true); - } - else if (key.startsWith("urls")) { - map.put("urls", true); - } + } + else { + for (int i=0; i<fields.length(); i++) { + key = fields.getString(i); + if (key.startsWith("displayName")) { + map.put("displayName", true); + } + else if (key.startsWith("name")) { + map.put("displayName", true); + map.put("name", true); + } + else if (key.startsWith("nickname")) { + map.put("nickname", true); + } + else if (key.startsWith("phoneNumbers")) { + map.put("phoneNumbers", true); + } + else if (key.startsWith("emails")) { + map.put("emails", true); + } + else if (key.startsWith("addresses")) { + map.put("addresses", true); + } + else if (key.startsWith("ims")) { + map.put("ims", true); + } + else if (key.startsWith("organizations")) { + map.put("organizations", true); + } + else if (key.startsWith("birthday")) { + map.put("birthday", true); + } + else if (key.startsWith("note")) { + map.put("note", true); + } + else if (key.startsWith("urls")) { + map.put("urls", true); + } else if (key.startsWith("photos")) { map.put("photos", true); } else if (key.startsWith("categories")) { map.put("categories", true); } - } + } + } } + catch (JSONException e) { + Log.e(LOG_TAG, e.getMessage(), e); + } + return map; } - catch (JSONException e) { - Log.e(LOG_TAG, e.getMessage(), e); - } - return map; - } - /** - * Convenience method to get a string from a JSON object. Saves a - * lot of try/catch writing. - * If the property is not found in the object null will be returned. - * - * @param obj contact object to search - * @param property to be looked up - * @return The value of the property - */ - protected String getJsonString(JSONObject obj, String property) { - String value = null; - try { - if (obj != null) { - value = obj.getString(property); - if (value.equals("null")) { - Log.d(LOG_TAG, property + " is string called 'null'"); - value = null; - } + /** + * Convenience method to get a string from a JSON object. Saves a + * lot of try/catch writing. + * If the property is not found in the object null will be returned. + * + * @param obj contact object to search + * @param property to be looked up + * @return The value of the property + */ + protected String getJsonString(JSONObject obj, String property) { + String value = null; + try { + if (obj != null) { + value = obj.getString(property); + if (value.equals("null")) { + Log.d(LOG_TAG, property + " is string called 'null'"); + value = null; + } + } } + catch (JSONException e) { + Log.d(LOG_TAG, "Could not get = " + e.getMessage()); + } + return value; } - catch (JSONException e) { - Log.d(LOG_TAG, "Could not get = " + e.getMessage()); - } - return value; - } /** * Handles adding a JSON Contact object into the database. * @return TODO */ - public abstract String save(JSONObject contact); + public abstract String save(JSONObject contact); /** * Handles searching through SDK-specific contacts API. @@ -175,25 +174,25 @@ public abstract class ContactAccessor { /** * Handles removing a contact from the database. */ - public abstract boolean remove(String id); + public abstract boolean remove(String id); - /** - * A class that represents the where clause to be used in the database query - */ - class WhereOptions { - private String where; - private String[] whereArgs; - public void setWhere(String where) { - this.where = where; - } - public String getWhere() { - return where; - } - public void setWhereArgs(String[] whereArgs) { - this.whereArgs = whereArgs; - } - public String[] getWhereArgs() { - return whereArgs; + /** + * A class that represents the where clause to be used in the database query + */ + class WhereOptions { + private String where; + private String[] whereArgs; + public void setWhere(String where) { + this.where = where; + } + public String getWhere() { + return where; + } + public void setWhereArgs(String[] whereArgs) { + this.whereArgs = whereArgs; + } + public String[] getWhereArgs() { + return whereArgs; + } } - } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/c21e8c9c/framework/src/org/apache/cordova/ContactAccessorSdk5.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/ContactAccessorSdk5.java b/framework/src/org/apache/cordova/ContactAccessorSdk5.java index 2237e7e..9e672e9 100644 --- a/framework/src/org/apache/cordova/ContactAccessorSdk5.java +++ b/framework/src/org/apache/cordova/ContactAccessorSdk5.java @@ -25,7 +25,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -111,7 +114,7 @@ public class ContactAccessorSdk5 extends ContactAccessor { dbMap.put("organizations.name", ContactsContract.CommonDataKinds.Organization.COMPANY); dbMap.put("organizations.department", ContactsContract.CommonDataKinds.Organization.DEPARTMENT); dbMap.put("organizations.title", ContactsContract.CommonDataKinds.Organization.TITLE); - dbMap.put("birthday", ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE); + dbMap.put("birthday", ContactsContract.CommonDataKinds.Event.START_DATE); dbMap.put("note", ContactsContract.CommonDataKinds.Note.NOTE); dbMap.put("photos.value", ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); //dbMap.put("categories.value", null); @@ -579,10 +582,24 @@ public class ContactAccessorSdk5 extends ContactAccessor { whereArgs.add(searchTerm); whereArgs.add(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE); } -// else if (key.startsWith("birthday")) { -// where.add("(" + dbMap.get(key) + " LIKE ? AND " -// + ContactsContract.Data.MIMETYPE + " = ? )"); -// } + else if (key.startsWith("birthday")) { + try { + SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); + Date searchDate = format.parse(searchTerm.substring(1, searchTerm.length()-1)); + // Have to subtract one from the month as JavaScript's January is 01 + // while Java's January is 00. + searchDate.setMonth(searchDate.getMonth()-1); + SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd"); + + where.add("(" + dbMap.get(key) + " = ? AND " + + ContactsContract.Data.MIMETYPE + " = ? )"); + whereArgs.add(newFormat.format(searchDate)); + whereArgs.add(ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE); + } + catch (ParseException e) { + Log.d(LOG_TAG, "Bad romance format"); + } + } else if (key.startsWith("note")) { where.add("(" + dbMap.get(key) + " LIKE ? AND " + ContactsContract.Data.MIMETYPE + " = ? )");