diff --git a/www/hooks/README.md b/www/hooks/README.md
deleted file mode 100644
index d2563ea..0000000
--- a/www/hooks/README.md
+++ /dev/null
@@ -1,83 +0,0 @@
-
-# Cordova Hooks
-
-This directory may contain scripts used to customize cordova commands. This
-directory used to exist at `.cordova/hooks`, but has now been moved to the
-project root. Any scripts you add to these directories will be executed before
-and after the commands corresponding to the directory name. Useful for
-integrating your own build systems or integrating with version control systems.
-
-__Remember__: Make your scripts executable.
-
-## Hook Directories
-The following subdirectories will be used for hooks:
-
- after_build/
- after_compile/
- after_docs/
- after_emulate/
- after_platform_add/
- after_platform_rm/
- after_platform_ls/
- after_plugin_add/
- after_plugin_ls/
- after_plugin_rm/
- after_plugin_search/
- after_prepare/
- after_run/
- after_serve/
- before_build/
- before_compile/
- before_docs/
- before_emulate/
- before_platform_add/
- before_platform_rm/
- before_platform_ls/
- before_plugin_add/
- before_plugin_ls/
- before_plugin_rm/
- before_plugin_search/
- before_prepare/
- before_run/
- before_serve/
- pre_package/ <-- Windows 8 and Windows Phone only.
-
-## Script Interface
-
-All scripts are run from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables:
-
-* CORDOVA_VERSION - The version of the Cordova-CLI.
-* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios).
-* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer)
-* CORDOVA_HOOK - Path to the hook that is being executed.
-* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate)
-
-If a script returns a non-zero exit code, then the parent cordova command will be aborted.
-
-
-## Writing hooks
-
-We highly recommend writting your hooks using Node.js so that they are
-cross-platform. Some good examples are shown here:
-
-[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/)
-
diff --git a/www/hooks/after_prepare/010_add_platform_class.js b/www/hooks/after_prepare/010_add_platform_class.js
deleted file mode 100755
index bda3e41..0000000
--- a/www/hooks/after_prepare/010_add_platform_class.js
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env node
-
-// Add Platform Class
-// v1.0
-// Automatically adds the platform class to the body tag
-// after the `prepare` command. By placing the platform CSS classes
-// directly in the HTML built for the platform, it speeds up
-// rendering the correct layout/style for the specific platform
-// instead of waiting for the JS to figure out the correct classes.
-
-var fs = require('fs');
-var path = require('path');
-
-var rootdir = process.argv[2];
-
-function addPlatformBodyTag(indexPath, platform) {
- // add the platform class to the body tag
- try {
- var platformClass = 'platform-' + platform;
- var cordovaClass = 'platform-cordova platform-webview';
-
- var html = fs.readFileSync(indexPath, 'utf8');
-
- var bodyTag = findBodyTag(html);
- if(!bodyTag) return; // no opening body tag, something's wrong
-
- if(bodyTag.indexOf(platformClass) > -1) return; // already added
-
- var newBodyTag = bodyTag;
-
- var classAttr = findClassAttr(bodyTag);
- if(classAttr) {
- // body tag has existing class attribute, add the classname
- var endingQuote = classAttr.substring(classAttr.length-1);
- var newClassAttr = classAttr.substring(0, classAttr.length-1);
- newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote;
- newBodyTag = bodyTag.replace(classAttr, newClassAttr);
-
- } else {
- // add class attribute to the body tag
- newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">');
- }
-
- html = html.replace(bodyTag, newBodyTag);
-
- fs.writeFileSync(indexPath, html, 'utf8');
-
- process.stdout.write('add to body class: ' + platformClass + '\n');
- } catch(e) {
- process.stdout.write(e);
- }
-}
-
-function findBodyTag(html) {
- // get the body tag
- try{
- return html.match(/
])(.*?)>/gi)[0];
- }catch(e){}
-}
-
-function findClassAttr(bodyTag) {
- // get the body tag's class attribute
- try{
- return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0];
- }catch(e){}
-}
-
-if (rootdir) {
-
- // go through each of the platform directories that have been prepared
- var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []);
-
- for(var x=0; x
-
-
-
-
- title
-
-
-
-
-
-
-
diff --git a/www/platforms/android/.gitignore b/www/platforms/android/.gitignore
deleted file mode 100644
index 6e52445..0000000
--- a/www/platforms/android/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-# Non-project-specific build files:
-build.xml
-local.properties
-/gradlew
-/gradlew.bat
-/gradle
-# Ant builds
-ant-build
-ant-gen
-# Eclipse builds
-gen
-out
-# Gradle builds
-/build
diff --git a/www/platforms/android/AndroidManifest.xml b/www/platforms/android/AndroidManifest.xml
deleted file mode 100644
index fad2c1e..0000000
--- a/www/platforms/android/AndroidManifest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/www/platforms/android/CordovaLib/AndroidManifest.xml b/www/platforms/android/CordovaLib/AndroidManifest.xml
deleted file mode 100755
index 3feb903..0000000
--- a/www/platforms/android/CordovaLib/AndroidManifest.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
diff --git a/www/platforms/android/CordovaLib/build.gradle b/www/platforms/android/CordovaLib/build.gradle
deleted file mode 100644
index ee0b776..0000000
--- a/www/platforms/android/CordovaLib/build.gradle
+++ /dev/null
@@ -1,61 +0,0 @@
-/* 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.
-*/
-
-
-
-buildscript {
- repositories {
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
- }
-
-}
-
-apply plugin: 'com.android.library'
-
-ext {
- apply from: 'cordova.gradle'
- cdvCompileSdkVersion = privateHelpers.getProjectTarget()
- cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
-}
-
-android {
- compileSdkVersion cdvCompileSdkVersion
- buildToolsVersion cdvBuildToolsVersion
- publishNonDefault true
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_6
- targetCompatibility JavaVersion.VERSION_1_6
- }
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
-}
diff --git a/www/platforms/android/CordovaLib/cordova.gradle b/www/platforms/android/CordovaLib/cordova.gradle
deleted file mode 100644
index 746b63a..0000000
--- a/www/platforms/android/CordovaLib/cordova.gradle
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- 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.
-*/
-
-import java.util.regex.Pattern
-import groovy.swing.SwingBuilder
-
-String doEnsureValueExists(filePath, props, key) {
- if (props.get(key) == null) {
- throw new GradleException(filePath + ': Missing key required "' + key + '"')
- }
- return props.get(key)
-}
-
-String doGetProjectTarget() {
- def props = new Properties()
- file('project.properties').withReader { reader ->
- props.load(reader)
- }
- return doEnsureValueExists('project.properties', props, 'target')
-}
-
-String[] getAvailableBuildTools() {
- def buildToolsDir = new File(getAndroidSdkDir(), "build-tools")
- buildToolsDir.list()
- .findAll { it ==~ /[0-9.]+/ }
- .sort { a, b -> compareVersions(b, a) }
-}
-
-String doFindLatestInstalledBuildTools(String minBuildToolsVersion) {
- def availableBuildToolsVersions
- try {
- availableBuildToolsVersions = getAvailableBuildTools()
- } catch (e) {
- println "An exception occurred while trying to find the Android build tools."
- throw e
- }
- if (availableBuildToolsVersions.length > 0) {
- def highestBuildToolsVersion = availableBuildToolsVersions[0]
- if (compareVersions(highestBuildToolsVersion, minBuildToolsVersion) < 0) {
- throw new RuntimeException(
- "No usable Android build tools found. Highest installed version is " +
- highestBuildToolsVersion + "; minimum version required is " +
- minBuildToolsVersion + ".")
- }
- highestBuildToolsVersion
- } else {
- throw new RuntimeException(
- "No installed build tools found. Install the Android build tools version " +
- minBuildToolsVersion + " or higher.")
- }
-}
-
-// Return the first non-zero result of subtracting version list elements
-// pairwise. If they are all identical, return the difference in length of
-// the two lists.
-int compareVersionList(Collection aParts, Collection bParts) {
- def pairs = ([aParts, bParts]).transpose()
- pairs.findResult(aParts.size()-bParts.size()) {it[0] - it[1] != 0 ? it[0] - it[1] : null}
-}
-
-// Compare two version strings, such as "19.0.0" and "18.1.1.0". If all matched
-// elements are identical, the longer version is the largest by this method.
-// Examples:
-// "19.0.0" > "19"
-// "19.0.1" > "19.0.0"
-// "19.1.0" > "19.0.1"
-// "19" > "18.999.999"
-int compareVersions(String a, String b) {
- def aParts = a.tokenize('.').collect {it.toInteger()}
- def bParts = b.tokenize('.').collect {it.toInteger()}
- compareVersionList(aParts, bParts)
-}
-
-String getAndroidSdkDir() {
- def rootDir = project.rootDir
- def androidSdkDir = null
- String envVar = System.getenv("ANDROID_HOME")
- def localProperties = new File(rootDir, 'local.properties')
- String systemProperty = System.getProperty("android.home")
- if (envVar != null) {
- androidSdkDir = envVar
- } else if (localProperties.exists()) {
- Properties properties = new Properties()
- localProperties.withInputStream { instr ->
- properties.load(instr)
- }
- def sdkDirProp = properties.getProperty('sdk.dir')
- if (sdkDirProp != null) {
- androidSdkDir = sdkDirProp
- } else {
- sdkDirProp = properties.getProperty('android.dir')
- if (sdkDirProp != null) {
- androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath()
- }
- }
- }
- if (androidSdkDir == null && systemProperty != null) {
- androidSdkDir = systemProperty
- }
- if (androidSdkDir == null) {
- throw new RuntimeException(
- "Unable to determine Android SDK directory.")
- }
- androidSdkDir
-}
-
-def doExtractIntFromManifest(name) {
- def manifestFile = file(android.sourceSets.main.manifest.srcFile)
- def pattern = Pattern.compile(name + "=\"(\\d+)\"")
- def matcher = pattern.matcher(manifestFile.getText())
- matcher.find()
- return Integer.parseInt(matcher.group(1))
-}
-
-def doExtractStringFromManifest(name) {
- def manifestFile = file(android.sourceSets.main.manifest.srcFile)
- def pattern = Pattern.compile(name + "=\"(\\S+)\"")
- def matcher = pattern.matcher(manifestFile.getText())
- matcher.find()
- return matcher.group(1)
-}
-
-def doPromptForPassword(msg) {
- if (System.console() == null) {
- def ret = null
- new SwingBuilder().edt {
- dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
- vbox {
- label(text: msg)
- def input = passwordField()
- button(defaultButton: true, text: 'OK', actionPerformed: {
- ret = input.password;
- dispose();
- })
- }
- }
- }
- if (!ret) {
- throw new GradleException('User canceled build')
- }
- return new String(ret)
- } else {
- return System.console().readPassword('\n' + msg);
- }
-}
-
-def doGetConfigXml() {
- def xml = file("res/xml/config.xml").getText()
- // Disable namespace awareness since Cordova doesn't use them properly
- return new XmlParser(false, false).parseText(xml)
-}
-
-def doGetConfigPreference(name, defaultValue) {
- name = name.toLowerCase()
- def root = doGetConfigXml()
-
- def ret = defaultValue
- root.preference.each { it ->
- def attrName = it.attribute("name")
- if (attrName && attrName.toLowerCase() == name) {
- ret = it.attribute("value")
- }
- }
- return ret
-}
-
-// Properties exported here are visible to all plugins.
-ext {
- // These helpers are shared, but are not guaranteed to be stable / unchanged.
- privateHelpers = {}
- privateHelpers.getProjectTarget = { doGetProjectTarget() }
- privateHelpers.findLatestInstalledBuildTools = { doFindLatestInstalledBuildTools('19.1.0') }
- privateHelpers.extractIntFromManifest = { name -> doExtractIntFromManifest(name) }
- privateHelpers.extractStringFromManifest = { name -> doExtractStringFromManifest(name) }
- privateHelpers.promptForPassword = { msg -> doPromptForPassword(msg) }
- privateHelpers.ensureValueExists = { filePath, props, key -> doEnsureValueExists(filePath, props, key) }
-
- // These helpers can be used by plugins / projects and will not change.
- cdvHelpers = {}
- // Returns a XmlParser for the config.xml. Added in 4.1.0.
- cdvHelpers.getConfigXml = { doGetConfigXml() }
- // Returns the value for the desired . Added in 4.1.0.
- cdvHelpers.getConfigPreference = { name, defaultValue -> doGetConfigPreference(name, defaultValue) }
-}
-
diff --git a/www/platforms/android/CordovaLib/project.properties b/www/platforms/android/CordovaLib/project.properties
deleted file mode 100644
index 2342a16..0000000
--- a/www/platforms/android/CordovaLib/project.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-# Indicates whether an apk should be generated for each density.
-split.density=false
-# Project target.
-target=android-23
-apk-configurations=
-renderscript.opt.level=O0
-android.library=true
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java
deleted file mode 100644
index d3a231a..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-/**
- * The Class AuthenticationToken defines the userName and password to be used for authenticating a web resource
- */
-public class AuthenticationToken {
- private String userName;
- private String password;
-
- /**
- * Gets the user name.
- *
- * @return the user name
- */
- public String getUserName() {
- return userName;
- }
-
- /**
- * Sets the user name.
- *
- * @param userName
- * the new user name
- */
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- /**
- * Gets the password.
- *
- * @return the password
- */
- public String getPassword() {
- return password;
- }
-
- /**
- * Sets the password.
- *
- * @param password
- * the new password
- */
- public void setPassword(String password) {
- this.password = password;
- }
-
-
-
-
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java
deleted file mode 100644
index 4c0d7b9..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import org.json.JSONArray;
-
-import android.util.Log;
-
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.PluginResult;
-import org.json.JSONObject;
-
-public class CallbackContext {
- private static final String LOG_TAG = "CordovaPlugin";
-
- private String callbackId;
- private CordovaWebView webView;
- protected boolean finished;
- private int changingThreads;
-
- public CallbackContext(String callbackId, CordovaWebView webView) {
- this.callbackId = callbackId;
- this.webView = webView;
- }
-
- public boolean isFinished() {
- return finished;
- }
-
- public boolean isChangingThreads() {
- return changingThreads > 0;
- }
-
- public String getCallbackId() {
- return callbackId;
- }
-
- public void sendPluginResult(PluginResult pluginResult) {
- synchronized (this) {
- if (finished) {
- Log.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());
- return;
- } else {
- finished = !pluginResult.getKeepCallback();
- }
- }
- webView.sendPluginResult(pluginResult, callbackId);
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- *
- * @param message The message to add to the success result.
- */
- public void success(JSONObject message) {
- sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- *
- * @param message The message to add to the success result.
- */
- public void success(String message) {
- sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- *
- * @param message The message to add to the success result.
- */
- public void success(JSONArray message) {
- sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- *
- * @param message The message to add to the success result.
- */
- public void success(byte[] message) {
- sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- *
- * @param message The message to add to the success result.
- */
- public void success(int message) {
- sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
- }
-
- /**
- * Helper for success callbacks that just returns the Status.OK by default
- */
- public void success() {
- sendPluginResult(new PluginResult(PluginResult.Status.OK));
- }
-
- /**
- * Helper for error callbacks that just returns the Status.ERROR by default
- *
- * @param message The message to add to the error result.
- */
- public void error(JSONObject message) {
- sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
- }
-
- /**
- * Helper for error callbacks that just returns the Status.ERROR by default
- *
- * @param message The message to add to the error result.
- */
- public void error(String message) {
- sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
- }
-
- /**
- * Helper for error callbacks that just returns the Status.ERROR by default
- *
- * @param message The message to add to the error result.
- */
- public void error(int message) {
- sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java
deleted file mode 100644
index 050daa0..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import android.util.Pair;
-import android.util.SparseArray;
-
-/**
- * Provides a collection that maps unique request codes to CordovaPlugins and Integers.
- * Used to ensure that when plugins make requests for runtime permissions, those requests do not
- * collide with requests from other plugins that use the same request code value.
- */
-public class CallbackMap {
- private int currentCallbackId = 0;
- private SparseArray> callbacks;
-
- public CallbackMap() {
- this.callbacks = new SparseArray>();
- }
-
- /**
- * Stores a CordovaPlugin and request code and returns a new unique request code to use
- * in a permission request.
- *
- * @param receiver The plugin that is making the request
- * @param requestCode The original request code used by the plugin
- * @return A unique request code that can be used to retrieve this callback
- * with getAndRemoveCallback()
- */
- public synchronized int registerCallback(CordovaPlugin receiver, int requestCode) {
- int mappedId = this.currentCallbackId++;
- callbacks.put(mappedId, new Pair(receiver, requestCode));
- return mappedId;
- }
-
- /**
- * Retrieves and removes a callback stored in the map using the mapped request code
- * obtained from registerCallback()
- *
- * @param mappedId The request code obtained from registerCallback()
- * @return The CordovaPlugin and orignal request code that correspond to the
- * given mappedCode
- */
- public synchronized Pair getAndRemoveCallback(int mappedId) {
- Pair callback = callbacks.get(mappedId);
- callbacks.remove(mappedId);
- return callback;
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/Config.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/Config.java
deleted file mode 100644
index 048960b..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/Config.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-
-package org.apache.cordova;
-
-import java.util.List;
-
-import android.app.Activity;
-import android.util.Log;
-
-@Deprecated // Use Whitelist, CordovaPrefences, etc. directly.
-public class Config {
- private static final String TAG = "Config";
-
- static ConfigXmlParser parser;
-
- private Config() {
- }
-
- public static void init(Activity action) {
- parser = new ConfigXmlParser();
- parser.parse(action);
- //TODO: Add feature to bring this back. Some preferences should be overridden by intents, but not all
- parser.getPreferences().setPreferencesBundle(action.getIntent().getExtras());
- }
-
- // Intended to be used for testing only; creates an empty configuration.
- public static void init() {
- if (parser == null) {
- parser = new ConfigXmlParser();
- }
- }
-
- public static String getStartUrl() {
- if (parser == null) {
- return "file:///android_asset/www/index.html";
- }
- return parser.getLaunchUrl();
- }
-
- public static String getErrorUrl() {
- return parser.getPreferences().getString("errorurl", null);
- }
-
- public static List getPluginEntries() {
- return parser.getPluginEntries();
- }
-
- public static CordovaPreferences getPreferences() {
- return parser.getPreferences();
- }
-
- public static boolean isInitialized() {
- return parser != null;
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java
deleted file mode 100644
index 01a97f2..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-
-package org.apache.cordova;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import android.content.Context;
-
-public class ConfigXmlParser {
- private static String TAG = "ConfigXmlParser";
-
- private String launchUrl = "file:///android_asset/www/index.html";
- private CordovaPreferences prefs = new CordovaPreferences();
- private ArrayList pluginEntries = new ArrayList(20);
-
- public CordovaPreferences getPreferences() {
- return prefs;
- }
-
- public ArrayList getPluginEntries() {
- return pluginEntries;
- }
-
- public String getLaunchUrl() {
- return launchUrl;
- }
-
- public void parse(Context action) {
- // First checking the class namespace for config.xml
- int id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName());
- if (id == 0) {
- // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml
- id = action.getResources().getIdentifier("config", "xml", action.getPackageName());
- if (id == 0) {
- LOG.e(TAG, "res/xml/config.xml is missing!");
- return;
- }
- }
- parse(action.getResources().getXml(id));
- }
-
- boolean insideFeature = false;
- String service = "", pluginClass = "", paramType = "";
- boolean onload = false;
-
- public void parse(XmlPullParser xml) {
- int eventType = -1;
-
- while (eventType != XmlPullParser.END_DOCUMENT) {
- if (eventType == XmlPullParser.START_TAG) {
- handleStartTag(xml);
- }
- else if (eventType == XmlPullParser.END_TAG)
- {
- handleEndTag(xml);
- }
- try {
- eventType = xml.next();
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- public void handleStartTag(XmlPullParser xml) {
- String strNode = xml.getName();
- if (strNode.equals("feature")) {
- //Check for supported feature sets aka. plugins (Accelerometer, Geolocation, etc)
- //Set the bit for reading params
- insideFeature = true;
- service = xml.getAttributeValue(null, "name");
- }
- else if (insideFeature && strNode.equals("param")) {
- paramType = xml.getAttributeValue(null, "name");
- if (paramType.equals("service")) // check if it is using the older service param
- service = xml.getAttributeValue(null, "value");
- else if (paramType.equals("package") || paramType.equals("android-package"))
- pluginClass = xml.getAttributeValue(null,"value");
- else if (paramType.equals("onload"))
- onload = "true".equals(xml.getAttributeValue(null, "value"));
- }
- else if (strNode.equals("preference")) {
- String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.ENGLISH);
- String value = xml.getAttributeValue(null, "value");
- prefs.set(name, value);
- }
- else if (strNode.equals("content")) {
- String src = xml.getAttributeValue(null, "src");
- if (src != null) {
- setStartUrl(src);
- }
- }
- }
-
- public void handleEndTag(XmlPullParser xml) {
- String strNode = xml.getName();
- if (strNode.equals("feature")) {
- pluginEntries.add(new PluginEntry(service, pluginClass, onload));
-
- service = "";
- pluginClass = "";
- insideFeature = false;
- onload = false;
- }
- }
-
- private void setStartUrl(String src) {
- Pattern schemeRegex = Pattern.compile("^[a-z-]+://");
- Matcher matcher = schemeRegex.matcher(src);
- if (matcher.find()) {
- launchUrl = src;
- } else {
- if (src.charAt(0) == '/') {
- src = src.substring(1);
- }
- launchUrl = "file:///android_asset/www/" + src;
- }
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java
deleted file mode 100755
index 868b243..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import java.util.ArrayList;
-import java.util.Locale;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.annotation.SuppressLint;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.Color;
-import android.media.AudioManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
-import android.webkit.WebViewClient;
-import android.widget.FrameLayout;
-
-/**
- * This class is the main Android activity that represents the Cordova
- * application. It should be extended by the user to load the specific
- * html file that contains the application.
- *
- * As an example:
- *
- *
- *
- * Cordova xml configuration: Cordova uses a configuration file at
- * res/xml/config.xml to specify its settings. See "The config.xml File"
- * guide in cordova-docs at http://cordova.apache.org/docs for the documentation
- * for the configuration. The use of the set*Property() methods is
- * deprecated in favor of the config.xml file.
- *
- */
-public class CordovaActivity extends Activity {
- public static String TAG = "CordovaActivity";
-
- // The webview for our app
- protected CordovaWebView appView;
-
- private static int ACTIVITY_STARTING = 0;
- private static int ACTIVITY_RUNNING = 1;
- private static int ACTIVITY_EXITING = 2;
-
- // Keep app running when pause is received. (default = true)
- // If true, then the JavaScript and native code continue to run in the background
- // when another application (activity) is started.
- protected boolean keepRunning = true;
-
- // Flag to keep immersive mode if set to fullscreen
- protected boolean immersiveMode;
-
- // Read from config.xml:
- protected CordovaPreferences preferences;
- protected String launchUrl;
- protected ArrayList pluginEntries;
- protected CordovaInterfaceImpl cordovaInterface;
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting");
- LOG.d(TAG, "CordovaActivity.onCreate()");
-
- // need to activate preferences before super.onCreate to avoid "requestFeature() must be called before adding content" exception
- loadConfig();
- if (!preferences.getBoolean("ShowTitle", false)) {
- getWindow().requestFeature(Window.FEATURE_NO_TITLE);
- }
-
- if (preferences.getBoolean("SetFullscreen", false)) {
- Log.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version.");
- preferences.set("Fullscreen", true);
- }
- if (preferences.getBoolean("Fullscreen", false)) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- immersiveMode = true;
- } else {
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- }
- } else {
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
- }
-
- super.onCreate(savedInstanceState);
-
- cordovaInterface = makeCordovaInterface();
- if (savedInstanceState != null) {
- cordovaInterface.restoreInstanceState(savedInstanceState);
- }
- }
-
- protected void init() {
- appView = makeWebView();
- createViews();
- if (!appView.isInitialized()) {
- appView.init(cordovaInterface, pluginEntries, preferences);
- }
- cordovaInterface.onCordovaInit(appView.getPluginManager());
-
- // Wire the hardware volume controls to control media if desired.
- String volumePref = preferences.getString("DefaultVolumeStream", "");
- if ("media".equals(volumePref.toLowerCase(Locale.ENGLISH))) {
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
- }
- }
-
- @SuppressWarnings("deprecation")
- protected void loadConfig() {
- ConfigXmlParser parser = new ConfigXmlParser();
- parser.parse(this);
- preferences = parser.getPreferences();
- preferences.setPreferencesBundle(getIntent().getExtras());
- launchUrl = parser.getLaunchUrl();
- pluginEntries = parser.getPluginEntries();
- Config.parser = parser;
- }
-
- //Suppressing warnings in AndroidStudio
- @SuppressWarnings({"deprecation", "ResourceType"})
- protected void createViews() {
- //Why are we setting a constant as the ID? This should be investigated
- appView.getView().setId(100);
- appView.getView().setLayoutParams(new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT));
-
- setContentView(appView.getView());
-
- if (preferences.contains("BackgroundColor")) {
- int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
- // Background of activity:
- appView.getView().setBackgroundColor(backgroundColor);
- }
-
- appView.getView().requestFocusFromTouch();
- }
-
- /**
- * Construct the default web view object.
- *
- * Override this to customize the webview that is used.
- */
- protected CordovaWebView makeWebView() {
- return new CordovaWebViewImpl(makeWebViewEngine());
- }
-
- protected CordovaWebViewEngine makeWebViewEngine() {
- return CordovaWebViewImpl.createEngine(this, preferences);
- }
-
- protected CordovaInterfaceImpl makeCordovaInterface() {
- return new CordovaInterfaceImpl(this) {
- @Override
- public Object onMessage(String id, Object data) {
- // Plumb this to CordovaActivity.onMessage for backwards compatibility
- return CordovaActivity.this.onMessage(id, data);
- }
- };
- }
-
- /**
- * Load the url into the webview.
- */
- public void loadUrl(String url) {
- if (appView == null) {
- init();
- }
-
- // If keepRunning
- this.keepRunning = preferences.getBoolean("KeepRunning", true);
-
- appView.loadUrlIntoView(url, true);
- }
-
- /**
- * Called when the system is about to start resuming a previous activity.
- */
- @Override
- protected void onPause() {
- super.onPause();
- LOG.d(TAG, "Paused the activity.");
-
- if (this.appView != null) {
- // CB-9382 If there is an activity that started for result and main activity is waiting for callback
- // result, we shoudn't stop WebView Javascript timers, as activity for result might be using them
- boolean keepRunning = this.keepRunning || this.cordovaInterface.activityResultCallback != null;
- this.appView.handlePause(keepRunning);
- }
- }
-
- /**
- * Called when the activity receives a new intent
- */
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- //Forward to plugins
- if (this.appView != null)
- this.appView.onNewIntent(intent);
- }
-
- /**
- * Called when the activity will start interacting with the user.
- */
- @Override
- protected void onResume() {
- super.onResume();
- LOG.d(TAG, "Resumed the activity.");
-
- if (this.appView == null) {
- return;
- }
- // Force window to have focus, so application always
- // receive user input. Workaround for some devices (Samsung Galaxy Note 3 at least)
- this.getWindow().getDecorView().requestFocus();
-
- this.appView.handleResume(this.keepRunning);
- }
-
- /**
- * Called when the activity is no longer visible to the user.
- */
- @Override
- protected void onStop() {
- super.onStop();
- LOG.d(TAG, "Stopped the activity.");
-
- if (this.appView == null) {
- return;
- }
- this.appView.handleStop();
- }
-
- /**
- * Called when the activity is becoming visible to the user.
- */
- @Override
- protected void onStart() {
- super.onStart();
- LOG.d(TAG, "Started the activity.");
-
- if (this.appView == null) {
- return;
- }
- this.appView.handleStart();
- }
-
- /**
- * The final call you receive before your activity is destroyed.
- */
- @Override
- public void onDestroy() {
- LOG.d(TAG, "CordovaActivity.onDestroy()");
- super.onDestroy();
-
- if (this.appView != null) {
- appView.handleDestroy();
- }
- }
-
- /**
- * Called when view focus is changed
- */
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (hasFocus && immersiveMode) {
- final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
-
- getWindow().getDecorView().setSystemUiVisibility(uiOptions);
- }
- }
-
- @SuppressLint("NewApi")
- @Override
- public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
- // Capture requestCode here so that it is captured in the setActivityResultCallback() case.
- cordovaInterface.setActivityResultRequestCode(requestCode);
- super.startActivityForResult(intent, requestCode, options);
- }
-
- /**
- * Called when an activity you launched exits, giving you the requestCode you started it with,
- * the resultCode it returned, and any additional data from it.
- *
- * @param requestCode The request code originally supplied to startActivityForResult(),
- * allowing you to identify who this result came from.
- * @param resultCode The integer result code returned by the child activity through its setResult().
- * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- LOG.d(TAG, "Incoming Result. Request code = " + requestCode);
- super.onActivityResult(requestCode, resultCode, intent);
- cordovaInterface.onActivityResult(requestCode, resultCode, intent);
- }
-
- /**
- * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable).
- * The errorCode parameter corresponds to one of the ERROR_* constants.
- *
- * @param errorCode The error code corresponding to an ERROR_* value.
- * @param description A String describing the error.
- * @param failingUrl The url that failed to load.
- */
- public void onReceivedError(final int errorCode, final String description, final String failingUrl) {
- final CordovaActivity me = this;
-
- // If errorUrl specified, then load it
- final String errorUrl = preferences.getString("errorUrl", null);
- if ((errorUrl != null) && (!failingUrl.equals(errorUrl)) && (appView != null)) {
- // Load URL on UI thread
- me.runOnUiThread(new Runnable() {
- public void run() {
- me.appView.showWebPage(errorUrl, false, true, null);
- }
- });
- }
- // If not, then display error dialog
- else {
- final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP);
- me.runOnUiThread(new Runnable() {
- public void run() {
- if (exit) {
- me.appView.getView().setVisibility(View.GONE);
- me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit);
- }
- }
- });
- }
- }
-
- /**
- * Display an error dialog and optionally exit application.
- */
- public void displayError(final String title, final String message, final String button, final boolean exit) {
- final CordovaActivity me = this;
- me.runOnUiThread(new Runnable() {
- public void run() {
- try {
- AlertDialog.Builder dlg = new AlertDialog.Builder(me);
- dlg.setMessage(message);
- dlg.setTitle(title);
- dlg.setCancelable(false);
- dlg.setPositiveButton(button,
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- if (exit) {
- finish();
- }
- }
- });
- dlg.create();
- dlg.show();
- } catch (Exception e) {
- finish();
- }
- }
- });
- }
-
- /*
- * Hook in Cordova for menu plugins
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if (appView != null) {
- appView.getPluginManager().postMessage("onCreateOptionsMenu", menu);
- }
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if (appView != null) {
- appView.getPluginManager().postMessage("onPrepareOptionsMenu", menu);
- }
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (appView != null) {
- appView.getPluginManager().postMessage("onOptionsItemSelected", item);
- }
- return true;
- }
-
- /**
- * Called when a message is sent to plugin.
- *
- * @param id The message id
- * @param data The message data
- * @return Object or null
- */
- public Object onMessage(String id, Object data) {
- if ("onReceivedError".equals(id)) {
- JSONObject d = (JSONObject) data;
- try {
- this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url"));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- } else if ("exit".equals(id)) {
- finish();
- }
- return null;
- }
-
- protected void onSaveInstanceState(Bundle outState) {
- cordovaInterface.onSaveInstanceState(outState);
- super.onSaveInstanceState(outState);
- }
-
- /**
- * Called by the system when the device configuration changes while your activity is running.
- *
- * @param newConfig The new device configuration
- */
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (this.appView == null) {
- return;
- }
- PluginManager pm = this.appView.getPluginManager();
- if (pm != null) {
- pm.onConfigurationChanged(newConfig);
- }
- }
-
- /**
- * Called by the system when the user grants permissions
- *
- * @param requestCode
- * @param permissions
- * @param grantResults
- */
- @Override
- public void onRequestPermissionsResult(int requestCode, String permissions[],
- int[] grantResults) {
- try
- {
- cordovaInterface.onRequestPermissionResult(requestCode, permissions, grantResults);
- }
- catch (JSONException e)
- {
- LOG.d(TAG, "JSONException: Parameters fed into the method are not valid");
- e.printStackTrace();
- }
-
- }
-
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java
deleted file mode 100644
index d40d26e..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import android.util.Base64;
-
-public class CordovaArgs {
- private JSONArray baseArgs;
-
- public CordovaArgs(JSONArray args) {
- this.baseArgs = args;
- }
-
-
- // Pass through the basics to the base args.
- public Object get(int index) throws JSONException {
- return baseArgs.get(index);
- }
-
- public boolean getBoolean(int index) throws JSONException {
- return baseArgs.getBoolean(index);
- }
-
- public double getDouble(int index) throws JSONException {
- return baseArgs.getDouble(index);
- }
-
- public int getInt(int index) throws JSONException {
- return baseArgs.getInt(index);
- }
-
- public JSONArray getJSONArray(int index) throws JSONException {
- return baseArgs.getJSONArray(index);
- }
-
- public JSONObject getJSONObject(int index) throws JSONException {
- return baseArgs.getJSONObject(index);
- }
-
- public long getLong(int index) throws JSONException {
- return baseArgs.getLong(index);
- }
-
- public String getString(int index) throws JSONException {
- return baseArgs.getString(index);
- }
-
-
- public Object opt(int index) {
- return baseArgs.opt(index);
- }
-
- public boolean optBoolean(int index) {
- return baseArgs.optBoolean(index);
- }
-
- public double optDouble(int index) {
- return baseArgs.optDouble(index);
- }
-
- public int optInt(int index) {
- return baseArgs.optInt(index);
- }
-
- public JSONArray optJSONArray(int index) {
- return baseArgs.optJSONArray(index);
- }
-
- public JSONObject optJSONObject(int index) {
- return baseArgs.optJSONObject(index);
- }
-
- public long optLong(int index) {
- return baseArgs.optLong(index);
- }
-
- public String optString(int index) {
- return baseArgs.optString(index);
- }
-
- public boolean isNull(int index) {
- return baseArgs.isNull(index);
- }
-
-
- // The interesting custom helpers.
- public byte[] getArrayBuffer(int index) throws JSONException {
- String encoded = baseArgs.getString(index);
- return Base64.decode(encoded, Base64.DEFAULT);
- }
-}
-
-
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java
deleted file mode 100644
index 7bc4a55..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import java.security.SecureRandom;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.util.Log;
-
-/**
- * Contains APIs that the JS can call. All functions in here should also have
- * an equivalent entry in CordovaChromeClient.java, and be added to
- * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
- */
-public class CordovaBridge {
- private static final String LOG_TAG = "CordovaBridge";
- private PluginManager pluginManager;
- private NativeToJsMessageQueue jsMessageQueue;
- private volatile int expectedBridgeSecret = -1; // written by UI thread, read by JS thread.
-
- public CordovaBridge(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) {
- this.pluginManager = pluginManager;
- this.jsMessageQueue = jsMessageQueue;
- }
-
- public String jsExec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException {
- if (!verifySecret("exec()", bridgeSecret)) {
- return null;
- }
- // If the arguments weren't received, send a message back to JS. It will switch bridge modes and try again. See CB-2666.
- // We send a message meant specifically for this case. It starts with "@" so no other message can be encoded into the same string.
- if (arguments == null) {
- return "@Null arguments.";
- }
-
- jsMessageQueue.setPaused(true);
- try {
- // Tell the resourceApi what thread the JS is running on.
- CordovaResourceApi.jsThread = Thread.currentThread();
-
- pluginManager.exec(service, action, callbackId, arguments);
- String ret = null;
- if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
- ret = jsMessageQueue.popAndEncode(false);
- }
- return ret;
- } catch (Throwable e) {
- e.printStackTrace();
- return "";
- } finally {
- jsMessageQueue.setPaused(false);
- }
- }
-
- public void jsSetNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException {
- if (!verifySecret("setNativeToJsBridgeMode()", bridgeSecret)) {
- return;
- }
- jsMessageQueue.setBridgeMode(value);
- }
-
- public String jsRetrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException {
- if (!verifySecret("retrieveJsMessages()", bridgeSecret)) {
- return null;
- }
- return jsMessageQueue.popAndEncode(fromOnlineEvent);
- }
-
- private boolean verifySecret(String action, int bridgeSecret) throws IllegalAccessException {
- if (!jsMessageQueue.isBridgeEnabled()) {
- if (bridgeSecret == -1) {
- Log.d(LOG_TAG, action + " call made before bridge was enabled.");
- } else {
- Log.d(LOG_TAG, "Ignoring " + action + " from previous page load.");
- }
- return false;
- }
- // Bridge secret wrong and bridge not due to it being from the previous page.
- if (expectedBridgeSecret < 0 || bridgeSecret != expectedBridgeSecret) {
- Log.e(LOG_TAG, "Bridge access attempt with wrong secret token, possibly from malicious code. Disabling exec() bridge!");
- clearBridgeSecret();
- throw new IllegalAccessException();
- }
- return true;
- }
-
- /** Called on page transitions */
- void clearBridgeSecret() {
- expectedBridgeSecret = -1;
- }
-
- public boolean isSecretEstablished() {
- return expectedBridgeSecret != -1;
- }
-
- /** Called by cordova.js to initialize the bridge. */
- int generateBridgeSecret() {
- SecureRandom randGen = new SecureRandom();
- expectedBridgeSecret = randGen.nextInt(Integer.MAX_VALUE);
- return expectedBridgeSecret;
- }
-
- public void reset() {
- jsMessageQueue.reset();
- clearBridgeSecret();
- }
-
- public String promptOnJsPrompt(String origin, String message, String defaultValue) {
- if (defaultValue != null && defaultValue.length() > 3 && defaultValue.startsWith("gap:")) {
- JSONArray array;
- try {
- array = new JSONArray(defaultValue.substring(4));
- int bridgeSecret = array.getInt(0);
- String service = array.getString(1);
- String action = array.getString(2);
- String callbackId = array.getString(3);
- String r = jsExec(bridgeSecret, service, action, callbackId, message);
- return r == null ? "" : r;
- } catch (JSONException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return "";
- }
- // Sets the native->JS bridge mode.
- else if (defaultValue != null && defaultValue.startsWith("gap_bridge_mode:")) {
- try {
- int bridgeSecret = Integer.parseInt(defaultValue.substring(16));
- jsSetNativeToJsBridgeMode(bridgeSecret, Integer.parseInt(message));
- } catch (NumberFormatException e){
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return "";
- }
- // Polling for JavaScript messages
- else if (defaultValue != null && defaultValue.startsWith("gap_poll:")) {
- int bridgeSecret = Integer.parseInt(defaultValue.substring(9));
- try {
- String r = jsRetrieveJsMessages(bridgeSecret, "1".equals(message));
- return r == null ? "" : r;
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return "";
- }
- else if (defaultValue != null && defaultValue.startsWith("gap_init:")) {
- // Protect against random iframes being able to talk through the bridge.
- // Trust only pages which the app would have been allowed to navigate to anyway.
- if (pluginManager.shouldAllowBridgeAccess(origin)) {
- // Enable the bridge
- int bridgeMode = Integer.parseInt(defaultValue.substring(9));
- jsMessageQueue.setBridgeMode(bridgeMode);
- // Tell JS the bridge secret.
- int secret = generateBridgeSecret();
- return ""+secret;
- } else {
- Log.e(LOG_TAG, "gap_init called from restricted origin: " + origin);
- }
- return "";
- }
- return null;
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java
deleted file mode 100644
index 5dd0eca..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import java.security.Principal;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-
-import android.webkit.ClientCertRequest;
-
-/**
- * Implementation of the ICordovaClientCertRequest for Android WebView.
- */
-public class CordovaClientCertRequest implements ICordovaClientCertRequest {
-
- private final ClientCertRequest request;
-
- public CordovaClientCertRequest(ClientCertRequest request) {
- this.request = request;
- }
-
- /**
- * Cancel this request
- */
- public void cancel()
- {
- request.cancel();
- }
-
- /*
- * Returns the host name of the server requesting the certificate.
- */
- public String getHost()
- {
- return request.getHost();
- }
-
- /*
- * Returns the acceptable types of asymmetric keys (can be null).
- */
- public String[] getKeyTypes()
- {
- return request.getKeyTypes();
- }
-
- /*
- * Returns the port number of the server requesting the certificate.
- */
- public int getPort()
- {
- return request.getPort();
- }
-
- /*
- * Returns the acceptable certificate issuers for the certificate matching the private key (can be null).
- */
- public Principal[] getPrincipals()
- {
- return request.getPrincipals();
- }
-
- /*
- * Ignore the request for now. Do not remember user's choice.
- */
- public void ignore()
- {
- request.ignore();
- }
-
- /*
- * Proceed with the specified private key and client certificate chain. Remember the user's positive choice and use it for future requests.
- *
- * @param privateKey The privateKey
- * @param chain The certificate chain
- */
- public void proceed(PrivateKey privateKey, X509Certificate[] chain)
- {
- request.proceed(privateKey, chain);
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java
deleted file mode 100644
index a219c99..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.view.KeyEvent;
-import android.widget.EditText;
-
-/**
- * Helper class for WebViews to implement prompt(), alert(), confirm() dialogs.
- */
-public class CordovaDialogsHelper {
- private final Context context;
- private AlertDialog lastHandledDialog;
-
- public CordovaDialogsHelper(Context context) {
- this.context = context;
- }
-
- public void showAlert(String message, final Result result) {
- AlertDialog.Builder dlg = new AlertDialog.Builder(context);
- dlg.setMessage(message);
- dlg.setTitle("Alert");
- //Don't let alerts break the back button
- dlg.setCancelable(true);
- dlg.setPositiveButton(android.R.string.ok,
- new AlertDialog.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.gotResult(true, null);
- }
- });
- dlg.setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- result.gotResult(false, null);
- }
- });
- dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
- //DO NOTHING
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK)
- {
- result.gotResult(true, null);
- return false;
- }
- else
- return true;
- }
- });
- lastHandledDialog = dlg.show();
- }
-
- public void showConfirm(String message, final Result result) {
- AlertDialog.Builder dlg = new AlertDialog.Builder(context);
- dlg.setMessage(message);
- dlg.setTitle("Confirm");
- dlg.setCancelable(true);
- dlg.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.gotResult(true, null);
- }
- });
- dlg.setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.gotResult(false, null);
- }
- });
- dlg.setOnCancelListener(
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- result.gotResult(false, null);
- }
- });
- dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
- //DO NOTHING
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK)
- {
- result.gotResult(false, null);
- return false;
- }
- else
- return true;
- }
- });
- lastHandledDialog = dlg.show();
- }
-
- /**
- * Tell the client to display a prompt dialog to the user.
- * If the client returns true, WebView will assume that the client will
- * handle the prompt dialog and call the appropriate JsPromptResult method.
- *
- * Since we are hacking prompts for our own purposes, we should not be using them for
- * this purpose, perhaps we should hack console.log to do this instead!
- */
- public void showPrompt(String message, String defaultValue, final Result result) {
- // Returning false would also show a dialog, but the default one shows the origin (ugly).
- AlertDialog.Builder dlg = new AlertDialog.Builder(context);
- dlg.setMessage(message);
- final EditText input = new EditText(context);
- if (defaultValue != null) {
- input.setText(defaultValue);
- }
- dlg.setView(input);
- dlg.setCancelable(false);
- dlg.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- String userText = input.getText().toString();
- result.gotResult(true, userText);
- }
- });
- dlg.setNegativeButton(android.R.string.cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- result.gotResult(false, null);
- }
- });
- lastHandledDialog = dlg.show();
- }
-
- public void destroyLastDialog(){
- if (lastHandledDialog != null){
- lastHandledDialog.cancel();
- }
- }
-
- public interface Result {
- public void gotResult(boolean success, String value);
- }
-}
\ No newline at end of file
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java
deleted file mode 100644
index 724381e..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import android.webkit.HttpAuthHandler;
-
-/**
- * Specifies interface for HTTP auth handler object which is used to handle auth requests and
- * specifying user credentials.
- */
-public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler {
-
- private final HttpAuthHandler handler;
-
- public CordovaHttpAuthHandler(HttpAuthHandler handler) {
- this.handler = handler;
- }
-
- /**
- * Instructs the WebView to cancel the authentication request.
- */
- public void cancel () {
- this.handler.cancel();
- }
-
- /**
- * Instructs the WebView to proceed with the authentication with the given credentials.
- *
- * @param username
- * @param password
- */
- public void proceed (String username, String password) {
- this.handler.proceed(username, password);
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java
deleted file mode 100755
index 3b8468f..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import android.app.Activity;
-import android.content.Intent;
-
-import org.apache.cordova.CordovaPlugin;
-
-import java.util.concurrent.ExecutorService;
-
-/**
- * The Activity interface that is implemented by CordovaActivity.
- * It is used to isolate plugin development, and remove dependency on entire Cordova library.
- */
-public interface CordovaInterface {
-
- /**
- * Launch an activity for which you would like a result when it finished. When this activity exits,
- * your onActivityResult() method will be called.
- *
- * @param command The command object
- * @param intent The intent to start
- * @param requestCode The request code that is passed to callback to identify the activity
- */
- abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);
-
- /**
- * Set the plugin to be called when a sub-activity exits.
- *
- * @param plugin The plugin on which onActivityResult is to be called
- */
- abstract public void setActivityResultCallback(CordovaPlugin plugin);
-
- /**
- * Get the Android activity.
- *
- * @return the Activity
- */
- public abstract Activity getActivity();
-
-
- /**
- * Called when a message is sent to plugin.
- *
- * @param id The message id
- * @param data The message data
- * @return Object or null
- */
- public Object onMessage(String id, Object data);
-
- /**
- * Returns a shared thread pool that can be used for background tasks.
- */
- public ExecutorService getThreadPool();
-
- /**
- * Sends a permission request to the activity for one permission.
- */
- public void requestPermission(CordovaPlugin plugin, int requestCode, String permission);
-
- /**
- * Sends a permission request to the activity for a group of permissions
- */
- public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions);
-
- /**
- * Check for a permission. Returns true if the permission is granted, false otherwise.
- */
- public boolean hasPermission(String permission);
-
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java
deleted file mode 100644
index db94e66..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-
-package org.apache.cordova;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.util.Log;
-import android.util.Pair;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-/**
- * Default implementation of CordovaInterface.
- */
-public class CordovaInterfaceImpl implements CordovaInterface {
- private static final String TAG = "CordovaInterfaceImpl";
- protected Activity activity;
- protected ExecutorService threadPool;
- protected PluginManager pluginManager;
-
- protected ActivityResultHolder savedResult;
- protected CallbackMap permissionResultCallbacks;
- protected CordovaPlugin activityResultCallback;
- protected String initCallbackService;
- protected int activityResultRequestCode;
- protected boolean activityWasDestroyed = false;
- protected Bundle savedPluginState;
-
- public CordovaInterfaceImpl(Activity activity) {
- this(activity, Executors.newCachedThreadPool());
- }
-
- public CordovaInterfaceImpl(Activity activity, ExecutorService threadPool) {
- this.activity = activity;
- this.threadPool = threadPool;
- this.permissionResultCallbacks = new CallbackMap();
- }
-
- @Override
- public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
- setActivityResultCallback(command);
- try {
- activity.startActivityForResult(intent, requestCode);
- } catch (RuntimeException e) { // E.g.: ActivityNotFoundException
- activityResultCallback = null;
- throw e;
- }
- }
-
- @Override
- public void setActivityResultCallback(CordovaPlugin plugin) {
- // Cancel any previously pending activity.
- if (activityResultCallback != null) {
- activityResultCallback.onActivityResult(activityResultRequestCode, Activity.RESULT_CANCELED, null);
- }
- activityResultCallback = plugin;
- }
-
- @Override
- public Activity getActivity() {
- return activity;
- }
-
- @Override
- public Object onMessage(String id, Object data) {
- if ("exit".equals(id)) {
- activity.finish();
- }
- return null;
- }
-
- @Override
- public ExecutorService getThreadPool() {
- return threadPool;
- }
-
- /**
- * Dispatches any pending onActivityResult callbacks and sends the resume event if the
- * Activity was destroyed by the OS.
- */
- public void onCordovaInit(PluginManager pluginManager) {
- this.pluginManager = pluginManager;
- if (savedResult != null) {
- onActivityResult(savedResult.requestCode, savedResult.resultCode, savedResult.intent);
- } else if(activityWasDestroyed) {
- // If there was no Activity result, we still need to send out the resume event if the
- // Activity was destroyed by the OS
- activityWasDestroyed = false;
- if(pluginManager != null)
- {
- CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
- if(appPlugin != null) {
- JSONObject obj = new JSONObject();
- try {
- obj.put("action", "resume");
- } catch (JSONException e) {
- LOG.e(TAG, "Failed to create event message", e);
- }
- appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, obj));
- }
- }
-
- }
- }
-
- /**
- * Routes the result to the awaiting plugin. Returns false if no plugin was waiting.
- */
- public boolean onActivityResult(int requestCode, int resultCode, Intent intent) {
- CordovaPlugin callback = activityResultCallback;
- if(callback == null && initCallbackService != null) {
- // The application was restarted, but had defined an initial callback
- // before being shut down.
- savedResult = new ActivityResultHolder(requestCode, resultCode, intent);
- if (pluginManager != null) {
- callback = pluginManager.getPlugin(initCallbackService);
- if(callback != null) {
- callback.onRestoreStateForActivityResult(savedPluginState.getBundle(callback.getServiceName()),
- new ResumeCallback(callback.getServiceName(), pluginManager));
- }
- }
- }
- activityResultCallback = null;
-
- if (callback != null) {
- Log.d(TAG, "Sending activity result to plugin");
- initCallbackService = null;
- savedResult = null;
- callback.onActivityResult(requestCode, resultCode, intent);
- return true;
- }
- Log.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!" : "."));
- return false;
- }
-
- /**
- * Call this from your startActivityForResult() overload. This is required to catch the case
- * where plugins use Activity.startActivityForResult() + CordovaInterface.setActivityResultCallback()
- * rather than CordovaInterface.startActivityForResult().
- */
- public void setActivityResultRequestCode(int requestCode) {
- activityResultRequestCode = requestCode;
- }
-
- /**
- * Saves parameters for startActivityForResult().
- */
- public void onSaveInstanceState(Bundle outState) {
- if (activityResultCallback != null) {
- String serviceName = activityResultCallback.getServiceName();
- outState.putString("callbackService", serviceName);
- }
- if(pluginManager != null){
- outState.putBundle("plugin", pluginManager.onSaveInstanceState());
- }
-
- }
-
- /**
- * Call this from onCreate() so that any saved startActivityForResult parameters will be restored.
- */
- public void restoreInstanceState(Bundle savedInstanceState) {
- initCallbackService = savedInstanceState.getString("callbackService");
- savedPluginState = savedInstanceState.getBundle("plugin");
- activityWasDestroyed = true;
- }
-
- private static class ActivityResultHolder {
- private int requestCode;
- private int resultCode;
- private Intent intent;
-
- public ActivityResultHolder(int requestCode, int resultCode, Intent intent) {
- this.requestCode = requestCode;
- this.resultCode = resultCode;
- this.intent = intent;
- }
- }
-
- /**
- * Called by the system when the user grants permissions
- *
- * @param requestCode
- * @param permissions
- * @param grantResults
- */
- public void onRequestPermissionResult(int requestCode, String[] permissions,
- int[] grantResults) throws JSONException {
- Pair callback = permissionResultCallbacks.getAndRemoveCallback(requestCode);
- if(callback != null) {
- callback.first.onRequestPermissionResult(callback.second, permissions, grantResults);
- }
- }
-
- public void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
- String[] permissions = new String [1];
- permissions[0] = permission;
- requestPermissions(plugin, requestCode, permissions);
- }
-
- public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions) {
- int mappedRequestCode = permissionResultCallbacks.registerCallback(plugin, requestCode);
- getActivity().requestPermissions(permissions, mappedRequestCode);
- }
-
- public boolean hasPermission(String permission)
- {
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
- {
- int result = activity.checkSelfPermission(permission);
- return PackageManager.PERMISSION_GRANTED == result;
- }
- else
- {
- return true;
- }
- }
-}
diff --git a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java b/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java
deleted file mode 100644
index 41af1db..0000000
--- a/www/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-*/
-package org.apache.cordova;
-
-import org.apache.cordova.CordovaArgs;
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.CallbackContext;
-import org.json.JSONArray;
-import org.json.JSONException;
-
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-/**
- * Plugins must extend this class and override one of the execute methods.
- */
-public class CordovaPlugin {
- public CordovaWebView webView;
- public CordovaInterface cordova;
- protected CordovaPreferences preferences;
- private String serviceName;
-
- /**
- * Call this after constructing to initialize the plugin.
- * Final because we want to be able to change args without breaking plugins.
- */
- public final void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences) {
- assert this.cordova == null;
- this.serviceName = serviceName;
- this.cordova = cordova;
- this.webView = webView;
- this.preferences = preferences;
- initialize(cordova, webView);
- pluginInitialize();
- }
-
- /**
- * Called after plugin construction and fields have been initialized.
- * Prefer to use pluginInitialize instead since there is no value in
- * having parameters on the initialize() function.
- */
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- }
-
- /**
- * Called after plugin construction and fields have been initialized.
- */
- protected void pluginInitialize() {
- }
-
- /**
- * Returns the plugin's service name (what you'd use when calling pluginManger.getPlugin())
- */
- public String getServiceName() {
- return serviceName;
- }
-
- /**
- * Executes the request.
- *
- * This method is called from the WebView thread. To do a non-trivial amount of work, use:
- * cordova.getThreadPool().execute(runnable);
- *
- * To run on the UI thread, use:
- * cordova.getActivity().runOnUiThread(runnable);
- *
- * @param action The action to execute.
- * @param rawArgs The exec() arguments in JSON form.
- * @param callbackContext The callback context used when calling back into JavaScript.
- * @return Whether the action was valid.
- */
- public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
- JSONArray args = new JSONArray(rawArgs);
- return execute(action, args, callbackContext);
- }
-
- /**
- * Executes the request.
- *
- * This method is called from the WebView thread. To do a non-trivial amount of work, use:
- * cordova.getThreadPool().execute(runnable);
- *
- * To run on the UI thread, use:
- * cordova.getActivity().runOnUiThread(runnable);
- *
- * @param action The action to execute.
- * @param args The exec() arguments.
- * @param callbackContext The callback context used when calling back into JavaScript.
- * @return Whether the action was valid.
- */
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- CordovaArgs cordovaArgs = new CordovaArgs(args);
- return execute(action, cordovaArgs, callbackContext);
- }
-
- /**
- * Executes the request.
- *
- * This method is called from the WebView thread. To do a non-trivial amount of work, use:
- * cordova.getThreadPool().execute(runnable);
- *
- * To run on the UI thread, use:
- * cordova.getActivity().runOnUiThread(runnable);
- *
- * @param action The action to execute.
- * @param args The exec() arguments, wrapped with some Cordova helpers.
- * @param callbackContext The callback context used when calling back into JavaScript.
- * @return Whether the action was valid.
- */
- public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
- return false;
- }
-
- /**
- * Called when the system is about to start resuming a previous activity.
- *
- * @param multitasking Flag indicating if multitasking is turned on for app
- */
- public void onPause(boolean multitasking) {
- }
-
- /**
- * Called when the activity will start interacting with the user.
- *
- * @param multitasking Flag indicating if multitasking is turned on for app
- */
- public void onResume(boolean multitasking) {
- }
-
- /**
- * Called when the activity is becoming visible to the user.
- */
- public void onStart() {
- }
-
- /**
- * Called when the activity is no longer visible to the user.
- */
- public void onStop() {
- }
-
- /**
- * Called when the activity receives a new intent.
- */
- public void onNewIntent(Intent intent) {
- }
-
- /**
- * The final call you receive before your activity is destroyed.
- */
- public void onDestroy() {
- }
-
- /**
- * Called when the Activity is being destroyed (e.g. if a plugin calls out to an external
- * Activity and the OS kills the CordovaActivity in the background). The plugin should save its
- * state in this method only if it is awaiting the result of an external Activity and needs
- * to preserve some information so as to handle that result; onRestoreStateForActivityResult()
- * will only be called if the plugin is the recipient of an Activity result
- *
- * @return Bundle containing the state of the plugin or null if state does not need to be saved
- */
- public Bundle onSaveInstanceState() {
- return null;
- }
-
- /**
- * Called when a plugin is the recipient of an Activity result after the CordovaActivity has
- * been destroyed. The Bundle will be the same as the one the plugin returned in
- * onSaveInstanceState()
- *
- * @param state Bundle containing the state of the plugin
- * @param callbackContext Replacement Context to return the plugin result to
- */
- public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {}
-
- /**
- * Called when a message is sent to plugin.
- *
- * @param id The message id
- * @param data The message data
- * @return Object to stop propagation or null
- */
- public Object onMessage(String id, Object data) {
- return null;
- }
-
- /**
- * Called when an activity you launched exits, giving you the requestCode you started it with,
- * the resultCode it returned, and any additional data from it.
- *
- * @param requestCode The request code originally supplied to startActivityForResult(),
- * allowing you to identify who this result came from.
- * @param resultCode The integer result code returned by the child activity through its setResult().
- * @param intent An Intent, which can return result data to the caller (various data can be
- * attached to Intent "extras").
- */
- public void onActivityResult(int requestCode, int resultCode, Intent intent) {
- }
-
- /**
- * Hook for blocking the loading of external resources.
- *
- * This will be called when the WebView's shouldInterceptRequest wants to
- * know whether to open a connection to an external resource. Return false
- * to block the request: if any plugin returns false, Cordova will block
- * the request. If all plugins return null, the default policy will be
- * enforced. If at least one plugin returns true, and no plugins return
- * false, then the request will proceed.
- *
- * Note that this only affects resource requests which are routed through
- * WebViewClient.shouldInterceptRequest, such as XMLHttpRequest requests and
- * img tag loads. WebSockets and media requests (such as