Commit 89be6b9d by Sebastián Katzer

Handle click event on windows platform

parent 1a6ebf04
...@@ -27,8 +27,23 @@ var Notifications = Windows.UI.Notifications, ...@@ -27,8 +27,23 @@ var Notifications = Windows.UI.Notifications,
exports.core = { exports.core = {
// Array of unactivated notifications /**
unactivatedIds: [], * Executes all queued events.
*/
deviceready: function () {
var plugin = cordova.plugins.notification.local,
args;
this.isReady = true;
for (var i = 0; i < this.eventQueue.length; i++) {
args = this.eventQueue[i];
plugin.fireEvent.apply(plugin, args);
}
this.eventQueue = [];
},
/** /**
* Schedules new local notifications. * Schedules new local notifications.
...@@ -125,42 +140,6 @@ exports.core = { ...@@ -125,42 +140,6 @@ exports.core = {
}, },
/** /**
* Cancels the local notification with the given ID.
*
* @param {String} id
* Local notification ID
*/
cancelLocalNotification: function (id) {
var notifier = this.getToastNotifier(),
history = this.getToastHistory(),
toasts = this.getScheduledToast();
history.remove('Toast' + id);
for (var i = 0; i < toasts.length; i++) {
var toast = toasts[i];
if (toast.id == id || toast.id == id + '-2') {
notifier.removeFromSchedule(toast);
}
}
},
/**
* Clears the local notification with the given ID.
*
* @param {String} id
* Local notification ID
*/
clearLocalNotification: function (id) {
this.getToastHistory().remove('Toast' + id);
if (this.isTriggered(id) && !this.isScheduled(id)) {
this.cancelLocalNotification(id);
}
},
/**
* Updates existing notifications specified by IDs in options. * Updates existing notifications specified by IDs in options.
* *
* @param {Object[]} notifications * @param {Object[]} notifications
...@@ -192,6 +171,20 @@ exports.core = { ...@@ -192,6 +171,20 @@ exports.core = {
}, },
/** /**
* Clears the local notification with the given ID.
*
* @param {String} id
* Local notification ID
*/
clearLocalNotification: function (id) {
this.getToastHistory().remove('Toast' + id);
if (this.isTriggered(id) && !this.isScheduled(id)) {
this.cancelLocalNotification(id);
}
},
/**
* Clears all notifications. * Clears all notifications.
*/ */
clearAll: function () { clearAll: function () {
...@@ -221,6 +214,28 @@ exports.core = { ...@@ -221,6 +214,28 @@ exports.core = {
}, },
/** /**
* Cancels the local notification with the given ID.
*
* @param {String} id
* Local notification ID
*/
cancelLocalNotification: function (id) {
var notifier = this.getToastNotifier(),
history = this.getToastHistory(),
toasts = this.getScheduledToasts();
history.remove('Toast' + id);
for (var i = 0; i < toasts.length; i++) {
var toast = toasts[i];
if (toast.id == id || toast.id == id + '-2') {
notifier.removeFromSchedule(toast);
}
}
},
/**
* Cancels all notifications. * Cancels all notifications.
*/ */
cancelAll: function () { cancelAll: function () {
...@@ -268,7 +283,7 @@ exports.core = { ...@@ -268,7 +283,7 @@ exports.core = {
* Lists all local notification IDs. * Lists all local notification IDs.
*/ */
getAllIds: function () { getAllIds: function () {
var toasts = this.getScheduledToast(), var toasts = this.getScheduledToasts(),
ids = []; ids = [];
for (var i = 0; i < toasts.length; i++) { for (var i = 0; i < toasts.length; i++) {
...@@ -284,7 +299,7 @@ exports.core = { ...@@ -284,7 +299,7 @@ exports.core = {
* Lists all scheduled notification IDs. * Lists all scheduled notification IDs.
*/ */
getScheduledIds: function () { getScheduledIds: function () {
var toasts = this.getScheduledToast(), var toasts = this.getScheduledToasts(),
ids = []; ids = [];
for (var i = 0; i < toasts.length; i++) { for (var i = 0; i < toasts.length; i++) {
...@@ -303,7 +318,7 @@ exports.core = { ...@@ -303,7 +318,7 @@ exports.core = {
* Lists all scheduled notification IDs. * Lists all scheduled notification IDs.
*/ */
getTriggeredIds: function () { getTriggeredIds: function () {
var toasts = this.getScheduledToast(), var toasts = this.getScheduledToasts(),
ids = []; ids = [];
for (var i = 0; i < toasts.length; i++) { for (var i = 0; i < toasts.length; i++) {
...@@ -328,7 +343,7 @@ exports.core = { ...@@ -328,7 +343,7 @@ exports.core = {
* Local notification life cycle type * Local notification life cycle type
*/ */
getAll: function (ids, type) { getAll: function (ids, type) {
var toasts = this.getScheduledToast(), var toasts = this.getScheduledToasts(),
notifications = []; notifications = [];
if (ids.length === 0) { if (ids.length === 0) {
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
* Executes all queued events. * Executes all queued events.
*/ */
exports.deviceready = function () { exports.deviceready = function () {
exports.core.deviceready();
}; };
/** /**
......
...@@ -29,6 +29,11 @@ exports = require('de.appplant.cordova.plugin.local-notification.LocalNotificati ...@@ -29,6 +29,11 @@ exports = require('de.appplant.cordova.plugin.local-notification.LocalNotificati
// True if App is running, false if suspended // True if App is running, false if suspended
exports.isInBackground = true; exports.isInBackground = true;
// Indicates if the device is ready (to receive events)
exports.isReady = false;
// Queues all events before deviceready
exports.eventQueue = [];
/******** /********
* UTIL * * UTIL *
...@@ -158,7 +163,7 @@ exports.getToastNotifier = function () { ...@@ -158,7 +163,7 @@ exports.getToastNotifier = function () {
* *
* @return Array * @return Array
*/ */
exports.getScheduledToast = function () { exports.getScheduledToasts = function () {
return this.getToastNotifier().getScheduledToastNotifications(); return this.getToastNotifier().getScheduledToastNotifications();
}; };
...@@ -229,7 +234,7 @@ exports.isToastTriggered = function (toast) { ...@@ -229,7 +234,7 @@ exports.isToastTriggered = function (toast) {
* @param Object * @param Object
*/ */
exports.findToastById = function (id) { exports.findToastById = function (id) {
var toasts = this.getScheduledToastNotifications(); var toasts = this.getScheduledToasts();
for (var i = 0; i < toasts.length; i++) { for (var i = 0; i < toasts.length; i++) {
var toast = toasts[i]; var toast = toasts[i];
...@@ -284,12 +289,19 @@ exports.getApplicationState = function () { ...@@ -284,12 +289,19 @@ exports.getApplicationState = function () {
*/ */
exports.fireEvent = function (event, notification) { exports.fireEvent = function (event, notification) {
var plugin = cordova.plugins.notification.local.core, var plugin = cordova.plugins.notification.local.core,
state = this.getApplicationState(); state = this.getApplicationState(),
args;
if (notification) { if (notification) {
plugin.fireEvent(event, notification, state); args = [event, notification, state];
} else {
args = [event, state];
}
if (this.isReady) {
plugin.fireEvent.apply(plugin, args);
} else { } else {
plugin.fireEvent(event, state); this.eventQueue.push(args);
} }
}; };
...@@ -312,3 +324,12 @@ document.addEventListener('resume', function () { ...@@ -312,3 +324,12 @@ document.addEventListener('resume', function () {
document.addEventListener('deviceready', function () { document.addEventListener('deviceready', function () {
exports.isInBackground = false; exports.isInBackground = false;
}, false); }, false);
// Handle onclick event
WinJS.Application.addEventListener('activated', function (args) {
var id = args.detail.arguments,
notification = exports.getAll([id])[0];
exports.clearLocalNotification(id);
exports.fireEvent('click', notification);
}, false);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment