summaryrefslogtreecommitdiff
path: root/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java
diff options
context:
space:
mode:
authorArjun Roychowdhury <pliablepixels@gmail.com>2015-10-10 11:28:44 -0400
committerArjun Roychowdhury <pliablepixels@gmail.com>2015-10-10 11:28:44 -0400
commitd0d3aaf7af63afa041e9af145267b0bb04ee729f (patch)
treebe718a451ed33afeead4d87c186fe231fe09a444 /plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java
parent7b0d282994db52cc4bc6b62b33ce05efbb522fae (diff)
Notifications now have a blop sound, also handling application badges
Diffstat (limited to 'plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java')
-rw-r--r--plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java194
1 files changed, 194 insertions, 0 deletions
diff --git a/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java
new file mode 100644
index 00000000..a0be8b93
--- /dev/null
+++ b/plugins/de.appplant.cordova.plugin.local-notification/src/android/notification/Builder.java
@@ -0,0 +1,194 @@
+/*
+ * 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@
+ */
+
+package de.appplant.cordova.plugin.notification;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.v4.app.NotificationCompat;
+
+import org.json.JSONObject;
+
+import java.util.Random;
+
+/**
+ * Builder class for local notifications. Build fully configured local
+ * notification specified by JSON object passed from JS side.
+ */
+public class Builder {
+
+ // Application context passed by constructor
+ private final Context context;
+
+ // Notification options passed by JS
+ private final Options options;
+
+ // Receiver to handle the trigger event
+ private Class<?> triggerReceiver;
+
+ // Receiver to handle the clear event
+ private Class<?> clearReceiver = ClearReceiver.class;
+
+ // Activity to handle the click event
+ private Class<?> clickActivity = ClickActivity.class;
+
+ /**
+ * Constructor
+ *
+ * @param context
+ * Application context
+ * @param options
+ * Notification options
+ */
+ public Builder(Context context, JSONObject options) {
+ this.context = context;
+ this.options = new Options(context).parse(options);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param options
+ * Notification options
+ */
+ public Builder(Options options) {
+ this.context = options.getContext();
+ this.options = options;
+ }
+
+ /**
+ * Set trigger receiver.
+ *
+ * @param receiver
+ * Broadcast receiver
+ */
+ public Builder setTriggerReceiver(Class<?> receiver) {
+ this.triggerReceiver = receiver;
+ return this;
+ }
+
+ /**
+ * Set clear receiver.
+ *
+ * @param receiver
+ * Broadcast receiver
+ */
+ public Builder setClearReceiver(Class<?> receiver) {
+ this.clearReceiver = receiver;
+ return this;
+ }
+
+ /**
+ * Set click activity.
+ *
+ * @param activity
+ * Activity
+ */
+ public Builder setClickActivity(Class<?> activity) {
+ this.clickActivity = activity;
+ return this;
+ }
+
+ /**
+ * Creates the notification with all its options passed through JS.
+ */
+ public Notification build() {
+ Uri sound = options.getSoundUri();
+ NotificationCompat.BigTextStyle style;
+ NotificationCompat.Builder builder;
+
+ style = new NotificationCompat.BigTextStyle()
+ .bigText(options.getText());
+
+ builder = new NotificationCompat.Builder(context)
+ .setDefaults(0)
+ .setContentTitle(options.getTitle())
+ .setContentText(options.getText())
+ .setNumber(options.getBadgeNumber())
+ .setTicker(options.getText())
+ .setSmallIcon(options.getSmallIcon())
+ .setLargeIcon(options.getIconBitmap())
+ .setAutoCancel(options.isAutoClear())
+ .setOngoing(options.isOngoing())
+ .setStyle(style)
+ .setLights(options.getLedColor(), 500, 500);
+
+ if (sound != null) {
+ builder.setSound(sound);
+ }
+
+ applyDeleteReceiver(builder);
+ applyContentReceiver(builder);
+
+ return new Notification(context, options, builder, triggerReceiver);
+ }
+
+ /**
+ * Set intent to handle the delete event. Will clean up some persisted
+ * preferences.
+ *
+ * @param builder
+ * Local notification builder instance
+ */
+ private void applyDeleteReceiver(NotificationCompat.Builder builder) {
+
+ if (clearReceiver == null)
+ return;
+
+ Intent deleteIntent = new Intent(context, clearReceiver)
+ .setAction(options.getIdStr())
+ .putExtra(Options.EXTRA, options.toString());
+
+ PendingIntent dpi = PendingIntent.getBroadcast(
+ context, 0, deleteIntent, PendingIntent.FLAG_CANCEL_CURRENT);
+
+ builder.setDeleteIntent(dpi);
+ }
+
+ /**
+ * Set intent to handle the click event. Will bring the app to
+ * foreground.
+ *
+ * @param builder
+ * Local notification builder instance
+ */
+ private void applyContentReceiver(NotificationCompat.Builder builder) {
+
+ if (clickActivity == null)
+ return;
+
+ Intent intent = new Intent(context, clickActivity)
+ .putExtra(Options.EXTRA, options.toString())
+ .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
+
+ int requestCode = new Random().nextInt();
+
+ PendingIntent contentIntent = PendingIntent.getActivity(
+ context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+
+ builder.setContentIntent(contentIntent);
+ }
+
+}