new cordova plugins
This commit is contained in:
		
							
								
								
									
										84
									
								
								cordova/platforms/android/android.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								cordova/platforms/android/android.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
{
 | 
			
		||||
    "prepare_queue": {
 | 
			
		||||
        "installed": [],
 | 
			
		||||
        "uninstalled": []
 | 
			
		||||
    },
 | 
			
		||||
    "config_munge": {
 | 
			
		||||
        "files": {
 | 
			
		||||
            "res/xml/config.xml": {
 | 
			
		||||
                "parents": {
 | 
			
		||||
                    "/*": [
 | 
			
		||||
                        {
 | 
			
		||||
                            "xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
 | 
			
		||||
                            "count": 1
 | 
			
		||||
                        },
 | 
			
		||||
                        {
 | 
			
		||||
                            "xml": "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>",
 | 
			
		||||
                            "count": 1
 | 
			
		||||
                        },
 | 
			
		||||
                        {
 | 
			
		||||
                            "xml": "<feature name=\"BackgroundMode\"><param name=\"android-package\" value=\"de.appplant.cordova.plugin.background.BackgroundMode\" /></feature>",
 | 
			
		||||
                            "count": 1
 | 
			
		||||
                        },
 | 
			
		||||
                        {
 | 
			
		||||
                            "xml": "<preference name=\"KeepRunning\" value=\"true\" />",
 | 
			
		||||
                            "count": 1
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "AndroidManifest.xml": {
 | 
			
		||||
                "parents": {
 | 
			
		||||
                    "/manifest/application": [
 | 
			
		||||
                        {
 | 
			
		||||
                            "xml": "<service android:name=\"de.appplant.cordova.plugin.background.ForegroundService\" />",
 | 
			
		||||
                            "count": 1
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "installed_plugins": {
 | 
			
		||||
        "cordova-plugin-whitelist": {
 | 
			
		||||
            "PACKAGE_NAME": "ch.safechat"
 | 
			
		||||
        },
 | 
			
		||||
        "cordova-plugin-device": {
 | 
			
		||||
            "PACKAGE_NAME": "ch.safechat"
 | 
			
		||||
        },
 | 
			
		||||
        "de.appplant.cordova.plugin.background-mode": {
 | 
			
		||||
            "PACKAGE_NAME": "ch.safechat"
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "dependent_plugins": {},
 | 
			
		||||
    "modules": [
 | 
			
		||||
        {
 | 
			
		||||
            "file": "plugins/cordova-plugin-whitelist/whitelist.js",
 | 
			
		||||
            "id": "cordova-plugin-whitelist.whitelist",
 | 
			
		||||
            "pluginId": "cordova-plugin-whitelist",
 | 
			
		||||
            "runs": true
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "file": "plugins/cordova-plugin-device/www/device.js",
 | 
			
		||||
            "id": "cordova-plugin-device.device",
 | 
			
		||||
            "pluginId": "cordova-plugin-device",
 | 
			
		||||
            "clobbers": [
 | 
			
		||||
                "device"
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "file": "plugins/de.appplant.cordova.plugin.background-mode/www/background-mode.js",
 | 
			
		||||
            "id": "de.appplant.cordova.plugin.background-mode.BackgroundMode",
 | 
			
		||||
            "pluginId": "de.appplant.cordova.plugin.background-mode",
 | 
			
		||||
            "clobbers": [
 | 
			
		||||
                "cordova.plugins.backgroundMode",
 | 
			
		||||
                "plugin.backgroundMode"
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "plugin_metadata": {
 | 
			
		||||
        "cordova-plugin-whitelist": "1.0.0",
 | 
			
		||||
        "cordova-plugin-device": "1.1.0",
 | 
			
		||||
        "de.appplant.cordova.plugin.background-mode": "0.6.4"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										85
									
								
								cordova/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								cordova/platforms/android/assets/www/plugins/cordova-plugin-device/www/device.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
cordova.define("cordova-plugin-device.device", function(require, exports, module) { /*
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
 * or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
 * distributed with this work for additional information
 | 
			
		||||
 * regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
 * to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance
 | 
			
		||||
 * with the License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing,
 | 
			
		||||
 * software distributed under the License is distributed on an
 | 
			
		||||
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
 * KIND, either express or implied.  See the License for the
 | 
			
		||||
 * specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var argscheck = require('cordova/argscheck'),
 | 
			
		||||
    channel = require('cordova/channel'),
 | 
			
		||||
    utils = require('cordova/utils'),
 | 
			
		||||
    exec = require('cordova/exec'),
 | 
			
		||||
    cordova = require('cordova');
 | 
			
		||||
 | 
			
		||||
channel.createSticky('onCordovaInfoReady');
 | 
			
		||||
// Tell cordova channel to wait on the CordovaInfoReady event
 | 
			
		||||
channel.waitForInitialization('onCordovaInfoReady');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
 | 
			
		||||
 * phone, etc.
 | 
			
		||||
 * @constructor
 | 
			
		||||
 */
 | 
			
		||||
function Device() {
 | 
			
		||||
    this.available = false;
 | 
			
		||||
    this.platform = null;
 | 
			
		||||
    this.version = null;
 | 
			
		||||
    this.uuid = null;
 | 
			
		||||
    this.cordova = null;
 | 
			
		||||
    this.model = null;
 | 
			
		||||
    this.manufacturer = null;
 | 
			
		||||
    this.isVirtual = null;
 | 
			
		||||
    this.serial = null;
 | 
			
		||||
 | 
			
		||||
    var me = this;
 | 
			
		||||
 | 
			
		||||
    channel.onCordovaReady.subscribe(function() {
 | 
			
		||||
        me.getInfo(function(info) {
 | 
			
		||||
            //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js
 | 
			
		||||
            //TODO: CB-5105 native implementations should not return info.cordova
 | 
			
		||||
            var buildLabel = cordova.version;
 | 
			
		||||
            me.available = true;
 | 
			
		||||
            me.platform = info.platform;
 | 
			
		||||
            me.version = info.version;
 | 
			
		||||
            me.uuid = info.uuid;
 | 
			
		||||
            me.cordova = buildLabel;
 | 
			
		||||
            me.model = info.model;
 | 
			
		||||
            me.isVirtual = info.isVirtual;
 | 
			
		||||
            me.manufacturer = info.manufacturer || 'unknown';
 | 
			
		||||
            me.serial = info.serial || 'unknown';
 | 
			
		||||
            channel.onCordovaInfoReady.fire();
 | 
			
		||||
        },function(e) {
 | 
			
		||||
            me.available = false;
 | 
			
		||||
            utils.alert("[ERROR] Error initializing Cordova: " + e);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get device info
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Function} successCallback The function to call when the heading data is available
 | 
			
		||||
 * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
 | 
			
		||||
 */
 | 
			
		||||
Device.prototype.getInfo = function(successCallback, errorCallback) {
 | 
			
		||||
    argscheck.checkArgs('fF', 'Device.getInfo', arguments);
 | 
			
		||||
    exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = new Device();
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
@@ -0,0 +1,196 @@
 | 
			
		||||
cordova.define("de.appplant.cordova.plugin.background-mode.BackgroundMode", function(require, exports, module) { /*
 | 
			
		||||
    Copyright 2013-2014 appPlant UG
 | 
			
		||||
 | 
			
		||||
    Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
    or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
    distributed with this work for additional information
 | 
			
		||||
    regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
    to you under the Apache License, Version 2.0 (the
 | 
			
		||||
    "License"); you may not use this file except in compliance
 | 
			
		||||
    with the License.  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing,
 | 
			
		||||
    software distributed under the License is distributed on an
 | 
			
		||||
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
    KIND, either express or implied.  See the License for the
 | 
			
		||||
    specific language governing permissions and limitations
 | 
			
		||||
    under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var exec    = require('cordova/exec'),
 | 
			
		||||
    channel = require('cordova/channel');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Override back button action to prevent being killed
 | 
			
		||||
document.addEventListener('backbutton', function () {}, false);
 | 
			
		||||
 | 
			
		||||
// Called before 'deviceready' listener will be called
 | 
			
		||||
channel.onCordovaReady.subscribe(function () {
 | 
			
		||||
    // Device plugin is ready now
 | 
			
		||||
    channel.onCordovaInfoReady.subscribe(function () {
 | 
			
		||||
        // Set the defaults
 | 
			
		||||
        exports.setDefaults({});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Only enable WP8 by default
 | 
			
		||||
    if (['WinCE', 'Win32NT'].indexOf(device.platform) > -1) {
 | 
			
		||||
        exports.enable();
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Flag indicated if the mode is enabled.
 | 
			
		||||
 */
 | 
			
		||||
exports._isEnabled = false;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Flag indicated if the mode is active.
 | 
			
		||||
 */
 | 
			
		||||
exports._isActive = false;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Default values of all available options.
 | 
			
		||||
 */
 | 
			
		||||
exports._defaults = {
 | 
			
		||||
    title:  'App is running in background',
 | 
			
		||||
    text:   'Doing heavy tasks.',
 | 
			
		||||
    ticker: 'App is running in background',
 | 
			
		||||
    resume: true,
 | 
			
		||||
    silent: false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Activates the background mode. When activated the application
 | 
			
		||||
 * will be prevented from going to sleep while in background
 | 
			
		||||
 * for the next time.
 | 
			
		||||
 */
 | 
			
		||||
exports.enable = function () {
 | 
			
		||||
    this._isEnabled = true;
 | 
			
		||||
    cordova.exec(null, null, 'BackgroundMode', 'enable', []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Deactivates the background mode. When deactivated the application
 | 
			
		||||
 * will not stay awake while in background.
 | 
			
		||||
 */
 | 
			
		||||
exports.disable = function () {
 | 
			
		||||
    this._isEnabled = false;
 | 
			
		||||
    cordova.exec(null, null, 'BackgroundMode', 'disable', []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * List of all available options with their default value.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Object}
 | 
			
		||||
 */
 | 
			
		||||
exports.getDefaults = function () {
 | 
			
		||||
    return this._defaults;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Overwrite default settings
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Object} overrides
 | 
			
		||||
 *      Dict of options which shall be overridden
 | 
			
		||||
 */
 | 
			
		||||
exports.setDefaults = function (overrides) {
 | 
			
		||||
    var defaults = this.getDefaults();
 | 
			
		||||
 | 
			
		||||
    for (var key in defaults) {
 | 
			
		||||
        if (overrides.hasOwnProperty(key)) {
 | 
			
		||||
            defaults[key] = overrides[key];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (device.platform == 'Android') {
 | 
			
		||||
        cordova.exec(null, null, 'BackgroundMode', 'configure', [defaults, 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);
 | 
			
		||||
 | 
			
		||||
    if (device.platform == 'Android') {
 | 
			
		||||
        cordova.exec(null, null, 'BackgroundMode', 'configure', [settings, true]);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * If the mode is enabled or disabled.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
exports.isEnabled = function () {
 | 
			
		||||
    return this._isEnabled;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * If the mode is active.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
exports.isActive = function () {
 | 
			
		||||
    return this._isActive;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode has been activated.
 | 
			
		||||
 */
 | 
			
		||||
exports.onactivate = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode has been deaktivated.
 | 
			
		||||
 */
 | 
			
		||||
exports.ondeactivate = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode could not been activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Integer} errorCode
 | 
			
		||||
 *      Error code which describes the error
 | 
			
		||||
 */
 | 
			
		||||
exports.onfailure = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @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;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										35
									
								
								cordova/platforms/android/platform_www/cordova_plugins.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								cordova/platforms/android/platform_www/cordova_plugins.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
cordova.define('cordova/plugin_list', function(require, exports, module) {
 | 
			
		||||
module.exports = [
 | 
			
		||||
    {
 | 
			
		||||
        "file": "plugins/cordova-plugin-whitelist/whitelist.js",
 | 
			
		||||
        "id": "cordova-plugin-whitelist.whitelist",
 | 
			
		||||
        "pluginId": "cordova-plugin-whitelist",
 | 
			
		||||
        "runs": true
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "file": "plugins/cordova-plugin-device/www/device.js",
 | 
			
		||||
        "id": "cordova-plugin-device.device",
 | 
			
		||||
        "pluginId": "cordova-plugin-device",
 | 
			
		||||
        "clobbers": [
 | 
			
		||||
            "device"
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "file": "plugins/de.appplant.cordova.plugin.background-mode/www/background-mode.js",
 | 
			
		||||
        "id": "de.appplant.cordova.plugin.background-mode.BackgroundMode",
 | 
			
		||||
        "pluginId": "de.appplant.cordova.plugin.background-mode",
 | 
			
		||||
        "clobbers": [
 | 
			
		||||
            "cordova.plugins.backgroundMode",
 | 
			
		||||
            "plugin.backgroundMode"
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
];
 | 
			
		||||
module.exports.metadata = 
 | 
			
		||||
// TOP OF METADATA
 | 
			
		||||
{
 | 
			
		||||
    "cordova-plugin-whitelist": "1.0.0",
 | 
			
		||||
    "cordova-plugin-device": "1.1.0",
 | 
			
		||||
    "de.appplant.cordova.plugin.background-mode": "0.6.4"
 | 
			
		||||
}
 | 
			
		||||
// BOTTOM OF METADATA
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										85
									
								
								cordova/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								cordova/platforms/android/platform_www/plugins/cordova-plugin-device/www/device.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
cordova.define("cordova-plugin-device.device", function(require, exports, module) { /*
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
 * or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
 * distributed with this work for additional information
 | 
			
		||||
 * regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
 * to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance
 | 
			
		||||
 * with the License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing,
 | 
			
		||||
 * software distributed under the License is distributed on an
 | 
			
		||||
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
 * KIND, either express or implied.  See the License for the
 | 
			
		||||
 * specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var argscheck = require('cordova/argscheck'),
 | 
			
		||||
    channel = require('cordova/channel'),
 | 
			
		||||
    utils = require('cordova/utils'),
 | 
			
		||||
    exec = require('cordova/exec'),
 | 
			
		||||
    cordova = require('cordova');
 | 
			
		||||
 | 
			
		||||
channel.createSticky('onCordovaInfoReady');
 | 
			
		||||
// Tell cordova channel to wait on the CordovaInfoReady event
 | 
			
		||||
channel.waitForInitialization('onCordovaInfoReady');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
 | 
			
		||||
 * phone, etc.
 | 
			
		||||
 * @constructor
 | 
			
		||||
 */
 | 
			
		||||
function Device() {
 | 
			
		||||
    this.available = false;
 | 
			
		||||
    this.platform = null;
 | 
			
		||||
    this.version = null;
 | 
			
		||||
    this.uuid = null;
 | 
			
		||||
    this.cordova = null;
 | 
			
		||||
    this.model = null;
 | 
			
		||||
    this.manufacturer = null;
 | 
			
		||||
    this.isVirtual = null;
 | 
			
		||||
    this.serial = null;
 | 
			
		||||
 | 
			
		||||
    var me = this;
 | 
			
		||||
 | 
			
		||||
    channel.onCordovaReady.subscribe(function() {
 | 
			
		||||
        me.getInfo(function(info) {
 | 
			
		||||
            //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js
 | 
			
		||||
            //TODO: CB-5105 native implementations should not return info.cordova
 | 
			
		||||
            var buildLabel = cordova.version;
 | 
			
		||||
            me.available = true;
 | 
			
		||||
            me.platform = info.platform;
 | 
			
		||||
            me.version = info.version;
 | 
			
		||||
            me.uuid = info.uuid;
 | 
			
		||||
            me.cordova = buildLabel;
 | 
			
		||||
            me.model = info.model;
 | 
			
		||||
            me.isVirtual = info.isVirtual;
 | 
			
		||||
            me.manufacturer = info.manufacturer || 'unknown';
 | 
			
		||||
            me.serial = info.serial || 'unknown';
 | 
			
		||||
            channel.onCordovaInfoReady.fire();
 | 
			
		||||
        },function(e) {
 | 
			
		||||
            me.available = false;
 | 
			
		||||
            utils.alert("[ERROR] Error initializing Cordova: " + e);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get device info
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Function} successCallback The function to call when the heading data is available
 | 
			
		||||
 * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
 | 
			
		||||
 */
 | 
			
		||||
Device.prototype.getInfo = function(successCallback, errorCallback) {
 | 
			
		||||
    argscheck.checkArgs('fF', 'Device.getInfo', arguments);
 | 
			
		||||
    exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = new Device();
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										29
									
								
								cordova/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								cordova/platforms/android/platform_www/plugins/cordova-plugin-whitelist/whitelist.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { /*
 | 
			
		||||
 * Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
 * or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
 * distributed with this work for additional information
 | 
			
		||||
 * regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
 * to you under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance
 | 
			
		||||
 * with the License.  You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing,
 | 
			
		||||
 * software distributed under the License is distributed on an
 | 
			
		||||
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
 * KIND, either express or implied.  See the License for the
 | 
			
		||||
 * specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) {
 | 
			
		||||
    var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.';
 | 
			
		||||
    console.error(msg);
 | 
			
		||||
    setInterval(function() {
 | 
			
		||||
        console.warn(msg);
 | 
			
		||||
    }, 10000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
@@ -0,0 +1,196 @@
 | 
			
		||||
cordova.define("de.appplant.cordova.plugin.background-mode.BackgroundMode", function(require, exports, module) { /*
 | 
			
		||||
    Copyright 2013-2014 appPlant UG
 | 
			
		||||
 | 
			
		||||
    Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
    or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
    distributed with this work for additional information
 | 
			
		||||
    regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
    to you under the Apache License, Version 2.0 (the
 | 
			
		||||
    "License"); you may not use this file except in compliance
 | 
			
		||||
    with the License.  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing,
 | 
			
		||||
    software distributed under the License is distributed on an
 | 
			
		||||
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
    KIND, either express or implied.  See the License for the
 | 
			
		||||
    specific language governing permissions and limitations
 | 
			
		||||
    under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var exec    = require('cordova/exec'),
 | 
			
		||||
    channel = require('cordova/channel');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Override back button action to prevent being killed
 | 
			
		||||
document.addEventListener('backbutton', function () {}, false);
 | 
			
		||||
 | 
			
		||||
// Called before 'deviceready' listener will be called
 | 
			
		||||
channel.onCordovaReady.subscribe(function () {
 | 
			
		||||
    // Device plugin is ready now
 | 
			
		||||
    channel.onCordovaInfoReady.subscribe(function () {
 | 
			
		||||
        // Set the defaults
 | 
			
		||||
        exports.setDefaults({});
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Only enable WP8 by default
 | 
			
		||||
    if (['WinCE', 'Win32NT'].indexOf(device.platform) > -1) {
 | 
			
		||||
        exports.enable();
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Flag indicated if the mode is enabled.
 | 
			
		||||
 */
 | 
			
		||||
exports._isEnabled = false;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Flag indicated if the mode is active.
 | 
			
		||||
 */
 | 
			
		||||
exports._isActive = false;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @private
 | 
			
		||||
 *
 | 
			
		||||
 * Default values of all available options.
 | 
			
		||||
 */
 | 
			
		||||
exports._defaults = {
 | 
			
		||||
    title:  'App is running in background',
 | 
			
		||||
    text:   'Doing heavy tasks.',
 | 
			
		||||
    ticker: 'App is running in background',
 | 
			
		||||
    resume: true,
 | 
			
		||||
    silent: false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Activates the background mode. When activated the application
 | 
			
		||||
 * will be prevented from going to sleep while in background
 | 
			
		||||
 * for the next time.
 | 
			
		||||
 */
 | 
			
		||||
exports.enable = function () {
 | 
			
		||||
    this._isEnabled = true;
 | 
			
		||||
    cordova.exec(null, null, 'BackgroundMode', 'enable', []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Deactivates the background mode. When deactivated the application
 | 
			
		||||
 * will not stay awake while in background.
 | 
			
		||||
 */
 | 
			
		||||
exports.disable = function () {
 | 
			
		||||
    this._isEnabled = false;
 | 
			
		||||
    cordova.exec(null, null, 'BackgroundMode', 'disable', []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * List of all available options with their default value.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Object}
 | 
			
		||||
 */
 | 
			
		||||
exports.getDefaults = function () {
 | 
			
		||||
    return this._defaults;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Overwrite default settings
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Object} overrides
 | 
			
		||||
 *      Dict of options which shall be overridden
 | 
			
		||||
 */
 | 
			
		||||
exports.setDefaults = function (overrides) {
 | 
			
		||||
    var defaults = this.getDefaults();
 | 
			
		||||
 | 
			
		||||
    for (var key in defaults) {
 | 
			
		||||
        if (overrides.hasOwnProperty(key)) {
 | 
			
		||||
            defaults[key] = overrides[key];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (device.platform == 'Android') {
 | 
			
		||||
        cordova.exec(null, null, 'BackgroundMode', 'configure', [defaults, 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);
 | 
			
		||||
 | 
			
		||||
    if (device.platform == 'Android') {
 | 
			
		||||
        cordova.exec(null, null, 'BackgroundMode', 'configure', [settings, true]);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * If the mode is enabled or disabled.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
exports.isEnabled = function () {
 | 
			
		||||
    return this._isEnabled;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * If the mode is active.
 | 
			
		||||
 *
 | 
			
		||||
 * @return {Boolean}
 | 
			
		||||
 */
 | 
			
		||||
exports.isActive = function () {
 | 
			
		||||
    return this._isActive;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode has been activated.
 | 
			
		||||
 */
 | 
			
		||||
exports.onactivate = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode has been deaktivated.
 | 
			
		||||
 */
 | 
			
		||||
exports.ondeactivate = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when the background mode could not been activated.
 | 
			
		||||
 *
 | 
			
		||||
 * @param {Integer} errorCode
 | 
			
		||||
 *      Error code which describes the error
 | 
			
		||||
 */
 | 
			
		||||
exports.onfailure = function () {};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @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;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
@@ -0,0 +1,312 @@
 | 
			
		||||
/*
 | 
			
		||||
    Copyright 2013-2014 appPlant UG
 | 
			
		||||
 | 
			
		||||
    Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
    or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
    distributed with this work for additional information
 | 
			
		||||
    regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
    to you under the Apache License, Version 2.0 (the
 | 
			
		||||
    "License"); you may not use this file except in compliance
 | 
			
		||||
    with the License.  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing,
 | 
			
		||||
    software distributed under the License is distributed on an
 | 
			
		||||
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
    KIND, either express or implied.  See the License for the
 | 
			
		||||
    specific language governing permissions and limitations
 | 
			
		||||
    under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package de.appplant.cordova.plugin.background;
 | 
			
		||||
 | 
			
		||||
import org.apache.cordova.CallbackContext;
 | 
			
		||||
import org.apache.cordova.CordovaPlugin;
 | 
			
		||||
import org.json.JSONArray;
 | 
			
		||||
import org.json.JSONException;
 | 
			
		||||
import org.json.JSONObject;
 | 
			
		||||
 | 
			
		||||
import android.app.Activity;
 | 
			
		||||
import android.content.ComponentName;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.content.ServiceConnection;
 | 
			
		||||
import android.os.IBinder;
 | 
			
		||||
 | 
			
		||||
public class BackgroundMode extends CordovaPlugin {
 | 
			
		||||
 | 
			
		||||
    // Event types for callbacks
 | 
			
		||||
    private enum Event {
 | 
			
		||||
        ACTIVATE, DEACTIVATE, FAILURE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Plugin namespace
 | 
			
		||||
    private static final String JS_NAMESPACE = "cordova.plugins.backgroundMode";
 | 
			
		||||
 | 
			
		||||
    // Flag indicates if the app is in background or foreground
 | 
			
		||||
    private boolean inBackground = false;
 | 
			
		||||
 | 
			
		||||
    // Flag indicates if the plugin is enabled or disabled
 | 
			
		||||
    private boolean isDisabled = true;
 | 
			
		||||
 | 
			
		||||
    // Flag indicates if the service is bind
 | 
			
		||||
    private boolean isBind = false;
 | 
			
		||||
 | 
			
		||||
    // Default settings for the notification
 | 
			
		||||
    private static JSONObject defaultSettings = new JSONObject();
 | 
			
		||||
 | 
			
		||||
    // Tmp config settings for the notification
 | 
			
		||||
    private static JSONObject updateSettings;
 | 
			
		||||
 | 
			
		||||
    // Used to (un)bind the service to with the activity
 | 
			
		||||
    private final ServiceConnection connection = new ServiceConnection() {
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void onServiceConnected(ComponentName name, IBinder binder) {
 | 
			
		||||
            // Nothing to do here
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public void onServiceDisconnected(ComponentName name) {
 | 
			
		||||
            // Nothing to do here
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Executes the request.
 | 
			
		||||
     *
 | 
			
		||||
     * @param action   The action to execute.
 | 
			
		||||
     * @param args     The exec() arguments.
 | 
			
		||||
     * @param callback The callback context used when
 | 
			
		||||
     *                 calling back into JavaScript.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     *      Returning false results in a "MethodNotFound" error.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws JSONException
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean execute (String action, JSONArray args,
 | 
			
		||||
                            CallbackContext callback) throws JSONException {
 | 
			
		||||
 | 
			
		||||
        if (action.equalsIgnoreCase("configure")) {
 | 
			
		||||
            JSONObject settings = args.getJSONObject(0);
 | 
			
		||||
            boolean update = args.getBoolean(1);
 | 
			
		||||
 | 
			
		||||
            if (update) {
 | 
			
		||||
                setUpdateSettings(settings);
 | 
			
		||||
                updateNotifcation();
 | 
			
		||||
            } else {
 | 
			
		||||
                setDefaultSettings(settings);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (action.equalsIgnoreCase("enable")) {
 | 
			
		||||
            enableMode();
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (action.equalsIgnoreCase("disable")) {
 | 
			
		||||
            disableMode();
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when the system is about to start resuming a previous activity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param multitasking
 | 
			
		||||
     *      Flag indicating if multitasking is turned on for app
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onPause(boolean multitasking) {
 | 
			
		||||
        super.onPause(multitasking);
 | 
			
		||||
        inBackground = true;
 | 
			
		||||
        startService();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when the activity will start interacting with the user.
 | 
			
		||||
     *
 | 
			
		||||
     * @param multitasking
 | 
			
		||||
     *      Flag indicating if multitasking is turned on for app
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onResume(boolean multitasking) {
 | 
			
		||||
        super.onResume(multitasking);
 | 
			
		||||
        inBackground = false;
 | 
			
		||||
        stopService();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when the activity will be destroyed.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDestroy() {
 | 
			
		||||
        super.onDestroy();
 | 
			
		||||
        stopService();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enable the background mode.
 | 
			
		||||
     */
 | 
			
		||||
    private void enableMode() {
 | 
			
		||||
        isDisabled = false;
 | 
			
		||||
 | 
			
		||||
        if (inBackground) {
 | 
			
		||||
            startService();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Disable the background mode.
 | 
			
		||||
     */
 | 
			
		||||
    private void disableMode() {
 | 
			
		||||
        stopService();
 | 
			
		||||
        isDisabled = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update the default settings for the notification.
 | 
			
		||||
     *
 | 
			
		||||
     * @param settings
 | 
			
		||||
     *      The new default settings
 | 
			
		||||
     */
 | 
			
		||||
    private void setDefaultSettings(JSONObject settings) {
 | 
			
		||||
        defaultSettings = settings;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update the config settings for the notification.
 | 
			
		||||
     *
 | 
			
		||||
     * @param settings
 | 
			
		||||
     *      The tmp config settings
 | 
			
		||||
     */
 | 
			
		||||
    private void setUpdateSettings(JSONObject settings) {
 | 
			
		||||
        updateSettings = settings;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The settings for the new/updated notification.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     *      updateSettings if set or default settings
 | 
			
		||||
     */
 | 
			
		||||
    protected static JSONObject getSettings() {
 | 
			
		||||
        if (updateSettings != null)
 | 
			
		||||
            return updateSettings;
 | 
			
		||||
 | 
			
		||||
        return defaultSettings;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called by ForegroundService to delete the update settings.
 | 
			
		||||
     */
 | 
			
		||||
    protected static void deleteUpdateSettings() {
 | 
			
		||||
        updateSettings = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update the notification.
 | 
			
		||||
     */
 | 
			
		||||
    private void updateNotifcation() {
 | 
			
		||||
        if (isBind) {
 | 
			
		||||
            stopService();
 | 
			
		||||
            startService();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Bind the activity to a background service and put them into foreground
 | 
			
		||||
     * state.
 | 
			
		||||
     */
 | 
			
		||||
    private void startService() {
 | 
			
		||||
        Activity context = cordova.getActivity();
 | 
			
		||||
 | 
			
		||||
        Intent intent = new Intent(
 | 
			
		||||
                context, ForegroundService.class);
 | 
			
		||||
 | 
			
		||||
        if (isDisabled || isBind)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            context.bindService(
 | 
			
		||||
                    intent, connection, Context.BIND_AUTO_CREATE);
 | 
			
		||||
 | 
			
		||||
            fireEvent(Event.ACTIVATE, null);
 | 
			
		||||
 | 
			
		||||
            context.startService(intent);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            fireEvent(Event.FAILURE, e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        isBind = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Bind the activity to a background service and put them into foreground
 | 
			
		||||
     * state.
 | 
			
		||||
     */
 | 
			
		||||
    private void stopService() {
 | 
			
		||||
        Activity context = cordova.getActivity();
 | 
			
		||||
 | 
			
		||||
        Intent intent = new Intent(
 | 
			
		||||
                context, ForegroundService.class);
 | 
			
		||||
 | 
			
		||||
        if (!isBind)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        fireEvent(Event.DEACTIVATE, null);
 | 
			
		||||
 | 
			
		||||
        context.unbindService(connection);
 | 
			
		||||
        context.stopService(intent);
 | 
			
		||||
 | 
			
		||||
        isBind = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Fire vent with some parameters inside the web view.
 | 
			
		||||
     *
 | 
			
		||||
     * @param event
 | 
			
		||||
     *      The name of the event
 | 
			
		||||
     * @param params
 | 
			
		||||
     *      Optional arguments for the event
 | 
			
		||||
     */
 | 
			
		||||
    private void fireEvent (Event event, String params) {
 | 
			
		||||
        String eventName;
 | 
			
		||||
 | 
			
		||||
        if (updateSettings != null && event != Event.FAILURE)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        switch (event) {
 | 
			
		||||
            case ACTIVATE:
 | 
			
		||||
                eventName = "activate"; break;
 | 
			
		||||
            case DEACTIVATE:
 | 
			
		||||
                eventName = "deactivate"; break;
 | 
			
		||||
            default:
 | 
			
		||||
                eventName = "failure";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String active = event == Event.ACTIVATE ? "true" : "false";
 | 
			
		||||
 | 
			
		||||
        String flag = String.format("%s._isActive=%s;",
 | 
			
		||||
                JS_NAMESPACE, active);
 | 
			
		||||
 | 
			
		||||
        String fn = String.format("setTimeout('%s.on%s(%s)',0);",
 | 
			
		||||
                JS_NAMESPACE, eventName, params);
 | 
			
		||||
 | 
			
		||||
        final String js = flag + fn;
 | 
			
		||||
 | 
			
		||||
        cordova.getActivity().runOnUiThread(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                webView.loadUrl("javascript:" + js);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,190 @@
 | 
			
		||||
/*
 | 
			
		||||
    Copyright 2013-2014 appPlant UG
 | 
			
		||||
 | 
			
		||||
    Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
    or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
    distributed with this work for additional information
 | 
			
		||||
    regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
    to you under the Apache License, Version 2.0 (the
 | 
			
		||||
    "License"); you may not use this file except in compliance
 | 
			
		||||
    with the License.  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
    Unless required by applicable law or agreed to in writing,
 | 
			
		||||
    software distributed under the License is distributed on an
 | 
			
		||||
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
    KIND, either express or implied.  See the License for the
 | 
			
		||||
    specific language governing permissions and limitations
 | 
			
		||||
    under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package de.appplant.cordova.plugin.background;
 | 
			
		||||
 | 
			
		||||
import java.util.Timer;
 | 
			
		||||
import java.util.TimerTask;
 | 
			
		||||
 | 
			
		||||
import org.json.JSONObject;
 | 
			
		||||
 | 
			
		||||
import android.annotation.SuppressLint;
 | 
			
		||||
import android.app.Notification;
 | 
			
		||||
import android.app.PendingIntent;
 | 
			
		||||
import android.app.Service;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.content.res.Resources;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Handler;
 | 
			
		||||
import android.os.IBinder;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Puts the service in a foreground state, where the system considers it to be
 | 
			
		||||
 * something the user is actively aware of and thus not a candidate for killing
 | 
			
		||||
 * when low on memory.
 | 
			
		||||
 */
 | 
			
		||||
public class ForegroundService extends Service {
 | 
			
		||||
 | 
			
		||||
    // Fixed ID for the 'foreground' notification
 | 
			
		||||
    private static final int NOTIFICATION_ID = -574543954;
 | 
			
		||||
 | 
			
		||||
    // Scheduler to exec periodic tasks
 | 
			
		||||
    final Timer scheduler = new Timer();
 | 
			
		||||
 | 
			
		||||
    // Used to keep the app alive
 | 
			
		||||
    TimerTask keepAliveTask;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Allow clients to call on to the service.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public IBinder onBind (Intent intent) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Put the service in a foreground state to prevent app from being killed
 | 
			
		||||
     * by the OS.
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onCreate () {
 | 
			
		||||
        super.onCreate();
 | 
			
		||||
        keepAwake();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDestroy() {
 | 
			
		||||
        super.onDestroy();
 | 
			
		||||
        sleepWell();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Put the service in a foreground state to prevent app from being killed
 | 
			
		||||
     * by the OS.
 | 
			
		||||
     */
 | 
			
		||||
    public void keepAwake() {
 | 
			
		||||
        final Handler handler = new Handler();
 | 
			
		||||
 | 
			
		||||
        if (!this.inSilentMode()) {
 | 
			
		||||
            startForeground(NOTIFICATION_ID, makeNotification());
 | 
			
		||||
        } else {
 | 
			
		||||
            Log.w("BackgroundMode", "In silent mode app may be paused by OS!");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        BackgroundMode.deleteUpdateSettings();
 | 
			
		||||
 | 
			
		||||
        keepAliveTask = new TimerTask() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                handler.post(new Runnable() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void run() {
 | 
			
		||||
                        // Nothing to do here
 | 
			
		||||
                        // Log.d("BackgroundMode", "" + new Date().getTime());
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        scheduler.schedule(keepAliveTask, 0, 1000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Stop background mode.
 | 
			
		||||
     */
 | 
			
		||||
    private void sleepWell() {
 | 
			
		||||
        stopForeground(true);
 | 
			
		||||
        keepAliveTask.cancel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a notification as the visible part to be able to put the service
 | 
			
		||||
     * in a foreground state.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     *      A local ongoing notification which pending intent is bound to the
 | 
			
		||||
     *      main activity.
 | 
			
		||||
     */
 | 
			
		||||
    @SuppressLint("NewApi")
 | 
			
		||||
    @SuppressWarnings("deprecation")
 | 
			
		||||
    private Notification makeNotification() {
 | 
			
		||||
        JSONObject settings = BackgroundMode.getSettings();
 | 
			
		||||
        Context context     = getApplicationContext();
 | 
			
		||||
        String pkgName      = context.getPackageName();
 | 
			
		||||
        Intent intent       = context.getPackageManager()
 | 
			
		||||
                .getLaunchIntentForPackage(pkgName);
 | 
			
		||||
 | 
			
		||||
        Notification.Builder notification = new Notification.Builder(context)
 | 
			
		||||
            .setContentTitle(settings.optString("title", ""))
 | 
			
		||||
            .setContentText(settings.optString("text", ""))
 | 
			
		||||
            .setTicker(settings.optString("ticker", ""))
 | 
			
		||||
            .setOngoing(true)
 | 
			
		||||
            .setSmallIcon(getIconResId());
 | 
			
		||||
 | 
			
		||||
        if (intent != null && settings.optBoolean("resume")) {
 | 
			
		||||
 | 
			
		||||
            PendingIntent contentIntent = PendingIntent.getActivity(
 | 
			
		||||
                    context, NOTIFICATION_ID, intent, PendingIntent.FLAG_CANCEL_CURRENT);
 | 
			
		||||
 | 
			
		||||
            notification.setContentIntent(contentIntent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (Build.VERSION.SDK_INT < 16) {
 | 
			
		||||
            // Build notification for HoneyComb to ICS
 | 
			
		||||
            return notification.getNotification();
 | 
			
		||||
        } else {
 | 
			
		||||
            // Notification for Jellybean and above
 | 
			
		||||
            return notification.build();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves the resource ID of the app icon.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     *      The resource ID of the app icon
 | 
			
		||||
     */
 | 
			
		||||
    private int getIconResId() {
 | 
			
		||||
        Context context = getApplicationContext();
 | 
			
		||||
        Resources res   = context.getResources();
 | 
			
		||||
        String pkgName  = context.getPackageName();
 | 
			
		||||
 | 
			
		||||
        int resId;
 | 
			
		||||
        resId = res.getIdentifier("icon", "drawable", pkgName);
 | 
			
		||||
 | 
			
		||||
        return resId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * In silent mode no notification has to be added.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     *      True if silent: was set to true
 | 
			
		||||
     */
 | 
			
		||||
    private boolean inSilentMode() {
 | 
			
		||||
        JSONObject settings = BackgroundMode.getSettings();
 | 
			
		||||
 | 
			
		||||
        return settings.optBoolean("silent", false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,174 @@
 | 
			
		||||
/*
 | 
			
		||||
       Licensed to the Apache Software Foundation (ASF) under one
 | 
			
		||||
       or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
       distributed with this work for additional information
 | 
			
		||||
       regarding copyright ownership.  The ASF licenses this file
 | 
			
		||||
       to you under the Apache License, Version 2.0 (the
 | 
			
		||||
       "License"); you may not use this file except in compliance
 | 
			
		||||
       with the License.  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
         http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
       Unless required by applicable law or agreed to in writing,
 | 
			
		||||
       software distributed under the License is distributed on an
 | 
			
		||||
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | 
			
		||||
       KIND, either express or implied.  See the License for the
 | 
			
		||||
       specific language governing permissions and limitations
 | 
			
		||||
       under the License.
 | 
			
		||||
*/
 | 
			
		||||
package org.apache.cordova.device;
 | 
			
		||||
 | 
			
		||||
import java.util.TimeZone;
 | 
			
		||||
 | 
			
		||||
import org.apache.cordova.CordovaWebView;
 | 
			
		||||
import org.apache.cordova.CallbackContext;
 | 
			
		||||
import org.apache.cordova.CordovaPlugin;
 | 
			
		||||
import org.apache.cordova.CordovaInterface;
 | 
			
		||||
import org.json.JSONArray;
 | 
			
		||||
import org.json.JSONException;
 | 
			
		||||
import org.json.JSONObject;
 | 
			
		||||
 | 
			
		||||
import android.provider.Settings;
 | 
			
		||||
 | 
			
		||||
public class Device extends CordovaPlugin {
 | 
			
		||||
    public static final String TAG = "Device";
 | 
			
		||||
 | 
			
		||||
    public static String platform;                            // Device OS
 | 
			
		||||
    public static String uuid;                                // Device UUID
 | 
			
		||||
 | 
			
		||||
    private static final String ANDROID_PLATFORM = "Android";
 | 
			
		||||
    private static final String AMAZON_PLATFORM = "amazon-fireos";
 | 
			
		||||
    private static final String AMAZON_DEVICE = "Amazon";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     */
 | 
			
		||||
    public Device() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the context of the Command. This can then be used to do things like
 | 
			
		||||
     * get file paths associated with the Activity.
 | 
			
		||||
     *
 | 
			
		||||
     * @param cordova The context of the main Activity.
 | 
			
		||||
     * @param webView The CordovaWebView Cordova is running in.
 | 
			
		||||
     */
 | 
			
		||||
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
 | 
			
		||||
        super.initialize(cordova, webView);
 | 
			
		||||
        Device.uuid = getUuid();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Executes the request and returns PluginResult.
 | 
			
		||||
     *
 | 
			
		||||
     * @param action            The action to execute.
 | 
			
		||||
     * @param args              JSONArry of arguments for the plugin.
 | 
			
		||||
     * @param callbackContext   The callback id used when calling back into JavaScript.
 | 
			
		||||
     * @return                  True if the action was valid, false if not.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
 | 
			
		||||
        if ("getDeviceInfo".equals(action)) {
 | 
			
		||||
            JSONObject r = new JSONObject();
 | 
			
		||||
            r.put("uuid", Device.uuid);
 | 
			
		||||
            r.put("version", this.getOSVersion());
 | 
			
		||||
            r.put("platform", this.getPlatform());
 | 
			
		||||
            r.put("model", this.getModel());
 | 
			
		||||
            r.put("manufacturer", this.getManufacturer());
 | 
			
		||||
	        r.put("isVirtual", this.isVirtual());
 | 
			
		||||
            r.put("serial", this.getSerialNumber());
 | 
			
		||||
            callbackContext.success(r);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //--------------------------------------------------------------------------
 | 
			
		||||
    // LOCAL METHODS
 | 
			
		||||
    //--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the OS name.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public String getPlatform() {
 | 
			
		||||
        String platform;
 | 
			
		||||
        if (isAmazonDevice()) {
 | 
			
		||||
            platform = AMAZON_PLATFORM;
 | 
			
		||||
        } else {
 | 
			
		||||
            platform = ANDROID_PLATFORM;
 | 
			
		||||
        }
 | 
			
		||||
        return platform;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the device's Universally Unique Identifier (UUID).
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public String getUuid() {
 | 
			
		||||
        String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
 | 
			
		||||
        return uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getModel() {
 | 
			
		||||
        String model = android.os.Build.MODEL;
 | 
			
		||||
        return model;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getProductName() {
 | 
			
		||||
        String productname = android.os.Build.PRODUCT;
 | 
			
		||||
        return productname;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getManufacturer() {
 | 
			
		||||
        String manufacturer = android.os.Build.MANUFACTURER;
 | 
			
		||||
        return manufacturer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSerialNumber() {
 | 
			
		||||
        String serial = android.os.Build.SERIAL;
 | 
			
		||||
        return serial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the OS version.
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public String getOSVersion() {
 | 
			
		||||
        String osversion = android.os.Build.VERSION.RELEASE;
 | 
			
		||||
        return osversion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSDKVersion() {
 | 
			
		||||
        @SuppressWarnings("deprecation")
 | 
			
		||||
        String sdkversion = android.os.Build.VERSION.SDK;
 | 
			
		||||
        return sdkversion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getTimeZoneID() {
 | 
			
		||||
        TimeZone tz = TimeZone.getDefault();
 | 
			
		||||
        return (tz.getID());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Function to check if the device is manufactured by Amazon
 | 
			
		||||
     *
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isAmazonDevice() {
 | 
			
		||||
        if (android.os.Build.MANUFACTURER.equals(AMAZON_DEVICE)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isVirtual() {
 | 
			
		||||
	return android.os.Build.FINGERPRINT.contains("generic") ||
 | 
			
		||||
	    android.os.Build.PRODUCT.contains("sdk");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user