summaryrefslogtreecommitdiff
path: root/plugins/de.appplant.cordova.plugin.badge/src/ios
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/de.appplant.cordova.plugin.badge/src/ios')
-rw-r--r--plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.h40
-rw-r--r--plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.m205
-rw-r--r--plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.h31
-rw-r--r--plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.m85
4 files changed, 361 insertions, 0 deletions
diff --git a/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.h b/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.h
new file mode 100644
index 00000000..bf9a1e58
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.h
@@ -0,0 +1,40 @@
+/*
+ * 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 <Foundation/Foundation.h>
+#import <Cordova/CDVPlugin.h>
+
+@interface APPBadge : CDVPlugin
+
+// Clears the badge of the app icon
+- (void) clearBadge:(CDVInvokedUrlCommand *)command;
+// Sets the badge of the app icon
+- (void) setBadge:(CDVInvokedUrlCommand *)command;
+// Gets the badge of the app icon
+- (void) getBadge:(CDVInvokedUrlCommand *)command;
+// Informs if the app has the permission to show badges
+- (void) hasPermission:(CDVInvokedUrlCommand *)command;
+// Register permission to show badges
+- (void) registerPermission:(CDVInvokedUrlCommand *)command;
+
+@end
diff --git a/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.m b/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.m
new file mode 100644
index 00000000..e7db643f
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.badge/src/ios/APPBadge.m
@@ -0,0 +1,205 @@
+/*
+ * 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 "APPBadge.h"
+#import "UIApplication+APPBadge.h"
+#import "AppDelegate+APPRegisterUserNotificationSettings.h"
+
+@interface APPBadge ()
+
+// Needed when calling `registerPermission`
+@property (nonatomic, retain) CDVInvokedUrlCommand* command;
+
+@end
+
+@implementation APPBadge
+
+#pragma mark -
+#pragma mark Interface
+
+/**
+ * Clears the badge of the app icon.
+ *
+ */
+- (void) clearBadge:(CDVInvokedUrlCommand *)command
+{
+ [self.commandDelegate runInBackground:^{
+ [self.app setApplicationIconBadgeNumber:0];
+
+ [self sendPluginResult:CDVCommandStatus_OK
+ messageAsLong:0
+ callbackId:command.callbackId];
+ }];
+}
+
+/**
+ * Sets the badge of the app icon.
+ *
+ * @param badge
+ * The badge to be set
+ */
+- (void) setBadge:(CDVInvokedUrlCommand *)command
+{
+ NSArray* args = [command arguments];
+ int number = [[args objectAtIndex:0] intValue];
+
+ [self.commandDelegate runInBackground:^{
+ [self.app setApplicationIconBadgeNumber:number];
+
+ [self sendPluginResult:CDVCommandStatus_OK
+ messageAsLong:number
+ callbackId:command.callbackId];
+ }];
+}
+
+/**
+ * Gets the badge of the app icon.
+ *
+ * @param callback
+ * The function to be exec as the callback
+ */
+- (void) getBadge:(CDVInvokedUrlCommand *)command
+{
+ [self.commandDelegate runInBackground:^{
+ long badge = [self.app applicationIconBadgeNumber];
+
+ [self sendPluginResult:CDVCommandStatus_OK
+ messageAsLong:badge
+ callbackId:command.callbackId];
+ }];
+}
+
+/**
+ * Informs if the app has the permission to show badges.
+ *
+ * @param callback
+ * The function to be exec as the callback
+ */
+- (void) hasPermission:(CDVInvokedUrlCommand *)command
+{
+ [self.commandDelegate runInBackground:^{
+ BOOL hasPermission = [self.app hasPermissionToDisplayBadges];
+
+ [self sendPluginResult:CDVCommandStatus_OK
+ messageAsBool:hasPermission
+ callbackId:command.callbackId];
+ }];
+}
+
+/**
+ * Register permission to show badges.
+ *
+ * @param callback
+ * The function to be exec as the callback
+ */
+- (void) registerPermission:(CDVInvokedUrlCommand *)command
+{
+ if (![[UIApplication sharedApplication]
+ respondsToSelector:@selector(registerUserNotificationSettings:)])
+ {
+ return [self hasPermission:command];
+ }
+
+ _command = command;
+
+ [self.commandDelegate runInBackground:^{
+ [self.app registerPermissionToDisplayBadges];
+ }];
+}
+
+#pragma mark -
+#pragma mark Delegates
+
+/**
+ * Called on otification settings registration is completed.
+ */
+- (void) didRegisterUserNotificationSettings:(UIUserNotificationSettings*)settings
+{
+ if (_command)
+ {
+ [self hasPermission:_command];
+ _command = NULL;
+ }
+}
+
+#pragma mark -
+#pragma mark Life Cycle
+
+/**
+ * Registers obervers after plugin was initialized.
+ */
+- (void) pluginInitialize
+{
+ NSNotificationCenter* center = [NSNotificationCenter
+ defaultCenter];
+
+ [center addObserver:self
+ selector:@selector(didRegisterUserNotificationSettings:)
+ name:UIApplicationRegisterUserNotificationSettings
+ object:nil];
+}
+
+#pragma mark -
+#pragma mark Helper
+
+/**
+ * Short hand for shared application instance.
+ */
+- (UIApplication*) app
+{
+ return [UIApplication sharedApplication];
+}
+
+/**
+ * Sends a plugin result with the specified status and message.
+ */
+- (void) sendPluginResult:(CDVCommandStatus)status
+ messageAsBool:(BOOL)msg
+ callbackId:(NSString*)callbackId
+{
+ CDVPluginResult* result;
+
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
+ messageAsBool:msg];
+
+ [self.commandDelegate sendPluginResult:result
+ callbackId:callbackId];
+}
+
+/**
+ * Sends a plugin result with the specified status and message.
+ */
+- (void) sendPluginResult:(CDVCommandStatus)status
+ messageAsLong:(long)msg
+ callbackId:(NSString*)callbackId
+{
+ CDVPluginResult* result;
+
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
+ messageAsDouble:msg];
+
+ [self.commandDelegate sendPluginResult:result
+ callbackId:callbackId];
+}
+
+@end
diff --git a/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.h b/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.h
new file mode 100644
index 00000000..9ce7f7e5
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.h
@@ -0,0 +1,31 @@
+/*
+ * 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@
+ */
+
+@interface UIApplication (APPBadge)
+
+// If the app has the permission to display badges
+- (BOOL) hasPermissionToDisplayBadges;
+// Ask for permission to display badges
+- (void) registerPermissionToDisplayBadges;
+
+@end
diff --git a/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.m b/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.m
new file mode 100644
index 00000000..3e4cd99b
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.badge/src/ios/UIApplication+APPBadge.m
@@ -0,0 +1,85 @@
+/*
+ * 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+APPBadge.h"
+
+@implementation UIApplication (APPBadge)
+
+#pragma mark -
+#pragma mark Permissions
+
+/**
+ * If the app has the permission to display badges.
+ */
+- (BOOL) hasPermissionToDisplayBadges
+{
+ if (![self respondsToRegisterUserNotificationSettings])
+ return YES;
+
+ UIUserNotificationSettings *settings;
+
+ settings = [[UIApplication sharedApplication]
+ currentUserNotificationSettings];
+
+ return (settings.types & UIUserNotificationTypeBadge);
+}
+
+/**
+ * Register permission to display badges.
+ */
+- (void) registerPermissionToDisplayBadges
+{
+ if (![self respondsToRegisterUserNotificationSettings])
+ return;
+
+ UIUserNotificationType types;
+ UIUserNotificationSettings *settings;
+
+ settings = [[UIApplication sharedApplication]
+ currentUserNotificationSettings];
+
+ types = settings.types | UIUserNotificationTypeBadge;
+
+ settings = [UIUserNotificationSettings settingsForTypes:types
+ categories:nil];
+
+ [[UIApplication sharedApplication]
+ registerUserNotificationSettings:settings];
+}
+
+#pragma mark -
+#pragma mark Helper methods
+
+/**
+ * If UIApplication responds to seelctor registerUserNotificationSettings:
+ *
+ * @return
+ * true for iOS8 and above
+ */
+- (BOOL) respondsToRegisterUserNotificationSettings
+{
+ return [[UIApplication sharedApplication]
+ respondsToSelector:@selector(registerUserNotificationSettings:)];
+}
+
+@end