You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ma...@apache.org on 2012/05/31 03:12:20 UTC

android commit: CB-849: Cannot search by birthday

Updated Branches:
  refs/heads/master 5f93a26ee -> c21e8c9c8


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/master
Commit: c21e8c9c87feea7d81779f6c12d92de0a0f857f7
Parents: 5f93a26
Author: macdonst <si...@gmail.com>
Authored: Wed May 30 21:07:56 2012 -0400
Committer: macdonst <si...@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 + " = ? )");