Bläddra i källkod

Added onupdate event on android, to update repeating notifications automaticaly.
Fixed Issue with date during convertProperties call in the update function.

PKnittel 11 år sedan
förälder
incheckning
7f6c1ce01e
3 ändrade filer med 78 tillägg och 6 borttagningar
  1. 0 5
      src/android/LocalNotification.java
  2. 2 0
      src/android/Receiver.java
  3. 76 1
      www/local-notification.js

+ 0 - 5
src/android/LocalNotification.java

@@ -27,7 +27,6 @@ import org.apache.cordova.CallbackContext;
 import org.apache.cordova.CordovaInterface;
 import org.apache.cordova.CordovaPlugin;
 import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.LOG;
 import org.apache.cordova.PluginResult;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -40,7 +39,6 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.os.Build;
-import android.util.Log;
 import android.annotation.TargetApi;
 
 import de.appplant.cordova.plugin.notification.*;
@@ -236,7 +234,6 @@ public class LocalNotification extends CordovaPlugin {
     	JSONObject arguments;
     	for(int i=0;i<notifications.length();i++){
     		arguments = notifications.optJSONObject(i);
-        	LOG.d("LocalNotification", arguments.toString());
     		arguments = asset.parseURIs(arguments);
     		Options options      = new Options(context).parse(arguments);
     		options.setInitDate();
@@ -415,7 +412,6 @@ public class LocalNotification extends CordovaPlugin {
 
         // webview may available, but callbacks needs to be executed
         // after deviceready
-        Log.e("FireEvent","JS-String: "+ js);
         if (deviceready == false) {
             eventQueue.add(js);
         } else {
@@ -439,7 +435,6 @@ public class LocalNotification extends CordovaPlugin {
     
     	// webview may available, but callbacks needs to be executed
     	// after deviceready
-    	Log.e("FireEvent","JS-String: "+ js);
     	if (deviceready == false) {
     		eventQueue.add(js);
     	} else {

+ 2 - 0
src/android/Receiver.java

@@ -76,6 +76,8 @@ public class Receiver extends BroadcastReceiver {
         } else if (isFirstAlarmInFuture()) {
             return;
         } else {
+        	JSONArray data = new JSONArray().put(options.getJSONObject());
+        	LocalNotification.fireEvent("updateCall", options.getId(), options.getJSON(),data);
             nWrapper.schedule(options.moveDate());
         }
         if (!LocalNotification.isInBackground && options.getForegroundMode()){

+ 76 - 1
www/local-notification.js

@@ -141,7 +141,7 @@ exports.update = function (opts, callback, scope) {
     for (var i = 0; i < notifications.length; i++) {
         var properties = notifications[i];
 
-        this.convertProperties(properties);
+        this.convertUpdateProperties(properties);
     }
 
     this.exec('update', notifications, callback, scope);
@@ -559,6 +559,42 @@ exports.oncancel = function (id, state, json, data) {};
  */
 exports.onclear = function (id, state, json, data) {};
 
+/**
+ * Get fired when a repeating notification should be updated.
+ *
+ * @param {String} id
+ *      The ID of the notification
+ * @param {String} state
+ *      Either "foreground" or "background"
+ * @param {String} json
+ *      A custom (JSON) string
+ * @param {Object} data
+ *      The notification properties
+ * @return {Object} JSONObject with updatevalues
+ */
+exports.onupdate = function (id, state, json, data) {
+	return null;
+};
+	
+/**
+ * Is called from the native part to receive the onupdate resultarray and send it back to native.
+ *
+ * @param {String} id
+ *      The ID of the notification
+ * @param {String} state
+ *      Either "foreground" or "background"
+ * @param {String} json
+ *      A custom (JSON) string
+ * @param {Object} data
+ *      The notification properties
+ */
+exports.onupdateCall = function (id, state, json, data) {
+	var updates = exports.onupdate(id, state, json, data);
+	if (updates != null){
+		updates.id = id;
+		update(updates,null,null);
+	};
+};
 
 /**
  * @private
@@ -636,6 +672,45 @@ exports.convertProperties = function (options) {
     return options;
 };
 
+/**
+ * @private
+ *
+ * Convert the passed values to their required type only for update function.
+ *
+ * @param {Object} options
+ *      Set of custom values
+ *
+ * @retrun {Object}
+ *      The converted property list
+ */
+exports.convertUpdateProperties = function (options) {
+
+    options.id         = options.id.toString();
+    options.title      = options.title.toString();
+    options.message    = options.message.toString();
+    options.autoCancel = options.autoCancel === true;
+
+    if (isNaN(options.id)) {
+        options.id = this.getDefaults().id;
+    }
+
+    if (isNaN(options.badge)) {
+        options.badge = this.getDefaults().badge;
+    }
+
+    options.badge = Number(options.badge);
+
+    if (typeof options.date == 'object') {
+        options.date = Math.round(options.date.getTime()/1000);
+    }
+
+    if (typeof options.json == 'object') {
+        options.json = JSON.stringify(options.json);
+    }
+
+    return options;
+};
+
 /**
  * @private
  *