mirror of
https://github.com/purplecabbage/phonegap-plugins.git
synced 2026-04-24 03:00:11 -04:00
Several things here: - Add support for the W3C notifications spec, and rewrite the old API to call the new W3C one behind the scenes. - Notifications are now automatically cleared when the user clicks. - Clicking the notification brings the user to the same instance of the app as was already running (and not a new copy as by default in Android notifications). - Support for multiple notifications from one app using tags, as specified in the W3C spec and supported by Android. - Support for canceling a single notification by tag, as per W3C spec. Callbacks to Javascript when the user clicks are specified but not yet supported; I will add that assuming I can get Android to call some code in the plugin when the notification is clicked.
120 lines
3.8 KiB
JavaScript
120 lines
3.8 KiB
JavaScript
/*
|
|
*
|
|
* Copyright (C) 2011 Dmitry Savchenko <dg.freak@gmail.com>
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person
|
|
* obtaining a copy of this software and associated documentation
|
|
* files (the "Software"), to deal in the Software without
|
|
* restriction, including without limitation the rights to use,
|
|
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following
|
|
* conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
var cordovaRef = window.PhoneGap || window.Cordova || window.cordova; // old to new fallbacks
|
|
|
|
/** @deprecated Use the W3C standard window.Notification API instead. */
|
|
var NotificationMessenger = function() { }
|
|
|
|
/**
|
|
* @param title Title of the notification
|
|
* @param body Body of the notification
|
|
* @deprecated Use the W3C standard window.Notification API instead.
|
|
*/
|
|
NotificationMessenger.prototype.notify = function(title, body) {
|
|
if (window.Notification) {
|
|
this.activeNotification = new window.Notification(title, {
|
|
body: body
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Clears the Notificaiton Bar
|
|
* @deprecated Use the W3C standard window.Notification API instead.
|
|
*/
|
|
NotificationMessenger.prototype.clear = function() {
|
|
if (this.activeNotification) {
|
|
this.activeNotification.close();
|
|
this.activeNotification = undefined;
|
|
}
|
|
}
|
|
|
|
if (!window.plugins) window.plugins = {}
|
|
if (!window.plugins.statusBarNotification) window.plugins.statusBarNotification = new NotificationMessenger();
|
|
|
|
|
|
/*
|
|
* The W3C standard API, window.Notification. See http://www.w3.org/TR/notifications/
|
|
* This API should be used for new applications instead of the old plugin API above.
|
|
*/
|
|
if (typeof window.Notification == "undefined") {
|
|
|
|
/**
|
|
* Creates and shows a new notification.
|
|
* @param title
|
|
* @param options
|
|
*/
|
|
window.Notification = function(title, options) {
|
|
options = options || {};
|
|
this.tag = options.tag || "defaultTag";
|
|
|
|
// May be undefined.
|
|
this.onclick = options.onclick;
|
|
this.onerror = options.onerror;
|
|
this.onshow = options.onshow;
|
|
this.onclose = options.onclose;
|
|
|
|
var content = title + (options.body ? "\n" + options.body : "");
|
|
|
|
cordova.exec(function() {
|
|
if (this.onshow) {
|
|
this.onshow();
|
|
}
|
|
}, function(error) {
|
|
if (this.onerror) {
|
|
this.onerror(error);
|
|
}
|
|
}, "StatusBarNotification", "notify", [this.tag, title, content]);
|
|
};
|
|
|
|
// Permission is always granted on Android.
|
|
window.Notification.permission = "granted";
|
|
|
|
window.Notification.requestPermission = function(callback) {
|
|
callback('granted');
|
|
};
|
|
|
|
|
|
/**
|
|
* Cancels a notification that has already been created and shown to the user.
|
|
*/
|
|
window.Notification.prototype.close = function() {
|
|
cordova.exec(function() {
|
|
if (this.onclose) {
|
|
this.onclose();
|
|
}
|
|
}, function(error) {
|
|
if (this.onerror) {
|
|
this.onerror(error);
|
|
}
|
|
}, "StatusBarNotification", "clear", [this.tag]);
|
|
};
|
|
}
|
|
|
|
// vim: tabstop=4:softtabstop=4:shiftwidth=4:expandtab
|