Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cordova-plugin-local-notifications
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nabil Sadki
cordova-plugin-local-notifications
Commits
ca85d768
Commit
ca85d768
authored
Jun 29, 2017
by
Sebastián Katzer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Comment out everything eccept ios
parent
4f195194
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
1879 additions
and
2000 deletions
+1879
-2000
plugin.xml
plugin.xml
+9
-19
APPLocalNotification.h
src/ios/APPLocalNotification.h
+45
-46
APPLocalNotification.m
src/ios/APPLocalNotification.m
+804
-844
local-notification-core.js
www/local-notification-core.js
+444
-462
local-notification-util.js
www/local-notification-util.js
+272
-284
local-notification.js
www/local-notification.js
+305
-345
No files found.
plugin.xml
View file @
ca85d768
...
...
@@ -2,8 +2,8 @@
<plugin
xmlns=
"http://apache.org/cordova/ns/plugins/1.0"
xmlns:android=
"http://schemas.android.com/apk/res/android"
id=
"
de.appplant.cordova.plugin.local-notification
"
version=
"0.
8.5
"
>
id=
"
cordova-plugin-local-notifications
"
version=
"0.
0.0
"
>
<name>
LocalNotification
</name>
...
...
@@ -27,12 +27,11 @@
<!-- dependencies -->
<dependency
id=
"cordova-plugin-device"
/>
<
dependency
id=
"cordova-plugin-app-event"
/
>
<
!-- <dependency id="cordova-plugin-app-event" /> --
>
<!-- js -->
<js-module
src=
"www/local-notification.js"
name=
"LocalNotification"
>
<clobbers
target=
"cordova.plugins.notification.local"
/>
<clobbers
target=
"plugin.notification.local"
/>
</js-module>
<js-module
src=
"www/local-notification-core.js"
name=
"LocalNotification.Core"
>
...
...
@@ -60,7 +59,7 @@
<header-file
src=
"src/ios/APPLocalNotification.h"
/>
<source-file
src=
"src/ios/APPLocalNotification.m"
/>
<header-file
src=
"src/ios/APPLocalNotificationOptions.h"
/>
<
!-- <
header-file src="src/ios/APPLocalNotificationOptions.h" />
<source-file src="src/ios/APPLocalNotificationOptions.m" />
<header-file src="src/ios/UNUserNotificationCenter+APPLocalNotification.h" />
...
...
@@ -70,21 +69,12 @@
<source-file src="src/ios/UNMutableNotificationContent+APPLocalNotification.m" />
<header-file src="src/ios/UNNotificationRequest+APPLocalNotification.h" />
<source-file
src=
"src/ios/UNNotificationRequest+APPLocalNotification.m"
/>
<header-file
src=
"src/ios9/APPLocalNotificationOptions.ios9.h"
/>
<source-file
src=
"src/ios9/APPLocalNotificationOptions.ios9.m"
/>
<header-file
src=
"src/ios9/UIApplication+APPLocalNotification.ios9.h"
/>
<source-file
src=
"src/ios9/UIApplication+APPLocalNotification.ios9.m"
/>
<header-file
src=
"src/ios9/UILocalNotification+APPLocalNotification.ios9.h"
/>
<source-file
src=
"src/ios9/UILocalNotification+APPLocalNotification.ios9.m"
/>
<source-file src="src/ios/UNNotificationRequest+APPLocalNotification.m" /> -->
</platform>
<!-- android -->
<platform
name=
"android"
>
<
!-- <
platform name="android">
<framework src="com.android.support:support-v4:+" value="gradle" />
...
...
@@ -205,10 +195,10 @@
src="src/android/notification/TriggerReceiver.java"
target-dir="src/de/appplant/cordova/plugin/notification" />
</platform>
</platform>
-->
<!-- windows -->
<platform
name=
"windows"
>
<
!-- <
platform name="windows">
<config-file target="config.xml" parent="/*" >
<preference name="WindowsToastCapable" value="true" />
...
...
@@ -226,6 +216,6 @@
<merges target="" />
</js-module>
</platform>
</platform>
-->
</plugin>
src/ios/APPLocalNotification.h
View file @
ca85d768
/*
* Copyright (c) 2013
-2015 by appPlant UG
. All rights reserved.
* Copyright (c) 2013
by appPlant GmbH
. All rights reserved.
*
* @APPPLANT_LICENSE_HEADER_START@
*
...
...
@@ -21,7 +21,6 @@
* @APPPLANT_LICENSE_HEADER_END@
*/
#import <Foundation/Foundation.h>
#import <Cordova/CDVPlugin.h>
@import
UserNotifications
;
...
...
@@ -31,50 +30,50 @@
// Execute all queued events
-
(
void
)
deviceready
:
(
CDVInvokedUrlCommand
*
)
command
;
//
Inform if the app has the
permission to show notifications
-
(
void
)
hasPermission
:(
CDVInvokedUrlCommand
*
)
command
;
// Re
gister
permission to show notifications
-
(
void
)
re
gisterPermission
:(
CDVInvokedUrlCommand
*
)
command
;
//
Check
permission to show notifications
-
(
void
)
check
:(
CDVInvokedUrlCommand
*
)
command
;
// Re
quest
permission to show notifications
-
(
void
)
re
quest
:(
CDVInvokedUrlCommand
*
)
command
;
// Schedule set of notifications
-
(
void
)
schedule
:(
CDVInvokedUrlCommand
*
)
command
;
// Update set of notifications
-
(
void
)
update
:(
CDVInvokedUrlCommand
*
)
command
;
// Cancel set of notifications
-
(
void
)
cancel
:(
CDVInvokedUrlCommand
*
)
command
;
// Cancel all notifications
-
(
void
)
cancelAll
:(
CDVInvokedUrlCommand
*
)
command
;
// Clear set of notifications
-
(
void
)
clear
:(
CDVInvokedUrlCommand
*
)
command
;
// Clear all notifications
-
(
void
)
clearAll
:(
CDVInvokedUrlCommand
*
)
command
;
// If a notification with an ID is present
-
(
void
)
isPresent
:(
CDVInvokedUrlCommand
*
)
command
;
// If a notification with an ID is scheduled
-
(
void
)
isScheduled
:(
CDVInvokedUrlCommand
*
)
command
;
// If a notification with an ID is triggered
-
(
void
)
isTriggered
:(
CDVInvokedUrlCommand
*
)
command
;
// List all ids from all local notifications
-
(
void
)
getAllIds
:(
CDVInvokedUrlCommand
*
)
command
;
// List all ids from all pending notifications
-
(
void
)
getScheduledIds
:(
CDVInvokedUrlCommand
*
)
command
;
// List all ids from all triggered notifications
-
(
void
)
getTriggeredIds
:(
CDVInvokedUrlCommand
*
)
command
;
// Propertys for given local notification
-
(
void
)
getSingle
:(
CDVInvokedUrlCommand
*
)
command
;
// Propertya for given scheduled notification
-
(
void
)
getSingleScheduled
:(
CDVInvokedUrlCommand
*
)
command
;
// Propertys for given triggered notification
-
(
void
)
getSingleTriggered
:(
CDVInvokedUrlCommand
*
)
command
;
// Property list for given local notifications
-
(
void
)
getAll
:(
CDVInvokedUrlCommand
*
)
command
;
// Property list for given scheduled notifications
-
(
void
)
getScheduled
:(
CDVInvokedUrlCommand
*
)
command
;
// Property list for given triggered notifications
-
(
void
)
getTriggered
:(
CDVInvokedUrlCommand
*
)
command
;
//
//
Schedule set of notifications
//
- (void) schedule:(CDVInvokedUrlCommand*)command;
//
//
Update set of notifications
//
- (void) update:(CDVInvokedUrlCommand*)command;
//
//
Cancel set of notifications
//
- (void) cancel:(CDVInvokedUrlCommand*)command;
//
//
Cancel all notifications
//
- (void) cancelAll:(CDVInvokedUrlCommand*)command;
//
//
Clear set of notifications
//
- (void) clear:(CDVInvokedUrlCommand*)command;
//
//
Clear all notifications
//
- (void) clearAll:(CDVInvokedUrlCommand*)command;
//
//
//
If a notification with an ID is present
//
- (void) isPresent:(CDVInvokedUrlCommand*)command;
//
//
If a notification with an ID is scheduled
//
- (void) isScheduled:(CDVInvokedUrlCommand*)command;
//
//
If a notification with an ID is triggered
//
- (void) isTriggered:(CDVInvokedUrlCommand*)command;
//
//
//
List all ids from all local notifications
//
- (void) getAllIds:(CDVInvokedUrlCommand*)command;
//
//
List all ids from all pending notifications
//
- (void) getScheduledIds:(CDVInvokedUrlCommand*)command;
//
//
List all ids from all triggered notifications
//
- (void) getTriggeredIds:(CDVInvokedUrlCommand*)command;
//
//
//
Propertys for given local notification
//
- (void) getSingle:(CDVInvokedUrlCommand*)command;
//
//
Propertya for given scheduled notification
//
- (void) getSingleScheduled:(CDVInvokedUrlCommand*)command;
//
//
Propertys for given triggered notification
//
- (void) getSingleTriggered:(CDVInvokedUrlCommand*)command;
//
//
//
Property list for given local notifications
//
- (void) getAll:(CDVInvokedUrlCommand*)command;
//
//
Property list for given scheduled notifications
//
- (void) getScheduled:(CDVInvokedUrlCommand*)command;
//
//
Property list for given triggered notifications
//
- (void) getTriggered:(CDVInvokedUrlCommand*)command;
@end
src/ios/APPLocalNotification.m
View file @
ca85d768
/*
* Copyright (c) 2013
-2015 by appPlant UG
. All rights reserved.
* Copyright (c) 2013
by appPlant GmbH
. All rights reserved.
*
* @APPPLANT_LICENSE_HEADER_START@
*
...
...
@@ -22,16 +22,10 @@
*/
#import "APPLocalNotification.h"
#import "APPLocalNotificationOptions.h"
#import "UNUserNotificationCenter+APPLocalNotification.h"
#import "UNNotificationRequest+APPLocalNotification.h"
#import "UNMutableNotificationContent+APPLocalNotification.h"
#import "APPLocalNotificationOptions.ios9.h"
#import "UIApplication+APPLocalNotification.ios9.h"
#import "UILocalNotification+APPLocalNotification.ios9.h"
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
//#import "APPLocalNotificationOptions.h"
//#import "UNUserNotificationCenter+APPLocalNotification.h"
//#import "UNNotificationRequest+APPLocalNotification.h"
//#import "UNMutableNotificationContent+APPLocalNotification.h"
@interface
APPLocalNotification
()
...
...
@@ -69,413 +63,486 @@
[
eventQueue
removeAllObjects
];
}
//
///**
// * Schedule a set of notifications.
// *
// * @param properties
// * A dict of properties for each notification
// */
//- (void) schedule:(CDVInvokedUrlCommand*)command
//{
// NSArray* notifications = command.arguments;
//
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSDictionary* options in notifications) {
// UNMutableNotificationContent* notification;
//
// notification = [[UNMutableNotificationContent alloc]
// initWithOptions:options];
//
// [self scheduleNotification:notification];
// //[self fireEvent:@"add" notification:notification];
// }
// } else {
// for (NSDictionary* options in notifications) {
// UILocalNotification* notification;
//
// notification = [[UILocalNotification alloc]
// initWithOptions:options];
//
// [self scheduleLocalNotification:[notification copy]];
// [self fireEvent:@"schedule" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
//
///**
// * Update a set of notifications.
// *
// * @param properties
// * A dict of properties for each notification
// */
//- (void) update:(CDVInvokedUrlCommand*)command
//{
// NSArray* notifications = command.arguments;
//
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UNNotificationRequest* notification;
//
// notification = [self.center getNotificationWithId:id];
//
// if (!notification)
// continue;
//
// // [self updateNotification:[notification copy]
// // withOptions:options];
// //
// // [self fireEvent:@"update" notification:notification];
// //
// // if (notifications.count > 1) {
// // [NSThread sleepForTimeInterval:0.01];
// // }
// }
// } else {
// for (NSDictionary* options in notifications) {
// NSNumber* id = [options objectForKey:@"id"];
// UILocalNotification* notification;
//
// notification = [self.app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self updateLocalNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" localnotification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
// }
// }
//
// [self execCallback:command];
// }];
//}
//
///**
// * Cancel a set of notifications.
// *
// * @param ids
// * The IDs of the notifications
// */
//- (void) cancel:(CDVInvokedUrlCommand*)command
//{
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSNumber* id in command.arguments) {
// UNNotificationRequest* notification;
//
// notification = [self.center getNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self.center cancelNotification:notification];
// [self fireEvent:@"cancel" notification:notification];
// }
// } else {
// for (NSNumber* id in command.arguments) {
// UILocalNotification* notification;
//
// notification = [self.app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self.app cancelLocalNotification:notification];
// [self fireEvent:@"cancel" localnotification:notification];
// }
// }
//
// [self execCallback:command];
// }];
//}
//
///**
// * Cancel all local notifications.
// */
//- (void) cancelAll:(CDVInvokedUrlCommand*)command
//{
// [self.commandDelegate runInBackground:^{
// [self cancelAllNotifications];
// [self fireEvent:@"cancelall"];
// [self execCallback:command];
// }];
//}
//
///**
// * Clear a set of notifications.
// *
// * @param ids
// * The IDs of the notifications
// */
//- (void) clear:(CDVInvokedUrlCommand*)command
//{
// [self.commandDelegate runInBackground:^{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// for (NSNumber* id in command.arguments) {
// UNNotificationRequest* notification;
//
// notification = [self.center getNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self.center clearNotification:notification];
// [self fireEvent:@"clear" notification:notification];
// }
// } else {
// for (NSNumber* id in command.arguments) {
// UILocalNotification* notification;
//
// notification = [self.app localNotificationWithId:id];
//
// if (!notification)
// continue;
//
// [self.app clearLocalNotification:notification];
// [self fireEvent:@"clear" localnotification:notification];
// }
// }
//
// [self execCallback:command];
// }];
//}
//
///**
// * Clear all local notifications.
// */
//- (void) clearAll:(CDVInvokedUrlCommand*)command
//{
// [self.commandDelegate runInBackground:^{
// [self clearAllNotifications];
// [self fireEvent:@"clearall"];
// [self execCallback:command];
// }];
//}
//
///**
// * If a notification by ID is present.
// *
// * @param id
// * The ID of the notification
// */
//- (void) isPresent:(CDVInvokedUrlCommand *)command
//{
// [self isPresent:command type:NotifcationTypeAll];
//}
//
///**
// * If a notification by ID is scheduled.
// *
// * @param id
// * The ID of the notification
// */
//- (void) isScheduled:(CDVInvokedUrlCommand*)command
//{
// [self isPresent:command type:NotifcationTypeScheduled];
//}
//
///**
// * Check if a notification with an ID is triggered.
// *
// * @param id
// * The ID of the notification
// */
//- (void) isTriggered:(CDVInvokedUrlCommand*)command
//{
// [self isPresent:command type:NotifcationTypeTriggered];
//}
//
///**
// * Check if a notification with an ID exists.
// *
// * @param type
// * The notification life cycle type
// */
//- (void) isPresent:(CDVInvokedUrlCommand*)command
// type:(APPNotificationType)type;
//{
// [self.commandDelegate runInBackground:^{
// NSNumber* id = [command argumentAtIndex:0];
// BOOL exist;
//
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// exist = [self.center notificationExist:id type:type];
// } else {
// if (type == NotifcationTypeAll) {
// exist = [self.app localNotificationExist:id];
// } else {
// exist = [self.app localNotificationExist:id type:type];
// }
// }
//
// CDVPluginResult* result;
// result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
// messageAsBool:exist];
//
// [self.commandDelegate sendPluginResult:result
// callbackId:command.callbackId];
// }];
//}
//
///**
// * List all ids from all local notifications.
// */
//- (void) getAllIds:(CDVInvokedUrlCommand*)command
//{
// [self getIds:command byType:NotifcationTypeAll];
//}
//
///**
// * List all ids from all pending notifications.
// */
//- (void) getScheduledIds:(CDVInvokedUrlCommand*)command
//{
// [self getIds:command byType:NotifcationTypeScheduled];
//}
//
///**
// * List all ids from all triggered notifications.
// */
//- (void) getTriggeredIds:(CDVInvokedUrlCommand*)command
//{
// [self getIds:command byType:NotifcationTypeTriggered];
//}
//
///**
// * List of ids for given local notifications.
// *
// * @param type
// * Notification life cycle type
// * @param ids
// * The IDs of the notifications
// */
//- (void) getIds:(CDVInvokedUrlCommand*)command
// byType:(APPNotificationType)type;
//{
// [self.commandDelegate runInBackground:^{
// NSArray* ids;
//
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// ids = [self.center getNotificationIdsByType:type];
// } else {
// if (type == NotifcationTypeAll) {
// ids = [self.app localNotificationIds];
// } else {
// ids = [self.app localNotificationIdsByType:type];
// }
// }
//
// CDVPluginResult* result;
// result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
// messageAsArray:ids];
//
// [self.commandDelegate sendPluginResult:result
// callbackId:command.callbackId];
// }];
//}
//
///**
// * Propertys for given local notification.
// */
//- (void) getSingle:(CDVInvokedUrlCommand*)command
//{
// [self getOption:command byType:NotifcationTypeAll];
//}
//
///**
// * Propertya for given scheduled notification.
// */
//- (void) getSingleScheduled:(CDVInvokedUrlCommand*)command
//{
// [self getOption:command byType:NotifcationTypeScheduled];
//}
//
//// Propertys for given triggered notification
//- (void) getSingleTriggered:(CDVInvokedUrlCommand*)command
//{
// [self getOption:command byType:NotifcationTypeTriggered];
//}
//
///**
// * Property list for given local notifications.
// *
// * @param ids
// * The IDs of the notifications
// */
//- (void) getAll:(CDVInvokedUrlCommand*)command
//{
// [self getOptions:command byType:NotifcationTypeAll];
//}
//
///**
// * Property list for given scheduled notifications.
// *
// * @param ids
// * The IDs of the notifications
// */
//- (void) getScheduled:(CDVInvokedUrlCommand*)command
//{
// [self getOptions:command byType:NotifcationTypeScheduled];
//}
//
///**
// * Property list for given triggered notifications.
// *
// * @param ids
// * The IDs of the notifications
// */
//- (void) getTriggered:(CDVInvokedUrlCommand *)command
//{
// [self getOptions:command byType:NotifcationTypeTriggered];
//}
//
///**
// * Propertys for given triggered notification.
// *
// * @param type
// * Notification life cycle type
// * @param ids
// * The ID of the notification
// */
//- (void) getOption:(CDVInvokedUrlCommand*)command
// byType:(APPNotificationType)type;
//{
// [self.commandDelegate runInBackground:^{
// NSArray* ids = command.arguments;
// NSArray* notifications;
//
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// notifications = [self.center getNotificationOptionsByType:type
// andId:ids];
// } else {
// if (type == NotifcationTypeAll) {
// notifications = [self.app localNotificationOptionsById:ids];
// }
// else {
// notifications = [self.app localNotificationOptionsByType:type
// andId:ids];
// }
// }
//
// CDVPluginResult* result;
// result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
// messageAsDictionary:[notifications firstObject]];
//
// [self.commandDelegate sendPluginResult:result
// callbackId:command.callbackId];
// }];
//}
//
///**
// * Property list for given triggered notifications.
// *
// * @param type
// * Notification life cycle type
// * @param ids
// * The IDs of the notifications
// */
//- (void) getOptions:(CDVInvokedUrlCommand*)command
// byType:(APPNotificationType)type;
//{
// [self.commandDelegate runInBackground:^{
// NSArray* ids = command.arguments;
// NSArray* notifications;
//
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// if (type == NotifcationTypeAll && ids.count == 0) {
// notifications = [self.center getNotificationOptions];
// }
// else if (type == NotifcationTypeAll) {
// notifications = [self.center getNotificationOptionsById:ids];
// }
// else if (ids.count == 0) {
// notifications = [self.center getNotificationOptionsByType:type];
// }
// else {
// notifications = [self.center getNotificationOptionsByType:type
// andId:ids];
// }
// } else {
// if (type == NotifcationTypeAll && ids.count == 0) {
// notifications = [self.app localNotificationOptions];
// }
// else if (type == NotifcationTypeAll) {
// notifications = [self.app localNotificationOptionsById:ids];
// }
// else if (ids.count == 0) {
// notifications = [self.app localNotificationOptionsByType:type];
// }
// else {
// notifications = [self.app localNotificationOptionsByType:type
// andId:ids];
// }
// }
//
// CDVPluginResult* result;
// result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
// messageAsArray:notifications];
//
// [self.commandDelegate sendPluginResult:result
// callbackId:command.callbackId];
// }];
//}
/**
* Schedule a set of notifications.
*
* @param properties
* A dict of properties for each notification
*/
-
(
void
)
schedule
:(
CDVInvokedUrlCommand
*
)
command
{
NSArray
*
notifications
=
command
.
arguments
;
[
self
.
commandDelegate
runInBackground
:
^
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
for
(
NSDictionary
*
options
in
notifications
)
{
UNMutableNotificationContent
*
notification
;
notification
=
[[
UNMutableNotificationContent
alloc
]
initWithOptions
:
options
];
[
self
scheduleNotification
:
notification
];
//[self fireEvent:@"add" notification:notification];
}
}
else
{
for
(
NSDictionary
*
options
in
notifications
)
{
UILocalNotification
*
notification
;
notification
=
[[
UILocalNotification
alloc
]
initWithOptions
:
options
];
[
self
scheduleLocalNotification
:[
notification
copy
]];
[
self
fireEvent
:
@"schedule"
localnotification
:
notification
];
if
(
notifications
.
count
>
1
)
{
[
NSThread
sleepForTimeInterval
:
0
.
01
];
}
}
}
[
self
execCallback
:
command
];
}];
}
/**
* Update a set of notifications.
*
* @param properties
* A dict of properties for each notification
*/
-
(
void
)
update
:(
CDVInvokedUrlCommand
*
)
command
{
NSArray
*
notifications
=
command
.
arguments
;
[
self
.
commandDelegate
runInBackground
:
^
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
for
(
NSDictionary
*
options
in
notifications
)
{
NSNumber
*
id
=
[
options
objectForKey
:
@"id"
];
UNNotificationRequest
*
notification
;
notification
=
[
self
.
center
getNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
// [self updateNotification:[notification copy]
// withOptions:options];
//
// [self fireEvent:@"update" notification:notification];
//
// if (notifications.count > 1) {
// [NSThread sleepForTimeInterval:0.01];
// }
}
}
else
{
for
(
NSDictionary
*
options
in
notifications
)
{
NSNumber
*
id
=
[
options
objectForKey
:
@"id"
];
UILocalNotification
*
notification
;
notification
=
[
self
.
app
localNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
[
self
updateLocalNotification
:[
notification
copy
]
withOptions
:
options
];
[
self
fireEvent
:
@"update"
localnotification
:
notification
];
if
(
notifications
.
count
>
1
)
{
[
NSThread
sleepForTimeInterval
:
0
.
01
];
}
}
}
[
self
execCallback
:
command
];
}];
}
/**
* Cancel a set of notifications.
*
* @param ids
* The IDs of the notifications
*/
-
(
void
)
cancel
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
for
(
NSNumber
*
id
in
command
.
arguments
)
{
UNNotificationRequest
*
notification
;
notification
=
[
self
.
center
getNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
[
self
.
center
cancelNotification
:
notification
];
[
self
fireEvent
:
@"cancel"
notification
:
notification
];
}
}
else
{
for
(
NSNumber
*
id
in
command
.
arguments
)
{
UILocalNotification
*
notification
;
notification
=
[
self
.
app
localNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
[
self
.
app
cancelLocalNotification
:
notification
];
[
self
fireEvent
:
@"cancel"
localnotification
:
notification
];
}
}
[
self
execCallback
:
command
];
}];
}
/**
* Cancel all local notifications.
*/
-
(
void
)
cancelAll
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
[
self
cancelAllNotifications
];
[
self
fireEvent
:
@"cancelall"
];
[
self
execCallback
:
command
];
}];
}
/**
* Clear a set of notifications.
*
* @param ids
* The IDs of the notifications
*/
-
(
void
)
clear
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
for
(
NSNumber
*
id
in
command
.
arguments
)
{
UNNotificationRequest
*
notification
;
notification
=
[
self
.
center
getNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
[
self
.
center
clearNotification
:
notification
];
[
self
fireEvent
:
@"clear"
notification
:
notification
];
}
}
else
{
for
(
NSNumber
*
id
in
command
.
arguments
)
{
UILocalNotification
*
notification
;
notification
=
[
self
.
app
localNotificationWithId
:
id
];
if
(
!
notification
)
continue
;
[
self
.
app
clearLocalNotification
:
notification
];
[
self
fireEvent
:
@"clear"
localnotification
:
notification
];
}
}
[
self
execCallback
:
command
];
}];
}
/**
* Clear all local notifications.
*/
-
(
void
)
clearAll
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
[
self
clearAllNotifications
];
[
self
fireEvent
:
@"clearall"
];
[
self
execCallback
:
command
];
}];
}
/**
* If a notification by ID is present.
*
* @param id
* The ID of the notification
*/
-
(
void
)
isPresent
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
isPresent
:
command
type
:
NotifcationTypeAll
];
}
/**
* If a notification by ID is scheduled.
*
* @param id
* The ID of the notification
*/
-
(
void
)
isScheduled
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
isPresent
:
command
type
:
NotifcationTypeScheduled
];
}
/**
* Check if a notification with an ID is triggered.
*
* @param id
* The ID of the notification
*/
-
(
void
)
isTriggered
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
isPresent
:
command
type
:
NotifcationTypeTriggered
];
}
/**
* Check if a notification with an ID exists.
*
* @param type
* The notification life cycle type
*/
-
(
void
)
isPresent
:(
CDVInvokedUrlCommand
*
)
command
type
:(
APPNotificationType
)
type
;
{
[
self
.
commandDelegate
runInBackground
:
^
{
NSNumber
*
id
=
[
command
argumentAtIndex
:
0
];
BOOL
exist
;
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
exist
=
[
self
.
center
notificationExist
:
id
type
:
type
];
}
else
{
if
(
type
==
NotifcationTypeAll
)
{
exist
=
[
self
.
app
localNotificationExist
:
id
];
}
else
{
exist
=
[
self
.
app
localNotificationExist
:
id
type
:
type
];
}
}
CDVPluginResult
*
result
;
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsBool
:
exist
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
}];
}
/**
* List all ids from all local notifications.
*/
-
(
void
)
getAllIds
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getIds
:
command
byType
:
NotifcationTypeAll
];
}
/**
* List all ids from all pending notifications.
*/
-
(
void
)
getScheduledIds
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getIds
:
command
byType
:
NotifcationTypeScheduled
];
}
/**
* List all ids from all triggered notifications.
*/
-
(
void
)
getTriggeredIds
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getIds
:
command
byType
:
NotifcationTypeTriggered
];
}
/**
* List of ids for given local notifications.
*
* @param type
* Notification life cycle type
* @param ids
* The IDs of the notifications
*/
-
(
void
)
getIds
:
(
CDVInvokedUrlCommand
*
)
command
byType
:
(
APPNotificationType
)
type
;
{
[
self
.
commandDelegate
runInBackground
:
^
{
NSArray
*
ids
;
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
ids
=
[
self
.
center
getNotificationIdsByType
:
type
];
}
else
{
if
(
type
==
NotifcationTypeAll
)
{
ids
=
[
self
.
app
localNotificationIds
];
}
else
{
ids
=
[
self
.
app
localNotificationIdsByType
:
type
];
}
}
CDVPluginResult
*
result
;
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsArray
:
ids
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
}];
}
/**
* Propertys for given local notification.
*/
-
(
void
)
getSingle
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOption
:
command
byType
:
NotifcationTypeAll
];
}
/**
* Propertya for given scheduled notification.
*/
-
(
void
)
getSingleScheduled
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOption
:
command
byType
:
NotifcationTypeScheduled
];
}
// Propertys for given triggered notification
-
(
void
)
getSingleTriggered
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOption
:
command
byType
:
NotifcationTypeTriggered
];
}
/**
* Property list for given local notifications.
*
* @param ids
* The IDs of the notifications
*/
-
(
void
)
getAll
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOptions
:
command
byType
:
NotifcationTypeAll
];
}
/**
* Property list for given scheduled notifications.
*
* @param ids
* The IDs of the notifications
*/
-
(
void
)
getScheduled
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOptions
:
command
byType
:
NotifcationTypeScheduled
];
}
/**
* Property list for given triggered notifications.
*
* @param ids
* The IDs of the notifications
*/
-
(
void
)
getTriggered
:
(
CDVInvokedUrlCommand
*
)
command
{
[
self
getOptions
:
command
byType
:
NotifcationTypeTriggered
];
}
/**
* Propertys for given triggered notification.
*
* @param type
* Notification life cycle type
* @param ids
* The ID of the notification
* Check for permission to show notifications.
*/
-
(
void
)
getOption
:
(
CDVInvokedUrlCommand
*
)
command
byType
:
(
APPNotificationType
)
type
;
-
(
void
)
check
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
NSArray
*
ids
=
command
.
arguments
;
NSArray
*
notifications
;
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
notifications
=
[
self
.
center
getNotificationOptionsByType
:
type
andId
:
ids
];
}
else
{
if
(
type
==
NotifcationTypeAll
)
{
notifications
=
[
self
.
app
localNotificationOptionsById
:
ids
];
}
else
{
notifications
=
[
self
.
app
localNotificationOptionsByType
:
type
andId
:
ids
];
}
}
[
self
.
center
getNotificationSettingsWithCompletionHandler
:
^
(
UNNotificationSettings
*
settings
)
{
BOOL
authorized
=
settings
.
authorizationStatus
==
UNAuthorizationStatusAuthorized
;
BOOL
enabled
=
settings
.
notificationCenterSetting
==
UNNotificationSettingEnabled
;
BOOL
permitted
=
authorized
&&
enabled
;
CDVPluginResult
*
result
;
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsDictionary
:[
notifications
firstObject
]
];
messageAsBool
:
permitted
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
...
...
@@ -483,221 +550,114 @@
}
/**
* Property list for given triggered notifications.
*
* @param type
* Notification life cycle type
* @param ids
* The IDs of the notifications
* Request for permission to show notifcations.
*/
-
(
void
)
getOptions
:
(
CDVInvokedUrlCommand
*
)
command
byType
:
(
APPNotificationType
)
type
;
-
(
void
)
request
:(
CDVInvokedUrlCommand
*
)
command
{
[
self
.
commandDelegate
runInBackground
:
^
{
NSArray
*
ids
=
command
.
arguments
;
NSArray
*
notifications
;
UNAuthorizationOptions
options
=
(
UNAuthorizationOptionBadge
|
UNAuthorizationOptionSound
|
UNAuthorizationOptionAlert
);
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
if
(
type
==
NotifcationTypeAll
&&
ids
.
count
==
0
)
{
notifications
=
[
self
.
center
getNotificationOptions
];
}
else
if
(
type
==
NotifcationTypeAll
)
{
notifications
=
[
self
.
center
getNotificationOptionsById
:
ids
];
}
else
if
(
ids
.
count
==
0
)
{
notifications
=
[
self
.
center
getNotificationOptionsByType
:
type
];
}
else
{
notifications
=
[
self
.
center
getNotificationOptionsByType
:
type
andId
:
ids
];
}
}
else
{
if
(
type
==
NotifcationTypeAll
&&
ids
.
count
==
0
)
{
notifications
=
[
self
.
app
localNotificationOptions
];
}
else
if
(
type
==
NotifcationTypeAll
)
{
notifications
=
[
self
.
app
localNotificationOptionsById
:
ids
];
}
else
if
(
ids
.
count
==
0
)
{
notifications
=
[
self
.
app
localNotificationOptionsByType
:
type
];
}
else
{
notifications
=
[
self
.
app
localNotificationOptionsByType
:
type
andId
:
ids
];
}
}
CDVPluginResult
*
result
;
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsArray
:
notifications
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
[
self
.
center
requestAuthorizationWithOptions
:
options
completionHandler
:
^
(
BOOL
granted
,
NSError
*
e
)
{
[
self
check
:
command
];
}];
}
/**
* Inform if the app has the permission to show
* badges and local notifications.
*/
-
(
void
)
hasPermission
:
(
CDVInvokedUrlCommand
*
)
command
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
[
self
.
commandDelegate
runInBackground
:
^
{
[
self
.
center
getNotificationSettingsWithCompletionHandler
:
^
(
UNNotificationSettings
*
settings
)
{
BOOL
authorized
=
settings
.
authorizationStatus
==
UNAuthorizationStatusAuthorized
;
BOOL
enabled
=
settings
.
notificationCenterSetting
==
UNNotificationSettingEnabled
;
BOOL
permitted
=
authorized
&&
enabled
;
CDVPluginResult
*
result
;
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsBool
:
permitted
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
}];
}];
}
else
{
[
self
.
commandDelegate
runInBackground
:
^
{
CDVPluginResult
*
result
;
BOOL
hasPermission
;
hasPermission
=
[
self
.
app
hasPermissionToScheduleLocalNotifications
];
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
messageAsBool
:
hasPermission
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
}];
}
}
/**
* Ask for permission to show badges.
*/
-
(
void
)
registerPermission
:
(
CDVInvokedUrlCommand
*
)
command
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
[
self
.
commandDelegate
runInBackground
:
^
{
UNAuthorizationOptions
options
=
(
UNAuthorizationOptionBadge
|
UNAuthorizationOptionSound
|
UNAuthorizationOptionAlert
);
[
self
.
center
requestAuthorizationWithOptions
:
options
completionHandler
:
^
(
BOOL
granted
,
NSError
*
e
)
{
[
self
hasPermission
:
command
];
}];
}];
}
else
{
if
([[
UIApplication
sharedApplication
]
respondsToSelector
:
@selector
(
registerUserNotificationSettings
:)])
{
_command
=
command
;
[
self
.
commandDelegate
runInBackground
:
^
{
[
self
.
app
registerPermissionToScheduleLocalNotifications
];
}];
}
else
{
[
self
hasPermission
:
command
];
}
}
}
#pragma mark -
#pragma mark Core Logic
/**
* Schedule the local notification.
*/
-
(
void
)
scheduleNotification
:
(
UNMutableNotificationContent
*
)
notification
{
[
self
.
center
addNotificationRequest
:
notification
.
request
withCompletionHandler
:
^
(
NSError
*
e
)
{
[
self
fireEvent
:
@"add"
notification
:
notification
.
request
];
}];
}
/**
* Update the local notification.
*/
-
(
void
)
updateNotification
:
(
UILocalNotification
*
)
notification
withOptions
:
(
NSDictionary
*
)
newOptions
{
NSMutableDictionary
*
options
=
[
notification
.
userInfo
mutableCopy
];
[
options
addEntriesFromDictionary
:
newOptions
];
[
options
setObject
:[
NSDate
date
]
forKey
:
@"updatedAt"
];
// notification = [[UILocalNotification alloc]
// initWithOptions:options];
///**
// * Schedule the local notification.
// */
//- (void) scheduleNotification:(UNMutableNotificationContent*)notification
//{
// [self.center addNotificationRequest:notification.request
// withCompletionHandler:^(NSError* e) {
// [self fireEvent:@"add" notification:notification.request];
// }];
//}
//
// [self scheduleLocalNotification:notification];
}
/**
* Cancel all local notifications.
*/
-
(
void
)
cancelAllNotifications
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
[
self
.
center
cancelAllNotifications
];
}
else
{
[
self
.
app
cancelAllLocalNotifications
];
}
[
self
.
app
setApplicationIconBadgeNumber
:
0
];
}
/**
* Clear all local notifications.
*/
-
(
void
)
clearAllNotifications
{
if
(
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
(
@"10.0"
))
{
[
self
.
center
clearAllNotifications
];
}
else
{
[
self
.
app
clearAllLocalNotifications
];
}
[
self
.
app
setApplicationIconBadgeNumber
:
0
];
}
#pragma mark -
#pragma mark Delegates
/**
* Called when a notification is delivered to a foreground app.
*/
-
(
void
)
userNotificationCenter
:
(
UNUserNotificationCenter
*
)
center
willPresentNotification
:
(
UNNotification
*
)
notification
withCompletionHandler
:
(
void
(
^
)(
UNNotificationPresentationOptions
))
completionHandler
{
[
self
fireEvent
:
@"trigger"
notification
:
notification
.
request
];
completionHandler
(
UNAuthorizationOptionBadge
|
UNAuthorizationOptionSound
|
UNAuthorizationOptionAlert
);
}
/**
* Called to let your app know which action was selected by the user for a given
* notification.
*/
-
(
void
)
userNotificationCenter
:
(
UNUserNotificationCenter
*
)
center
didReceiveNotificationResponse
:
(
UNNotificationResponse
*
)
response
withCompletionHandler
:
(
void
(
^
)())
completionHandler
{
UNNotificationRequest
*
notification
=
response
.
notification
.
request
;
[
self
fireEvent
:
@"click"
notification
:
notification
];
if
([
notification
.
options
isRepeating
])
{
[
self
.
center
clearNotification
:
notification
];
[
self
fireEvent
:
@"clear"
notification
:
notification
];
}
else
{
[
self
.
center
cancelNotification
:
notification
];
[
self
fireEvent
:
@"cancel"
notification
:
notification
];
}
completionHandler
();
}
///**
// * Update the local notification.
// */
//- (void) updateNotification:(UILocalNotification*)notification
// withOptions:(NSDictionary*)newOptions
//{
// NSMutableDictionary* options = [notification.userInfo mutableCopy];
//
// [options addEntriesFromDictionary:newOptions];
// [options setObject:[NSDate date] forKey:@"updatedAt"];
//
//// notification = [[UILocalNotification alloc]
//// initWithOptions:options];
////
//// [self scheduleLocalNotification:notification];
//}
//
///**
// * Cancel all local notifications.
// */
//- (void) cancelAllNotifications
//{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// [self.center cancelAllNotifications];
// } else {
// [self.app cancelAllLocalNotifications];
// }
//
// [self.app setApplicationIconBadgeNumber:0];
//}
//
///**
// * Clear all local notifications.
// */
//- (void) clearAllNotifications
//{
// if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
// [self.center clearAllNotifications];
// } else {
// [self.app clearAllLocalNotifications];
// }
//
// [self.app setApplicationIconBadgeNumber:0];
//}
//
//#pragma mark -
//#pragma mark Delegates
//
///**
// * Called when a notification is delivered to a foreground app.
// */
//- (void) userNotificationCenter:(UNUserNotificationCenter *)center
// willPresentNotification:(UNNotification *)notification
// withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
//{
// [self fireEvent:@"trigger" notification:notification.request];
// completionHandler(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert);
//}
//
//
///**
// * Called to let your app know which action was selected by the user for a given
// * notification.
// */
//- (void) userNotificationCenter:(UNUserNotificationCenter *)center
// didReceiveNotificationResponse:(UNNotificationResponse *)response
// withCompletionHandler:(void (^)())completionHandler
//{
// UNNotificationRequest* notification = response.notification.request;
//
// [self fireEvent:@"click" notification:notification];
//
// if ([notification.options isRepeating]) {
// [self.center clearNotification:notification];
// [self fireEvent:@"clear" notification:notification];
// } else {
// [self.center cancelNotification:notification];
// [self fireEvent:@"cancel" notification:notification];
// }
//
// completionHandler();
//}
#pragma mark -
#pragma mark Life Cycle
...
...
@@ -715,40 +675,40 @@
#pragma mark -
#pragma mark Helper
/**
* Retrieves the application state
*
* @return
* Either "background" or "foreground"
*/
-
(
NSString
*
)
applicationState
{
UIApplicationState
state
=
[
self
.
app
applicationState
];
bool
isActive
=
state
==
UIApplicationStateActive
;
return
isActive
?
@"foreground"
:
@"background"
;
}
/**
* Simply invokes the callback without any parameter.
*/
-
(
void
)
execCallback
:
(
CDVInvokedUrlCommand
*
)
command
{
CDVPluginResult
*
result
=
[
CDVPluginResult
resultWithStatus
:
CDVCommandStatus_OK
];
[
self
.
commandDelegate
sendPluginResult
:
result
callbackId
:
command
.
callbackId
];
}
/**
* Short hand for shared application instance.
*/
-
(
UIApplication
*
)
app
{
return
[
UIApplication
sharedApplication
];
}
/
//
**
//
* Retrieves the application state
//
*
//
* @return
//
* Either "background" or "foreground"
//
*/
//
- (NSString*) applicationState
//
{
//
UIApplicationState state = [self.app applicationState];
//
//
bool isActive = state == UIApplicationStateActive;
//
//
return isActive ? @"foreground" : @"background";
//
}
//
/
//
**
//
* Simply invokes the callback without any parameter.
//
*/
//
- (void) execCallback:(CDVInvokedUrlCommand*)command
//
{
//
CDVPluginResult *result = [CDVPluginResult
//
resultWithStatus:CDVCommandStatus_OK];
//
//
[self.commandDelegate sendPluginResult:result
//
callbackId:command.callbackId];
//
}
//
/
//
**
//
* Short hand for shared application instance.
//
*/
//
- (UIApplication*) app
//
{
//
return [UIApplication sharedApplication];
//
}
/**
* Short hand for current notification center.
...
...
@@ -758,199 +718,199 @@
return
[
UNUserNotificationCenter
currentNotificationCenter
];
}
/**
* Fire general event.
*/
-
(
void
)
fireEvent
:
(
NSString
*
)
event
{
[
self
fireEvent
:
event
notification
:
NULL
];
}
/**
* Fire event for local notification.
*/
-
(
void
)
fireEvent
:
(
NSString
*
)
event
notification
:
(
UNNotificationRequest
*
)
notification
{
NSString
*
js
;
NSString
*
appState
=
[
self
applicationState
];
NSString
*
params
=
[
NSString
stringWithFormat
:
@"
\"
%@
\"
"
,
appState
];
if
(
notification
)
{
NSString
*
args
=
[
notification
encodeToJSON
];
params
=
[
NSString
stringWithFormat
:
@"%@,'%@'"
,
args
,
appState
];
}
js
=
[
NSString
stringWithFormat
:
@"cordova.plugins.notification.local.core.fireEvent('%@', %@)"
,
event
,
params
];
if
(
deviceready
)
{
[
self
.
commandDelegate
evalJs
:
js
];
}
else
{
[
self
.
eventQueue
addObject
:
js
];
}
}
#pragma mark -
#pragma mark ios 9
/**
* Schedule the local notification.
*/
-
(
void
)
scheduleLocalNotification
:
(
UILocalNotification
*
)
notification
{
[
self
cancelForerunnerLocalNotification
:
notification
];
[
self
.
app
scheduleLocalNotification
:
notification
];
}
/**
* Update the local notification.
*/
-
(
void
)
updateLocalNotification
:
(
UILocalNotification
*
)
notification
withOptions
:
(
NSDictionary
*
)
newOptions
{
NSMutableDictionary
*
options
=
[
notification
.
userInfo
mutableCopy
];
[
options
addEntriesFromDictionary
:
newOptions
];
[
options
setObject
:[
NSDate
date
]
forKey
:
@"updatedAt"
];
notification
=
[[
UILocalNotification
alloc
]
initWithOptions
:
options
];
[
self
scheduleLocalNotification
:
notification
];
}
/**
* Cancel a maybe given forerunner with the same ID.
*/
-
(
void
)
cancelForerunnerLocalNotification
:
(
UILocalNotification
*
)
notification
{
NSNumber
*
id
=
notification
.
options
.
id
;
UILocalNotification
*
forerunner
;
forerunner
=
[
self
.
app
localNotificationWithId
:
id
];
if
(
!
forerunner
)
return
;
[
self
.
app
cancelLocalNotification
:
forerunner
];
}
/**
* Cancels all non-repeating local notification older then
* a specific amount of seconds
*/
-
(
void
)
cancelAllNotificationsWhichAreOlderThen
:
(
float
)
seconds
{
NSArray
*
notifications
;
notifications
=
[
self
.
app
localNotifications
];
for
(
UILocalNotification
*
notification
in
notifications
)
{
if
(
!
[
notification
isRepeating
]
&&
notification
.
timeIntervalSinceFireDate
>
seconds
)
{
[
self
.
app
cancelLocalNotification
:
notification
];
[
self
fireEvent
:
@"cancel"
localnotification
:
notification
];
}
}
}
/**
* Calls the cancel or trigger event after a local notification was received.
* Cancels the local notification if autoCancel was set to true.
*/
-
(
void
)
didReceiveLocalNotification
:
(
NSNotification
*
)
localNotification
{
UILocalNotification
*
notification
=
[
localNotification
object
];
if
([
notification
userInfo
]
==
NULL
||
[
notification
wasUpdated
])
return
;
NSTimeInterval
timeInterval
=
[
notification
timeIntervalSinceLastTrigger
];
NSString
*
event
=
timeInterval
<
0
.
2
&&
deviceready
?
@"trigger"
:
@"click"
;
[
self
fireEvent
:
event
localnotification
:
notification
];
if
(
!
[
event
isEqualToString
:
@"click"
])
return
;
if
([
notification
isRepeating
])
{
[
self
fireEvent
:
@"clear"
localnotification
:
notification
];
}
else
{
[
self
.
app
cancelLocalNotification
:
notification
];
[
self
fireEvent
:
@"cancel"
localnotification
:
notification
];
}
}
/**
* Called when app has started
* (by clicking on a local notification).
*/
-
(
void
)
didFinishLaunchingWithOptions
:
(
NSNotification
*
)
notification
{
NSDictionary
*
launchOptions
=
[
notification
userInfo
];
UILocalNotification
*
localNotification
;
localNotification
=
[
launchOptions
objectForKey
:
UIApplicationLaunchOptionsLocalNotificationKey
];
if
(
localNotification
)
{
[
self
didReceiveLocalNotification
:
[
NSNotification
notificationWithName
:
CDVLocalNotification
object
:
localNotification
]];
}
}
/**
* Called on notification settings registration is completed.
*/
-
(
void
)
didRegisterUserNotificationSettings
:
(
UIUserNotificationSettings
*
)
settings
{
if
(
_command
)
{
[
self
hasPermission
:
_command
];
_command
=
NULL
;
}
}
/**
* Cancels all single non-repeating notifications which are older then 5 days
* before the app terminates.
*/
-
(
void
)
onAppTerminate
{
[
self
cancelAllNotificationsWhichAreOlderThen
:
432000
];
}
/**
* Fire event for local notification.
*/
-
(
void
)
fireEvent
:
(
NSString
*
)
event
localnotification
:
(
UILocalNotification
*
)
notification
{
NSString
*
js
;
NSString
*
params
=
[
NSString
stringWithFormat
:
@"
\"
%@
\"
"
,
self
.
applicationState
];
if
(
notification
)
{
NSString
*
args
=
[
notification
encodeToJSON
];
params
=
[
NSString
stringWithFormat
:
@"%@,'%@'"
,
args
,
self
.
applicationState
];
}
js
=
[
NSString
stringWithFormat
:
@"cordova.plugins.notification.local.core.fireEvent('%@', %@)"
,
event
,
params
];
if
(
deviceready
)
{
[
self
.
commandDelegate
evalJs
:
js
];
}
else
{
[
self
.
eventQueue
addObject
:
js
];
}
}
/
//
**
//
* Fire general event.
//
*/
//
- (void) fireEvent:(NSString*)event
//
{
//
[self fireEvent:event notification:NULL];
//
}
//
/
//
**
//
* Fire event for local notification.
//
*/
//
- (void) fireEvent:(NSString*)event
//
notification:(UNNotificationRequest*)notification
//
{
//
NSString* js;
//
NSString* appState = [self applicationState];
//
NSString* params = [NSString stringWithFormat:@"\"%@\"", appState];
//
//
if (notification) {
//
NSString* args = [notification encodeToJSON];
//
params = [NSString stringWithFormat:@"%@,'%@'", args, appState];
//
}
//
//
js = [NSString stringWithFormat:
//
@"cordova.plugins.notification.local.core.fireEvent('%@', %@)",
//
event, params];
//
//
if (deviceready) {
//
[self.commandDelegate evalJs:js];
//
} else {
//
[self.eventQueue addObject:js];
//
}
//
}
//
//
#pragma mark -
//
#pragma mark ios 9
//
/
//
**
//
* Schedule the local notification.
//
*/
//
- (void) scheduleLocalNotification:(UILocalNotification*)notification
//
{
//
[self cancelForerunnerLocalNotification:notification];
//
[self.app scheduleLocalNotification:notification];
//
}
//
/
//
**
//
* Update the local notification.
//
*/
//
- (void) updateLocalNotification:(UILocalNotification*)notification
//
withOptions:(NSDictionary*)newOptions
//
{
//
NSMutableDictionary* options = [notification.userInfo mutableCopy];
//
//
[options addEntriesFromDictionary:newOptions];
//
[options setObject:[NSDate date] forKey:@"updatedAt"];
//
//
notification = [[UILocalNotification alloc]
//
initWithOptions:options];
//
//
[self scheduleLocalNotification:notification];
//
}
//
/
//
**
//
* Cancel a maybe given forerunner with the same ID.
//
*/
//
- (void) cancelForerunnerLocalNotification:(UILocalNotification*)notification
//
{
//
NSNumber* id = notification.options.id;
//
UILocalNotification* forerunner;
//
//
forerunner = [self.app localNotificationWithId:id];
//
//
if (!forerunner)
//
return;
//
//
[self.app cancelLocalNotification:forerunner];
//
}
//
/
//
**
//
* Cancels all non-repeating local notification older then
//
* a specific amount of seconds
//
*/
//
- (void) cancelAllNotificationsWhichAreOlderThen:(float)seconds
//
{
//
NSArray* notifications;
//
//
notifications = [self.app localNotifications];
//
//
for (UILocalNotification* notification in notifications)
//
{
//
if (![notification isRepeating]
//
&& notification.timeIntervalSinceFireDate > seconds)
//
{
//
[self.app cancelLocalNotification:notification];
//
[self fireEvent:@"cancel" localnotification:notification];
//
}
//
}
//
}
//
/
//
**
//
* Calls the cancel or trigger event after a local notification was received.
//
* Cancels the local notification if autoCancel was set to true.
//
*/
//
- (void) didReceiveLocalNotification:(NSNotification*)localNotification
//
{
//
UILocalNotification* notification = [localNotification object];
//
//
if ([notification userInfo] == NULL || [notification wasUpdated])
//
return;
//
//
NSTimeInterval timeInterval = [notification timeIntervalSinceLastTrigger];
//
NSString* event = timeInterval < 0.2 && deviceready ? @"trigger" : @"click";
//
//
[self fireEvent:event localnotification:notification];
//
//
if (![event isEqualToString:@"click"])
//
return;
//
//
if ([notification isRepeating]) {
//
[self fireEvent:@"clear" localnotification:notification];
//
} else {
//
[self.app cancelLocalNotification:notification];
//
[self fireEvent:@"cancel" localnotification:notification];
//
}
//
}
//
/
//
**
//
* Called when app has started
//
* (by clicking on a local notification).
//
*/
//
- (void) didFinishLaunchingWithOptions:(NSNotification*)notification
//
{
//
NSDictionary* launchOptions = [notification userInfo];
//
//
UILocalNotification* localNotification;
//
//
localNotification = [launchOptions objectForKey:
//
UIApplicationLaunchOptionsLocalNotificationKey];
//
//
if (localNotification) {
//
[self didReceiveLocalNotification:
//
[NSNotification notificationWithName:CDVLocalNotification
//
object:localNotification]];
//
}
//
}
//
/
//
**
//
* Called on notification settings registration is completed.
//
*/
//
- (void) didRegisterUserNotificationSettings:(UIUserNotificationSettings*)settings
//
{
//
if (_command) {
//
[self hasPermission:_command];
//
_command = NULL;
//
}
//
}
//
/
//
**
//
* Cancels all single non-repeating notifications which are older then 5 days
//
* before the app terminates.
//
*/
//
- (void) onAppTerminate
//
{
//
[self cancelAllNotificationsWhichAreOlderThen:432000];
//
}
//
/
//
**
//
* Fire event for local notification.
//
*/
//
- (void) fireEvent:(NSString*)event localnotification:(UILocalNotification*)notification
//
{
//
NSString* js;
//
NSString* params = [NSString stringWithFormat:
//
@"\"%@\"", self.applicationState];
//
//
if (notification) {
//
NSString* args = [notification encodeToJSON];
//
//
params = [NSString stringWithFormat:
//
@"%@,'%@'",
//
args, self.applicationState];
//
}
//
//
js = [NSString stringWithFormat:
//
@"cordova.plugins.notification.local.core.fireEvent('%@', %@)",
//
event, params];
//
//
if (deviceready) {
//
[self.commandDelegate evalJs:js];
//
} else {
//
[self.eventQueue addObject:js];
//
}
//
}
@end
www/local-notification-core.js
View file @
ca85d768
/*
* Copyright (c) 2013-2015 by appPlant UG. All rights reserved.
*
* @APPPLANT_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
...
...
@@ -17,404 +13,17 @@
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPPLANT_LICENSE_HEADER_END@
*/
var
exec
=
require
(
'cordova/exec'
);
/********
* CORE *
********/
/**
* Returns the default settings.
*
* @return {Object}
*/
exports
.
getDefaults
=
function
()
{
return
this
.
_defaults
;
};
/**
* Overwrite default settings.
*
* @param {Object} defaults
*/
exports
.
setDefaults
=
function
(
newDefaults
)
{
var
defaults
=
this
.
getDefaults
();
for
(
var
key
in
defaults
)
{
if
(
newDefaults
.
hasOwnProperty
(
key
))
{
defaults
[
key
]
=
newDefaults
[
key
];
}
}
};
/**
* Schedule a new local notification.
*
* @param {Object} msgs
* The notification properties
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object?} scope
* The scope for the callback function
* @param {Object?} args
* skipPermission:true schedules the notifications immediatly without
* registering or checking for permission
*/
exports
.
schedule
=
function
(
msgs
,
callback
,
scope
,
args
)
{
var
fn
=
function
(
granted
)
{
if
(
!
granted
)
return
;
var
notifications
=
Array
.
isArray
(
msgs
)
?
msgs
:
[
msgs
];
for
(
var
i
=
0
;
i
<
notifications
.
length
;
i
++
)
{
var
notification
=
notifications
[
i
];
this
.
mergeWithDefaults
(
notification
);
this
.
convertProperties
(
notification
);
}
this
.
exec
(
'schedule'
,
notifications
,
callback
,
scope
);
};
if
(
args
&&
args
.
skipPermission
)
{
fn
.
call
(
this
,
true
);
}
else
{
this
.
registerPermission
(
fn
,
this
);
}
};
/**
* Update existing notifications specified by IDs in options.
*
* @param {Object} notifications
* The notification properties to update
* @param {Function} callback
* A function to be called after the notification has been updated
* @param {Object?} scope
* The scope for the callback function
* @param {Object?} args
* skipPermission:true schedules the notifications immediatly without
* registering or checking for permission
*/
exports
.
update
=
function
(
msgs
,
callback
,
scope
,
args
)
{
var
fn
=
function
(
granted
)
{
if
(
!
granted
)
return
;
var
notifications
=
Array
.
isArray
(
msgs
)
?
msgs
:
[
msgs
];
for
(
var
i
=
0
;
i
<
notifications
.
length
;
i
++
)
{
var
notification
=
notifications
[
i
];
this
.
convertProperties
(
notification
);
}
this
.
exec
(
'update'
,
notifications
,
callback
,
scope
);
};
if
(
args
&&
args
.
skipPermission
)
{
fn
.
call
(
this
,
true
);
}
else
{
this
.
registerPermission
(
fn
,
this
);
}
};
/**
* Clear the specified notification.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A function to be called after the notification has been cleared
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
clear
=
function
(
ids
,
callback
,
scope
)
{
ids
=
Array
.
isArray
(
ids
)
?
ids
:
[
ids
];
ids
=
this
.
convertIds
(
ids
);
this
.
exec
(
'clear'
,
ids
,
callback
,
scope
);
};
/**
* Clear all previously sheduled notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been cleared
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
clearAll
=
function
(
callback
,
scope
)
{
this
.
exec
(
'clearAll'
,
null
,
callback
,
scope
);
};
/**
* Cancel the specified notifications.
*
* @param {String[]} ids
* The IDs of the notifications
* @param {Function} callback
* A function to be called after the notifications has been canceled
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
cancel
=
function
(
ids
,
callback
,
scope
)
{
ids
=
Array
.
isArray
(
ids
)
?
ids
:
[
ids
];
ids
=
this
.
convertIds
(
ids
);
this
.
exec
(
'cancel'
,
ids
,
callback
,
scope
);
};
/**
* Remove all previously registered notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been canceled
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
cancelAll
=
function
(
callback
,
scope
)
{
this
.
exec
(
'cancelAll'
,
null
,
callback
,
scope
);
};
/**
* Check if a notification with an ID is present.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isPresent
=
function
(
id
,
callback
,
scope
)
{
this
.
exec
(
'isPresent'
,
id
||
0
,
callback
,
scope
);
};
/**
* Check if a notification with an ID is scheduled.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isScheduled
=
function
(
id
,
callback
,
scope
)
{
this
.
exec
(
'isScheduled'
,
id
||
0
,
callback
,
scope
);
};
/**
* Check if a notification with an ID was triggered.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isTriggered
=
function
(
id
,
callback
,
scope
)
{
this
.
exec
(
'isTriggered'
,
id
||
0
,
callback
,
scope
);
};
/**
* List all local notification IDs.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllIds
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getAllIds'
,
null
,
callback
,
scope
);
};
/**
* Alias for `getAllIds`.
*/
exports
.
getIds
=
function
()
{
this
.
getAllIds
.
apply
(
this
,
arguments
);
};
/**
* List all scheduled notification IDs.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getScheduledIds
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getScheduledIds'
,
null
,
callback
,
scope
);
};
/**
* List all triggered notification IDs.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getTriggeredIds
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getTriggeredIds'
,
null
,
callback
,
scope
);
};
/**
* Property list for given local notifications.
* If called without IDs, all notification will be returned.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
get
=
function
()
{
var
args
=
Array
.
apply
(
null
,
arguments
);
if
(
typeof
args
[
0
]
==
'function'
)
{
args
.
unshift
([]);
}
var
ids
=
args
[
0
],
callback
=
args
[
1
],
scope
=
args
[
2
];
if
(
!
Array
.
isArray
(
ids
))
{
this
.
exec
(
'getSingle'
,
Number
(
ids
),
callback
,
scope
);
return
;
}
ids
=
this
.
convertIds
(
ids
);
this
.
exec
(
'getAll'
,
ids
,
callback
,
scope
);
};
/**
* Property list for all local notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAll
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getAll'
,
null
,
callback
,
scope
);
};
/**
* Property list for given scheduled notifications.
* If called without IDs, all notification will be returned.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getScheduled
=
function
()
{
var
args
=
Array
.
apply
(
null
,
arguments
);
if
(
typeof
args
[
0
]
==
'function'
)
{
args
.
unshift
([]);
}
var
ids
=
args
[
0
],
callback
=
args
[
1
],
scope
=
args
[
2
];
if
(
!
Array
.
isArray
(
ids
))
{
ids
=
[
ids
];
}
if
(
!
Array
.
isArray
(
ids
))
{
this
.
exec
(
'getSingleScheduled'
,
Number
(
ids
),
callback
,
scope
);
return
;
}
ids
=
this
.
convertIds
(
ids
);
this
.
exec
(
'getScheduled'
,
ids
,
callback
,
scope
);
};
/**
* Property list for all scheduled notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllScheduled
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getScheduled'
,
null
,
callback
,
scope
);
};
/**
* Property list for given triggered notifications.
* If called without IDs, all notification will be returned.
* Request permission to show notifications.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getTriggered
=
function
()
{
var
args
=
Array
.
apply
(
null
,
arguments
);
if
(
typeof
args
[
0
]
==
'function'
)
{
args
.
unshift
([]);
}
var
ids
=
args
[
0
],
callback
=
args
[
1
],
scope
=
args
[
2
];
if
(
!
Array
.
isArray
(
ids
))
{
ids
=
[
ids
];
}
if
(
!
Array
.
isArray
(
ids
))
{
this
.
exec
(
'getSingleTriggered'
,
Number
(
ids
),
callback
,
scope
);
return
;
}
ids
=
this
.
convertIds
(
ids
);
this
.
exec
(
'getTriggered'
,
ids
,
callback
,
scope
);
};
/**
* Property list for all triggered notifications.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllTriggered
=
function
(
callback
,
scope
)
{
this
.
exec
(
'getTriggered'
,
null
,
callback
,
scope
);
};
/**
* Informs if the app has the permission to show notifications.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
* @return [ Void ]
*/
exports
.
hasPermission
=
function
(
callback
,
scope
)
{
var
fn
=
this
.
createCallbackFn
(
callback
,
scope
);
...
...
@@ -424,25 +33,18 @@ exports.hasPermission = function (callback, scope) {
return
;
}
exec
(
fn
,
null
,
'LocalNotification'
,
'
hasPermission
'
,
[]);
exec
(
fn
,
null
,
'LocalNotification'
,
'
check
'
,
[]);
};
/**
* Register permission to show notifications if not already granted.
* Request permission to show notifications.
*
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
* @return [ Void ]
*/
exports
.
registerPermission
=
function
(
callback
,
scope
)
{
if
(
this
.
_registered
)
{
return
this
.
hasPermission
(
callback
,
scope
);
}
else
{
this
.
_registered
=
true
;
}
exports
.
requestPermission
=
function
(
callback
,
scope
)
{
var
fn
=
this
.
createCallbackFn
(
callback
,
scope
);
if
(
device
.
platform
!=
'iOS'
)
{
...
...
@@ -450,58 +52,438 @@ exports.registerPermission = function (callback, scope) {
return
;
}
exec
(
fn
,
null
,
'LocalNotification'
,
're
gisterPermission
'
,
[]);
exec
(
fn
,
null
,
'LocalNotification'
,
're
quest
'
,
[]);
};
/**********
* EVENTS *
**********/
/**
* Register callback for given event.
*
* @param {String} event
* The event's name
* @param {Function} callback
* The function to be exec as callback
* @param {Object?} scope
* The callback function's scope
*/
exports
.
on
=
function
(
event
,
callback
,
scope
)
{
if
(
typeof
callback
!==
"function"
)
return
;
if
(
!
this
.
_listener
[
event
])
{
this
.
_listener
[
event
]
=
[];
}
var
item
=
[
callback
,
scope
||
window
];
this
.
_listener
[
event
].
push
(
item
);
};
/**
* Unregister callback for given event.
*
* @param {String} event
* The event's name
* @param {Function} callback
* The function to be exec as callback
*/
exports
.
un
=
function
(
event
,
callback
)
{
var
listener
=
this
.
_listener
[
event
];
if
(
!
listener
)
return
;
for
(
var
i
=
0
;
i
<
listener
.
length
;
i
++
)
{
var
fn
=
listener
[
i
][
0
];
if
(
fn
==
callback
)
{
listener
.
splice
(
i
,
1
);
break
;
}
}
};
// /**
// * Returns the default settings.
// *
// * @return {Object}
// */
// exports.getDefaults = function () {
// return this._defaults;
// };
// /**
// * Overwrite default settings.
// *
// * @param {Object} defaults
// */
// exports.setDefaults = function (newDefaults) {
// var defaults = this.getDefaults();
// for (var key in defaults) {
// if (newDefaults.hasOwnProperty(key)) {
// defaults[key] = newDefaults[key];
// }
// }
// };
// /**
// * Schedule a new local notification.
// *
// * @param {Object} msgs
// * The notification properties
// * @param {Function} callback
// * A function to be called after the notification has been canceled
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.schedule = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.mergeWithDefaults(notification);
// this.convertProperties(notification);
// }
// this.exec('schedule', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (msgs, callback, scope, args) {
// var fn = function(granted) {
// if (!granted) return;
// var notifications = Array.isArray(msgs) ? msgs : [msgs];
// for (var i = 0; i < notifications.length; i++) {
// var notification = notifications[i];
// this.convertProperties(notification);
// }
// this.exec('update', notifications, callback, scope);
// };
// if (args && args.skipPermission) {
// fn.call(this, true);
// } else {
// this.registerPermission(fn, this);
// }
// };
// /**
// * Clear the specified notification.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A function to be called after the notification has been cleared
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.clear = function (ids, callback, scope) {
// ids = Array.isArray(ids) ? ids : [ids];
// ids = this.convertIds(ids);
// this.exec('clear', ids, callback, scope);
// };
// /**
// * Clear all previously sheduled notifications.
// *
// * @param {Function} callback
// * A function to be called after all notifications have been cleared
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.clearAll = function (callback, scope) {
// this.exec('clearAll', null, callback, scope);
// };
// /**
// * Cancel the specified notifications.
// *
// * @param {String[]} ids
// * The IDs of the notifications
// * @param {Function} callback
// * A function to be called after the notifications has been canceled
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.cancel = function (ids, callback, scope) {
// ids = Array.isArray(ids) ? ids : [ids];
// ids = this.convertIds(ids);
// this.exec('cancel', ids, callback, scope);
// };
// /**
// * Remove all previously registered notifications.
// *
// * @param {Function} callback
// * A function to be called after all notifications have been canceled
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.cancelAll = function (callback, scope) {
// this.exec('cancelAll', null, callback, scope);
// };
// /**
// * Check if a notification with an ID is present.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.isPresent = function (id, callback, scope) {
// this.exec('isPresent', id || 0, callback, scope);
// };
// /**
// * Check if a notification with an ID is scheduled.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.isScheduled = function (id, callback, scope) {
// this.exec('isScheduled', id || 0, callback, scope);
// };
// /**
// * Check if a notification with an ID was triggered.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.isTriggered = function (id, callback, scope) {
// this.exec('isTriggered', id || 0, callback, scope);
// };
// *
// * List all local notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// exports.getAllIds = function (callback, scope) {
// this.exec('getAllIds', null, callback, scope);
// };
// /**
// * Alias for `getAllIds`.
// */
// exports.getIds = function () {
// this.getAllIds.apply(this, arguments);
// };
// /**
// * List all scheduled notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getScheduledIds = function (callback, scope) {
// this.exec('getScheduledIds', null, callback, scope);
// };
// /**
// * List all triggered notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getTriggeredIds = function (callback, scope) {
// this.exec('getTriggeredIds', null, callback, scope);
// };
// /**
// * Property list for given local notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.get = function () {
// var args = Array.apply(null, arguments);
// if (typeof args[0] == 'function') {
// args.unshift([]);
// }
// var ids = args[0],
// callback = args[1],
// scope = args[2];
// if (!Array.isArray(ids)) {
// this.exec('getSingle', Number(ids), callback, scope);
// return;
// }
// ids = this.convertIds(ids);
// this.exec('getAll', ids, callback, scope);
// };
// /**
// * Property list for all local notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAll = function (callback, scope) {
// this.exec('getAll', null, callback, scope);
// };
// /**
// * Property list for given scheduled notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getScheduled = function () {
// var args = Array.apply(null, arguments);
// if (typeof args[0] == 'function') {
// args.unshift([]);
// }
// var ids = args[0],
// callback = args[1],
// scope = args[2];
// if (!Array.isArray(ids)) {
// ids = [ids];
// }
// if (!Array.isArray(ids)) {
// this.exec('getSingleScheduled', Number(ids), callback, scope);
// return;
// }
// ids = this.convertIds(ids);
// this.exec('getScheduled', ids, callback, scope);
// };
// /**
// * Property list for all scheduled notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAllScheduled = function (callback, scope) {
// this.exec('getScheduled', null, callback, scope);
// };
// /**
// * Property list for given triggered notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getTriggered = function () {
// var args = Array.apply(null, arguments);
// if (typeof args[0] == 'function') {
// args.unshift([]);
// }
// var ids = args[0],
// callback = args[1],
// scope = args[2];
// if (!Array.isArray(ids)) {
// ids = [ids];
// }
// if (!Array.isArray(ids)) {
// this.exec('getSingleTriggered', Number(ids), callback, scope);
// return;
// }
// ids = this.convertIds(ids);
// this.exec('getTriggered', ids, callback, scope);
// };
// /**
// * Property list for all triggered notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAllTriggered = function (callback, scope) {
// this.exec('getTriggered', null, callback, scope);
// };
// /**********
// * EVENTS *
// **********/
// /**
// * Register callback for given event.
// *
// * @param {String} event
// * The event's name
// * @param {Function} callback
// * The function to be exec as callback
// * @param {Object?} scope
// * The callback function's scope
// */
// exports.on = function (event, callback, scope) {
// if (typeof callback !== "function")
// return;
// if (!this._listener[event]) {
// this._listener[event] = [];
// }
// var item = [callback, scope || window];
// this._listener[event].push(item);
// };
// /**
// * Unregister callback for given event.
// *
// * @param {String} event
// * The event's name
// * @param {Function} callback
// * The function to be exec as callback
// */
// exports.un = function (event, callback) {
// var listener = this._listener[event];
// if (!listener)
// return;
// for (var i = 0; i < listener.length; i++) {
// var fn = listener[i][0];
// if (fn == callback) {
// listener.splice(i, 1);
// break;
// }
// }
// };
www/local-notification-util.js
View file @
ca85d768
/*
* Copyright (c) 2013-2015 by appPlant UG. All rights reserved.
*
* @APPPLANT_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
...
...
@@ -17,297 +13,289 @@
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPPLANT_LICENSE_HEADER_END@
*/
var
exec
=
require
(
'cordova/exec'
),
channel
=
require
(
'cordova/channel'
);
/***********
* MEMBERS *
***********/
// Default values
exports
.
_defaults
=
{
text
:
''
,
title
:
''
,
sound
:
'res://platform_default'
,
badge
:
0
,
id
:
0
,
data
:
undefined
,
every
:
undefined
,
at
:
undefined
};
// listener
exports
.
_listener
=
{};
// Registered permission flag
exports
.
_registered
=
false
;
/********
* UTIL *
********/
/**
* Merge platform specific properties into the default ones.
*
* @return {Object}
* The default properties for the platform
*/
exports
.
applyPlatformSpecificOptions
=
function
()
{
var
defaults
=
this
.
_defaults
;
switch
(
device
.
platform
)
{
case
'Android'
:
defaults
.
icon
=
'res://ic_popup_reminder'
;
defaults
.
smallIcon
=
undefined
;
defaults
.
ongoing
=
false
;
defaults
.
autoClear
=
true
;
defaults
.
led
=
undefined
;
defaults
.
color
=
undefined
;
break
;
}
return
defaults
;
};
/**
* Merge custom properties with the default values.
*
* @param {Object} options
* Set of custom values
*
* @retrun {Object}
* The merged property list
*/
exports
.
mergeWithDefaults
=
function
(
options
)
{
var
defaults
=
this
.
getDefaults
();
options
.
at
=
this
.
getValueFor
(
options
,
'at'
,
'firstAt'
,
'date'
);
options
.
text
=
this
.
getValueFor
(
options
,
'text'
,
'message'
);
options
.
data
=
this
.
getValueFor
(
options
,
'data'
,
'json'
);
if
(
defaults
.
hasOwnProperty
(
'autoClear'
))
{
options
.
autoClear
=
this
.
getValueFor
(
options
,
'autoClear'
,
'autoCancel'
);
}
if
(
options
.
autoClear
!==
true
&&
options
.
ongoing
)
{
options
.
autoClear
=
false
;
}
if
(
options
.
at
===
undefined
||
options
.
at
===
null
)
{
options
.
at
=
new
Date
();
}
for
(
var
key
in
defaults
)
{
if
(
options
[
key
]
===
null
||
options
[
key
]
===
undefined
)
{
if
(
options
.
hasOwnProperty
(
key
)
&&
[
'data'
,
'sound'
].
indexOf
(
key
)
>
-
1
)
{
options
[
key
]
=
undefined
;
}
else
{
options
[
key
]
=
defaults
[
key
];
}
}
}
for
(
key
in
options
)
{
if
(
!
defaults
.
hasOwnProperty
(
key
))
{
delete
options
[
key
];
console
.
warn
(
'Unknown property: '
+
key
);
}
}
return
options
;
};
// var exec = require('cordova/exec'),
// channel = require('cordova/channel');
// /***********
// * MEMBERS *
// ***********/
// // Default values
// exports._defaults = {
// text: '',
// title: '',
// sound: 'res://platform_default',
// badge: 0,
// id: 0,
// data: undefined,
// every: undefined,
// at: undefined
// };
// // listener
// exports._listener = {};
// /********
// * UTIL *
// ********/
// /**
// * Merge platform specific properties into the default ones.
// *
// * @return {Object}
// * The default properties for the platform
// */
// exports.applyPlatformSpecificOptions = function () {
// var defaults = this._defaults;
// switch (device.platform) {
// case 'Android':
// defaults.icon = 'res://ic_popup_reminder';
// defaults.smallIcon = undefined;
// defaults.ongoing = false;
// defaults.autoClear = true;
// defaults.led = undefined;
// defaults.color = undefined;
// break;
// }
// return defaults;
// };
// /**
// * Merge custom properties with the default values.
// *
// * @param {Object} options
// * Set of custom values
// *
// * @retrun {Object}
// * The merged property list
// */
// exports.mergeWithDefaults = function (options) {
// var defaults = this.getDefaults();
// options.at = this.getValueFor(options, 'at', 'firstAt', 'date');
// options.text = this.getValueFor(options, 'text', 'message');
// options.data = this.getValueFor(options, 'data', 'json');
// if (defaults.hasOwnProperty('autoClear')) {
// options.autoClear = this.getValueFor(options, 'autoClear', 'autoCancel');
// }
// if (options.autoClear !== true && options.ongoing) {
// options.autoClear = false;
// }
// if (options.at === undefined || options.at === null) {
// options.at = new Date();
// }
// for (var key in defaults) {
// if (options[key] === null || options[key] === undefined) {
// if (options.hasOwnProperty(key) && ['data','sound'].indexOf(key) > -1) {
// options[key] = undefined;
// } else {
// options[key] = defaults[key];
// }
// }
// }
// for (key in options) {
// if (!defaults.hasOwnProperty(key)) {
// delete options[key];
// console.warn('Unknown property: ' + key);
// }
// }
// return options;
// };
// /**
// * Convert the passed values to their required type.
// *
// * @param {Object} options
// * Set of custom values
// *
// * @retrun {Object}
// * The converted property list
// */
// exports.convertProperties = function (options) {
// if (options.id) {
// if (isNaN(options.id)) {
// options.id = this.getDefaults().id;
// console.warn('Id is not a number: ' + options.id);
// } else {
// options.id = Number(options.id);
// }
// }
// if (options.title) {
// options.title = options.title.toString();
// }
// if (options.text) {
// options.text = options.text.toString();
// }
// if (options.badge) {
// if (isNaN(options.badge)) {
// options.badge = this.getDefaults().badge;
// console.warn('Badge number is not a number: ' + options.id);
// } else {
// options.badge = Number(options.badge);
// }
// }
// if (options.at) {
// if (typeof options.at == 'object') {
// options.at = options.at.getTime();
// }
// options.at = Math.round(options.at/1000);
// }
// if (typeof options.data == 'object') {
// options.data = JSON.stringify(options.data);
// }
// if (options.every) {
// if (device.platform == 'iOS' && typeof options.every != 'string') {
// options.every = this.getDefaults().every;
// var warning = 'Every option is not a string: ' + options.id;
// warning += '. Expects one of: second, minute, hour, day, week, ';
// warning += 'month, year on iOS.';
// console.warn(warning);
// }
// }
// return options;
// };
/**
* C
onvert the passed values to their required ty
pe.
* C
reate a callback function to get executed within a specific sco
pe.
*
* @param
{Object} options
*
Set of custom values
* @param
[ Function ] fn The function to be exec as the callback.
*
@param [ Object ] scope The callback function's scope.
*
* @retrun {Object}
* The converted property list
* @return [ Function ]
*/
exports
.
convertProperties
=
function
(
options
)
{
if
(
options
.
id
)
{
if
(
isNaN
(
options
.
id
))
{
options
.
id
=
this
.
getDefaults
().
id
;
console
.
warn
(
'Id is not a number: '
+
options
.
id
);
}
else
{
options
.
id
=
Number
(
options
.
id
);
}
}
if
(
options
.
title
)
{
options
.
title
=
options
.
title
.
toString
();
}
if
(
options
.
text
)
{
options
.
text
=
options
.
text
.
toString
();
}
if
(
options
.
badge
)
{
if
(
isNaN
(
options
.
badge
))
{
options
.
badge
=
this
.
getDefaults
().
badge
;
console
.
warn
(
'Badge number is not a number: '
+
options
.
id
);
}
else
{
options
.
badge
=
Number
(
options
.
badge
);
}
}
if
(
options
.
at
)
{
if
(
typeof
options
.
at
==
'object'
)
{
options
.
at
=
options
.
at
.
getTime
();
}
options
.
at
=
Math
.
round
(
options
.
at
/
1000
);
}
if
(
typeof
options
.
data
==
'object'
)
{
options
.
data
=
JSON
.
stringify
(
options
.
data
);
}
if
(
options
.
every
)
{
if
(
device
.
platform
==
'iOS'
&&
typeof
options
.
every
!=
'string'
)
{
options
.
every
=
this
.
getDefaults
().
every
;
var
warning
=
'Every option is not a string: '
+
options
.
id
;
warning
+=
'. Expects one of: second, minute, hour, day, week, '
;
warning
+=
'month, year on iOS.'
;
console
.
warn
(
warning
);
}
}
return
options
;
};
exports
.
createCallbackFn
=
function
(
fn
,
scope
)
{
/**
* Create callback, which will be executed within a specific scope.
*
* @param {Function} callbackFn
* The callback function
* @param {Object} scope
* The scope for the function
*
* @return {Function}
* The new callback function
*/
exports
.
createCallbackFn
=
function
(
callbackFn
,
scope
)
{
if
(
typeof
callbackFn
!=
'function'
)
if
(
typeof
fn
!=
'function'
)
return
;
return
function
()
{
callbackF
n
.
apply
(
scope
||
this
,
arguments
);
f
n
.
apply
(
scope
||
this
,
arguments
);
};
};
/**
* Convert the IDs to numbers.
*
* @param {String/Number[]} ids
*
* @return Array of Numbers
*/
exports
.
convertIds
=
function
(
ids
)
{
var
convertedIds
=
[];
for
(
var
i
=
0
;
i
<
ids
.
length
;
i
++
)
{
convertedIds
.
push
(
Number
(
ids
[
i
]));
}
return
convertedIds
;
};
/**
* First found value for the given keys.
*
* @param {Object} options
* Object with key-value properties
* @param {String[]} keys*
* Key list
*/
exports
.
getValueFor
=
function
(
options
)
{
var
keys
=
Array
.
apply
(
null
,
arguments
).
slice
(
1
);
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
var
key
=
keys
[
i
];
if
(
options
.
hasOwnProperty
(
key
))
{
return
options
[
key
];
}
}
};
/**
* Fire event with given arguments.
*
* @param {String} event
* The event's name
* @param {args*}
* The callback's arguments
*/
exports
.
fireEvent
=
function
(
event
)
{
var
args
=
Array
.
apply
(
null
,
arguments
).
slice
(
1
),
listener
=
this
.
_listener
[
event
];
if
(
!
listener
)
return
;
for
(
var
i
=
0
;
i
<
listener
.
length
;
i
++
)
{
var
fn
=
listener
[
i
][
0
],
scope
=
listener
[
i
][
1
];
fn
.
apply
(
scope
,
args
);
}
};
/**
* Execute the native counterpart.
*
* @param {String} action
* The name of the action
* @param args[]
* Array of arguments
* @param {Function} callback
* The callback function
* @param {Object} scope
* The scope for the function
*/
exports
.
exec
=
function
(
action
,
args
,
callback
,
scope
)
{
var
fn
=
this
.
createCallbackFn
(
callback
,
scope
),
params
=
[];
if
(
Array
.
isArray
(
args
))
{
params
=
args
;
}
else
if
(
args
)
{
params
.
push
(
args
);
}
exec
(
fn
,
null
,
'LocalNotification'
,
action
,
params
);
};
/*********
* HOOKS *
*********/
// Called after 'deviceready' event
channel
.
deviceready
.
subscribe
(
function
()
{
// Device is ready now, the listeners are registered
// and all queued events can be executed.
exec
(
null
,
null
,
'LocalNotification'
,
'deviceready'
,
[]);
});
// Called before 'deviceready' event
channel
.
onCordovaReady
.
subscribe
(
function
()
{
// Device plugin is ready now
channel
.
onCordovaInfoReady
.
subscribe
(
function
()
{
// Merge platform specifics into defaults
exports
.
applyPlatformSpecificOptions
();
});
});
/
/ /
**
//
* Convert the IDs to numbers.
//
*
//
* @param {String/Number[]} ids
//
*
//
* @return Array of Numbers
//
*/
//
exports.convertIds = function (ids) {
//
var convertedIds = [];
//
for (var i = 0; i < ids.length; i++) {
//
convertedIds.push(Number(ids[i]));
//
}
//
return convertedIds;
//
};
/
/ /
**
//
* First found value for the given keys.
//
*
//
* @param {Object} options
//
* Object with key-value properties
//
* @param {String[]} keys*
//
* Key list
//
*/
//
exports.getValueFor = function (options) {
//
var keys = Array.apply(null, arguments).slice(1);
//
for (var i = 0; i < keys.length; i++) {
//
var key = keys[i];
//
if (options.hasOwnProperty(key)) {
//
return options[key];
//
}
//
}
//
};
/
/ /
**
//
* Fire event with given arguments.
//
*
//
* @param {String} event
//
* The event's name
//
* @param {args*}
//
* The callback's arguments
//
*/
//
exports.fireEvent = function (event) {
//
var args = Array.apply(null, arguments).slice(1),
//
listener = this._listener[event];
//
if (!listener)
//
return;
//
for (var i = 0; i < listener.length; i++) {
//
var fn = listener[i][0],
//
scope = listener[i][1];
//
fn.apply(scope, args);
//
}
//
};
/
/ /
**
//
* Execute the native counterpart.
//
*
//
* @param {String} action
//
* The name of the action
//
* @param args[]
//
* Array of arguments
//
* @param {Function} callback
//
* The callback function
//
* @param {Object} scope
//
* The scope for the function
//
*/
//
exports.exec = function (action, args, callback, scope) {
//
var fn = this.createCallbackFn(callback, scope),
//
params = [];
//
if (Array.isArray(args)) {
//
params = args;
//
} else if (args) {
//
params.push(args);
//
}
//
exec(fn, null, 'LocalNotification', action, params);
//
};
/
/ /
*********
//
* HOOKS *
//
*********/
//
//
Called after 'deviceready' event
//
channel.deviceready.subscribe(function () {
//
// Device is ready now, the listeners are registered
//
// and all queued events can be executed.
//
exec(null, null, 'LocalNotification', 'deviceready', []);
//
});
//
//
Called before 'deviceready' event
//
channel.onCordovaReady.subscribe(function () {
//
// Device plugin is ready now
//
channel.onCordovaInfoReady.subscribe(function () {
//
// Merge platform specifics into defaults
//
exports.applyPlatformSpecificOptions();
//
});
//
});
www/local-notification.js
View file @
ca85d768
/*
* Copyright (c) 2013-2015 by appPlant UG. All rights reserved.
*
* @APPPLANT_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apache License
* Version 2.0 (the 'License'). You may not use this file except in
...
...
@@ -17,360 +13,324 @@
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPPLANT_LICENSE_HEADER_END@
*/
/*************
* INTERFACE *
*************/
/**
* Returns the default settings.
*
* @return {Object}
*/
exports
.
getDefaults
=
function
()
{
return
this
.
core
.
getDefaults
();
};
/**
* Overwrite default settings.
*
* @param {Object} defaults
*/
exports
.
setDefaults
=
function
(
defaults
)
{
this
.
core
.
setDefaults
(
defaults
);
};
/**
* Schedule a new local notification.
*
* @param {Object} notifications
* The notification properties
* @param {Function} callback
* A function to be called after the notification has been canceled
* @param {Object?} scope
* The scope for the callback function
* @param {Object?} args
* skipPermission:true schedules the notifications immediatly without
* registering or checking for permission
*/
exports
.
schedule
=
function
(
notifications
,
callback
,
scope
,
args
)
{
this
.
core
.
schedule
(
notifications
,
callback
,
scope
,
args
);
};
/**
* Update existing notifications specified by IDs in options.
*
* @param {Object} notifications
* The notification properties to update
* @param {Function} callback
* A function to be called after the notification has been updated
* @param {Object?} scope
* The scope for the callback function
* @param {Object?} args
* skipPermission:true schedules the notifications immediatly without
* registering or checking for permission
*/
exports
.
update
=
function
(
notifications
,
callback
,
scope
,
args
)
{
this
.
core
.
update
(
notifications
,
callback
,
scope
,
args
);
};
/**
* Clear the specified notification.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A function to be called after the notification has been cleared
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
clear
=
function
(
ids
,
callback
,
scope
)
{
this
.
core
.
clear
(
ids
,
callback
,
scope
);
};
/**
* Clear all previously sheduled notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been cleared
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
clearAll
=
function
(
callback
,
scope
)
{
this
.
core
.
clearAll
(
callback
,
scope
);
};
/**
* Cancel the specified notifications.
*
* @param {String[]} ids
* The IDs of the notifications
* @param {Function} callback
* A function to be called after the notifications has been canceled
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
cancel
=
function
(
ids
,
callback
,
scope
)
{
this
.
core
.
cancel
(
ids
,
callback
,
scope
);
};
/**
* Remove all previously registered notifications.
*
* @param {Function} callback
* A function to be called after all notifications have been canceled
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
cancelAll
=
function
(
callback
,
scope
)
{
this
.
core
.
cancelAll
(
callback
,
scope
);
};
/**
* Check if a notification with an ID is present.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isPresent
=
function
(
id
,
callback
,
scope
)
{
this
.
core
.
isPresent
(
id
,
callback
,
scope
);
};
/**
* Check if a notification with an ID is scheduled.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isScheduled
=
function
(
id
,
callback
,
scope
)
{
this
.
core
.
isScheduled
(
id
,
callback
,
scope
);
};
/**
* Check if a notification with an ID was triggered.
*
* @param {String} id
* The ID of the notification
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
isTriggered
=
function
(
id
,
callback
,
scope
)
{
this
.
core
.
isTriggered
(
id
,
callback
,
scope
);
};
/**
* List all local notification IDs.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllIds
=
function
(
callback
,
scope
)
{
this
.
core
.
getAllIds
(
callback
,
scope
);
};
/**
* Alias for `getAllIds`.
*/
exports
.
getIds
=
function
()
{
this
.
getAllIds
.
apply
(
this
,
arguments
);
};
/**
* List all scheduled notification IDs.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getScheduledIds
=
function
(
callback
,
scope
)
{
this
.
core
.
getScheduledIds
(
callback
,
scope
);
};
/**
*
List all triggered notification ID
s.
*
Request permission to show notification
s.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getTriggeredIds
=
function
(
callback
,
scope
)
{
this
.
core
.
getTriggeredIds
(
callback
,
scope
);
};
/**
* Property list for given local notifications.
* If called without IDs, all notification will be returned.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
get
=
function
()
{
this
.
core
.
get
.
apply
(
this
.
core
,
arguments
);
};
/**
* Property list for all local notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAll
=
function
(
callback
,
scope
)
{
this
.
core
.
getAll
(
callback
,
scope
);
};
/**
* Property list for given scheduled notifications.
* If called without IDs, all notification will be returned.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getScheduled
=
function
()
{
this
.
core
.
getScheduled
.
apply
(
this
.
core
,
arguments
);
};
/**
* Property list for all scheduled notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllScheduled
=
function
(
callback
,
scope
)
{
this
.
core
.
getAllScheduled
(
callback
,
scope
);
};
/**
* Property list for given triggered notifications.
* If called without IDs, all notification will be returned.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
*
* @param {Number[]?} ids
* Set of notification IDs
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getTriggered
=
function
()
{
this
.
core
.
getTriggered
.
apply
(
this
.
core
,
arguments
);
};
/**
* Property list for all triggered notifications.
*
* @param {Function} callback
* A callback function to be called with the list
* @param {Object?} scope
* The scope for the callback function
*/
exports
.
getAllTriggered
=
function
(
callback
,
scope
)
{
this
.
core
.
getAllTriggered
(
callback
,
scope
);
};
/**
* Informs if the app has the permission to show notifications.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
* @return [ Void ]
*/
exports
.
hasPermission
=
function
(
callback
,
scope
)
{
this
.
core
.
hasPermission
(
callback
,
scope
);
};
/**
* Re
gister permission to show notifications if not already granted
.
* Re
quest permission to show notifications
.
*
* @param {Function} callback
* The function to be exec as the callback
* @param {Object?} scope
* The callback function's scope
*/
exports
.
registerPermission
=
function
(
callback
,
scope
)
{
this
.
core
.
registerPermission
(
callback
,
scope
);
};
/****************
* DEPRECATIONS *
****************/
/**
* Schedule a new local notification.
*/
exports
.
add
=
function
()
{
console
.
warn
(
'Depreated: Please use `notification.local.schedule` instead.'
);
this
.
schedule
.
apply
(
this
,
arguments
);
};
/**
* Register permission to show notifications
* if not already granted.
*/
exports
.
promptForPermission
=
function
()
{
console
.
warn
(
'Depreated: Please use `notification.local.registerPermission` instead.'
);
this
.
registerPermission
.
apply
(
this
,
arguments
);
};
/**********
* EVENTS *
**********/
/**
* Register callback for given event.
* @param [ Function ] callback The function to be exec as the callback.
* @param [ Object ] scope The callback function's scope.
*
* @param {String} event
* The event's name
* @param {Function} callback
* The function to be exec as callback
* @param {Object?} scope
* The callback function's scope
* @return [ Void ]
*/
exports
.
on
=
function
(
event
,
callback
,
scope
)
{
this
.
core
.
on
(
event
,
callback
,
scope
);
exports
.
requestPermission
=
function
(
callback
,
scope
)
{
this
.
core
.
requestPermission
(
callback
,
scope
);
};
/**
* Unregister callback for given event.
*
* @param {String} event
* The event's name
* @param {Function} callback
* The function to be exec as callback
*/
exports
.
un
=
function
(
event
,
callback
)
{
this
.
core
.
un
(
event
,
callback
);
};
// /**
// * Returns the default settings.
// *
// * @return {Object}
// */
// exports.getDefaults = function () {
// return this.core.getDefaults();
// };
// /**
// * Overwrite default settings.
// *
// * @param {Object} defaults
// */
// exports.setDefaults = function (defaults) {
// this.core.setDefaults(defaults);
// };
// /**
// * Schedule a new local notification.
// *
// * @param {Object} notifications
// * The notification properties
// * @param {Function} callback
// * A function to be called after the notification has been canceled
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.schedule = function (notifications, callback, scope, args) {
// this.core.schedule(notifications, callback, scope, args);
// };
// /**
// * Update existing notifications specified by IDs in options.
// *
// * @param {Object} notifications
// * The notification properties to update
// * @param {Function} callback
// * A function to be called after the notification has been updated
// * @param {Object?} scope
// * The scope for the callback function
// * @param {Object?} args
// * skipPermission:true schedules the notifications immediatly without
// * registering or checking for permission
// */
// exports.update = function (notifications, callback, scope, args) {
// this.core.update(notifications, callback, scope, args);
// };
// /**
// * Clear the specified notification.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A function to be called after the notification has been cleared
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.clear = function (ids, callback, scope) {
// this.core.clear(ids, callback, scope);
// };
// /**
// * Clear all previously sheduled notifications.
// *
// * @param {Function} callback
// * A function to be called after all notifications have been cleared
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.clearAll = function (callback, scope) {
// this.core.clearAll(callback, scope);
// };
// /**
// * Cancel the specified notifications.
// *
// * @param {String[]} ids
// * The IDs of the notifications
// * @param {Function} callback
// * A function to be called after the notifications has been canceled
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.cancel = function (ids, callback, scope) {
// this.core.cancel(ids, callback, scope);
// };
// /**
// * Remove all previously registered notifications.
// *
// * @param {Function} callback
// * A function to be called after all notifications have been canceled
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.cancelAll = function (callback, scope) {
// this.core.cancelAll(callback, scope);
// };
// /**
// * Check if a notification with an ID is present.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.isPresent = function (id, callback, scope) {
// this.core.isPresent(id, callback, scope);
// };
// /**
// * Check if a notification with an ID is scheduled.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.isScheduled = function (id, callback, scope) {
// this.core.isScheduled(id, callback, scope);
// };
// *
// * Check if a notification with an ID was triggered.
// *
// * @param {String} id
// * The ID of the notification
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// exports.isTriggered = function (id, callback, scope) {
// this.core.isTriggered(id, callback, scope);
// };
// /**
// * List all local notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAllIds = function (callback, scope) {
// this.core.getAllIds(callback, scope);
// };
// /**
// * Alias for `getAllIds`.
// */
// exports.getIds = function () {
// this.getAllIds.apply(this, arguments);
// };
// /**
// * List all scheduled notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getScheduledIds = function (callback, scope) {
// this.core.getScheduledIds(callback, scope);
// };
// /**
// * List all triggered notification IDs.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getTriggeredIds = function (callback, scope) {
// this.core.getTriggeredIds(callback, scope);
// };
// /**
// * Property list for given local notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.get = function () {
// this.core.get.apply(this.core, arguments);
// };
// /**
// * Property list for all local notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAll = function (callback, scope) {
// this.core.getAll(callback, scope);
// };
// /**
// * Property list for given scheduled notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getScheduled = function () {
// this.core.getScheduled.apply(this.core, arguments);
// };
// /**
// * Property list for all scheduled notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAllScheduled = function (callback, scope) {
// this.core.getAllScheduled(callback, scope);
// };
// /**
// * Property list for given triggered notifications.
// * If called without IDs, all notification will be returned.
// *
// * @param {Number[]?} ids
// * Set of notification IDs
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getTriggered = function () {
// this.core.getTriggered.apply(this.core, arguments);
// };
// /**
// * Property list for all triggered notifications.
// *
// * @param {Function} callback
// * A callback function to be called with the list
// * @param {Object?} scope
// * The scope for the callback function
// */
// exports.getAllTriggered = function (callback, scope) {
// this.core.getAllTriggered(callback, scope);
// };
// /**
// * Register callback for given event.
// *
// * @param {String} event
// * The event's name
// * @param {Function} callback
// * The function to be exec as callback
// * @param {Object?} scope
// * The callback function's scope
// */
// exports.on = function (event, callback, scope) {
// this.core.on(event, callback, scope);
// };
// /**
// * Unregister callback for given event.
// *
// * @param {String} event
// * The event's name
// * @param {Function} callback
// * The function to be exec as callback
// */
// exports.un = function (event, callback) {
// this.core.un(event, callback);
// };
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment