Browse Source

Fix get* with single id on Android

Sebastián Katzer 10 years ago
parent
commit
c3520580a0

+ 86 - 22
src/android/LocalNotification.java

@@ -174,6 +174,15 @@ public class LocalNotification extends CordovaPlugin {
                 else if (action.equals("getTriggeredIds")) {
                     getTriggeredIds(command);
                 }
+                else if (action.equals("getSingle")) {
+                    getSingle(args, command);
+                }
+                else if (action.equals("getSingleScheduled")) {
+                    getSingleScheduled(args, command);
+                }
+                else if (action.equals("getSingleTriggered")) {
+                    getSingleTriggered(args, command);
+                }
                 else if (action.equals("getAll")) {
                     getAll(args, command);
                 }
@@ -369,23 +378,51 @@ public class LocalNotification extends CordovaPlugin {
     }
 
     /**
-     * Set of options from local notification.
+     * Options from local notification.
      *
      * @param ids
      *      Set of local notification IDs
      * @param command
      *      The callback context used when calling back into JavaScript.
      */
-    private void getAll (JSONArray ids, CallbackContext command) {
-        List<JSONObject> options;
+    private void getSingle (JSONArray ids, CallbackContext command) {
+        getOptions(ids.optString(0), Notification.Type.ALL, command);
+    }
 
-        if (ids.length() == 0) {
-            options = getNotificationMgr().getOptions();
-        } else {
-            options = getNotificationMgr().getOptionsById(toList(ids));
-        }
+    /**
+     * Options from scheduled notification.
+     *
+     * @param ids
+     *      Set of local notification IDs
+     * @param command
+     *      The callback context used when calling back into JavaScript.
+     */
+    private void getSingleScheduled (JSONArray ids, CallbackContext command) {
+        getOptions(ids.optString(0), Notification.Type.SCHEDULED, command);
+    }
 
-        command.success(new JSONArray(options));
+    /**
+     * Options from triggered notification.
+     *
+     * @param ids
+     *      Set of local notification IDs
+     * @param command
+     *      The callback context used when calling back into JavaScript.
+     */
+    private void getSingleTriggered (JSONArray ids, CallbackContext command) {
+        getOptions(ids.optString(0), Notification.Type.TRIGGERED, command);
+    }
+
+    /**
+     * Set of options from local notification.
+     *
+     * @param ids
+     *      Set of local notification IDs
+     * @param command
+     *      The callback context used when calling back into JavaScript.
+     */
+    private void getAll (JSONArray ids, CallbackContext command) {
+        getOptions(ids, Notification.Type.ALL, command);
     }
 
     /**
@@ -397,16 +434,7 @@ public class LocalNotification extends CordovaPlugin {
      *      The callback context used when calling back into JavaScript.
      */
     private void getScheduled (JSONArray ids, CallbackContext command) {
-        List<JSONObject> options;
-
-        if (ids.length() == 0) {
-            options = getNotificationMgr().getOptionsByType(Notification.Type.SCHEDULED);
-        } else {
-            options = getNotificationMgr().getOptionsBy(
-                    Notification.Type.SCHEDULED, toList(ids));
-        }
-
-        command.success(new JSONArray(options));
+        getOptions(ids, Notification.Type.SCHEDULED, command);
     }
 
     /**
@@ -418,13 +446,49 @@ public class LocalNotification extends CordovaPlugin {
      *      The callback context used when calling back into JavaScript.
      */
     private void getTriggered (JSONArray ids, CallbackContext command) {
+        getOptions(ids, Notification.Type.TRIGGERED, command);
+    }
+
+    /**
+     * Options from local notification.
+     *
+     * @param id
+     *      Set of local notification IDs
+     * @param type
+     *      The local notification life cycle type
+     * @param command
+     *      The callback context used when calling back into JavaScript.
+     */
+    private void getOptions (String id, Notification.Type type,
+                             CallbackContext command) {
+
+        JSONArray ids = new JSONArray().put(id);
+
+        JSONObject options =
+                getNotificationMgr().getOptionsBy(type, toList(ids)).get(0);
+
+        command.success(options);
+    }
+
+    /**
+     * Set of options from local notifications.
+     *
+     * @param ids
+     *      Set of local notification IDs
+     * @param type
+     *      The local notification life cycle type
+     * @param command
+     *      The callback context used when calling back into JavaScript.
+     */
+    private void getOptions (JSONArray ids, Notification.Type type,
+                             CallbackContext command) {
+
         List<JSONObject> options;
 
         if (ids.length() == 0) {
-            options = getNotificationMgr().getOptionsByType(Notification.Type.TRIGGERED);
+            options = getNotificationMgr().getOptionsByType(type);
         } else {
-            options = getNotificationMgr().getOptionsBy(
-                    Notification.Type.TRIGGERED, toList(ids));
+            options = getNotificationMgr().getOptionsBy(type, toList(ids));
         }
 
         command.success(new JSONArray(options));

+ 10 - 4
src/android/notification/Manager.java

@@ -48,7 +48,7 @@ import java.util.Set;
 public class Manager {
 
     // Context passed through constructor and used for notification builder.
-	private Context context;
+    private Context context;
 
     /**
      * Constructor
@@ -56,9 +56,9 @@ public class Manager {
      * @param context
      *      Application context
      */
-	private Manager(Context context){
-		this.context = context;
-	}
+    private Manager(Context context){
+        this.context = context;
+    }
 
     /**
      * Static method to retrieve class instance.
@@ -256,6 +256,9 @@ public class Manager {
         List<Notification> notifications = getAll();
         ArrayList<Notification> list = new ArrayList<Notification>();
 
+        if (type == Notification.Type.ALL)
+            return notifications;
+
         for (Notification notification : notifications) {
             if (notification.getType() == type) {
                 list.add(notification);
@@ -368,6 +371,9 @@ public class Manager {
     public List<JSONObject> getOptionsBy(Notification.Type type,
                                          List<Integer> ids) {
 
+        if (type == Notification.Type.ALL)
+            return getOptionsById(ids);
+
         ArrayList<JSONObject> options = new ArrayList<JSONObject>();
         List<Notification> notifications = getByIds(ids);
 

+ 1 - 1
src/android/notification/Notification.java

@@ -46,7 +46,7 @@ public class Notification {
 
     // Used to differ notifications by their life cycle state
     public static enum Type {
-        SCHEDULED, TRIGGERED
+        ALL, SCHEDULED, TRIGGERED
     }
 
     // Default receiver to handle the trigger event

+ 12 - 1
www/local-notification-core.js

@@ -275,7 +275,8 @@ exports.get = function () {
         scope    = args[2];
 
     if (!Array.isArray(ids)) {
-        ids = [ids];
+        this.exec('getSingle', ids.toString(), callback, scope);
+        return;
     }
 
     ids = this.convertIds(ids);
@@ -321,6 +322,11 @@ exports.getScheduled = function () {
         ids = [ids];
     }
 
+    if (!Array.isArray(ids)) {
+        this.exec('getSingleScheduled', ids.toString(), callback, scope);
+        return;
+    }
+
     ids = this.convertIds(ids);
 
     this.exec('getScheduled', ids, callback, scope);
@@ -364,6 +370,11 @@ exports.getTriggered = function () {
         ids = [ids];
     }
 
+    if (!Array.isArray(ids)) {
+        this.exec('getSingleTriggered', ids.toString(), callback, scope);
+        return;
+    }
+
     ids = this.convertIds(ids);
 
     this.exec('getTriggered', ids, callback, scope);