diff --git a/demo/config.xml b/demo/config.xml
index 46df25d..516d349 100644
--- a/demo/config.xml
+++ b/demo/config.xml
@@ -22,10 +22,10 @@
-
-
-
+
+
+
+
-
diff --git a/demo/node_modules/.bin/create b/demo/node_modules/.bin/create
new file mode 100644
index 0000000..08d893b
--- /dev/null
+++ b/demo/node_modules/.bin/create
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../cordova-android/bin/create" "$@"
+ ret=$?
+else
+ node "$basedir/../cordova-android/bin/create" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/demo/node_modules/.bin/create.cmd b/demo/node_modules/.bin/create.cmd
new file mode 100644
index 0000000..37335de
--- /dev/null
+++ b/demo/node_modules/.bin/create.cmd
@@ -0,0 +1,7 @@
+@IF EXIST "%~dp0\node.exe" (
+ "%~dp0\node.exe" "%~dp0\..\cordova-android\bin\create" %*
+) ELSE (
+ @SETLOCAL
+ @SET PATHEXT=%PATHEXT:;.JS;=;%
+ node "%~dp0\..\cordova-android\bin\create" %*
+)
\ No newline at end of file
diff --git a/demo/platforms/android/cordova/node_modules/.bin/semver b/demo/node_modules/.bin/semver
similarity index 100%
rename from demo/platforms/android/cordova/node_modules/.bin/semver
rename to demo/node_modules/.bin/semver
diff --git a/demo/node_modules/.bin/shjs b/demo/node_modules/.bin/shjs
new file mode 100755
index 0000000..75ca58b
--- /dev/null
+++ b/demo/node_modules/.bin/shjs
@@ -0,0 +1,39 @@
+#!/usr/bin/env node
+require('../global');
+
+if (process.argv.length < 3) {
+ console.log('ShellJS: missing argument (script name)');
+ console.log();
+ process.exit(1);
+}
+
+var args,
+ scriptName = process.argv[2];
+env['NODE_PATH'] = __dirname + '/../..';
+
+if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
+ if (test('-f', scriptName + '.js'))
+ scriptName += '.js';
+ if (test('-f', scriptName + '.coffee'))
+ scriptName += '.coffee';
+}
+
+if (!test('-f', scriptName)) {
+ console.log('ShellJS: script not found ('+scriptName+')');
+ console.log();
+ process.exit(1);
+}
+
+args = process.argv.slice(3);
+
+for (var i = 0, l = args.length; i < l; i++) {
+ if (args[i][0] !== "-"){
+ args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
+ }
+}
+
+var path = require('path');
+var extensions = require('interpret').extensions;
+var rechoir = require('rechoir');
+rechoir.prepare(extensions, scriptName);
+require(require.resolve(path.resolve(process.cwd(), scriptName)));
diff --git a/demo/node_modules/android-versions/.jshintignore b/demo/node_modules/android-versions/.jshintignore
new file mode 100644
index 0000000..2e98972
--- /dev/null
+++ b/demo/node_modules/android-versions/.jshintignore
@@ -0,0 +1,8 @@
+.git/
+node_modules/
+coverage/
+build/
+assets/
+dist/
+docs/
+tests/
\ No newline at end of file
diff --git a/demo/node_modules/android-versions/.jshintrc b/demo/node_modules/android-versions/.jshintrc
new file mode 100644
index 0000000..e19b383
--- /dev/null
+++ b/demo/node_modules/android-versions/.jshintrc
@@ -0,0 +1,28 @@
+{
+ "indent": 2,
+ "forin": true,
+ "noarg": true,
+ "bitwise": true,
+ "nonew": true,
+ "strict": true,
+
+ "browser": true,
+ "devel": true,
+ "node": false,
+ "jquery": false,
+ "esnext": false,
+ "moz": false,
+ "es3": false,
+
+ "asi": true,
+
+ "eqnull": true,
+ "debug": true,
+ "boss": true,
+ "evil": true,
+ "loopfunc": true,
+ "laxbreak": true,
+
+ "unused": true,
+ "undef": true
+}
\ No newline at end of file
diff --git a/demo/node_modules/android-versions/.travis.yml b/demo/node_modules/android-versions/.travis.yml
new file mode 100644
index 0000000..4c19fbe
--- /dev/null
+++ b/demo/node_modules/android-versions/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "6.1.0"
\ No newline at end of file
diff --git a/demo/node_modules/android-versions/README.md b/demo/node_modules/android-versions/README.md
new file mode 100644
index 0000000..79d63bc
--- /dev/null
+++ b/demo/node_modules/android-versions/README.md
@@ -0,0 +1,87 @@
+Android Versions
+================
+
+A node module to get Android versions by API level, NDK level, semantic version, or version name.
+
+Versions are referenced from [source.android.com/source/build-numbers.html](https://source.android.com/source/build-numbers.html#platform-code-names-versions-api-levels-and-ndk-releases). The version for "Current Development Build" (`"CUR_DEVELOPMENT"`) is not included in the list of `VERSIONS`.
+
+[![NPM version][npm-image]][npm-url]
+[![build status][travis-image]][travis-url]
+
+[npm-image]: https://img.shields.io/npm/v/android-versions.svg?style=flat-square
+[npm-url]: https://npmjs.org/package/android-versions
+[travis-image]: https://img.shields.io/travis/dvoiss/android-versions.svg?style=flat-square
+[travis-url]: https://travis-ci.org/dvoiss/android-versions
+
+## Install
+
+```bash
+# NPM
+npm install android-versions --save
+# YARN
+yarn add android-versions
+```
+
+## Usage
+
+View the tests for more advanced usage.
+
+```javascript
+const android = require('android-versions')
+```
+
+#### Get by API level:
+```javascript
+console.log(android.get(23))
+
+=> { api: 23, ndk: 8, semver: "6.0", name: "Marshmallow", versionCode: "M" }
+```
+
+#### Get by version:
+
+```javascript
+console.log(android.get("2.3.3"))
+
+=> { api: 10, ndk: 5, semver: "2.3.3", name: "Gingerbread", versionCode: "GINGERBREAD_MR1" }
+```
+
+#### Get all by predicate:
+
+```
+android.getAll((version) => {
+ return version.ndk > 5 && version.api < 15
+}).map((version) => version.versionCode)
+
+=> [ "HONEYCOMB_MR1", "HONEYCOMB_MR2", "ICE_CREAM_SANDWICH" ]
+```
+
+#### Access a specific version with all info:
+
+```
+android.LOLLIPOP
+
+=> { api: 21, ndk: 8, semver: "5.0", name: "Lollipop", versionCode: "LOLLIPOP" }
+```
+
+#### Access the complete reference of Android versions with all info:
+
+```javascript
+android.VERSIONS
+
+=> {
+ BASE: { api: 1, ndk: 0, semver: "1.0", name: "(no code name)", versionCode: "BASE" },
+ ...
+ N: { api: 24, ndk: 8, semver: "7.0", name: "Nougat", versionCode: "N" }
+ ...
+}
+```
+
+## Test
+
+```bash
+npm run test
+```
+
+## License
+
+MIT
\ No newline at end of file
diff --git a/demo/node_modules/android-versions/index.js b/demo/node_modules/android-versions/index.js
new file mode 100644
index 0000000..cedbaf6
--- /dev/null
+++ b/demo/node_modules/android-versions/index.js
@@ -0,0 +1,153 @@
+/**
+ * Copyright (c) 2016, David Voiss
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any purpose
+ * with or without fee is hereby granted, provided that the above copyright notice
+ * and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+*/
+
+/* jshint node: true */
+"use strict";
+
+/**
+ * A module to get Android versions by API level, NDK level, semantic version, or version name.
+ *
+ * Versions are referenced from here:
+ * {@link https://source.android.com/source/build-numbers.html#platform-code-names-versions-api-levels-and-ndk-releases}
+ * {@link https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/Build.java}
+ *
+ * The version for "Current Development Build" ("CUR_DEVELOPMENT") is not included.
+ *
+ * @module android-versions
+ */
+
+var VERSIONS = {
+ BASE: { api: 1, ndk: 0, semver: "1.0", name: "(no code name)", versionCode: "BASE" },
+ BASE_1_1: { api: 2, ndk: 0, semver: "1.1", name: "(no code name)", versionCode: "BASE_1_1" },
+ CUPCAKE: { api: 3, ndk: 1, semver: "1.5", name: "Cupcake", versionCode: "CUPCAKE" },
+ DONUT: { api: 4, ndk: 2, semver: "1.6", name: "Donut", versionCode: "DONUT" },
+ ECLAIR: { api: 5, ndk: 2, semver: "2.0", name: "Eclair", versionCode: "ECLAIR" },
+ ECLAIR_0_1: { api: 6, ndk: 2, semver: "2.0.1", name: "Eclair", versionCode: "ECLAIR_0_1" },
+ ECLAIR_MR1: { api: 7, ndk: 3, semver: "2.1", name: "Eclair", versionCode: "ECLAIR_MR1" },
+ FROYO: { api: 8, ndk: 4, semver: "2.2", name: "Froyo", versionCode: "FROYO" },
+ GINGERBREAD: { api: 9, ndk: 5, semver: "2.3", name: "Gingerbread", versionCode: "GINGERBREAD" },
+ GINGERBREAD_MR1: { api: 10, ndk: 5, semver: "2.3.3", name: "Gingerbread", versionCode: "GINGERBREAD_MR1" },
+ HONEYCOMB: { api: 11, ndk: 5, semver: "3.0", name: "Honeycomb", versionCode: "HONEYCOMB" },
+ HONEYCOMB_MR1: { api: 12, ndk: 6, semver: "3.1", name: "Honeycomb", versionCode: "HONEYCOMB_MR1" },
+ HONEYCOMB_MR2: { api: 13, ndk: 6, semver: "3.2", name: "Honeycomb", versionCode: "HONEYCOMB_MR2" },
+ ICE_CREAM_SANDWICH: { api: 14, ndk: 7, semver: "4.0", name: "Ice Cream Sandwich", versionCode: "ICE_CREAM_SANDWICH" },
+ ICE_CREAM_SANDWICH_MR1: { api: 15, ndk: 8, semver: "4.0.3", name: "Ice Cream Sandwich", versionCode: "ICE_CREAM_SANDWICH_MR1" },
+ JELLY_BEAN: { api: 16, ndk: 8, semver: "4.1", name: "Jellybean", versionCode: "JELLY_BEAN" },
+ JELLY_BEAN_MR1: { api: 17, ndk: 8, semver: "4.2", name: "Jellybean", versionCode: "JELLY_BEAN_MR1" },
+ JELLY_BEAN_MR2: { api: 18, ndk: 8, semver: "4.3", name: "Jellybean", versionCode: "JELLY_BEAN_MR2" },
+ KITKAT: { api: 19, ndk: 8, semver: "4.4", name: "KitKat", versionCode: "KITKAT" },
+ KITKAT_WATCH: { api: 20, ndk: 8, semver: "4.4", name: "KitKat Watch", versionCode: "KITKAT_WATCH" },
+ LOLLIPOP: { api: 21, ndk: 8, semver: "5.0", name: "Lollipop", versionCode: "LOLLIPOP" },
+ LOLLIPOP_MR1: { api: 22, ndk: 8, semver: "5.1", name: "Lollipop", versionCode: "LOLLIPOP_MR1" },
+ M: { api: 23, ndk: 8, semver: "6.0", name: "Marshmallow", versionCode: "M" },
+ N: { api: 24, ndk: 8, semver: "7.0", name: "Nougat", versionCode: "N" },
+ N_MR1: { api: 25, ndk: 8, semver: "7.1", name: "Nougat", versionCode: "N_MR1" },
+ O: { api: 26, ndk: 8, semver: "8.0.0", name: "Oreo", versionCode: "O" }
+}
+
+// This altSemVer accomodates the variations of semantic versions in the table above.
+// For instance, Oreo is 8.0.0 while N is 7.0, searching for "8.0" or "8.0.0" will
+// return Oreo, or searching for "7.0" or "7.0.0" will return N. "2.2.0" will return Froyo.
+function getAlternateSemVer(semver) {
+ if (semver.match(/\d+.\d+.0/)) {
+ return semver.replace(/.\d+$/, '')
+ } else if (semver.match(/^\d+.\d+$/)) {
+ return semver + '.0'
+ } else {
+ return semver
+ }
+}
+
+// The default predicate compares against API level, semver, name, or code.
+function getFromDefaultPredicate(arg) {
+ // Coerce arg to string for comparisons below.
+ arg = arg.toString()
+
+ return getFromPredicate(function(version) {
+ // Check API level before all else.
+ if (arg === version.api.toString()) {
+ return true
+ }
+
+ // Compare semver and alternate semver (see above).
+ var altSemVer = getAlternateSemVer(arg)
+ if (version.semver === arg || version.semver === altSemVer) {
+ return true
+ }
+
+ // Compare version name and code.
+ return arg === version.name || arg === version.versionCode
+ })
+}
+
+// The function to allow passing a predicate.
+function getFromPredicate(predicate) {
+ if (predicate === null) {
+ return null
+ }
+
+ return Object.keys(VERSIONS).filter(function(version) {
+ return predicate(VERSIONS[version])
+ }).map(function(key) { return VERSIONS[key] })
+}
+
+/**
+ * The Android version codes available as keys for easier look-up.
+ */
+Object.keys(VERSIONS).forEach(function(name) {
+ exports[name] = VERSIONS[name]
+})
+
+/**
+ * The complete reference of Android versions for easier look-up.
+ */
+exports.VERSIONS = VERSIONS
+
+/**
+ * Retrieve a single Android version.
+ *
+ * @param {object | Function} arg - The value or predicate to use to retrieve values.
+ *
+ * @return {object} An object representing the version found or null if none found.
+ */
+exports.get = function(arg) {
+ var result = exports.getAll(arg)
+
+ if (result === null || result.length === 0) {
+ return null
+ }
+
+ return result[0]
+}
+
+/**
+ * Retrieve all Android versions that meet the criteria of the argument.
+ *
+ * @param {object | Function} arg - The value or predicate to use to retrieve values.
+ *
+ * @return {object} An object representing the version found or null if none found.
+ */
+exports.getAll = function(arg) {
+ if (arg === null) {
+ return null
+ }
+
+ if (typeof arg === "function") {
+ return getFromPredicate(arg)
+ } else {
+ return getFromDefaultPredicate(arg)
+ }
+}
\ No newline at end of file
diff --git a/demo/node_modules/android-versions/package.json b/demo/node_modules/android-versions/package.json
new file mode 100644
index 0000000..8576540
--- /dev/null
+++ b/demo/node_modules/android-versions/package.json
@@ -0,0 +1,103 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "android-versions@^1.2.0",
+ "scope": null,
+ "escapedName": "android-versions",
+ "name": "android-versions",
+ "rawSpec": "^1.2.0",
+ "spec": ">=1.2.0 <2.0.0",
+ "type": "range"
+ },
+ "C:\\Users\\pkoller\\Documents\\GitHub\\mobile-cordova-pilot\\demo\\node_modules\\cordova-android"
+ ]
+ ],
+ "_from": "android-versions@>=1.2.0 <2.0.0",
+ "_id": "android-versions@1.2.1",
+ "_inCache": true,
+ "_location": "/android-versions",
+ "_nodeVersion": "8.0.0",
+ "_npmOperationalInternal": {
+ "host": "s3://npm-registry-packages",
+ "tmp": "tmp/android-versions-1.2.1.tgz_1505373302036_0.5689644906669855"
+ },
+ "_npmUser": {
+ "name": "dvoiss",
+ "email": "davidvoiss@gmail.com"
+ },
+ "_npmVersion": "5.4.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "android-versions@^1.2.0",
+ "scope": null,
+ "escapedName": "android-versions",
+ "name": "android-versions",
+ "rawSpec": "^1.2.0",
+ "spec": ">=1.2.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cordova-android"
+ ],
+ "_resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.2.1.tgz",
+ "_shasum": "3f50baf693e73a512c3c5403542291cead900063",
+ "_shrinkwrap": null,
+ "_spec": "android-versions@^1.2.0",
+ "_where": "C:\\Users\\pkoller\\Documents\\GitHub\\mobile-cordova-pilot\\demo\\node_modules\\cordova-android",
+ "author": {
+ "name": "dvoiss"
+ },
+ "bugs": {
+ "url": "https://github.com/dvoiss/android-versions/issues"
+ },
+ "dependencies": {},
+ "description": "Get the name, API level, version level, NDK level, or version code from any version of Android.",
+ "devDependencies": {
+ "jsdoc": "^3.4.0",
+ "jshint": "^2.9.2",
+ "tape": "^4.6.0"
+ },
+ "directories": {},
+ "dist": {
+ "integrity": "sha512-k6zlrtWbJ3tx1ZsyyJ0Bo3r6cqPA3JUnFGv7pnIaLr1XVxSi2Tcem2lg3kBebFp27v/A40tZqdlouPyakpyKrw==",
+ "shasum": "3f50baf693e73a512c3c5403542291cead900063",
+ "tarball": "https://registry.npmjs.org/android-versions/-/android-versions-1.2.1.tgz"
+ },
+ "gitHead": "7e2def6e70634a4ebcaaa639a4c4955ae2a566e7",
+ "homepage": "https://github.com/dvoiss/android-versions#readme",
+ "keywords": [
+ "android",
+ "version",
+ "versions",
+ "ndk",
+ "nougat",
+ "marshmallow",
+ "api",
+ "level"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "dvoiss",
+ "email": "davidvoiss@gmail.com"
+ }
+ ],
+ "name": "android-versions",
+ "optionalDependencies": {},
+ "pre-commit": [
+ "jshint"
+ ],
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/dvoiss/android-versions.git"
+ },
+ "scripts": {
+ "docs": "jsdoc index.js -d ./docs/ -R README.md --debug",
+ "jshint": "jshint .",
+ "test": "tape tests/**/*.js"
+ },
+ "version": "1.2.1"
+}
diff --git a/demo/node_modules/balanced-match/.npmignore b/demo/node_modules/balanced-match/.npmignore
new file mode 100644
index 0000000..ae5d8c3
--- /dev/null
+++ b/demo/node_modules/balanced-match/.npmignore
@@ -0,0 +1,5 @@
+test
+.gitignore
+.travis.yml
+Makefile
+example.js
diff --git a/demo/node_modules/balanced-match/LICENSE.md b/demo/node_modules/balanced-match/LICENSE.md
new file mode 100644
index 0000000..2cdc8e4
--- /dev/null
+++ b/demo/node_modules/balanced-match/LICENSE.md
@@ -0,0 +1,21 @@
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/demo/node_modules/balanced-match/README.md b/demo/node_modules/balanced-match/README.md
new file mode 100644
index 0000000..08e918c
--- /dev/null
+++ b/demo/node_modules/balanced-match/README.md
@@ -0,0 +1,91 @@
+# balanced-match
+
+Match balanced string pairs, like `{` and `}` or `` and ``. Supports regular expressions as well!
+
+[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
+[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
+
+[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
+
+## Example
+
+Get the first matching pair of braces:
+
+```js
+var balanced = require('balanced-match');
+
+console.log(balanced('{', '}', 'pre{in{nested}}post'));
+console.log(balanced('{', '}', 'pre{first}between{second}post'));
+console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
+```
+
+The matches are:
+
+```bash
+$ node example.js
+{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
+{ start: 3,
+ end: 9,
+ pre: 'pre',
+ body: 'first',
+ post: 'between{second}post' }
+{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
+```
+
+## API
+
+### var m = balanced(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+object with those keys:
+
+* **start** the index of the first match of `a`
+* **end** the index of the matching `b`
+* **pre** the preamble, `a` and `b` not included
+* **body** the match, `a` and `b` not included
+* **post** the postscript, `a` and `b` not included
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
+
+### var r = balanced.range(a, b, str)
+
+For the first non-nested matching pair of `a` and `b` in `str`, return an
+array with indexes: `[ , ]`.
+
+If there's no match, `undefined` will be returned.
+
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install balanced-match
+```
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/demo/node_modules/balanced-match/index.js b/demo/node_modules/balanced-match/index.js
new file mode 100644
index 0000000..1685a76
--- /dev/null
+++ b/demo/node_modules/balanced-match/index.js
@@ -0,0 +1,59 @@
+'use strict';
+module.exports = balanced;
+function balanced(a, b, str) {
+ if (a instanceof RegExp) a = maybeMatch(a, str);
+ if (b instanceof RegExp) b = maybeMatch(b, str);
+
+ var r = range(a, b, str);
+
+ return r && {
+ start: r[0],
+ end: r[1],
+ pre: str.slice(0, r[0]),
+ body: str.slice(r[0] + a.length, r[1]),
+ post: str.slice(r[1] + b.length)
+ };
+}
+
+function maybeMatch(reg, str) {
+ var m = str.match(reg);
+ return m ? m[0] : null;
+}
+
+balanced.range = range;
+function range(a, b, str) {
+ var begs, beg, left, right, result;
+ var ai = str.indexOf(a);
+ var bi = str.indexOf(b, ai + 1);
+ var i = ai;
+
+ if (ai >= 0 && bi > 0) {
+ begs = [];
+ left = str.length;
+
+ while (i >= 0 && !result) {
+ if (i == ai) {
+ begs.push(i);
+ ai = str.indexOf(a, i + 1);
+ } else if (begs.length == 1) {
+ result = [ begs.pop(), bi ];
+ } else {
+ beg = begs.pop();
+ if (beg < left) {
+ left = beg;
+ right = bi;
+ }
+
+ bi = str.indexOf(b, i + 1);
+ }
+
+ i = ai < bi && ai >= 0 ? ai : bi;
+ }
+
+ if (begs.length) {
+ result = [ left, right ];
+ }
+ }
+
+ return result;
+}
diff --git a/demo/node_modules/balanced-match/package.json b/demo/node_modules/balanced-match/package.json
new file mode 100644
index 0000000..9441f33
--- /dev/null
+++ b/demo/node_modules/balanced-match/package.json
@@ -0,0 +1,77 @@
+{
+ "_from": "balanced-match@^1.0.0",
+ "_id": "balanced-match@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "_location": "/balanced-match",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "balanced-match@^1.0.0",
+ "name": "balanced-match",
+ "escapedName": "balanced-match",
+ "rawSpec": "^1.0.0",
+ "saveSpec": null,
+ "fetchSpec": "^1.0.0"
+ },
+ "_requiredBy": [
+ "/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
+ "_spec": "balanced-match@^1.0.0",
+ "_where": "/Users/prakuschan/Jumio/repositories/mobile-cordova-pilot/demo/node_modules/brace-expansion",
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/balanced-match/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {},
+ "deprecated": false,
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "homepage": "https://github.com/juliangruber/balanced-match",
+ "keywords": [
+ "match",
+ "regexp",
+ "test",
+ "balanced",
+ "parse"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "balanced-match",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/balanced-match.git"
+ },
+ "scripts": {
+ "bench": "make bench",
+ "test": "make test"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "version": "1.0.0"
+}
diff --git a/demo/node_modules/brace-expansion/README.md b/demo/node_modules/brace-expansion/README.md
new file mode 100644
index 0000000..ed2ec1f
--- /dev/null
+++ b/demo/node_modules/brace-expansion/README.md
@@ -0,0 +1,123 @@
+# brace-expansion
+
+[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
+as known from sh/bash, in JavaScript.
+
+[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
+[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)
+[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)
+
+[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
+
+## Example
+
+```js
+var expand = require('brace-expansion');
+
+expand('file-{a,b,c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('-v{,,}')
+// => ['-v', '-v', '-v']
+
+expand('file{0..2}.jpg')
+// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
+
+expand('file-{a..c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('file{2..0}.jpg')
+// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
+
+expand('file{0..4..2}.jpg')
+// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
+
+expand('file-{a..e..2}.jpg')
+// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
+
+expand('file{00..10..5}.jpg')
+// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
+
+expand('{{A..C},{a..c}}')
+// => ['A', 'B', 'C', 'a', 'b', 'c']
+
+expand('ppp{,config,oe{,conf}}')
+// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
+```
+
+## API
+
+```js
+var expand = require('brace-expansion');
+```
+
+### var expanded = expand(str)
+
+Return an array of all possible and valid expansions of `str`. If none are
+found, `[str]` is returned.
+
+Valid expansions are:
+
+```js
+/^(.*,)+(.+)?$/
+// {a,b,...}
+```
+
+A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+A numeric sequence from `x` to `y` inclusive, with optional increment.
+If `x` or `y` start with a leading `0`, all the numbers will be padded
+to have equal length. Negative numbers and backwards iteration work too.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+An alphabetic sequence from `x` to `y` inclusive, with optional increment.
+`x` and `y` must be exactly one character, and if given, `incr` must be a
+number.
+
+For compatibility reasons, the string `${` is not eligible for brace expansion.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install brace-expansion
+```
+
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/demo/node_modules/brace-expansion/index.js b/demo/node_modules/brace-expansion/index.js
new file mode 100644
index 0000000..0478be8
--- /dev/null
+++ b/demo/node_modules/brace-expansion/index.js
@@ -0,0 +1,201 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ // I don't know why Bash 4.3 does this, but it does.
+ // Anything starting with {} will have the first two bytes preserved
+ // but *only* at the top level, so {},a}b will not expand to anything,
+ // but a{},b}c will be expanded to [a}c,abc].
+ // One could argue that this is a bug in Bash, but since the goal of
+ // this module is to match Bash's rules, we escape a leading {}
+ if (str.substr(0, 2) === '{}') {
+ str = '\\{\\}' + str.substr(2);
+ }
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = m.body.indexOf(',') >= 0;
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*\}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/demo/node_modules/brace-expansion/package.json b/demo/node_modules/brace-expansion/package.json
new file mode 100644
index 0000000..c519fef
--- /dev/null
+++ b/demo/node_modules/brace-expansion/package.json
@@ -0,0 +1,75 @@
+{
+ "_from": "brace-expansion@^1.1.7",
+ "_id": "brace-expansion@1.1.8",
+ "_inBundle": false,
+ "_integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "_location": "/brace-expansion",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "brace-expansion@^1.1.7",
+ "name": "brace-expansion",
+ "escapedName": "brace-expansion",
+ "rawSpec": "^1.1.7",
+ "saveSpec": null,
+ "fetchSpec": "^1.1.7"
+ },
+ "_requiredBy": [
+ "/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "_shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
+ "_spec": "brace-expansion@^1.1.7",
+ "_where": "/Users/prakuschan/Jumio/repositories/mobile-cordova-pilot/demo/node_modules/minimatch",
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/brace-expansion/issues"
+ },
+ "bundleDependencies": false,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "deprecated": false,
+ "description": "Brace expansion as known from sh/bash",
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "keywords": [],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "brace-expansion",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "scripts": {
+ "bench": "matcha test/perf/bench.js",
+ "gentest": "bash test/generate.sh",
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "version": "1.1.8"
+}
diff --git a/demo/node_modules/concat-map/.travis.yml b/demo/node_modules/concat-map/.travis.yml
new file mode 100644
index 0000000..f1d0f13
--- /dev/null
+++ b/demo/node_modules/concat-map/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.4
+ - 0.6
diff --git a/demo/node_modules/concat-map/LICENSE b/demo/node_modules/concat-map/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/demo/node_modules/concat-map/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/demo/node_modules/concat-map/README.markdown b/demo/node_modules/concat-map/README.markdown
new file mode 100644
index 0000000..408f70a
--- /dev/null
+++ b/demo/node_modules/concat-map/README.markdown
@@ -0,0 +1,62 @@
+concat-map
+==========
+
+Concatenative mapdashery.
+
+[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)
+
+[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)
+
+example
+=======
+
+``` js
+var concatMap = require('concat-map');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
+```
+
+***
+
+```
+[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]
+```
+
+methods
+=======
+
+``` js
+var concatMap = require('concat-map')
+```
+
+concatMap(xs, fn)
+-----------------
+
+Return an array of concatenated elements by calling `fn(x, i)` for each element
+`x` and each index `i` in the array `xs`.
+
+When `fn(x, i)` returns an array, its result will be concatenated with the
+result array. If `fn(x, i)` returns anything else, that value will be pushed
+onto the end of the result array.
+
+install
+=======
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install concat-map
+```
+
+license
+=======
+
+MIT
+
+notes
+=====
+
+This module was written while sitting high above the ground in a tree.
diff --git a/demo/node_modules/concat-map/example/map.js b/demo/node_modules/concat-map/example/map.js
new file mode 100644
index 0000000..3365621
--- /dev/null
+++ b/demo/node_modules/concat-map/example/map.js
@@ -0,0 +1,6 @@
+var concatMap = require('../');
+var xs = [ 1, 2, 3, 4, 5, 6 ];
+var ys = concatMap(xs, function (x) {
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+});
+console.dir(ys);
diff --git a/demo/node_modules/concat-map/index.js b/demo/node_modules/concat-map/index.js
new file mode 100644
index 0000000..b29a781
--- /dev/null
+++ b/demo/node_modules/concat-map/index.js
@@ -0,0 +1,13 @@
+module.exports = function (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ var x = fn(xs[i], i);
+ if (isArray(x)) res.push.apply(res, x);
+ else res.push(x);
+ }
+ return res;
+};
+
+var isArray = Array.isArray || function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]';
+};
diff --git a/demo/node_modules/concat-map/package.json b/demo/node_modules/concat-map/package.json
new file mode 100644
index 0000000..1884082
--- /dev/null
+++ b/demo/node_modules/concat-map/package.json
@@ -0,0 +1,88 @@
+{
+ "_from": "concat-map@0.0.1",
+ "_id": "concat-map@0.0.1",
+ "_inBundle": false,
+ "_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "_location": "/concat-map",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "version",
+ "registry": true,
+ "raw": "concat-map@0.0.1",
+ "name": "concat-map",
+ "escapedName": "concat-map",
+ "rawSpec": "0.0.1",
+ "saveSpec": null,
+ "fetchSpec": "0.0.1"
+ },
+ "_requiredBy": [
+ "/brace-expansion"
+ ],
+ "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "_spec": "concat-map@0.0.1",
+ "_where": "/Users/prakuschan/Jumio/repositories/mobile-cordova-pilot/demo/node_modules/brace-expansion",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-concat-map/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "concatenative mapdashery",
+ "devDependencies": {
+ "tape": "~2.4.0"
+ },
+ "directories": {
+ "example": "example",
+ "test": "test"
+ },
+ "homepage": "https://github.com/substack/node-concat-map#readme",
+ "keywords": [
+ "concat",
+ "concatMap",
+ "map",
+ "functional",
+ "higher-order"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "concat-map",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-concat-map.git"
+ },
+ "scripts": {
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": {
+ "ie": [
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "ff": [
+ 3.5,
+ 10,
+ 15
+ ],
+ "chrome": [
+ 10,
+ 22
+ ],
+ "safari": [
+ 5.1
+ ],
+ "opera": [
+ 12
+ ]
+ }
+ },
+ "version": "0.0.1"
+}
diff --git a/demo/node_modules/concat-map/test/map.js b/demo/node_modules/concat-map/test/map.js
new file mode 100644
index 0000000..fdbd702
--- /dev/null
+++ b/demo/node_modules/concat-map/test/map.js
@@ -0,0 +1,39 @@
+var concatMap = require('../');
+var test = require('tape');
+
+test('empty or not', function (t) {
+ var xs = [ 1, 2, 3, 4, 5, 6 ];
+ var ixes = [];
+ var ys = concatMap(xs, function (x, ix) {
+ ixes.push(ix);
+ return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];
+ });
+ t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]);
+ t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]);
+ t.end();
+});
+
+test('always something', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ];
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('scalars', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function (x) {
+ return x === 'b' ? [ 'B', 'B', 'B' ] : x;
+ });
+ t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]);
+ t.end();
+});
+
+test('undefs', function (t) {
+ var xs = [ 'a', 'b', 'c', 'd' ];
+ var ys = concatMap(xs, function () {});
+ t.same(ys, [ undefined, undefined, undefined, undefined ]);
+ t.end();
+});
diff --git a/demo/node_modules/cordova-android/.eslintrc.yml b/demo/node_modules/cordova-android/.eslintrc.yml
new file mode 100644
index 0000000..f6aae32
--- /dev/null
+++ b/demo/node_modules/cordova-android/.eslintrc.yml
@@ -0,0 +1,10 @@
+root: true
+extends: semistandard
+rules:
+ indent:
+ - error
+ - 4
+ camelcase: off
+ padded-blocks: off
+ operator-linebreak: off
+ no-throw-literal: off
diff --git a/demo/node_modules/cordova-android/.gitattributes b/demo/node_modules/cordova-android/.gitattributes
new file mode 100644
index 0000000..f63e59a
--- /dev/null
+++ b/demo/node_modules/cordova-android/.gitattributes
@@ -0,0 +1,94 @@
+* text eol=lf
+
+# source code
+*.php text
+*.css text
+*.sass text
+*.scss text
+*.less text
+*.styl text
+*.js text
+*.coffee text
+*.json text
+*.htm text
+*.html text
+*.xml text
+*.svg text
+*.txt text
+*.ini text
+*.inc text
+*.pl text
+*.rb text
+*.py text
+*.scm text
+*.sql text
+*.sh text
+*.bat text
+
+# templates
+*.ejs text
+*.hbt text
+*.jade text
+*.haml text
+*.hbs text
+*.dot text
+*.tmpl text
+*.phtml text
+
+# server config
+.htaccess text
+
+# git config
+.gitattributes text
+.gitignore text
+.gitconfig text
+
+# code analysis config
+.jshintrc text
+.jscsrc text
+.jshintignore text
+.csslintrc text
+
+# misc config
+*.yaml text
+*.yml text
+.editorconfig text
+
+# build config
+*.npmignore text
+*.bowerrc text
+
+# Heroku
+Procfile text
+.slugignore text
+
+# Documentation
+*.md text
+LICENSE text
+AUTHORS text
+
+
+#
+## These files are binary and should be left untouched
+#
+
+# (binary is a macro for -text -diff)
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.mov binary
+*.mp4 binary
+*.mp3 binary
+*.flv binary
+*.fla binary
+*.swf binary
+*.gz binary
+*.zip binary
+*.7z binary
+*.ttf binary
+*.eot binary
+*.woff binary
+*.pyc binary
+*.pdf binary
diff --git a/demo/node_modules/cordova-android/.github/PULL_REQUEST_TEMPLATE.md b/demo/node_modules/cordova-android/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..91582f4
--- /dev/null
+++ b/demo/node_modules/cordova-android/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,22 @@
+
+
+### Platforms affected
+
+
+### What does this PR do?
+
+
+### What testing has been done on this change?
+
+
+### Checklist
+- [ ] [Reported an issue](http://cordova.apache.org/contribute/issues.html) in the JIRA database
+- [ ] Commit message follows the format: "CB-3232: (android) Fix bug with resolving file paths", where CB-xxxx is the JIRA ID & "android" is the platform affected.
+- [ ] Added automated test coverage as appropriate for this change.
diff --git a/demo/node_modules/cordova-android/.npmignore b/demo/node_modules/cordova-android/.npmignore
new file mode 100644
index 0000000..3be9ebd
--- /dev/null
+++ b/demo/node_modules/cordova-android/.npmignore
@@ -0,0 +1,135 @@
+.DS_Store
+.gradle
+.metadata
+Thumbs.db
+Desktop.ini
+*.tmp
+*.bak
+*.swp
+*.class
+*.jar
+default.properties
+gen
+assets/www/cordova.js
+local.properties
+proguard.cfg
+proguard-project.txt
+example
+/coverage
+/framework/lib
+/framework/build
+/framework/bin
+/framework/assets/www/.DS_Store
+/framework/assets/www/cordova-*.js
+/framework/assets/www/phonegap-*.js
+/framework/libs
+/framework/javadoc-public
+/framework/javadoc-private
+/test/.externalNativeBuild
+/test/build.gradle
+/test/gradle
+/test/gradlew
+/test/gradlew.bat
+/test/assets/www/.tmp*
+/test/assets/www/cordova.js
+/test/bin
+/test/build
+/test/captures
+/test/libs
+tmp/**
+tmp/**/*
+!/spec/fixtures/org.test.plugins.dummyplugin/src/android/TestLib.jar
+# IntelliJ IDEA files
+**/.idea/**/*
+*.iml
+npm-debug.log
+node_modules/jshint
+node_modules/promise-matchers
+node_modules/jasmine
+node_modules/rewire
+node_modules/istanbul
+node_modules/.bin/cake
+node_modules/.bin/coffee
+node_modules/.bin/escodegen
+node_modules/.bin/esgenerate
+node_modules/.bin/esparse
+node_modules/.bin/esvalidate
+node_modules/.bin/handlebars
+node_modules/.bin/istanbul
+node_modules/.bin/jasmine
+node_modules/.bin/js-yaml
+node_modules/.bin/jshint
+node_modules/.bin/mkdirp
+node_modules/.bin/r.js
+node_modules/.bin/r_js
+node_modules/.bin/strip-json-comments
+node_modules/.bin/uglifyjs
+node_modules/.bin/which
+node_modules/align-text/
+node_modules/amdefine/
+node_modules/argparse/
+node_modules/async/
+node_modules/camelcase/
+node_modules/center-align/
+node_modules/cli/
+node_modules/cliui/
+node_modules/coffee-script/
+node_modules/console-browserify/
+node_modules/core-util-is/
+node_modules/date-now/
+node_modules/decamelize/
+node_modules/deep-is/
+node_modules/dom-serializer/
+node_modules/domelementtype/
+node_modules/domhandler/
+node_modules/domutils/
+node_modules/entities/
+node_modules/escodegen/
+node_modules/esprima/
+node_modules/estraverse/
+node_modules/esutils/
+node_modules/exit/
+node_modules/fast-levenshtein/
+node_modules/fileset/
+node_modules/gaze/
+node_modules/growl/
+node_modules/handlebars/
+node_modules/has-flag/
+node_modules/htmlparser2/
+node_modules/is-buffer/
+node_modules/isarray/
+node_modules/isexe/
+node_modules/jasmine-growl-reporter/
+node_modules/jasmine-reporters/
+node_modules/js-yaml/
+node_modules/kind-of/
+node_modules/lazy-cache/
+node_modules/levn/
+node_modules/longest/
+node_modules/lru-cache/
+node_modules/minimist/
+node_modules/mkdirp/
+node_modules/optimist/
+node_modules/optionator/
+node_modules/prelude-ls/
+node_modules/readable-stream/
+node_modules/repeat-string/
+node_modules/requirejs/
+node_modules/resolve/
+node_modules/right-align/
+node_modules/sigmund/
+node_modules/source-map/
+node_modules/sprintf-js/
+node_modules/string_decoder/
+node_modules/strip-json-comments/
+node_modules/supports-color/
+node_modules/type-check/
+node_modules/uglify-js/
+node_modules/uglify-to-browserify/
+node_modules/walkdir/
+node_modules/which/
+node_modules/window-size/
+node_modules/wordwrap/
+node_modules/yargs/
+node_modules/jasmine-core/
+node_modules/fs.realpath/
diff --git a/demo/node_modules/cordova-android/.ratignore b/demo/node_modules/cordova-android/.ratignore
new file mode 100644
index 0000000..e5c0ebc
--- /dev/null
+++ b/demo/node_modules/cordova-android/.ratignore
@@ -0,0 +1,8 @@
+*.properties
+bin
+gen
+proguard-project.txt
+spec
+appveyor.yml
+framework/build
+ic_launcher.png
diff --git a/demo/node_modules/cordova-android/.reviewboardrc b/demo/node_modules/cordova-android/.reviewboardrc
new file mode 100644
index 0000000..30e9587
--- /dev/null
+++ b/demo/node_modules/cordova-android/.reviewboardrc
@@ -0,0 +1,8 @@
+#
+# Settings for post-review (used for uploading diffs to reviews.apache.org).
+#
+GUESS_FIELDS = True
+OPEN_BROWSER = True
+TARGET_GROUPS = 'cordova'
+REVIEWBOARD_URL = 'http://reviews.apache.org'
+
diff --git a/demo/node_modules/cordova-android/.travis.yml b/demo/node_modules/cordova-android/.travis.yml
new file mode 100644
index 0000000..94be642
--- /dev/null
+++ b/demo/node_modules/cordova-android/.travis.yml
@@ -0,0 +1,28 @@
+language: android
+sudo: false
+jdk:
+ - oraclejdk8
+env:
+ global:
+ - ANDROID_TOOLS=${ANDROID_HOME}/tools
+before_install:
+ - nvm install 6
+ # ensure at least gradle 3.3 is in place.
+ - wget http://services.gradle.org/distributions/gradle-3.3-bin.zip
+ - unzip gradle-3.3-bin.zip
+ - export GRADLE_HOME=$PWD/gradle-3.3
+ - export PATH=${GRADLE_HOME}/bin:${ANDROID_HOME}:${ANDROID_HOME}/emulator:${ANDROID_TOOLS}:${ANDROID_TOOLS}/bin:${ANDROID_HOME}/platform-tools:$PATH
+ - node --version
+ - gradle --version
+ - echo y | android --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.0,android-26,android-25,extra-google-m2repository,extra-android-m2repository
+android:
+ components:
+ - tools
+install:
+ - npm install
+ - npm install -g codecov
+script:
+ - npm test
+ - npm run cover
+after_script:
+ - codecov
diff --git a/demo/node_modules/cordova-android/CONTRIBUTING.md b/demo/node_modules/cordova-android/CONTRIBUTING.md
new file mode 100644
index 0000000..07f5651
--- /dev/null
+++ b/demo/node_modules/cordova-android/CONTRIBUTING.md
@@ -0,0 +1,38 @@
+
+
+# Contributing to Apache Cordova
+
+Anyone can contribute to Cordova. And we need your contributions.
+
+There are multiple ways to contribute: report bugs, improve the docs, and
+contribute code.
+
+For instructions on this, start with the
+[contribution overview](http://cordova.apache.org/contribute/).
+
+The details are explained there, but the important items are:
+ - Sign and submit an Apache ICLA (Contributor License Agreement).
+ - Have a Jira issue open that corresponds to your contribution.
+ - Run the tests so your patch doesn't break existing functionality.
+
+We look forward to your contributions!
+
diff --git a/demo/node_modules/cordova-android/LICENSE b/demo/node_modules/cordova-android/LICENSE
new file mode 100644
index 0000000..c47288d
--- /dev/null
+++ b/demo/node_modules/cordova-android/LICENSE
@@ -0,0 +1,314 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2015 Apache Cordova
+
+ Licensed 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.
+
+ ADDITIONAL LICENSES:
+
+================================================================================
+bin/node_modules/q
+================================================================================
+
+Copyright 2009–2012 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+
+================================================================================
+bin/node_modules/shelljs
+================================================================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+================================================================================
+bin/node_modules/nopt
+================================================================================
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+================================================================================
+bin/node_modules/which
+================================================================================
+
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+
diff --git a/demo/node_modules/cordova-android/NOTICE b/demo/node_modules/cordova-android/NOTICE
new file mode 100644
index 0000000..788ab0b
--- /dev/null
+++ b/demo/node_modules/cordova-android/NOTICE
@@ -0,0 +1,15 @@
+Apache Cordova
+Copyright 2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org)
+
+=========================================================================
+== NOTICE file corresponding to the section 4 d of ==
+== the Apache License, Version 2.0, ==
+== in this case for the Android-specific code. ==
+=========================================================================
+
+This product includes software developed as part of
+The Android Open Source Project (http://source.android.com).
+
diff --git a/demo/node_modules/cordova-android/README.md b/demo/node_modules/cordova-android/README.md
new file mode 100644
index 0000000..2b97582
--- /dev/null
+++ b/demo/node_modules/cordova-android/README.md
@@ -0,0 +1,70 @@
+
+
+[![Build status](https://ci.appveyor.com/api/projects/status/github/apache/cordova-android?branch=master)](https://ci.appveyor.com/project/Humbedooh/cordova-android)
+[![Build Status](https://travis-ci.org/apache/cordova-android.svg?branch=master)](https://travis-ci.org/apache/cordova-android)
+[![codecov.io](https://codecov.io/github/apache/cordova-android/coverage.svg?branch=master)](https://codecov.io/github/apache/cordova-android?branch=master)
+
+# Cordova Android
+
+Cordova Android is an Android application library that allows for Cordova-based
+projects to be built for the Android Platform. Cordova based applications are,
+at the core, applications written with web technology: HTML, CSS and JavaScript.
+
+[Apache Cordova](https://cordova.apache.org) is a project of The Apache Software Foundation (ASF).
+
+:warning: Report issues on the [Apache Cordova issue tracker](https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22Android%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC)
+
+
+## Requires
+
+- Java JDK 1.8 or greater
+- Android SDK [http://developer.android.com](http://developer.android.com)
+
+
+## Cordova Android Developer Tools
+
+We recommend using the [Cordova command-line tool](https://www.npmjs.com/package/cordova) to create projects and be able to easily install plugins.
+
+However, the following scripts can be used instead:
+
+ ./bin/create [path package activity] ... creates the ./example app or a cordova android project
+ ./bin/check_reqs ....................... checks that your environment is set up for cordova-android development
+ ./bin/update [path] .................... updates an existing cordova-android project to the version of the framework
+
+These commands live in a generated Cordova Android project. Any interactions with the emulator require you to have an AVD defined.
+
+ ./cordova/clean ........................ cleans the project
+ ./cordova/build ........................ calls `clean` then compiles the project
+ ./cordova/log ........................ streams device or emulator logs to STDOUT
+ ./cordova/run ........................ calls `build` then deploys to a connected Android device. If no Android device is detected, will launch an emulator and deploy to it.
+ ./cordova/version ...................... returns the cordova-android version of the current project
+
+## Using Android Studio
+
+1. Create a project
+2. Import it via "Non-Android Studio Project"
+
+## Running the Native Tests
+
+The `test/` directory in this project contains an Android test project that can
+be used to run different kinds of native tests. Check out the
+[README contained therein](test/README.md) for more details!
diff --git a/demo/node_modules/cordova-android/RELEASENOTES.md b/demo/node_modules/cordova-android/RELEASENOTES.md
new file mode 100644
index 0000000..5707ac3
--- /dev/null
+++ b/demo/node_modules/cordova-android/RELEASENOTES.md
@@ -0,0 +1,649 @@
+
+## Release Notes for Cordova (Android) ##
+
+### 6.3.0 (Sep 25, 2017)
+* [CB-6936](https://issues.apache.org/jira/browse/CB-6936) fix crash when calling methods on a destroyed webview
+* [CB-12981](https://issues.apache.org/jira/browse/CB-12981) handle SDK 26.0.2 slightly different AVD list output for **Android** 8+ AVDs. Would cause "cannot read property replace of undefined" errors when trying to deploy an **Android** 8 emulator.
+* Updated maven repo to include most recent lib versions
+* [CB-13177](https://issues.apache.org/jira/browse/CB-13177) Updating to API Level 26
+* Revert [CB-12015](https://issues.apache.org/jira/browse/CB-12015) initial-scale values less than 1.0 are ignored on **Android**
+* [CB-12730](https://issues.apache.org/jira/browse/CB-12730) The Cordova Compatibility Plugin is now integrated into cordova-android
+* [CB-12453](https://issues.apache.org/jira/browse/CB-12453) Remove unnecessary double quotes from .bat files which are the causes of crash if project path contains spaces
+* [CB-13031](https://issues.apache.org/jira/browse/CB-13031) Fix bug with case-sensitivity of **Android**-packageName
+* [CB-10916](https://issues.apache.org/jira/browse/CB-10916) Support display name for **Android**
+* [CB-12423](https://issues.apache.org/jira/browse/CB-12423) make explicit JDK 1.8 or greater is needed in the `README`, we require 1.8 for compilation, but do not have 1.8 Java features yet
+* [CB-13006](https://issues.apache.org/jira/browse/CB-13006) removed create and update end-to-end tests, and instead added more unit test coverage. tweaked code coverage invocation so that we get coverage details on the create.js module. slight changes to the create.js module so that it is slightly easier to test.
+* [CB-12950](https://issues.apache.org/jira/browse/CB-12950) lots of tweaks for end-to-end test runs, especially on CI: - rename npm tasks to reflect what they do (npm run unit-tests, npm run e2e-tests). main `npm test` runs linter, unit tests and e2e tests now. - locked jasmine down to ~2.6.0. - consolidate gitignores. - updated travis to run `npm test`. add **Android** sdk installation to appveyor ci run.align **Android** dpendencies across travis and appveyor. have appveyor install gradle. force gradle to version 3.4.1 in appveyor, as that seems to be the only version choco has. explicitly invoke sdkmanager to move license accepting process along.
+* [CB-12605](https://issues.apache.org/jira/browse/CB-12605) In **Windows** get **Android** studio path from the registry
+* [CB-12762](https://issues.apache.org/jira/browse/CB-12762) : pointed `package.json` repo items to github mirrors instead of apache repos site
+* [CB-12617](https://issues.apache.org/jira/browse/CB-12617) : removed node0.x support for platforms and added engineStrict
+
+### 6.2.3 (May 2, 2017)
+* [CB-12640](https://issues.apache.org/jira/browse/CB-12640) better handling of unrecognized Android SDK commands on **Windows**.
+* [CB-12640](https://issues.apache.org/jira/browse/CB-12640) flipped avd parsing logic so that it always tries to use avdmanager to retrieve avds first, then falls back to android command if avdmanager cannot be found (and errors with ENOENT). updated tests - and added explicit tests to ensure to shell out to singular forms of sub-commands when executing `android`
+* [CB-12640](https://issues.apache.org/jira/browse/CB-12640) support for android sdk tools 26.0.1.
+
+### 6.2.2 (Apr 24, 2017)
+* [CB-12697](https://issues.apache.org/jira/browse/CB-12697) Updated checked-in `node_modules`
+
+### 6.2.1 (Apr 02, 2017)
+* [CB-12621](https://issues.apache.org/jira/browse/CB-12621) reverted elementtree dep to 0.1.6
+
+### 6.2.0 (Mar 28, 2017)
+* [CB-12614](https://issues.apache.org/jira/browse/CB-12614) Adding headers to tests
+* [CB-8978](https://issues.apache.org/jira/browse/CB-8978) Prepare copy `resource-files` from `config.xml`
+* [CB-12605](https://issues.apache.org/jira/browse/CB-12605) Fix a requirements check failure on **Windows**
+* [CB-12595](https://issues.apache.org/jira/browse/CB-12595) This should find an **Android Studio** installation and use the sweet gradle center found inside
+* [CB-12546](https://issues.apache.org/jira/browse/CB-12546) leverage `avdmanager` if `android` warns it is no longer useful, which happens in **Android SDK Tools 25.3.1**. Explicitly set the `CWD` of the spawned emulator process to workaround a recent google android sdk bug. Rename `android_sdk_version.js` to `android_sdk.js`, to better reflect its contents. Have `create.js` copy over the `android_sdk_version` batch file.
+* [CB-12524](https://issues.apache.org/jira/browse/CB-12524) Fix for missing gradle template error. This now fetches the template from inside of the **Android Studio** directory, and falls back to a locally installed Gradle instance
+* [CB-12465](https://issues.apache.org/jira/browse/CB-12465) Writing new JUnit Test Instrumentation to replace tests and retire problmatic tests
+
+### 6.1.2 (Jan 26, 2017)
+* **Security** Change to `https` by default
+* [CB-12018](https://issues.apache.org/jira/browse/CB-12018): updated tests to work with jasmine (promise matcher tests commented out for now)
+* created directories and corresponding images for `xxhdpi` and `xxxhdpi`, both drawables and `mipmaps`
+
+### 6.1.1 (Jan 03, 2017)
+* [CB-12159](https://issues.apache.org/jira/browse/CB-12159) **Android** Keystore password prompt won't show up
+* [CB-12169](https://issues.apache.org/jira/browse/CB-12169) Check for build directory before running a clean
+* Fixed `AndroidStudio` tests to actually run, removed `app/src/main/assets/` as a requirement and added `app/src/main/res` instead, added placeholder for `build/` folder, Removed dupe `gitignore`
+
+### 6.1.0 (Nov 02, 2016)
+* [CB-12108](https://issues.apache.org/jira/browse/CB-12108) Updating gradle files to work with the latest version of Android Studio
+* [CB-12102](https://issues.apache.org/jira/browse/CB-12102) Bump travis to build to API 25
+* Bumping up the version
+* [CB-12101](https://issues.apache.org/jira/browse/CB-12101) Fix so that CLI builds don't conflict with Android Studio builds
+* [CB-12077](https://issues.apache.org/jira/browse/CB-12077) Fix paths for Android icons/splashscreens
+* added framework/build to .ratignore
+* Fix for broken testUrl test
+* Last minute change of test targets
+* Update JS snapshot to version 6.1.0-dev (via coho)
+* Set VERSION to 6.1.0-dev (via coho)
+
+### 6.0.0 (Oct 20, 2016)
+
+This release adds significant functionality, and also introduces a number
+of breaking changes. Some of the changes to the code base will be of
+particular interest to third party webview plugin developers.
+
+#### Major Changes ####
+* Primary bridge is the EVAL_BRIDGE, which tells the WebView to execute JS directly. This is more stable than the ONLINE_EVENT bridge
+* Full Support for Android Nougat (API 24)
+* Ice Cream Sandwich Support has been deprecated. Minimum Supported Android Version is Jellybean (API 16/ Android 4.1)
+* Plugin Installation now CLEANS the build directory, this speeds up gradle build times and allows for CLI develoment to be more predictable
+
+Changes For Third-Party WebView Developers:
+* executeJavascript method added and is an abstract method that must be implemented
+* the EVAL_BRIDGE must be added to the WebView
+
+
+#### Curated Changes from the Git Commit Logs ####
+* Updating the gradle build for test to use the latest
+* [CB-11083](https://issues.apache.org/jira/browse/CB-11083) Fixing syncronous file check and future-proofing the JS for Travis
+* [CB-11083](https://issues.apache.org/jira/browse/CB-11083) Reading files to check for CordovaLib dependency, if so, we exclude CordovaLib to be safe
+* [CB-11083](https://issues.apache.org/jira/browse/CB-11083) Plugin build script for dependencies without a gradle file
+* [CB-11083](https://issues.apache.org/jira/browse/CB-11083) The GradleBuidler can tell the difference between a Cordova Plugin Framework and a regular framework based on the name
+* [CB-11083](https://issues.apache.org/jira/browse/CB-11083) Fix to deal with custom frameworks with their own Gradle configuration
+* [CB-12003](https://issues.apache.org/jira/browse/CB-12003) updated node_modules
+* [CB-11771](https://issues.apache.org/jira/browse/CB-11771) Deep symlink directories to target project instead of linking the directory itself
+* [CB-11880](https://issues.apache.org/jira/browse/CB-11880) android: Fail-safe for cordova.exec()
+* [CB-11999](https://issues.apache.org/jira/browse/CB-11999) add message, catch exception if require fails
+* fix issue with app_name containing apostrophes
+* [CB-8722](https://issues.apache.org/jira/browse/CB-8722) - Move icons from drawable to mipmap
+* [CB-11964](https://issues.apache.org/jira/browse/CB-11964) Call clean after plugin install and mock it in tests
+* Did a try/catch to deal with the unit tests vs actual project environment, code duplication is needed because of builderEnv
+* [CB-11964](https://issues.apache.org/jira/browse/CB-11964) Do a clean when installing a plugin to et around the bug
+* [CB-11921](https://issues.apache.org/jira/browse/CB-11921) - Add github pull request template
+* [CB-11935](https://issues.apache.org/jira/browse/CB-11935) Does a best-effort attempt to pause any processing that can be paused safely, such as animations and geolocation.
+* [CB-11640](https://issues.apache.org/jira/browse/CB-11640) Fixing check_reqs.js so it actually works
+* [CB-11640](https://issues.apache.org/jira/browse/CB-11640) Changing requirements check to ask for Java 8
+* [CB-11869](https://issues.apache.org/jira/browse/CB-11869) Fix cordova-js android exec tests
+* [CB-11907](https://issues.apache.org/jira/browse/CB-11907) Bumping Gradle to work with Android Studio 2.2 and the Android Gradle Plugin
+* Enable background start of Cordova Android apps
+* fixing jshint issues
+* replace Integer.parseInt with BigInteger so that you can use longer Android version codes
+* [CB-11828](https://issues.apache.org/jira/browse/CB-11828) Adding dirty userAgent checking to see if we're running Jellybean or not for bridge modes
+* [CB-11828](https://issues.apache.org/jira/browse/CB-11828) Switching default bridge back to ONLINE_BRIDGE
+* Add gradle build flag to enable dex in process for large projects
+* added ability for cordova activity to be viewed in a real full screen regardless of android version (as was the case in previous cordova versions)
+* Updating travis
+* Adding Static Method to CoreAndroid Plugin so we can get the BuildConfig data from other plugins
+* Bump Target and Min API levels
+* Make evaluateJavaScript brige default
+* Creating an evaluateJavascript branch
+* [CB-11727](https://issues.apache.org/jira/browse/CB-11727) - travis ci setup is still using 0.10.32 node
+* [CB-11726](https://issues.apache.org/jira/browse/CB-11726) - Update appveyor node versions to 4 and 6, so they will always use the latest versions
+* Close invalid PRs
+* [CB-11683](https://issues.apache.org/jira/browse/CB-11683) Fixed linking to directories during plugin installation.
+* fixed [CB-11078](https://issues.apache.org/jira/browse/CB-11078) Empty string for BackgroundColor preference crashes application This closes #316
+* Update JS snapshot to version 5.3.0-dev (via coho)
+* Set VERSION to 5.3.0-dev (via coho)
+* [CB-11626](https://issues.apache.org/jira/browse/CB-11626) Updated RELEASENOTES and Version for release 5.2.2
+* updated cordoova-common to 1.4.0
+* This closes #195
+* Updaing the gradle for the tests to the latest
+* [CB-11550](https://issues.apache.org/jira/browse/CB-11550) Updated RELEASENOTES for release 5.2.1
+* [CB-9489](https://issues.apache.org/jira/browse/CB-9489) Fixed "endless waiting for emulator" issue
+* Update JS snapshot to version 5.3.0-dev (via coho)
+* Set VERSION to 5.3.0-dev (via coho)
+* [CB-11444](https://issues.apache.org/jira/browse/CB-11444) Updated RELEASENOTES and Version for release 5.2.0
+* [CB-11481](https://issues.apache.org/jira/browse/CB-11481) android-library is deprecated use com.android.library instead
+
+### 5.2.2 (Jul 26, 2016)
+* [CB-11615](https://issues.apache.org/jira/browse/CB-11615) updated `cordoova-common` to `1.4.0`
+
+### 5.2.1 (Jul 11, 2016)
+* [CB-9489](https://issues.apache.org/jira/browse/CB-9489) Fixed "endless waiting for emulator" issue
+* [CB-11481](https://issues.apache.org/jira/browse/CB-11481) android-library is deprecated use com.android.library instead
+
+### 5.2.0 (Jun 29, 2016)
+* [CB-11383](https://issues.apache.org/jira/browse/CB-11383) Update to gradle for using `jcenter` and correct Application plugin
+* [CB-11365](https://issues.apache.org/jira/browse/CB-11365) fixed plugin rm issue with emit being `undefined`
+* [CB-11117](https://issues.apache.org/jira/browse/CB-11117) Use `FileUpdater` to optimize prepare for **android** platform
+* [CB-10096](https://issues.apache.org/jira/browse/CB-10096) Upgrade test project to `Gradle Plugin 2.1.0`
+* [CB-11292](https://issues.apache.org/jira/browse/CB-11292) fix broken `MessageChannel` after plugins are recreated
+* [CB-11259](https://issues.apache.org/jira/browse/CB-11259) Improving build output
+* [CB-10096](https://issues.apache.org/jira/browse/CB-10096) Upgrading to `Gradle Plugin 2.1.0`
+* [CB-11198](https://issues.apache.org/jira/browse/CB-11198) Skip **android** target sdk check. This closes #303.
+* [CB-11138](https://issues.apache.org/jira/browse/CB-11138) Reuse `PluginManager` from `common` to add/rm plugins
+* [CB-11133](https://issues.apache.org/jira/browse/CB-11133) Handle **android** emulator start failure
+* [CB-11132](https://issues.apache.org/jira/browse/CB-11132) Fix Error: Cannot read property `match` of undefined in `cordova-android` `emulator.js`
+* Add simple log for package name being deployed
+* [CB-11015](https://issues.apache.org/jira/browse/CB-11015) Error adding plugin with gradle extras
+* [CB-11095](https://issues.apache.org/jira/browse/CB-11095) Fix plugin add/removal when running on `Node v.010`
+* [CB-11022](https://issues.apache.org/jira/browse/CB-11022) Duplicate www files to both destinations on plugin operations
+* [CB-10964](https://issues.apache.org/jira/browse/CB-10964) Handle `build.json` file starting with a BOM.
+* [CB-10963](https://issues.apache.org/jira/browse/CB-10963) Handle overlapping permission requests from plugins
+* [CB-8582](https://issues.apache.org/jira/browse/CB-8582) Obscure `INSTALL_FAILED_VERSION_DOWNGRADE` error when installing app
+* [CB-10862](https://issues.apache.org/jira/browse/CB-10862) Cannot set `minsdkversion`
+* [CB-10896](https://issues.apache.org/jira/browse/CB-10896) We never enabled cookies on the `WebView` proper
+* [CB-10837](https://issues.apache.org/jira/browse/CB-10837) Support platform-specific orientation on **Android**
+* [CB-10600](https://issues.apache.org/jira/browse/CB-10600) `cordova run android --release` does not use signed and zip-aligned version of `APK`
+* [CB-9710](https://issues.apache.org/jira/browse/CB-9710) Fixing issues parsing `android avd list` output for certain AVDs which resulted in them not being included in the selection process even if they are the best match.
+* [CB-10888](https://issues.apache.org/jira/browse/CB-10888) Enable coverage reports collection via codecov
+* [CB-10846](https://issues.apache.org/jira/browse/CB-10846) Add Travis and AppVeyor badges to readme
+* [CB-10846](https://issues.apache.org/jira/browse/CB-10846) Add AppVeyor configuration
+* [CB-10749](https://issues.apache.org/jira/browse/CB-10749) Use `cordova-common.CordovaLogger` in `cordova-android`
+* [CB-10673](https://issues.apache.org/jira/browse/CB-10673) fixed conflicting plugin install issue with overlapped `` tag. Add `--force` flag.
+* [CB-8976](https://issues.apache.org/jira/browse/CB-8976) Removing the auto-version for non-Crosswalk applications
+* [CB-10768](https://issues.apache.org/jira/browse/CB-10768) Use `cordova-common.superspawn` in `GradleBuilder`
+* [CB-10729](https://issues.apache.org/jira/browse/CB-10729) Move plugin handlers tests for into platform's repo
+* [CB-10669](https://issues.apache.org/jira/browse/CB-10669) `cordova run --list` cannot find `adb`
+* [CB-10660](https://issues.apache.org/jira/browse/CB-10660) fixed the exception when removing a non-existing directory.
+
+### 5.1.1 (Feb 24, 2016)
+* updated `cordova-common` dependnecy to `1.1.0`
+* [CB-10628](https://issues.apache.org/jira/browse/CB-10628) Fix `emulate android --target`
+* [CB-10618](https://issues.apache.org/jira/browse/CB-10618) Handle gradle frameworks on plugin installation/uninstallation
+* [CB-10510](https://issues.apache.org/jira/browse/CB-10510) Add an optional timeout to `emu` start script
+* [CB-10498](https://issues.apache.org/jira/browse/CB-10498) Resume event should be sticky if it has a plugin result
+* fix `HtmlNotFoundTest` so that it passes when file not found is handled correctly
+* [CB-10472](https://issues.apache.org/jira/browse/CB-10472) `NullPointerException`: `org.apache.cordova.PluginManager.onSaveInstanceState` check if `pluginManager` is `null` before using it
+* [CB-10138](https://issues.apache.org/jira/browse/CB-10138) Adds missing plugin metadata to `plugin_list` module.
+* [CB-10443](https://issues.apache.org/jira/browse/CB-10443) Pass original options instead of remaining
+* [CB-10443](https://issues.apache.org/jira/browse/CB-10443) Fix `this.root` null reference
+* [CB-10421](https://issues.apache.org/jira/browse/CB-10421) Fixes exception when calling run script with `--help` option
+* updated `.gitignore`
+* [CB-10406](https://issues.apache.org/jira/browse/CB-10406) Fixes an exception, thrown when building using Ant.
+* [CB-10157](https://issues.apache.org/jira/browse/CB-10157) Uninstall app from device/emulator only when signed apk is already installed
+
+### 5.1.0 (Jan 19, 2016)
+* [CB-10386](https://issues.apache.org/jira/browse/CB-10386) Add `android.useDeprecatedNdk=true` to support `NDK` in `gradle`
+* [CB-8864](https://issues.apache.org/jira/browse/CB-8864) Fixing this to mitigate [CB-8685](https://issues.apache.org/jira/browse/CB-8685) and [CB-10104](https://issues.apache.org/jira/browse/CB-10104)
+* [CB-10105](https://issues.apache.org/jira/browse/CB-10105) Spot fix for tilde errors on paths.
+* Update theme to `Theme.DeviceDefault.NoActionBar`
+* [CB-10014](https://issues.apache.org/jira/browse/CB-10014) Set gradle `applicationId` to `package name`.
+* [CB-9949](https://issues.apache.org/jira/browse/CB-9949) Fixing menu button event not fired in **Android**
+* [CB-9479](https://issues.apache.org/jira/browse/CB-9479) Fixing the conditionals again, we should
+* [CB-8917](https://issues.apache.org/jira/browse/CB-8917) New Plugin API for passing results on resume after Activity destruction
+* [CB-9971](https://issues.apache.org/jira/browse/CB-9971) Suppress `gradlew _JAVA_OPTIONS` output during build
+* [CB-9836](https://issues.apache.org/jira/browse/CB-9836) Add `.gitattributes` to prevent `CRLF` line endings in repos
+* added node_modules back into `.gitignore`
+
+### 5.0.0 (Nov 01, 2015)
+* Update CordovaWebViewEngine.java
+* [CB-9909](https://issues.apache.org/jira/browse/CB-9909) Shouldn't escape spaces in paths on Windows.
+* [CB-9870](https://issues.apache.org/jira/browse/CB-9870) updated hello world template
+* [CB-9880](https://issues.apache.org/jira/browse/CB-9880) Fixes platform update failure when upgrading from android@<4.1.0
+* [CB-9844](https://issues.apache.org/jira/browse/CB-9844) Remove old .java after renaming activity
+* [CB-9800](https://issues.apache.org/jira/browse/CB-9800) Fixing contribute link.
+* [CB-9782](https://issues.apache.org/jira/browse/CB-9782) Check in `cordova-common` dependency
+* Adds licence header to Adb to pass rat audit
+* [CB-9835](https://issues.apache.org/jira/browse/CB-9835) Downgrade `properties-parser` to prevent failures in Node < 4.x
+* [CB-9782](https://issues.apache.org/jira/browse/CB-9782) Implements PlatformApi contract for Android platform.
+* [CB-9826](https://issues.apache.org/jira/browse/CB-9826) Fixed `test-build` script on windows.
+* Refactor of the Cordova Plugin/Permissions API
+* Manually updating version to 5.0.0-dev for engine tags
+* Bump up to API level 23
+* Commiting code to handle permissions, and the special case of the Geolocation Plugin
+* [CB-9608](https://issues.apache.org/jira/browse/CB-9608) cordova-android no longer builds on Node 0.10 or below
+* [CB-9080](https://issues.apache.org/jira/browse/CB-9080) Cordova CLI run for Android versions 4.1.1 and lower throws error
+* [CB-9557](https://issues.apache.org/jira/browse/CB-9557) Fixes apk install failure when switching from debug to release build
+* [CB-9496](https://issues.apache.org/jira/browse/CB-9496) removed permissions added for crosswalk
+* [CB-9402](https://issues.apache.org/jira/browse/CB-9402) Allow to set gradle distubutionUrl via env variable CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL
+* [CB-9428](https://issues.apache.org/jira/browse/CB-9428) update script now bumps up minSdkVersion to 14 if it is less than that.
+* [CB-9430](https://issues.apache.org/jira/browse/CB-9430) Fixes check_reqs failure when javac returns an extra line
+* [CB-9172](https://issues.apache.org/jira/browse/CB-9172) Improved emulator deploy stability. This closes #188.
+* [CB-9404](https://issues.apache.org/jira/browse/CB-9404) Fixed an exception when path contained -debug or -release
+* [CB-8320](https://issues.apache.org/jira/browse/CB-8320) Setting up gradle so we can use CordovaLib as a standard Android Library
+* [CB-9185](https://issues.apache.org/jira/browse/CB-9185) Fixed an issue when unsigned apks couldn't be found.
+* [CB-9397](https://issues.apache.org/jira/browse/CB-9397) Fixes minor issues with `cordova requirements android`
+* [CB-9389](https://issues.apache.org/jira/browse/CB-9389) Fixes build/check_reqs hang
+
+### Release 4.1.1 (Aug 2015) ###
+
+* [CB-9428](https://issues.apache.org/jira/browse/CB-9428) update script now bumps up minSdkVersion to 14 if it is less than that
+* [CB-9430](https://issues.apache.org/jira/browse/CB-9430) Fixes check_reqs failure when javac returns an extra line
+
+### Release 4.1.0 (Jul 2015) ###
+* [CB-9392](https://issues.apache.org/jira/browse/CB-9392) Fixed printing flavored versions. This closes #184.
+* [CB-9382](https://issues.apache.org/jira/browse/CB-9382) [Android] Fix KeepRunning setting when Plugin activity is showed. This closes #200
+* [CB-9391](https://issues.apache.org/jira/browse/CB-9391) Fixes cdvBuildMultipleApks option casting
+* [CB-9343](https://issues.apache.org/jira/browse/CB-9343) Split the Content-Type to obtain a clean mimetype
+* [CB-9255](https://issues.apache.org/jira/browse/CB-9255) Make getUriType case insensitive.
+* [CB-9149](https://issues.apache.org/jira/browse/CB-9149) Fixes JSHint issue introduced by 899daa9
+* [CB-9372](https://issues.apache.org/jira/browse/CB-9372) Remove unused files: 'main.js' & 'master.css'. This closes #198
+* [CB-9149](https://issues.apache.org/jira/browse/CB-9149) Make gradle alias subprojects in order to handle libs that depend on libs. This closes #182
+* Update min SDK version to 14
+* Update licenses. This closes #190
+* [CB-9185](https://issues.apache.org/jira/browse/CB-9185) Fix signed release build exception. This closes #193.
+* [CB-9286](https://issues.apache.org/jira/browse/CB-9286) Fixes build failure when ANDROID_HOME is not set.
+* [CB-9284](https://issues.apache.org/jira/browse/CB-9284) Fix for handling absolute path for keystore in build.json
+* [CB-9260](https://issues.apache.org/jira/browse/CB-9260) Install Android-22 on Travis-CI
+* Adding .ratignore file.
+* [CB-9119](https://issues.apache.org/jira/browse/CB-9119) Adding lib/retry.js for retrying promise-returning functions. Retrying 'adb install' in emulator.js because it sometimes hangs.
+* [CB-9115](https://issues.apache.org/jira/browse/CB-9115) android: Grant Lollipop permission req
+* Remove extra console message
+* [CB-8898](https://issues.apache.org/jira/browse/CB-8898) Report expected gradle location properly
+* [CB-8898](https://issues.apache.org/jira/browse/CB-8898) Fixes gradle check failure due to missing quotes
+* [CB-9080](https://issues.apache.org/jira/browse/CB-9080) -d option is not supported on Android 4.1.1 and lower, removing
+* [CB-8954](https://issues.apache.org/jira/browse/CB-8954) Adds `requirements` command support to check_reqs module
+* Update JS snapshot to version 4.1.0-dev (via coho)
+* [CB-8417](https://issues.apache.org/jira/browse/CB-8417) updated platform specific files from cordova.js repo
+* Adding tests to confirm that preferences aren't changed by Intents
+* Forgot to remove the method that copied over the intent data
+* Getting around to removing this old Intent code
+* Update JS snapshot to version 4.1.0-dev (via coho)
+* Fix CordovaPluginTest on KitKat (start-up events seem to change)
+* [CB-3360](https://issues.apache.org/jira/browse/CB-3360) Allow setting a custom User-Agent (close #162)
+* [CB-8902](https://issues.apache.org/jira/browse/CB-8902) Use immersive mode when available when going fullscreen (close #175)
+* Make BridgeMode methods public (they were always supposed to be)
+* Simplify: EncodingUtils.getBytes(str) -> str.getBytes()
+* Don't show warning when gradlew file is read-only
+* Don't show warning when prepEnv copies gradlew and it's read-only
+* Make gradle wrapper prepEnv code work even when android-sdk is read-only
+* [CB-8897](https://issues.apache.org/jira/browse/CB-8897) Delete drawable/icon.png since it duplicates drawable-mdpi/icon.png
+* Updating the template to target mininumSdkTarget=14
+* [CB-8894](https://issues.apache.org/jira/browse/CB-8894) Updating the template to target mininumSdkTarget=14
+* [CB-8891](https://issues.apache.org/jira/browse/CB-8891) Add a note about when the gradle helpers were added
+* [CB-8891](https://issues.apache.org/jira/browse/CB-8891) Add a gradle helper for retrieving config.xml preference values
+* [CB-8884](https://issues.apache.org/jira/browse/CB-8884) Delete Eclipse tweaks from create script
+* [CB-8834](https://issues.apache.org/jira/browse/CB-8834) Don't fail to install on VERSION_DOWNGRADE
+* Automated tools fail, and you have to remember all four places where this is set.
+* Update the package.json
+* [CB-9042](https://issues.apache.org/jira/browse/CB-9042) coho failed to update version, so here we are
+* CB9042 - Updating Release Notes
+* Adding tests to confirm that preferences aren't changed by Intents
+* updating existing test code
+* Forgot to remove the method that copied over the intent data
+* Getting around to removing this old Intent code
+* [CB-8834](https://issues.apache.org/jira/browse/CB-8834) Don't fail to install on VERSION_DOWNGRADE
+
+### Release 4.0.2 (May 2015) ###
+
+* Removed Intent Functionality from Preferences - Preferences can no longer be set by intents
+
+### Release 4.0.1 (April 2015) ###
+
+* Bug fixed where platform failed to install on a version downgrade
+
+### Release 4.0.0 (March 2015) ###
+
+This release adds significant functionality, and also introduces a number
+of breaking changes. Some of the changes to the code base will be of
+particular interest to plugin developers.
+
+#### Major Changes ####
+* Support for pluggable WebViews
+ * The system WebView can be replaced in your app, via a plugin
+ * Core WebView functionality is encapsulated, with extension points exposed
+ via interfaces
+* Support for Crosswalk to bring the modern Chromium WebView to older devices
+ * Uses the pluggable WebView framework
+ * You will need to add the new [cordova-crosswalk-engine](https://github.com/MobileChromeApps/cordova-crosswalk-engine) plugin
+* Splash screen functionality is now provided via plugin
+ * You will need to add the new [cordova-plugin-splashscreen](https://github.com/apache/cordova-plugin-splashscreen) plugin to continue using a splash screen
+* Whitelist functionality is now provided via plugin (CB-7747)
+ * The whitelist has been enhanced to be more secure and configurable
+ * Setting of Content-Security-Policy is now supported by the framework (see details in plugin readme)
+ * You will need to add the new [cordova-plugin-whitelist](https://github.com/apache/cordova-plugin-whitelist) plugin
+ * Legacy whitelist behaviour is still available via plugin (although not recommended).
+
+Changes For Plugin Developers:
+
+* Develop in Android Studio
+ * Android Studio is now fully supported, and recommended over Eclipse
+* Build using Gradle
+ * All builds [use Gradle by default](Android%20Shell%20Tool%20Guide_building_with_gradle), instead of Ant
+ * Plugins can add their own gradle build steps!
+ * Plugins can depend on Maven libraries using `` tags
+* New APIs: `onStart`, `onStop`, `onConfigurationChanged`
+* `"onScrollChanged"` message removed. Use `view.getViewTreeObserver().addOnScrollChangedListener(...)` instead
+* [CB-8702](https://issues.apache.org/jira/browse/CB-8702) New API for plugins to override `shouldInterceptRequest` with a stream
+
+#### Other Changes ####
+* [CB-8378](https://issues.apache.org/jira/browse/CB-8378) Removed `hidekeyboard` and `showkeyboard` events (apps should use a plugin instead)
+* [CB-8735](https://issues.apache.org/jira/browse/CB-8735) `bin/create` regex relaxed / better support for numbers
+* [CB-8699](https://issues.apache.org/jira/browse/CB-8699) Fix CordovaResourceApi `copyResource` creating zero-length files when src=uncompressed asset
+* [CB-8693](https://issues.apache.org/jira/browse/CB-8693) CordovaLib should not contain icons / splashscreens
+* [CB-8592](https://issues.apache.org/jira/browse/CB-8592) Fix NPE if lifecycle events reach CordovaWebView before `init()` has been called
+* [CB-8588](https://issues.apache.org/jira/browse/CB-8588) Add CATEGORY_BROWSABLE to intents from showWebPage openExternal=true
+* [CB-8587](https://issues.apache.org/jira/browse/CB-8587) Don't allow WebView navigations within showWebPage that are not whitelisted
+* [CB-7827](https://issues.apache.org/jira/browse/CB-7827) Add `--activity-name` for `bin/create`
+* [CB-8548](https://issues.apache.org/jira/browse/CB-8548) Use debug-signing.properties and release-signing.properties when they exist
+* [CB-8545](https://issues.apache.org/jira/browse/CB-8545) Don't add a layout as a parent of the WebView
+* [CB-7159](https://issues.apache.org/jira/browse/CB-7159) BackgroundColor not used when ``, nor during screen rotation
+* [CB-6630](https://issues.apache.org/jira/browse/CB-6630) Removed OkHttp from core library. It's now available as a plugin: [cordova-plugin-okhttp](https://www.npmjs.com/package/cordova-plugin-okhttp)
+
+### Release 3.7.1 (January 2015) ###
+* [CB-8411](https://issues.apache.org/jira/browse/CB-8411) Initialize plugins only after `createViews()` is called (regression in 3.7.0)
+
+### Release 3.7.0 (January 2015) ###
+
+* [CB-8328](https://issues.apache.org/jira/browse/CB-8328) Allow plugins to handle certificate challenges (close #150)
+* [CB-8201](https://issues.apache.org/jira/browse/CB-8201) Add support for auth dialogs into Cordova Android
+* [CB-8017](https://issues.apache.org/jira/browse/CB-8017) Add support for `` for Lollipop
+* [CB-8143](https://issues.apache.org/jira/browse/CB-8143) Loads of gradle improvements (try it with cordova/build --gradle)
+* [CB-8329](https://issues.apache.org/jira/browse/CB-8329) Cancel outstanding ActivityResult requests when a new startActivityForResult occurs
+* [CB-8026](https://issues.apache.org/jira/browse/CB-8026) Bumping up Android Version and setting it up to allow third-party cookies. This might change later.
+* [CB-8210](https://issues.apache.org/jira/browse/CB-8210) Use PluginResult for various events from native so that content-security-policy can be used
+* [CB-8168](https://issues.apache.org/jira/browse/CB-8168) Add support for `cordova/run --list` (closes #139)
+* [CB-8176](https://issues.apache.org/jira/browse/CB-8176) Vastly better auto-detection of SDK & JDK locations
+* [CB-8079](https://issues.apache.org/jira/browse/CB-8079) Use activity class package name, but fallback to application package name when looking for splash screen drawable
+* [CB-8147](https://issues.apache.org/jira/browse/CB-8147) Have corodva/build warn about unrecognized flags rather than fail
+* [CB-7881](https://issues.apache.org/jira/browse/CB-7881) Android tooling shouldn't lock application directory
+* [CB-8112](https://issues.apache.org/jira/browse/CB-8112) Turn off mediaPlaybackRequiresUserGesture
+* [CB-6153](https://issues.apache.org/jira/browse/CB-6153) Add a preference for controlling hardware button audio stream (DefaultVolumeStream)
+* [CB-8031](https://issues.apache.org/jira/browse/CB-8031) Fix race condition that shows as ConcurrentModificationException
+* [CB-7974](https://issues.apache.org/jira/browse/CB-7974) Cancel timeout timer if view is destroyed
+* [CB-7940](https://issues.apache.org/jira/browse/CB-7940) Disable exec bridge if bridgeSecret is wrong
+* [CB-7758](https://issues.apache.org/jira/browse/CB-7758) Allow content-url-hosted pages to access the bridge
+* [CB-6511](https://issues.apache.org/jira/browse/CB-6511) Fixes build for android when app name contains unicode characters.
+* [CB-7707](https://issues.apache.org/jira/browse/CB-7707) Added multipart PluginResult
+* [CB-6837](https://issues.apache.org/jira/browse/CB-6837) Fix leaked window when hitting back button while alert being rendered
+* [CB-7674](https://issues.apache.org/jira/browse/CB-7674) Move preference activation back into onCreate()
+* [CB-7499](https://issues.apache.org/jira/browse/CB-7499) Support RTL text direction
+* [CB-7330](https://issues.apache.org/jira/browse/CB-7330) Don't run check_reqs for bin/create.
+
+### 3.6.4 (Sept 30, 2014) ###
+
+* Set VERSION to 3.6.4 (via coho)
+* Update JS snapshot to version 3.6.4 (via coho)
+* [CB-7634](https://issues.apache.org/jira/browse/CB-7634) Detect JAVA_HOME properly on Ubuntu
+* [CB-7579](https://issues.apache.org/jira/browse/CB-7579) Fix run script's ability to use non-arch-specific APKs
+* [CB-6511](https://issues.apache.org/jira/browse/CB-6511) Fixes build for android when app name contains unicode characters.
+* [CB-7463](https://issues.apache.org/jira/browse/CB-7463) Adding licences. I don't know what the gradle syntax is for comments, that still needs to be done.
+* [CB-7463](https://issues.apache.org/jira/browse/CB-7463) Looked at the Apache BigTop git, gradle uses C-style comments
+* [CB-7460](https://issues.apache.org/jira/browse/CB-7460) Fixing bug with KitKat where the background colour would override the CSS colours on the application
+
+### 3.6.0 (Sept 2014) ###
+
+* Set VERSION to 3.6.0 (via coho)
+* [CB-7410](https://issues.apache.org/jira/browse/CB-7410) fix the menu test
+* [CB-7410](https://issues.apache.org/jira/browse/CB-7410) Fix the errorUrl test
+* [CB-7410](https://issues.apache.org/jira/browse/CB-7410) Fix Basic Authentication test
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Allow build and run scripts to select APK by architecture
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add environment variable 'BUILD_MULTIPLE_APKS' for splitting APKs based on architecture
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Ensure that JAR files in libs directory are included
+* [CB-7267](https://issues.apache.org/jira/browse/CB-7267) update RELEASENOTES for 3.5.1
+* [CB-7410](https://issues.apache.org/jira/browse/CB-7410) clarify the title
+* [CB-7385](https://issues.apache.org/jira/browse/CB-7385) update cordova.js for testing prior to branch/tag
+* [CB-7410](https://issues.apache.org/jira/browse/CB-7410) add whitelist entries to get iframe/GoogleMaps working
+* [CB-7291](https://issues.apache.org/jira/browse/CB-7291) propogate change in method signature to the native tests
+* [CB-7291](https://issues.apache.org/jira/browse/CB-7291) Restrict meaning of "\*" in internal whitelist to just http and https
+* [CB-7291](https://issues.apache.org/jira/browse/CB-7291) Only add file, content and data URLs to internal whitelist
+* [CB-7291](https://issues.apache.org/jira/browse/CB-7291) Add defaults to external whitelist
+* [CB-7291](https://issues.apache.org/jira/browse/CB-7291) Add external-launch-whitelist and use it for filtering intent launches
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Read project.properties to configure gradle libraries
+* [CB-7325](https://issues.apache.org/jira/browse/CB-7325) Fix error message in android_sdk_version.js when missing SDK on windows
+* [CB-7335](https://issues.apache.org/jira/browse/CB-7335) Add a .gitignore to android project template
+* [CB-7330](https://issues.apache.org/jira/browse/CB-7330) Fix dangling function call in last commit (broke gradle builds)
+* [CB-7330](https://issues.apache.org/jira/browse/CB-7330) Don't run "android update" during creation
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add gradle support clean command (plus some code cleanup)
+* [CB-7044](https://issues.apache.org/jira/browse/CB-7044) Fix typo in prev commit causing check_reqs to always fail.
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Copy gradle wrapper in build instead of create
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add .gradle template files for "update" as well as "create"
+* [CB-7044](https://issues.apache.org/jira/browse/CB-7044) Add JAVA_HOME when not set. Be stricter about ANDROID_HOME
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Speed up gradle building (incremental builds go from 10s -> 1.5s for me)
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) android: Copy Gradle wrapper from Android SDK rather than bundling a JAR
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add which to checked-in node_modules
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add option to build and install with gradle
+* [CB-3445](https://issues.apache.org/jira/browse/CB-3445) Add an initial set of Gradle build scripts
+* [CB-7321](https://issues.apache.org/jira/browse/CB-7321) Don't require ant for create script
+* CB-7044, [CB-7299](https://issues.apache.org/jira/browse/CB-7299) Fix up PATH problems when possible.
+* Change in test's AndroidManifest.xml needed for the test to run properly. Forgot the manifest.
+* Change in test's AndroidManifest.xml needed for the test to run properly
+* Adding tests related to 3.5.1
+* [CB-7261](https://issues.apache.org/jira/browse/CB-7261) Fix setNativeToJsBridgeMode sometimes crashing when switching to ONLINE_EVENT
+* [CB-7265](https://issues.apache.org/jira/browse/CB-7265) Fix crash when navigating to custom protocol (introduced in 3.5.1)
+* Filter out non-launchable intents
+* Handle unsupported protocol errors in webview better
+* [CB-7238](https://issues.apache.org/jira/browse/CB-7238) I should have collapsed this, but Config.init() must go before the creation of CordovaWebView
+* [CB-7238](https://issues.apache.org/jira/browse/CB-7238) Minor band-aid to get tests running again, this has to go away before 3.6.0 is released, since this is an API change.
+* Extend whitelist to handle URLs without // chars
+* [CB-7172](https://issues.apache.org/jira/browse/CB-7172) Force window to have focus after resume
+* [CB-7159](https://issues.apache.org/jira/browse/CB-7159) Set background color of webView as well as its parent
+* [CB-7018](https://issues.apache.org/jira/browse/CB-7018) Fix setButtonPlumbedToJs never un-listening
+* Undeprecate some just-deprecated symbols in PluginManager.
+* @Deprecate methods of PluginManager that were never meant to be public
+* Move plugin instantiation and instance storing logic PluginEntry->PluginManager
+* Fix broken unit test due to missing Config.init() call
+* Update to check for Google Glass APIs
+* Fix for `android` not being in PATH check on Windows
+* Displaying error when regex does not match.
+* Fix broken compile due to previous commit :(
+* Tweak CordovaPlugin.initialize method to be less deprecated.
+* Un-deprecate CordovaActivity.init() - it's needed to tweak prefs in onCreate
+* Tweak log messages in CordovaBridge with bridgeSecret is wrong
+* Backport CordovaBridge from 4.0.x -> master
+* Update unit tests to not use most deprecated things (e.g. DroidGap)
+* Add non-String overloades for CordovaPreferences.set()
+* Make CordovaWebview resilient to init() not being called (for backwards-compatibility)
+* Add node_module licenses to LICENSE
+* Update cordova.js snapshot to work with bridge changes
+* Provide CordovaPlugin with CordovaPreferences. Add new Plugin.initialize()
+* Convert usages of Config.\* to use the non-static versions
+* Change getProperty -> prefs.get\* within CordovaActivity
+* Make CordovaUriHelper class package-private
+* Fix PluginManager.setPluginEntries not removing old entries
+* Move registration of App plugin from config.xml -> code
+* Make setWebViewClient an override instead of an overload. Delete Location-change JS->Native bridge mode (missed some of it).
+* [CB-4404](https://issues.apache.org/jira/browse/CB-4404) Revert setting android:windowSoftInputMode to "adjustPan"
+* Refactor: Use ConfigXmlParser in activity. Adds CordovaWebView.init()
+* Deprecate some convenience methods on CordovaActivity
+* Fix CordovaPreferences not correctly parsing hex values (valueOf->decode)
+* Refactor: Move url-filter information into PluginEntry.
+* Don't re-parse config.xml in onResume.
+* Move handling of Fullscreen preference to CordovaActivity
+* Delete dead code from CordovaActivity
+* Update .classpath to make Eclipse happy (just re-orders one line)
+* Delete "CB-3064: The errorUrl is..." Log message left over from debugging presumably
+* Refactor Config into ConfigXmlParser, CordovaPreferences
+* Delete Location-change JS->Native bridge mode
+* [CB-5988](https://issues.apache.org/jira/browse/CB-5988) Allow exec() only from file: or start-up URL's domain
+* [CB-6761](https://issues.apache.org/jira/browse/CB-6761) Fix native->JS bridge ceasing to fire when page changes and online is set to false and the JS loads quickly
+* Update the errorurl to no longer use intents
+* This breaks running the JUnit tests, we'll bring it back soon
+* Refactoring the URI handling on Cordova, removing dead code
+* [CB-7018](https://issues.apache.org/jira/browse/CB-7018) Clean up and deprecation of some button-related functions
+* [CB-7017](https://issues.apache.org/jira/browse/CB-7017) Fix onload=true being set on all subsequent plugins
+* [CB-5971](https://issues.apache.org/jira/browse/CB-5971) Fix package / project validation
+* [CB-5971](https://issues.apache.org/jira/browse/CB-5971) Add unit tests to cordova-android
+* [CB-5971](https://issues.apache.org/jira/browse/CB-5971) Factor out package/project name validation logic
+* Delete explicit activity.finish() in back button handling. No change in behaviour.
+* [CB-5971](https://issues.apache.org/jira/browse/CB-5971) This would have been a good first bug, too bad
+* [CB-4404](https://issues.apache.org/jira/browse/CB-4404) Changing where android:windowSoftInputMode is in the manifest so it works
+* Add documentation referencing other implementation.
+* [CB-6851](https://issues.apache.org/jira/browse/CB-6851) Deprecate WebView.sendJavascript()
+* [CB-6876](https://issues.apache.org/jira/browse/CB-6876) Show the correct executable name
+* [CB-6876](https://issues.apache.org/jira/browse/CB-6876) Fix the "print usage"
+* Trivial spelling fix in comments when reading CordovaResourceApi
+* [CB-6818](https://issues.apache.org/jira/browse/CB-6818) I want to remove this code, because Square didn't do their headers properly
+* [CB-6860](https://issues.apache.org/jira/browse/CB-6860) Add activity_name and launcher_name to AndroidManifest.xml & strings.xml
+* Add a comment to custom_rules.xml saying why we move AndroidManifest.xml
+* Remove +x from README.md
+* [CB-6784](https://issues.apache.org/jira/browse/CB-6784) Add missing licenses
+* [CB-6784](https://issues.apache.org/jira/browse/CB-6784) Add license to CONTRIBUTING.md
+* Revert "defaults.xml: Add AndroidLaunchMode preference"
+* updated RELEASENOTES
+* [CB-6315](https://issues.apache.org/jira/browse/CB-6315) Wrapping this so it runs on the UI thread
+* [CB-6723](https://issues.apache.org/jira/browse/CB-6723) Update package name for Robotium
+* [CB-6707](https://issues.apache.org/jira/browse/CB-6707) Update minSdkVersion to 10 consistently
+* [CB-5652](https://issues.apache.org/jira/browse/CB-5652) make visible cordova version
+* Update JS snapshot to version 3.6.0-dev (via coho)
+* Update JS snapshot to version 3.6.0-dev (via coho)
+* Set VERSION to 3.6.0-dev (via coho)
+
+### 3.5.1 (August 2014) ###
+
+This was a security update to address CVE-2014-3500, CVE-2014-3501,
+and CVE-2014-3502. For more information, see
+http://cordova.apache.org/announcements/2014/08/04/android-351.html
+
+* Filter out non-launchable intents
+* Handle unsupported protocol errors in webview better
+* Update the errorurl to no longer use intents
+* Refactoring the URI handling on Cordova, removing dead code
+
+### 3.5.0 (May 2014) ###
+
+* OkHttp has broken headers. Updating for ASF compliance.
+* Revert accidentally removed lines from NOTICE
+* [CB-6552](https://issues.apache.org/jira/browse/CB-6552) added top level package.json
+* [CB-6491](https://issues.apache.org/jira/browse/CB-6491) add CONTRIBUTING.md
+* [CB-6543](https://issues.apache.org/jira/browse/CB-6543) Fix cordova/run failure when no custom_rules.xml available
+* defaults.xml: Add AndroidLaunchMode preference
+* Add JavaDoc for CordovaResourceApi
+* [CB-6388](https://issues.apache.org/jira/browse/CB-6388) Handle binary data correctly in LOAD_URL bridge
+* Fix [CB-6048](https://issues.apache.org/jira/browse/CB-6048) Set launchMode=singleTop so tapping app icon does not always restart app
+* Remove incorrect usage of AlertDialog.Builder.create
+* Catch uncaught exceptions in from plugins and turn them into error responses.
+* Add NOTICE file
+* [CB-6047](https://issues.apache.org/jira/browse/CB-6047) Fix online sometimes getting in a bad state on page transitions.
+* Add another convenience overload for CordovaResourceApi.copyResource
+* Update framework's .classpath to what Eclipse wants it to be.
+* README.md: `android update` to `android-19`.
+* Fix NPE when POLLING bridge mode is used.
+* Updating NOTICE to include Square for OkHttp
+* [CB-5398](https://issues.apache.org/jira/browse/CB-5398) Apply KitKat content URI fix to all content URIs
+* [CB-5398](https://issues.apache.org/jira/browse/CB-5398) Work-around for KitKat content: URLs not rendering in tags
+* [CB-5908](https://issues.apache.org/jira/browse/CB-5908) add splascreen images to template
+* [CB-5395](https://issues.apache.org/jira/browse/CB-5395) Make scheme and host (but not path) case-insensitive in whitelist
+* Ignore multiple onPageFinished() callbacks & onReceivedError due to stopLoading()
+* Removing addJavascriptInterface support from all Android versions lower than 4.2 due to security vu
+* [CB-4984](https://issues.apache.org/jira/browse/CB-4984) Don't create on CordovaActivity name
+* [CB-5917](https://issues.apache.org/jira/browse/CB-5917) Add a loadUrlIntoView overload that doesn't recreate plugins.
+* Use thread pool for load timeout.
+* [CB-5715](https://issues.apache.org/jira/browse/CB-5715) For CLI, hide assets/www and res/xml/config.xml by default
+* [CB-5793](https://issues.apache.org/jira/browse/CB-5793) ant builds: Rename AndroidManifest during -post-build to avoid Eclipse detecting ant-build/
+* [CB-5889](https://issues.apache.org/jira/browse/CB-5889) Make update script find project name instead of using "null" for CordovaLib
+* [CB-5889](https://issues.apache.org/jira/browse/CB-5889) Add a message in the update script about needing to import CordovaLib when using an IDE.
+
+### 3.4.0 (Feb 2014) ###
+
+43 commits from 10 authors. Highlights include:
+
+* Removing addJavascriptInterface support from all Android versions lower than 4.2 due to security vulnerability
+* [CB-5917](https://issues.apache.org/jira/browse/CB-5917) Add a loadUrlIntoView overload that doesn't recreate plugins.
+* [CB-5889](https://issues.apache.org/jira/browse/CB-5889) Make update script find project name instead of using "null" for CordovaLib
+* [CB-5889](https://issues.apache.org/jira/browse/CB-5889) Add a message in the update script about needing to import CordovaLib when using an IDE.
+* [CB-5793](https://issues.apache.org/jira/browse/CB-5793) Don't clean before build and change output directory to ant-build to avoid conflicts with Eclipse.
+* [CB-5803](https://issues.apache.org/jira/browse/CB-5803) Fix cordova/emulate on windows.
+* [CB-5801](https://issues.apache.org/jira/browse/CB-5801) exec->spawn in build to make sure compile errors are shown.
+* [CB-5799](https://issues.apache.org/jira/browse/CB-5799) Update version of OkHTTP to 1.3
+* [CB-4910](https://issues.apache.org/jira/browse/CB-4910) Update CLI project template to point to config.xml at the root now that it's not in www/ by default.
+* [CB-5504](https://issues.apache.org/jira/browse/CB-5504) Adding onDestroy to app plugin to deregister telephonyReceiver
+* [CB-5715](https://issues.apache.org/jira/browse/CB-5715) Add Eclipse .project file to create template. For CLI projects, it adds refs for root www/ & config.xml and hides platform versions
+* [CB-5447](https://issues.apache.org/jira/browse/CB-5447) Removed android:debuggable=“true” from project template.
+* [CB-5714](https://issues.apache.org/jira/browse/CB-5714) Fix of android build when too big output stops build with error due to buffer overflow.
+* [CB-5592](https://issues.apache.org/jira/browse/CB-5592) Set MIME type for openExternal when scheme is file:
+
+### 3.3.0 (Dec 2013) ###
+
+41 commits from 11 authors. Highlights include:
+
+* [CB-5481](https://issues.apache.org/jira/browse/CB-5481) Fix for Cordova trying to get config.xml from the wrong namespace
+* [CB-5487](https://issues.apache.org/jira/browse/CB-5487) Enable Remote Debugging when your Android app is debuggable.
+* [CB-5445](https://issues.apache.org/jira/browse/CB-5445) Adding onScrollChanged and the ScrollEvent object
+* [CB-5422](https://issues.apache.org/jira/browse/CB-5422) Don't require JAVA_HOME to be defined
+* [CB-5490](https://issues.apache.org/jira/browse/CB-5490) Add javadoc target to ant script
+* [CB-5471](https://issues.apache.org/jira/browse/CB-5471) Deprecated DroidGap class
+* [CB-5255](https://issues.apache.org/jira/browse/CB-5255) Prefer Google API targets over android-## targets when building.
+* [CB-5232](https://issues.apache.org/jira/browse/CB-5232) Change create script to use Cordova as a Library Project instead of a .jar
+* [CB-5302](https://issues.apache.org/jira/browse/CB-5302) Massive movement to get tests working again
+* [CB-4996](https://issues.apache.org/jira/browse/CB-4996) Fix paths with spaces while launching on emulator and device
+* [CB-5209](https://issues.apache.org/jira/browse/CB-5209) Cannot build Android app if project path contains spaces
+
+
+### 3.2.0 (Nov 2013) ###
+
+27 commits from 7 authors. Highlights include:
+
+* [CB-5193](https://issues.apache.org/jira/browse/CB-5193) Fix Android WebSQL sometime throwing SECURITY_ERR.
+* [CB-5191](https://issues.apache.org/jira/browse/CB-5191) Deprecate
+* Updating shelljs to 0.2.6. Copy now preserves mode bits.
+* [CB-4872](https://issues.apache.org/jira/browse/CB-4872) Added android version scripts (android_sdk_version, etc)
+* [CB-5117](https://issues.apache.org/jira/browse/CB-5117) Output confirmation message if check_reqs passes.
+* [CB-5080](https://issues.apache.org/jira/browse/CB-5080) Find resources in a way that works with aapt's --rename-manifest-package
+* [CB-4527](https://issues.apache.org/jira/browse/CB-4527) Don't delete .bat files even when on non-windows platform
+* [CB-4892](https://issues.apache.org/jira/browse/CB-4892) Fix create script only escaping the first space instead of all spaces.
+
+### 3.1.0 (Sept 2013) ###
+
+55 commits from 9 authors. Highlights include:
+
+* [CB-4817](https://issues.apache.org/jira/browse/CB-4817) Remove unused assets in project template.
+* Fail fast in create script if package name is not com.foo.bar.
+* [CB-4782](https://issues.apache.org/jira/browse/CB-4782) Convert ApplicationInfo.java -> appinfo.js
+* [CB-4766](https://issues.apache.org/jira/browse/CB-4766) Deprecated JSONUtils.java (moved into plugins)
+* [CB-4765](https://issues.apache.org/jira/browse/CB-4765) Deprecated ExifHelper.java (moved into plugins)
+* [CB-4764](https://issues.apache.org/jira/browse/CB-4764) Deprecated DirectoryManager.java (moved into plugins)
+* [CB-4763](https://issues.apache.org/jira/browse/CB-4763) Deprecated FileHelper.java (moved into plugins), Move getMimeType() into CordovaResourceApi.
+* [CB-4725](https://issues.apache.org/jira/browse/CB-4725) Add CordovaWebView.CORDOVA_VERSION constant
+* Incrementing version check for Android 4.3 API Level 18
+* [CB-3542](https://issues.apache.org/jira/browse/CB-3542) rewrote cli tooling scripts in node
+* Allow CordovaChromeClient subclasses access to CordovaInterface and CordovaWebView members
+* Refactor CordovaActivity.init so that subclasses can easily override factory methods for webview objects
+* [CB-4652](https://issues.apache.org/jira/browse/CB-4652) Allow default project template to be overridden on create
+* Tweak the online bridge to not send excess online events.
+* [CB-4495](https://issues.apache.org/jira/browse/CB-4495) Modify start-emulator script to exit immediately on a fatal emulator error.
+* Log WebView IOExceptions only when they are not 404s
+* Use a higher threshold for slow exec() warnings when debugger is attached.
+* Fix data URI decoding in CordovaResourceApi
+* [CB-3819](https://issues.apache.org/jira/browse/CB-3819) Made it easier to set SplashScreen delay.
+* [CB-4013](https://issues.apache.org/jira/browse/CB-4013) Fixed loadUrlTimeoutValue preference.
+* Upgrading project to Android 4.3
+* [CB-4198](https://issues.apache.org/jira/browse/CB-4198) bin/create script should be better at handling non-word characters in activity name. Patched windows script as well.
+* [CB-4198](https://issues.apache.org/jira/browse/CB-4198) bin/create should handle spaces in activity better.
+* [CB-4096](https://issues.apache.org/jira/browse/CB-4096) Implemented new unified whitelist for android
+* [CB-3384](https://issues.apache.org/jira/browse/CB-3384) Fix thread assertion when plugins remap URIs
+
diff --git a/demo/node_modules/cordova-android/VERSION b/demo/node_modules/cordova-android/VERSION
new file mode 100644
index 0000000..798e389
--- /dev/null
+++ b/demo/node_modules/cordova-android/VERSION
@@ -0,0 +1 @@
+6.3.0
diff --git a/demo/node_modules/cordova-android/appveyor.yml b/demo/node_modules/cordova-android/appveyor.yml
new file mode 100644
index 0000000..907d0c4
--- /dev/null
+++ b/demo/node_modules/cordova-android/appveyor.yml
@@ -0,0 +1,37 @@
+image:
+ - Previous Visual Studio 2015
+
+environment:
+ ANDROID_HOME: "C:\\android"
+ matrix:
+ - nodejs_version: "4"
+ - nodejs_version: "6"
+
+init:
+ - mkdir "%ANDROID_HOME%
+ - cd "%ANDROID_HOME%"
+ - appveyor DownloadFile "https://dl.google.com/android/repository/tools_r25.2.3-windows.zip"
+ - 7z x "tools_r25.2.3-windows.zip" > nul
+ - cd "C:\projects\cordova-android"
+
+install:
+ - choco install gradle -version 3.4.1
+ - gradle -version
+ - echo y | "%ANDROID_HOME%\tools\android.bat" --silent update sdk --no-ui --all --filter platform-tools,tools,build-tools-26.0.0,android-26,android-25,extra-google-m2repository,extra-android-m2repository
+ # on windows we need to accept sublicenses for the new tooling, wee. 30 is an arbitrary number,
+ # but should be the maximum number of licenses we explicitly need to type "Y ENTER" for.
+ # also, the sdkmanager in all its glory leaks a bit of output to stderr, and powershell
+ # and appveyor interpret that as errors, and blows up. so, when piping in our "Y ENTER"
+ # responses, we invoke cmd so we can redirect stderr to stdout, and tell it to --update itself.
+ - ps: for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | cmd /c 'C:\android\tools\bin\sdkmanager.bat 2>&1' --update
+ - ps: Install-Product node $env:nodejs_version
+ - npm install
+ # below is a workaround on using gradle installed via choco on appveyor
+ - set path=C:\ProgramData\chocolatey\lib\gradle\tools\gradle-3.4.1\bin;%path%
+
+build: off
+
+test_script:
+ - node --version
+ - npm --version
+ - npm test
diff --git a/demo/node_modules/cordova-android/bin/android_sdk_version b/demo/node_modules/cordova-android/bin/android_sdk_version
new file mode 100644
index 0000000..e0ce1ec
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/android_sdk_version
@@ -0,0 +1,29 @@
+#!/usr/bin/env node
+
+/*
+ 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 android_sdk = require('./templates/cordova/lib/android_sdk');
+
+android_sdk.print_newest_available_sdk_target().done(null, function(err) {
+ console.error(err);
+ process.exit(2);
+});
+
+
diff --git a/demo/node_modules/cordova-android/bin/android_sdk_version.bat b/demo/node_modules/cordova-android/bin/android_sdk_version.bat
new file mode 100644
index 0000000..a6bc104
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/android_sdk_version.bat
@@ -0,0 +1,26 @@
+:: 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.
+
+@ECHO OFF
+SET script_path="%~dp0android_sdk_version"
+IF EXIST %script_path% (
+ node %script_path% %*
+) ELSE (
+ ECHO.
+ ECHO ERROR: Could not find 'android_sdk_version' script in 'bin' folder, aborting...>&2
+ EXIT /B 1
+)
diff --git a/demo/node_modules/cordova-android/bin/check_reqs b/demo/node_modules/cordova-android/bin/check_reqs
new file mode 100644
index 0000000..628628f
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/check_reqs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+/*
+ 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 check_reqs = require('./templates/cordova/lib/check_reqs');
+
+check_reqs.run().done(
+ function success() {
+ console.log('Looks like your environment fully supports cordova-android development!');
+ }, function fail(err) {
+ console.log(err);
+ process.exit(2);
+ }
+);
diff --git a/demo/node_modules/cordova-android/bin/check_reqs.bat b/demo/node_modules/cordova-android/bin/check_reqs.bat
new file mode 100644
index 0000000..846dfa1
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/check_reqs.bat
@@ -0,0 +1,26 @@
+:: 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.
+
+@ECHO OFF
+SET script_path="%~dp0check_reqs"
+IF EXIST %script_path% (
+ node %script_path% %*
+) ELSE (
+ ECHO.
+ ECHO ERROR: Could not find 'check_reqs' script in 'bin' folder, aborting...>&2
+ EXIT /B 1
+)
diff --git a/demo/node_modules/cordova-android/bin/create b/demo/node_modules/cordova-android/bin/create
new file mode 100644
index 0000000..b1e4d5a
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/create
@@ -0,0 +1,58 @@
+#!/usr/bin/env node
+
+/*
+ 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 path = require('path');
+var ConfigParser = require('cordova-common').ConfigParser;
+var Api = require('./templates/cordova/Api');
+
+var argv = require('nopt')({
+ 'help' : Boolean,
+ 'cli' : Boolean,
+ 'shared' : Boolean,
+ 'link' : Boolean,
+ 'activity-name' : [String, undefined]
+}, { 'd' : '--verbose' });
+
+if (argv.help || argv.argv.remain.length === 0) {
+ console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'create')) + ' [] [--activity-name ] [--link]');
+ console.log(' : Path to your new Cordova Android project');
+ console.log(' : Package name, following reverse-domain style convention');
+ console.log(' : Project name');
+ console.log(' : Path to a custom application template to use');
+ console.log(' --activity-name : Activity name');
+ console.log(' --link will use the CordovaLib project directly instead of making a copy.');
+ process.exit(1);
+}
+
+var config = new ConfigParser(path.resolve(__dirname, 'templates/project/res/xml/config.xml'));
+
+if (argv.argv.remain[1]) config.setPackageName(argv.argv.remain[1]);
+if (argv.argv.remain[2]) config.setName(argv.argv.remain[2]);
+if (argv['activity-name']) config.setName(argv['activity-name']);
+
+var options = {
+ link: argv.link || argv.shared,
+ customTemplate: argv.argv.remain[3],
+ activityName: argv['activity-name']
+};
+
+require('./templates/cordova/loggingHelper').adjustLoggerLevel(argv);
+
+Api.createPlatform(argv.argv.remain[0], config, options).done();
diff --git a/demo/node_modules/cordova-android/bin/create.bat b/demo/node_modules/cordova-android/bin/create.bat
new file mode 100644
index 0000000..4b475a2
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/create.bat
@@ -0,0 +1,26 @@
+:: 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.
+
+@ECHO OFF
+SET script_path="%~dp0create"
+IF EXIST %script_path% (
+ node %script_path% %*
+) ELSE (
+ ECHO.
+ ECHO ERROR: Could not find 'create' script in 'bin' folder, aborting...>&2
+ EXIT /B 1
+)
\ No newline at end of file
diff --git a/demo/node_modules/cordova-android/bin/lib/create.js b/demo/node_modules/cordova-android/bin/lib/create.js
new file mode 100644
index 0000000..40df366
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/lib/create.js
@@ -0,0 +1,348 @@
+#!/usr/bin/env node
+
+/*
+ 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 shell = require('shelljs');
+var Q = require('q');
+var path = require('path');
+var fs = require('fs');
+var check_reqs = require('./../templates/cordova/lib/check_reqs');
+var ROOT = path.join(__dirname, '..', '..');
+
+var MIN_SDK_VERSION = 16;
+
+var CordovaError = require('cordova-common').CordovaError;
+var AndroidManifest = require('../templates/cordova/lib/AndroidManifest');
+
+// Export all helper functions, and make sure internally within this module, we
+// reference these methods via the `exports` object - this helps with testing
+// (since we can then mock and control behaviour of all of these functions)
+exports.validatePackageName = validatePackageName;
+exports.validateProjectName = validateProjectName;
+exports.setShellFatal = setShellFatal;
+exports.copyJsAndLibrary = copyJsAndLibrary;
+exports.copyScripts = copyScripts;
+exports.copyBuildRules = copyBuildRules;
+exports.writeProjectProperties = writeProjectProperties;
+exports.prepBuildFiles = prepBuildFiles;
+
+function setShellFatal (value, func) {
+ var oldVal = shell.config.fatal;
+ shell.config.fatal = value;
+ func();
+ shell.config.fatal = oldVal;
+}
+
+function getFrameworkDir (projectPath, shared) {
+ return shared ? path.join(ROOT, 'framework') : path.join(projectPath, 'CordovaLib');
+}
+
+function copyJsAndLibrary (projectPath, shared, projectName) {
+ var nestedCordovaLibPath = getFrameworkDir(projectPath, false);
+ var srcCordovaJsPath = path.join(ROOT, 'bin', 'templates', 'project', 'assets', 'www', 'cordova.js');
+ shell.cp('-f', srcCordovaJsPath, path.join(projectPath, 'assets', 'www', 'cordova.js'));
+
+ // Copy the cordova.js file to platforms//platform_www/
+ // The www dir is nuked on each prepare so we keep cordova.js in platform_www
+ shell.mkdir('-p', path.join(projectPath, 'platform_www'));
+ shell.cp('-f', srcCordovaJsPath, path.join(projectPath, 'platform_www'));
+
+ // Copy cordova-js-src directory into platform_www directory.
+ // We need these files to build cordova.js if using browserify method.
+ shell.cp('-rf', path.join(ROOT, 'cordova-js-src'), path.join(projectPath, 'platform_www'));
+
+ // Don't fail if there are no old jars.
+ exports.setShellFatal(false, function () {
+ shell.ls(path.join(projectPath, 'libs', 'cordova-*.jar')).forEach(function (oldJar) {
+ console.log('Deleting ' + oldJar);
+ shell.rm('-f', oldJar);
+ });
+ var wasSymlink = true;
+ try {
+ // Delete the symlink if it was one.
+ fs.unlinkSync(nestedCordovaLibPath);
+ } catch (e) {
+ wasSymlink = false;
+ }
+ // Delete old library project if it existed.
+ if (shared) {
+ shell.rm('-rf', nestedCordovaLibPath);
+ } else if (!wasSymlink) {
+ // Delete only the src, since Eclipse / Android Studio can't handle their project files being deleted.
+ shell.rm('-rf', path.join(nestedCordovaLibPath, 'src'));
+ }
+ });
+ if (shared) {
+ var relativeFrameworkPath = path.relative(projectPath, getFrameworkDir(projectPath, true));
+ fs.symlinkSync(relativeFrameworkPath, nestedCordovaLibPath, 'dir');
+ } else {
+ shell.mkdir('-p', nestedCordovaLibPath);
+ shell.cp('-f', path.join(ROOT, 'framework', 'AndroidManifest.xml'), nestedCordovaLibPath);
+ shell.cp('-f', path.join(ROOT, 'framework', 'project.properties'), nestedCordovaLibPath);
+ shell.cp('-f', path.join(ROOT, 'framework', 'build.gradle'), nestedCordovaLibPath);
+ shell.cp('-f', path.join(ROOT, 'framework', 'cordova.gradle'), nestedCordovaLibPath);
+ shell.cp('-r', path.join(ROOT, 'framework', 'src'), nestedCordovaLibPath);
+ }
+}
+
+function extractSubProjectPaths (data) {
+ var ret = {};
+ var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg;
+ var m;
+ while ((m = r.exec(data))) {
+ ret[m[1]] = 1;
+ }
+ return Object.keys(ret);
+}
+
+function writeProjectProperties (projectPath, target_api) {
+ var dstPath = path.join(projectPath, 'project.properties');
+ var templatePath = path.join(ROOT, 'bin', 'templates', 'project', 'project.properties');
+ var srcPath = fs.existsSync(dstPath) ? dstPath : templatePath;
+
+ var data = fs.readFileSync(srcPath, 'utf8');
+ data = data.replace(/^target=.*/m, 'target=' + target_api);
+ var subProjects = extractSubProjectPaths(data);
+ subProjects = subProjects.filter(function (p) {
+ return !(/^CordovaLib$/m.exec(p) ||
+ /[\\/]cordova-android[\\/]framework$/m.exec(p) ||
+ /^(\.\.[\\/])+framework$/m.exec(p));
+ });
+ subProjects.unshift('CordovaLib');
+ data = data.replace(/^\s*android\.library\.reference\.\d+=.*\n/mg, '');
+ if (!/\n$/.exec(data)) {
+ data += '\n';
+ }
+ for (var i = 0; i < subProjects.length; ++i) {
+ data += 'android.library.reference.' + (i + 1) + '=' + subProjects[i] + '\n';
+ }
+ fs.writeFileSync(dstPath, data);
+}
+
+function prepBuildFiles (projectPath) {
+ var buildModule = require(path.resolve(projectPath, 'cordova/lib/builders/builders'));
+ buildModule.getBuilder('gradle').prepBuildFiles();
+}
+
+function copyBuildRules (projectPath) {
+ var srcDir = path.join(ROOT, 'bin', 'templates', 'project');
+
+ shell.cp('-f', path.join(srcDir, 'build.gradle'), projectPath);
+ shell.cp('-f', path.join(srcDir, 'wrapper.gradle'), projectPath);
+}
+
+function copyScripts (projectPath) {
+ var bin = path.join(ROOT, 'bin');
+ var srcScriptsDir = path.join(bin, 'templates', 'cordova');
+ var destScriptsDir = path.join(projectPath, 'cordova');
+ // Delete old scripts directory if this is an update.
+ shell.rm('-rf', destScriptsDir);
+ // Copy in the new ones.
+ shell.cp('-r', srcScriptsDir, projectPath);
+ shell.cp('-r', path.join(ROOT, 'node_modules'), destScriptsDir);
+ shell.cp(path.join(bin, 'check_reqs*'), destScriptsDir);
+ shell.cp(path.join(bin, 'android_sdk_version*'), destScriptsDir);
+ var check_reqs = path.join(destScriptsDir, 'check_reqs');
+ var android_sdk_version = path.join(destScriptsDir, 'android_sdk_version');
+ // TODO: the two files being edited on-the-fly here are shared between
+ // platform and project-level commands. the below `sed` is updating the
+ // `require` path for the two libraries. if there's a better way to share
+ // modules across both the repo and generated projects, we should make sure
+ // to remove/update this.
+ shell.sed('-i', /templates\/cordova\//, '', android_sdk_version);
+ shell.sed('-i', /templates\/cordova\//, '', check_reqs);
+}
+
+/**
+ * Test whether a package name is acceptable for use as an android project.
+ * Returns a promise, fulfilled if the package name is acceptable; rejected
+ * otherwise.
+ */
+function validatePackageName (package_name) {
+ // Make the package conform to Java package types
+ // http://developer.android.com/guide/topics/manifest/manifest-element.html#package
+ // Enforce underscore limitation
+ var msg = 'Error validating package name. ';
+
+ if (!/^[a-zA-Z][a-zA-Z0-9_]+(\.[a-zA-Z][a-zA-Z0-9_]*)+$/.test(package_name)) {
+ return Q.reject(new CordovaError(msg + 'Package name must look like: com.company.Name'));
+ }
+
+ // Class is a reserved word
+ if (/\b[Cc]lass\b/.test(package_name)) {
+ return Q.reject(new CordovaError(msg + '"class" is a reserved word'));
+ }
+
+ return Q.resolve();
+}
+
+/**
+ * Test whether a project name is acceptable for use as an android class.
+ * Returns a promise, fulfilled if the project name is acceptable; rejected
+ * otherwise.
+ */
+function validateProjectName (project_name) {
+ var msg = 'Error validating project name. ';
+ // Make sure there's something there
+ if (project_name === '') {
+ return Q.reject(new CordovaError(msg + 'Project name cannot be empty'));
+ }
+
+ // Enforce stupid name error
+ if (project_name === 'CordovaActivity') {
+ return Q.reject(new CordovaError(msg + 'Project name cannot be CordovaActivity'));
+ }
+
+ // Classes in Java don't begin with numbers
+ if (/^[0-9]/.test(project_name)) {
+ return Q.reject(new CordovaError(msg + 'Project name must not begin with a number'));
+ }
+
+ return Q.resolve();
+}
+
+/**
+ * Creates an android application with the given options.
+ *
+ * @param {String} project_path Path to the new Cordova android project.
+ * @param {ConfigParser} config Instance of ConfigParser to retrieve basic
+ * project properties.
+ * @param {Object} [options={}] Various options
+ * @param {String} [options.activityName='MainActivity'] Name for the
+ * activity
+ * @param {Boolean} [options.link=false] Specifies whether javascript files
+ * and CordovaLib framework will be symlinked to created application.
+ * @param {String} [options.customTemplate] Path to project template
+ * (override)
+ * @param {EventEmitter} [events] An EventEmitter instance for logging
+ * events
+ *
+ * @return {Promise} Directory where application has been created
+ */
+exports.create = function (project_path, config, options, events) {
+
+ options = options || {};
+
+ // Set default values for path, package and name
+ project_path = path.relative(process.cwd(), (project_path || 'CordovaExample'));
+ // Check if project already exists
+ if (fs.existsSync(project_path)) {
+ return Q.reject(new CordovaError('Project already exists! Delete and recreate'));
+ }
+
+ var package_name = config.android_packageName() || config.packageName() || 'my.cordova.project';
+ var project_name = config.name() ?
+ config.name().replace(/[^\w.]/g, '_') : 'CordovaExample';
+
+ var safe_activity_name = config.android_activityName() || options.activityName || 'MainActivity';
+ var target_api = check_reqs.get_target();
+
+ // Make the package conform to Java package types
+ return exports.validatePackageName(package_name)
+ .then(function () {
+ exports.validateProjectName(project_name);
+ }).then(function () {
+ // Log the given values for the project
+ events.emit('log', 'Creating Cordova project for the Android platform:');
+ events.emit('log', '\tPath: ' + project_path);
+ events.emit('log', '\tPackage: ' + package_name);
+ events.emit('log', '\tName: ' + project_name);
+ events.emit('log', '\tActivity: ' + safe_activity_name);
+ events.emit('log', '\tAndroid target: ' + target_api);
+
+ events.emit('verbose', 'Copying android template project to ' + project_path);
+
+ exports.setShellFatal(true, function () {
+ var project_template_dir = options.customTemplate || path.join(ROOT, 'bin', 'templates', 'project');
+ // copy project template
+ shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
+ shell.cp('-r', path.join(project_template_dir, 'res'), project_path);
+ shell.cp(path.join(project_template_dir, 'gitignore'), path.join(project_path, '.gitignore'));
+
+ // Manually create directories that would be empty within the template (since git doesn't track directories).
+ shell.mkdir(path.join(project_path, 'libs'));
+
+ // copy cordova.js, cordova.jar
+ exports.copyJsAndLibrary(project_path, options.link, safe_activity_name);
+
+ // interpolate the activity name and package
+ var packagePath = package_name.replace(/\./g, path.sep);
+ var activity_dir = path.join(project_path, 'src', packagePath);
+ var activity_path = path.join(activity_dir, safe_activity_name + '.java');
+ shell.mkdir('-p', activity_dir);
+ shell.cp('-f', path.join(project_template_dir, 'Activity.java'), activity_path);
+ shell.sed('-i', /__ACTIVITY__/, safe_activity_name, activity_path);
+ shell.sed('-i', /__NAME__/, project_name, path.join(project_path, 'res', 'values', 'strings.xml'));
+ shell.sed('-i', /__ID__/, package_name, activity_path);
+
+ var manifest = new AndroidManifest(path.join(project_template_dir, 'AndroidManifest.xml'));
+ manifest.setPackageId(package_name)
+ .setTargetSdkVersion(target_api.split('-')[1])
+ .getActivity().setName(safe_activity_name);
+
+ var manifest_path = path.join(project_path, 'AndroidManifest.xml');
+ manifest.write(manifest_path);
+
+ exports.copyScripts(project_path);
+ exports.copyBuildRules(project_path);
+ });
+ // Link it to local android install.
+ exports.writeProjectProperties(project_path, target_api);
+ exports.prepBuildFiles(project_path);
+ events.emit('log', generateDoneMessage('create', options.link));
+ }).thenResolve(project_path);
+};
+
+function generateDoneMessage (type, link) {
+ var pkg = require('../../package');
+ var msg = 'Android project ' + (type === 'update' ? 'updated ' : 'created ') + 'with ' + pkg.name + '@' + pkg.version;
+ if (link) {
+ msg += ' and has a linked CordovaLib';
+ }
+ return msg;
+}
+
+// Returns a promise.
+exports.update = function (projectPath, options, events) {
+ options = options || {};
+
+ return Q()
+ .then(function () {
+
+ var manifest = new AndroidManifest(path.join(projectPath, 'AndroidManifest.xml'));
+
+ if (Number(manifest.getMinSdkVersion()) < MIN_SDK_VERSION) {
+ events.emit('verbose', 'Updating minSdkVersion to ' + MIN_SDK_VERSION + ' in AndroidManifest.xml');
+ manifest.setMinSdkVersion(MIN_SDK_VERSION);
+ }
+
+ manifest.setDebuggable(false).write();
+
+ var projectName = manifest.getActivity().getName();
+ var target_api = check_reqs.get_target();
+
+ exports.copyJsAndLibrary(projectPath, options.link, projectName);
+ exports.copyScripts(projectPath);
+ exports.copyBuildRules(projectPath);
+ exports.writeProjectProperties(projectPath, target_api);
+ exports.prepBuildFiles(projectPath);
+ events.emit('log', generateDoneMessage('update', options.link));
+ }).thenResolve(projectPath);
+};
diff --git a/demo/node_modules/cordova-android/bin/templates/cordova/Api.js b/demo/node_modules/cordova-android/bin/templates/cordova/Api.js
new file mode 100644
index 0000000..107108e
--- /dev/null
+++ b/demo/node_modules/cordova-android/bin/templates/cordova/Api.js
@@ -0,0 +1,396 @@
+/**
+ 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 path = require('path');
+var Q = require('q');
+
+var AndroidProject = require('./lib/AndroidProject');
+var AndroidStudio = require('./lib/AndroidStudio');
+var PluginManager = require('cordova-common').PluginManager;
+
+var CordovaLogger = require('cordova-common').CordovaLogger;
+var selfEvents = require('cordova-common').events;
+
+var PLATFORM = 'android';
+
+function setupEvents (externalEventEmitter) {
+ if (externalEventEmitter) {
+ // This will make the platform internal events visible outside
+ selfEvents.forwardEventsTo(externalEventEmitter);
+ return externalEventEmitter;
+ }
+
+ // There is no logger if external emitter is not present,
+ // so attach a console logger
+ CordovaLogger.get().subscribe(selfEvents);
+ return selfEvents;
+}
+
+/**
+ * Class, that acts as abstraction over particular platform. Encapsulates the
+ * platform's properties and methods.
+ *
+ * Platform that implements own PlatformApi instance _should implement all
+ * prototype methods_ of this class to be fully compatible with cordova-lib.
+ *
+ * The PlatformApi instance also should define the following field:
+ *
+ * * platform: String that defines a platform name.
+ */
+function Api (platform, platformRootDir, events) {
+ this.platform = PLATFORM;
+ this.root = path.resolve(__dirname, '..');
+
+ setupEvents(events);
+
+ var self = this;
+
+ this.locations = {
+ root: self.root,
+ www: path.join(self.root, 'assets/www'),
+ res: path.join(self.root, 'res'),
+ platformWww: path.join(self.root, 'platform_www'),
+ configXml: path.join(self.root, 'res/xml/config.xml'),
+ defaultConfigXml: path.join(self.root, 'cordova/defaults.xml'),
+ strings: path.join(self.root, 'res/values/strings.xml'),
+ manifest: path.join(self.root, 'AndroidManifest.xml'),
+ build: path.join(self.root, 'build'),
+ // NOTE: Due to platformApi spec we need to return relative paths here
+ cordovaJs: 'bin/templates/project/assets/www/cordova.js',
+ cordovaJsSrc: 'cordova-js-src'
+ };
+
+ // XXX Override some locations for Android Studio projects
+ if (AndroidStudio.isAndroidStudioProject(self.root) === true) {
+ selfEvents.emit('log', 'Android Studio project detected');
+ this.android_studio = true;
+ this.locations.configXml = path.join(self.root, 'app/src/main/res/xml/config.xml');
+ this.locations.strings = path.join(self.root, 'app/src/main/res/xml/strings.xml');
+ this.locations.manifest = path.join(self.root, 'app/src/main/AndroidManifest.xml');
+ this.locations.www = path.join(self.root, 'app/src/main/assets/www');
+ this.locations.res = path.join(self.root, 'app/src/main/res');
+ }
+}
+
+/**
+ * Installs platform to specified directory and creates a platform project.
+ *
+ * @param {String} destination Destination directory, where insatll platform to
+ * @param {ConfigParser} [config] ConfgiParser instance, used to retrieve
+ * project creation options, such as package id and project name.
+ * @param {Object} [options] An options object. The most common options are:
+ * @param {String} [options.customTemplate] A path to custom template, that
+ * should override the default one from platform.
+ * @param {Boolean} [options.link] Flag that indicates that platform's
+ * sources will be linked to installed platform instead of copying.
+ * @param {EventEmitter} [events] An EventEmitter instance that will be used for
+ * logging purposes. If no EventEmitter provided, all events will be logged to
+ * console
+ *
+ * @return {Promise} Promise either fulfilled with PlatformApi
+ * instance or rejected with CordovaError.
+ */
+Api.createPlatform = function (destination, config, options, events) {
+ events = setupEvents(events);
+ var result;
+ try {
+ result = require('../../lib/create').create(destination, config, options, events).then(function (destination) {
+ var PlatformApi = require(path.resolve(destination, 'cordova/Api'));
+ return new PlatformApi(PLATFORM, destination, events);
+ });
+ } catch (e) {
+ events.emit('error', 'createPlatform is not callable from the android project API.');
+ throw (e);
+ }
+ return result;
+};
+
+/**
+ * Updates already installed platform.
+ *
+ * @param {String} destination Destination directory, where platform installed
+ * @param {Object} [options] An options object. The most common options are:
+ * @param {String} [options.customTemplate] A path to custom template, that
+ * should override the default one from platform.
+ * @param {Boolean} [options.link] Flag that indicates that platform's
+ * sources will be linked to installed platform instead of copying.
+ * @param {EventEmitter} [events] An EventEmitter instance that will be used for
+ * logging purposes. If no EventEmitter provided, all events will be logged to
+ * console
+ *
+ * @return {Promise} Promise either fulfilled with PlatformApi
+ * instance or rejected with CordovaError.
+ */
+Api.updatePlatform = function (destination, options, events) {
+ events = setupEvents(events);
+ var result;
+ try {
+ result = require('../../lib/create').update(destination, options, events).then(function (destination) {
+ var PlatformApi = require(path.resolve(destination, 'cordova/Api'));
+ return new PlatformApi('android', destination, events);
+ });
+ } catch (e) {
+ events.emit('error', 'updatePlatform is not callable from the android project API, you will need to do this manually.');
+ throw (e);
+ }
+ return result;
+};
+
+/**
+ * Gets a CordovaPlatform object, that represents the platform structure.
+ *
+ * @return {CordovaPlatform} A structure that contains the description of
+ * platform's file structure and other properties of platform.
+ */
+Api.prototype.getPlatformInfo = function () {
+ var result = {};
+ result.locations = this.locations;
+ result.root = this.root;
+ result.name = this.platform;
+ result.version = require('./version');
+ result.projectConfig = this._config;
+
+ return result;
+};
+
+/**
+ * Updates installed platform with provided www assets and new app
+ * configuration. This method is required for CLI workflow and will be called
+ * each time before build, so the changes, made to app configuration and www
+ * code, will be applied to platform.
+ *
+ * @param {CordovaProject} cordovaProject A CordovaProject instance, that defines a
+ * project structure and configuration, that should be applied to platform
+ * (contains project's www location and ConfigParser instance for project's
+ * config).
+ *
+ * @return {Promise} Return a promise either fulfilled, or rejected with
+ * CordovaError instance.
+ */
+Api.prototype.prepare = function (cordovaProject, prepareOptions) {
+ return require('./lib/prepare').prepare.call(this, cordovaProject, prepareOptions);
+};
+
+/**
+ * Installs a new plugin into platform. This method only copies non-www files
+ * (sources, libs, etc.) to platform. It also doesn't resolves the
+ * dependencies of plugin. Both of handling of www files, such as assets and
+ * js-files and resolving dependencies are the responsibility of caller.
+ *
+ * @param {PluginInfo} plugin A PluginInfo instance that represents plugin
+ * that will be installed.
+ * @param {Object} installOptions An options object. Possible options below:
+ * @param {Boolean} installOptions.link: Flag that specifies that plugin
+ * sources will be symlinked to app's directory instead of copying (if
+ * possible).
+ * @param {Object} installOptions.variables An object that represents
+ * variables that will be used to install plugin. See more details on plugin
+ * variables in documentation:
+ * https://cordova.apache.org/docs/en/4.0.0/plugin_ref_spec.md.html
+ *
+ * @return {Promise} Return a promise either fulfilled, or rejected with
+ * CordovaError instance.
+ */
+Api.prototype.addPlugin = function (plugin, installOptions) {
+ var project = AndroidProject.getProjectFile(this.root);
+ var self = this;
+
+ installOptions = installOptions || {};
+ installOptions.variables = installOptions.variables || {};
+ // Add PACKAGE_NAME variable into vars
+ if (!installOptions.variables.PACKAGE_NAME) {
+ installOptions.variables.PACKAGE_NAME = project.getPackageName();
+ }
+
+ if (this.android_studio === true) {
+ installOptions.android_studio = true;
+ }
+
+ return Q().then(function () {
+ // CB-11964: Do a clean when installing the plugin code to get around
+ // the Gradle bug introduced by the Android Gradle Plugin Version 2.2
+ // TODO: Delete when the next version of Android Gradle plugin comes out
+
+ // Since clean doesn't just clean the build, it also wipes out www, we need
+ // to pass additional options.
+
+ // Do some basic argument parsing
+ var opts = {};
+
+ // Skip cleaning prepared files when not invoking via cordova CLI.
+ opts.noPrepare = true;
+
+ if (!AndroidStudio.isAndroidStudioProject(self.root) && !project.isClean()) {
+ return self.clean(opts);
+ }
+ }).then(function () {
+ return PluginManager.get(self.platform, self.locations, project).addPlugin(plugin, installOptions);
+ }).then(function () {
+ if (plugin.getFrameworks(this.platform).length === 0) return;
+
+ selfEvents.emit('verbose', 'Updating build files since android plugin contained ');
+ require('./lib/builders/builders').getBuilder('gradle').prepBuildFiles();
+ }.bind(this))
+ // CB-11022 Return truthy value to prevent running prepare after
+ .thenResolve(true);
+};
+
+/**
+ * Removes an installed plugin from platform.
+ *
+ * Since method accepts PluginInfo instance as input parameter instead of plugin
+ * id, caller shoud take care of managing/storing PluginInfo instances for
+ * future uninstalls.
+ *
+ * @param {PluginInfo} plugin A PluginInfo instance that represents plugin
+ * that will be installed.
+ *
+ * @return {Promise} Return a promise either fulfilled, or rejected with
+ * CordovaError instance.
+ */
+Api.prototype.removePlugin = function (plugin, uninstallOptions) {
+ var project = AndroidProject.getProjectFile(this.root);
+
+ if (uninstallOptions && uninstallOptions.usePlatformWww === true && this.android_studio === true) {
+ uninstallOptions.usePlatformWww = false;
+ uninstallOptions.android_studio = true;
+ }
+
+ return PluginManager.get(this.platform, this.locations, project)
+ .removePlugin(plugin, uninstallOptions)
+ .then(function () {
+ if (plugin.getFrameworks(this.platform).length === 0) return;
+
+ selfEvents.emit('verbose', 'Updating build files since android plugin contained ');
+ require('./lib/builders/builders').getBuilder('gradle').prepBuildFiles();
+ }.bind(this))
+ // CB-11022 Return truthy value to prevent running prepare after
+ .thenResolve(true);
+};
+
+/**
+ * Builds an application package for current platform.
+ *
+ * @param {Object} buildOptions A build options. This object's structure is
+ * highly depends on platform's specific. The most common options are:
+ * @param {Boolean} buildOptions.debug Indicates that packages should be
+ * built with debug configuration. This is set to true by default unless the
+ * 'release' option is not specified.
+ * @param {Boolean} buildOptions.release Indicates that packages should be
+ * built with release configuration. If not set to true, debug configuration
+ * will be used.
+ * @param {Boolean} buildOptions.device Specifies that built app is intended
+ * to run on device
+ * @param {Boolean} buildOptions.emulator: Specifies that built app is
+ * intended to run on emulator
+ * @param {String} buildOptions.target Specifies the device id that will be
+ * used to run built application.
+ * @param {Boolean} buildOptions.nobuild Indicates that this should be a
+ * dry-run call, so no build artifacts will be produced.
+ * @param {String[]} buildOptions.archs Specifies chip architectures which
+ * app packages should be built for. List of valid architectures is depends on
+ * platform.
+ * @param {String} buildOptions.buildConfig The path to build configuration
+ * file. The format of this file is depends on platform.
+ * @param {String[]} buildOptions.argv Raw array of command-line arguments,
+ * passed to `build` command. The purpose of this property is to pass a
+ * platform-specific arguments, and eventually let platform define own
+ * arguments processing logic.
+ *
+ * @return {Promise