JS interface to customize the notification on Android

This commit is contained in:
Sebastián Katzer 2014-11-04 14:48:14 +00:00
parent 96ae5df2ca
commit 439330a1d4
4 changed files with 98 additions and 29 deletions

View File

@ -21,6 +21,7 @@
<!-- js -->
<js-module src="www/background-mode.js" name="BackgroundMode">
<clobbers target="cordova.plugins.backgroundMode" />
<clobbers target="plugin.backgroundMode" />
</js-module>

View File

@ -33,6 +33,7 @@ import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class BackgroundMode extends CordovaPlugin {
@ -42,6 +43,9 @@ public class BackgroundMode extends CordovaPlugin {
// Flag indicates if the plugin is enabled or disabled
private boolean isDisabled = false;
// Settings for the notification
static JSONObject settings;
// Used to (un)bind the service to with the activity
private ServiceConnection connection = new ServiceConnection() {
@ -80,6 +84,11 @@ public class BackgroundMode extends CordovaPlugin {
return true;
}
if (action.equalsIgnoreCase("configure")) {
settings = args.getJSONObject(0);
return true;
}
if (action.equalsIgnoreCase("enable")) {
enableMode();
return true;

View File

@ -32,6 +32,9 @@ import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
@ -126,15 +129,18 @@ public class ForegroundService extends Service {
PendingIntent contentIntent = PendingIntent.getActivity(
context, NOTIFICATION_ID, intent, PendingIntent.FLAG_CANCEL_CURRENT);
String title = "App is running in background";
JSONObject settings = BackgroundMode.settings;
Notification.Builder notification = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(title)
.setTicker(title)
.setContentTitle(settings.optString("title"))
.setContentText(settings.optString("text"))
.setTicker(settings.optString("ticker"))
.setOngoing(true)
.setSmallIcon(getIconResId())
.setContentIntent(contentIntent);
.setSmallIcon(getIconResId());
if (settings.optBoolean("resume")) {
notification.setContentIntent(contentIntent);
}
if (Build.VERSION.SDK_INT < 16) {
// Build notification for HoneyComb to ICS

View File

@ -19,33 +19,86 @@
under the License.
*/
var BackgroundMode = function () {
var exec = require('cordova/exec'),
channel = require('cordova/channel');
// Override back button action to prevent being killed
document.addEventListener('backbutton', function () {}, false);
channel.deviceready.subscribe( function () {
// Registriert die Listener für die (sleep/resume) Events
cordova.exec(null, null, 'BackgroundMode', 'observeLifeCycle', []);
exports.configure();
});
/**
* List of all available options with their default value.
*
* @return {Object}
*/
exports.getDefaults = function () {
return {
title: 'App is running in background',
text: 'Doing heavy tasks.',
ticker: 'App is running in background',
resume: true
};
};
BackgroundMode.prototype = {
/**
* @public
*
* Aktiviert den Hintergrundmodus.
/**
* Activates the background mode. When activated the application
* will be prevented from going to sleep while in background
* for the next time.
*/
enable: function () {
exports.enable = function () {
cordova.exec(null, null, 'BackgroundMode', 'enable', []);
},
/**
* @public
*
* Deaktiviert den Hintergrundmodus
*/
disable: function () {
cordova.exec(null, null, 'BackgroundMode', 'disable', []);
}
};
var plugin = new BackgroundMode();
/**
* Deactivates the background mode. When deactivated the application
* will not stay awake while in background.
*/
exports.disable = function () {
cordova.exec(null, null, 'BackgroundMode', 'disable', []);
};
document.addEventListener("backbutton", function () {}, false);
/**
* Configures the notification settings for Android.
* Will be merged with the defaults.
*
* @param {Object} options
* Dict with key/value pairs
*/
exports.configure = function (options) {
var settings = this.mergeWithDefaults(options || {});
module.exports = plugin;
cordova.exec(null, null, 'BackgroundMode', 'configure', [settings]);
};
/**
* @private
*
* Merge settings with default values.
*
* @param {Object} options
* The custom options
*
* @return {Object}
* Default values merged
* with custom values
*/
exports.mergeWithDefaults = function (options) {
var defaults = this.getDefaults();
for (var key in defaults) {
if (!options.hasOwnProperty(key)) {
options[key] = defaults[key];
continue;
}
}
return options;
};