summaryrefslogtreecommitdiff
path: root/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m')
-rw-r--r--plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m331
1 files changed, 331 insertions, 0 deletions
diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m
new file mode 100644
index 00000000..60b6daac
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.local-notification/src/ios/UIApplication+APPLocalNotification.m
@@ -0,0 +1,331 @@
+/*
+ * 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
+ * compliance with the License. Please obtain a copy of the License at
+ * http://opensource.org/licenses/Apache-2.0/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * 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@
+ */
+
+#import "UIApplication+APPLocalNotification.h"
+#import "UILocalNotification+APPLocalNotification.h"
+
+@implementation UIApplication (APPLocalNotification)
+
+#pragma mark -
+#pragma mark Permissions
+
+/**
+ * If the app has the permission to schedule local notifications.
+ */
+- (BOOL) hasPermissionToScheduleLocalNotifications
+{
+ if ([[UIApplication sharedApplication]
+ respondsToSelector:@selector(registerUserNotificationSettings:)])
+ {
+ UIUserNotificationType types;
+ UIUserNotificationSettings *settings;
+
+ settings = [[UIApplication sharedApplication]
+ currentUserNotificationSettings];
+
+ types = UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
+
+ return (settings.types & types);
+ } else {
+ return YES;
+ }
+}
+
+/**
+ * Ask for permission to schedule local notifications.
+ */
+- (void) registerPermissionToScheduleLocalNotifications
+{
+ if ([[UIApplication sharedApplication]
+ respondsToSelector:@selector(registerUserNotificationSettings:)])
+ {
+ UIUserNotificationType types;
+ UIUserNotificationSettings *settings;
+
+ settings = [[UIApplication sharedApplication]
+ currentUserNotificationSettings];
+
+ types = settings.types|UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
+
+ settings = [UIUserNotificationSettings settingsForTypes:types
+ categories:nil];
+
+ [[UIApplication sharedApplication]
+ registerUserNotificationSettings:settings];
+ }
+}
+
+#pragma mark -
+#pragma mark LocalNotifications
+
+/**
+ * List of all local notifications which have been added
+ * but not yet removed from the notification center.
+ */
+- (NSArray*) localNotifications
+{
+ NSArray* scheduledNotifications = self.scheduledLocalNotifications;
+ NSMutableArray* notifications = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in scheduledNotifications)
+ {
+ if (notification) {
+ [notifications addObject:notification];
+ }
+ }
+
+ return notifications;
+}
+
+/**
+ * List of all triggered local notifications which have been scheduled
+ * and not yet removed the notification center.
+ */
+- (NSArray*) triggeredLocalNotifications
+{
+ NSArray* notifications = self.localNotifications;
+ NSMutableArray* triggeredNotifications = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in notifications)
+ {
+ if ([notification isTriggered]) {
+ [triggeredNotifications addObject:notification];
+ }
+ }
+
+ return triggeredNotifications;
+}
+
+/**
+ * List of all local notifications IDs.
+ */
+- (NSArray*) localNotificationIds
+{
+ NSArray* notifications = self.localNotifications;
+ NSMutableArray* ids = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in notifications)
+ {
+ [ids addObject:notification.options.id];
+ }
+
+ return ids;
+}
+
+/**
+ * List of all local notifications IDs from given type.
+ *
+ * @param type
+ * Notification life cycle type
+ */
+- (NSArray*) localNotificationIdsByType:(APPLocalNotificationType)type
+{
+ NSArray* notifications = self.localNotifications;
+ NSMutableArray* ids = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in notifications)
+ {
+ if (notification.type == type) {
+ [ids addObject:notification.options.id];
+ }
+ }
+
+ return ids;
+}
+
+/*
+ * If local notification with ID exists.
+ *
+ * @param id
+ * Notification ID
+ */
+- (BOOL) localNotificationExist:(NSNumber*)id
+{
+ return [self localNotificationWithId:id] != NULL;
+}
+
+/* If local notification with ID and type exists
+ *
+ * @param id
+ * Notification ID
+ * @param type
+ * Notification life cycle type
+ */
+- (BOOL) localNotificationExist:(NSNumber*)id type:(APPLocalNotificationType)type
+{
+ return [self localNotificationWithId:id andType:type] != NULL;
+}
+
+/**
+ * Get local notification with ID.
+ *
+ * @param id
+ * Notification ID
+ */
+- (UILocalNotification*) localNotificationWithId:(NSNumber*)id
+{
+ NSArray* notifications = self.localNotifications;
+
+ for (UILocalNotification* notification in notifications)
+ {
+ if ([notification.options.id isEqualToNumber:id]) {
+ return notification;
+ }
+ }
+
+ return NULL;
+}
+
+/*
+ * Get local notification with ID and type.
+ *
+ * @param id
+ * Notification ID
+ * @param type
+ * Notification life cycle type
+ */
+- (UILocalNotification*) localNotificationWithId:(NSNumber*)id andType:(APPLocalNotificationType)type
+{
+ UILocalNotification* notification = [self localNotificationWithId:id];
+
+ if (notification && notification.type == type)
+ return notification;
+
+ return NULL;
+}
+
+/**
+ * List of properties from all notifications.
+ */
+- (NSArray*) localNotificationOptions
+{
+ NSArray* notifications = self.localNotifications;
+ NSMutableArray* options = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in notifications)
+ {
+ [options addObject:notification.options.userInfo];
+ }
+
+ return options;
+}
+
+/**
+ * List of properties from all local notifications from given type.
+ *
+ * @param type
+ * Notification life cycle type
+ */
+- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type
+{
+ NSArray* notifications = self.localNotifications;
+ NSMutableArray* options = [[NSMutableArray alloc] init];
+
+ for (UILocalNotification* notification in notifications)
+ {
+ if (notification.type == type) {
+ [options addObject:notification.options.userInfo];
+ }
+ }
+
+ return options;
+}
+
+/**
+ * List of properties from given local notifications.
+ *
+ * @param ids
+ * Notification IDs
+ */
+- (NSArray*) localNotificationOptionsById:(NSArray*)ids
+{
+ UILocalNotification* notification;
+ NSMutableArray* options = [[NSMutableArray alloc] init];
+
+ for (NSNumber* id in ids)
+ {
+ notification = [self localNotificationWithId:id];
+
+ if (notification) {
+ [options addObject:notification.options.userInfo];
+ }
+ }
+
+ return options;
+}
+
+/**
+ * List of properties from given local notifications.
+ *
+ * @param type
+ * Notification life cycle type
+ * @param ids
+ * Notification IDs
+ */
+- (NSArray*) localNotificationOptionsByType:(APPLocalNotificationType)type andId:(NSArray*)ids
+{
+ UILocalNotification* notification;
+ NSMutableArray* options = [[NSMutableArray alloc] init];
+
+ for (NSNumber* id in ids)
+ {
+ notification = [self localNotificationWithId:id];
+
+ if (notification && notification.type == type) {
+ [options addObject:notification.options.userInfo];
+ }
+ }
+
+ return options;
+}
+
+/*
+ * Clear all local notfications.
+ */
+- (void) clearAllLocalNotifications
+{
+ NSArray* notifications = self.triggeredLocalNotifications;
+
+ for (UILocalNotification* notification in notifications) {
+ [self clearLocalNotification:notification];
+ }
+}
+
+/*
+ * Clear single local notfication.
+ *
+ * @param notification
+ * The local notification object
+ */
+- (void) clearLocalNotification:(UILocalNotification*)notification
+{
+ [self cancelLocalNotification:notification];
+
+ if ([notification isRepeating]) {
+ notification.fireDate = notification.options.fireDate;
+
+ [self scheduleLocalNotification:notification];
+ };
+}
+
+@end