You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2013/06/28 18:00:21 UTC
[01/50] [abbrv] android commit: updated cordova.js to include proper
plugin loading
Updated Branches:
refs/heads/2.9.x c5e83b107 -> 67e97a89c
refs/heads/master 892ffc8ce -> a97487bce
updated cordova.js to include proper plugin loading
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/78dd0843
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/78dd0843
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/78dd0843
Branch: refs/heads/master
Commit: 78dd084303cb5ebbd1ba3ee953f4979cba35b730
Parents: cd9fb9b
Author: Steven Gill <st...@gmail.com>
Authored: Fri May 17 10:51:52 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Fri May 17 10:51:52 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/78dd0843/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 41628a8..9b88ae5 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-53-gbb10068
+// 2.7.0rc1-72-g6ec24b1
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-53-gbb10068';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-72-g6ec24b1';
// file: lib/scripts/require.js
var require,
@@ -6303,7 +6303,7 @@ require('cordova/channel').onNativeReady.fire();
// See plugman's plugin_loader.js for the details of this object.
// This function is only called if the really is a plugins array that isn't empty.
// Otherwise the XHR response handler will just call finishPluginLoading().
- function handlePluginsObject(modules) {
+ function handlePluginsObject(modules, path) {
// First create the callback for when all plugins are loaded.
var mapper = context.cordova.require('cordova/modulemapper');
onScriptLoadingComplete = function() {
@@ -6337,11 +6337,21 @@ require('cordova/channel').onNativeReady.fire();
// Now inject the scripts.
for (var i = 0; i < modules.length; i++) {
- injectScript(modules[i].file);
+ injectScript(path + modules[i].file);
}
}
-
+ // Find the root of the app
+ var path = '';
+ var scripts = document.getElementsByTagName('script');
+ var term = 'cordova.js';
+ for (var n = scripts.length-1; n>-1; n--) {
+ var src = scripts[n].src;
+ if (src.indexOf(term) == (src.length - term.length)) {
+ path = src.substring(0, src.length - term.length);
+ break;
+ }
+ }
// Try to XHR the cordova_plugins.json file asynchronously.
var xhr = new XMLHttpRequest();
xhr.onload = function() {
@@ -6354,7 +6364,7 @@ require('cordova/channel').onNativeReady.fire();
// obj will be undefined.
}
if (Array.isArray(obj) && obj.length > 0) {
- handlePluginsObject(obj);
+ handlePluginsObject(obj, path);
} else {
finishPluginLoading();
}
@@ -6362,8 +6372,9 @@ require('cordova/channel').onNativeReady.fire();
xhr.onerror = function() {
finishPluginLoading();
};
+ var plugins_json = path + 'cordova_plugins.json';
try { // we commented we were going to try, so let us actually try and catch
- xhr.open('GET', 'cordova_plugins.json', true); // Async
+ xhr.open('GET', plugins_json, true); // Async
xhr.send();
} catch(err){
finishPluginLoading();
[46/50] [abbrv] android commit: Fixes to the update command so it
doesn't delete anything other than build artifacts
Posted by ag...@apache.org.
Fixes to the update command so it doesn't delete anything other than build artifacts
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/fbf7f1c3
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/fbf7f1c3
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/fbf7f1c3
Branch: refs/heads/2.9.x
Commit: fbf7f1c3f99c1793706edf6e61de50e51b7845f7
Parents: 68bc57a
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jun 27 12:57:44 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Thu Jun 27 12:59:49 2013 -0700
----------------------------------------------------------------------
bin/update | 23 ++++++-----------------
1 file changed, 6 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/fbf7f1c3/bin/update
----------------------------------------------------------------------
diff --git a/bin/update b/bin/update
index 20440d4..8e7503d 100755
--- a/bin/update
+++ b/bin/update
@@ -45,10 +45,6 @@ fi
# cleanup after exit and/or on error
function on_exit {
- if [ -f "$BUILD_PATH"/framework/assets/www/cordova.js ]
- then
- rm "$BUILD_PATH"/framework/assets/www/cordova.js
- fi
if [ -f "$BUILD_PATH"/framework/cordova-$VERSION.jar ]
then
rm "$BUILD_PATH"/framework/cordova-$VERSION.jar
@@ -103,16 +99,6 @@ then
# update the cordova-android framework for the desired target
"$ANDROID_BIN" update project --target $TARGET --path "$BUILD_PATH"/framework &> /dev/null
- if [ ! -e "$BUILD_PATH"/framework/libs/commons-codec-1.7.jar ]; then
- # Use curl to get the jar (TODO: Support Apache Mirrors)
- curl -OL http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip &> /dev/null
- unzip commons-codec-1.7-bin.zip &> /dev/null
- mkdir -p "$BUILD_PATH"/framework/libs
- cp commons-codec-1.7/commons-codec-1.7.jar "$BUILD_PATH"/framework/libs
- # cleanup yo
- rm commons-codec-1.7-bin.zip && rm -rf commons-codec-1.7
- fi
-
# compile cordova.js and cordova.jar
(cd "$BUILD_PATH"/framework && ant jar &> /dev/null )
fi
@@ -128,14 +114,17 @@ else
fi
# creating cordova folder and copying run/build/log/launch scripts
-mkdir "$PROJECT_PATH"/cordova
-mkdir "$PROJECT_PATH"/cordova/lib
+if [ ! -e "$PROJECT_PATH/cordova" ]
+then
+ mkdir "$PROJECT_PATH"/cordova
+ mkdir "$PROJECT_PATH"/cordova/lib
+fi
cp "$BUILD_PATH"/bin/templates/cordova/appinfo.jar "$PROJECT_PATH"/cordova/appinfo.jar
cp "$BUILD_PATH"/bin/templates/cordova/build "$PROJECT_PATH"/cordova/build
cp "$BUILD_PATH"/bin/templates/cordova/clean "$PROJECT_PATH"/cordova/clean
cp "$BUILD_PATH"/bin/templates/cordova/log "$PROJECT_PATH"/cordova/log
cp "$BUILD_PATH"/bin/templates/cordova/run "$PROJECT_PATH"/cordova/run
-cp "$BUILD_PATH"/bin/templates/cordova/lib/cordova "$PROJECT_PATH"/cordova/lib/cordova
+cp "$BUILD_PATH"/bin/templates/cordova/lib/cordova.js "$PROJECT_PATH"/cordova/lib/cordova.js
cp "$BUILD_PATH"/bin/templates/cordova/lib/install-device "$PROJECT_PATH"/cordova/lib/install-device
cp "$BUILD_PATH"/bin/templates/cordova/lib/install-emulator "$PROJECT_PATH"/cordova/lib/install-emulator
cp "$BUILD_PATH"/bin/templates/cordova/lib/list-devices "$PROJECT_PATH"/cordova/lib/list-devices
[21/50] [abbrv] android commit: removed device.java
Posted by ag...@apache.org.
removed device.java
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/c8140bad
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/c8140bad
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/c8140bad
Branch: refs/heads/master
Commit: c8140bad19782f71f3195d494c765f916ecd00ae
Parents: 2e5b6bc
Author: Steven Gill <st...@gmail.com>
Authored: Mon Jun 17 15:27:02 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Jun 17 15:27:02 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/Device.java | 199 ----------------------
1 file changed, 199 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/c8140bad/framework/src/org/apache/cordova/Device.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Device.java b/framework/src/org/apache/cordova/Device.java
deleted file mode 100644
index b1cb2bb..0000000
--- a/framework/src/org/apache/cordova/Device.java
+++ /dev/null
@@ -1,199 +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.TimeZone;
-
-import org.apache.cordova.api.CallbackContext;
-import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.LOG;
-import org.apache.cordova.api.CordovaInterface;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-
-public class Device extends CordovaPlugin {
- public static final String TAG = "Device";
-
- public static String cordovaVersion = "dev"; // Cordova version
- public static String platform = "Android"; // Device OS
- public static String uuid; // Device UUID
-
- BroadcastReceiver telephonyReceiver = null;
-
- /**
- * Constructor.
- */
- public Device() {
- }
-
- /**
- * Sets the context of the Command. This can then be used to do things like
- * get file paths associated with the Activity.
- *
- * @param cordova The context of the main Activity.
- * @param webView The CordovaWebView Cordova is running in.
- */
- public void initialize(CordovaInterface cordova, CordovaWebView webView) {
- super.initialize(cordova, webView);
- Device.uuid = getUuid();
- this.initTelephonyReceiver();
- }
-
- /**
- * Executes the request and returns PluginResult.
- *
- * @param action The action to execute.
- * @param args JSONArry of arguments for the plugin.
- * @param callbackContext The callback id used when calling back into JavaScript.
- * @return True if the action was valid, false if not.
- */
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (action.equals("getDeviceInfo")) {
- JSONObject r = new JSONObject();
- r.put("uuid", Device.uuid);
- r.put("version", this.getOSVersion());
- r.put("platform", Device.platform);
- r.put("cordova", Device.cordovaVersion);
- r.put("model", this.getModel());
- callbackContext.success(r);
- }
- else {
- return false;
- }
- return true;
- }
-
- /**
- * Unregister receiver.
- */
- public void onDestroy() {
- this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
- }
-
- //--------------------------------------------------------------------------
- // LOCAL METHODS
- //--------------------------------------------------------------------------
-
- /**
- * Listen for telephony events: RINGING, OFFHOOK and IDLE
- * Send these events to all plugins using
- * CordovaActivity.onMessage("telephone", "ringing" | "offhook" | "idle")
- */
- private void initTelephonyReceiver() {
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
- //final CordovaInterface mycordova = this.cordova;
- this.telephonyReceiver = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context, Intent intent) {
-
- // If state has changed
- if ((intent != null) && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
- if (intent.hasExtra(TelephonyManager.EXTRA_STATE)) {
- String extraData = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
- if (extraData.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
- LOG.i(TAG, "Telephone RINGING");
- webView.postMessage("telephone", "ringing");
- }
- else if (extraData.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
- LOG.i(TAG, "Telephone OFFHOOK");
- webView.postMessage("telephone", "offhook");
- }
- else if (extraData.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
- LOG.i(TAG, "Telephone IDLE");
- webView.postMessage("telephone", "idle");
- }
- }
- }
- }
- };
-
- // Register the receiver
- this.cordova.getActivity().registerReceiver(this.telephonyReceiver, intentFilter);
- }
-
- /**
- * Get the OS name.
- *
- * @return
- */
- public String getPlatform() {
- return Device.platform;
- }
-
- /**
- * Get the device's Universally Unique Identifier (UUID).
- *
- * @return
- */
- public String getUuid() {
- String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
- return uuid;
- }
-
- /**
- * Get the Cordova version.
- *
- * @return
- */
- public String getCordovaVersion() {
- return Device.cordovaVersion;
- }
-
- public String getModel() {
- String model = android.os.Build.MODEL;
- return model;
- }
-
- public String getProductName() {
- String productname = android.os.Build.PRODUCT;
- return productname;
- }
-
- /**
- * Get the OS version.
- *
- * @return
- */
- public String getOSVersion() {
- String osversion = android.os.Build.VERSION.RELEASE;
- return osversion;
- }
-
- public String getSDKVersion() {
- @SuppressWarnings("deprecation")
- String sdkversion = android.os.Build.VERSION.SDK;
- return sdkversion;
- }
-
- public String getTimeZoneID() {
- TimeZone tz = TimeZone.getDefault();
- return (tz.getID());
- }
-
-}
[35/50] [abbrv] android commit: Remove PluginManager.exec's return
value (unused).
Posted by ag...@apache.org.
Remove PluginManager.exec's return value (unused).
It's not only not used, but when it was used was messing up the
DISABLE_EXEC_CHAINING flag.
(cherry picked from commit 9946d15f2348b8f6a23e589c8916a9410aa4b3da)
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/f78b444e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/f78b444e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/f78b444e
Branch: refs/heads/master
Commit: f78b444ed1b4b155f53bddac2d38873e66223aad
Parents: e726c0d
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jun 20 22:20:58 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jun 20 22:22:59 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/ExposedJsApi.java | 4 ++--
framework/src/org/apache/cordova/api/PluginManager.java | 12 ++++--------
2 files changed, 6 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f78b444e/framework/src/org/apache/cordova/ExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ExposedJsApi.java b/framework/src/org/apache/cordova/ExposedJsApi.java
index 7702d35..40ab1e3 100755
--- a/framework/src/org/apache/cordova/ExposedJsApi.java
+++ b/framework/src/org/apache/cordova/ExposedJsApi.java
@@ -48,9 +48,9 @@ import org.json.JSONException;
jsMessageQueue.setPaused(true);
try {
- boolean wasSync = pluginManager.exec(service, action, callbackId, arguments);
+ pluginManager.exec(service, action, callbackId, arguments);
String ret = "";
- if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING || wasSync) {
+ if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
ret = jsMessageQueue.popAndEncode();
}
return ret;
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f78b444e/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index 71fc258..e8e92f8 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -200,15 +200,14 @@ public class PluginManager {
* this is an async plugin call.
* @param rawArgs An Array literal string containing any arguments needed in the
* plugin execute method.
- * @return Whether the task completed synchronously.
*/
- public boolean exec(String service, String action, String callbackId, String rawArgs) {
+ public void exec(String service, String action, String callbackId, String rawArgs) {
CordovaPlugin plugin = this.getPlugin(service);
if (plugin == null) {
Log.d(TAG, "exec() call to unknown plugin: " + service);
PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION);
app.sendPluginResult(cr, callbackId);
- return true;
+ return;
}
try {
CallbackContext callbackContext = new CallbackContext(callbackId, app);
@@ -216,19 +215,16 @@ public class PluginManager {
if (!wasValidAction) {
PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION);
app.sendPluginResult(cr, callbackId);
- return true;
}
- return callbackContext.isFinished();
} catch (JSONException e) {
PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
app.sendPluginResult(cr, callbackId);
- return true;
}
}
@Deprecated
- public boolean exec(String service, String action, String callbackId, String jsonArgs, boolean async) {
- return exec(service, action, callbackId, jsonArgs);
+ public void exec(String service, String action, String callbackId, String jsonArgs, boolean async) {
+ exec(service, action, callbackId, jsonArgs);
}
/**
[37/50] [abbrv] android commit: [CB-3927] Fix start-up race condition
that could cause exec() responses to be dropped.
Posted by ag...@apache.org.
[CB-3927] Fix start-up race condition that could cause exec() responses to be dropped.
Requires a change to the JS as well.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/9cb14838
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/9cb14838
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/9cb14838
Branch: refs/heads/2.9.x
Commit: 9cb14838e8554ed2d28d317b37f76685fa76432e
Parents: 6fe66ad
Author: Jeffrey Willms <jb...@google.com>
Authored: Fri Jun 21 18:30:50 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Jun 21 18:30:50 2013 -0400
----------------------------------------------------------------------
.../src/org/apache/cordova/api/PluginEntry.java | 13 ++++++
.../org/apache/cordova/api/PluginManager.java | 49 +++++++++++++++++++-
2 files changed, 60 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9cb14838/framework/src/org/apache/cordova/api/PluginEntry.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginEntry.java b/framework/src/org/apache/cordova/api/PluginEntry.java
index 9b9af6b..f66dcda 100755
--- a/framework/src/org/apache/cordova/api/PluginEntry.java
+++ b/framework/src/org/apache/cordova/api/PluginEntry.java
@@ -64,6 +64,19 @@ public class PluginEntry {
}
/**
+ * Alternate constructor
+ *
+ * @param service The name of the service
+ * @param plugin The plugin associated with this entry
+ */
+ public PluginEntry(String service, CordovaPlugin plugin) {
+ this.service = service;
+ this.plugin = plugin;
+ this.pluginClass = plugin.getClass().getName();
+ this.onload = false;
+ }
+
+ /**
* Create plugin object.
* If plugin is already created, then just return it.
*
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9cb14838/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index adaec90..0a42b3a 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -22,7 +22,9 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaWebView;
import org.json.JSONException;
import org.xmlpull.v1.XmlPullParserException;
@@ -55,6 +57,8 @@ public class PluginManager {
// This would allow how all URLs are handled to be offloaded to a plugin
protected HashMap<String, String> urlMap = new HashMap<String, String>();
+ private AtomicInteger numPendingUiExecs;
+
/**
* Constructor.
*
@@ -65,6 +69,7 @@ public class PluginManager {
this.ctx = ctx;
this.app = app;
this.firstRun = true;
+ this.numPendingUiExecs = new AtomicInteger(0);
}
/**
@@ -86,6 +91,9 @@ public class PluginManager {
this.clearPluginObjects();
}
+ // Insert PluginManager service
+ this.addService(new PluginEntry("PluginManager", new PluginManagerService()));
+
// Start up all plugins that have onload specified
this.startupPlugins();
}
@@ -201,8 +209,23 @@ public class PluginManager {
* @param rawArgs An Array literal string containing any arguments needed in the
* plugin execute method.
*/
- public void exec(String service, String action, String callbackId, String rawArgs) {
- CordovaPlugin plugin = this.getPlugin(service);
+ public void exec(final String service, final String action, final String callbackId, final String rawArgs) {
+ if (numPendingUiExecs.get() > 0) {
+ numPendingUiExecs.getAndIncrement();
+ this.ctx.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ execHelper(service, action, callbackId, rawArgs);
+ numPendingUiExecs.getAndDecrement();
+ }
+ });
+ } else {
+ Log.d(TAG, "running exec normally");
+ execHelper(service, action, callbackId, rawArgs);
+ }
+ }
+
+ private void execHelper(final String service, final String action, final String callbackId, final String rawArgs) {
+ CordovaPlugin plugin = getPlugin(service);
if (plugin == null) {
Log.d(TAG, "exec() call to unknown plugin: " + service);
PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION);
@@ -396,4 +419,26 @@ public class PluginManager {
LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml");
LOG.e(TAG, "=====================================================================================");
}
+
+ private class PluginManagerService extends CordovaPlugin {
+ @Override
+ public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
+ if ("startup".equals(action)) {
+ // The onPageStarted event of CordovaWebViewClient resets the queue of messages to be returned to javascript in response
+ // to exec calls. Since this event occurs on the UI thread and exec calls happen on the WebCore thread it is possible
+ // that onPageStarted occurs after exec calls have started happening on a new page, which can cause the message queue
+ // to be reset between the queuing of a new message and its retrieval by javascript. To avoid this from happening,
+ // javascript always sends a "startup" exec upon loading a new page which causes all future exec calls to happen on the UI
+ // thread (and hence after onPageStarted) until there are no more pending exec calls remaining.
+ numPendingUiExecs.getAndIncrement();
+ ctx.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ numPendingUiExecs.getAndDecrement();
+ }
+ });
+ return true;
+ }
+ return false;
+ }
+ }
}
[45/50] [abbrv] android commit: Remove accidentally checked in log
statement "running exec normally" (cherry picked from commit
68bc57ae85287d1425f162f0f50f571f3302b259)
Posted by ag...@apache.org.
Remove accidentally checked in log statement "running exec normally"
(cherry picked from commit 68bc57ae85287d1425f162f0f50f571f3302b259)
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/3b7e0504
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/3b7e0504
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/3b7e0504
Branch: refs/heads/master
Commit: 3b7e0504e8a1f6d1aa197cdcbb03e5c9278e848b
Parents: f42e5f6
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Jun 26 14:22:41 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Jun 26 14:23:50 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/api/PluginManager.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/3b7e0504/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index e565c4f..7d43443 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -219,7 +219,6 @@ public class PluginManager {
}
});
} else {
- Log.d(TAG, "running exec normally");
execHelper(service, action, callbackId, rawArgs);
}
}
[14/50] [abbrv] android commit: Made some functions in
DirectoryManager public
Posted by ag...@apache.org.
Made some functions in DirectoryManager public
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/92881582
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/92881582
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/92881582
Branch: refs/heads/master
Commit: 9288158226df497547d9a0506125b227909dfaf3
Parents: 3a55991
Author: Tim Kim <ti...@adobe.com>
Authored: Thu Jun 13 15:24:01 2013 -0700
Committer: Tim Kim <ti...@adobe.com>
Committed: Thu Jun 13 15:24:01 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/DirectoryManager.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/92881582/framework/src/org/apache/cordova/DirectoryManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/DirectoryManager.java b/framework/src/org/apache/cordova/DirectoryManager.java
index 0c86f0f..89c66bc 100644
--- a/framework/src/org/apache/cordova/DirectoryManager.java
+++ b/framework/src/org/apache/cordova/DirectoryManager.java
@@ -40,7 +40,7 @@ public class DirectoryManager {
* @param name The name of the file to check.
* @return T=exists, F=not found
*/
- protected static boolean testFileExists(String name) {
+ public static boolean testFileExists(String name) {
boolean status;
// If SD card exists
@@ -61,7 +61,7 @@ public class DirectoryManager {
*
* @return Size in KB or -1 if not available
*/
- protected static long getFreeDiskSpace(boolean checkInternal) {
+ public static long getFreeDiskSpace(boolean checkInternal) {
String status = Environment.getExternalStorageState();
long freeSpace = 0;
@@ -98,7 +98,7 @@ public class DirectoryManager {
*
* @return T=exists, F=not found
*/
- protected static boolean testSaveLocationExists() {
+ public static boolean testSaveLocationExists() {
String sDCardStatus = Environment.getExternalStorageState();
boolean status;
[32/50] [abbrv] android commit: CB-3854: Added support for wildcard.
This probably could be improved, but it does work
Posted by ag...@apache.org.
CB-3854: Added support for wildcard. This probably could be improved, but it does work
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/01d6ae55
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/01d6ae55
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/01d6ae55
Branch: refs/heads/2.9.x
Commit: 01d6ae55a4faa6fd4200df25a0d64ff6e178cb54
Parents: f1b377b
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jun 20 16:33:14 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Thu Jun 20 16:33:14 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/Config.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/01d6ae55/framework/src/org/apache/cordova/Config.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Config.java b/framework/src/org/apache/cordova/Config.java
index a10ed81..6a041cf 100644
--- a/framework/src/org/apache/cordova/Config.java
+++ b/framework/src/org/apache/cordova/Config.java
@@ -214,7 +214,6 @@ public class Config {
{
origin = origin.split("//")[1];
}
- origin.matches("\\*\\.[a-z]+\\.[a-z]+");
return origin.startsWith("*");
}
[44/50] [abbrv] android commit: Remove accidentally checked in log
statement "running exec normally"
Posted by ag...@apache.org.
Remove accidentally checked in log statement "running exec normally"
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/68bc57ae
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/68bc57ae
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/68bc57ae
Branch: refs/heads/2.9.x
Commit: 68bc57ae85287d1425f162f0f50f571f3302b259
Parents: 10d31ea
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Jun 26 14:22:41 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Jun 26 14:22:41 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/api/PluginManager.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/68bc57ae/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index 0a42b3a..e392dfa 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -219,7 +219,6 @@ public class PluginManager {
}
});
} else {
- Log.d(TAG, "running exec normally");
execHelper(service, action, callbackId, rawArgs);
}
}
[17/50] [abbrv] android commit: removed vibration permission
Posted by ag...@apache.org.
removed vibration permission
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/dd837f71
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/dd837f71
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/dd837f71
Branch: refs/heads/master
Commit: dd837f7130bf0ab19e714089013adc6d41812ec2
Parents: 12ebadb
Author: hermwong <he...@gmail.com>
Authored: Thu Jun 13 16:31:27 2013 -0700
Committer: hermwong <he...@gmail.com>
Committed: Thu Jun 13 16:31:27 2013 -0700
----------------------------------------------------------------------
framework/AndroidManifest.xml | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/dd837f71/framework/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/framework/AndroidManifest.xml b/framework/AndroidManifest.xml
index 2b3c9c6..063584d 100755
--- a/framework/AndroidManifest.xml
+++ b/framework/AndroidManifest.xml
@@ -28,7 +28,6 @@
/>
<!-- android:xlargeScreens="true" screen supported only after Android-9 -->
- <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
[18/50] [abbrv] android commit: removed file system access permission
Posted by ag...@apache.org.
removed file system access permission
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/d8457369
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/d8457369
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/d8457369
Branch: refs/heads/master
Commit: d84573694803ce3da41e03cfcd3895341fc30020
Parents: dd837f7
Author: hermwong <he...@gmail.com>
Authored: Thu Jun 13 16:59:54 2013 -0700
Committer: hermwong <he...@gmail.com>
Committed: Thu Jun 13 16:59:54 2013 -0700
----------------------------------------------------------------------
framework/AndroidManifest.xml | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/d8457369/framework/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/framework/AndroidManifest.xml b/framework/AndroidManifest.xml
index 063584d..e2bd1c2 100755
--- a/framework/AndroidManifest.xml
+++ b/framework/AndroidManifest.xml
@@ -37,7 +37,6 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
[22/50] [abbrv] android commit: updated js from latest cordova-js 3.0
Posted by ag...@apache.org.
updated js from latest cordova-js 3.0
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/63ab7016
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/63ab7016
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/63ab7016
Branch: refs/heads/master
Commit: 63ab701685d1a664ac38102fbbe2b6f9d877def3
Parents: c8140ba
Author: Fil Maj <ma...@gmail.com>
Authored: Mon Jun 17 16:53:04 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon Jun 17 16:53:04 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 126 +----------------------------------
1 file changed, 2 insertions(+), 124 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/63ab7016/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 1a29601..40a9ea3 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-117-g208b97a
+// 2.7.0rc1-120-g8731b31
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-117-g208b97a';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-120-g8731b31';
// file: lib/scripts/require.js
var require,
@@ -524,8 +524,6 @@ var utils = require('cordova/utils'),
* onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed.
* onNativeReady* Internal event that indicates the Cordova native side is ready.
* onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created.
- * onCordovaInfoReady* Internal event fired when device properties are available.
- * onCordovaConnectionReady* Internal event fired when the connection property has been set.
* onDeviceReady* User event fired to indicate that Cordova is ready
* onResume User event fired to indicate a start/resume lifecycle event
* onPause User event fired to indicate a pause lifecycle event
@@ -728,9 +726,6 @@ channel.createSticky('onNativeReady');
// and it's time to run plugin constructors.
channel.createSticky('onCordovaReady');
-// Event to indicate that device properties are available
-channel.createSticky('onCordovaInfoReady');
-
// Event to indicate that all automatically loaded JS plugins are loaded and ready.
channel.createSticky('onPluginsReady');
@@ -3134,51 +3129,6 @@ module.exports = {
});
-// file: lib/android/plugin/android/device.js
-define("cordova/plugin/android/device", function(require, exports, module) {
-
-var channel = require('cordova/channel'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- app = require('cordova/plugin/android/app');
-
-module.exports = {
- /*
- * DEPRECATED
- * This is only for Android.
- *
- * You must explicitly override the back button.
- */
- overrideBackButton:function() {
- console.log("Device.overrideBackButton() is deprecated. Use App.overrideBackbutton(true).");
- app.overrideBackbutton(true);
- },
-
- /*
- * DEPRECATED
- * This is only for Android.
- *
- * This resets the back button to the default behavior
- */
- resetBackButton:function() {
- console.log("Device.resetBackButton() is deprecated. Use App.overrideBackbutton(false).");
- app.overrideBackbutton(false);
- },
-
- /*
- * DEPRECATED
- * This is only for Android.
- *
- * This terminates the activity!
- */
- exitApp:function() {
- console.log("Device.exitApp() is deprecated. Use App.exitApp().");
- app.exitApp();
- }
-};
-
-});
-
// file: lib/android/plugin/android/nativeapiprovider.js
define("cordova/plugin/android/nativeapiprovider", function(require, exports, module) {
@@ -3830,78 +3780,6 @@ for (var key in console) {
});
-// file: lib/common/plugin/device.js
-define("cordova/plugin/device", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- channel = require('cordova/channel'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
-
-// Tell cordova channel to wait on the CordovaInfoReady event
-channel.waitForInitialization('onCordovaInfoReady');
-
-/**
- * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
- * phone, etc.
- * @constructor
- */
-function Device() {
- this.available = false;
- this.platform = null;
- this.version = null;
- this.uuid = null;
- this.cordova = null;
- this.model = null;
-
- var me = this;
-
- channel.onCordovaReady.subscribe(function() {
- me.getInfo(function(info) {
- var buildLabel = info.cordova;
- if (buildLabel != CORDOVA_JS_BUILD_LABEL) {
- buildLabel += ' JS=' + CORDOVA_JS_BUILD_LABEL;
- }
- me.available = true;
- me.platform = info.platform;
- me.version = info.version;
- me.uuid = info.uuid;
- me.cordova = buildLabel;
- me.model = info.model;
- channel.onCordovaInfoReady.fire();
- },function(e) {
- me.available = false;
- utils.alert("[ERROR] Error initializing Cordova: " + e);
- });
- });
-}
-
-/**
- * Get device info
- *
- * @param {Function} successCallback The function to call when the heading data is available
- * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
- */
-Device.prototype.getInfo = function(successCallback, errorCallback) {
- argscheck.checkArgs('fF', 'Device.getInfo', arguments);
- exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
-};
-
-module.exports = new Device();
-
-});
-
-// file: lib/android/plugin/device/symbols.js
-define("cordova/plugin/device/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/device', 'device');
-modulemapper.merges('cordova/plugin/android/device', 'device');
-
-});
-
// file: lib/common/plugin/echo.js
define("cordova/plugin/echo", function(require, exports, module) {
[40/50] [abbrv] android commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/cordova-android
Posted by ag...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/7e15ff93
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/7e15ff93
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/7e15ff93
Branch: refs/heads/2.9.x
Commit: 7e15ff930d7520b74a5e91f99b71d0e12be2d27e
Parents: b83610a 9cb1483
Author: Joe Bowser <bo...@apache.org>
Authored: Mon Jun 24 11:31:47 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Mon Jun 24 11:31:47 2013 -0700
----------------------------------------------------------------------
bin/templates/cordova/run | 2 +-
.../src/org/apache/cordova/ExposedJsApi.java | 4 +-
.../src/org/apache/cordova/api/PluginEntry.java | 13 +++++
.../org/apache/cordova/api/PluginManager.java | 59 +++++++++++++++++---
4 files changed, 66 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
[06/50] [abbrv] android commit: removed splashscreen code from
cordova.js
Posted by ag...@apache.org.
removed splashscreen code from cordova.js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/f7c97cb1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/f7c97cb1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/f7c97cb1
Branch: refs/heads/master
Commit: f7c97cb1d0a153d27c85ae9f79eb8fd2785bebe2
Parents: 7c22bc7
Author: Steven Gill <st...@gmail.com>
Authored: Tue May 21 13:04:40 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Tue May 21 13:04:40 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 32 ++------------------------------
1 file changed, 2 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f7c97cb1/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 8202173..53fa353 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-81-gc09114e
+// 2.7.0rc1-82-g32587e6
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-81-gc09114e';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-82-g32587e6';
// file: lib/scripts/require.js
var require,
@@ -5546,34 +5546,6 @@ module.exports = function(uri, successCallback, errorCallback) {
});
-// file: lib/common/plugin/splashscreen.js
-define("cordova/plugin/splashscreen", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-var splashscreen = {
- show:function() {
- exec(null, null, "SplashScreen", "show", []);
- },
- hide:function() {
- exec(null, null, "SplashScreen", "hide", []);
- }
-};
-
-module.exports = splashscreen;
-
-});
-
-// file: lib/common/plugin/splashscreen/symbols.js
-define("cordova/plugin/splashscreen/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/splashscreen', 'navigator.splashscreen');
-
-});
-
// file: lib/common/symbols.js
define("cordova/symbols", function(require, exports, module) {
[12/50] [abbrv] android commit: updated directory manager
Posted by ag...@apache.org.
updated directory manager
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/9e44596d
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/9e44596d
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/9e44596d
Branch: refs/heads/master
Commit: 9e44596db72460555593d699ba67aed26005ccd8
Parents: 9aaa152
Author: Steven Gill <st...@gmail.com>
Authored: Thu Jun 13 14:39:08 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu Jun 13 14:39:08 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 1498 +-----------------
.../org/apache/cordova/DirectoryManager.java | 2 +-
2 files changed, 6 insertions(+), 1494 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9e44596d/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index aece2e6..8973d5f 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-84-g62c5786
+// 2.7.0rc1-100-g6a53312
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-84-g62c5786';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-100-g6a53312';
// file: lib/scripts/require.js
var require,
@@ -1159,156 +1159,6 @@ module.exports = {
});
-// file: lib/common/plugin/Acceleration.js
-define("cordova/plugin/Acceleration", function(require, exports, module) {
-
-var Acceleration = function(x, y, z, timestamp) {
- this.x = x;
- this.y = y;
- this.z = z;
- this.timestamp = timestamp || (new Date()).getTime();
-};
-
-module.exports = Acceleration;
-
-});
-
-// file: lib/common/plugin/Camera.js
-define("cordova/plugin/Camera", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- Camera = require('cordova/plugin/CameraConstants'),
- CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle');
-
-var cameraExport = {};
-
-// Tack on the Camera Constants to the base camera plugin.
-for (var key in Camera) {
- cameraExport[key] = Camera[key];
-}
-
-/**
- * Gets a picture from source defined by "options.sourceType", and returns the
- * image as defined by the "options.destinationType" option.
-
- * The defaults are sourceType=CAMERA and destinationType=FILE_URI.
- *
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-cameraExport.getPicture = function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'Camera.getPicture', arguments);
- options = options || {};
- var getValue = argscheck.getValue;
-
- var quality = getValue(options.quality, 50);
- var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI);
- var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA);
- var targetWidth = getValue(options.targetWidth, -1);
- var targetHeight = getValue(options.targetHeight, -1);
- var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG);
- var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE);
- var allowEdit = !!options.allowEdit;
- var correctOrientation = !!options.correctOrientation;
- var saveToPhotoAlbum = !!options.saveToPhotoAlbum;
- var popoverOptions = getValue(options.popoverOptions, null);
- var cameraDirection = getValue(options.cameraDirection, Camera.Direction.BACK);
-
- var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType,
- mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions, cameraDirection];
-
- exec(successCallback, errorCallback, "Camera", "takePicture", args);
- return new CameraPopoverHandle();
-};
-
-cameraExport.cleanup = function(successCallback, errorCallback) {
- exec(successCallback, errorCallback, "Camera", "cleanup", []);
-};
-
-module.exports = cameraExport;
-
-});
-
-// file: lib/common/plugin/CameraConstants.js
-define("cordova/plugin/CameraConstants", function(require, exports, module) {
-
-module.exports = {
- DestinationType:{
- DATA_URL: 0, // Return base64 encoded string
- FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android)
- NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS)
- },
- EncodingType:{
- JPEG: 0, // Return JPEG encoded image
- PNG: 1 // Return PNG encoded image
- },
- MediaType:{
- PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType
- VIDEO: 1, // allow selection of video only, ONLY RETURNS URL
- ALLMEDIA : 2 // allow selection from all media types
- },
- PictureSourceType:{
- PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android)
- CAMERA : 1, // Take picture from camera
- SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android)
- },
- PopoverArrowDirection:{
- ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover
- ARROW_DOWN : 2,
- ARROW_LEFT : 4,
- ARROW_RIGHT : 8,
- ARROW_ANY : 15
- },
- Direction:{
- BACK: 0,
- FRONT: 1
- }
-};
-
-});
-
-// file: lib/common/plugin/CameraPopoverHandle.js
-define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * A handle to an image picker popover.
- */
-var CameraPopoverHandle = function() {
- this.setPosition = function(popoverOptions) {
- console.log('CameraPopoverHandle.setPosition is only supported on iOS.');
- };
-};
-
-module.exports = CameraPopoverHandle;
-
-});
-
-// file: lib/common/plugin/CameraPopoverOptions.js
-define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) {
-
-var Camera = require('cordova/plugin/CameraConstants');
-
-/**
- * Encapsulates options for iOS Popover image picker
- */
-var CameraPopoverOptions = function(x,y,width,height,arrowDir){
- // information of rectangle that popover should be anchored to
- this.x = x || 0;
- this.y = y || 32;
- this.width = width || 320;
- this.height = height || 480;
- // The direction of the popover arrow
- this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY;
-};
-
-module.exports = CameraPopoverOptions;
-
-});
-
// file: lib/common/plugin/CaptureAudioOptions.js
define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
@@ -1383,39 +1233,6 @@ module.exports = CaptureVideoOptions;
});
-// file: lib/common/plugin/CompassError.js
-define("cordova/plugin/CompassError", function(require, exports, module) {
-
-/**
- * CompassError.
- * An error code assigned by an implementation when an error has occurred
- * @constructor
- */
-var CompassError = function(err) {
- this.code = (err !== undefined ? err : null);
-};
-
-CompassError.COMPASS_INTERNAL_ERR = 0;
-CompassError.COMPASS_NOT_SUPPORTED = 20;
-
-module.exports = CompassError;
-
-});
-
-// file: lib/common/plugin/CompassHeading.js
-define("cordova/plugin/CompassHeading", function(require, exports, module) {
-
-var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) {
- this.magneticHeading = magneticHeading;
- this.trueHeading = trueHeading;
- this.headingAccuracy = headingAccuracy;
- this.timestamp = timestamp || new Date().getTime();
-};
-
-module.exports = CompassHeading;
-
-});
-
// file: lib/common/plugin/ConfigurationData.js
define("cordova/plugin/ConfigurationData", function(require, exports, module) {
@@ -1456,322 +1273,6 @@ module.exports = {
});
-// file: lib/common/plugin/Contact.js
-define("cordova/plugin/Contact", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils');
-
-/**
-* Converts primitives into Complex Object
-* Currently only used for Date fields
-*/
-function convertIn(contact) {
- var value = contact.birthday;
- try {
- contact.birthday = new Date(parseFloat(value));
- } catch (exception){
- console.log("Cordova Contact convertIn error: exception creating date.");
- }
- return contact;
-}
-
-/**
-* Converts Complex objects into primitives
-* Only conversion at present is for Dates.
-**/
-
-function convertOut(contact) {
- var value = contact.birthday;
- if (value !== null) {
- // try to make it a Date object if it is not already
- if (!utils.isDate(value)){
- try {
- value = new Date(value);
- } catch(exception){
- value = null;
- }
- }
- if (utils.isDate(value)){
- value = value.valueOf(); // convert to milliseconds
- }
- contact.birthday = value;
- }
- return contact;
-}
-
-/**
-* Contains information about a single contact.
-* @constructor
-* @param {DOMString} id unique identifier
-* @param {DOMString} displayName
-* @param {ContactName} name
-* @param {DOMString} nickname
-* @param {Array.<ContactField>} phoneNumbers array of phone numbers
-* @param {Array.<ContactField>} emails array of email addresses
-* @param {Array.<ContactAddress>} addresses array of addresses
-* @param {Array.<ContactField>} ims instant messaging user ids
-* @param {Array.<ContactOrganization>} organizations
-* @param {DOMString} birthday contact's birthday
-* @param {DOMString} note user notes about contact
-* @param {Array.<ContactField>} photos
-* @param {Array.<ContactField>} categories
-* @param {Array.<ContactField>} urls contact's web sites
-*/
-var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses,
- ims, organizations, birthday, note, photos, categories, urls) {
- this.id = id || null;
- this.rawId = null;
- this.displayName = displayName || null;
- this.name = name || null; // ContactName
- this.nickname = nickname || null;
- this.phoneNumbers = phoneNumbers || null; // ContactField[]
- this.emails = emails || null; // ContactField[]
- this.addresses = addresses || null; // ContactAddress[]
- this.ims = ims || null; // ContactField[]
- this.organizations = organizations || null; // ContactOrganization[]
- this.birthday = birthday || null;
- this.note = note || null;
- this.photos = photos || null; // ContactField[]
- this.categories = categories || null; // ContactField[]
- this.urls = urls || null; // ContactField[]
-};
-
-/**
-* Removes contact from device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.remove = function(successCB, errorCB) {
- argscheck.checkArgs('FF', 'Contact.remove', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- if (this.id === null) {
- fail(ContactError.UNKNOWN_ERROR);
- }
- else {
- exec(successCB, fail, "Contacts", "remove", [this.id]);
- }
-};
-
-/**
-* Creates a deep copy of this Contact.
-* With the contact ID set to null.
-* @return copy of this Contact
-*/
-Contact.prototype.clone = function() {
- var clonedContact = utils.clone(this);
- clonedContact.id = null;
- clonedContact.rawId = null;
-
- function nullIds(arr) {
- if (arr) {
- for (var i = 0; i < arr.length; ++i) {
- arr[i].id = null;
- }
- }
- }
-
- // Loop through and clear out any id's in phones, emails, etc.
- nullIds(clonedContact.phoneNumbers);
- nullIds(clonedContact.emails);
- nullIds(clonedContact.addresses);
- nullIds(clonedContact.ims);
- nullIds(clonedContact.organizations);
- nullIds(clonedContact.categories);
- nullIds(clonedContact.photos);
- nullIds(clonedContact.urls);
- return clonedContact;
-};
-
-/**
-* Persists contact to device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.save = function(successCB, errorCB) {
- argscheck.checkArgs('FFO', 'Contact.save', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- var success = function(result) {
- if (result) {
- if (successCB) {
- var fullContact = require('cordova/plugin/contacts').create(result);
- successCB(convertIn(fullContact));
- }
- }
- else {
- // no Entry object returned
- fail(ContactError.UNKNOWN_ERROR);
- }
- };
- var dupContact = convertOut(utils.clone(this));
- exec(success, fail, "Contacts", "save", [dupContact]);
-};
-
-
-module.exports = Contact;
-
-});
-
-// file: lib/common/plugin/ContactAddress.js
-define("cordova/plugin/ContactAddress", function(require, exports, module) {
-
-/**
-* Contact address.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code
-* @param formatted // NOTE: not a W3C standard
-* @param streetAddress
-* @param locality
-* @param region
-* @param postalCode
-* @param country
-*/
-
-var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.formatted = formatted || null;
- this.streetAddress = streetAddress || null;
- this.locality = locality || null;
- this.region = region || null;
- this.postalCode = postalCode || null;
- this.country = country || null;
-};
-
-module.exports = ContactAddress;
-
-});
-
-// file: lib/common/plugin/ContactError.js
-define("cordova/plugin/ContactError", function(require, exports, module) {
-
-/**
- * ContactError.
- * An error code assigned by an implementation when an error has occurred
- * @constructor
- */
-var ContactError = function(err) {
- this.code = (typeof err != 'undefined' ? err : null);
-};
-
-/**
- * Error codes
- */
-ContactError.UNKNOWN_ERROR = 0;
-ContactError.INVALID_ARGUMENT_ERROR = 1;
-ContactError.TIMEOUT_ERROR = 2;
-ContactError.PENDING_OPERATION_ERROR = 3;
-ContactError.IO_ERROR = 4;
-ContactError.NOT_SUPPORTED_ERROR = 5;
-ContactError.PERMISSION_DENIED_ERROR = 20;
-
-module.exports = ContactError;
-
-});
-
-// file: lib/common/plugin/ContactField.js
-define("cordova/plugin/ContactField", function(require, exports, module) {
-
-/**
-* Generic contact field.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param type
-* @param value
-* @param pref
-*/
-var ContactField = function(type, value, pref) {
- this.id = null;
- this.type = (type && type.toString()) || null;
- this.value = (value && value.toString()) || null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
-};
-
-module.exports = ContactField;
-
-});
-
-// file: lib/common/plugin/ContactFindOptions.js
-define("cordova/plugin/ContactFindOptions", function(require, exports, module) {
-
-/**
- * ContactFindOptions.
- * @constructor
- * @param filter used to match contacts against
- * @param multiple boolean used to determine if more than one contact should be returned
- */
-
-var ContactFindOptions = function(filter, multiple) {
- this.filter = filter || '';
- this.multiple = (typeof multiple != 'undefined' ? multiple : false);
-};
-
-module.exports = ContactFindOptions;
-
-});
-
-// file: lib/common/plugin/ContactName.js
-define("cordova/plugin/ContactName", function(require, exports, module) {
-
-/**
-* Contact name.
-* @constructor
-* @param formatted // NOTE: not part of W3C standard
-* @param familyName
-* @param givenName
-* @param middle
-* @param prefix
-* @param suffix
-*/
-var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) {
- this.formatted = formatted || null;
- this.familyName = familyName || null;
- this.givenName = givenName || null;
- this.middleName = middle || null;
- this.honorificPrefix = prefix || null;
- this.honorificSuffix = suffix || null;
-};
-
-module.exports = ContactName;
-
-});
-
-// file: lib/common/plugin/ContactOrganization.js
-define("cordova/plugin/ContactOrganization", function(require, exports, module) {
-
-/**
-* Contact organization.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param name
-* @param dept
-* @param title
-* @param startDate
-* @param endDate
-* @param location
-* @param desc
-*/
-
-var ContactOrganization = function(pref, type, name, dept, title) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.name = name || null;
- this.department = dept || null;
- this.title = title || null;
-};
-
-module.exports = ContactOrganization;
-
-});
-
// file: lib/common/plugin/Coordinates.js
define("cordova/plugin/Coordinates", function(require, exports, module) {
@@ -3288,85 +2789,6 @@ module.exports = GlobalizationError;
});
-// file: lib/common/plugin/InAppBrowser.js
-define("cordova/plugin/InAppBrowser", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
-
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event.type in this.channels) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- show: function (eventname) {
- exec(null, null, "InAppBrowser", "show", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
-
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
-
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
- }
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures) {
- var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
-
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
-
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
-
-
-});
-
// file: lib/common/plugin/LocalFileSystem.js
define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
@@ -3686,47 +3108,6 @@ module.exports = Metadata;
});
-// file: lib/common/plugin/Position.js
-define("cordova/plugin/Position", function(require, exports, module) {
-
-var Coordinates = require('cordova/plugin/Coordinates');
-
-var Position = function(coords, timestamp) {
- if (coords) {
- this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy);
- } else {
- this.coords = new Coordinates();
- }
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
-};
-
-module.exports = Position;
-
-});
-
-// file: lib/common/plugin/PositionError.js
-define("cordova/plugin/PositionError", function(require, exports, module) {
-
-/**
- * Position error object
- *
- * @constructor
- * @param code
- * @param message
- */
-var PositionError = function(code, message) {
- this.code = code || null;
- this.message = message || '';
-};
-
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-
-module.exports = PositionError;
-
-});
-
// file: lib/common/plugin/ProgressEvent.js
define("cordova/plugin/ProgressEvent", function(require, exports, module) {
@@ -3779,176 +3160,10 @@ module.exports = ProgressEvent;
});
-// file: lib/common/plugin/accelerometer.js
-define("cordova/plugin/accelerometer", function(require, exports, module) {
-
-/**
- * This class provides access to device accelerometer data.
- * @constructor
- */
-var argscheck = require('cordova/argscheck'),
- utils = require("cordova/utils"),
- exec = require("cordova/exec"),
- Acceleration = require('cordova/plugin/Acceleration');
-
-// Is the accel sensor running?
-var running = false;
-
-// Keeps reference to watchAcceleration calls.
-var timers = {};
-
-// Array of listeners; used to keep track of when we should call start and stop.
-var listeners = [];
+// file: lib/android/plugin/android/app.js
+define("cordova/plugin/android/app", function(require, exports, module) {
-// Last returned acceleration object from native
-var accel = null;
-
-// Tells native to start.
-function start() {
- exec(function(a) {
- var tempListeners = listeners.slice(0);
- accel = new Acceleration(a.x, a.y, a.z, a.timestamp);
- for (var i = 0, l = tempListeners.length; i < l; i++) {
- tempListeners[i].win(accel);
- }
- }, function(e) {
- var tempListeners = listeners.slice(0);
- for (var i = 0, l = tempListeners.length; i < l; i++) {
- tempListeners[i].fail(e);
- }
- }, "Accelerometer", "start", []);
- running = true;
-}
-
-// Tells native to stop.
-function stop() {
- exec(null, null, "Accelerometer", "stop", []);
- running = false;
-}
-
-// Adds a callback pair to the listeners array
-function createCallbackPair(win, fail) {
- return {win:win, fail:fail};
-}
-
-// Removes a win/fail listener pair from the listeners array
-function removeListeners(l) {
- var idx = listeners.indexOf(l);
- if (idx > -1) {
- listeners.splice(idx, 1);
- if (listeners.length === 0) {
- stop();
- }
- }
-}
-
-var accelerometer = {
- /**
- * Asynchronously acquires the current acceleration.
- *
- * @param {Function} successCallback The function to call when the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- */
- getCurrentAcceleration: function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'accelerometer.getCurrentAcceleration', arguments);
-
- var p;
- var win = function(a) {
- removeListeners(p);
- successCallback(a);
- };
- var fail = function(e) {
- removeListeners(p);
- errorCallback && errorCallback(e);
- };
-
- p = createCallbackPair(win, fail);
- listeners.push(p);
-
- if (!running) {
- start();
- }
- },
-
- /**
- * Asynchronously acquires the acceleration repeatedly at a given interval.
- *
- * @param {Function} successCallback The function to call each time the acceleration data is available
- * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL)
- * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchAcceleration: function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'accelerometer.watchAcceleration', arguments);
- // Default interval (10 sec)
- var frequency = (options && options.frequency && typeof options.frequency == 'number') ? options.frequency : 10000;
-
- // Keep reference to watch id, and report accel readings as often as defined in frequency
- var id = utils.createUUID();
-
- var p = createCallbackPair(function(){}, function(e) {
- removeListeners(p);
- errorCallback && errorCallback(e);
- });
- listeners.push(p);
-
- timers[id] = {
- timer:window.setInterval(function() {
- if (accel) {
- successCallback(accel);
- }
- }, frequency),
- listeners:p
- };
-
- if (running) {
- // If we're already running then immediately invoke the success callback
- // but only if we have retrieved a value, sample code does not check for null ...
- if (accel) {
- successCallback(accel);
- }
- } else {
- start();
- }
-
- return id;
- },
-
- /**
- * Clears the specified accelerometer watch.
- *
- * @param {String} id The id of the watch returned from #watchAcceleration.
- */
- clearWatch: function(id) {
- // Stop javascript timer & remove from timer list
- if (id && timers[id]) {
- window.clearInterval(timers[id].timer);
- removeListeners(timers[id].listeners);
- delete timers[id];
- }
- }
-};
-
-module.exports = accelerometer;
-
-});
-
-// file: lib/common/plugin/accelerometer/symbols.js
-define("cordova/plugin/accelerometer/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Acceleration', 'Acceleration');
-modulemapper.defaults('cordova/plugin/accelerometer', 'navigator.accelerometer');
-
-});
-
-// file: lib/android/plugin/android/app.js
-define("cordova/plugin/android/app", function(require, exports, module) {
-
-var exec = require('cordova/exec');
+var exec = require('cordova/exec');
module.exports = {
/**
@@ -4090,65 +3305,6 @@ module.exports = {
});
-// file: lib/android/plugin/android/notification.js
-define("cordova/plugin/android/notification", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * Provides Android enhanced notification API.
- */
-module.exports = {
- activityStart : function(title, message) {
- // If title and message not specified then mimic Android behavior of
- // using default strings.
- if (typeof title === "undefined" && typeof message == "undefined") {
- title = "Busy";
- message = 'Please wait...';
- }
-
- exec(null, null, 'Notification', 'activityStart', [ title, message ]);
- },
-
- /**
- * Close an activity dialog
- */
- activityStop : function() {
- exec(null, null, 'Notification', 'activityStop', []);
- },
-
- /**
- * Display a progress dialog with progress bar that goes from 0 to 100.
- *
- * @param {String}
- * title Title of the progress dialog.
- * @param {String}
- * message Message to display in the dialog.
- */
- progressStart : function(title, message) {
- exec(null, null, 'Notification', 'progressStart', [ title, message ]);
- },
-
- /**
- * Close the progress dialog.
- */
- progressStop : function() {
- exec(null, null, 'Notification', 'progressStop', []);
- },
-
- /**
- * Set the progress dialog value.
- *
- * @param {Number}
- * value 0-100
- */
- progressValue : function(value) {
- exec(null, null, 'Notification', 'progressValue', [ value ]);
- }
-};
-
-});
-
// file: lib/android/plugin/android/promptbasednativeapi.js
define("cordova/plugin/android/promptbasednativeapi", function(require, exports, module) {
@@ -4511,112 +3667,6 @@ modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDataba
});
-// file: lib/common/plugin/battery.js
-define("cordova/plugin/battery", function(require, exports, module) {
-
-/**
- * This class contains information about the current battery status.
- * @constructor
- */
-var cordova = require('cordova'),
- exec = require('cordova/exec');
-
-function handlers() {
- return battery.channels.batterystatus.numHandlers +
- battery.channels.batterylow.numHandlers +
- battery.channels.batterycritical.numHandlers;
-}
-
-var Battery = function() {
- this._level = null;
- this._isPlugged = null;
- // Create new event handlers on the window (returns a channel instance)
- this.channels = {
- batterystatus:cordova.addWindowEventHandler("batterystatus"),
- batterylow:cordova.addWindowEventHandler("batterylow"),
- batterycritical:cordova.addWindowEventHandler("batterycritical")
- };
- for (var key in this.channels) {
- this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange;
- }
-};
-/**
- * Event handlers for when callbacks get registered for the battery.
- * Keep track of how many handlers we have so we can start and stop the native battery listener
- * appropriately (and hopefully save on battery life!).
- */
-Battery.onHasSubscribersChange = function() {
- // If we just registered the first handler, make sure native listener is started.
- if (this.numHandlers === 1 && handlers() === 1) {
- exec(battery._status, battery._error, "Battery", "start", []);
- } else if (handlers() === 0) {
- exec(null, null, "Battery", "stop", []);
- }
-};
-
-/**
- * Callback for battery status
- *
- * @param {Object} info keys: level, isPlugged
- */
-Battery.prototype._status = function(info) {
- if (info) {
- var me = battery;
- var level = info.level;
- if (me._level !== level || me._isPlugged !== info.isPlugged) {
- // Fire batterystatus event
- cordova.fireWindowEvent("batterystatus", info);
-
- // Fire low battery event
- if (level === 20 || level === 5) {
- if (level === 20) {
- cordova.fireWindowEvent("batterylow", info);
- }
- else {
- cordova.fireWindowEvent("batterycritical", info);
- }
- }
- }
- me._level = level;
- me._isPlugged = info.isPlugged;
- }
-};
-
-/**
- * Error callback for battery start
- */
-Battery.prototype._error = function(e) {
- console.log("Error initializing Battery: " + e);
-};
-
-var battery = new Battery();
-
-module.exports = battery;
-
-});
-
-// file: lib/common/plugin/battery/symbols.js
-define("cordova/plugin/battery/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/battery', 'navigator.battery');
-
-});
-
-// file: lib/common/plugin/camera/symbols.js
-define("cordova/plugin/camera/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Camera', 'navigator.camera');
-modulemapper.defaults('cordova/plugin/CameraConstants', 'Camera');
-modulemapper.defaults('cordova/plugin/CameraPopoverOptions', 'CameraPopoverOptions');
-
-});
-
// file: lib/common/plugin/capture.js
define("cordova/plugin/capture", function(require, exports, module) {
@@ -4711,105 +3761,6 @@ modulemapper.clobbers('cordova/plugin/capture', 'navigator.device.capture');
});
-// file: lib/common/plugin/compass.js
-define("cordova/plugin/compass", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- utils = require('cordova/utils'),
- CompassHeading = require('cordova/plugin/CompassHeading'),
- CompassError = require('cordova/plugin/CompassError'),
- timers = {},
- compass = {
- /**
- * Asynchronously acquires the current heading.
- * @param {Function} successCallback The function to call when the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {CompassOptions} options The options for getting the heading data (not used).
- */
- getCurrentHeading:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'compass.getCurrentHeading', arguments);
-
- var win = function(result) {
- var ch = new CompassHeading(result.magneticHeading, result.trueHeading, result.headingAccuracy, result.timestamp);
- successCallback(ch);
- };
- var fail = errorCallback && function(code) {
- var ce = new CompassError(code);
- errorCallback(ce);
- };
-
- // Get heading
- exec(win, fail, "Compass", "getHeading", [options]);
- },
-
- /**
- * Asynchronously acquires the heading repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {HeadingOptions} options The options for getting the heading data
- * such as timeout and the frequency of the watch. For iOS, filter parameter
- * specifies to watch via a distance filter rather than time.
- */
- watchHeading:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'compass.watchHeading', arguments);
- // Default interval (100 msec)
- var frequency = (options !== undefined && options.frequency !== undefined) ? options.frequency : 100;
- var filter = (options !== undefined && options.filter !== undefined) ? options.filter : 0;
-
- var id = utils.createUUID();
- if (filter > 0) {
- // is an iOS request for watch by filter, no timer needed
- timers[id] = "iOS";
- compass.getCurrentHeading(successCallback, errorCallback, options);
- } else {
- // Start watch timer to get headings
- timers[id] = window.setInterval(function() {
- compass.getCurrentHeading(successCallback, errorCallback);
- }, frequency);
- }
-
- return id;
- },
-
- /**
- * Clears the specified heading watch.
- * @param {String} watchId The ID of the watch returned from #watchHeading.
- */
- clearWatch:function(id) {
- // Stop javascript timer & remove from timer list
- if (id && timers[id]) {
- if (timers[id] != "iOS") {
- clearInterval(timers[id]);
- } else {
- // is iOS watch by filter so call into device to stop
- exec(null, null, "Compass", "stopHeading", []);
- }
- delete timers[id];
- }
- }
- };
-
-module.exports = compass;
-
-});
-
-// file: lib/common/plugin/compass/symbols.js
-define("cordova/plugin/compass/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/CompassHeading', 'CompassHeading');
-modulemapper.clobbers('cordova/plugin/CompassError', 'CompassError');
-modulemapper.clobbers('cordova/plugin/compass', 'navigator.compass');
-
-});
-
// file: lib/common/plugin/console-via-logger.js
define("cordova/plugin/console-via-logger", function(require, exports, module) {
@@ -4982,84 +3933,6 @@ for (var key in console) {
});
-// file: lib/common/plugin/contacts.js
-define("cordova/plugin/contacts", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils'),
- Contact = require('cordova/plugin/Contact');
-
-/**
-* Represents a group of Contacts.
-* @constructor
-*/
-var contacts = {
- /**
- * Returns an array of Contacts matching the search criteria.
- * @param fields that should be searched
- * @param successCB success callback
- * @param errorCB error callback
- * @param {ContactFindOptions} options that can be applied to contact searching
- * @return array of Contacts matching search criteria
- */
- find:function(fields, successCB, errorCB, options) {
- argscheck.checkArgs('afFO', 'contacts.find', arguments);
- if (!fields.length) {
- errorCB && errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR));
- } else {
- var win = function(result) {
- var cs = [];
- for (var i = 0, l = result.length; i < l; i++) {
- cs.push(contacts.create(result[i]));
- }
- successCB(cs);
- };
- exec(win, errorCB, "Contacts", "search", [fields, options]);
- }
- },
-
- /**
- * This function creates a new contact, but it does not persist the contact
- * to device storage. To persist the contact to device storage, invoke
- * contact.save().
- * @param properties an object whose properties will be examined to create a new Contact
- * @returns new Contact object
- */
- create:function(properties) {
- argscheck.checkArgs('O', 'contacts.create', arguments);
- var contact = new Contact();
- for (var i in properties) {
- if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) {
- contact[i] = properties[i];
- }
- }
- return contact;
- }
-};
-
-module.exports = contacts;
-
-});
-
-// file: lib/common/plugin/contacts/symbols.js
-define("cordova/plugin/contacts/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/contacts', 'navigator.contacts');
-modulemapper.clobbers('cordova/plugin/Contact', 'Contact');
-modulemapper.clobbers('cordova/plugin/ContactAddress', 'ContactAddress');
-modulemapper.clobbers('cordova/plugin/ContactError', 'ContactError');
-modulemapper.clobbers('cordova/plugin/ContactField', 'ContactField');
-modulemapper.clobbers('cordova/plugin/ContactFindOptions', 'ContactFindOptions');
-modulemapper.clobbers('cordova/plugin/ContactName', 'ContactName');
-modulemapper.clobbers('cordova/plugin/ContactOrganization', 'ContactOrganization');
-
-});
-
// file: lib/common/plugin/device.js
define("cordova/plugin/device", function(require, exports, module) {
@@ -5217,215 +4090,6 @@ modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError');
});
-// file: lib/common/plugin/geolocation.js
-define("cordova/plugin/geolocation", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- PositionError = require('cordova/plugin/PositionError'),
- Position = require('cordova/plugin/Position');
-
-var timers = {}; // list of timers in use
-
-// Returns default params, overrides if provided with values
-function parseParameters(options) {
- var opt = {
- maximumAge: 0,
- enableHighAccuracy: false,
- timeout: Infinity
- };
-
- if (options) {
- if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) {
- opt.maximumAge = options.maximumAge;
- }
- if (options.enableHighAccuracy !== undefined) {
- opt.enableHighAccuracy = options.enableHighAccuracy;
- }
- if (options.timeout !== undefined && !isNaN(options.timeout)) {
- if (options.timeout < 0) {
- opt.timeout = 0;
- } else {
- opt.timeout = options.timeout;
- }
- }
- }
-
- return opt;
-}
-
-// Returns a timeout failure, closed over a specified timeout value and error callback.
-function createTimeout(errorCallback, timeout) {
- var t = setTimeout(function() {
- clearTimeout(t);
- t = null;
- errorCallback({
- code:PositionError.TIMEOUT,
- message:"Position retrieval timed out."
- });
- }, timeout);
- return t;
-}
-
-var geolocation = {
- lastPosition:null, // reference to last known (cached) position returned
- /**
- * Asynchronously acquires the current position.
- *
- * @param {Function} successCallback The function to call when the position data is available
- * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the position data. (OPTIONAL)
- */
- getCurrentPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- // Timer var that will fire an error callback if no position is retrieved from native
- // before the "timeout" param provided expires
- var timeoutTimer = {timer:null};
-
- var win = function(p) {
- clearTimeout(timeoutTimer.timer);
- if (!(timeoutTimer.timer)) {
- // Timeout already happened, or native fired error callback for
- // this geo request.
- // Don't continue with success callback.
- return;
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
- var fail = function(e) {
- clearTimeout(timeoutTimer.timer);
- timeoutTimer.timer = null;
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- // Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
- // fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
- successCallback(geolocation.lastPosition);
- // If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
- } else if (options.timeout === 0) {
- fail({
- code:PositionError.TIMEOUT,
- message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter."
- });
- // Otherwise we have to call into native to retrieve a position.
- } else {
- if (options.timeout !== Infinity) {
- // If the timeout value was not set to Infinity (default), then
- // set up a timeout function that will fire the error callback
- // if no successful position was retrieved before timeout expired.
- timeoutTimer.timer = createTimeout(fail, options.timeout);
- } else {
- // This is here so the check in the win function doesn't mess stuff up
- // may seem weird but this guarantees timeoutTimer is
- // always truthy before we call into native
- timeoutTimer.timer = true;
- }
- exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]);
- }
- return timeoutTimer;
- },
- /**
- * Asynchronously watches the geolocation for changes to geolocation. When a change occurs,
- * the successCallback is called with the new location.
- *
- * @param {Function} successCallback The function to call each time the location data is available
- * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- var id = utils.createUUID();
-
- // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition
- timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options);
-
- var fail = function(e) {
- clearTimeout(timers[id].timer);
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- var win = function(p) {
- clearTimeout(timers[id].timer);
- if (options.timeout !== Infinity) {
- timers[id].timer = createTimeout(fail, options.timeout);
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
-
- exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]);
-
- return id;
- },
- /**
- * Clears the specified heading watch.
- *
- * @param {String} id The ID of the watch returned from #watchPosition
- */
- clearWatch:function(id) {
- if (id && timers[id] !== undefined) {
- clearTimeout(timers[id].timer);
- timers[id].timer = false;
- exec(null, null, "Geolocation", "clearWatch", [id]);
- }
- }
-};
-
-module.exports = geolocation;
-
-});
-
-// file: lib/common/plugin/geolocation/symbols.js
-define("cordova/plugin/geolocation/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/geolocation', 'navigator.geolocation');
-modulemapper.clobbers('cordova/plugin/PositionError', 'PositionError');
-modulemapper.clobbers('cordova/plugin/Position', 'Position');
-modulemapper.clobbers('cordova/plugin/Coordinates', 'Coordinates');
-
-});
-
// file: lib/common/plugin/globalization.js
define("cordova/plugin/globalization", function(require, exports, module) {
@@ -5813,16 +4477,6 @@ modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError')
});
-// file: lib/android/plugin/inappbrowser/symbols.js
-define("cordova/plugin/inappbrowser/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/InAppBrowser', 'open');
-
-});
-
// file: lib/common/plugin/logger.js
define("cordova/plugin/logger", function(require, exports, module) {
@@ -6258,120 +4912,6 @@ modulemapper.defaults('cordova/plugin/Connection', 'Connection');
});
-// file: lib/common/plugin/notification.js
-define("cordova/plugin/notification", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var platform = require('cordova/platform');
-
-/**
- * Provides access to notifications on the device.
- */
-
-module.exports = {
-
- /**
- * Open a native alert dialog, with a customizable title and button text.
- *
- * @param {String} message Message to print in the body of the alert
- * @param {Function} completeCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the alert dialog (default: Alert)
- * @param {String} buttonLabel Label of the close button (default: OK)
- */
- alert: function(message, completeCallback, title, buttonLabel) {
- var _title = (title || "Alert");
- var _buttonLabel = (buttonLabel || "OK");
- exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]);
- },
-
- /**
- * Open a native confirm dialog, with a customizable title and button text.
- * The result that the user selects is returned to the result callback.
- *
- * @param {String} message Message to print in the body of the alert
- * @param {Function} resultCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the alert dialog (default: Confirm)
- * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel'])
- */
- confirm: function(message, resultCallback, title, buttonLabels) {
- var _title = (title || "Confirm");
- var _buttonLabels = (buttonLabels || ["OK", "Cancel"]);
-
- // Strings are deprecated!
- if (typeof _buttonLabels === 'string') {
- console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array).");
- }
-
- // Some platforms take an array of button label names.
- // Other platforms take a comma separated list.
- // For compatibility, we convert to the desired type based on the platform.
- if (platform.id == "android" || platform.id == "ios" || platform.id == "windowsphone" || platform.id == "blackberry10") {
- if (typeof _buttonLabels === 'string') {
- var buttonLabelString = _buttonLabels;
- _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here
- }
- } else {
- if (Array.isArray(_buttonLabels)) {
- var buttonLabelArray = _buttonLabels;
- _buttonLabels = buttonLabelArray.toString();
- }
- }
- exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]);
- },
-
- /**
- * Open a native prompt dialog, with a customizable title and button text.
- * The following results are returned to the result callback:
- * buttonIndex Index number of the button selected.
- * input1 The text entered in the prompt dialog box.
- *
- * @param {String} message Dialog message to display (default: "Prompt message")
- * @param {Function} resultCallback The callback that is called when user clicks on a button.
- * @param {String} title Title of the dialog (default: "Prompt")
- * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"])
- * @param {String} defaultText Textbox input value (default: "Default text")
- */
- prompt: function(message, resultCallback, title, buttonLabels, defaultText) {
- var _message = (message || "Prompt message");
- var _title = (title || "Prompt");
- var _buttonLabels = (buttonLabels || ["OK","Cancel"]);
- var _defaultText = (defaultText || "Default text");
- exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]);
- },
-
- /**
- * Causes the device to vibrate.
- *
- * @param {Integer} mills The number of milliseconds to vibrate for.
- */
- vibrate: function(mills) {
- exec(null, null, "Notification", "vibrate", [mills]);
- },
-
- /**
- * Causes the device to beep.
- * On Android, the default notification ringtone is played "count" times.
- *
- * @param {Integer} count The number of beeps.
- */
- beep: function(count) {
- exec(null, null, "Notification", "beep", [count]);
- }
-};
-
-});
-
-// file: lib/android/plugin/notification/symbols.js
-define("cordova/plugin/notification/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/notification', 'navigator.notification');
-modulemapper.merges('cordova/plugin/android/notification', 'navigator.notification');
-
-});
-
// file: lib/common/plugin/requestFileSystem.js
define("cordova/plugin/requestFileSystem", function(require, exports, module) {
@@ -6467,34 +5007,6 @@ module.exports = function(uri, successCallback, errorCallback) {
});
-// file: lib/common/plugin/splashscreen.js
-define("cordova/plugin/splashscreen", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-var splashscreen = {
- show:function() {
- exec(null, null, "SplashScreen", "show", []);
- },
- hide:function() {
- exec(null, null, "SplashScreen", "hide", []);
- }
-};
-
-module.exports = splashscreen;
-
-});
-
-// file: lib/common/plugin/splashscreen/symbols.js
-define("cordova/plugin/splashscreen/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/splashscreen', 'navigator.splashscreen');
-
-});
-
// file: lib/common/symbols.js
define("cordova/symbols", function(require, exports, module) {
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9e44596d/framework/src/org/apache/cordova/DirectoryManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/DirectoryManager.java b/framework/src/org/apache/cordova/DirectoryManager.java
index 292f402..0c86f0f 100644
--- a/framework/src/org/apache/cordova/DirectoryManager.java
+++ b/framework/src/org/apache/cordova/DirectoryManager.java
@@ -138,7 +138,7 @@ public class DirectoryManager {
*
* @return the absolute path of where to store the file
*/
- protected static String getTempDirectoryPath(Context ctx) {
+ public static String getTempDirectoryPath(Context ctx) {
File cache = null;
// SD Card Mounted
[47/50] [abbrv] android commit: [CB-3384] Rewrite of DataResource
into UriResolver + UriResolvers
Posted by ag...@apache.org.
[CB-3384] Rewrite of DataResource into UriResolver + UriResolvers
Includes unit tests woot!
Note that this remove CordovaPlugin.shouldInterceptRequest(). Should be
fine since this method was introduced only a couple of releases ago, was
never documented, and afaict was only used by the Chrome Cordova plugins.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/892ffc8c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/892ffc8c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/892ffc8c
Branch: refs/heads/2.9.x
Commit: 892ffc8ce45a555b74d1a8a40e4694b8855d753e
Parents: fbf7f1c
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Jun 7 10:17:28 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jun 27 21:55:28 2013 -0400
----------------------------------------------------------------------
.../src/org/apache/cordova/CordovaWebView.java | 34 +++
.../src/org/apache/cordova/FileHelper.java | 33 ++-
.../cordova/IceCreamCordovaWebViewClient.java | 49 ++--
.../src/org/apache/cordova/UriResolver.java | 65 +++++
.../src/org/apache/cordova/UriResolvers.java | 277 +++++++++++++++++++
.../org/apache/cordova/api/CordovaPlugin.java | 15 +-
.../org/apache/cordova/api/PluginManager.java | 33 +--
.../apache/cordova/test/UriResolversTest.java | 263 ++++++++++++++++++
.../actions/CordovaWebViewTestActivity.java | 2 +-
9 files changed, 694 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/CordovaWebView.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java
index 67775a1..3a8e48d 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -943,4 +943,38 @@ public class CordovaWebView extends WebView {
public void storeResult(int requestCode, int resultCode, Intent intent) {
mResult = new ActivityResult(requestCode, resultCode, intent);
}
+
+ /**
+ * Resolves the given URI, giving plugins a chance to re-route or customly handle the URI.
+ * A white-list rejection will be returned if the URI does not pass the white-list.
+ * @return Never returns null.
+ * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
+ * resolved before being passed into this function.
+ */
+ public UriResolver resolveUri(Uri uri) {
+ return resolveUri(uri, false);
+ }
+
+ UriResolver resolveUri(Uri uri, boolean fromWebView) {
+ if (!uri.isAbsolute()) {
+ throw new IllegalArgumentException("Relative URIs are not yet supported by resolveUri.");
+ }
+ // Check the against the white-list before delegating to plugins.
+ if (("http".equals(uri.getScheme()) || "https".equals(uri.getScheme())) && !Config.isUrlWhiteListed(uri.toString()))
+ {
+ LOG.w(TAG, "resolveUri - URL is not in whitelist: " + uri);
+ return new UriResolvers.ErrorUriResolver(uri, "Whitelist rejection");
+ }
+
+ // Give plugins a chance to handle the request.
+ UriResolver resolver = pluginManager.resolveUri(uri);
+ if (resolver == null && !fromWebView) {
+ resolver = UriResolvers.forUri(uri, cordova.getActivity());
+ if (resolver == null) {
+ resolver = new UriResolvers.ErrorUriResolver(uri, "Unresolvable URI");
+ }
+ }
+
+ return resolver;
+ }
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/FileHelper.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/FileHelper.java b/framework/src/org/apache/cordova/FileHelper.java
index ebbdc8d..0b2ba1c 100644
--- a/framework/src/org/apache/cordova/FileHelper.java
+++ b/framework/src/org/apache/cordova/FileHelper.java
@@ -26,9 +26,12 @@ import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.LOG;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URLConnection;
+import java.io.OutputStream;
+import java.nio.charset.Charset;
import java.util.Locale;
public class FileHelper {
@@ -124,6 +127,20 @@ public class FileHelper {
return uriString;
}
+ public static String getMimeTypeForExtension(String path) {
+ String extension = path;
+ int lastDot = extension.lastIndexOf('.');
+ if (lastDot != -1) {
+ extension = extension.substring(lastDot + 1);
+ }
+ // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
+ extension = extension.toLowerCase(Locale.getDefault());
+ if (extension.equals("3ga")) {
+ return "audio/3gpp";
+ }
+ return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ }
+
/**
* Returns the mime type of the data specified by the given URI string.
*
@@ -137,19 +154,7 @@ public class FileHelper {
if (uriString.startsWith("content://")) {
mimeType = cordova.getActivity().getContentResolver().getType(uri);
} else {
- // MimeTypeMap.getFileExtensionFromUrl() fails when there are query parameters.
- String extension = uri.getPath();
- int lastDot = extension.lastIndexOf('.');
- if (lastDot != -1) {
- extension = extension.substring(lastDot + 1);
- }
- // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
- extension = extension.toLowerCase();
- if (extension.equals("3ga")) {
- mimeType = "audio/3gpp";
- } else {
- mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
- }
+ mimeType = getMimeTypeForExtension(uri.getPath());
}
return mimeType;
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
index 1e190b6..8527d35 100644
--- a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
@@ -18,7 +18,6 @@
*/
package org.apache.cordova;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -26,6 +25,7 @@ import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.LOG;
import android.annotation.TargetApi;
+import android.net.Uri;
import android.os.Build;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
@@ -44,45 +44,29 @@ public class IceCreamCordovaWebViewClient extends CordovaWebViewClient {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
- //Check if plugins intercept the request
- WebResourceResponse ret = super.shouldInterceptRequest(view, url);
+ UriResolver uriResolver = appView.resolveUri(Uri.parse(url), true);
- if(!Config.isUrlWhiteListed(url) && (url.startsWith("http://") || url.startsWith("https://")))
- {
- ret = getWhitelistResponse();
- }
- else if(ret == null && (url.contains("?") || url.contains("#") || needsIceCreamSpecialsInAssetUrlFix(url))){
- ret = generateWebResourceResponse(url);
- }
- else if (ret == null && this.appView.pluginManager != null) {
- ret = this.appView.pluginManager.shouldInterceptRequest(url);
+ if (uriResolver == null && url.startsWith("file:///android_asset/")) {
+ if (url.contains("?") || url.contains("#") || needsIceCreamSpecialsInAssetUrlFix(url)) {
+ uriResolver = appView.resolveUri(Uri.parse(url), false);
+ }
}
- return ret;
- }
-
- private WebResourceResponse getWhitelistResponse()
- {
- WebResourceResponse emptyResponse;
- String empty = "";
- ByteArrayInputStream data = new ByteArrayInputStream(empty.getBytes());
- return new WebResourceResponse("text/plain", "UTF-8", data);
- }
-
- private WebResourceResponse generateWebResourceResponse(String url) {
- if (url.startsWith("file:///android_asset/")) {
- String mimetype = FileHelper.getMimeType(url, cordova);
-
+
+ if (uriResolver != null) {
try {
- InputStream stream = FileHelper.getInputStreamFromUriString(url, cordova);
- WebResourceResponse response = new WebResourceResponse(mimetype, "UTF-8", stream);
- return response;
+ InputStream stream = uriResolver.getInputStream();
+ String mimeType = uriResolver.getMimeType();
+ // If we don't know how to open this file, let the browser continue loading
+ return new WebResourceResponse(mimeType, "UTF-8", stream);
} catch (IOException e) {
- LOG.e("generateWebResourceResponse", e.getMessage(), e);
+ LOG.e("IceCreamCordovaWebViewClient", "Error occurred while loading a file.", e);
+ // Results in a 404.
+ return new WebResourceResponse("text/plain", "UTF-8", null);
}
}
return null;
}
-
+
private static boolean needsIceCreamSpecialsInAssetUrlFix(String url) {
if (!url.contains("%20")){
return false;
@@ -96,5 +80,4 @@ public class IceCreamCordovaWebViewClient extends CordovaWebViewClient {
return false;
}
}
-
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/UriResolver.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/UriResolver.java b/framework/src/org/apache/cordova/UriResolver.java
new file mode 100644
index 0000000..42e9a3a
--- /dev/null
+++ b/framework/src/org/apache/cordova/UriResolver.java
@@ -0,0 +1,65 @@
+/*
+ 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.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import android.net.Uri;
+
+/*
+ * Interface for a class that can resolve URIs.
+ * See CordovaUriResolver for an example.
+ */
+public interface UriResolver {
+
+ /** Returns the URI that this instance will resolve. */
+ Uri getUri();
+
+ /**
+ * Returns the InputStream for the resource.
+ * Throws an exception if it cannot be read.
+ * Never returns null.
+ */
+ InputStream getInputStream() throws IOException;
+
+ /**
+ * Returns the OutputStream for the resource.
+ * Throws an exception if it cannot be written to.
+ * Never returns null.
+ */
+ OutputStream getOutputStream() throws IOException;
+
+ /**
+ * Returns the MIME type of the resource.
+ * Returns null if the MIME type cannot be determined (e.g. content: that doesn't exist).
+ */
+ String getMimeType();
+
+ /** Returns whether the resource is writable. */
+ boolean isWritable();
+
+ /**
+ * Returns a File that points to the resource, or null if the resource
+ * is not on the local file system.
+ */
+ File getLocalFile();
+}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/UriResolvers.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/UriResolvers.java b/framework/src/org/apache/cordova/UriResolvers.java
new file mode 100644
index 0000000..e8be407
--- /dev/null
+++ b/framework/src/org/apache/cordova/UriResolvers.java
@@ -0,0 +1,277 @@
+/*
+ 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.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.cordova.FileHelper;
+import org.apache.http.util.EncodingUtils;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.AssetManager;
+import android.net.Uri;
+
+/*
+ * UriResolver implementations.
+ */
+public final class UriResolvers {
+ private UriResolvers() {}
+
+ private static final class FileUriResolver implements UriResolver {
+ private final Uri uri;
+ private String mimeType;
+ private File localFile;
+
+ FileUriResolver(Uri uri) {
+ this.uri = uri;
+ }
+
+ public Uri getUri() {
+ return uri;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return new FileInputStream(getLocalFile());
+ }
+
+ public OutputStream getOutputStream() throws FileNotFoundException {
+ return new FileOutputStream(getLocalFile());
+ }
+
+ public String getMimeType() {
+ if (mimeType == null) {
+ mimeType = FileHelper.getMimeTypeForExtension(getLocalFile().getName());
+ }
+ return mimeType;
+ }
+
+ public boolean isWritable() {
+ File f = getLocalFile();
+ if (f.isDirectory()) {
+ return false;
+ }
+ if (f.exists()) {
+ return f.canWrite();
+ }
+ return f.getParentFile().canWrite();
+ }
+
+ public File getLocalFile() {
+ if (localFile == null) {
+ localFile = new File(uri.getPath());
+ }
+ return localFile;
+ }
+ }
+
+ private static final class AssetUriResolver implements UriResolver {
+ private final Uri uri;
+ private final AssetManager assetManager;
+ private final String assetPath;
+ private String mimeType;
+
+ AssetUriResolver(Uri uri, AssetManager assetManager) {
+ this.uri = uri;
+ this.assetManager = assetManager;
+ this.assetPath = uri.getPath().substring(15);
+ }
+
+ public Uri getUri() {
+ return uri;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return assetManager.open(assetPath);
+ }
+
+ public OutputStream getOutputStream() throws FileNotFoundException {
+ throw new FileNotFoundException("URI not writable.");
+ }
+
+ public String getMimeType() {
+ if (mimeType == null) {
+ mimeType = FileHelper.getMimeTypeForExtension(assetPath);
+ }
+ return mimeType;
+ }
+
+ public boolean isWritable() {
+ return false;
+ }
+
+ public File getLocalFile() {
+ return null;
+ }
+ }
+
+ private static final class ContentUriResolver implements UriResolver {
+ private final Uri uri;
+ private final ContentResolver contentResolver;
+ private String mimeType;
+
+ ContentUriResolver(Uri uri, ContentResolver contentResolver) {
+ this.uri = uri;
+ this.contentResolver = contentResolver;
+ }
+
+ public Uri getUri() {
+ return uri;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return contentResolver.openInputStream(uri);
+ }
+
+ public OutputStream getOutputStream() throws FileNotFoundException {
+ return contentResolver.openOutputStream(uri);
+ }
+
+ public String getMimeType() {
+ if (mimeType == null) {
+ mimeType = contentResolver.getType(uri);
+ }
+ return mimeType;
+ }
+
+ public boolean isWritable() {
+ return uri.getScheme().equals(ContentResolver.SCHEME_CONTENT);
+ }
+
+ public File getLocalFile() {
+ return null;
+ }
+ }
+
+ static final class ErrorUriResolver implements UriResolver {
+ final Uri uri;
+ final String errorMsg;
+
+ ErrorUriResolver(Uri uri, String errorMsg) {
+ this.uri = uri;
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public boolean isWritable() {
+ return false;
+ }
+
+ @Override
+ public Uri getUri() {
+ return uri;
+ }
+
+ @Override
+ public File getLocalFile() {
+ return null;
+ }
+
+ @Override
+ public OutputStream getOutputStream() throws IOException {
+ throw new FileNotFoundException(errorMsg);
+ }
+
+ @Override
+ public String getMimeType() {
+ return null;
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ throw new FileNotFoundException(errorMsg);
+ }
+ }
+
+ private static final class ReadOnlyResolver implements UriResolver {
+ private Uri uri;
+ private InputStream inputStream;
+ private String mimeType;
+
+ public ReadOnlyResolver(Uri uri, InputStream inputStream, String mimeType) {
+ this.uri = uri;
+ this.inputStream = inputStream;
+ this.mimeType = mimeType;
+ }
+
+ @Override
+ public boolean isWritable() {
+ return false;
+ }
+
+ @Override
+ public Uri getUri() {
+ return uri;
+ }
+
+ @Override
+ public File getLocalFile() {
+ return null;
+ }
+
+ @Override
+ public OutputStream getOutputStream() throws IOException {
+ throw new FileNotFoundException("URI is not writable");
+ }
+
+ @Override
+ public String getMimeType() {
+ return mimeType;
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ return inputStream;
+ }
+ }
+
+ public static UriResolver createInline(Uri uri, String response, String mimeType) {
+ return createInline(uri, EncodingUtils.getBytes(response, "UTF-8"), mimeType);
+ }
+
+ public static UriResolver createInline(Uri uri, byte[] response, String mimeType) {
+ return new ReadOnlyResolver(uri, new ByteArrayInputStream(response), mimeType);
+ }
+
+ public static UriResolver createReadOnly(Uri uri, InputStream inputStream, String mimeType) {
+ return new ReadOnlyResolver(uri, inputStream, mimeType);
+ }
+
+ /* Package-private to force clients to go through CordovaWebView.resolveUri(). */
+ static UriResolver forUri(Uri uri, Context context) {
+ String scheme = uri.getScheme();
+ if (ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) {
+ return new ContentUriResolver(uri, context.getContentResolver());
+ }
+ if (ContentResolver.SCHEME_FILE.equals(scheme)) {
+ if (uri.getPath().startsWith("/android_asset/")) {
+ return new AssetUriResolver(uri, context.getAssets());
+ }
+ return new FileUriResolver(uri);
+ }
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/api/CordovaPlugin.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/CordovaPlugin.java b/framework/src/org/apache/cordova/api/CordovaPlugin.java
index 2b225e6..07035e5 100644
--- a/framework/src/org/apache/cordova/api/CordovaPlugin.java
+++ b/framework/src/org/apache/cordova/api/CordovaPlugin.java
@@ -20,14 +20,12 @@ package org.apache.cordova.api;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.UriResolver;
import org.json.JSONArray;
import org.json.JSONException;
-import android.annotation.TargetApi;
import android.content.Intent;
-import android.os.Build;
-import android.util.Log;
-import android.webkit.WebResourceResponse;
+import android.net.Uri;
/**
* Plugins must extend this class and override one of the execute methods.
@@ -165,13 +163,10 @@ public class CordovaPlugin {
}
/**
- * By specifying a <url-filter> in config.xml you can map a URL prefix to this method. It applies to all resources loaded in the WebView, not just top-level navigation.
- *
- * @param url The URL of the resource to be loaded.
- * @return Return a WebResourceResponse for the resource, or null to let the WebView handle it normally.
+ * Hook for overriding the default URI handling mechanism.
+ * Applies to WebView requests as well as requests made by plugins.
*/
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
- public WebResourceResponse shouldInterceptRequest(String url) {
+ public UriResolver resolveUri(Uri uri) {
return null;
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index e392dfa..083e882 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -26,12 +26,14 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.UriResolver;
import org.json.JSONException;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Intent;
import android.content.res.XmlResourceParser;
+import android.net.Uri;
import android.util.Log;
import android.webkit.WebResourceResponse;
@@ -380,25 +382,6 @@ public class PluginManager {
}
/**
- * Called when the WebView is loading any resource, top-level or not.
- *
- * Uses the same url-filter tag as onOverrideUrlLoading.
- *
- * @param url The URL of the resource to be loaded.
- * @return Return a WebResourceResponse with the resource, or null if the WebView should handle it.
- */
- public WebResourceResponse shouldInterceptRequest(String url) {
- Iterator<Entry<String, String>> it = this.urlMap.entrySet().iterator();
- while (it.hasNext()) {
- HashMap.Entry<String, String> pairs = it.next();
- if (url.startsWith(pairs.getKey())) {
- return this.getPlugin(pairs.getValue()).shouldInterceptRequest(url);
- }
- }
- return null;
- }
-
- /**
* Called when the app navigates or refreshes.
*/
public void onReset() {
@@ -419,6 +402,18 @@ public class PluginManager {
LOG.e(TAG, "=====================================================================================");
}
+ /* Should be package private */ public UriResolver resolveUri(Uri uri) {
+ for (PluginEntry entry : this.entries.values()) {
+ if (entry.plugin != null) {
+ UriResolver ret = entry.plugin.resolveUri(uri);
+ if (ret != null) {
+ return ret;
+ }
+ }
+ }
+ return null;
+ }
+
private class PluginManagerService extends CordovaPlugin {
@Override
public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/test/src/org/apache/cordova/test/UriResolversTest.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/UriResolversTest.java b/test/src/org/apache/cordova/test/UriResolversTest.java
new file mode 100644
index 0000000..21584b9
--- /dev/null
+++ b/test/src/org/apache/cordova/test/UriResolversTest.java
@@ -0,0 +1,263 @@
+
+package org.apache.cordova.test;
+
+/*
+ *
+ * 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 org.apache.cordova.CordovaWebView;
+import org.apache.cordova.UriResolver;
+import org.apache.cordova.UriResolvers;
+import org.apache.cordova.api.CallbackContext;
+import org.apache.cordova.api.CordovaPlugin;
+import org.apache.cordova.api.PluginEntry;
+import org.apache.cordova.test.actions.CordovaWebViewTestActivity;
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import java.io.File;
+import java.io.IOException;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+
+public class UriResolversTest extends ActivityInstrumentationTestCase2<CordovaWebViewTestActivity> {
+
+ public UriResolversTest()
+ {
+ super(CordovaWebViewTestActivity.class);
+ }
+
+ CordovaWebView cordovaWebView;
+ private CordovaWebViewTestActivity activity;
+ String execPayload;
+ Integer execStatus;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ activity = this.getActivity();
+ cordovaWebView = activity.cordovaWebView;
+ cordovaWebView.pluginManager.addService(new PluginEntry("UriResolverTestPlugin1", new CordovaPlugin() {
+ @Override
+ public UriResolver resolveUri(Uri uri) {
+ if ("plugin-uri".equals(uri.getScheme())) {
+ return cordovaWebView.resolveUri(uri.buildUpon().scheme("file").build());
+ }
+ return null;
+ }
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ synchronized (UriResolversTest.this) {
+ execPayload = args.getString(0);
+ execStatus = args.getInt(1);
+ UriResolversTest.this.notify();
+ }
+ return true;
+ }
+ }));
+ cordovaWebView.pluginManager.addService(new PluginEntry("UriResolverTestPlugin2", new CordovaPlugin() {
+ @Override
+ public UriResolver resolveUri(Uri uri) {
+ if (uri.getQueryParameter("pluginRewrite") != null) {
+ return UriResolvers.createInline(uri, "pass", "my/mime");
+ }
+ return null;
+ }
+ }));
+ }
+
+ private Uri createTestImageContentUri() {
+ Bitmap imageBitmap = BitmapFactory.decodeResource(activity.getResources(), R.drawable.icon);
+ String stored = MediaStore.Images.Media.insertImage(activity.getContentResolver(),
+ imageBitmap, "app-icon", "desc");
+ return Uri.parse(stored);
+ }
+
+ private void performResolverTest(Uri uri, String expectedMimeType, File expectedLocalFile,
+ boolean expectedIsWritable,
+ boolean expectRead, boolean expectWrite) throws IOException {
+ UriResolver resolver = cordovaWebView.resolveUri(uri);
+ assertEquals(expectedLocalFile, resolver.getLocalFile());
+ assertEquals(expectedMimeType, resolver.getMimeType());
+ if (expectedIsWritable) {
+ assertTrue(resolver.isWritable());
+ } else {
+ assertFalse(resolver.isWritable());
+ }
+ try {
+ resolver.getInputStream().read();
+ if (!expectRead) {
+ fail("Expected getInputStream to throw.");
+ }
+ } catch (IOException e) {
+ if (expectRead) {
+ throw e;
+ }
+ }
+ try {
+ resolver.getOutputStream().write(123);
+ if (!expectWrite) {
+ fail("Expected getOutputStream to throw.");
+ }
+ } catch (IOException e) {
+ if (expectWrite) {
+ throw e;
+ }
+ }
+ }
+
+ public void testValidContentUri() throws IOException
+ {
+ Uri contentUri = createTestImageContentUri();
+ performResolverTest(contentUri, "image/jpeg", null, true, true, true);
+ }
+
+ public void testInvalidContentUri() throws IOException
+ {
+ Uri contentUri = Uri.parse("content://media/external/images/media/999999999");
+ performResolverTest(contentUri, null, null, true, false, false);
+ }
+
+ public void testValidAssetUri() throws IOException
+ {
+ Uri assetUri = Uri.parse("file:///android_asset/www/index.html?foo#bar"); // Also check for stripping off ? and # correctly.
+ performResolverTest(assetUri, "text/html", null, false, true, false);
+ }
+
+ public void testInvalidAssetUri() throws IOException
+ {
+ Uri assetUri = Uri.parse("file:///android_asset/www/missing.html");
+ performResolverTest(assetUri, "text/html", null, false, false, false);
+ }
+
+ public void testFileUriToExistingFile() throws IOException
+ {
+ File f = File.createTempFile("te s t", ".txt"); // Also check for dealing with spaces.
+ try {
+ Uri fileUri = Uri.parse(f.toURI().toString() + "?foo#bar"); // Also check for stripping off ? and # correctly.
+ performResolverTest(fileUri, "text/plain", f, true, true, true);
+ } finally {
+ f.delete();
+ }
+ }
+
+ public void testFileUriToMissingFile() throws IOException
+ {
+ File f = new File(Environment.getExternalStorageDirectory() + "/somefilethatdoesntexist");
+ Uri fileUri = Uri.parse(f.toURI().toString());
+ try {
+ performResolverTest(fileUri, null, f, true, false, true);
+ } finally {
+ f.delete();
+ }
+ }
+
+ public void testFileUriToMissingFileWithMissingParent() throws IOException
+ {
+ File f = new File(Environment.getExternalStorageDirectory() + "/somedirthatismissing/somefilethatdoesntexist");
+ Uri fileUri = Uri.parse(f.toURI().toString());
+ performResolverTest(fileUri, null, f, false, false, false);
+ }
+
+ public void testUnrecognizedUri() throws IOException
+ {
+ Uri uri = Uri.parse("somescheme://foo");
+ performResolverTest(uri, null, null, false, false, false);
+ }
+
+ public void testRelativeUri()
+ {
+ try {
+ cordovaWebView.resolveUri(Uri.parse("/foo"));
+ fail("Should have thrown for relative URI 1.");
+ } catch (Throwable t) {
+ }
+ try {
+ cordovaWebView.resolveUri(Uri.parse("//foo/bar"));
+ fail("Should have thrown for relative URI 2.");
+ } catch (Throwable t) {
+ }
+ try {
+ cordovaWebView.resolveUri(Uri.parse("foo.png"));
+ fail("Should have thrown for relative URI 3.");
+ } catch (Throwable t) {
+ }
+ }
+
+ public void testPluginOverrides1() throws IOException
+ {
+ Uri uri = Uri.parse("plugin-uri://foohost/android_asset/www/index.html");
+ performResolverTest(uri, "text/html", null, false, true, false);
+ }
+
+ public void testPluginOverrides2() throws IOException
+ {
+ Uri uri = Uri.parse("plugin-uri://foohost/android_asset/www/index.html?pluginRewrite=yes");
+ performResolverTest(uri, "my/mime", null, false, true, false);
+ }
+
+ public void testWhitelistRejection() throws IOException
+ {
+ Uri uri = Uri.parse("http://foohost.com/");
+ performResolverTest(uri, null, null, false, false, false);
+ }
+
+ public void testWebViewRequestIntercept() throws IOException
+ {
+ cordovaWebView.sendJavascript(
+ "var x = new XMLHttpRequest;\n" +
+ "x.open('GET', 'file://foo?pluginRewrite=1', false);\n" +
+ "x.send();\n" +
+ "cordova.require('cordova/exec')(null,null,'UriResolverTestPlugin1', 'foo', [x.responseText, x.status])");
+ execPayload = null;
+ execStatus = null;
+ try {
+ synchronized (this) {
+ this.wait(2000);
+ }
+ } catch (InterruptedException e) {
+ }
+ assertEquals("pass", execPayload);
+ assertEquals(execStatus.intValue(), 200);
+ }
+
+ public void testWebViewWhiteListRejection() throws IOException
+ {
+ cordovaWebView.sendJavascript(
+ "var x = new XMLHttpRequest;\n" +
+ "x.open('GET', 'http://foo/bar', false);\n" +
+ "x.send();\n" +
+ "cordova.require('cordova/exec')(null,null,'UriResolverTestPlugin1', 'foo', [x.responseText, x.status])");
+ execPayload = null;
+ execStatus = null;
+ try {
+ synchronized (this) {
+ this.wait(2000);
+ }
+ } catch (InterruptedException e) {
+ }
+ assertEquals("", execPayload);
+ assertEquals(execStatus.intValue(), 404);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/892ffc8c/test/src/org/apache/cordova/test/actions/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/actions/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/actions/CordovaWebViewTestActivity.java
index 1185bad..3be5ab2 100644
--- a/test/src/org/apache/cordova/test/actions/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/actions/CordovaWebViewTestActivity.java
@@ -36,7 +36,7 @@ import android.content.Intent;
import android.os.Bundle;
public class CordovaWebViewTestActivity extends Activity implements CordovaInterface {
- CordovaWebView cordovaWebView;
+ public CordovaWebView cordovaWebView;
private final ExecutorService threadPool = Executors.newCachedThreadPool();
[43/50] [abbrv] android commit: Explicitly print exceptions that
occur within ExposedJsApi.
Posted by ag...@apache.org.
Explicitly print exceptions that occur within ExposedJsApi.
Before they trickled into JNI and the stack traces were lost.
(cherry picked from commit 10d31ea0a30ec47d68c79813d56e7506b1542f7e)
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/f42e5f66
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/f42e5f66
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/f42e5f66
Branch: refs/heads/master
Commit: f42e5f66fdd79a730b4552f5813fbfbcfc607533
Parents: 16e0838
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Jun 26 14:20:45 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Jun 26 14:21:48 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/ExposedJsApi.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f42e5f66/framework/src/org/apache/cordova/ExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ExposedJsApi.java b/framework/src/org/apache/cordova/ExposedJsApi.java
index 40ab1e3..221dd3d 100755
--- a/framework/src/org/apache/cordova/ExposedJsApi.java
+++ b/framework/src/org/apache/cordova/ExposedJsApi.java
@@ -54,6 +54,9 @@ import org.json.JSONException;
ret = jsMessageQueue.popAndEncode();
}
return ret;
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "";
} finally {
jsMessageQueue.setPaused(false);
}
[05/50] [abbrv] android commit: removed batter code from js
Posted by ag...@apache.org.
removed batter code from js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/7c22bc74
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/7c22bc74
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/7c22bc74
Branch: refs/heads/master
Commit: 7c22bc74bc79ac24ddc581c39f99c50289035bd4
Parents: dfd668d
Author: Steven Gill <st...@gmail.com>
Authored: Mon May 20 17:40:11 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon May 20 17:40:11 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 98 +-----------------------------------
1 file changed, 2 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/7c22bc74/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 4650ab2..8202173 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-80-geda98d1
+// 2.7.0rc1-81-gc09114e
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-80-geda98d1';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-81-gc09114e';
// file: lib/scripts/require.js
var require,
@@ -4114,100 +4114,6 @@ modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDataba
});
-// file: lib/common/plugin/battery.js
-define("cordova/plugin/battery", function(require, exports, module) {
-
-/**
- * This class contains information about the current battery status.
- * @constructor
- */
-var cordova = require('cordova'),
- exec = require('cordova/exec');
-
-function handlers() {
- return battery.channels.batterystatus.numHandlers +
- battery.channels.batterylow.numHandlers +
- battery.channels.batterycritical.numHandlers;
-}
-
-var Battery = function() {
- this._level = null;
- this._isPlugged = null;
- // Create new event handlers on the window (returns a channel instance)
- this.channels = {
- batterystatus:cordova.addWindowEventHandler("batterystatus"),
- batterylow:cordova.addWindowEventHandler("batterylow"),
- batterycritical:cordova.addWindowEventHandler("batterycritical")
- };
- for (var key in this.channels) {
- this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange;
- }
-};
-/**
- * Event handlers for when callbacks get registered for the battery.
- * Keep track of how many handlers we have so we can start and stop the native battery listener
- * appropriately (and hopefully save on battery life!).
- */
-Battery.onHasSubscribersChange = function() {
- // If we just registered the first handler, make sure native listener is started.
- if (this.numHandlers === 1 && handlers() === 1) {
- exec(battery._status, battery._error, "Battery", "start", []);
- } else if (handlers() === 0) {
- exec(null, null, "Battery", "stop", []);
- }
-};
-
-/**
- * Callback for battery status
- *
- * @param {Object} info keys: level, isPlugged
- */
-Battery.prototype._status = function(info) {
- if (info) {
- var me = battery;
- var level = info.level;
- if (me._level !== level || me._isPlugged !== info.isPlugged) {
- // Fire batterystatus event
- cordova.fireWindowEvent("batterystatus", info);
-
- // Fire low battery event
- if (level === 20 || level === 5) {
- if (level === 20) {
- cordova.fireWindowEvent("batterylow", info);
- }
- else {
- cordova.fireWindowEvent("batterycritical", info);
- }
- }
- }
- me._level = level;
- me._isPlugged = info.isPlugged;
- }
-};
-
-/**
- * Error callback for battery start
- */
-Battery.prototype._error = function(e) {
- console.log("Error initializing Battery: " + e);
-};
-
-var battery = new Battery();
-
-module.exports = battery;
-
-});
-
-// file: lib/common/plugin/battery/symbols.js
-define("cordova/plugin/battery/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/battery', 'navigator.battery');
-
-});
-
// file: lib/common/plugin/camera/symbols.js
define("cordova/plugin/camera/symbols", function(require, exports, module) {
[28/50] [abbrv] android commit: CB-3932 Remove baseUrl comment in
handleDestroy method made redundant by CB-3766
Posted by ag...@apache.org.
CB-3932 Remove baseUrl comment in handleDestroy method made redundant by CB-3766
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/3a140177
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/3a140177
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/3a140177
Branch: refs/heads/2.9.x
Commit: 3a14017729cacf2464c5e78e0a76c2471ffec0fc
Parents: 4ec3d6d
Author: Angela Fowler <an...@fast.au.fujitsu.com>
Authored: Wed Jun 19 15:22:42 2013 +1000
Committer: Angela Fowler <an...@fast.au.fujitsu.com>
Committed: Wed Jun 19 15:22:42 2013 +1000
----------------------------------------------------------------------
framework/src/org/apache/cordova/CordovaWebView.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/3a140177/framework/src/org/apache/cordova/CordovaWebView.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java
index e1d1bf1..67775a1 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -805,7 +805,6 @@ public class CordovaWebView extends WebView {
public void handleDestroy()
{
// Send destroy event to JavaScript
- // Since baseUrl is set in loadUrlIntoView, if user hit Back button before loadUrl was called, we'll get an NPE on baseUrl (CB-2458)
this.loadUrl("javascript:try{cordova.require('cordova/channel').onDestroy.fire();}catch(e){console.log('exception firing destroy event from native');};");
// Load blank page so that JavaScript onunload is called
[13/50] [abbrv] android commit: updated js
Posted by ag...@apache.org.
updated js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/3a559914
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/3a559914
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/3a559914
Branch: refs/heads/master
Commit: 3a559914808ac40cf986c51e7e47b4d83fe22588
Parents: 9e44596
Author: Steven Gill <st...@gmail.com>
Authored: Thu Jun 13 14:54:30 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu Jun 13 14:54:30 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 417 +----------------------------------
1 file changed, 2 insertions(+), 415 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/3a559914/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 8973d5f..a90b232 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-100-g6a53312
+// 2.7.0rc1-101-gc6482ac
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-100-g6a53312';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-101-gc6482ac';
// file: lib/scripts/require.js
var require,
@@ -2763,32 +2763,6 @@ module.exports = Flags;
});
-// file: lib/common/plugin/GlobalizationError.js
-define("cordova/plugin/GlobalizationError", function(require, exports, module) {
-
-
-/**
- * Globalization error object
- *
- * @constructor
- * @param code
- * @param message
- */
-var GlobalizationError = function(code, message) {
- this.code = code || null;
- this.message = message || '';
-};
-
-// Globalization error codes
-GlobalizationError.UNKNOWN_ERROR = 0;
-GlobalizationError.FORMATTING_ERROR = 1;
-GlobalizationError.PARSING_ERROR = 2;
-GlobalizationError.PATTERN_ERROR = 3;
-
-module.exports = GlobalizationError;
-
-});
-
// file: lib/common/plugin/LocalFileSystem.js
define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
@@ -4090,393 +4064,6 @@ modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError');
});
-// file: lib/common/plugin/globalization.js
-define("cordova/plugin/globalization", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- GlobalizationError = require('cordova/plugin/GlobalizationError');
-
-var globalization = {
-
-/**
-* Returns the string identifier for the client's current language.
-* It returns the language identifier string to the successCB callback with a
-* properties object as a parameter. If there is an error getting the language,
-* then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {String}: The language identifier
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getPreferredLanguage(function (language) {alert('language:' + language.value + '\n');},
-* function () {});
-*/
-getPreferredLanguage:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getPreferredLanguage', arguments);
- exec(successCB, failureCB, "Globalization","getPreferredLanguage", []);
-},
-
-/**
-* Returns the string identifier for the client's current locale setting.
-* It returns the locale identifier string to the successCB callback with a
-* properties object as a parameter. If there is an error getting the locale,
-* then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {String}: The locale identifier
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getLocaleName(function (locale) {alert('locale:' + locale.value + '\n');},
-* function () {});
-*/
-getLocaleName:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getLocaleName', arguments);
- exec(successCB, failureCB, "Globalization","getLocaleName", []);
-},
-
-
-/**
-* Returns a date formatted as a string according to the client's user preferences and
-* calendar using the time zone of the client. It returns the formatted date string to the
-* successCB callback with a properties object as a parameter. If there is an error
-* formatting the date, then the errorCB callback is invoked.
-*
-* The defaults are: formatLenght="short" and selector="date and time"
-*
-* @param {Date} date
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.value {String}: The localized date string
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.dateToString(new Date(),
-* function (date) {alert('date:' + date.value + '\n');},
-* function (errorCode) {alert(errorCode);},
-* {formatLength:'short'});
-*/
-dateToString:function(date, successCB, failureCB, options) {
- argscheck.checkArgs('dfFO', 'Globalization.dateToString', arguments);
- var dateValue = date.valueOf();
- exec(successCB, failureCB, "Globalization", "dateToString", [{"date": dateValue, "options": options}]);
-},
-
-
-/**
-* Parses a date formatted as a string according to the client's user
-* preferences and calendar using the time zone of the client and returns
-* the corresponding date object. It returns the date to the successCB
-* callback with a properties object as a parameter. If there is an error
-* parsing the date string, then the errorCB callback is invoked.
-*
-* The defaults are: formatLength="short" and selector="date and time"
-*
-* @param {String} dateString
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.year {Number}: The four digit year
-* Object.month {Number}: The month from (0 - 11)
-* Object.day {Number}: The day from (1 - 31)
-* Object.hour {Number}: The hour from (0 - 23)
-* Object.minute {Number}: The minute from (0 - 59)
-* Object.second {Number}: The second from (0 - 59)
-* Object.millisecond {Number}: The milliseconds (from 0 - 999),
-* not available on all platforms
-*
-* @error GlobalizationError.PARSING_ERROR
-*
-* Example
-* globalization.stringToDate('4/11/2011',
-* function (date) { alert('Month:' + date.month + '\n' +
-* 'Day:' + date.day + '\n' +
-* 'Year:' + date.year + '\n');},
-* function (errorCode) {alert(errorCode);},
-* {selector:'date'});
-*/
-stringToDate:function(dateString, successCB, failureCB, options) {
- argscheck.checkArgs('sfFO', 'Globalization.stringToDate', arguments);
- exec(successCB, failureCB, "Globalization", "stringToDate", [{"dateString": dateString, "options": options}]);
-},
-
-
-/**
-* Returns a pattern string for formatting and parsing dates according to the client's
-* user preferences. It returns the pattern to the successCB callback with a
-* properties object as a parameter. If there is an error obtaining the pattern,
-* then the errorCB callback is invoked.
-*
-* The defaults are: formatLength="short" and selector="date and time"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* formatLength {String}: 'short', 'medium', 'long', or 'full'
-* selector {String}: 'date', 'time', or 'date and time'
-*
-* @return Object.pattern {String}: The date and time pattern for formatting and parsing dates.
-* The patterns follow Unicode Technical Standard #35
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.timezone {String}: The abbreviated name of the time zone on the client
-* Object.utc_offset {Number}: The current difference in seconds between the client's
-* time zone and coordinated universal time.
-* Object.dst_offset {Number}: The current daylight saving time offset in seconds
-* between the client's non-daylight saving's time zone
-* and the client's daylight saving's time zone.
-*
-* @error GlobalizationError.PATTERN_ERROR
-*
-* Example
-* globalization.getDatePattern(
-* function (date) {alert('pattern:' + date.pattern + '\n');},
-* function () {},
-* {formatLength:'short'});
-*/
-getDatePattern:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getDatePattern', arguments);
- exec(successCB, failureCB, "Globalization", "getDatePattern", [{"options": options}]);
-},
-
-
-/**
-* Returns an array of either the names of the months or days of the week
-* according to the client's user preferences and calendar. It returns the array of names to the
-* successCB callback with a properties object as a parameter. If there is an error obtaining the
-* names, then the errorCB callback is invoked.
-*
-* The defaults are: type="wide" and item="months"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'narrow' or 'wide'
-* item {String}: 'months', or 'days'
-*
-* @return Object.value {Array{String}}: The array of names starting from either
-* the first month in the year or the
-* first day of the week.
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getDateNames(function (names) {
-* for(var i = 0; i < names.value.length; i++) {
-* alert('Month:' + names.value[i] + '\n');}},
-* function () {});
-*/
-getDateNames:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getDateNames', arguments);
- exec(successCB, failureCB, "Globalization", "getDateNames", [{"options": options}]);
-},
-
-/**
-* Returns whether daylight savings time is in effect for a given date using the client's
-* time zone and calendar. It returns whether or not daylight savings time is in effect
-* to the successCB callback with a properties object as a parameter. If there is an error
-* reading the date, then the errorCB callback is invoked.
-*
-* @param {Date} date
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.dst {Boolean}: The value "true" indicates that daylight savings time is
-* in effect for the given date and "false" indicate that it is not.
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.isDayLightSavingsTime(new Date(),
-* function (date) {alert('dst:' + date.dst + '\n');}
-* function () {});
-*/
-isDayLightSavingsTime:function(date, successCB, failureCB) {
- argscheck.checkArgs('dfF', 'Globalization.isDayLightSavingsTime', arguments);
- var dateValue = date.valueOf();
- exec(successCB, failureCB, "Globalization", "isDayLightSavingsTime", [{"date": dateValue}]);
-},
-
-/**
-* Returns the first day of the week according to the client's user preferences and calendar.
-* The days of the week are numbered starting from 1 where 1 is considered to be Sunday.
-* It returns the day to the successCB callback with a properties object as a parameter.
-* If there is an error obtaining the pattern, then the errorCB callback is invoked.
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.value {Number}: The number of the first day of the week.
-*
-* @error GlobalizationError.UNKNOWN_ERROR
-*
-* Example
-* globalization.getFirstDayOfWeek(function (day)
-* { alert('Day:' + day.value + '\n');},
-* function () {});
-*/
-getFirstDayOfWeek:function(successCB, failureCB) {
- argscheck.checkArgs('fF', 'Globalization.getFirstDayOfWeek', arguments);
- exec(successCB, failureCB, "Globalization", "getFirstDayOfWeek", []);
-},
-
-
-/**
-* Returns a number formatted as a string according to the client's user preferences.
-* It returns the formatted number string to the successCB callback with a properties object as a
-* parameter. If there is an error formatting the number, then the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {Number} number
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.value {String}: The formatted number string.
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.numberToString(3.25,
-* function (number) {alert('number:' + number.value + '\n');},
-* function () {},
-* {type:'decimal'});
-*/
-numberToString:function(number, successCB, failureCB, options) {
- argscheck.checkArgs('nfFO', 'Globalization.numberToString', arguments);
- exec(successCB, failureCB, "Globalization", "numberToString", [{"number": number, "options": options}]);
-},
-
-/**
-* Parses a number formatted as a string according to the client's user preferences and
-* returns the corresponding number. It returns the number to the successCB callback with a
-* properties object as a parameter. If there is an error parsing the number string, then
-* the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {String} numberString
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.value {Number}: The parsed number.
-*
-* @error GlobalizationError.PARSING_ERROR
-*
-* Example
-* globalization.stringToNumber('1234.56',
-* function (number) {alert('Number:' + number.value + '\n');},
-* function () { alert('Error parsing number');});
-*/
-stringToNumber:function(numberString, successCB, failureCB, options) {
- argscheck.checkArgs('sfFO', 'Globalization.stringToNumber', arguments);
- exec(successCB, failureCB, "Globalization", "stringToNumber", [{"numberString": numberString, "options": options}]);
-},
-
-/**
-* Returns a pattern string for formatting and parsing numbers according to the client's user
-* preferences. It returns the pattern to the successCB callback with a properties object as a
-* parameter. If there is an error obtaining the pattern, then the errorCB callback is invoked.
-*
-* The defaults are: type="decimal"
-*
-* @param {Function} successCB
-* @param {Function} errorCB
-* @param {Object} options {optional}
-* type {String}: 'decimal', "percent", or 'currency'
-*
-* @return Object.pattern {String}: The number pattern for formatting and parsing numbers.
-* The patterns follow Unicode Technical Standard #35.
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.symbol {String}: The symbol to be used when formatting and parsing
-* e.g., percent or currency symbol.
-* Object.fraction {Number}: The number of fractional digits to use when parsing and
-* formatting numbers.
-* Object.rounding {Number}: The rounding increment to use when parsing and formatting.
-* Object.positive {String}: The symbol to use for positive numbers when parsing and formatting.
-* Object.negative: {String}: The symbol to use for negative numbers when parsing and formatting.
-* Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
-* Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
-*
-* @error GlobalizationError.PATTERN_ERROR
-*
-* Example
-* globalization.getNumberPattern(
-* function (pattern) {alert('Pattern:' + pattern.pattern + '\n');},
-* function () {});
-*/
-getNumberPattern:function(successCB, failureCB, options) {
- argscheck.checkArgs('fFO', 'Globalization.getNumberPattern', arguments);
- exec(successCB, failureCB, "Globalization", "getNumberPattern", [{"options": options}]);
-},
-
-/**
-* Returns a pattern string for formatting and parsing currency values according to the client's
-* user preferences and ISO 4217 currency code. It returns the pattern to the successCB callback with a
-* properties object as a parameter. If there is an error obtaining the pattern, then the errorCB
-* callback is invoked.
-*
-* @param {String} currencyCode
-* @param {Function} successCB
-* @param {Function} errorCB
-*
-* @return Object.pattern {String}: The currency pattern for formatting and parsing currency values.
-* The patterns follow Unicode Technical Standard #35
-* http://unicode.org/reports/tr35/tr35-4.html
-* Object.code {String}: The ISO 4217 currency code for the pattern.
-* Object.fraction {Number}: The number of fractional digits to use when parsing and
-* formatting currency.
-* Object.rounding {Number}: The rounding increment to use when parsing and formatting.
-* Object.decimal: {String}: The decimal symbol to use for parsing and formatting.
-* Object.grouping: {String}: The grouping symbol to use for parsing and formatting.
-*
-* @error GlobalizationError.FORMATTING_ERROR
-*
-* Example
-* globalization.getCurrencyPattern('EUR',
-* function (currency) {alert('Pattern:' + currency.pattern + '\n');}
-* function () {});
-*/
-getCurrencyPattern:function(currencyCode, successCB, failureCB) {
- argscheck.checkArgs('sfF', 'Globalization.getCurrencyPattern', arguments);
- exec(successCB, failureCB, "Globalization", "getCurrencyPattern", [{"currencyCode": currencyCode}]);
-}
-
-};
-
-module.exports = globalization;
-
-});
-
-// file: lib/common/plugin/globalization/symbols.js
-define("cordova/plugin/globalization/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/globalization', 'navigator.globalization');
-modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError');
-
-});
-
// file: lib/common/plugin/logger.js
define("cordova/plugin/logger", function(require, exports, module) {
[33/50] [abbrv] android commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/cordova-android
Posted by ag...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/b032dcca
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/b032dcca
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/b032dcca
Branch: refs/heads/2.9.x
Commit: b032dcca1637f37a3152a28f488cc639e1bbd5ea
Parents: 01d6ae5 03c5208
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jun 20 16:33:17 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Thu Jun 20 16:33:17 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 129 ++++++++++++++++++++++++++---------
1 file changed, 97 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
[24/50] [abbrv] android commit: Need to remove reference to device
plugin in template
Posted by ag...@apache.org.
Need to remove reference to device plugin in template
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/c531d97e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/c531d97e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/c531d97e
Branch: refs/heads/master
Commit: c531d97ed27813291d57ce0df5c176fd496c2b43
Parents: 63ab701
Author: Tim Kim <ti...@adobe.com>
Authored: Tue Jun 18 14:26:11 2013 -0700
Committer: Tim Kim <ti...@adobe.com>
Committed: Tue Jun 18 14:26:11 2013 -0700
----------------------------------------------------------------------
framework/res/xml/config.xml | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/c531d97e/framework/res/xml/config.xml
----------------------------------------------------------------------
diff --git a/framework/res/xml/config.xml b/framework/res/xml/config.xml
index 05c1416..93edda6 100644
--- a/framework/res/xml/config.xml
+++ b/framework/res/xml/config.xml
@@ -43,9 +43,7 @@
<preference name="InAppBrowserStorageEnabled" value="true" />
<preference name="disallowOverscroll" value="true" />
-->
- <feature name="Device">
- <param name="android-package" value="org.apache.cordova.Device"/>
- </feature>
+
<!-- Deprecated plugins element. Remove in 3.0 -->
<plugins>
</plugins>
[08/50] [abbrv] android commit: removed contacts from js
Posted by ag...@apache.org.
removed contacts from js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/98d99016
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/98d99016
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/98d99016
Branch: refs/heads/master
Commit: 98d9901693591f29e6ccf160269328610406584a
Parents: 75f358d
Author: Steven Gill <st...@gmail.com>
Authored: Thu May 23 15:18:39 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu May 23 15:18:39 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 152 +----------------------------------
1 file changed, 2 insertions(+), 150 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/98d99016/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index cf7ca8f..f3c20a7 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-83-g658fd32
+// 2.7.0rc1-84-gdba3744
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-83-g658fd32';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-84-gdba3744';
// file: lib/scripts/require.js
var require,
@@ -1159,142 +1159,6 @@ module.exports = {
});
-// file: lib/common/plugin/Camera.js
-define("cordova/plugin/Camera", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- Camera = require('cordova/plugin/CameraConstants'),
- CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle');
-
-var cameraExport = {};
-
-// Tack on the Camera Constants to the base camera plugin.
-for (var key in Camera) {
- cameraExport[key] = Camera[key];
-}
-
-/**
- * Gets a picture from source defined by "options.sourceType", and returns the
- * image as defined by the "options.destinationType" option.
-
- * The defaults are sourceType=CAMERA and destinationType=FILE_URI.
- *
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-cameraExport.getPicture = function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'Camera.getPicture', arguments);
- options = options || {};
- var getValue = argscheck.getValue;
-
- var quality = getValue(options.quality, 50);
- var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI);
- var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA);
- var targetWidth = getValue(options.targetWidth, -1);
- var targetHeight = getValue(options.targetHeight, -1);
- var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG);
- var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE);
- var allowEdit = !!options.allowEdit;
- var correctOrientation = !!options.correctOrientation;
- var saveToPhotoAlbum = !!options.saveToPhotoAlbum;
- var popoverOptions = getValue(options.popoverOptions, null);
- var cameraDirection = getValue(options.cameraDirection, Camera.Direction.BACK);
-
- var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType,
- mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions, cameraDirection];
-
- exec(successCallback, errorCallback, "Camera", "takePicture", args);
- return new CameraPopoverHandle();
-};
-
-cameraExport.cleanup = function(successCallback, errorCallback) {
- exec(successCallback, errorCallback, "Camera", "cleanup", []);
-};
-
-module.exports = cameraExport;
-
-});
-
-// file: lib/common/plugin/CameraConstants.js
-define("cordova/plugin/CameraConstants", function(require, exports, module) {
-
-module.exports = {
- DestinationType:{
- DATA_URL: 0, // Return base64 encoded string
- FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android)
- NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS)
- },
- EncodingType:{
- JPEG: 0, // Return JPEG encoded image
- PNG: 1 // Return PNG encoded image
- },
- MediaType:{
- PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType
- VIDEO: 1, // allow selection of video only, ONLY RETURNS URL
- ALLMEDIA : 2 // allow selection from all media types
- },
- PictureSourceType:{
- PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android)
- CAMERA : 1, // Take picture from camera
- SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android)
- },
- PopoverArrowDirection:{
- ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover
- ARROW_DOWN : 2,
- ARROW_LEFT : 4,
- ARROW_RIGHT : 8,
- ARROW_ANY : 15
- },
- Direction:{
- BACK: 0,
- FRONT: 1
- }
-};
-
-});
-
-// file: lib/common/plugin/CameraPopoverHandle.js
-define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * A handle to an image picker popover.
- */
-var CameraPopoverHandle = function() {
- this.setPosition = function(popoverOptions) {
- console.log('CameraPopoverHandle.setPosition is only supported on iOS.');
- };
-};
-
-module.exports = CameraPopoverHandle;
-
-});
-
-// file: lib/common/plugin/CameraPopoverOptions.js
-define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) {
-
-var Camera = require('cordova/plugin/CameraConstants');
-
-/**
- * Encapsulates options for iOS Popover image picker
- */
-var CameraPopoverOptions = function(x,y,width,height,arrowDir){
- // information of rectangle that popover should be anchored to
- this.x = x || 0;
- this.y = y || 32;
- this.width = width || 320;
- this.height = height || 480;
- // The direction of the popover arrow
- this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY;
-};
-
-module.exports = CameraPopoverOptions;
-
-});
-
// file: lib/common/plugin/CaptureAudioOptions.js
define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
@@ -3798,18 +3662,6 @@ modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDataba
});
-// file: lib/common/plugin/camera/symbols.js
-define("cordova/plugin/camera/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Camera', 'navigator.camera');
-modulemapper.defaults('cordova/plugin/CameraConstants', 'Camera');
-modulemapper.defaults('cordova/plugin/CameraPopoverOptions', 'CameraPopoverOptions');
-
-});
-
// file: lib/common/plugin/capture.js
define("cordova/plugin/capture", function(require, exports, module) {
[50/50] [abbrv] android commit: [CB-4048] Merge branch '3.0.0' into
master
Posted by ag...@apache.org.
[CB-4048] Merge branch '3.0.0' into master
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/a97487bc
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/a97487bc
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/a97487bc
Branch: refs/heads/master
Commit: a97487bcec2b9bc2e44428dc8b44b151a838391c
Parents: 892ffc8 3b7e050
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Jun 28 11:59:54 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Jun 28 11:59:54 2013 -0400
----------------------------------------------------------------------
bin/templates/project/AndroidManifest.xml | 18 +-
framework/AndroidManifest.xml | 4 -
framework/assets/www/cordova.js | 5357 ++----------------
framework/res/xml/config.xml | 57 -
.../src/org/apache/cordova/AccelListener.java | 285 -
framework/src/org/apache/cordova/App.java | 221 -
.../src/org/apache/cordova/AudioHandler.java | 357 --
.../src/org/apache/cordova/AudioPlayer.java | 553 --
.../src/org/apache/cordova/BatteryListener.java | 163 -
.../src/org/apache/cordova/CameraLauncher.java | 807 ---
framework/src/org/apache/cordova/Capture.java | 445 --
.../src/org/apache/cordova/CompassListener.java | 295 -
.../src/org/apache/cordova/ContactAccessor.java | 198 -
.../org/apache/cordova/ContactAccessorSdk5.java | 2174 -------
.../src/org/apache/cordova/ContactManager.java | 122 -
.../apache/cordova/CordovaLocationListener.java | 251 -
framework/src/org/apache/cordova/Device.java | 199 -
.../org/apache/cordova/DirectoryManager.java | 8 +-
framework/src/org/apache/cordova/Echo.java | 48 -
.../org/apache/cordova/FileProgressResult.java | 63 -
.../src/org/apache/cordova/FileTransfer.java | 923 ---
.../org/apache/cordova/FileUploadResult.java | 73 -
framework/src/org/apache/cordova/FileUtils.java | 1065 ----
.../src/org/apache/cordova/GPSListener.java | 50 -
framework/src/org/apache/cordova/GeoBroker.java | 206 -
.../src/org/apache/cordova/Globalization.java | 578 --
.../org/apache/cordova/GlobalizationError.java | 108 -
.../src/org/apache/cordova/HttpHandler.java | 86 -
.../src/org/apache/cordova/InAppBrowser.java | 835 ---
.../src/org/apache/cordova/NetworkListener.java | 32 -
.../src/org/apache/cordova/NetworkManager.java | 248 -
.../src/org/apache/cordova/Notification.java | 448 --
.../src/org/apache/cordova/SplashScreen.java | 43 -
framework/src/org/apache/cordova/Storage.java | 244 -
34 files changed, 507 insertions(+), 16057 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/a97487bc/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --cc framework/assets/www/cordova.js
index b072c81,33cc366..a7a1b38
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@@ -1,5 -1,5 +1,5 @@@
// Platform: android
- // 2.9.0rc1-0-g002f33d
-// 2.7.0rc1-120-g8731b31
++// 2.7.0rc1-154-g98a62ff
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@@ -19,7 -19,7 +19,7 @@@
under the License.
*/
;(function() {
- var CORDOVA_JS_BUILD_LABEL = '2.9.0rc1-0-g002f33d';
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-120-g8731b31';
++var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-154-g98a62ff';
// file: lib/scripts/require.js
var require,
@@@ -376,7 -376,7 +376,7 @@@ function checkArgs(spec, functionName,
if (errMsg) {
errMsg += ', but got ' + typeName + '.';
errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg;
-- // Don't log when running jake test.
++ // Don't log when running unit tests.
if (typeof jasmine == 'undefined') {
console.error(errMsg);
}
@@@ -6782,6 -2427,6 +2427,8 @@@ window.cordova = require('cordova')
// file: lib/scripts/bootstrap-android.js
++// Tell the native code that a page change has occurred.
++require('cordova/exec')(null, null, 'PluginManager', 'startup', []);
require('cordova/channel').onNativeReady.fire();
// file: lib/scripts/plugin_loader.js
[31/50] [abbrv] android commit: CB-3854: Added support for wildcard.
This probably could be improved, but it does work
Posted by ag...@apache.org.
CB-3854: Added support for wildcard. This probably could be improved, but it does work
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/f1b377bf
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/f1b377bf
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/f1b377bf
Branch: refs/heads/2.9.x
Commit: f1b377bf070099c3e437fd9a2e2d516d6bfea42b
Parents: 3ace934
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jun 20 16:32:18 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Thu Jun 20 16:32:18 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/Config.java | 25 ++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/f1b377bf/framework/src/org/apache/cordova/Config.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Config.java b/framework/src/org/apache/cordova/Config.java
index c2ced34..a10ed81 100644
--- a/framework/src/org/apache/cordova/Config.java
+++ b/framework/src/org/apache/cordova/Config.java
@@ -203,6 +203,20 @@ public class Config {
self._addWhiteListEntry(origin, subdomains);
}
+ /*
+ * Trying to figure out how to match * is a pain
+ * So, we don't use a regex here
+ */
+
+ private boolean originHasWildcard(String origin){
+ //First, check for a protocol, then split it if it has one.
+ if(origin.contains("//"))
+ {
+ origin = origin.split("//")[1];
+ }
+ origin.matches("\\*\\.[a-z]+\\.[a-z]+");
+ return origin.startsWith("*");
+ }
private void _addWhiteListEntry(String origin, boolean subdomains) {
try {
@@ -210,8 +224,16 @@ public class Config {
if (origin.compareTo("*") == 0) {
LOG.d(TAG, "Unlimited access to network resources");
this.whiteList.add(Pattern.compile(".*"));
- } else { // specific access
+ }
+ else { // specific access
// check if subdomains should be included
+ if(originHasWildcard(origin))
+ {
+ subdomains = true;
+ //Remove the wildcard so this works properly
+ origin = origin.replace("*.", "");
+ }
+
// TODO: we should not add more domains if * has already been added
Pattern schemeRegex = Pattern.compile("^[a-z-]+://");
Matcher matcher = schemeRegex.matcher(origin);
@@ -250,6 +272,7 @@ public class Config {
}
}
+
/**
* Determine if URL is in approved list of URLs to load.
*
[30/50] [abbrv] android commit: Update JS snapshot to version
2.9.0rc1 (via coho)
Posted by ag...@apache.org.
Update JS snapshot to version 2.9.0rc1 (via coho)
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/03c5208d
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/03c5208d
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/03c5208d
Branch: refs/heads/2.9.x
Commit: 03c5208d472a066382b8ec8c885f200e35f02c4c
Parents: 3ace934
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jun 20 15:21:58 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jun 20 15:21:58 2013 -0400
----------------------------------------------------------------------
framework/assets/www/cordova.js | 129 ++++++++++++++++++++++++++---------
1 file changed, 97 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/03c5208d/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index e638234..b072c81 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-75-g76065a1
+// 2.9.0rc1-0-g002f33d
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-75-g76065a1';
+var CORDOVA_JS_BUILD_LABEL = '2.9.0rc1-0-g002f33d';
// file: lib/scripts/require.js
var require,
@@ -2396,11 +2396,7 @@ function initRead(reader, file) {
reader._error = null;
reader._readyState = FileReader.LOADING;
- if (typeof file == 'string') {
- // Deprecated in Cordova 2.4.
- console.warn('Using a string argument with FileReader.readAs functions is deprecated.');
- reader._fileName = file;
- } else if (typeof file.fullPath == 'string') {
+ if (typeof file.fullPath == 'string') {
reader._fileName = file.fullPath;
} else {
reader._fileName = '';
@@ -3063,9 +3059,31 @@ FileWriter.prototype.abort = function() {
/**
* Writes data to the file
*
- * @param text to be written
+ * @param data text or blob to be written
*/
-FileWriter.prototype.write = function(text) {
+FileWriter.prototype.write = function(data) {
+
+ var isBinary = false;
+
+ // If we don't have Blob or ArrayBuffer support, don't bother.
+ if (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined') {
+
+ // Check to see if the incoming data is a blob
+ if (data instanceof Blob) {
+ var that=this;
+ var fileReader = new FileReader();
+ fileReader.onload = function() {
+ // Call this method again, with the arraybuffer as argument
+ FileWriter.prototype.write.call(that, this.result);
+ };
+ fileReader.readAsArrayBuffer(data);
+ return;
+ }
+
+ // Mark data type for safer transport over the binary bridge
+ isBinary = (data instanceof ArrayBuffer);
+ }
+
// Throw an exception if we are already writing a file
if (this.readyState === FileWriter.WRITING) {
throw new FileError(FileError.INVALID_STATE_ERR);
@@ -3131,7 +3149,7 @@ FileWriter.prototype.write = function(text) {
if (typeof me.onwriteend === "function") {
me.onwriteend(new ProgressEvent("writeend", {"target":me}));
}
- }, "File", "write", [this.fileName, text, this.position]);
+ }, "File", "write", [this.fileName, data, this.position, isBinary]);
};
/**
@@ -3317,6 +3335,9 @@ InAppBrowser.prototype = {
close: function (eventname) {
exec(null, null, "InAppBrowser", "close", []);
},
+ show: function (eventname) {
+ exec(null, null, "InAppBrowser", "show", []);
+ },
addEventListener: function (eventname,f) {
if (eventname in this.channels) {
this.channels[eventname].subscribe(f);
@@ -6780,11 +6801,21 @@ require('cordova/channel').onNativeReady.fire();
}
}
+ function scriptErrorCallback(err) {
+ // Open Question: If a script path specified in cordova_plugins.js does not exist, do we fail for all?
+ // this is currently just continuing.
+ scriptCounter--;
+ if (scriptCounter === 0) {
+ onScriptLoadingComplete && onScriptLoadingComplete();
+ }
+ }
+
// Helper function to inject a <script> tag.
function injectScript(path) {
scriptCounter++;
var script = document.createElement("script");
script.onload = scriptLoadedCallback;
+ script.onerror = scriptErrorCallback;
script.src = path;
document.head.appendChild(script);
}
@@ -6796,10 +6827,10 @@ require('cordova/channel').onNativeReady.fire();
context.cordova.require('cordova/channel').onPluginsReady.fire();
}
- // Handler for the cordova_plugins.json content.
+ // Handler for the cordova_plugins.js content.
// See plugman's plugin_loader.js for the details of this object.
// This function is only called if the really is a plugins array that isn't empty.
- // Otherwise the XHR response handler will just call finishPluginLoading().
+ // Otherwise the onerror response handler will just call finishPluginLoading().
function handlePluginsObject(modules, path) {
// First create the callback for when all plugins are loaded.
var mapper = context.cordova.require('cordova/modulemapper');
@@ -6807,26 +6838,31 @@ require('cordova/channel').onNativeReady.fire();
// Loop through all the plugins and then through their clobbers and merges.
for (var i = 0; i < modules.length; i++) {
var module = modules[i];
- if (!module) continue;
-
- if (module.clobbers && module.clobbers.length) {
- for (var j = 0; j < module.clobbers.length; j++) {
- mapper.clobbers(module.id, module.clobbers[j]);
+ if (module) {
+ try {
+ if (module.clobbers && module.clobbers.length) {
+ for (var j = 0; j < module.clobbers.length; j++) {
+ mapper.clobbers(module.id, module.clobbers[j]);
+ }
+ }
+
+ if (module.merges && module.merges.length) {
+ for (var k = 0; k < module.merges.length; k++) {
+ mapper.merges(module.id, module.merges[k]);
+ }
+ }
+
+ // Finally, if runs is truthy we want to simply require() the module.
+ // This can be skipped if it had any merges or clobbers, though,
+ // since the mapper will already have required the module.
+ if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) {
+ context.cordova.require(module.id);
+ }
}
- }
-
- if (module.merges && module.merges.length) {
- for (var k = 0; k < module.merges.length; k++) {
- mapper.merges(module.id, module.merges[k]);
+ catch(err) {
+ // error with module, most likely clobbers, should we continue?
}
}
-
- // Finally, if runs is truthy we want to simply require() the module.
- // This can be skipped if it had any merges or clobbers, though,
- // since the mapper will already have required the module.
- if (module.runs && !(module.clobbers && module.clobbers.length) && !(module.merges && module.merges.length)) {
- context.cordova.require(module.id);
- }
}
finishPluginLoading();
@@ -6849,6 +6885,33 @@ require('cordova/channel').onNativeReady.fire();
break;
}
}
+
+ var plugins_json = path + 'cordova_plugins.json';
+ var plugins_js = path + 'cordova_plugins.js';
+
+ // One some phones (Windows) this xhr.open throws an Access Denied exception
+ // So lets keep trying, but with a script tag injection technique instead of XHR
+ var injectPluginScript = function injectPluginScript() {
+ try {
+ var script = document.createElement("script");
+ script.onload = function(){
+ var list = cordova.require("cordova/plugin_list");
+ handlePluginsObject(list,path);
+ };
+ script.onerror = function() {
+ // Error loading cordova_plugins.js, file not found or something
+ // this is an acceptable error, pre-3.0.0, so we just move on.
+ finishPluginLoading();
+ };
+ script.src = plugins_js;
+ document.head.appendChild(script);
+
+ } catch(err){
+ finishPluginLoading();
+ }
+ }
+
+
// Try to XHR the cordova_plugins.json file asynchronously.
var xhr = new XMLHttpRequest();
xhr.onload = function() {
@@ -6867,14 +6930,16 @@ require('cordova/channel').onNativeReady.fire();
}
};
xhr.onerror = function() {
- finishPluginLoading();
+ // In this case, the json file was not present, but XHR was allowed,
+ // so we should still try the script injection technique with the js file
+ // in case that is there.
+ injectPluginScript();
};
- var plugins_json = path + 'cordova_plugins.json';
try { // we commented we were going to try, so let us actually try and catch
xhr.open('GET', plugins_json, true); // Async
xhr.send();
} catch(err){
- finishPluginLoading();
+ injectPluginScript();
}
}(window));
[04/50] [abbrv] android commit: removed inappbrowser from cordovajs
Posted by ag...@apache.org.
removed inappbrowser from cordovajs
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/dfd668d1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/dfd668d1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/dfd668d1
Branch: refs/heads/master
Commit: dfd668d1455084088924531f3fa5e4f6b4dae76e
Parents: dbc6dd7
Author: Steven Gill <st...@gmail.com>
Authored: Mon May 20 15:01:50 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon May 20 15:01:50 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 144 ++++++++++++++---------------------
1 file changed, 56 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/dfd668d1/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 80bfa16..4650ab2 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-79-g8ac64ca
+// 2.7.0rc1-80-geda98d1
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-79-g8ac64ca';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-80-geda98d1';
// file: lib/scripts/require.js
var require,
@@ -1725,6 +1725,60 @@ module.exports = ContactOrganization;
});
+// file: lib/common/plugin/Coordinates.js
+define("cordova/plugin/Coordinates", function(require, exports, module) {
+
+/**
+ * This class contains position information.
+ * @param {Object} lat
+ * @param {Object} lng
+ * @param {Object} alt
+ * @param {Object} acc
+ * @param {Object} head
+ * @param {Object} vel
+ * @param {Object} altacc
+ * @constructor
+ */
+var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
+ /**
+ * The latitude of the position.
+ */
+ this.latitude = lat;
+ /**
+ * The longitude of the position,
+ */
+ this.longitude = lng;
+ /**
+ * The accuracy of the position.
+ */
+ this.accuracy = acc;
+ /**
+ * The altitude of the position.
+ */
+ this.altitude = (alt !== undefined ? alt : null);
+ /**
+ * The direction the device is moving at the position.
+ */
+ this.heading = (head !== undefined ? head : null);
+ /**
+ * The velocity with which the device is moving at the position.
+ */
+ this.speed = (vel !== undefined ? vel : null);
+
+ if (this.speed === 0 || this.speed === null) {
+ this.heading = NaN;
+ }
+
+ /**
+ * The altitude accuracy of the position.
+ */
+ this.altitudeAccuracy = (altacc !== undefined) ? altacc : null;
+};
+
+module.exports = Coordinates;
+
+});
+
// file: lib/common/plugin/DirectoryEntry.js
define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
@@ -3191,82 +3245,6 @@ module.exports = GlobalizationError;
});
-// file: lib/common/plugin/InAppBrowser.js
-define("cordova/plugin/InAppBrowser", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-var channel = require('cordova/channel');
-var modulemapper = require('cordova/modulemapper');
-
-function InAppBrowser() {
- this.channels = {
- 'loadstart': channel.create('loadstart'),
- 'loadstop' : channel.create('loadstop'),
- 'loaderror' : channel.create('loaderror'),
- 'exit' : channel.create('exit')
- };
-}
-
-InAppBrowser.prototype = {
- _eventHandler: function (event) {
- if (event.type in this.channels) {
- this.channels[event.type].fire(event);
- }
- },
- close: function (eventname) {
- exec(null, null, "InAppBrowser", "close", []);
- },
- addEventListener: function (eventname,f) {
- if (eventname in this.channels) {
- this.channels[eventname].subscribe(f);
- }
- },
- removeEventListener: function(eventname, f) {
- if (eventname in this.channels) {
- this.channels[eventname].unsubscribe(f);
- }
- },
-
- executeScript: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('executeScript requires exactly one of code or file to be specified');
- }
- },
-
- insertCSS: function(injectDetails, cb) {
- if (injectDetails.code) {
- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
- } else if (injectDetails.file) {
- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
- } else {
- throw new Error('insertCSS requires exactly one of code or file to be specified');
- }
- }
-};
-
-module.exports = function(strUrl, strWindowName, strWindowFeatures) {
- var iab = new InAppBrowser();
- var cb = function(eventname) {
- iab._eventHandler(eventname);
- };
-
- // Don't catch calls that write to existing frames (e.g. named iframes).
- if (window.frames && window.frames[strWindowName]) {
- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
- return origOpenFunc.apply(window, arguments);
- }
-
- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
- return iab;
-};
-
-
-});
-
// file: lib/common/plugin/LocalFileSystem.js
define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
@@ -5132,16 +5110,6 @@ modulemapper.clobbers('cordova/plugin/GlobalizationError', 'GlobalizationError')
});
-// file: lib/android/plugin/inappbrowser/symbols.js
-define("cordova/plugin/inappbrowser/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/InAppBrowser', 'open');
-
-});
-
// file: lib/common/plugin/logger.js
define("cordova/plugin/logger", function(require, exports, module) {
[19/50] [abbrv] android commit: Axed all permissions from template
manifest except for INTERNET. Bumped minSDkVersion to 10.
Posted by ag...@apache.org.
Axed all permissions from template manifest except for INTERNET. Bumped minSDkVersion to 10.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/5ee17878
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/5ee17878
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/5ee17878
Branch: refs/heads/master
Commit: 5ee178789f8d937d011e2975c4c5bac178e0b9d0
Parents: d845736
Author: Fil Maj <ma...@gmail.com>
Authored: Mon Jun 17 11:23:17 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon Jun 17 11:23:17 2013 -0700
----------------------------------------------------------------------
bin/templates/project/AndroidManifest.xml | 18 +-----------------
1 file changed, 1 insertion(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/5ee17878/bin/templates/project/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/bin/templates/project/AndroidManifest.xml b/bin/templates/project/AndroidManifest.xml
index 4a3dcb5..f374a2e 100644
--- a/bin/templates/project/AndroidManifest.xml
+++ b/bin/templates/project/AndroidManifest.xml
@@ -28,23 +28,7 @@
android:anyDensity="true"
/>
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.RECEIVE_SMS" />
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
- <uses-permission android:name="android.permission.RECORD_VIDEO"/>
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- <uses-permission android:name="android.permission.READ_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.BROADCAST_STICKY" />
-
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:hardwareAccelerated="true"
@@ -59,5 +43,5 @@
</activity>
</application>
- <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="__APILEVEL__"/>
+ <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="__APILEVEL__"/>
</manifest>
[39/50] [abbrv] android commit: CB-3949: Adding code to mitigate
broken intents with the application installer
Posted by ag...@apache.org.
CB-3949: Adding code to mitigate broken intents with the application installer
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/b83610a6
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/b83610a6
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/b83610a6
Branch: refs/heads/2.9.x
Commit: b83610a6534d556c0378c634195197112baddcdd
Parents: b032dcc
Author: Joe Bowser <bo...@apache.org>
Authored: Mon Jun 24 11:31:32 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Mon Jun 24 11:31:32 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/CordovaActivity.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/b83610a6/framework/src/org/apache/cordova/CordovaActivity.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaActivity.java b/framework/src/org/apache/cordova/CordovaActivity.java
index 1b7ff5a..a68e546 100755
--- a/framework/src/org/apache/cordova/CordovaActivity.java
+++ b/framework/src/org/apache/cordova/CordovaActivity.java
@@ -250,6 +250,19 @@ public class CordovaActivity extends Activity implements CordovaInterface {
}
}
+ //CB-3949: Workaround for weird Android Launcher Bug!
+ private void checkIntents()
+ {
+ Intent intent = getIntent();
+ String intentAction = intent.getAction();
+ if (!isTaskRoot() && intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null) {
+ if(intentAction.equals(Intent.ACTION_MAIN)) {
+ Log.d("Cordova", "This isn't the root activity. Clearing it and returning to the root activity.");
+ finish();
+ return;
+ }
+ }
+ }
/**
* Called when the activity is first created.
*
@@ -258,6 +271,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
+ checkIntents();
Config.init(this);
LOG.d(TAG, "CordovaActivity.onCreate()");
super.onCreate(savedInstanceState);
[07/50] [abbrv] android commit: removed contact code from js
Posted by ag...@apache.org.
removed contact code from js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/75f358d0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/75f358d0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/75f358d0
Branch: refs/heads/master
Commit: 75f358d01e5053d695d21803d53129dd26b2729a
Parents: f7c97cb
Author: Steven Gill <st...@gmail.com>
Authored: Wed May 22 17:12:13 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Wed May 22 17:12:13 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 398 +----------------------------------
1 file changed, 2 insertions(+), 396 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/75f358d0/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 53fa353..cf7ca8f 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-82-g32587e6
+// 2.7.0rc1-83-g658fd32
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-82-g32587e6';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-83-g658fd32';
// file: lib/scripts/require.js
var require,
@@ -1409,322 +1409,6 @@ module.exports = {
});
-// file: lib/common/plugin/Contact.js
-define("cordova/plugin/Contact", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils');
-
-/**
-* Converts primitives into Complex Object
-* Currently only used for Date fields
-*/
-function convertIn(contact) {
- var value = contact.birthday;
- try {
- contact.birthday = new Date(parseFloat(value));
- } catch (exception){
- console.log("Cordova Contact convertIn error: exception creating date.");
- }
- return contact;
-}
-
-/**
-* Converts Complex objects into primitives
-* Only conversion at present is for Dates.
-**/
-
-function convertOut(contact) {
- var value = contact.birthday;
- if (value !== null) {
- // try to make it a Date object if it is not already
- if (!utils.isDate(value)){
- try {
- value = new Date(value);
- } catch(exception){
- value = null;
- }
- }
- if (utils.isDate(value)){
- value = value.valueOf(); // convert to milliseconds
- }
- contact.birthday = value;
- }
- return contact;
-}
-
-/**
-* Contains information about a single contact.
-* @constructor
-* @param {DOMString} id unique identifier
-* @param {DOMString} displayName
-* @param {ContactName} name
-* @param {DOMString} nickname
-* @param {Array.<ContactField>} phoneNumbers array of phone numbers
-* @param {Array.<ContactField>} emails array of email addresses
-* @param {Array.<ContactAddress>} addresses array of addresses
-* @param {Array.<ContactField>} ims instant messaging user ids
-* @param {Array.<ContactOrganization>} organizations
-* @param {DOMString} birthday contact's birthday
-* @param {DOMString} note user notes about contact
-* @param {Array.<ContactField>} photos
-* @param {Array.<ContactField>} categories
-* @param {Array.<ContactField>} urls contact's web sites
-*/
-var Contact = function (id, displayName, name, nickname, phoneNumbers, emails, addresses,
- ims, organizations, birthday, note, photos, categories, urls) {
- this.id = id || null;
- this.rawId = null;
- this.displayName = displayName || null;
- this.name = name || null; // ContactName
- this.nickname = nickname || null;
- this.phoneNumbers = phoneNumbers || null; // ContactField[]
- this.emails = emails || null; // ContactField[]
- this.addresses = addresses || null; // ContactAddress[]
- this.ims = ims || null; // ContactField[]
- this.organizations = organizations || null; // ContactOrganization[]
- this.birthday = birthday || null;
- this.note = note || null;
- this.photos = photos || null; // ContactField[]
- this.categories = categories || null; // ContactField[]
- this.urls = urls || null; // ContactField[]
-};
-
-/**
-* Removes contact from device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.remove = function(successCB, errorCB) {
- argscheck.checkArgs('FF', 'Contact.remove', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- if (this.id === null) {
- fail(ContactError.UNKNOWN_ERROR);
- }
- else {
- exec(successCB, fail, "Contacts", "remove", [this.id]);
- }
-};
-
-/**
-* Creates a deep copy of this Contact.
-* With the contact ID set to null.
-* @return copy of this Contact
-*/
-Contact.prototype.clone = function() {
- var clonedContact = utils.clone(this);
- clonedContact.id = null;
- clonedContact.rawId = null;
-
- function nullIds(arr) {
- if (arr) {
- for (var i = 0; i < arr.length; ++i) {
- arr[i].id = null;
- }
- }
- }
-
- // Loop through and clear out any id's in phones, emails, etc.
- nullIds(clonedContact.phoneNumbers);
- nullIds(clonedContact.emails);
- nullIds(clonedContact.addresses);
- nullIds(clonedContact.ims);
- nullIds(clonedContact.organizations);
- nullIds(clonedContact.categories);
- nullIds(clonedContact.photos);
- nullIds(clonedContact.urls);
- return clonedContact;
-};
-
-/**
-* Persists contact to device storage.
-* @param successCB success callback
-* @param errorCB error callback
-*/
-Contact.prototype.save = function(successCB, errorCB) {
- argscheck.checkArgs('FFO', 'Contact.save', arguments);
- var fail = errorCB && function(code) {
- errorCB(new ContactError(code));
- };
- var success = function(result) {
- if (result) {
- if (successCB) {
- var fullContact = require('cordova/plugin/contacts').create(result);
- successCB(convertIn(fullContact));
- }
- }
- else {
- // no Entry object returned
- fail(ContactError.UNKNOWN_ERROR);
- }
- };
- var dupContact = convertOut(utils.clone(this));
- exec(success, fail, "Contacts", "save", [dupContact]);
-};
-
-
-module.exports = Contact;
-
-});
-
-// file: lib/common/plugin/ContactAddress.js
-define("cordova/plugin/ContactAddress", function(require, exports, module) {
-
-/**
-* Contact address.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code
-* @param formatted // NOTE: not a W3C standard
-* @param streetAddress
-* @param locality
-* @param region
-* @param postalCode
-* @param country
-*/
-
-var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.formatted = formatted || null;
- this.streetAddress = streetAddress || null;
- this.locality = locality || null;
- this.region = region || null;
- this.postalCode = postalCode || null;
- this.country = country || null;
-};
-
-module.exports = ContactAddress;
-
-});
-
-// file: lib/common/plugin/ContactError.js
-define("cordova/plugin/ContactError", function(require, exports, module) {
-
-/**
- * ContactError.
- * An error code assigned by an implementation when an error has occurred
- * @constructor
- */
-var ContactError = function(err) {
- this.code = (typeof err != 'undefined' ? err : null);
-};
-
-/**
- * Error codes
- */
-ContactError.UNKNOWN_ERROR = 0;
-ContactError.INVALID_ARGUMENT_ERROR = 1;
-ContactError.TIMEOUT_ERROR = 2;
-ContactError.PENDING_OPERATION_ERROR = 3;
-ContactError.IO_ERROR = 4;
-ContactError.NOT_SUPPORTED_ERROR = 5;
-ContactError.PERMISSION_DENIED_ERROR = 20;
-
-module.exports = ContactError;
-
-});
-
-// file: lib/common/plugin/ContactField.js
-define("cordova/plugin/ContactField", function(require, exports, module) {
-
-/**
-* Generic contact field.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param type
-* @param value
-* @param pref
-*/
-var ContactField = function(type, value, pref) {
- this.id = null;
- this.type = (type && type.toString()) || null;
- this.value = (value && value.toString()) || null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
-};
-
-module.exports = ContactField;
-
-});
-
-// file: lib/common/plugin/ContactFindOptions.js
-define("cordova/plugin/ContactFindOptions", function(require, exports, module) {
-
-/**
- * ContactFindOptions.
- * @constructor
- * @param filter used to match contacts against
- * @param multiple boolean used to determine if more than one contact should be returned
- */
-
-var ContactFindOptions = function(filter, multiple) {
- this.filter = filter || '';
- this.multiple = (typeof multiple != 'undefined' ? multiple : false);
-};
-
-module.exports = ContactFindOptions;
-
-});
-
-// file: lib/common/plugin/ContactName.js
-define("cordova/plugin/ContactName", function(require, exports, module) {
-
-/**
-* Contact name.
-* @constructor
-* @param formatted // NOTE: not part of W3C standard
-* @param familyName
-* @param givenName
-* @param middle
-* @param prefix
-* @param suffix
-*/
-var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) {
- this.formatted = formatted || null;
- this.familyName = familyName || null;
- this.givenName = givenName || null;
- this.middleName = middle || null;
- this.honorificPrefix = prefix || null;
- this.honorificSuffix = suffix || null;
-};
-
-module.exports = ContactName;
-
-});
-
-// file: lib/common/plugin/ContactOrganization.js
-define("cordova/plugin/ContactOrganization", function(require, exports, module) {
-
-/**
-* Contact organization.
-* @constructor
-* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
-* @param name
-* @param dept
-* @param title
-* @param startDate
-* @param endDate
-* @param location
-* @param desc
-*/
-
-var ContactOrganization = function(pref, type, name, dept, title) {
- this.id = null;
- this.pref = (typeof pref != 'undefined' ? pref : false);
- this.type = type || null;
- this.name = name || null;
- this.department = dept || null;
- this.title = title || null;
-};
-
-module.exports = ContactOrganization;
-
-});
-
// file: lib/common/plugin/Coordinates.js
define("cordova/plugin/Coordinates", function(require, exports, module) {
@@ -4392,84 +4076,6 @@ for (var key in console) {
});
-// file: lib/common/plugin/contacts.js
-define("cordova/plugin/contacts", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- ContactError = require('cordova/plugin/ContactError'),
- utils = require('cordova/utils'),
- Contact = require('cordova/plugin/Contact');
-
-/**
-* Represents a group of Contacts.
-* @constructor
-*/
-var contacts = {
- /**
- * Returns an array of Contacts matching the search criteria.
- * @param fields that should be searched
- * @param successCB success callback
- * @param errorCB error callback
- * @param {ContactFindOptions} options that can be applied to contact searching
- * @return array of Contacts matching search criteria
- */
- find:function(fields, successCB, errorCB, options) {
- argscheck.checkArgs('afFO', 'contacts.find', arguments);
- if (!fields.length) {
- errorCB && errorCB(new ContactError(ContactError.INVALID_ARGUMENT_ERROR));
- } else {
- var win = function(result) {
- var cs = [];
- for (var i = 0, l = result.length; i < l; i++) {
- cs.push(contacts.create(result[i]));
- }
- successCB(cs);
- };
- exec(win, errorCB, "Contacts", "search", [fields, options]);
- }
- },
-
- /**
- * This function creates a new contact, but it does not persist the contact
- * to device storage. To persist the contact to device storage, invoke
- * contact.save().
- * @param properties an object whose properties will be examined to create a new Contact
- * @returns new Contact object
- */
- create:function(properties) {
- argscheck.checkArgs('O', 'contacts.create', arguments);
- var contact = new Contact();
- for (var i in properties) {
- if (typeof contact[i] !== 'undefined' && properties.hasOwnProperty(i)) {
- contact[i] = properties[i];
- }
- }
- return contact;
- }
-};
-
-module.exports = contacts;
-
-});
-
-// file: lib/common/plugin/contacts/symbols.js
-define("cordova/plugin/contacts/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/contacts', 'navigator.contacts');
-modulemapper.clobbers('cordova/plugin/Contact', 'Contact');
-modulemapper.clobbers('cordova/plugin/ContactAddress', 'ContactAddress');
-modulemapper.clobbers('cordova/plugin/ContactError', 'ContactError');
-modulemapper.clobbers('cordova/plugin/ContactField', 'ContactField');
-modulemapper.clobbers('cordova/plugin/ContactFindOptions', 'ContactFindOptions');
-modulemapper.clobbers('cordova/plugin/ContactName', 'ContactName');
-modulemapper.clobbers('cordova/plugin/ContactOrganization', 'ContactOrganization');
-
-});
-
// file: lib/common/plugin/device.js
define("cordova/plugin/device", function(require, exports, module) {
[20/50] [abbrv] android commit: updated cordova.js to remove
dependency on network status plugin.
Posted by ag...@apache.org.
updated cordova.js to remove dependency on network status plugin.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/2e5b6bce
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/2e5b6bce
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/2e5b6bce
Branch: refs/heads/master
Commit: 2e5b6bce556e4cefe666d5374f952891611e083e
Parents: 5ee1787
Author: Fil Maj <ma...@gmail.com>
Authored: Mon Jun 17 12:08:10 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Mon Jun 17 12:08:10 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 111 +----------------------------------
1 file changed, 2 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/2e5b6bce/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index f8667e5..1a29601 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-116-gf0108ae
+// 2.7.0rc1-117-g208b97a
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-116-gf0108ae';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-117-g208b97a';
// file: lib/scripts/require.js
var require,
@@ -731,9 +731,6 @@ channel.createSticky('onCordovaReady');
// Event to indicate that device properties are available
channel.createSticky('onCordovaInfoReady');
-// Event to indicate that the connection property has been set.
-channel.createSticky('onCordovaConnectionReady');
-
// Event to indicate that all automatically loaded JS plugins are loaded and ready.
channel.createSticky('onPluginsReady');
@@ -751,7 +748,6 @@ channel.createSticky('onDestroy');
// Channels that must fire before "deviceready" is fired.
channel.waitForInitialization('onCordovaReady');
-channel.waitForInitialization('onCordovaConnectionReady');
channel.waitForInitialization('onDOMContentLoaded');
module.exports = channel;
@@ -1254,25 +1250,6 @@ module.exports = ConfigurationData;
});
-// file: lib/common/plugin/Connection.js
-define("cordova/plugin/Connection", function(require, exports, module) {
-
-/**
- * Network status
- */
-module.exports = {
- UNKNOWN: "unknown",
- ETHERNET: "ethernet",
- WIFI: "wifi",
- CELL_2G: "2g",
- CELL_3G: "3g",
- CELL_4G: "4g",
- CELL:"cellular",
- NONE: "none"
-};
-
-});
-
// file: lib/common/plugin/DirectoryEntry.js
define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
@@ -4361,90 +4338,6 @@ modulemapper.clobbers('cordova/plugin/MediaError', 'MediaError');
});
-// file: lib/common/plugin/network.js
-define("cordova/plugin/network", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- cordova = require('cordova'),
- channel = require('cordova/channel'),
- utils = require('cordova/utils');
-
-// Link the onLine property with the Cordova-supplied network info.
-// This works because we clobber the naviagtor object with our own
-// object in bootstrap.js.
-if (typeof navigator != 'undefined') {
- utils.defineGetter(navigator, 'onLine', function() {
- return this.connection.type != 'none';
- });
-}
-
-function NetworkConnection() {
- this.type = 'unknown';
-}
-
-/**
- * Get connection info
- *
- * @param {Function} successCallback The function to call when the Connection data is available
- * @param {Function} errorCallback The function to call when there is an error getting the Connection data. (OPTIONAL)
- */
-NetworkConnection.prototype.getInfo = function(successCallback, errorCallback) {
- exec(successCallback, errorCallback, "NetworkStatus", "getConnectionInfo", []);
-};
-
-var me = new NetworkConnection();
-var timerId = null;
-var timeout = 500;
-
-channel.onCordovaReady.subscribe(function() {
- me.getInfo(function(info) {
- me.type = info;
- if (info === "none") {
- // set a timer if still offline at the end of timer send the offline event
- timerId = setTimeout(function(){
- cordova.fireDocumentEvent("offline");
- timerId = null;
- }, timeout);
- } else {
- // If there is a current offline event pending clear it
- if (timerId !== null) {
- clearTimeout(timerId);
- timerId = null;
- }
- cordova.fireDocumentEvent("online");
- }
-
- // should only fire this once
- if (channel.onCordovaConnectionReady.state !== 2) {
- channel.onCordovaConnectionReady.fire();
- }
- },
- function (e) {
- // If we can't get the network info we should still tell Cordova
- // to fire the deviceready event.
- if (channel.onCordovaConnectionReady.state !== 2) {
- channel.onCordovaConnectionReady.fire();
- }
- console.log("Error initializing Network Connection: " + e);
- });
-});
-
-module.exports = me;
-
-});
-
-// file: lib/common/plugin/networkstatus/symbols.js
-define("cordova/plugin/networkstatus/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/network', 'navigator.network.connection', 'navigator.network.connection is deprecated. Use navigator.connection instead.');
-modulemapper.clobbers('cordova/plugin/network', 'navigator.connection');
-modulemapper.defaults('cordova/plugin/Connection', 'Connection');
-
-});
-
// file: lib/common/plugin/requestFileSystem.js
define("cordova/plugin/requestFileSystem", function(require, exports, module) {
[36/50] [abbrv] android commit: Accidentally commented "build" out
when running ./run --emulator. Whoops D:
Posted by ag...@apache.org.
Accidentally commented "build" out when running ./run --emulator. Whoops D:
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/6fe66ad7
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/6fe66ad7
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/6fe66ad7
Branch: refs/heads/2.9.x
Commit: 6fe66ad79c35f9647ae1411cf128eaaa8bd1259b
Parents: 9946d15
Author: Fil Maj <ma...@gmail.com>
Authored: Fri Jun 21 14:23:40 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Fri Jun 21 14:23:40 2013 -0700
----------------------------------------------------------------------
bin/templates/cordova/run | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/6fe66ad7/bin/templates/cordova/run
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/run b/bin/templates/cordova/run
index 9641ab2..4772058 100755
--- a/bin/templates/cordova/run
+++ b/bin/templates/cordova/run
@@ -66,7 +66,7 @@ elif [[ "$#" -eq 1 ]] ; then
$DIR/build
$DIR/lib/install-device
elif [[ $1 == "--emulator" ]] ; then
- #$DIR/build
+ $DIR/build
run_on_emulator
elif [[ $1 =~ "--target=" ]]; then
$DIR/build
[11/50] [abbrv] android commit: updated from master
Posted by ag...@apache.org.
updated from master
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/9aaa152b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/9aaa152b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/9aaa152b
Branch: refs/heads/master
Commit: 9aaa152b9abbb93ac4c6a18e7099c6dd3464c40a
Parents: a2b8ebf e52d4fc
Author: Steven Gill <st...@gmail.com>
Authored: Mon Jun 10 17:15:05 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Jun 10 17:15:05 2013 -0700
----------------------------------------------------------------------
.reviewboardrc | 8 +
README.md | 51 +-
bin/check_reqs.bat | 19 +-
bin/create | 11 +-
bin/create.js | 42 -
bin/templates/cordova/build.bat | 18 +-
bin/templates/cordova/clean.bat | 16 +
bin/templates/cordova/cordova.bat | 4 +-
bin/templates/cordova/lib/install-device.bat | 18 +-
bin/templates/cordova/lib/install-emulator.bat | 18 +-
bin/templates/cordova/lib/list-devices.bat | 18 +-
.../cordova/lib/list-emulator-images.bat | 18 +-
.../cordova/lib/list-started-emulators.bat | 18 +-
bin/templates/cordova/lib/start-emulator.bat | 18 +-
bin/templates/cordova/log.bat | 16 +
bin/templates/cordova/run.bat | 18 +-
bin/templates/cordova/version | 2 +-
bin/update | 10 +-
bin/update.js | 42 -
framework/.classpath | 1 -
framework/assets/www/cordova.js | 1530 +++++++++++++++++-
framework/build.xml | 16 -
framework/res/xml/config.xml | 29 +-
framework/src/org/apache/cordova/Config.java | 5 +-
.../src/org/apache/cordova/CordovaActivity.java | 45 +-
.../org/apache/cordova/CordovaChromeClient.java | 3 +-
.../src/org/apache/cordova/CordovaWebView.java | 6 +-
framework/src/org/apache/cordova/Device.java | 2 +-
.../src/org/apache/cordova/FileHelper.java | 70 +-
.../cordova/IceCreamCordovaWebViewClient.java | 48 +-
framework/src/org/apache/cordova/JSONUtils.java | 18 +
.../org/apache/cordova/api/CallbackContext.java | 18 +
.../apache/cordova/api/CordovaInterface.java | 2 +-
.../org/apache/cordova/api/CordovaPlugin.java | 14 -
.../org/apache/cordova/api/DataResource.java | 141 --
.../apache/cordova/api/DataResourceContext.java | 31 -
.../org/apache/cordova/api/PluginManager.java | 29 -
test/README.md | 20 +
test/res/xml/config.xml | 18 +
39 files changed, 1909 insertions(+), 502 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9aaa152b/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --cc framework/assets/www/cordova.js
index f3c20a7,3730047..aece2e6
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@@ -1,5 -1,5 +1,5 @@@
// Platform: android
- // 2.7.0rc1-84-gdba3744
-// 2.8.0rc1-0-g22bc4d8
++// 2.7.0rc1-84-g62c5786
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@@ -19,7 -19,7 +19,7 @@@
under the License.
*/
;(function() {
- var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-84-gdba3744';
-var CORDOVA_JS_BUILD_LABEL = '2.8.0rc1-0-g22bc4d8';
++var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-84-g62c5786';
// file: lib/scripts/require.js
var require,
@@@ -1897,11 -2396,11 +2396,7 @@@ function initRead(reader, file)
reader._error = null;
reader._readyState = FileReader.LOADING;
-- if (typeof file == 'string') {
-- // Deprecated in Cordova 2.4.
-- console.warn('Using a string argument with FileReader.readAs functions is deprecated.');
-- reader._fileName = file;
-- } else if (typeof file.fullPath == 'string') {
++ if (typeof file.fullPath == 'string') {
reader._fileName = file.fullPath;
} else {
reader._fileName = '';
@@@ -2793,6 -3292,82 +3288,85 @@@ module.exports = GlobalizationError
});
+ // file: lib/common/plugin/InAppBrowser.js
+ define("cordova/plugin/InAppBrowser", function(require, exports, module) {
+
+ var exec = require('cordova/exec');
+ var channel = require('cordova/channel');
+ var modulemapper = require('cordova/modulemapper');
+
+ function InAppBrowser() {
+ this.channels = {
+ 'loadstart': channel.create('loadstart'),
+ 'loadstop' : channel.create('loadstop'),
+ 'loaderror' : channel.create('loaderror'),
+ 'exit' : channel.create('exit')
+ };
+ }
+
+ InAppBrowser.prototype = {
+ _eventHandler: function (event) {
+ if (event.type in this.channels) {
+ this.channels[event.type].fire(event);
+ }
+ },
+ close: function (eventname) {
+ exec(null, null, "InAppBrowser", "close", []);
+ },
++ show: function (eventname) {
++ exec(null, null, "InAppBrowser", "show", []);
++ },
+ addEventListener: function (eventname,f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].subscribe(f);
+ }
+ },
+ removeEventListener: function(eventname, f) {
+ if (eventname in this.channels) {
+ this.channels[eventname].unsubscribe(f);
+ }
+ },
+
+ executeScript: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('executeScript requires exactly one of code or file to be specified');
+ }
+ },
+
+ insertCSS: function(injectDetails, cb) {
+ if (injectDetails.code) {
+ exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
+ } else if (injectDetails.file) {
+ exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
+ } else {
+ throw new Error('insertCSS requires exactly one of code or file to be specified');
+ }
+ }
+ };
+
+ module.exports = function(strUrl, strWindowName, strWindowFeatures) {
+ var iab = new InAppBrowser();
+ var cb = function(eventname) {
+ iab._eventHandler(eventname);
+ };
+
+ // Don't catch calls that write to existing frames (e.g. named iframes).
+ if (window.frames && window.frames[strWindowName]) {
+ var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
+ return origOpenFunc.apply(window, arguments);
+ }
+
+ exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
+ return iab;
+ };
+
+
+ });
+
// file: lib/common/plugin/LocalFileSystem.js
define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
@@@ -3289,6 -4071,6 +4070,10 @@@ module.exports =
// file: lib/android/plugin/android/nativeapiprovider.js
define("cordova/plugin/android/nativeapiprovider", function(require, exports, module) {
++/**
++ * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
++ */
++
var nativeApi = this._cordovaNative || require('cordova/plugin/android/promptbasednativeapi');
var currentApi = nativeApi;
@@@ -3308,6 -4149,6 +4152,11 @@@ module.exports =
// file: lib/android/plugin/android/promptbasednativeapi.js
define("cordova/plugin/android/promptbasednativeapi", function(require, exports, module) {
++/**
++ * Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
++ * This is used only on the 2.3 simulator, where addJavascriptInterface() is broken.
++ */
++
module.exports = {
exec: function(service, action, callbackId, argsJson) {
return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId]));
@@@ -3948,7 -5072,7 +5080,6 @@@ function Device()
this.available = false;
this.platform = null;
this.version = null;
-- this.name = null;
this.uuid = null;
this.cordova = null;
this.model = null;
@@@ -3964,7 -5088,7 +5095,6 @@@
me.available = true;
me.platform = info.platform;
me.version = info.version;
-- me.name = info.name;
me.uuid = info.uuid;
me.cordova = buildLabel;
me.model = info.model;
@@@ -5191,6 -6676,6 +6682,11 @@@ window.cordova = require('cordova')
// file: lib/scripts/bootstrap.js
(function (context) {
++ if (context._cordovaJsLoaded) {
++ throw new Error('cordova.js included multiple times.');
++ }
++ context._cordovaJsLoaded = true;
++
var channel = require('cordova/channel');
var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady];
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9aaa152b/framework/res/xml/config.xml
----------------------------------------------------------------------
[38/50] [abbrv] android commit: [CB-3927] Fix start-up race condition
that could cause exec() responses to be dropped.
Posted by ag...@apache.org.
[CB-3927] Fix start-up race condition that could cause exec() responses to be dropped.
Requires a change to the JS as well.
(cherry picked from commit 9cb14838e8554ed2d28d317b37f76685fa76432e)
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/16e08384
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/16e08384
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/16e08384
Branch: refs/heads/master
Commit: 16e08384c084db071193dffb8f1761b7f0c1cdb8
Parents: f78b444
Author: Jeffrey Willms <jb...@google.com>
Authored: Fri Jun 21 18:30:50 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Jun 21 18:31:57 2013 -0400
----------------------------------------------------------------------
.../src/org/apache/cordova/api/PluginEntry.java | 13 ++++++
.../org/apache/cordova/api/PluginManager.java | 49 +++++++++++++++++++-
2 files changed, 60 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/16e08384/framework/src/org/apache/cordova/api/PluginEntry.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginEntry.java b/framework/src/org/apache/cordova/api/PluginEntry.java
index 9b9af6b..f66dcda 100755
--- a/framework/src/org/apache/cordova/api/PluginEntry.java
+++ b/framework/src/org/apache/cordova/api/PluginEntry.java
@@ -64,6 +64,19 @@ public class PluginEntry {
}
/**
+ * Alternate constructor
+ *
+ * @param service The name of the service
+ * @param plugin The plugin associated with this entry
+ */
+ public PluginEntry(String service, CordovaPlugin plugin) {
+ this.service = service;
+ this.plugin = plugin;
+ this.pluginClass = plugin.getClass().getName();
+ this.onload = false;
+ }
+
+ /**
* Create plugin object.
* If plugin is already created, then just return it.
*
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/16e08384/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index e8e92f8..e565c4f 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -22,7 +22,9 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaWebView;
import org.json.JSONException;
import org.xmlpull.v1.XmlPullParserException;
@@ -55,6 +57,8 @@ public class PluginManager {
// This would allow how all URLs are handled to be offloaded to a plugin
protected HashMap<String, String> urlMap = new HashMap<String, String>();
+ private AtomicInteger numPendingUiExecs;
+
/**
* Constructor.
*
@@ -65,6 +69,7 @@ public class PluginManager {
this.ctx = ctx;
this.app = app;
this.firstRun = true;
+ this.numPendingUiExecs = new AtomicInteger(0);
}
/**
@@ -86,6 +91,9 @@ public class PluginManager {
this.clearPluginObjects();
}
+ // Insert PluginManager service
+ this.addService(new PluginEntry("PluginManager", new PluginManagerService()));
+
// Start up all plugins that have onload specified
this.startupPlugins();
}
@@ -201,8 +209,23 @@ public class PluginManager {
* @param rawArgs An Array literal string containing any arguments needed in the
* plugin execute method.
*/
- public void exec(String service, String action, String callbackId, String rawArgs) {
- CordovaPlugin plugin = this.getPlugin(service);
+ public void exec(final String service, final String action, final String callbackId, final String rawArgs) {
+ if (numPendingUiExecs.get() > 0) {
+ numPendingUiExecs.getAndIncrement();
+ this.ctx.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ execHelper(service, action, callbackId, rawArgs);
+ numPendingUiExecs.getAndDecrement();
+ }
+ });
+ } else {
+ Log.d(TAG, "running exec normally");
+ execHelper(service, action, callbackId, rawArgs);
+ }
+ }
+
+ private void execHelper(final String service, final String action, final String callbackId, final String rawArgs) {
+ CordovaPlugin plugin = getPlugin(service);
if (plugin == null) {
Log.d(TAG, "exec() call to unknown plugin: " + service);
PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION);
@@ -396,4 +419,26 @@ public class PluginManager {
LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml");
LOG.e(TAG, "=====================================================================================");
}
+
+ private class PluginManagerService extends CordovaPlugin {
+ @Override
+ public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext) throws JSONException {
+ if ("startup".equals(action)) {
+ // The onPageStarted event of CordovaWebViewClient resets the queue of messages to be returned to javascript in response
+ // to exec calls. Since this event occurs on the UI thread and exec calls happen on the WebCore thread it is possible
+ // that onPageStarted occurs after exec calls have started happening on a new page, which can cause the message queue
+ // to be reset between the queuing of a new message and its retrieval by javascript. To avoid this from happening,
+ // javascript always sends a "startup" exec upon loading a new page which causes all future exec calls to happen on the UI
+ // thread (and hence after onPageStarted) until there are no more pending exec calls remaining.
+ numPendingUiExecs.getAndIncrement();
+ ctx.getActivity().runOnUiThread(new Runnable() {
+ public void run() {
+ numPendingUiExecs.getAndDecrement();
+ }
+ });
+ return true;
+ }
+ return false;
+ }
+ }
}
[25/50] [abbrv] android commit: [CB-3625] [CB-3338] updated windows
cli scripts and added version option
Posted by ag...@apache.org.
[CB-3625] [CB-3338] updated windows cli scripts and added version option
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/4ec3d6d0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/4ec3d6d0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/4ec3d6d0
Branch: refs/heads/2.9.x
Commit: 4ec3d6d0646e22786774f3d3513380052d7ecac2
Parents: 8c9e416
Author: Benn Mapes <be...@gmail.com>
Authored: Tue Jun 18 14:54:59 2013 -0700
Committer: Benn Mapes <be...@gmail.com>
Committed: Tue Jun 18 14:56:11 2013 -0700
----------------------------------------------------------------------
bin/create.js | 19 +-
bin/templates/cordova/lib/cordova.js | 554 +++++++++++++++---------------
bin/templates/cordova/version.bat | 18 +
3 files changed, 305 insertions(+), 286 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/4ec3d6d0/bin/create.js
----------------------------------------------------------------------
diff --git a/bin/create.js b/bin/create.js
index 07c2e56..1cb794f 100644
--- a/bin/create.js
+++ b/bin/create.js
@@ -106,20 +106,6 @@ function createAppInfoJar() {
}
}
-function cleanup() {
- // Cleanup
-// if(fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.6.jar')) {
-// fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.6.jar');
-// fso.DeleteFolder(ROOT + '\\framework\\libs', true);
-// }
- if(fso.FileExists(ROOT + '\\framework\\cordova-'+VERSION+'.jar')) {
- fso.DeleteFile(ROOT + '\\framework\\cordova-'+VERSION+'.jar');
- }
- if(fso.FileExists(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js')) {
- fso.DeleteFile(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js');
- }
-}
-
// working dir
var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join('');
if (args.Count() > 0) {
@@ -212,6 +198,7 @@ exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\clean.bat" "' + PROJ
exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\build.bat" "' + PROJECT_PATH + '\\cordova\\build.bat" /Y');
exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\log.bat" "' + PROJECT_PATH + '\\cordova\\log.bat" /Y');
exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\run.bat" "' + PROJECT_PATH + '\\cordova\\run.bat" /Y');
+exec('%comspec% /c copy "'+ROOT+'\\bin\\templates\\cordova\\version.bat" "' + PROJECT_PATH + '\\cordova\\version.bat" /Y');
// interpolate the activity name and package
Log("Updating AndroidManifest.xml and Main Activity...");
@@ -220,6 +207,4 @@ replaceInFile(ACTIVITY_PATH, /__ID__/, PACKAGE);
replaceInFile(MANIFEST_PATH, /__ACTIVITY__/, ACTIVITY);
replaceInFile(MANIFEST_PATH, /__PACKAGE__/, PACKAGE);
-replaceInFile(MANIFEST_PATH, /__APILEVEL__/, API_LEVEL);
-
-cleanup();
+replaceInFile(MANIFEST_PATH, /__APILEVEL__/, API_LEVEL);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/4ec3d6d0/bin/templates/cordova/lib/cordova.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/cordova.js b/bin/templates/cordova/lib/cordova.js
index 28f9b3e..e082189 100644
--- a/bin/templates/cordova/lib/cordova.js
+++ b/bin/templates/cordova/lib/cordova.js
@@ -18,6 +18,21 @@
var ROOT = WScript.ScriptFullName.split('\\cordova\\lib\\cordova.js').join(''),
shell = WScript.CreateObject("WScript.Shell"),
fso = WScript.CreateObject('Scripting.FileSystemObject');
+//device_id for targeting specific device
+var device_id;
+//build types
+var NONE = 0,
+ DEBUG = '--debug',
+ RELEASE = '--release',
+ NO_BUILD = '--nobuild';
+var build_type = NONE;
+
+//deploy tpyes
+var NONE = 0,
+ EMULATOR = 1,
+ DEVICE = 2,
+ TARGET = 3;
+var deploy_type = NONE;
// log to stdout or stderr
@@ -86,6 +101,25 @@ function exec_verbose(command) {
}
}
+function version(path) {
+ var cordovajs_path = path + "\\assets\\www\\cordova.js";
+ if(fso.FileExists(cordovajs_path)) {
+ var f = fso.OpenTextFile(cordovajs_path, 1,2);
+ var cordovajs = f.ReadAll();
+ f.Close();
+ var version_regex = /^.*CORDOVA_JS_BUILD_LABEL.*$/m;
+ var version_line = cordovajs.match(version_regex) + "";
+ var version = version_line.match(/(\d+)\.(\d+)\.(\d+)(rc\d)?/) + "";
+ // TODO : figure out why this isn't matching properly so we can remove this substring workaround.
+ Log(version.substr(0, ((version.length/2) -1)));
+ } else {
+ Log("Error : Could not find cordova js.", true);
+ Log("Expected Location : " + cordovajs_path, true);
+ WScript.Quit(2);
+ }
+
+}
+
function get_devices() {
var device_list = []
var local_devices = shell.Exec("%comspec% /c adb devices").StdOut.ReadAll();
@@ -117,38 +151,18 @@ function list_devices() {
}
function get_emulator_images() {
- // discription contains all data recieved squashed onto one line
- var add_description = true;
var avd_list = [];
var local_emulators = shell.Exec("%comspec% /c android list avds").StdOut.ReadAll();
if (local_emulators.match(/Name\:/)) {
emulators = local_emulators.split('\n');
- //format (ID DESCRIPTION)
var count = 0;
var output = '';
for (i in emulators) {
+ // Find the line with the emulator name.
if (emulators[i].match(/Name\:/)) {
+ // strip description
var emulator_name = emulators[i].replace(/\s*Name\:\s/, '') + ' ';
- if (add_description) {
- count = 1;
- output += emulator_name
- }
- else {
- avd_list.push(emulator_name);
- }
- }
- // add description if indicated (all data squeezed onto one line)
- if (count > 0) {
- var emulator_description = emulators[i].replace(/\s*/g, '');
- if (count > 4) {
- avd_list.push(output + emulator_description);
- count = 0;
- output = '';
- }
- else {
- count++;
- output += emulator_description + ' '
- }
+ avd_list.push(emulator_name);
}
}
}
@@ -192,8 +206,21 @@ function list_started_emulators() {
}
}
else {
- Log('No started emulators found, if you would like to start an emulator call \'list-emulator-images\'');
- Log(' to get the name of an emulator and then start the emulator with \'start-emulator <Name>\'');
+ Log('No started emulators found, if you would like to start an emulator call ');
+ Log('\'list-emulator-images\'');
+ Log(' to get the name of an emulator and then start the emulator with');
+ Log('\'start-emulator <Name>\'');
+ }
+}
+
+function create_emulator() {
+ //get targets
+ var targets = shell.Exec('android.bat list targets').StdOut.ReadAll().match(/id:\s\d+/g);
+ if(targets) {
+ exec('%comspec% /c android create avd --name cordova_emulator --target ' + targets[targets.length - 1].replace(/id: /, ""));
+ } else {
+ Log("You do not have any android targets setup. Please create at least one target with the `android` command so that an emulator can be created.", true);
+ WScript.Quit(69);
}
}
@@ -207,14 +234,14 @@ function start_emulator(name) {
for (i in emulators) {
if (emulators[i].substr(0,name.length) == name) {
Log("Starting emulator : " + name);
- shell.Run("%comspec% /c start cmd /c emulator -avd " + name);
+ shell.Exec("%comspec% /c emulator -avd " + name + " &");
//shell.Run("%comspec% /c start cmd /c emulator -cpu-delay 0 -no-boot-anim -cache %Temp%\cache -avd " + name);
started = true;
}
}
}
else {
- if (emulators.length > 0 && started_emulators < 1) {
+ if (emulators.length > 0 && started_emulators.length == 0) {
emulator_name = emulators[0].split(' ', 1)[0];
start_emulator(emulator_name);
return;
@@ -230,15 +257,16 @@ function start_emulator(name) {
Log("Error : unable to start emulator, ensure you have emulators availible by checking \'list-emulator-images\'", true);
WScript.Quit(2);
}
- else { // wait for emulator to boot before returning
- WScript.Stdout.Write('Booting up emulator..');
+ else {
+ // wait for emulator to get the ID
+ Log('Waiting for emulator...');
var boot_anim = null;
var emulator_ID = null;
- var new_started = get_started_emulators();
+ var new_started = null;
var i = 0;
- // use boot animation property to tell when boot is complete.
- while ((boot_anim == null || !boot_anim.output.match(/stopped/)) && i < 100) {
- if (new_started.length > started_emulators.length && emulator_ID == null) {
+ while(emulator_ID == null && i < 10) {
+ new_started = get_started_emulators();
+ if(new_started.length > started_emulators.length) {
// find new emulator that was just started to get it's ID
for(var i = 0; i < new_started.length; i++) {
if (new_started[i] != started_emulators[i]) {
@@ -248,18 +276,25 @@ function start_emulator(name) {
}
}
}
- else if (boot_anim == null) {
- new_started = get_started_emulators();
- }
- else {
- boot_anim = exec_out('%comspec% /c adb -s ' + emulator_ID + ' shell getprop init.svc.bootanim');
- }
+ }
+ if (i == 10) {
+ Log('\nEmulator start timed out.');
+ WScript.Quit(2);
+ }
+ i = 0;
+ WScript.Stdout.Write('Booting up emulator (this may take a while).');
+ // use boot animation property to tell when boot is complete.
+ while (!boot_anim.output.match(/stopped/) && i < 100) {
+ boot_anim = exec_out('%comspec% /c adb -s ' + emulator_ID + ' shell getprop init.svc.bootanim');
i++;
WScript.Stdout.Write('.');
WScript.Sleep(2000);
}
+
if (i < 100) {
Log('\nBoot Complete!');
+ // Unlock the device
+ shell.Exec("%comspec% /c adb -s " + emulator_ID + " shell input keyevent 82");
} else {
Log('\nEmulator boot timed out. Failed to load emulator');
WScript.Quit(2);
@@ -267,34 +302,11 @@ function start_emulator(name) {
}
}
-function install_device(target) {
- var devices = get_devices();
- var use_target = false;
- if (devices.length < 1) {
- Log("Error : No devices found to install to, make sure there are devices", true);
- Log(" availible by checking \'<project_dir>\\cordova\\lib\\list-devices\'", true);
- WScript.Quit(2);
- }
- if (target) {
- var exists = false;
- for (i in devices) {
- if (devices[i].substr(0,target.length) == target)
- {
- exists = true;
- break;
- }
- }
- if (!exists) {
- Log("Error : Unable to find target " + target, true);
- Log("Please ensure the target exists by checking \'<project>\\cordova\\lib\\list-devices'");
- WScript.Quit(2);
- }
- use_target = true;
- }
+function get_apk(path) {
// check if file .apk has been created
- if (fso.FolderExists(ROOT + '\\bin')) {
+ if (fso.FolderExists(path + '\\bin')) {
var path_to_apk;
- var out_folder = fso.GetFolder(ROOT + '\\bin');
+ var out_folder = fso.GetFolder(path + '\\bin');
var out_files = new Enumerator(out_folder.Files);
for (;!out_files.atEnd(); out_files.moveNext()) {
var path = out_files.item() + '';
@@ -304,38 +316,7 @@ function install_device(target) {
}
}
if (path_to_apk) {
- var launch_name = exec_out("%comspec% /c java -jar "+ROOT+"\\cordova\\appinfo.jar "+ROOT+"\\AndroidManifest.xml");
- if (launch_name.error) {
- Log("Failed to get application name from appinfo.jar + AndroidManifest : ", true);
- Log("Output : " + launch_name.output, true);
- WScript.Quit(2);
- }
- // install on device (-d)
- Log("Installing app on device...");
- var cmd;
- if (use_target) {
- cmd = '%comspec% /c adb -s ' + target + ' install -r ' + path_to_apk;
- } else {
- cmd = '%comspec% /c adb -s ' + devices[0].split(' ', 1)[0] + ' install -r ' + path_to_apk;
- }
- var install = exec_out(cmd);
- if ( install.error && install.output.match(/Failure/)) {
- Log("Error : Could not install apk to device : ", true);
- Log(install.output, true);
- WScript.Quit(2);
- }
- else {
- Log(install.output);
- }
- // run on device
- Log("Launching application...");
- cmd;
- if (use_target) {
- cmd = '%comspec% /c adb -s ' + target + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output;
- } else {
- cmd = '%comspec% /c adb -s ' + devices[0].split(' ', 1)[0] + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output;
- }
- exec_verbose(cmd);
+ return path_to_apk;
}
else {
Log('Failed to find apk, make sure you project is built and there is an ', true);
@@ -345,7 +326,18 @@ function install_device(target) {
}
}
-function install_emulator(target) {
+function install_device(path) {
+ var devices = get_devices();
+ var use_target = false;
+ if (devices.length < 1) {
+ Log("Error : No devices found to install to, make sure there are devices", true);
+ Log(" availible by checking \'<project_dir>\\cordova\\lib\\list-devices\'", true);
+ WScript.Quit(2);
+ }
+ launch(path, devices[0].split(' ', 1)[0], true);
+}
+
+function install_emulator(path) {
var emulators = get_started_emulators();
var use_target = false;
if (emulators.length < 1) {
@@ -353,46 +345,59 @@ function install_emulator(target) {
Log(" availible by checking \'<project_dir>\\cordova\\lib\\list-started-emulators\'", true);
WScript.Quit(2);
}
- if (target) {
+ launch(path, emulators[0].split(' ', 1)[0], false);
+}
+
+function install_target(path) {
+ if(device_id) {
+ var device = false;
+ var emulators = get_started_emulators();
+ var devices = get_devices();
var exists = false;
for (i in emulators) {
- if (emulators[i].substr(0,target.length) == target)
- {
+ if (emulators[i].substr(0,device_id.length) == device_id) {
exists = true;
break;
}
}
- if (!exists) {
- Log("Error : Unable to find target " + target, true);
- Log("Please ensure the target exists by checking \'<project>\\cordova\\lib\\list-started-emulators'")
- }
- use_target = true;
- } else {
- target = emulators[0].split(' ', 1)[0];
- Log("Deploying to emulator : " + target);
- }
- // check if file .apk has been created
- if (fso.FolderExists(ROOT + '\\bin')) {
- var path_to_apk;
- var out_folder = fso.GetFolder(ROOT + '\\bin');
- var out_files = new Enumerator(out_folder.Files);
- for (;!out_files.atEnd(); out_files.moveNext()) {
- var path = out_files.item() + '';
- if (fso.GetExtensionName(path) == 'apk' && !path.match(/unaligned/)) {
- path_to_apk = out_files.item();
+ for (i in devices) {
+ if (devices[i].substr(0,device_id.length) == device_id) {
+ exists = true;
+ device = true
break;
}
}
+ if (!exists) {
+ Log("Error : Unable to find target " + device_id, true);
+ Log("Please ensure the target exists by checking \'<project>\\cordova\\lib\\list-started-emulators'");
+ Log(" Or \'<project>\\cordova\\lib\\list-devices'");
+ }
+ launch(path, device_id, device);
+ }
+ else {
+ Log("You cannot install to a target without providing a valid target ID.", true);
+ WScript.Quit(2);
+ }
+}
+
+function launch(path, id, device) {
+ if(id) {
+ var path_to_apk = get_apk(path);
if (path_to_apk) {
- var launch_name = exec_out("%comspec% /c java -jar "+ROOT+"\\cordova\\appinfo.jar "+ROOT+"\\AndroidManifest.xml");
+ var launch_name = exec_out("%comspec% /c java -jar "+path+"\\cordova\\appinfo.jar "+path+"\\AndroidManifest.xml");
if (launch_name.error) {
Log("Failed to get application name from appinfo.jar + AndroidManifest : ", true);
Log("Output : " + launch_name.output, true);
WScript.Quit(2);
}
- // install on emulator (-e)
- Log("Installing app on emulator...");
- var cmd = '%comspec% /c adb -s ' + target + ' install -r ' + path_to_apk;
+ if (device) {
+ // install on device (-d)
+ Log("Installing app on device...");
+ } else {
+ // install on emulator (-e)
+ Log("Installing app on emulator...");
+ }
+ var cmd = '%comspec% /c adb -s ' + id + ' install -r ' + path_to_apk;
var install = exec_out(cmd);
if ( install.error && install.output.match(/Failure/)) {
Log("Error : Could not install apk to emulator : ", true);
@@ -402,14 +407,9 @@ function install_emulator(target) {
else {
Log(install.output);
}
- // run on emulator
+ // launch the application
Log("Launching application...");
- cmd;
- if (use_target) {
- cmd = '%comspec% /c adb -s ' + target + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output;
- } else {
- cmd = '%comspec% /c adb -s ' + emulators[0].split(' ', 1)[0] + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output
- }
+ cmd = '%comspec% /c adb -s ' + id + ' shell am start -W -a android.intent.action.MAIN -n ' + launch_name.output;
exec_verbose(cmd);
}
else {
@@ -419,43 +419,14 @@ function install_emulator(target) {
}
}
else {
- Log('Failed to find apk, make sure you project is built and there is an ', true);
- Log(' apk in <project>\\bin\\. To build your project use \'<project>\\cordova\\build\'', true);
+ Log("You cannot install to a target without providing a valid target ID.", true);
WScript.Quit(2);
}
}
-function clean() {
+function clean(path) {
Log("Cleaning project...");
- exec("%comspec% /c ant.bat clean -f "+ROOT+"\\build.xml 2>&1");
-}
-
-function build(build_type) {
- if (build_type) {
- switch (build_type) {
- case "--debug" :
- clean();
- Log("Building project...");
- exec_verbose("%comspec% /c ant.bat debug -f "+ROOT+"\\build.xml 2>&1");
- break;
- case "--release" :
- clean();
- Log("Building project...");
- exec_verbose("%comspec% /c ant.bat release -f "+ROOT+"\\build.xml 2>&1");
- break;
- case "--nobuild" :
- Log("Skipping build process.");
- break;
- default :
- Log("Build option not recognized: " + build_type, true);
- WScript.Quit(2);
- break;
- }
- }
- else {
- Log("WARNING: [ --debug | --release | --nobuild ] not specified, defaulting to --debug.");
- exec_verbose("%comspec% /c ant.bat debug -f "+ROOT+"\\build.xml 2>&1");
- }
+ exec("%comspec% /c ant.bat clean -f "+path+"\\build.xml 2>&1");
}
function log() {
@@ -463,131 +434,176 @@ function log() {
shell.Run("%comspec% /c adb logcat | grep -v nativeGetEnabledTags");
}
-function run(target, build_type) {
- var use_target = false;
- if (!target) {
- Log("WARNING: [ --target=<ID> | --emulator | --device ] not specified, using defaults");
- }
- // build application
- build(build_type);
- // attempt to deploy to connected device
- var devices = get_devices();
- if (devices.length > 0 || target == "--device") {
- if (target) {
- if (target.substr(0,9) == "--target=") {
- install_device(target.split('--target=').join(''))
- } else if (target == "--device") {
- install_device();
- } else {
- Log("Did not regognize " + target + " as a run option.", true);
- WScript.Quit(2);
- }
- }
- else {
- Log("WARNING: [ --target=<ID> | --emulator | --device ] not specified, using defaults");
- install_device();
- }
+function build(path) {
+ switch (build_type) {
+ case DEBUG :
+ clean(path);
+ Log("Building project...");
+ exec_verbose("%comspec% /c ant.bat debug -f "+path+"\\build.xml 2>&1");
+ break;
+ case RELEASE :
+ clean(path);
+ Log("Building project...");
+ exec_verbose("%comspec% /c ant.bat release -f "+path+"\\build.xml 2>&1");
+ break;
+ case NO_BUILD :
+ Log("Skipping build process.");
+ break;
+ case NONE :
+ clean(path);
+ Log("WARNING: [ --debug | --release | --nobuild ] not specified, defaulting to --debug.");
+ exec_verbose("%comspec% /c ant.bat debug -f "+path+"\\build.xml 2>&1");
+ break;
+ default :
+ Log("Build option not recognized: " + build_type, true);
+ WScript.Quit(2);
+ break;
}
- else {
- var emulators = get_started_emulators();
- if (emulators.length > 0) {
- install_emulator();
- }
- else {
- var emulator_images = get_emulator_images();
- if (emulator_images.length < 1) {
- Log('No emulators found, if you would like to create an emulator follow the instructions', true);
- Log(' provided here : http://developer.android.com/tools/devices/index.html', true);
- Log(' Or run \'android create avd --name <name> --target <targetID>\' in on the command line.', true);
- WScript.Quit(2);
- }
- start_emulator(emulator_images[0].split(' ')[0]);
- emulators = get_started_emulators();
- if (emulators.length > 0) {
- install_emulator();
+}
+
+function run(path) {
+ switch(deploy_type) {
+ case EMULATOR :
+ build(path);
+ if(get_started_emulators().length == 0) {
+ start_emulator();
}
- else {
- Log("Error : emulator failed to start.", true);
- WScript.Quit(2);
+ //TODO : Start emulator if one isn't started, and create one if none exists.
+ install_emulator(path);
+ break;
+ case DEVICE :
+ build(path);
+ install_device(path);
+ break;
+ case TARGET :
+ build(path);
+ install_target(path);
+ break;
+ case NONE :
+ if (get_devices().length > 0) {
+ Log("WARNING: [ --target=<ID> | --emulator | --device ] not specified, defaulting to --device");
+ deploy_type = DEVICE;
+ } else {
+ Log("WARNING: [ --target=<ID> | --emulator | --device ] not specified, defaulting to --emulator");
+ deploy_type = EMULATOR;
}
- }
+ run(path);
+ break;
+ default :
+ Log("Deploy option not recognized: " + deploy_type, true);
+ WScript.Quit(2);
+ break;
}
}
+
var args = WScript.Arguments;
if (args.count() == 0) {
Log("Error: no args provided.");
WScript.Quit(2);
}
else {
- if (args(0) == "build") {
- if (args.Count() > 1) {
- build(args(1))
- } else {
- build();
- }
- } else if (args(0) == "clean") {
- clean();
- } else if (args(0) == "list-devices") {
- list_devices();
- } else if (args(0) == "list-emulator-images") {
- list_emulator_images();
- } else if (args(0) == "list-started-emulators") {
- list_started_emulators();
- } else if (args(0) == "start-emulator") {
- if (args.Count() > 1) {
- start_emulator(args(1))
- } else {
- start_emulator();
- }
- } else if (args(0) == "log") {
- log();
- } else if (args(0) == "install-emulator") {
- if (args.Count() == 2) {
- if (args(1).substr(0,9) == "--target=") {
- install_emulator(args(1).split('--target=').join(''));
+ // parse command
+ switch(args(0)) {
+ case "version" :
+ version(ROOT);
+ break;
+ case "build" :
+ if(args.Count() > 1) {
+ if (args(1) == "--release") {
+ build_type = RELEASE;
+ }
+ else if (args(1) == "--debug") {
+ build_type = DEBUG;
+ }
+ else if (args(1) == "--nobuild") {
+ build_type = NO_BUILD;
+ }
+ else {
+ Log('Error: \"' + args(i) + '\" is not recognized as a build option', true);
+ WScript.Quit(2);
+ }
+ }
+ build(ROOT);
+ break;
+ case "clean" :
+ clean();
+ break;
+ case "list-devices" :
+ list_devices();
+ break;
+ case "list-emulator-images" :
+ list_emulator_images();
+ break;
+ case "list-started-emulators" :
+ list_started_emulators();
+ break;
+ case "start-emulator" :
+ if (args.Count() > 1) {
+ start_emulator(args(1))
} else {
- Log('Error: \"' + args(1) + '\" is not recognized as an install option', true);
- WScript.Quit(2);
+ start_emulator();
}
- } else {
- install_emulator();
- }
- } else if (args(0) == "install-device") {
- if (args.Count() == 2) {
- if (args(1).substr(0,9) == "--target=") {
- install_device(args(1).split('--target=').join(''));
+ break;
+ case "install-emulator" :
+ if (args.Count() == 2) {
+ if (args(1).substr(0,9) == "--target=") {
+ device_id = args(1).split('--target=').join('');
+ install_emulator(ROOT);
+ } else {
+ Log('Error: \"' + args(1) + '\" is not recognized as an install option', true);
+ WScript.Quit(2);
+ }
} else {
- Log('Error: \"' + args(1) + '\" is not recognized as an install option', true);
- WScript.Quit(2);
+ install_emulator(ROOT);
}
- } else {
- install_device();
- }
- } else if (args(0) == "run") {
- if (args.Count() == 3) {
- run(args(1), args(2));
- }
- else if (args.Count() == 2) {
- if (args(1).substr(0,9) == "--target=" ||
- args(1) == "--emulator" ||
- args(1) == "--device") {
- run(args(1));
- } else if (args(1) == "--debug" ||
- args(1) == "--release" ||
- args(1) == "--nobuild") {
- run(null, args(1))
+ break;
+ case "install-device" :
+ if (args.Count() == 2) {
+ if (args(1).substr(0,9) == "--target=") {
+ device_id = args(1).split('--target=').join('');
+ install_target(ROOT);
+ } else {
+ Log('Error: \"' + args(1) + '\" is not recognized as an install option', true);
+ WScript.Quit(2);
+ }
} else {
- Log('Error: \"' + args(1) + '\" is not recognized as a run option', true);
- WScript.Quit(2);
+ install_device(ROOT);
}
- }
- else {
- run();
- }
- } else {
- Log('Error: \"' + args(0) + '\" is not recognized as a tooling command', true);
- WScript.Quit(2);
+ break;
+ case "run" :
+ //parse args
+ for(var i = 1; i < args.Count(); i++) {
+ if (args(i) == "--release") {
+ build_type = RELEASE;
+ }
+ else if (args(i) == "--debug") {
+ build_type = DEBUG;
+ }
+ else if (args(i) == "--nobuild") {
+ build_type = NO_BUILD;
+ }
+ else if (args(i) == "--emulator" || args(i) == "-e") {
+ deploy_type = EMULATOR;
+ }
+ else if (args(i) == "--device" || args(i) == "-d") {
+ deploy_type = DEVICE;
+ }
+ else if (args(i).substr(0,9) == "--target=") {
+ device_id = args(i).split("--target=").join("");
+ deploy_type = TARGET;
+ }
+ else {
+ Log('Error: \"' + args(i) + '\" is not recognized as a run option', true);
+ WScript.Quit(2);
+ }
+ }
+ run(ROOT);
+ break;
+ default :
+ Log("Cordova does not regognize the command " + args(0), true);
+ WScript.Quit(2);
+ break;
}
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/4ec3d6d0/bin/templates/cordova/version.bat
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/version.bat b/bin/templates/cordova/version.bat
new file mode 100644
index 0000000..e70769f
--- /dev/null
+++ b/bin/templates/cordova/version.bat
@@ -0,0 +1,18 @@
+:: 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
+%~dp0\cordova.bat version %*
\ No newline at end of file
[26/50] [abbrv] android commit: CB-3902: Explicitly add market URIs
to CordovaWebViewClient so this always works, not just sometimes
Posted by ag...@apache.org.
CB-3902: Explicitly add market URIs to CordovaWebViewClient so this always works, not just sometimes
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/98b971b4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/98b971b4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/98b971b4
Branch: refs/heads/2.9.x
Commit: 98b971b4dec0df8315a0ec6513146c46ce6dbb4a
Parents: 4ec3d6d
Author: Joe Bowser <bo...@apache.org>
Authored: Tue Jun 18 16:19:27 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue Jun 18 16:20:14 2013 -0700
----------------------------------------------------------------------
.../src/org/apache/cordova/CordovaWebViewClient.java | 11 +++++++++++
1 file changed, 11 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/98b971b4/framework/src/org/apache/cordova/CordovaWebViewClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java
index eef961c..c49611e 100755
--- a/framework/src/org/apache/cordova/CordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java
@@ -188,6 +188,17 @@ public class CordovaWebViewClient extends WebViewClient {
LOG.e(TAG, "Error sending sms " + url + ":" + e.toString());
}
}
+
+ //Android Market
+ else if(url.startsWith("market:")) {
+ try {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ this.cordova.getActivity().startActivity(intent);
+ } catch (android.content.ActivityNotFoundException e) {
+ LOG.e(TAG, "Error loading Google Play Store: " + url, e);
+ }
+ }
// All else
else {
[49/50] [abbrv] android commit: [CB-4048] Merge branch 'master' into
2.9.x
Posted by ag...@apache.org.
[CB-4048] Merge branch 'master' into 2.9.x
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/67e97a89
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/67e97a89
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/67e97a89
Branch: refs/heads/2.9.x
Commit: 67e97a89ced3aa5dddfc823ca7873af7328d40e8
Parents: c5e83b1 892ffc8
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Jun 28 11:23:58 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Fri Jun 28 11:23:58 2013 -0400
----------------------------------------------------------------------
bin/update | 23 +-
framework/assets/www/cordova.js | 5357 ++----------------
framework/src/org/apache/cordova/Config.java | 24 +-
.../src/org/apache/cordova/CordovaActivity.java | 14 +
.../src/org/apache/cordova/CordovaWebView.java | 35 +-
.../src/org/apache/cordova/ExposedJsApi.java | 7 +-
.../src/org/apache/cordova/FileHelper.java | 33 +-
.../cordova/IceCreamCordovaWebViewClient.java | 49 +-
.../src/org/apache/cordova/UriResolver.java | 65 +
.../src/org/apache/cordova/UriResolvers.java | 277 +
.../org/apache/cordova/api/CordovaPlugin.java | 15 +-
.../src/org/apache/cordova/api/PluginEntry.java | 13 +
.../org/apache/cordova/api/PluginManager.java | 93 +-
.../apache/cordova/test/UriResolversTest.java | 263 +
.../actions/CordovaWebViewTestActivity.java | 2 +-
15 files changed, 1307 insertions(+), 4963 deletions(-)
----------------------------------------------------------------------
[10/50] [abbrv] android commit: Merge branch '3.0.0' of
https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0
Posted by ag...@apache.org.
Merge branch '3.0.0' of https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/a2b8ebf5
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/a2b8ebf5
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/a2b8ebf5
Branch: refs/heads/master
Commit: a2b8ebf57e5231df7c683b4212b284b8c07aab40
Parents: b3fe479 98d9901
Author: hermwong <he...@gmail.com>
Authored: Mon Jun 10 16:21:32 2013 -0700
Committer: hermwong <he...@gmail.com>
Committed: Mon Jun 10 16:21:32 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 546 +----------------------------------
1 file changed, 2 insertions(+), 544 deletions(-)
----------------------------------------------------------------------
[03/50] [abbrv] android commit: removed CordovaLocationListner
Posted by ag...@apache.org.
removed CordovaLocationListner
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/dbc6dd73
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/dbc6dd73
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/dbc6dd73
Branch: refs/heads/master
Commit: dbc6dd73f3ebf1c4a731719de6957cc6bb2200cc
Parents: 4765c6f
Author: Steven Gill <st...@gmail.com>
Authored: Fri May 17 15:38:08 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Fri May 17 15:38:08 2013 -0700
----------------------------------------------------------------------
.../apache/cordova/CordovaLocationListener.java | 251 -------------------
1 file changed, 251 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/dbc6dd73/framework/src/org/apache/cordova/CordovaLocationListener.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaLocationListener.java b/framework/src/org/apache/cordova/CordovaLocationListener.java
deleted file mode 100644
index 01c828b..0000000
--- a/framework/src/org/apache/cordova/CordovaLocationListener.java
+++ /dev/null
@@ -1,251 +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.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.apache.cordova.api.CallbackContext;
-
-import android.location.Location;
-import android.location.LocationListener;
-import android.location.LocationManager;
-import android.os.Bundle;
-import android.util.Log;
-
-public class CordovaLocationListener implements LocationListener {
- public static int PERMISSION_DENIED = 1;
- public static int POSITION_UNAVAILABLE = 2;
- public static int TIMEOUT = 3;
-
- protected LocationManager locationManager;
- private GeoBroker owner;
- protected boolean running = false;
-
- public HashMap<String, CallbackContext> watches = new HashMap<String, CallbackContext>();
- private List<CallbackContext> callbacks = new ArrayList<CallbackContext>();
-
- private Timer timer = null;
-
- private String TAG = "[Cordova Location Listener]";
-
- public CordovaLocationListener(LocationManager manager, GeoBroker broker, String tag) {
- this.locationManager = manager;
- this.owner = broker;
- this.TAG = tag;
- }
-
- protected void fail(int code, String message) {
- this.cancelTimer();
- for (CallbackContext callbackContext: this.callbacks)
- {
- this.owner.fail(code, message, callbackContext, false);
- }
- if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
- {
- Log.d(TAG, "Stopping global listener");
- this.stop();
- }
- this.callbacks.clear();
-
- Iterator<CallbackContext> it = this.watches.values().iterator();
- while (it.hasNext()) {
- this.owner.fail(code, message, it.next(), true);
- }
- }
-
- private void win(Location loc) {
- this.cancelTimer();
- for (CallbackContext callbackContext: this.callbacks)
- {
- this.owner.win(loc, callbackContext, false);
- }
- if(this.owner.isGlobalListener(this) && this.watches.size() == 0)
- {
- Log.d(TAG, "Stopping global listener");
- this.stop();
- }
- this.callbacks.clear();
-
- Iterator<CallbackContext> it = this.watches.values().iterator();
- while (it.hasNext()) {
- this.owner.win(loc, it.next(), true);
- }
- }
-
- /**
- * Location Listener Methods
- */
-
- /**
- * Called when the provider is disabled by the user.
- *
- * @param provider
- */
- public void onProviderDisabled(String provider) {
- Log.d(TAG, "Location provider '" + provider + "' disabled.");
- this.fail(POSITION_UNAVAILABLE, "GPS provider disabled.");
- }
-
- /**
- * Called when the provider is enabled by the user.
- *
- * @param provider
- */
- public void onProviderEnabled(String provider) {
- Log.d(TAG, "Location provider "+ provider + " has been enabled");
- }
-
- /**
- * Called when the provider status changes. This method is called when a
- * provider is unable to fetch a location or if the provider has recently
- * become available after a period of unavailability.
- *
- * @param provider
- * @param status
- * @param extras
- */
- public void onStatusChanged(String provider, int status, Bundle extras) {
- Log.d(TAG, "The status of the provider " + provider + " has changed");
- if (status == 0) {
- Log.d(TAG, provider + " is OUT OF SERVICE");
- this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Provider " + provider + " is out of service.");
- }
- else if (status == 1) {
- Log.d(TAG, provider + " is TEMPORARILY_UNAVAILABLE");
- }
- else {
- Log.d(TAG, provider + " is AVAILABLE");
- }
- }
-
- /**
- * Called when the location has changed.
- *
- * @param location
- */
- public void onLocationChanged(Location location) {
- Log.d(TAG, "The location has been updated!");
- this.win(location);
- }
-
- // PUBLIC
-
- public int size() {
- return this.watches.size() + this.callbacks.size();
- }
-
- public void addWatch(String timerId, CallbackContext callbackContext) {
- this.watches.put(timerId, callbackContext);
- if (this.size() == 1) {
- this.start();
- }
- }
- public void addCallback(CallbackContext callbackContext, int timeout) {
- if(this.timer == null) {
- this.timer = new Timer();
- }
- this.timer.schedule(new LocationTimeoutTask(callbackContext, this), timeout);
- this.callbacks.add(callbackContext);
- if (this.size() == 1) {
- this.start();
- }
- }
- public void clearWatch(String timerId) {
- if (this.watches.containsKey(timerId)) {
- this.watches.remove(timerId);
- }
- if (this.size() == 0) {
- this.stop();
- }
- }
-
- /**
- * Destroy listener.
- */
- public void destroy() {
- this.stop();
- }
-
- // LOCAL
-
- /**
- * Start requesting location updates.
- *
- * @param interval
- */
- protected void start() {
- if (!this.running) {
- if (this.locationManager.getProvider(LocationManager.NETWORK_PROVIDER) != null) {
- this.running = true;
- this.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 10, this);
- } else {
- this.fail(CordovaLocationListener.POSITION_UNAVAILABLE, "Network provider is not available.");
- }
- }
- }
-
- /**
- * Stop receiving location updates.
- */
- private void stop() {
- this.cancelTimer();
- if (this.running) {
- this.locationManager.removeUpdates(this);
- this.running = false;
- }
- }
-
- private void cancelTimer() {
- if(this.timer != null) {
- this.timer.cancel();
- this.timer.purge();
- this.timer = null;
- }
- }
-
- private class LocationTimeoutTask extends TimerTask {
-
- private CallbackContext callbackContext = null;
- private CordovaLocationListener listener = null;
-
- public LocationTimeoutTask(CallbackContext callbackContext, CordovaLocationListener listener) {
- this.callbackContext = callbackContext;
- this.listener = listener;
- }
-
- @Override
- public void run() {
- for (CallbackContext callbackContext: listener.callbacks) {
- if(this.callbackContext == callbackContext) {
- listener.callbacks.remove(callbackContext);
- break;
- }
- }
-
- if(listener.size() == 0) {
- listener.stop();
- }
- }
- }
-}
[42/50] [abbrv] android commit: Explicitly print exceptions that
occur within ExposedJsApi.
Posted by ag...@apache.org.
Explicitly print exceptions that occur within ExposedJsApi.
Before they trickled into JNI and the stack traces were lost.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/10d31ea0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/10d31ea0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/10d31ea0
Branch: refs/heads/2.9.x
Commit: 10d31ea0a30ec47d68c79813d56e7506b1542f7e
Parents: e64ebdf
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Jun 26 14:20:45 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Jun 26 14:20:45 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/ExposedJsApi.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/10d31ea0/framework/src/org/apache/cordova/ExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ExposedJsApi.java b/framework/src/org/apache/cordova/ExposedJsApi.java
index 40ab1e3..221dd3d 100755
--- a/framework/src/org/apache/cordova/ExposedJsApi.java
+++ b/framework/src/org/apache/cordova/ExposedJsApi.java
@@ -54,6 +54,9 @@ import org.json.JSONException;
ret = jsMessageQueue.popAndEncode();
}
return ret;
+ } catch (Throwable e) {
+ e.printStackTrace();
+ return "";
} finally {
jsMessageQueue.setPaused(false);
}
[09/50] [abbrv] android commit: removed
android.permission.ACCESS_COARSE_LOCATION and
android.permission.ACCESS_FINE_LOCATION from AndroidManifest.xml for PBR
Posted by ag...@apache.org.
removed android.permission.ACCESS_COARSE_LOCATION and android.permission.ACCESS_FINE_LOCATION from AndroidManifest.xml for PBR
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/b3fe4798
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/b3fe4798
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/b3fe4798
Branch: refs/heads/master
Commit: b3fe47985a6388de94af95e47c0d8aabb3b51baa
Parents: f7c97cb
Author: hermwong <he...@gmail.com>
Authored: Mon Jun 10 16:14:56 2013 -0700
Committer: hermwong <he...@gmail.com>
Committed: Mon Jun 10 16:14:56 2013 -0700
----------------------------------------------------------------------
framework/AndroidManifest.xml | 2 --
1 file changed, 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/b3fe4798/framework/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/framework/AndroidManifest.xml b/framework/AndroidManifest.xml
index f1336ea..2b3c9c6 100755
--- a/framework/AndroidManifest.xml
+++ b/framework/AndroidManifest.xml
@@ -29,8 +29,6 @@
<!-- android:xlargeScreens="true" screen supported only after Android-9 -->
<uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
[02/50] [abbrv] android commit: updated cordovajs,
removed geolocation code
Posted by ag...@apache.org.
updated cordovajs, removed geolocation code
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/4765c6fc
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/4765c6fc
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/4765c6fc
Branch: refs/heads/master
Commit: 4765c6fcc5285bd30a77d69ba7e2c4ab245d99e2
Parents: 78dd084
Author: Steven Gill <st...@gmail.com>
Authored: Fri May 17 15:19:04 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Fri May 17 15:19:04 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 308 +----------------------------------
1 file changed, 2 insertions(+), 306 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/4765c6fc/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 9b88ae5..80bfa16 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-72-g6ec24b1
+// 2.7.0rc1-79-g8ac64ca
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-72-g6ec24b1';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-79-g8ac64ca';
// file: lib/scripts/require.js
var require,
@@ -1725,60 +1725,6 @@ module.exports = ContactOrganization;
});
-// file: lib/common/plugin/Coordinates.js
-define("cordova/plugin/Coordinates", function(require, exports, module) {
-
-/**
- * This class contains position information.
- * @param {Object} lat
- * @param {Object} lng
- * @param {Object} alt
- * @param {Object} acc
- * @param {Object} head
- * @param {Object} vel
- * @param {Object} altacc
- * @constructor
- */
-var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
- /**
- * The latitude of the position.
- */
- this.latitude = lat;
- /**
- * The longitude of the position,
- */
- this.longitude = lng;
- /**
- * The accuracy of the position.
- */
- this.accuracy = acc;
- /**
- * The altitude of the position.
- */
- this.altitude = (alt !== undefined ? alt : null);
- /**
- * The direction the device is moving at the position.
- */
- this.heading = (head !== undefined ? head : null);
- /**
- * The velocity with which the device is moving at the position.
- */
- this.speed = (vel !== undefined ? vel : null);
-
- if (this.speed === 0 || this.speed === null) {
- this.heading = NaN;
- }
-
- /**
- * The altitude accuracy of the position.
- */
- this.altitudeAccuracy = (altacc !== undefined) ? altacc : null;
-};
-
-module.exports = Coordinates;
-
-});
-
// file: lib/common/plugin/DirectoryEntry.js
define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
@@ -3640,47 +3586,6 @@ module.exports = Metadata;
});
-// file: lib/common/plugin/Position.js
-define("cordova/plugin/Position", function(require, exports, module) {
-
-var Coordinates = require('cordova/plugin/Coordinates');
-
-var Position = function(coords, timestamp) {
- if (coords) {
- this.coords = new Coordinates(coords.latitude, coords.longitude, coords.altitude, coords.accuracy, coords.heading, coords.velocity, coords.altitudeAccuracy);
- } else {
- this.coords = new Coordinates();
- }
- this.timestamp = (timestamp !== undefined) ? timestamp : new Date();
-};
-
-module.exports = Position;
-
-});
-
-// file: lib/common/plugin/PositionError.js
-define("cordova/plugin/PositionError", function(require, exports, module) {
-
-/**
- * Position error object
- *
- * @constructor
- * @param code
- * @param message
- */
-var PositionError = function(code, message) {
- this.code = code || null;
- this.message = message || '';
-};
-
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-
-module.exports = PositionError;
-
-});
-
// file: lib/common/plugin/ProgressEvent.js
define("cordova/plugin/ProgressEvent", function(require, exports, module) {
@@ -4840,215 +4745,6 @@ modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError');
});
-// file: lib/common/plugin/geolocation.js
-define("cordova/plugin/geolocation", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- PositionError = require('cordova/plugin/PositionError'),
- Position = require('cordova/plugin/Position');
-
-var timers = {}; // list of timers in use
-
-// Returns default params, overrides if provided with values
-function parseParameters(options) {
- var opt = {
- maximumAge: 0,
- enableHighAccuracy: false,
- timeout: Infinity
- };
-
- if (options) {
- if (options.maximumAge !== undefined && !isNaN(options.maximumAge) && options.maximumAge > 0) {
- opt.maximumAge = options.maximumAge;
- }
- if (options.enableHighAccuracy !== undefined) {
- opt.enableHighAccuracy = options.enableHighAccuracy;
- }
- if (options.timeout !== undefined && !isNaN(options.timeout)) {
- if (options.timeout < 0) {
- opt.timeout = 0;
- } else {
- opt.timeout = options.timeout;
- }
- }
- }
-
- return opt;
-}
-
-// Returns a timeout failure, closed over a specified timeout value and error callback.
-function createTimeout(errorCallback, timeout) {
- var t = setTimeout(function() {
- clearTimeout(t);
- t = null;
- errorCallback({
- code:PositionError.TIMEOUT,
- message:"Position retrieval timed out."
- });
- }, timeout);
- return t;
-}
-
-var geolocation = {
- lastPosition:null, // reference to last known (cached) position returned
- /**
- * Asynchronously acquires the current position.
- *
- * @param {Function} successCallback The function to call when the position data is available
- * @param {Function} errorCallback The function to call when there is an error getting the heading position. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the position data. (OPTIONAL)
- */
- getCurrentPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- // Timer var that will fire an error callback if no position is retrieved from native
- // before the "timeout" param provided expires
- var timeoutTimer = {timer:null};
-
- var win = function(p) {
- clearTimeout(timeoutTimer.timer);
- if (!(timeoutTimer.timer)) {
- // Timeout already happened, or native fired error callback for
- // this geo request.
- // Don't continue with success callback.
- return;
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
- var fail = function(e) {
- clearTimeout(timeoutTimer.timer);
- timeoutTimer.timer = null;
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- // Check our cached position, if its timestamp difference with current time is less than the maximumAge, then just
- // fire the success callback with the cached position.
- if (geolocation.lastPosition && options.maximumAge && (((new Date()).getTime() - geolocation.lastPosition.timestamp.getTime()) <= options.maximumAge)) {
- successCallback(geolocation.lastPosition);
- // If the cached position check failed and the timeout was set to 0, error out with a TIMEOUT error object.
- } else if (options.timeout === 0) {
- fail({
- code:PositionError.TIMEOUT,
- message:"timeout value in PositionOptions set to 0 and no cached Position object available, or cached Position object's age exceeds provided PositionOptions' maximumAge parameter."
- });
- // Otherwise we have to call into native to retrieve a position.
- } else {
- if (options.timeout !== Infinity) {
- // If the timeout value was not set to Infinity (default), then
- // set up a timeout function that will fire the error callback
- // if no successful position was retrieved before timeout expired.
- timeoutTimer.timer = createTimeout(fail, options.timeout);
- } else {
- // This is here so the check in the win function doesn't mess stuff up
- // may seem weird but this guarantees timeoutTimer is
- // always truthy before we call into native
- timeoutTimer.timer = true;
- }
- exec(win, fail, "Geolocation", "getLocation", [options.enableHighAccuracy, options.maximumAge]);
- }
- return timeoutTimer;
- },
- /**
- * Asynchronously watches the geolocation for changes to geolocation. When a change occurs,
- * the successCallback is called with the new location.
- *
- * @param {Function} successCallback The function to call each time the location data is available
- * @param {Function} errorCallback The function to call when there is an error getting the location data. (OPTIONAL)
- * @param {PositionOptions} options The options for getting the location data such as frequency. (OPTIONAL)
- * @return String The watch id that must be passed to #clearWatch to stop watching.
- */
- watchPosition:function(successCallback, errorCallback, options) {
- argscheck.checkArgs('fFO', 'geolocation.getCurrentPosition', arguments);
- options = parseParameters(options);
-
- var id = utils.createUUID();
-
- // Tell device to get a position ASAP, and also retrieve a reference to the timeout timer generated in getCurrentPosition
- timers[id] = geolocation.getCurrentPosition(successCallback, errorCallback, options);
-
- var fail = function(e) {
- clearTimeout(timers[id].timer);
- var err = new PositionError(e.code, e.message);
- if (errorCallback) {
- errorCallback(err);
- }
- };
-
- var win = function(p) {
- clearTimeout(timers[id].timer);
- if (options.timeout !== Infinity) {
- timers[id].timer = createTimeout(fail, options.timeout);
- }
- var pos = new Position(
- {
- latitude:p.latitude,
- longitude:p.longitude,
- altitude:p.altitude,
- accuracy:p.accuracy,
- heading:p.heading,
- velocity:p.velocity,
- altitudeAccuracy:p.altitudeAccuracy
- },
- (p.timestamp === undefined ? new Date() : ((p.timestamp instanceof Date) ? p.timestamp : new Date(p.timestamp)))
- );
- geolocation.lastPosition = pos;
- successCallback(pos);
- };
-
- exec(win, fail, "Geolocation", "addWatch", [id, options.enableHighAccuracy]);
-
- return id;
- },
- /**
- * Clears the specified heading watch.
- *
- * @param {String} id The ID of the watch returned from #watchPosition
- */
- clearWatch:function(id) {
- if (id && timers[id] !== undefined) {
- clearTimeout(timers[id].timer);
- timers[id].timer = false;
- exec(null, null, "Geolocation", "clearWatch", [id]);
- }
- }
-};
-
-module.exports = geolocation;
-
-});
-
-// file: lib/common/plugin/geolocation/symbols.js
-define("cordova/plugin/geolocation/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/geolocation', 'navigator.geolocation');
-modulemapper.clobbers('cordova/plugin/PositionError', 'PositionError');
-modulemapper.clobbers('cordova/plugin/Position', 'Position');
-modulemapper.clobbers('cordova/plugin/Coordinates', 'Coordinates');
-
-});
-
// file: lib/common/plugin/globalization.js
define("cordova/plugin/globalization", function(require, exports, module) {
[15/50] [abbrv] android commit: updated cordovajs
Posted by ag...@apache.org.
updated cordovajs
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/e30bc6b6
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/e30bc6b6
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/e30bc6b6
Branch: refs/heads/master
Commit: e30bc6b6e44f4ad7bcbef7d1808215f0ae8c47dc
Parents: 3a55991
Author: Steven Gill <st...@gmail.com>
Authored: Thu Jun 13 15:55:48 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu Jun 13 15:55:48 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 58 ++----------------------------------
1 file changed, 2 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/e30bc6b6/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index a90b232..f8667e5 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
// Platform: android
-// 2.7.0rc1-101-gc6482ac
+// 2.7.0rc1-116-gf0108ae
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -19,7 +19,7 @@
under the License.
*/
;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-101-gc6482ac';
+var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-116-gf0108ae';
// file: lib/scripts/require.js
var require,
@@ -1273,60 +1273,6 @@ module.exports = {
});
-// file: lib/common/plugin/Coordinates.js
-define("cordova/plugin/Coordinates", function(require, exports, module) {
-
-/**
- * This class contains position information.
- * @param {Object} lat
- * @param {Object} lng
- * @param {Object} alt
- * @param {Object} acc
- * @param {Object} head
- * @param {Object} vel
- * @param {Object} altacc
- * @constructor
- */
-var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
- /**
- * The latitude of the position.
- */
- this.latitude = lat;
- /**
- * The longitude of the position,
- */
- this.longitude = lng;
- /**
- * The accuracy of the position.
- */
- this.accuracy = acc;
- /**
- * The altitude of the position.
- */
- this.altitude = (alt !== undefined ? alt : null);
- /**
- * The direction the device is moving at the position.
- */
- this.heading = (head !== undefined ? head : null);
- /**
- * The velocity with which the device is moving at the position.
- */
- this.speed = (vel !== undefined ? vel : null);
-
- if (this.speed === 0 || this.speed === null) {
- this.heading = NaN;
- }
-
- /**
- * The altitude accuracy of the position.
- */
- this.altitudeAccuracy = (altacc !== undefined) ? altacc : null;
-};
-
-module.exports = Coordinates;
-
-});
-
// file: lib/common/plugin/DirectoryEntry.js
define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
[29/50] [abbrv] android commit: Merge branch 'CB-3932' of
git://github.com/angelaf/cordova-android
Posted by ag...@apache.org.
Merge branch 'CB-3932' of git://github.com/angelaf/cordova-android
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/3ace9348
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/3ace9348
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/3ace9348
Branch: refs/heads/2.9.x
Commit: 3ace9348f619ccaf5841b7d7a46d48fc8dd14640
Parents: 98b971b 3a14017
Author: Joe Bowser <bo...@apache.org>
Authored: Wed Jun 19 16:03:18 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Wed Jun 19 16:03:18 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/CordovaWebView.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
[41/50] [abbrv] android commit: [CB-3998] video duration is an int
Posted by ag...@apache.org.
[CB-3998] video duration is an int
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/e64ebdfa
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/e64ebdfa
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/e64ebdfa
Branch: refs/heads/2.9.x
Commit: e64ebdfaeeadfa679408d4906f06fa73e310d02b
Parents: 7e15ff9
Author: Don Coleman <dc...@chariotsolutions.com>
Authored: Tue Jun 25 00:29:16 2013 -0400
Committer: Don Coleman <do...@apache.org>
Committed: Tue Jun 25 14:35:23 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/Capture.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/e64ebdfa/framework/src/org/apache/cordova/Capture.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Capture.java b/framework/src/org/apache/cordova/Capture.java
index 5f737ca..e6e9ece 100644
--- a/framework/src/org/apache/cordova/Capture.java
+++ b/framework/src/org/apache/cordova/Capture.java
@@ -62,7 +62,7 @@ public class Capture extends CordovaPlugin {
private CallbackContext callbackContext; // The callback context from which we were invoked.
private long limit; // the number of pics/vids/clips to take
- private double duration; // optional duration parameter for video recording
+ private int duration; // optional max duration of video recording in seconds
private JSONArray results; // The array of results to be returned to the user
private int numPics; // Number of pictures before capture activity
@@ -80,13 +80,13 @@ public class Capture extends CordovaPlugin {
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
this.callbackContext = callbackContext;
this.limit = 1;
- this.duration = 0.0f;
+ this.duration = 0;
this.results = new JSONArray();
JSONObject options = args.optJSONObject(0);
if (options != null) {
limit = options.optLong("limit", 1);
- duration = options.optDouble("duration", 0.0f);
+ duration = options.optInt("duration", 0);
}
if (action.equals("getFormatData")) {
@@ -215,10 +215,10 @@ public class Capture extends CordovaPlugin {
/**
* Sets up an intent to capture video. Result handled by onActivityResult()
*/
- private void captureVideo(double duration) {
+ private void captureVideo(int duration) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
- if(Build.VERSION.SDK_INT > 8){
+ if(Build.VERSION.SDK_INT > 7){
intent.putExtra("android.intent.extra.durationLimit", duration);
}
this.cordova.startActivityForResult((CordovaPlugin) this, intent, CAPTURE_VIDEO);
[16/50] [abbrv] android commit: Merge branch '3.0.0' of
https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0
Posted by ag...@apache.org.
Merge branch '3.0.0' of https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/12ebadbb
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/12ebadbb
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/12ebadbb
Branch: refs/heads/master
Commit: 12ebadbb0f0229c6b8b76d6fb4e78b95853342c9
Parents: e30bc6b 9288158
Author: Steven Gill <st...@gmail.com>
Authored: Thu Jun 13 15:56:00 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu Jun 13 15:56:00 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/DirectoryManager.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
[23/50] [abbrv] android commit: CB-3784: Patches are always welcome
Posted by ag...@apache.org.
CB-3784: Patches are always welcome
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/8c9e4161
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/8c9e4161
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/8c9e4161
Branch: refs/heads/2.9.x
Commit: 8c9e4161750e2198acbe9421e425d9c574231d82
Parents: 431f333
Author: Joe Bowser <bo...@apache.org>
Authored: Tue Jun 18 13:14:30 2013 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue Jun 18 13:14:30 2013 -0700
----------------------------------------------------------------------
framework/src/org/apache/cordova/api/PluginManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/8c9e4161/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index 43dc8df..a819107 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -396,7 +396,7 @@ public class PluginManager {
private void pluginConfigurationMissing() {
LOG.e(TAG, "=====================================================================================");
- LOG.e(TAG, "ERROR: config.xml is missing. Add res/xml/plugins.xml to your project.");
+ LOG.e(TAG, "ERROR: config.xml is missing. Add res/xml/config.xml to your project.");
LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml");
LOG.e(TAG, "=====================================================================================");
}
[27/50] [abbrv] android commit: updated cordova.js
Posted by ag...@apache.org.
updated cordova.js
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/e726c0d6
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/e726c0d6
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/e726c0d6
Branch: refs/heads/master
Commit: e726c0d60bb05db42c724ff3326ff9ffb126c324
Parents: c531d97
Author: Steven Gill <st...@gmail.com>
Authored: Tue Jun 18 17:01:56 2013 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Tue Jun 18 17:01:56 2013 -0700
----------------------------------------------------------------------
framework/assets/www/cordova.js | 2149 ----------------------------------
1 file changed, 2149 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/e726c0d6/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 40a9ea3..33cc366 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1150,1908 +1150,6 @@ module.exports = {
});
-// file: lib/common/plugin/CaptureAudioOptions.js
-define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all audio capture operation configuration options.
- */
-var CaptureAudioOptions = function(){
- // Upper limit of sound clips user can record. Value must be equal or greater than 1.
- this.limit = 1;
- // Maximum duration of a single sound clip in seconds.
- this.duration = 0;
-};
-
-module.exports = CaptureAudioOptions;
-
-});
-
-// file: lib/common/plugin/CaptureError.js
-define("cordova/plugin/CaptureError", function(require, exports, module) {
-
-/**
- * The CaptureError interface encapsulates all errors in the Capture API.
- */
-var CaptureError = function(c) {
- this.code = c || null;
-};
-
-// Camera or microphone failed to capture image or sound.
-CaptureError.CAPTURE_INTERNAL_ERR = 0;
-// Camera application or audio capture application is currently serving other capture request.
-CaptureError.CAPTURE_APPLICATION_BUSY = 1;
-// Invalid use of the API (e.g. limit parameter has value less than one).
-CaptureError.CAPTURE_INVALID_ARGUMENT = 2;
-// User exited camera application or audio capture application before capturing anything.
-CaptureError.CAPTURE_NO_MEDIA_FILES = 3;
-// The requested capture operation is not supported.
-CaptureError.CAPTURE_NOT_SUPPORTED = 20;
-
-module.exports = CaptureError;
-
-});
-
-// file: lib/common/plugin/CaptureImageOptions.js
-define("cordova/plugin/CaptureImageOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all image capture operation configuration options.
- */
-var CaptureImageOptions = function(){
- // Upper limit of images user can take. Value must be equal or greater than 1.
- this.limit = 1;
-};
-
-module.exports = CaptureImageOptions;
-
-});
-
-// file: lib/common/plugin/CaptureVideoOptions.js
-define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) {
-
-/**
- * Encapsulates all video capture operation configuration options.
- */
-var CaptureVideoOptions = function(){
- // Upper limit of videos user can record. Value must be equal or greater than 1.
- this.limit = 1;
- // Maximum duration of a single video clip in seconds.
- this.duration = 0;
-};
-
-module.exports = CaptureVideoOptions;
-
-});
-
-// file: lib/common/plugin/ConfigurationData.js
-define("cordova/plugin/ConfigurationData", function(require, exports, module) {
-
-/**
- * Encapsulates a set of parameters that the capture device supports.
- */
-function ConfigurationData() {
- // The ASCII-encoded string in lower case representing the media type.
- this.type = null;
- // The height attribute represents height of the image or video in pixels.
- // In the case of a sound clip this attribute has value 0.
- this.height = 0;
- // The width attribute represents width of the image or video in pixels.
- // In the case of a sound clip this attribute has value 0
- this.width = 0;
-}
-
-module.exports = ConfigurationData;
-
-});
-
-// file: lib/common/plugin/DirectoryEntry.js
-define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- Entry = require('cordova/plugin/Entry'),
- FileError = require('cordova/plugin/FileError'),
- DirectoryReader = require('cordova/plugin/DirectoryReader');
-
-/**
- * An interface representing a directory on the file system.
- *
- * {boolean} isFile always false (readonly)
- * {boolean} isDirectory always true (readonly)
- * {DOMString} name of the directory, excluding the path leading to it (readonly)
- * {DOMString} fullPath the absolute full path to the directory (readonly)
- * TODO: implement this!!! {FileSystem} filesystem on which the directory resides (readonly)
- */
-var DirectoryEntry = function(name, fullPath) {
- DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath);
-};
-
-utils.extend(DirectoryEntry, Entry);
-
-/**
- * Creates a new DirectoryReader to read entries from this directory
- */
-DirectoryEntry.prototype.createReader = function() {
- return new DirectoryReader(this.fullPath);
-};
-
-/**
- * Creates or looks up a directory
- *
- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory
- * @param {Flags} options to create or exclusively create the directory
- * @param {Function} successCallback is called with the new entry
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) {
- argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
- var win = successCallback && function(result) {
- var entry = new DirectoryEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getDirectory", [this.fullPath, path, options]);
-};
-
-/**
- * Deletes a directory and all of it's contents
- *
- * @param {Function} successCallback is called with no parameters
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]);
-};
-
-/**
- * Creates or looks up a file
- *
- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file
- * @param {Flags} options to create or exclusively create the file
- * @param {Function} successCallback is called with the new entry
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) {
- argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
- var win = successCallback && function(result) {
- var FileEntry = require('cordova/plugin/FileEntry');
- var entry = new FileEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getFile", [this.fullPath, path, options]);
-};
-
-module.exports = DirectoryEntry;
-
-});
-
-// file: lib/common/plugin/DirectoryReader.js
-define("cordova/plugin/DirectoryReader", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError') ;
-
-/**
- * An interface that lists the files and directories in a directory.
- */
-function DirectoryReader(path) {
- this.path = path || null;
-}
-
-/**
- * Returns a list of entries from a directory.
- *
- * @param {Function} successCallback is called with a list of entries
- * @param {Function} errorCallback is called with a FileError
- */
-DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) {
- var win = typeof successCallback !== 'function' ? null : function(result) {
- var retVal = [];
- for (var i=0; i<result.length; i++) {
- var entry = null;
- if (result[i].isDirectory) {
- entry = new (require('cordova/plugin/DirectoryEntry'))();
- }
- else if (result[i].isFile) {
- entry = new (require('cordova/plugin/FileEntry'))();
- }
- entry.isDirectory = result[i].isDirectory;
- entry.isFile = result[i].isFile;
- entry.name = result[i].name;
- entry.fullPath = result[i].fullPath;
- retVal.push(entry);
- }
- successCallback(retVal);
- };
- var fail = typeof errorCallback !== 'function' ? null : function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "readEntries", [this.path]);
-};
-
-module.exports = DirectoryReader;
-
-});
-
-// file: lib/common/plugin/Entry.js
-define("cordova/plugin/Entry", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError'),
- Metadata = require('cordova/plugin/Metadata');
-
-/**
- * Represents a file or directory on the local file system.
- *
- * @param isFile
- * {boolean} true if Entry is a file (readonly)
- * @param isDirectory
- * {boolean} true if Entry is a directory (readonly)
- * @param name
- * {DOMString} name of the file or directory, excluding the path
- * leading to it (readonly)
- * @param fullPath
- * {DOMString} the absolute full path to the file or directory
- * (readonly)
- */
-function Entry(isFile, isDirectory, name, fullPath, fileSystem) {
- this.isFile = !!isFile;
- this.isDirectory = !!isDirectory;
- this.name = name || '';
- this.fullPath = fullPath || '';
- this.filesystem = fileSystem || null;
-}
-
-/**
- * Look up the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- */
-Entry.prototype.getMetadata = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
- var success = successCallback && function(lastModified) {
- var metadata = new Metadata(lastModified);
- successCallback(metadata);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
-
- exec(success, fail, "File", "getMetadata", [this.fullPath]);
-};
-
-/**
- * Set the metadata of the entry.
- *
- * @param successCallback
- * {Function} is called with a Metadata object
- * @param errorCallback
- * {Function} is called with a FileError
- * @param metadataObject
- * {Object} keys and values to set
- */
-Entry.prototype.setMetadata = function(successCallback, errorCallback, metadataObject) {
- argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
- exec(successCallback, errorCallback, "File", "setMetadata", [this.fullPath, metadataObject]);
-};
-
-/**
- * Move a file or directory to a new location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to move this entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new DirectoryEntry object
- * @param errorCallback
- * {Function} called with a FileError
- */
-Entry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- // source path
- var srcPath = this.fullPath,
- // entry name
- name = newName || this.name,
- success = function(entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail && fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- // copy
- exec(success, fail, "File", "moveTo", [srcPath, parent.fullPath, name]);
-};
-
-/**
- * Copy a directory to a different location.
- *
- * @param parent
- * {DirectoryEntry} the directory to which to copy the entry
- * @param newName
- * {DOMString} new name of the entry, defaults to the current name
- * @param successCallback
- * {Function} called with the new Entry object
- * @param errorCallback
- * {Function} called with a FileError
- */
-Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) {
- argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
-
- // source path
- var srcPath = this.fullPath,
- // entry name
- name = newName || this.name,
- // success callback
- success = function(entry) {
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail && fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- // copy
- exec(success, fail, "File", "copyTo", [srcPath, parent.fullPath, name]);
-};
-
-/**
- * Return a URL that can be used to identify this entry.
- */
-Entry.prototype.toURL = function() {
- // fullPath attribute contains the full URL
- return this.fullPath;
-};
-
-/**
- * Returns a URI that can be used to identify this entry.
- *
- * @param {DOMString} mimeType for a FileEntry, the mime type to be used to interpret the file, when loaded through this URI.
- * @return uri
- */
-Entry.prototype.toURI = function(mimeType) {
- console.log("DEPRECATED: Update your code to use 'toURL'");
- // fullPath attribute contains the full URI
- return this.toURL();
-};
-
-/**
- * Remove a file or directory. It is an error to attempt to delete a
- * directory that is not empty. It is an error to attempt to delete a
- * root directory of a file system.
- *
- * @param successCallback {Function} called with no parameters
- * @param errorCallback {Function} called with a FileError
- */
-Entry.prototype.remove = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.remove', arguments);
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(successCallback, fail, "File", "remove", [this.fullPath]);
-};
-
-/**
- * Look up the parent DirectoryEntry of this entry.
- *
- * @param successCallback {Function} called with the parent DirectoryEntry object
- * @param errorCallback {Function} called with a FileError
- */
-Entry.prototype.getParent = function(successCallback, errorCallback) {
- argscheck.checkArgs('FF', 'Entry.getParent', arguments);
- var win = successCallback && function(result) {
- var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
- var entry = new DirectoryEntry(result.name, result.fullPath);
- successCallback(entry);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getParent", [this.fullPath]);
-};
-
-module.exports = Entry;
-
-});
-
-// file: lib/common/plugin/File.js
-define("cordova/plugin/File", function(require, exports, module) {
-
-/**
- * Constructor.
- * name {DOMString} name of the file, without path information
- * fullPath {DOMString} the full path of the file, including the name
- * type {DOMString} mime type
- * lastModifiedDate {Date} last modified date
- * size {Number} size of the file in bytes
- */
-
-var File = function(name, fullPath, type, lastModifiedDate, size){
- this.name = name || '';
- this.fullPath = fullPath || null;
- this.type = type || null;
- this.lastModifiedDate = lastModifiedDate || null;
- this.size = size || 0;
-
- // These store the absolute start and end for slicing the file.
- this.start = 0;
- this.end = this.size;
-};
-
-/**
- * Returns a "slice" of the file. Since Cordova Files don't contain the actual
- * content, this really returns a File with adjusted start and end.
- * Slices of slices are supported.
- * start {Number} The index at which to start the slice (inclusive).
- * end {Number} The index at which to end the slice (exclusive).
- */
-File.prototype.slice = function(start, end) {
- var size = this.end - this.start;
- var newStart = 0;
- var newEnd = size;
- if (arguments.length) {
- if (start < 0) {
- newStart = Math.max(size + start, 0);
- } else {
- newStart = Math.min(size, start);
- }
- }
-
- if (arguments.length >= 2) {
- if (end < 0) {
- newEnd = Math.max(size + end, 0);
- } else {
- newEnd = Math.min(end, size);
- }
- }
-
- var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size);
- newFile.start = this.start + newStart;
- newFile.end = this.start + newEnd;
- return newFile;
-};
-
-
-module.exports = File;
-
-});
-
-// file: lib/common/plugin/FileEntry.js
-define("cordova/plugin/FileEntry", function(require, exports, module) {
-
-var utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- Entry = require('cordova/plugin/Entry'),
- FileWriter = require('cordova/plugin/FileWriter'),
- File = require('cordova/plugin/File'),
- FileError = require('cordova/plugin/FileError');
-
-/**
- * An interface representing a file on the file system.
- *
- * {boolean} isFile always true (readonly)
- * {boolean} isDirectory always false (readonly)
- * {DOMString} name of the file, excluding the path leading to it (readonly)
- * {DOMString} fullPath the absolute full path to the file (readonly)
- * {FileSystem} filesystem on which the file resides (readonly)
- */
-var FileEntry = function(name, fullPath) {
- FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]);
-};
-
-utils.extend(FileEntry, Entry);
-
-/**
- * Creates a new FileWriter associated with the file that this FileEntry represents.
- *
- * @param {Function} successCallback is called with the new FileWriter
- * @param {Function} errorCallback is called with a FileError
- */
-FileEntry.prototype.createWriter = function(successCallback, errorCallback) {
- this.file(function(filePointer) {
- var writer = new FileWriter(filePointer);
-
- if (writer.fileName === null || writer.fileName === "") {
- errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR));
- } else {
- successCallback && successCallback(writer);
- }
- }, errorCallback);
-};
-
-/**
- * Returns a File that represents the current state of the file that this FileEntry represents.
- *
- * @param {Function} successCallback is called with the new File object
- * @param {Function} errorCallback is called with a FileError
- */
-FileEntry.prototype.file = function(successCallback, errorCallback) {
- var win = successCallback && function(f) {
- var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size);
- successCallback(file);
- };
- var fail = errorCallback && function(code) {
- errorCallback(new FileError(code));
- };
- exec(win, fail, "File", "getFileMetadata", [this.fullPath]);
-};
-
-
-module.exports = FileEntry;
-
-});
-
-// file: lib/common/plugin/FileError.js
-define("cordova/plugin/FileError", function(require, exports, module) {
-
-/**
- * FileError
- */
-function FileError(error) {
- this.code = error || null;
-}
-
-// File error codes
-// Found in DOMException
-FileError.NOT_FOUND_ERR = 1;
-FileError.SECURITY_ERR = 2;
-FileError.ABORT_ERR = 3;
-
-// Added by File API specification
-FileError.NOT_READABLE_ERR = 4;
-FileError.ENCODING_ERR = 5;
-FileError.NO_MODIFICATION_ALLOWED_ERR = 6;
-FileError.INVALID_STATE_ERR = 7;
-FileError.SYNTAX_ERR = 8;
-FileError.INVALID_MODIFICATION_ERR = 9;
-FileError.QUOTA_EXCEEDED_ERR = 10;
-FileError.TYPE_MISMATCH_ERR = 11;
-FileError.PATH_EXISTS_ERR = 12;
-
-module.exports = FileError;
-
-});
-
-// file: lib/common/plugin/FileReader.js
-define("cordova/plugin/FileReader", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- modulemapper = require('cordova/modulemapper'),
- utils = require('cordova/utils'),
- File = require('cordova/plugin/File'),
- FileError = require('cordova/plugin/FileError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent'),
- origFileReader = modulemapper.getOriginalSymbol(this, 'FileReader');
-
-/**
- * This class reads the mobile device file system.
- *
- * For Android:
- * The root directory is the root of the file system.
- * To read from the SD card, the file name is "sdcard/my_file.txt"
- * @constructor
- */
-var FileReader = function() {
- this._readyState = 0;
- this._error = null;
- this._result = null;
- this._fileName = '';
- this._realReader = origFileReader ? new origFileReader() : {};
-};
-
-// States
-FileReader.EMPTY = 0;
-FileReader.LOADING = 1;
-FileReader.DONE = 2;
-
-utils.defineGetter(FileReader.prototype, 'readyState', function() {
- return this._fileName ? this._readyState : this._realReader.readyState;
-});
-
-utils.defineGetter(FileReader.prototype, 'error', function() {
- return this._fileName ? this._error: this._realReader.error;
-});
-
-utils.defineGetter(FileReader.prototype, 'result', function() {
- return this._fileName ? this._result: this._realReader.result;
-});
-
-function defineEvent(eventName) {
- utils.defineGetterSetter(FileReader.prototype, eventName, function() {
- return this._realReader[eventName] || null;
- }, function(value) {
- this._realReader[eventName] = value;
- });
-}
-defineEvent('onloadstart'); // When the read starts.
-defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total)
-defineEvent('onload'); // When the read has successfully completed.
-defineEvent('onerror'); // When the read has failed (see errors).
-defineEvent('onloadend'); // When the request has completed (either in success or failure).
-defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method.
-
-function initRead(reader, file) {
- // Already loading something
- if (reader.readyState == FileReader.LOADING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- reader._result = null;
- reader._error = null;
- reader._readyState = FileReader.LOADING;
-
- if (typeof file.fullPath == 'string') {
- reader._fileName = file.fullPath;
- } else {
- reader._fileName = '';
- return true;
- }
-
- reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader}));
-}
-
-/**
- * Abort reading file.
- */
-FileReader.prototype.abort = function() {
- if (origFileReader && !this._fileName) {
- return this._realReader.abort();
- }
- this._result = null;
-
- if (this._readyState == FileReader.DONE || this._readyState == FileReader.EMPTY) {
- return;
- }
-
- this._readyState = FileReader.DONE;
-
- // If abort callback
- if (typeof this.onabort === 'function') {
- this.onabort(new ProgressEvent('abort', {target:this}));
- }
- // If load end callback
- if (typeof this.onloadend === 'function') {
- this.onloadend(new ProgressEvent('loadend', {target:this}));
- }
-};
-
-/**
- * Read text file.
- *
- * @param file {File} File object containing file properties
- * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets)
- */
-FileReader.prototype.readAsText = function(file, encoding) {
- if (initRead(this, file)) {
- return this._realReader.readAsText(file, encoding);
- }
-
- // Default encoding is UTF-8
- var enc = encoding ? encoding : "UTF-8";
- var me = this;
- var execArgs = [this._fileName, enc, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // Save result
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // null result
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsText", execArgs);
-};
-
-
-/**
- * Read file and return data as a base64 encoded data url.
- * A data url is of the form:
- * data:[<mediatype>][;base64],<data>
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsDataURL = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsDataURL(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- // Save result
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsDataURL", execArgs);
-};
-
-/**
- * Read file and return data as a binary data.
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsBinaryString = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsBinaryString(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsBinaryString", execArgs);
-};
-
-/**
- * Read file and return data as a binary data.
- *
- * @param file {File} File object containing file properties
- */
-FileReader.prototype.readAsArrayBuffer = function(file) {
- if (initRead(this, file)) {
- return this._realReader.readAsArrayBuffer(file);
- }
-
- var me = this;
- var execArgs = [this._fileName, file.start, file.end];
-
- // Read file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = r;
-
- // If onload callback
- if (typeof me.onload === "function") {
- me.onload(new ProgressEvent("load", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me._readyState === FileReader.DONE) {
- return;
- }
-
- // DONE state
- me._readyState = FileReader.DONE;
-
- me._result = null;
-
- // Save error
- me._error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {target:me}));
- }
-
- // If onloadend callback
- if (typeof me.onloadend === "function") {
- me.onloadend(new ProgressEvent("loadend", {target:me}));
- }
- }, "File", "readAsArrayBuffer", execArgs);
-};
-
-module.exports = FileReader;
-
-});
-
-// file: lib/common/plugin/FileSystem.js
-define("cordova/plugin/FileSystem", function(require, exports, module) {
-
-var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
-
-/**
- * An interface representing a file system
- *
- * @constructor
- * {DOMString} name the unique name of the file system (readonly)
- * {DirectoryEntry} root directory of the file system (readonly)
- */
-var FileSystem = function(name, root) {
- this.name = name || null;
- if (root) {
- this.root = new DirectoryEntry(root.name, root.fullPath);
- }
-};
-
-module.exports = FileSystem;
-
-});
-
-// file: lib/common/plugin/FileTransfer.js
-define("cordova/plugin/FileTransfer", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- exec = require('cordova/exec'),
- FileTransferError = require('cordova/plugin/FileTransferError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent');
-
-function newProgressEvent(result) {
- var pe = new ProgressEvent();
- pe.lengthComputable = result.lengthComputable;
- pe.loaded = result.loaded;
- pe.total = result.total;
- return pe;
-}
-
-function getBasicAuthHeader(urlString) {
- var header = null;
-
- if (window.btoa) {
- // parse the url using the Location object
- var url = document.createElement('a');
- url.href = urlString;
-
- var credentials = null;
- var protocol = url.protocol + "//";
- var origin = protocol + url.host;
-
- // check whether there are the username:password credentials in the url
- if (url.href.indexOf(origin) !== 0) { // credentials found
- var atIndex = url.href.indexOf("@");
- credentials = url.href.substring(protocol.length, atIndex);
- }
-
- if (credentials) {
- var authHeader = "Authorization";
- var authHeaderValue = "Basic " + window.btoa(credentials);
-
- header = {
- name : authHeader,
- value : authHeaderValue
- };
- }
- }
-
- return header;
-}
-
-var idCounter = 0;
-
-/**
- * FileTransfer uploads a file to a remote server.
- * @constructor
- */
-var FileTransfer = function() {
- this._id = ++idCounter;
- this.onprogress = null; // optional callback
-};
-
-/**
-* Given an absolute file path, uploads a file on the device to a remote server
-* using a multipart HTTP request.
-* @param filePath {String} Full path of the file on the device
-* @param server {String} URL of the server to receive the file
-* @param successCallback (Function} Callback to be invoked when upload has completed
-* @param errorCallback {Function} Callback to be invoked upon error
-* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
-* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
-*/
-FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
- argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
- // check for options
- var fileKey = null;
- var fileName = null;
- var mimeType = null;
- var params = null;
- var chunkedMode = true;
- var headers = null;
- var httpMethod = null;
- var basicAuthHeader = getBasicAuthHeader(server);
- if (basicAuthHeader) {
- options = options || {};
- options.headers = options.headers || {};
- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
- }
-
- if (options) {
- fileKey = options.fileKey;
- fileName = options.fileName;
- mimeType = options.mimeType;
- headers = options.headers;
- httpMethod = options.httpMethod || "POST";
- if (httpMethod.toUpperCase() == "PUT"){
- httpMethod = "PUT";
- } else {
- httpMethod = "POST";
- }
- if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
- chunkedMode = options.chunkedMode;
- }
- if (options.params) {
- params = options.params;
- }
- else {
- params = {};
- }
- }
-
- var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
- errorCallback(error);
- };
-
- var self = this;
- var win = function(result) {
- if (typeof result.lengthComputable != "undefined") {
- if (self.onprogress) {
- self.onprogress(newProgressEvent(result));
- }
- } else {
- successCallback && successCallback(result);
- }
- };
- exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
-};
-
-/**
- * Downloads a file form a given URL and saves it to the specified directory.
- * @param source {String} URL of the server to receive the file
- * @param target {String} Full path of the file on the device
- * @param successCallback (Function} Callback to be invoked when upload has completed
- * @param errorCallback {Function} Callback to be invoked upon error
- * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
- * @param options {FileDownloadOptions} Optional parameters such as headers
- */
-FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
- argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
- var self = this;
-
- var basicAuthHeader = getBasicAuthHeader(source);
- if (basicAuthHeader) {
- options = options || {};
- options.headers = options.headers || {};
- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
- }
-
- var headers = null;
- if (options) {
- headers = options.headers || null;
- }
-
- var win = function(result) {
- if (typeof result.lengthComputable != "undefined") {
- if (self.onprogress) {
- return self.onprogress(newProgressEvent(result));
- }
- } else if (successCallback) {
- var entry = null;
- if (result.isDirectory) {
- entry = new (require('cordova/plugin/DirectoryEntry'))();
- }
- else if (result.isFile) {
- entry = new (require('cordova/plugin/FileEntry'))();
- }
- entry.isDirectory = result.isDirectory;
- entry.isFile = result.isFile;
- entry.name = result.name;
- entry.fullPath = result.fullPath;
- successCallback(entry);
- }
- };
-
- var fail = errorCallback && function(e) {
- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
- errorCallback(error);
- };
-
- exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
-};
-
-/**
- * Aborts the ongoing file transfer on this object. The original error
- * callback for the file transfer will be called if necessary.
- */
-FileTransfer.prototype.abort = function() {
- exec(null, null, 'FileTransfer', 'abort', [this._id]);
-};
-
-module.exports = FileTransfer;
-
-});
-
-// file: lib/common/plugin/FileTransferError.js
-define("cordova/plugin/FileTransferError", function(require, exports, module) {
-
-/**
- * FileTransferError
- * @constructor
- */
-var FileTransferError = function(code, source, target, status, body) {
- this.code = code || null;
- this.source = source || null;
- this.target = target || null;
- this.http_status = status || null;
- this.body = body || null;
-};
-
-FileTransferError.FILE_NOT_FOUND_ERR = 1;
-FileTransferError.INVALID_URL_ERR = 2;
-FileTransferError.CONNECTION_ERR = 3;
-FileTransferError.ABORT_ERR = 4;
-
-module.exports = FileTransferError;
-
-});
-
-// file: lib/common/plugin/FileUploadOptions.js
-define("cordova/plugin/FileUploadOptions", function(require, exports, module) {
-
-/**
- * Options to customize the HTTP request used to upload files.
- * @constructor
- * @param fileKey {String} Name of file request parameter.
- * @param fileName {String} Filename to be used by the server. Defaults to image.jpg.
- * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg.
- * @param params {Object} Object with key: value params to send to the server.
- * @param headers {Object} Keys are header names, values are header values. Multiple
- * headers of the same name are not supported.
- */
-var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers, httpMethod) {
- this.fileKey = fileKey || null;
- this.fileName = fileName || null;
- this.mimeType = mimeType || null;
- this.params = params || null;
- this.headers = headers || null;
- this.httpMethod = httpMethod || null;
-};
-
-module.exports = FileUploadOptions;
-
-});
-
-// file: lib/common/plugin/FileUploadResult.js
-define("cordova/plugin/FileUploadResult", function(require, exports, module) {
-
-/**
- * FileUploadResult
- * @constructor
- */
-var FileUploadResult = function() {
- this.bytesSent = 0;
- this.responseCode = null;
- this.response = null;
-};
-
-module.exports = FileUploadResult;
-
-});
-
-// file: lib/common/plugin/FileWriter.js
-define("cordova/plugin/FileWriter", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- FileError = require('cordova/plugin/FileError'),
- ProgressEvent = require('cordova/plugin/ProgressEvent');
-
-/**
- * This class writes to the mobile device file system.
- *
- * For Android:
- * The root directory is the root of the file system.
- * To write to the SD card, the file name is "sdcard/my_file.txt"
- *
- * @constructor
- * @param file {File} File object containing file properties
- * @param append if true write to the end of the file, otherwise overwrite the file
- */
-var FileWriter = function(file) {
- this.fileName = "";
- this.length = 0;
- if (file) {
- this.fileName = file.fullPath || file;
- this.length = file.size || 0;
- }
- // default is to write at the beginning of the file
- this.position = 0;
-
- this.readyState = 0; // EMPTY
-
- this.result = null;
-
- // Error
- this.error = null;
-
- // Event handlers
- this.onwritestart = null; // When writing starts
- this.onprogress = null; // While writing the file, and reporting partial file data
- this.onwrite = null; // When the write has successfully completed.
- this.onwriteend = null; // When the request has completed (either in success or failure).
- this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method.
- this.onerror = null; // When the write has failed (see errors).
-};
-
-// States
-FileWriter.INIT = 0;
-FileWriter.WRITING = 1;
-FileWriter.DONE = 2;
-
-/**
- * Abort writing file.
- */
-FileWriter.prototype.abort = function() {
- // check for invalid state
- if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // set error
- this.error = new FileError(FileError.ABORT_ERR);
-
- this.readyState = FileWriter.DONE;
-
- // If abort callback
- if (typeof this.onabort === "function") {
- this.onabort(new ProgressEvent("abort", {"target":this}));
- }
-
- // If write end callback
- if (typeof this.onwriteend === "function") {
- this.onwriteend(new ProgressEvent("writeend", {"target":this}));
- }
-};
-
-/**
- * Writes data to the file
- *
- * @param text to be written
- */
-FileWriter.prototype.write = function(text) {
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // WRITING state
- this.readyState = FileWriter.WRITING;
-
- var me = this;
-
- // If onwritestart callback
- if (typeof me.onwritestart === "function") {
- me.onwritestart(new ProgressEvent("writestart", {"target":me}));
- }
-
- // Write file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // position always increases by bytes written because file would be extended
- me.position += r;
- // The length of the file is now where we are done writing.
-
- me.length = me.position;
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // If onwrite callback
- if (typeof me.onwrite === "function") {
- me.onwrite(new ProgressEvent("write", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Save error
- me.error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- }, "File", "write", [this.fileName, text, this.position]);
-};
-
-/**
- * Moves the file pointer to the location specified.
- *
- * If the offset is a negative number the position of the file
- * pointer is rewound. If the offset is greater than the file
- * size the position is set to the end of the file.
- *
- * @param offset is the location to move the file pointer to.
- */
-FileWriter.prototype.seek = function(offset) {
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- if (!offset && offset !== 0) {
- return;
- }
-
- // See back from end of file.
- if (offset < 0) {
- this.position = Math.max(offset + this.length, 0);
- }
- // Offset is bigger than file size so set position
- // to the end of the file.
- else if (offset > this.length) {
- this.position = this.length;
- }
- // Offset is between 0 and file size so set the position
- // to start writing.
- else {
- this.position = offset;
- }
-};
-
-/**
- * Truncates the file to the size specified.
- *
- * @param size to chop the file at.
- */
-FileWriter.prototype.truncate = function(size) {
- // Throw an exception if we are already writing a file
- if (this.readyState === FileWriter.WRITING) {
- throw new FileError(FileError.INVALID_STATE_ERR);
- }
-
- // WRITING state
- this.readyState = FileWriter.WRITING;
-
- var me = this;
-
- // If onwritestart callback
- if (typeof me.onwritestart === "function") {
- me.onwritestart(new ProgressEvent("writestart", {"target":this}));
- }
-
- // Write file
- exec(
- // Success callback
- function(r) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Update the length of the file
- me.length = r;
- me.position = Math.min(me.position, r);
-
- // If onwrite callback
- if (typeof me.onwrite === "function") {
- me.onwrite(new ProgressEvent("write", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- },
- // Error callback
- function(e) {
- // If DONE (cancelled), then don't do anything
- if (me.readyState === FileWriter.DONE) {
- return;
- }
-
- // DONE state
- me.readyState = FileWriter.DONE;
-
- // Save error
- me.error = new FileError(e);
-
- // If onerror callback
- if (typeof me.onerror === "function") {
- me.onerror(new ProgressEvent("error", {"target":me}));
- }
-
- // If onwriteend callback
- if (typeof me.onwriteend === "function") {
- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
- }
- }, "File", "truncate", [this.fileName, size]);
-};
-
-module.exports = FileWriter;
-
-});
-
-// file: lib/common/plugin/Flags.js
-define("cordova/plugin/Flags", function(require, exports, module) {
-
-/**
- * Supplies arguments to methods that lookup or create files and directories.
- *
- * @param create
- * {boolean} file or directory if it doesn't exist
- * @param exclusive
- * {boolean} used with create; if true the command will fail if
- * target path exists
- */
-function Flags(create, exclusive) {
- this.create = create || false;
- this.exclusive = exclusive || false;
-}
-
-module.exports = Flags;
-
-});
-
-// file: lib/common/plugin/LocalFileSystem.js
-define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-/**
- * Represents a local file system.
- */
-var LocalFileSystem = function() {
-
-};
-
-LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence
-LocalFileSystem.PERSISTENT = 1; //persistent
-
-module.exports = LocalFileSystem;
-
-});
-
-// file: lib/common/plugin/Media.js
-define("cordova/plugin/Media", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- utils = require('cordova/utils'),
- exec = require('cordova/exec');
-
-var mediaObjects = {};
-
-/**
- * This class provides access to the device media, interfaces to both sound and video
- *
- * @constructor
- * @param src The file name or url to play
- * @param successCallback The callback to be called when the file is done playing or recording.
- * successCallback()
- * @param errorCallback The callback to be called if there is an error.
- * errorCallback(int errorCode) - OPTIONAL
- * @param statusCallback The callback to be called when media status has changed.
- * statusCallback(int statusCode) - OPTIONAL
- */
-var Media = function(src, successCallback, errorCallback, statusCallback) {
- argscheck.checkArgs('SFFF', 'Media', arguments);
- this.id = utils.createUUID();
- mediaObjects[this.id] = this;
- this.src = src;
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- this.statusCallback = statusCallback;
- this._duration = -1;
- this._position = -1;
- exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);
-};
-
-// Media messages
-Media.MEDIA_STATE = 1;
-Media.MEDIA_DURATION = 2;
-Media.MEDIA_POSITION = 3;
-Media.MEDIA_ERROR = 9;
-
-// Media states
-Media.MEDIA_NONE = 0;
-Media.MEDIA_STARTING = 1;
-Media.MEDIA_RUNNING = 2;
-Media.MEDIA_PAUSED = 3;
-Media.MEDIA_STOPPED = 4;
-Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"];
-
-// "static" function to return existing objs.
-Media.get = function(id) {
- return mediaObjects[id];
-};
-
-/**
- * Start or resume playing audio file.
- */
-Media.prototype.play = function(options) {
- exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]);
-};
-
-/**
- * Stop playing audio file.
- */
-Media.prototype.stop = function() {
- var me = this;
- exec(function() {
- me._position = 0;
- }, this.errorCallback, "Media", "stopPlayingAudio", [this.id]);
-};
-
-/**
- * Seek or jump to a new time in the track..
- */
-Media.prototype.seekTo = function(milliseconds) {
- var me = this;
- exec(function(p) {
- me._position = p;
- }, this.errorCallback, "Media", "seekToAudio", [this.id, milliseconds]);
-};
-
-/**
- * Pause playing audio file.
- */
-Media.prototype.pause = function() {
- exec(null, this.errorCallback, "Media", "pausePlayingAudio", [this.id]);
-};
-
-/**
- * Get duration of an audio file.
- * The duration is only set for audio that is playing, paused or stopped.
- *
- * @return duration or -1 if not known.
- */
-Media.prototype.getDuration = function() {
- return this._duration;
-};
-
-/**
- * Get position of audio.
- */
-Media.prototype.getCurrentPosition = function(success, fail) {
- var me = this;
- exec(function(p) {
- me._position = p;
- success(p);
- }, fail, "Media", "getCurrentPositionAudio", [this.id]);
-};
-
-/**
- * Start recording audio file.
- */
-Media.prototype.startRecord = function() {
- exec(null, this.errorCallback, "Media", "startRecordingAudio", [this.id, this.src]);
-};
-
-/**
- * Stop recording audio file.
- */
-Media.prototype.stopRecord = function() {
- exec(null, this.errorCallback, "Media", "stopRecordingAudio", [this.id]);
-};
-
-/**
- * Release the resources.
- */
-Media.prototype.release = function() {
- exec(null, this.errorCallback, "Media", "release", [this.id]);
-};
-
-/**
- * Adjust the volume.
- */
-Media.prototype.setVolume = function(volume) {
- exec(null, null, "Media", "setVolume", [this.id, volume]);
-};
-
-/**
- * Audio has status update.
- * PRIVATE
- *
- * @param id The media object id (string)
- * @param msgType The 'type' of update this is
- * @param value Use of value is determined by the msgType
- */
-Media.onStatus = function(id, msgType, value) {
-
- var media = mediaObjects[id];
-
- if(media) {
- switch(msgType) {
- case Media.MEDIA_STATE :
- media.statusCallback && media.statusCallback(value);
- if(value == Media.MEDIA_STOPPED) {
- media.successCallback && media.successCallback();
- }
- break;
- case Media.MEDIA_DURATION :
- media._duration = value;
- break;
- case Media.MEDIA_ERROR :
- media.errorCallback && media.errorCallback(value);
- break;
- case Media.MEDIA_POSITION :
- media._position = Number(value);
- break;
- default :
- console.error && console.error("Unhandled Media.onStatus :: " + msgType);
- break;
- }
- }
- else {
- console.error && console.error("Received Media.onStatus callback for unknown media :: " + id);
- }
-
-};
-
-module.exports = Media;
-
-});
-
-// file: lib/common/plugin/MediaError.js
-define("cordova/plugin/MediaError", function(require, exports, module) {
-
-/**
- * This class contains information about any Media errors.
-*/
-/*
- According to :: http://dev.w3.org/html5/spec-author-view/video.html#mediaerror
- We should never be creating these objects, we should just implement the interface
- which has 1 property for an instance, 'code'
-
- instead of doing :
- errorCallbackFunction( new MediaError(3,'msg') );
-we should simply use a literal :
- errorCallbackFunction( {'code':3} );
- */
-
- var _MediaError = window.MediaError;
-
-
-if(!_MediaError) {
- window.MediaError = _MediaError = function(code, msg) {
- this.code = (typeof code != 'undefined') ? code : null;
- this.message = msg || ""; // message is NON-standard! do not use!
- };
-}
-
-_MediaError.MEDIA_ERR_NONE_ACTIVE = _MediaError.MEDIA_ERR_NONE_ACTIVE || 0;
-_MediaError.MEDIA_ERR_ABORTED = _MediaError.MEDIA_ERR_ABORTED || 1;
-_MediaError.MEDIA_ERR_NETWORK = _MediaError.MEDIA_ERR_NETWORK || 2;
-_MediaError.MEDIA_ERR_DECODE = _MediaError.MEDIA_ERR_DECODE || 3;
-_MediaError.MEDIA_ERR_NONE_SUPPORTED = _MediaError.MEDIA_ERR_NONE_SUPPORTED || 4;
-// TODO: MediaError.MEDIA_ERR_NONE_SUPPORTED is legacy, the W3 spec now defines it as below.
-// as defined by http://dev.w3.org/html5/spec-author-view/video.html#error-codes
-_MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = _MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED || 4;
-
-module.exports = _MediaError;
-
-});
-
-// file: lib/common/plugin/MediaFile.js
-define("cordova/plugin/MediaFile", function(require, exports, module) {
-
-var utils = require('cordova/utils'),
- exec = require('cordova/exec'),
- File = require('cordova/plugin/File'),
- CaptureError = require('cordova/plugin/CaptureError');
-/**
- * Represents a single file.
- *
- * name {DOMString} name of the file, without path information
- * fullPath {DOMString} the full path of the file, including the name
- * type {DOMString} mime type
- * lastModifiedDate {Date} last modified date
- * size {Number} size of the file in bytes
- */
-var MediaFile = function(name, fullPath, type, lastModifiedDate, size){
- MediaFile.__super__.constructor.apply(this, arguments);
-};
-
-utils.extend(MediaFile, File);
-
-/**
- * Request capture format data for a specific file and type
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- */
-MediaFile.prototype.getFormatData = function(successCallback, errorCallback) {
- if (typeof this.fullPath === "undefined" || this.fullPath === null) {
- errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT));
- } else {
- exec(successCallback, errorCallback, "Capture", "getFormatData", [this.fullPath, this.type]);
- }
-};
-
-module.exports = MediaFile;
-
-});
-
-// file: lib/common/plugin/MediaFileData.js
-define("cordova/plugin/MediaFileData", function(require, exports, module) {
-
-/**
- * MediaFileData encapsulates format information of a media file.
- *
- * @param {DOMString} codecs
- * @param {long} bitrate
- * @param {long} height
- * @param {long} width
- * @param {float} duration
- */
-var MediaFileData = function(codecs, bitrate, height, width, duration){
- this.codecs = codecs || null;
- this.bitrate = bitrate || 0;
- this.height = height || 0;
- this.width = width || 0;
- this.duration = duration || 0;
-};
-
-module.exports = MediaFileData;
-
-});
-
-// file: lib/common/plugin/Metadata.js
-define("cordova/plugin/Metadata", function(require, exports, module) {
-
-/**
- * Information about the state of the file or directory
- *
- * {Date} modificationTime (readonly)
- */
-var Metadata = function(time) {
- this.modificationTime = (typeof time != 'undefined'?new Date(time):null);
-};
-
-module.exports = Metadata;
-
-});
-
-// file: lib/common/plugin/ProgressEvent.js
-define("cordova/plugin/ProgressEvent", function(require, exports, module) {
-
-// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill
-// Feature test: See if we can instantiate a native ProgressEvent;
-// if so, use that approach,
-// otherwise fill-in with our own implementation.
-//
-// NOTE: right now we always fill in with our own. Down the road would be nice if we can use whatever is native in the webview.
-var ProgressEvent = (function() {
- /*
- var createEvent = function(data) {
- var event = document.createEvent('Events');
- event.initEvent('ProgressEvent', false, false);
- if (data) {
- for (var i in data) {
- if (data.hasOwnProperty(i)) {
- event[i] = data[i];
- }
- }
- if (data.target) {
- // TODO: cannot call <some_custom_object>.dispatchEvent
- // need to first figure out how to implement EventTarget
- }
- }
- return event;
- };
- try {
- var ev = createEvent({type:"abort",target:document});
- return function ProgressEvent(type, data) {
- data.type = type;
- return createEvent(data);
- };
- } catch(e){
- */
- return function ProgressEvent(type, dict) {
- this.type = type;
- this.bubbles = false;
- this.cancelBubble = false;
- this.cancelable = false;
- this.lengthComputable = false;
- this.loaded = dict && dict.loaded ? dict.loaded : 0;
- this.total = dict && dict.total ? dict.total : 0;
- this.target = dict && dict.target ? dict.target : null;
- };
- //}
-})();
-
-module.exports = ProgressEvent;
-
-});
-
// file: lib/android/plugin/android/app.js
define("cordova/plugin/android/app", function(require, exports, module) {
@@ -3514,100 +1612,6 @@ modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDataba
});
-// file: lib/common/plugin/capture.js
-define("cordova/plugin/capture", function(require, exports, module) {
-
-var exec = require('cordova/exec'),
- MediaFile = require('cordova/plugin/MediaFile');
-
-/**
- * Launches a capture of different types.
- *
- * @param (DOMString} type
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-function _capture(type, successCallback, errorCallback, options) {
- var win = function(pluginResult) {
- var mediaFiles = [];
- var i;
- for (i = 0; i < pluginResult.length; i++) {
- var mediaFile = new MediaFile();
- mediaFile.name = pluginResult[i].name;
- mediaFile.fullPath = pluginResult[i].fullPath;
- mediaFile.type = pluginResult[i].type;
- mediaFile.lastModifiedDate = pluginResult[i].lastModifiedDate;
- mediaFile.size = pluginResult[i].size;
- mediaFiles.push(mediaFile);
- }
- successCallback(mediaFiles);
- };
- exec(win, errorCallback, "Capture", type, [options]);
-}
-/**
- * The Capture interface exposes an interface to the camera and microphone of the hosting device.
- */
-function Capture() {
- this.supportedAudioModes = [];
- this.supportedImageModes = [];
- this.supportedVideoModes = [];
-}
-
-/**
- * Launch audio recorder application for recording audio clip(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureAudioOptions} options
- */
-Capture.prototype.captureAudio = function(successCallback, errorCallback, options){
- _capture("captureAudio", successCallback, errorCallback, options);
-};
-
-/**
- * Launch camera application for taking image(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureImageOptions} options
- */
-Capture.prototype.captureImage = function(successCallback, errorCallback, options){
- _capture("captureImage", successCallback, errorCallback, options);
-};
-
-/**
- * Launch device camera application for recording video(s).
- *
- * @param {Function} successCB
- * @param {Function} errorCB
- * @param {CaptureVideoOptions} options
- */
-Capture.prototype.captureVideo = function(successCallback, errorCallback, options){
- _capture("captureVideo", successCallback, errorCallback, options);
-};
-
-
-module.exports = new Capture();
-
-});
-
-// file: lib/common/plugin/capture/symbols.js
-define("cordova/plugin/capture/symbols", function(require, exports, module) {
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/CaptureError', 'CaptureError');
-modulemapper.clobbers('cordova/plugin/CaptureAudioOptions', 'CaptureAudioOptions');
-modulemapper.clobbers('cordova/plugin/CaptureImageOptions', 'CaptureImageOptions');
-modulemapper.clobbers('cordova/plugin/CaptureVideoOptions', 'CaptureVideoOptions');
-modulemapper.clobbers('cordova/plugin/ConfigurationData', 'ConfigurationData');
-modulemapper.clobbers('cordova/plugin/MediaFile', 'MediaFile');
-modulemapper.clobbers('cordova/plugin/MediaFileData', 'MediaFileData');
-modulemapper.clobbers('cordova/plugin/capture', 'navigator.device.capture');
-
-});
-
// file: lib/common/plugin/console-via-logger.js
define("cordova/plugin/console-via-logger", function(require, exports, module) {
@@ -3818,53 +1822,6 @@ module.exports = function(successCallback, errorCallback, message, forceAsync) {
});
-// file: lib/android/plugin/file/symbols.js
-define("cordova/plugin/file/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper'),
- symbolshelper = require('cordova/plugin/file/symbolshelper');
-
-symbolshelper(modulemapper.clobbers);
-
-});
-
-// file: lib/common/plugin/file/symbolshelper.js
-define("cordova/plugin/file/symbolshelper", function(require, exports, module) {
-
-module.exports = function(exportFunc) {
- exportFunc('cordova/plugin/DirectoryEntry', 'DirectoryEntry');
- exportFunc('cordova/plugin/DirectoryReader', 'DirectoryReader');
- exportFunc('cordova/plugin/Entry', 'Entry');
- exportFunc('cordova/plugin/File', 'File');
- exportFunc('cordova/plugin/FileEntry', 'FileEntry');
- exportFunc('cordova/plugin/FileError', 'FileError');
- exportFunc('cordova/plugin/FileReader', 'FileReader');
- exportFunc('cordova/plugin/FileSystem', 'FileSystem');
- exportFunc('cordova/plugin/FileUploadOptions', 'FileUploadOptions');
- exportFunc('cordova/plugin/FileUploadResult', 'FileUploadResult');
- exportFunc('cordova/plugin/FileWriter', 'FileWriter');
- exportFunc('cordova/plugin/Flags', 'Flags');
- exportFunc('cordova/plugin/LocalFileSystem', 'LocalFileSystem');
- exportFunc('cordova/plugin/Metadata', 'Metadata');
- exportFunc('cordova/plugin/ProgressEvent', 'ProgressEvent');
- exportFunc('cordova/plugin/requestFileSystem', 'requestFileSystem');
- exportFunc('cordova/plugin/resolveLocalFileSystemURI', 'resolveLocalFileSystemURI');
-};
-
-});
-
-// file: lib/common/plugin/filetransfer/symbols.js
-define("cordova/plugin/filetransfer/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/FileTransfer', 'FileTransfer');
-modulemapper.clobbers('cordova/plugin/FileTransferError', 'FileTransferError');
-
-});
-
// file: lib/common/plugin/logger.js
define("cordova/plugin/logger", function(require, exports, module) {
@@ -4205,112 +2162,6 @@ modulemapper.clobbers('cordova/plugin/logger', 'cordova.logger');
});
-// file: lib/android/plugin/media/symbols.js
-define("cordova/plugin/media/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.defaults('cordova/plugin/Media', 'Media');
-modulemapper.clobbers('cordova/plugin/MediaError', 'MediaError');
-
-});
-
-// file: lib/common/plugin/requestFileSystem.js
-define("cordova/plugin/requestFileSystem", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- FileError = require('cordova/plugin/FileError'),
- FileSystem = require('cordova/plugin/FileSystem'),
- exec = require('cordova/exec');
-
-/**
- * Request a file system in which to store application data.
- * @param type local file system type
- * @param size indicates how much storage space, in bytes, the application expects to need
- * @param successCallback invoked with a FileSystem object
- * @param errorCallback invoked if error occurs retrieving file system
- */
-var requestFileSystem = function(type, size, successCallback, errorCallback) {
- argscheck.checkArgs('nnFF', 'requestFileSystem', arguments);
- var fail = function(code) {
- errorCallback && errorCallback(new FileError(code));
- };
-
- if (type < 0 || type > 3) {
- fail(FileError.SYNTAX_ERR);
- } else {
- // if successful, return a FileSystem object
- var success = function(file_system) {
- if (file_system) {
- if (successCallback) {
- // grab the name and root from the file system object
- var result = new FileSystem(file_system.name, file_system.root);
- successCallback(result);
- }
- }
- else {
- // no FileSystem object returned
- fail(FileError.NOT_FOUND_ERR);
- }
- };
- exec(success, fail, "File", "requestFileSystem", [type, size]);
- }
-};
-
-module.exports = requestFileSystem;
-
-});
-
-// file: lib/common/plugin/resolveLocalFileSystemURI.js
-define("cordova/plugin/resolveLocalFileSystemURI", function(require, exports, module) {
-
-var argscheck = require('cordova/argscheck'),
- DirectoryEntry = require('cordova/plugin/DirectoryEntry'),
- FileEntry = require('cordova/plugin/FileEntry'),
- FileError = require('cordova/plugin/FileError'),
- exec = require('cordova/exec');
-
-/**
- * Look up file system Entry referred to by local URI.
- * @param {DOMString} uri URI referring to a local file or directory
- * @param successCallback invoked with Entry object corresponding to URI
- * @param errorCallback invoked if error occurs retrieving file system entry
- */
-module.exports = function(uri, successCallback, errorCallback) {
- argscheck.checkArgs('sFF', 'resolveLocalFileSystemURI', arguments);
- // error callback
- var fail = function(error) {
- errorCallback && errorCallback(new FileError(error));
- };
- // sanity check for 'not:valid:filename'
- if(!uri || uri.split(":").length > 2) {
- setTimeout( function() {
- fail(FileError.ENCODING_ERR);
- },0);
- return;
- }
- // if successful, return either a file or directory entry
- var success = function(entry) {
- var result;
- if (entry) {
- if (successCallback) {
- // create appropriate Entry object
- result = (entry.isDirectory) ? new DirectoryEntry(entry.name, entry.fullPath) : new FileEntry(entry.name, entry.fullPath);
- successCallback(result);
- }
- }
- else {
- // no Entry object returned
- fail(FileError.NOT_FOUND_ERR);
- }
- };
-
- exec(success, fail, "File", "resolveLocalFileSystemURI", [uri]);
-};
-
-});
-
// file: lib/common/symbols.js
define("cordova/symbols", function(require, exports, module) {
[34/50] [abbrv] android commit: Remove PluginManager.exec's return
value (unused).
Posted by ag...@apache.org.
Remove PluginManager.exec's return value (unused).
It's not only not used, but when it was used was messing up the
DISABLE_EXEC_CHAINING flag.
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/9946d15f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/9946d15f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/9946d15f
Branch: refs/heads/2.9.x
Commit: 9946d15f2348b8f6a23e589c8916a9410aa4b3da
Parents: b032dcc
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jun 20 22:20:58 2013 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Thu Jun 20 22:20:58 2013 -0400
----------------------------------------------------------------------
framework/src/org/apache/cordova/ExposedJsApi.java | 4 ++--
framework/src/org/apache/cordova/api/PluginManager.java | 12 ++++--------
2 files changed, 6 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9946d15f/framework/src/org/apache/cordova/ExposedJsApi.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ExposedJsApi.java b/framework/src/org/apache/cordova/ExposedJsApi.java
index 7702d35..40ab1e3 100755
--- a/framework/src/org/apache/cordova/ExposedJsApi.java
+++ b/framework/src/org/apache/cordova/ExposedJsApi.java
@@ -48,9 +48,9 @@ import org.json.JSONException;
jsMessageQueue.setPaused(true);
try {
- boolean wasSync = pluginManager.exec(service, action, callbackId, arguments);
+ pluginManager.exec(service, action, callbackId, arguments);
String ret = "";
- if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING || wasSync) {
+ if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
ret = jsMessageQueue.popAndEncode();
}
return ret;
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/9946d15f/framework/src/org/apache/cordova/api/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java
index a819107..adaec90 100755
--- a/framework/src/org/apache/cordova/api/PluginManager.java
+++ b/framework/src/org/apache/cordova/api/PluginManager.java
@@ -200,15 +200,14 @@ public class PluginManager {
* this is an async plugin call.
* @param rawArgs An Array literal string containing any arguments needed in the
* plugin execute method.
- * @return Whether the task completed synchronously.
*/
- public boolean exec(String service, String action, String callbackId, String rawArgs) {
+ public void exec(String service, String action, String callbackId, String rawArgs) {
CordovaPlugin plugin = this.getPlugin(service);
if (plugin == null) {
Log.d(TAG, "exec() call to unknown plugin: " + service);
PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION);
app.sendPluginResult(cr, callbackId);
- return true;
+ return;
}
try {
CallbackContext callbackContext = new CallbackContext(callbackId, app);
@@ -216,19 +215,16 @@ public class PluginManager {
if (!wasValidAction) {
PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION);
app.sendPluginResult(cr, callbackId);
- return true;
}
- return callbackContext.isFinished();
} catch (JSONException e) {
PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
app.sendPluginResult(cr, callbackId);
- return true;
}
}
@Deprecated
- public boolean exec(String service, String action, String callbackId, String jsonArgs, boolean async) {
- return exec(service, action, callbackId, jsonArgs);
+ public void exec(String service, String action, String callbackId, String jsonArgs, boolean async) {
+ exec(service, action, callbackId, jsonArgs);
}
/**
[48/50] [abbrv] [CB-4048] Merge branch 'master' into 2.9.x
Posted by ag...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/67e97a89/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --cc framework/assets/www/cordova.js
index 873c068,b072c81..a7a1b38
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@@ -1,5 -1,5 +1,5 @@@
// Platform: android
- // 2.9.0-0-g83dc4bd
-// 2.9.0rc1-0-g002f33d
++// 2.7.0rc1-154-g98a62ff
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@@ -19,7 -19,7 +19,7 @@@
under the License.
*/
;(function() {
- var CORDOVA_JS_BUILD_LABEL = '2.9.0-0-g83dc4bd';
-var CORDOVA_JS_BUILD_LABEL = '2.9.0rc1-0-g002f33d';
++var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-154-g98a62ff';
// file: lib/scripts/require.js
var require,
@@@ -376,7 -376,7 +376,7 @@@ function checkArgs(spec, functionName,
if (errMsg) {
errMsg += ', but got ' + typeName + '.';
errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || args.callee, i) + '" of ' + functionName + ': ' + errMsg;
-- // Don't log when running jake test.
++ // Don't log when running unit tests.
if (typeof jasmine == 'undefined') {
console.error(errMsg);
}
@@@ -524,8 -524,8 +524,6 @@@ var utils = require('cordova/utils')
* onDOMContentLoaded* Internal event that is received when the web page is loaded and parsed.
* onNativeReady* Internal event that indicates the Cordova native side is ready.
* onCordovaReady* Internal event fired when all Cordova JavaScript objects have been created.
-- * onCordovaInfoReady* Internal event fired when device properties are available.
-- * onCordovaConnectionReady* Internal event fired when the connection property has been set.
* onDeviceReady* User event fired to indicate that Cordova is ready
* onResume User event fired to indicate a start/resume lifecycle event
* onPause User event fired to indicate a pause lifecycle event
@@@ -728,12 -728,12 +726,6 @@@ channel.createSticky('onNativeReady')
// and it's time to run plugin constructors.
channel.createSticky('onCordovaReady');
--// Event to indicate that device properties are available
--channel.createSticky('onCordovaInfoReady');
--
--// Event to indicate that the connection property has been set.
--channel.createSticky('onCordovaConnectionReady');
--
// Event to indicate that all automatically loaded JS plugins are loaded and ready.
channel.createSticky('onPluginsReady');
@@@ -751,7 -751,7 +743,6 @@@ channel.createSticky('onDestroy')
// Channels that must fire before "deviceready" is fired.
channel.waitForInitialization('onCordovaReady');
--channel.waitForInitialization('onCordovaConnectionReady');
channel.waitForInitialization('onDOMContentLoaded');
module.exports = channel;
@@@ -1159,4689 -1159,4689 +1150,675 @@@ module.exports =
});
--// file: lib/common/plugin/Acceleration.js
--define("cordova/plugin/Acceleration", function(require, exports, module) {
--
--var Acceleration = function(x, y, z, timestamp) {
-- this.x = x;
-- this.y = y;
-- this.z = z;
-- this.timestamp = timestamp || (new Date()).getTime();
--};
++// file: lib/android/plugin/android/app.js
++define("cordova/plugin/android/app", function(require, exports, module) {
--module.exports = Acceleration;
++var exec = require('cordova/exec');
--});
++module.exports = {
++ /**
++ * Clear the resource cache.
++ */
++ clearCache:function() {
++ exec(null, null, "App", "clearCache", []);
++ },
--// file: lib/common/plugin/Camera.js
--define("cordova/plugin/Camera", function(require, exports, module) {
++ /**
++ * Load the url into the webview or into new browser instance.
++ *
++ * @param url The URL to load
++ * @param props Properties that can be passed in to the activity:
++ * wait: int => wait msec before loading URL
++ * loadingDialog: "Title,Message" => display a native loading dialog
++ * loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error
++ * clearHistory: boolean => clear webview history (default=false)
++ * openExternal: boolean => open in a new browser (default=false)
++ *
++ * Example:
++ * navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000});
++ */
++ loadUrl:function(url, props) {
++ exec(null, null, "App", "loadUrl", [url, props]);
++ },
--var argscheck = require('cordova/argscheck'),
-- exec = require('cordova/exec'),
-- Camera = require('cordova/plugin/CameraConstants'),
-- CameraPopoverHandle = require('cordova/plugin/CameraPopoverHandle');
++ /**
++ * Cancel loadUrl that is waiting to be loaded.
++ */
++ cancelLoadUrl:function() {
++ exec(null, null, "App", "cancelLoadUrl", []);
++ },
--var cameraExport = {};
++ /**
++ * Clear web history in this web view.
++ * Instead of BACK button loading the previous web page, it will exit the app.
++ */
++ clearHistory:function() {
++ exec(null, null, "App", "clearHistory", []);
++ },
--// Tack on the Camera Constants to the base camera plugin.
--for (var key in Camera) {
-- cameraExport[key] = Camera[key];
--}
++ /**
++ * Go to previous page displayed.
++ * This is the same as pressing the backbutton on Android device.
++ */
++ backHistory:function() {
++ exec(null, null, "App", "backHistory", []);
++ },
--/**
-- * Gets a picture from source defined by "options.sourceType", and returns the
-- * image as defined by the "options.destinationType" option.
++ /**
++ * Override the default behavior of the Android back button.
++ * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
++ *
++ * Note: The user should not have to call this method. Instead, when the user
++ * registers for the "backbutton" event, this is automatically done.
++ *
++ * @param override T=override, F=cancel override
++ */
++ overrideBackbutton:function(override) {
++ exec(null, null, "App", "overrideBackbutton", [override]);
++ },
-- * The defaults are sourceType=CAMERA and destinationType=FILE_URI.
-- *
-- * @param {Function} successCallback
-- * @param {Function} errorCallback
-- * @param {Object} options
-- */
--cameraExport.getPicture = function(successCallback, errorCallback, options) {
-- argscheck.checkArgs('fFO', 'Camera.getPicture', arguments);
-- options = options || {};
-- var getValue = argscheck.getValue;
--
-- var quality = getValue(options.quality, 50);
-- var destinationType = getValue(options.destinationType, Camera.DestinationType.FILE_URI);
-- var sourceType = getValue(options.sourceType, Camera.PictureSourceType.CAMERA);
-- var targetWidth = getValue(options.targetWidth, -1);
-- var targetHeight = getValue(options.targetHeight, -1);
-- var encodingType = getValue(options.encodingType, Camera.EncodingType.JPEG);
-- var mediaType = getValue(options.mediaType, Camera.MediaType.PICTURE);
-- var allowEdit = !!options.allowEdit;
-- var correctOrientation = !!options.correctOrientation;
-- var saveToPhotoAlbum = !!options.saveToPhotoAlbum;
-- var popoverOptions = getValue(options.popoverOptions, null);
-- var cameraDirection = getValue(options.cameraDirection, Camera.Direction.BACK);
--
-- var args = [quality, destinationType, sourceType, targetWidth, targetHeight, encodingType,
-- mediaType, allowEdit, correctOrientation, saveToPhotoAlbum, popoverOptions, cameraDirection];
--
-- exec(successCallback, errorCallback, "Camera", "takePicture", args);
-- return new CameraPopoverHandle();
++ /**
++ * Exit and terminate the application.
++ */
++ exitApp:function() {
++ return exec(null, null, "App", "exitApp", []);
++ }
};
--cameraExport.cleanup = function(successCallback, errorCallback) {
-- exec(successCallback, errorCallback, "Camera", "cleanup", []);
--};
++});
--module.exports = cameraExport;
++// file: lib/android/plugin/android/nativeapiprovider.js
++define("cordova/plugin/android/nativeapiprovider", function(require, exports, module) {
--});
++/**
++ * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
++ */
--// file: lib/common/plugin/CameraConstants.js
--define("cordova/plugin/CameraConstants", function(require, exports, module) {
++var nativeApi = this._cordovaNative || require('cordova/plugin/android/promptbasednativeapi');
++var currentApi = nativeApi;
module.exports = {
-- DestinationType:{
-- DATA_URL: 0, // Return base64 encoded string
-- FILE_URI: 1, // Return file uri (content://media/external/images/media/2 for Android)
-- NATIVE_URI: 2 // Return native uri (eg. asset-library://... for iOS)
-- },
-- EncodingType:{
-- JPEG: 0, // Return JPEG encoded image
-- PNG: 1 // Return PNG encoded image
-- },
-- MediaType:{
-- PICTURE: 0, // allow selection of still pictures only. DEFAULT. Will return format specified via DestinationType
-- VIDEO: 1, // allow selection of video only, ONLY RETURNS URL
-- ALLMEDIA : 2 // allow selection from all media types
-- },
-- PictureSourceType:{
-- PHOTOLIBRARY : 0, // Choose image from picture library (same as SAVEDPHOTOALBUM for Android)
-- CAMERA : 1, // Take picture from camera
-- SAVEDPHOTOALBUM : 2 // Choose image from picture library (same as PHOTOLIBRARY for Android)
-- },
-- PopoverArrowDirection:{
-- ARROW_UP : 1, // matches iOS UIPopoverArrowDirection constants to specify arrow location on popover
-- ARROW_DOWN : 2,
-- ARROW_LEFT : 4,
-- ARROW_RIGHT : 8,
-- ARROW_ANY : 15
-- },
-- Direction:{
-- BACK: 0,
-- FRONT: 1
-- }
++ get: function() { return currentApi; },
++ setPreferPrompt: function(value) {
++ currentApi = value ? require('cordova/plugin/android/promptbasednativeapi') : nativeApi;
++ },
++ // Used only by tests.
++ set: function(value) {
++ currentApi = value;
++ }
};
});
--// file: lib/common/plugin/CameraPopoverHandle.js
--define("cordova/plugin/CameraPopoverHandle", function(require, exports, module) {
--
--var exec = require('cordova/exec');
++// file: lib/android/plugin/android/promptbasednativeapi.js
++define("cordova/plugin/android/promptbasednativeapi", function(require, exports, module) {
/**
-- * A handle to an image picker popover.
++ * Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
++ * This is used only on the 2.3 simulator, where addJavascriptInterface() is broken.
*/
--var CameraPopoverHandle = function() {
-- this.setPosition = function(popoverOptions) {
-- console.log('CameraPopoverHandle.setPosition is only supported on iOS.');
-- };
--};
--module.exports = CameraPopoverHandle;
++module.exports = {
++ exec: function(service, action, callbackId, argsJson) {
++ return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId]));
++ },
++ setNativeToJsBridgeMode: function(value) {
++ prompt(value, 'gap_bridge_mode:');
++ },
++ retrieveJsMessages: function() {
++ return prompt('', 'gap_poll:');
++ }
++};
});
--// file: lib/common/plugin/CameraPopoverOptions.js
--define("cordova/plugin/CameraPopoverOptions", function(require, exports, module) {
++// file: lib/android/plugin/android/storage.js
++define("cordova/plugin/android/storage", function(require, exports, module) {
++
++var utils = require('cordova/utils'),
++ exec = require('cordova/exec'),
++ channel = require('cordova/channel');
--var Camera = require('cordova/plugin/CameraConstants');
++var queryQueue = {};
/**
-- * Encapsulates options for iOS Popover image picker
++ * SQL result set object
++ * PRIVATE METHOD
++ * @constructor
*/
--var CameraPopoverOptions = function(x,y,width,height,arrowDir){
-- // information of rectangle that popover should be anchored to
-- this.x = x || 0;
-- this.y = y || 32;
-- this.width = width || 320;
-- this.height = height || 480;
-- // The direction of the popover arrow
-- this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY;
++var DroidDB_Rows = function() {
++ this.resultSet = []; // results array
++ this.length = 0; // number of rows
};
--module.exports = CameraPopoverOptions;
--
--});
--
--// file: lib/common/plugin/CaptureAudioOptions.js
--define("cordova/plugin/CaptureAudioOptions", function(require, exports, module) {
--
/**
-- * Encapsulates all audio capture operation configuration options.
++ * Get item from SQL result set
++ *
++ * @param row The row number to return
++ * @return The row object
*/
--var CaptureAudioOptions = function(){
-- // Upper limit of sound clips user can record. Value must be equal or greater than 1.
-- this.limit = 1;
-- // Maximum duration of a single sound clip in seconds.
-- this.duration = 0;
++DroidDB_Rows.prototype.item = function(row) {
++ return this.resultSet[row];
};
--module.exports = CaptureAudioOptions;
--
--});
--
--// file: lib/common/plugin/CaptureError.js
--define("cordova/plugin/CaptureError", function(require, exports, module) {
--
/**
-- * The CaptureError interface encapsulates all errors in the Capture API.
++ * SQL result set that is returned to user.
++ * PRIVATE METHOD
++ * @constructor
*/
--var CaptureError = function(c) {
-- this.code = c || null;
++var DroidDB_Result = function() {
++ this.rows = new DroidDB_Rows();
};
--// Camera or microphone failed to capture image or sound.
--CaptureError.CAPTURE_INTERNAL_ERR = 0;
--// Camera application or audio capture application is currently serving other capture request.
--CaptureError.CAPTURE_APPLICATION_BUSY = 1;
--// Invalid use of the API (e.g. limit parameter has value less than one).
--CaptureError.CAPTURE_INVALID_ARGUMENT = 2;
--// User exited camera application or audio capture application before capturing anything.
--CaptureError.CAPTURE_NO_MEDIA_FILES = 3;
--// The requested capture operation is not supported.
--CaptureError.CAPTURE_NOT_SUPPORTED = 20;
--
--module.exports = CaptureError;
--
--});
--
--// file: lib/common/plugin/CaptureImageOptions.js
--define("cordova/plugin/CaptureImageOptions", function(require, exports, module) {
--
/**
-- * Encapsulates all image capture operation configuration options.
++ * Callback from native code when query is complete.
++ * PRIVATE METHOD
++ *
++ * @param id Query id
*/
--var CaptureImageOptions = function(){
-- // Upper limit of images user can take. Value must be equal or greater than 1.
-- this.limit = 1;
--};
++function completeQuery(id, data) {
++ var query = queryQueue[id];
++ if (query) {
++ try {
++ delete queryQueue[id];
--module.exports = CaptureImageOptions;
++ // Get transaction
++ var tx = query.tx;
--});
++ // If transaction hasn't failed
++ // Note: We ignore all query results if previous query
++ // in the same transaction failed.
++ if (tx && tx.queryList[id]) {
++
++ // Save query results
++ var r = new DroidDB_Result();
++ r.rows.resultSet = data;
++ r.rows.length = data.length;
++ try {
++ if (typeof query.successCallback === 'function') {
++ query.successCallback(query.tx, r);
++ }
++ } catch (ex) {
++ console.log("executeSql error calling user success callback: "+ex);
++ }
--// file: lib/common/plugin/CaptureVideoOptions.js
--define("cordova/plugin/CaptureVideoOptions", function(require, exports, module) {
++ tx.queryComplete(id);
++ }
++ } catch (e) {
++ console.log("executeSql error: "+e);
++ }
++ }
++}
/**
-- * Encapsulates all video capture operation configuration options.
++ * Callback from native code when query fails
++ * PRIVATE METHOD
++ *
++ * @param reason Error message
++ * @param id Query id
*/
--var CaptureVideoOptions = function(){
-- // Upper limit of videos user can record. Value must be equal or greater than 1.
-- this.limit = 1;
-- // Maximum duration of a single video clip in seconds.
-- this.duration = 0;
--};
++function failQuery(reason, id) {
++ var query = queryQueue[id];
++ if (query) {
++ try {
++ delete queryQueue[id];
--module.exports = CaptureVideoOptions;
++ // Get transaction
++ var tx = query.tx;
--});
++ // If transaction hasn't failed
++ // Note: We ignore all query results if previous query
++ // in the same transaction failed.
++ if (tx && tx.queryList[id]) {
++ tx.queryList = {};
++
++ try {
++ if (typeof query.errorCallback === 'function') {
++ query.errorCallback(query.tx, reason);
++ }
++ } catch (ex) {
++ console.log("executeSql error calling user error callback: "+ex);
++ }
++
++ tx.queryFailed(id, reason);
++ }
--// file: lib/common/plugin/CompassError.js
--define("cordova/plugin/CompassError", function(require, exports, module) {
++ } catch (e) {
++ console.log("executeSql error: "+e);
++ }
++ }
++}
/**
-- * CompassError.
-- * An error code assigned by an implementation when an error has occurred
++ * SQL query object
++ * PRIVATE METHOD
++ *
* @constructor
++ * @param tx The transaction object that this query belongs to
*/
--var CompassError = function(err) {
-- this.code = (err !== undefined ? err : null);
--};
--
--CompassError.COMPASS_INTERNAL_ERR = 0;
--CompassError.COMPASS_NOT_SUPPORTED = 20;
++var DroidDB_Query = function(tx) {
--module.exports = CompassError;
++ // Set the id of the query
++ this.id = utils.createUUID();
--});
++ // Add this query to the queue
++ queryQueue[this.id] = this;
--// file: lib/common/plugin/CompassHeading.js
--define("cordova/plugin/CompassHeading", function(require, exports, module) {
++ // Init result
++ this.resultSet = [];
--var CompassHeading = function(magneticHeading, trueHeading, headingAccuracy, timestamp) {
-- this.magneticHeading = magneticHeading;
-- this.trueHeading = trueHeading;
-- this.headingAccuracy = headingAccuracy;
-- this.timestamp = timestamp || new Date().getTime();
--};
++ // Set transaction that this query belongs to
++ this.tx = tx;
--module.exports = CompassHeading;
++ // Add this query to transaction list
++ this.tx.queryList[this.id] = this;
--});
++ // Callbacks
++ this.successCallback = null;
++ this.errorCallback = null;
--// file: lib/common/plugin/ConfigurationData.js
--define("cordova/plugin/ConfigurationData", function(require, exports, module) {
++};
/**
-- * Encapsulates a set of parameters that the capture device supports.
++ * Transaction object
++ * PRIVATE METHOD
++ * @constructor
*/
--function ConfigurationData() {
-- // The ASCII-encoded string in lower case representing the media type.
-- this.type = null;
-- // The height attribute represents height of the image or video in pixels.
-- // In the case of a sound clip this attribute has value 0.
-- this.height = 0;
-- // The width attribute represents width of the image or video in pixels.
-- // In the case of a sound clip this attribute has value 0
-- this.width = 0;
--}
--
--module.exports = ConfigurationData;
++var DroidDB_Tx = function() {
--});
++ // Set the id of the transaction
++ this.id = utils.createUUID();
--// file: lib/common/plugin/Connection.js
--define("cordova/plugin/Connection", function(require, exports, module) {
++ // Callbacks
++ this.successCallback = null;
++ this.errorCallback = null;
--/**
-- * Network status
-- */
--module.exports = {
-- UNKNOWN: "unknown",
-- ETHERNET: "ethernet",
-- WIFI: "wifi",
-- CELL_2G: "2g",
-- CELL_3G: "3g",
-- CELL_4G: "4g",
-- CELL:"cellular",
-- NONE: "none"
++ // Query list
++ this.queryList = {};
};
--});
--
--// file: lib/common/plugin/Contact.js
--define("cordova/plugin/Contact", function(require, exports, module) {
--
--var argscheck = require('cordova/argscheck'),
-- exec = require('cordova/exec'),
-- ContactError = require('cordova/plugin/ContactError'),
-- utils = require('cordova/utils');
--
/**
--* Converts primitives into Complex Object
--* Currently only used for Date fields
--*/
--function convertIn(contact) {
-- var value = contact.birthday;
-- try {
-- contact.birthday = new Date(parseFloat(value));
-- } catch (exception){
-- console.log("Cordova Contact convertIn error: exception creating date.");
-- }
-- return contact;
--}
++ * Mark query in transaction as complete.
++ * If all queries are complete, call the user's transaction success callback.
++ *
++ * @param id Query id
++ */
++DroidDB_Tx.prototype.queryComplete = function(id) {
++ delete this.queryList[id];
--/**
--* Converts Complex objects into primitives
--* Only conversion at present is for Dates.
--**/
--
--function convertOut(contact) {
-- var value = contact.birthday;
-- if (value !== null) {
-- // try to make it a Date object if it is not already
-- if (!utils.isDate(value)){
-- try {
-- value = new Date(value);
-- } catch(exception){
-- value = null;
++ // If no more outstanding queries, then fire transaction success
++ if (this.successCallback) {
++ var count = 0;
++ var i;
++ for (i in this.queryList) {
++ if (this.queryList.hasOwnProperty(i)) {
++ count++;
}
}
-- if (utils.isDate(value)){
-- value = value.valueOf(); // convert to milliseconds
++ if (count === 0) {
++ try {
++ this.successCallback();
++ } catch(e) {
++ console.log("Transaction error calling user success callback: " + e);
++ }
}
-- contact.birthday = value;
}
};
/**
--* Removes contact from device storage.
--* @param successCB success callback
--* @param errorCB error callback
--*/
--Contact.prototype.remove = function(successCB, errorCB) {
-- argscheck.checkArgs('FF', 'Contact.remove', arguments);
-- var fail = errorCB && function(code) {
-- errorCB(new ContactError(code));
-- };
-- if (this.id === null) {
-- fail(ContactError.UNKNOWN_ERROR);
-- }
-- else {
-- exec(successCB, fail, "Contacts", "remove", [this.id]);
-- }
--};
++ * Mark query in transaction as failed.
++ *
++ * @param id Query id
++ * @param reason Error message
++ */
++DroidDB_Tx.prototype.queryFailed = function(id, reason) {
--/**
--* Creates a deep copy of this Contact.
--* With the contact ID set to null.
--* @return copy of this Contact
--*/
--Contact.prototype.clone = function() {
-- var clonedContact = utils.clone(this);
-- clonedContact.id = null;
-- clonedContact.rawId = null;
--
-- function nullIds(arr) {
-- if (arr) {
-- for (var i = 0; i < arr.length; ++i) {
-- arr[i].id = null;
-- }
++ // The sql queries in this transaction have already been run, since
++ // we really don't have a real transaction implemented in native code.
++ // However, the user callbacks for the remaining sql queries in transaction
++ // will not be called.
++ this.queryList = {};
++
++ if (this.errorCallback) {
++ try {
++ this.errorCallback(reason);
++ } catch(e) {
++ console.log("Transaction error calling user error callback: " + e);
}
}
};
/**
--* Persists contact to device storage.
--* @param successCB success callback
--* @param errorCB error callback
--*/
--Contact.prototype.save = function(successCB, errorCB) {
-- argscheck.checkArgs('FFO', 'Contact.save', arguments);
-- var fail = errorCB && function(code) {
-- errorCB(new ContactError(code));
-- };
-- var success = function(result) {
-- if (result) {
-- if (successCB) {
-- var fullContact = require('cordova/plugin/contacts').create(result);
-- successCB(convertIn(fullContact));
-- }
-- }
-- else {
-- // no Entry object returned
-- fail(ContactError.UNKNOWN_ERROR);
-- }
-- };
-- var dupContact = convertOut(utils.clone(this));
-- exec(success, fail, "Contacts", "save", [dupContact]);
--};
--
--
--module.exports = Contact;
++ * Execute SQL statement
++ *
++ * @param sql SQL statement to execute
++ * @param params Statement parameters
++ * @param successCallback Success callback
++ * @param errorCallback Error callback
++ */
++DroidDB_Tx.prototype.executeSql = function(sql, params, successCallback, errorCallback) {
--});
++ // Init params array
++ if (typeof params === 'undefined') {
++ params = [];
++ }
--// file: lib/common/plugin/ContactAddress.js
--define("cordova/plugin/ContactAddress", function(require, exports, module) {
++ // Create query and add to queue
++ var query = new DroidDB_Query(this);
++ queryQueue[query.id] = query;
--/**
--* Contact address.
--* @constructor
--* @param {DOMString} id unique identifier, should only be set by native code
--* @param formatted // NOTE: not a W3C standard
--* @param streetAddress
--* @param locality
--* @param region
--* @param postalCode
--* @param country
--*/
++ // Save callbacks
++ query.successCallback = successCallback;
++ query.errorCallback = errorCallback;
--var ContactAddress = function(pref, type, formatted, streetAddress, locality, region, postalCode, country) {
-- this.id = null;
-- this.pref = (typeof pref != 'undefined' ? pref : false);
-- this.type = type || null;
-- this.formatted = formatted || null;
-- this.streetAddress = streetAddress || null;
-- this.locality = locality || null;
-- this.region = region || null;
-- this.postalCode = postalCode || null;
-- this.country = country || null;
++ // Call native code
++ exec(null, null, "Storage", "executeSql", [sql, params, query.id]);
};
--module.exports = ContactAddress;
--
--});
--
--// file: lib/common/plugin/ContactError.js
--define("cordova/plugin/ContactError", function(require, exports, module) {
++var DatabaseShell = function() {
++};
/**
-- * ContactError.
-- * An error code assigned by an implementation when an error has occurred
-- * @constructor
++ * Start a transaction.
++ * Does not support rollback in event of failure.
++ *
++ * @param process {Function} The transaction function
++ * @param successCallback {Function}
++ * @param errorCallback {Function}
*/
--var ContactError = function(err) {
-- this.code = (typeof err != 'undefined' ? err : null);
++DatabaseShell.prototype.transaction = function(process, errorCallback, successCallback) {
++ var tx = new DroidDB_Tx();
++ tx.successCallback = successCallback;
++ tx.errorCallback = errorCallback;
++ try {
++ process(tx);
++ } catch (e) {
++ console.log("Transaction error: "+e);
++ if (tx.errorCallback) {
++ try {
++ tx.errorCallback(e);
++ } catch (ex) {
++ console.log("Transaction error calling user error callback: "+e);
++ }
++ }
++ }
};
/**
-- * Error codes
++ * Open database
++ *
++ * @param name Database name
++ * @param version Database version
++ * @param display_name Database display name
++ * @param size Database size in bytes
++ * @return Database object
*/
--ContactError.UNKNOWN_ERROR = 0;
--ContactError.INVALID_ARGUMENT_ERROR = 1;
--ContactError.TIMEOUT_ERROR = 2;
--ContactError.PENDING_OPERATION_ERROR = 3;
--ContactError.IO_ERROR = 4;
--ContactError.NOT_SUPPORTED_ERROR = 5;
--ContactError.PERMISSION_DENIED_ERROR = 20;
--
--module.exports = ContactError;
--
--});
++var DroidDB_openDatabase = function(name, version, display_name, size) {
++ exec(null, null, "Storage", "openDatabase", [name, version, display_name, size]);
++ var db = new DatabaseShell();
++ return db;
++};
--// file: lib/common/plugin/ContactField.js
--define("cordova/plugin/ContactField", function(require, exports, module) {
--/**
--* Generic contact field.
--* @constructor
--* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
--* @param type
--* @param value
--* @param pref
--*/
--var ContactField = function(type, value, pref) {
-- this.id = null;
-- this.type = (type && type.toString()) || null;
-- this.value = (value && value.toString()) || null;
-- this.pref = (typeof pref != 'undefined' ? pref : false);
++module.exports = {
++ openDatabase:DroidDB_openDatabase,
++ failQuery:failQuery,
++ completeQuery:completeQuery
};
--module.exports = ContactField;
--
});
--// file: lib/common/plugin/ContactFindOptions.js
--define("cordova/plugin/ContactFindOptions", function(require, exports, module) {
--
--/**
-- * ContactFindOptions.
-- * @constructor
-- * @param filter used to match contacts against
-- * @param multiple boolean used to determine if more than one contact should be returned
-- */
++// file: lib/android/plugin/android/storage/openDatabase.js
++define("cordova/plugin/android/storage/openDatabase", function(require, exports, module) {
--var ContactFindOptions = function(filter, multiple) {
-- this.filter = filter || '';
-- this.multiple = (typeof multiple != 'undefined' ? multiple : false);
--};
--module.exports = ContactFindOptions;
++var modulemapper = require('cordova/modulemapper'),
++ storage = require('cordova/plugin/android/storage');
--});
++var originalOpenDatabase = modulemapper.getOriginalSymbol(window, 'openDatabase');
--// file: lib/common/plugin/ContactName.js
--define("cordova/plugin/ContactName", function(require, exports, module) {
++module.exports = function(name, version, desc, size) {
++ // First patch WebSQL if necessary
++ if (!originalOpenDatabase) {
++ // Not defined, create an openDatabase function for all to use!
++ return storage.openDatabase.apply(this, arguments);
++ }
--/**
--* Contact name.
--* @constructor
--* @param formatted // NOTE: not part of W3C standard
--* @param familyName
--* @param givenName
--* @param middle
--* @param prefix
--* @param suffix
--*/
--var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) {
-- this.formatted = formatted || null;
-- this.familyName = familyName || null;
-- this.givenName = givenName || null;
-- this.middleName = middle || null;
-- this.honorificPrefix = prefix || null;
-- this.honorificSuffix = suffix || null;
++ // Defined, but some Android devices will throw a SECURITY_ERR -
++ // so we wrap the whole thing in a try-catch and shim in our own
++ // if the device has Android bug 16175.
++ try {
++ return originalOpenDatabase(name, version, desc, size);
++ } catch (ex) {
++ if (ex.code !== 18) {
++ throw ex;
++ }
++ }
++ return storage.openDatabase(name, version, desc, size);
};
--module.exports = ContactName;
++
});
--// file: lib/common/plugin/ContactOrganization.js
--define("cordova/plugin/ContactOrganization", function(require, exports, module) {
++// file: lib/android/plugin/android/storage/symbols.js
++define("cordova/plugin/android/storage/symbols", function(require, exports, module) {
--/**
--* Contact organization.
--* @constructor
--* @param {DOMString} id unique identifier, should only be set by native code // NOTE: not a W3C standard
--* @param name
--* @param dept
--* @param title
--* @param startDate
--* @param endDate
--* @param location
--* @param desc
--*/
--var ContactOrganization = function(pref, type, name, dept, title) {
-- this.id = null;
-- this.pref = (typeof pref != 'undefined' ? pref : false);
-- this.type = type || null;
-- this.name = name || null;
-- this.department = dept || null;
-- this.title = title || null;
--};
++var modulemapper = require('cordova/modulemapper');
++
++modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDatabase');
});
--// file: lib/common/plugin/Coordinates.js
--define("cordova/plugin/Coordinates", function(require, exports, module) {
++// file: lib/common/plugin/console-via-logger.js
++define("cordova/plugin/console-via-logger", function(require, exports, module) {
--/**
-- * This class contains position information.
-- * @param {Object} lat
-- * @param {Object} lng
-- * @param {Object} alt
-- * @param {Object} acc
-- * @param {Object} head
-- * @param {Object} vel
-- * @param {Object} altacc
-- * @constructor
-- */
--var Coordinates = function(lat, lng, alt, acc, head, vel, altacc) {
-- /**
-- * The latitude of the position.
-- */
-- this.latitude = lat;
-- /**
-- * The longitude of the position,
-- */
-- this.longitude = lng;
-- /**
-- * The accuracy of the position.
-- */
-- this.accuracy = acc;
-- /**
-- * The altitude of the position.
-- */
-- this.altitude = (alt !== undefined ? alt : null);
-- /**
-- * The direction the device is moving at the position.
-- */
-- this.heading = (head !== undefined ? head : null);
-- /**
-- * The velocity with which the device is moving at the position.
-- */
-- this.speed = (vel !== undefined ? vel : null);
++//------------------------------------------------------------------------------
-- if (this.speed === 0 || this.speed === null) {
-- this.heading = NaN;
-- }
++var logger = require("cordova/plugin/logger");
++var utils = require("cordova/utils");
-- /**
-- * The altitude accuracy of the position.
-- */
-- this.altitudeAccuracy = (altacc !== undefined) ? altacc : null;
--};
++//------------------------------------------------------------------------------
++// object that we're exporting
++//------------------------------------------------------------------------------
++var console = module.exports;
--module.exports = Coordinates;
++//------------------------------------------------------------------------------
++// copy of the original console object
++//------------------------------------------------------------------------------
++var WinConsole = window.console;
--});
++//------------------------------------------------------------------------------
++// whether to use the logger
++//------------------------------------------------------------------------------
++var UseLogger = false;
--// file: lib/common/plugin/DirectoryEntry.js
--define("cordova/plugin/DirectoryEntry", function(require, exports, module) {
++//------------------------------------------------------------------------------
++// Timers
++//------------------------------------------------------------------------------
++var Timers = {};
--var argscheck = require('cordova/argscheck'),
-- utils = require('cordova/utils'),
-- exec = require('cordova/exec'),
-- Entry = require('cordova/plugin/Entry'),
-- FileError = require('cordova/plugin/FileError'),
-- DirectoryReader = require('cordova/plugin/DirectoryReader');
++//------------------------------------------------------------------------------
++// used for unimplemented methods
++//------------------------------------------------------------------------------
++function noop() {}
--/**
-- * An interface representing a directory on the file system.
-- *
-- * {boolean} isFile always false (readonly)
-- * {boolean} isDirectory always true (readonly)
-- * {DOMString} name of the directory, excluding the path leading to it (readonly)
-- * {DOMString} fullPath the absolute full path to the directory (readonly)
-- * TODO: implement this!!! {FileSystem} filesystem on which the directory resides (readonly)
-- */
--var DirectoryEntry = function(name, fullPath) {
-- DirectoryEntry.__super__.constructor.call(this, false, true, name, fullPath);
--};
++//------------------------------------------------------------------------------
++// used for unimplemented methods
++//------------------------------------------------------------------------------
++console.useLogger = function (value) {
++ if (arguments.length) UseLogger = !!value;
--utils.extend(DirectoryEntry, Entry);
++ if (UseLogger) {
++ if (logger.useConsole()) {
++ throw new Error("console and logger are too intertwingly");
++ }
++ }
--/**
-- * Creates a new DirectoryReader to read entries from this directory
-- */
--DirectoryEntry.prototype.createReader = function() {
-- return new DirectoryReader(this.fullPath);
--};
--
--/**
-- * Creates or looks up a directory
-- *
-- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a directory
-- * @param {Flags} options to create or exclusively create the directory
-- * @param {Function} successCallback is called with the new entry
-- * @param {Function} errorCallback is called with a FileError
-- */
--DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, errorCallback) {
-- argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
-- var win = successCallback && function(result) {
-- var entry = new DirectoryEntry(result.name, result.fullPath);
-- successCallback(entry);
-- };
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(win, fail, "File", "getDirectory", [this.fullPath, path, options]);
--};
--
--/**
-- * Deletes a directory and all of it's contents
-- *
-- * @param {Function} successCallback is called with no parameters
-- * @param {Function} errorCallback is called with a FileError
-- */
--DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) {
-- argscheck.checkArgs('FF', 'DirectoryEntry.removeRecursively', arguments);
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]);
--};
--
--/**
-- * Creates or looks up a file
-- *
-- * @param {DOMString} path either a relative or absolute path from this directory in which to look up or create a file
-- * @param {Flags} options to create or exclusively create the file
-- * @param {Function} successCallback is called with the new entry
-- * @param {Function} errorCallback is called with a FileError
-- */
--DirectoryEntry.prototype.getFile = function(path, options, successCallback, errorCallback) {
-- argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
-- var win = successCallback && function(result) {
-- var FileEntry = require('cordova/plugin/FileEntry');
-- var entry = new FileEntry(result.name, result.fullPath);
-- successCallback(entry);
-- };
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(win, fail, "File", "getFile", [this.fullPath, path, options]);
--};
--
--module.exports = DirectoryEntry;
--
--});
--
--// file: lib/common/plugin/DirectoryReader.js
--define("cordova/plugin/DirectoryReader", function(require, exports, module) {
--
--var exec = require('cordova/exec'),
-- FileError = require('cordova/plugin/FileError') ;
--
--/**
-- * An interface that lists the files and directories in a directory.
-- */
--function DirectoryReader(path) {
-- this.path = path || null;
--}
--
--/**
-- * Returns a list of entries from a directory.
-- *
-- * @param {Function} successCallback is called with a list of entries
-- * @param {Function} errorCallback is called with a FileError
-- */
--DirectoryReader.prototype.readEntries = function(successCallback, errorCallback) {
-- var win = typeof successCallback !== 'function' ? null : function(result) {
-- var retVal = [];
-- for (var i=0; i<result.length; i++) {
-- var entry = null;
-- if (result[i].isDirectory) {
-- entry = new (require('cordova/plugin/DirectoryEntry'))();
-- }
-- else if (result[i].isFile) {
-- entry = new (require('cordova/plugin/FileEntry'))();
-- }
-- entry.isDirectory = result[i].isDirectory;
-- entry.isFile = result[i].isFile;
-- entry.name = result[i].name;
-- entry.fullPath = result[i].fullPath;
-- retVal.push(entry);
-- }
-- successCallback(retVal);
-- };
-- var fail = typeof errorCallback !== 'function' ? null : function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(win, fail, "File", "readEntries", [this.path]);
--};
--
--module.exports = DirectoryReader;
--
--});
--
--// file: lib/common/plugin/Entry.js
--define("cordova/plugin/Entry", function(require, exports, module) {
--
--var argscheck = require('cordova/argscheck'),
-- exec = require('cordova/exec'),
-- FileError = require('cordova/plugin/FileError'),
-- Metadata = require('cordova/plugin/Metadata');
--
--/**
-- * Represents a file or directory on the local file system.
-- *
-- * @param isFile
-- * {boolean} true if Entry is a file (readonly)
-- * @param isDirectory
-- * {boolean} true if Entry is a directory (readonly)
-- * @param name
-- * {DOMString} name of the file or directory, excluding the path
-- * leading to it (readonly)
-- * @param fullPath
-- * {DOMString} the absolute full path to the file or directory
-- * (readonly)
-- */
--function Entry(isFile, isDirectory, name, fullPath, fileSystem) {
-- this.isFile = !!isFile;
-- this.isDirectory = !!isDirectory;
-- this.name = name || '';
-- this.fullPath = fullPath || '';
-- this.filesystem = fileSystem || null;
--}
--
--/**
-- * Look up the metadata of the entry.
-- *
-- * @param successCallback
-- * {Function} is called with a Metadata object
-- * @param errorCallback
-- * {Function} is called with a FileError
-- */
--Entry.prototype.getMetadata = function(successCallback, errorCallback) {
-- argscheck.checkArgs('FF', 'Entry.getMetadata', arguments);
-- var success = successCallback && function(lastModified) {
-- var metadata = new Metadata(lastModified);
-- successCallback(metadata);
-- };
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
--
-- exec(success, fail, "File", "getMetadata", [this.fullPath]);
--};
--
--/**
-- * Set the metadata of the entry.
-- *
-- * @param successCallback
-- * {Function} is called with a Metadata object
-- * @param errorCallback
-- * {Function} is called with a FileError
-- * @param metadataObject
-- * {Object} keys and values to set
-- */
--Entry.prototype.setMetadata = function(successCallback, errorCallback, metadataObject) {
-- argscheck.checkArgs('FFO', 'Entry.setMetadata', arguments);
-- exec(successCallback, errorCallback, "File", "setMetadata", [this.fullPath, metadataObject]);
--};
--
--/**
-- * Move a file or directory to a new location.
-- *
-- * @param parent
-- * {DirectoryEntry} the directory to which to move this entry
-- * @param newName
-- * {DOMString} new name of the entry, defaults to the current name
-- * @param successCallback
-- * {Function} called with the new DirectoryEntry object
-- * @param errorCallback
-- * {Function} called with a FileError
-- */
--Entry.prototype.moveTo = function(parent, newName, successCallback, errorCallback) {
-- argscheck.checkArgs('oSFF', 'Entry.moveTo', arguments);
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- // source path
-- var srcPath = this.fullPath,
-- // entry name
-- name = newName || this.name,
-- success = function(entry) {
-- if (entry) {
-- if (successCallback) {
-- // create appropriate Entry object
-- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
-- successCallback(result);
-- }
-- }
-- else {
-- // no Entry object returned
-- fail && fail(FileError.NOT_FOUND_ERR);
-- }
-- };
--
-- // copy
-- exec(success, fail, "File", "moveTo", [srcPath, parent.fullPath, name]);
--};
--
--/**
-- * Copy a directory to a different location.
-- *
-- * @param parent
-- * {DirectoryEntry} the directory to which to copy the entry
-- * @param newName
-- * {DOMString} new name of the entry, defaults to the current name
-- * @param successCallback
-- * {Function} called with the new Entry object
-- * @param errorCallback
-- * {Function} called with a FileError
-- */
--Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallback) {
-- argscheck.checkArgs('oSFF', 'Entry.copyTo', arguments);
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
--
-- // source path
-- var srcPath = this.fullPath,
-- // entry name
-- name = newName || this.name,
-- // success callback
-- success = function(entry) {
-- if (entry) {
-- if (successCallback) {
-- // create appropriate Entry object
-- var result = (entry.isDirectory) ? new (require('cordova/plugin/DirectoryEntry'))(entry.name, entry.fullPath) : new (require('cordova/plugin/FileEntry'))(entry.name, entry.fullPath);
-- successCallback(result);
-- }
-- }
-- else {
-- // no Entry object returned
-- fail && fail(FileError.NOT_FOUND_ERR);
-- }
-- };
--
-- // copy
-- exec(success, fail, "File", "copyTo", [srcPath, parent.fullPath, name]);
--};
--
--/**
-- * Return a URL that can be used to identify this entry.
-- */
--Entry.prototype.toURL = function() {
-- // fullPath attribute contains the full URL
-- return this.fullPath;
--};
--
--/**
-- * Returns a URI that can be used to identify this entry.
-- *
-- * @param {DOMString} mimeType for a FileEntry, the mime type to be used to interpret the file, when loaded through this URI.
-- * @return uri
-- */
--Entry.prototype.toURI = function(mimeType) {
-- console.log("DEPRECATED: Update your code to use 'toURL'");
-- // fullPath attribute contains the full URI
-- return this.toURL();
--};
--
--/**
-- * Remove a file or directory. It is an error to attempt to delete a
-- * directory that is not empty. It is an error to attempt to delete a
-- * root directory of a file system.
-- *
-- * @param successCallback {Function} called with no parameters
-- * @param errorCallback {Function} called with a FileError
-- */
--Entry.prototype.remove = function(successCallback, errorCallback) {
-- argscheck.checkArgs('FF', 'Entry.remove', arguments);
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(successCallback, fail, "File", "remove", [this.fullPath]);
--};
--
--/**
-- * Look up the parent DirectoryEntry of this entry.
-- *
-- * @param successCallback {Function} called with the parent DirectoryEntry object
-- * @param errorCallback {Function} called with a FileError
-- */
--Entry.prototype.getParent = function(successCallback, errorCallback) {
-- argscheck.checkArgs('FF', 'Entry.getParent', arguments);
-- var win = successCallback && function(result) {
-- var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
-- var entry = new DirectoryEntry(result.name, result.fullPath);
-- successCallback(entry);
-- };
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(win, fail, "File", "getParent", [this.fullPath]);
--};
--
--module.exports = Entry;
--
--});
--
--// file: lib/common/plugin/File.js
--define("cordova/plugin/File", function(require, exports, module) {
--
--/**
-- * Constructor.
-- * name {DOMString} name of the file, without path information
-- * fullPath {DOMString} the full path of the file, including the name
-- * type {DOMString} mime type
-- * lastModifiedDate {Date} last modified date
-- * size {Number} size of the file in bytes
-- */
--
--var File = function(name, fullPath, type, lastModifiedDate, size){
-- this.name = name || '';
-- this.fullPath = fullPath || null;
-- this.type = type || null;
-- this.lastModifiedDate = lastModifiedDate || null;
-- this.size = size || 0;
--
-- // These store the absolute start and end for slicing the file.
-- this.start = 0;
-- this.end = this.size;
--};
--
--/**
-- * Returns a "slice" of the file. Since Cordova Files don't contain the actual
-- * content, this really returns a File with adjusted start and end.
-- * Slices of slices are supported.
-- * start {Number} The index at which to start the slice (inclusive).
-- * end {Number} The index at which to end the slice (exclusive).
-- */
--File.prototype.slice = function(start, end) {
-- var size = this.end - this.start;
-- var newStart = 0;
-- var newEnd = size;
-- if (arguments.length) {
-- if (start < 0) {
-- newStart = Math.max(size + start, 0);
-- } else {
-- newStart = Math.min(size, start);
-- }
-- }
--
-- if (arguments.length >= 2) {
-- if (end < 0) {
-- newEnd = Math.max(size + end, 0);
-- } else {
-- newEnd = Math.min(end, size);
-- }
-- }
--
-- var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size);
-- newFile.start = this.start + newStart;
-- newFile.end = this.start + newEnd;
-- return newFile;
--};
--
--
--module.exports = File;
--
--});
--
--// file: lib/common/plugin/FileEntry.js
--define("cordova/plugin/FileEntry", function(require, exports, module) {
--
--var utils = require('cordova/utils'),
-- exec = require('cordova/exec'),
-- Entry = require('cordova/plugin/Entry'),
-- FileWriter = require('cordova/plugin/FileWriter'),
-- File = require('cordova/plugin/File'),
-- FileError = require('cordova/plugin/FileError');
--
--/**
-- * An interface representing a file on the file system.
-- *
-- * {boolean} isFile always true (readonly)
-- * {boolean} isDirectory always false (readonly)
-- * {DOMString} name of the file, excluding the path leading to it (readonly)
-- * {DOMString} fullPath the absolute full path to the file (readonly)
-- * {FileSystem} filesystem on which the file resides (readonly)
-- */
--var FileEntry = function(name, fullPath) {
-- FileEntry.__super__.constructor.apply(this, [true, false, name, fullPath]);
--};
--
--utils.extend(FileEntry, Entry);
--
--/**
-- * Creates a new FileWriter associated with the file that this FileEntry represents.
-- *
-- * @param {Function} successCallback is called with the new FileWriter
-- * @param {Function} errorCallback is called with a FileError
-- */
--FileEntry.prototype.createWriter = function(successCallback, errorCallback) {
-- this.file(function(filePointer) {
-- var writer = new FileWriter(filePointer);
--
-- if (writer.fileName === null || writer.fileName === "") {
-- errorCallback && errorCallback(new FileError(FileError.INVALID_STATE_ERR));
-- } else {
-- successCallback && successCallback(writer);
-- }
-- }, errorCallback);
--};
--
--/**
-- * Returns a File that represents the current state of the file that this FileEntry represents.
-- *
-- * @param {Function} successCallback is called with the new File object
-- * @param {Function} errorCallback is called with a FileError
-- */
--FileEntry.prototype.file = function(successCallback, errorCallback) {
-- var win = successCallback && function(f) {
-- var file = new File(f.name, f.fullPath, f.type, f.lastModifiedDate, f.size);
-- successCallback(file);
-- };
-- var fail = errorCallback && function(code) {
-- errorCallback(new FileError(code));
-- };
-- exec(win, fail, "File", "getFileMetadata", [this.fullPath]);
--};
--
--
--module.exports = FileEntry;
--
--});
--
--// file: lib/common/plugin/FileError.js
--define("cordova/plugin/FileError", function(require, exports, module) {
--
--/**
-- * FileError
-- */
--function FileError(error) {
-- this.code = error || null;
--}
--
--// File error codes
--// Found in DOMException
--FileError.NOT_FOUND_ERR = 1;
--FileError.SECURITY_ERR = 2;
--FileError.ABORT_ERR = 3;
--
--// Added by File API specification
--FileError.NOT_READABLE_ERR = 4;
--FileError.ENCODING_ERR = 5;
--FileError.NO_MODIFICATION_ALLOWED_ERR = 6;
--FileError.INVALID_STATE_ERR = 7;
--FileError.SYNTAX_ERR = 8;
--FileError.INVALID_MODIFICATION_ERR = 9;
--FileError.QUOTA_EXCEEDED_ERR = 10;
--FileError.TYPE_MISMATCH_ERR = 11;
--FileError.PATH_EXISTS_ERR = 12;
--
--module.exports = FileError;
--
--});
--
--// file: lib/common/plugin/FileReader.js
--define("cordova/plugin/FileReader", function(require, exports, module) {
--
--var exec = require('cordova/exec'),
-- modulemapper = require('cordova/modulemapper'),
-- utils = require('cordova/utils'),
-- File = require('cordova/plugin/File'),
-- FileError = require('cordova/plugin/FileError'),
-- ProgressEvent = require('cordova/plugin/ProgressEvent'),
-- origFileReader = modulemapper.getOriginalSymbol(this, 'FileReader');
--
--/**
-- * This class reads the mobile device file system.
-- *
-- * For Android:
-- * The root directory is the root of the file system.
-- * To read from the SD card, the file name is "sdcard/my_file.txt"
-- * @constructor
-- */
--var FileReader = function() {
-- this._readyState = 0;
-- this._error = null;
-- this._result = null;
-- this._fileName = '';
-- this._realReader = origFileReader ? new origFileReader() : {};
--};
--
--// States
--FileReader.EMPTY = 0;
--FileReader.LOADING = 1;
--FileReader.DONE = 2;
--
--utils.defineGetter(FileReader.prototype, 'readyState', function() {
-- return this._fileName ? this._readyState : this._realReader.readyState;
--});
--
--utils.defineGetter(FileReader.prototype, 'error', function() {
-- return this._fileName ? this._error: this._realReader.error;
--});
--
--utils.defineGetter(FileReader.prototype, 'result', function() {
-- return this._fileName ? this._result: this._realReader.result;
--});
--
--function defineEvent(eventName) {
-- utils.defineGetterSetter(FileReader.prototype, eventName, function() {
-- return this._realReader[eventName] || null;
-- }, function(value) {
-- this._realReader[eventName] = value;
-- });
--}
--defineEvent('onloadstart'); // When the read starts.
--defineEvent('onprogress'); // While reading (and decoding) file or fileBlob data, and reporting partial file data (progress.loaded/progress.total)
--defineEvent('onload'); // When the read has successfully completed.
--defineEvent('onerror'); // When the read has failed (see errors).
--defineEvent('onloadend'); // When the request has completed (either in success or failure).
--defineEvent('onabort'); // When the read has been aborted. For instance, by invoking the abort() method.
--
--function initRead(reader, file) {
-- // Already loading something
-- if (reader.readyState == FileReader.LOADING) {
-- throw new FileError(FileError.INVALID_STATE_ERR);
-- }
--
-- reader._result = null;
-- reader._error = null;
-- reader._readyState = FileReader.LOADING;
--
-- if (typeof file.fullPath == 'string') {
-- reader._fileName = file.fullPath;
-- } else {
-- reader._fileName = '';
-- return true;
-- }
--
-- reader.onloadstart && reader.onloadstart(new ProgressEvent("loadstart", {target:reader}));
--}
--
--/**
-- * Abort reading file.
-- */
--FileReader.prototype.abort = function() {
-- if (origFileReader && !this._fileName) {
-- return this._realReader.abort();
-- }
-- this._result = null;
--
-- if (this._readyState == FileReader.DONE || this._readyState == FileReader.EMPTY) {
-- return;
-- }
--
-- this._readyState = FileReader.DONE;
--
-- // If abort callback
-- if (typeof this.onabort === 'function') {
-- this.onabort(new ProgressEvent('abort', {target:this}));
-- }
-- // If load end callback
-- if (typeof this.onloadend === 'function') {
-- this.onloadend(new ProgressEvent('loadend', {target:this}));
-- }
--};
--
--/**
-- * Read text file.
-- *
-- * @param file {File} File object containing file properties
-- * @param encoding [Optional] (see http://www.iana.org/assignments/character-sets)
-- */
--FileReader.prototype.readAsText = function(file, encoding) {
-- if (initRead(this, file)) {
-- return this._realReader.readAsText(file, encoding);
-- }
--
-- // Default encoding is UTF-8
-- var enc = encoding ? encoding : "UTF-8";
-- var me = this;
-- var execArgs = [this._fileName, enc, file.start, file.end];
--
-- // Read file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // Save result
-- me._result = r;
--
-- // If onload callback
-- if (typeof me.onload === "function") {
-- me.onload(new ProgressEvent("load", {target:me}));
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- // null result
-- me._result = null;
--
-- // Save error
-- me._error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- }, "File", "readAsText", execArgs);
--};
--
--
--/**
-- * Read file and return data as a base64 encoded data url.
-- * A data url is of the form:
-- * data:[<mediatype>][;base64],<data>
-- *
-- * @param file {File} File object containing file properties
-- */
--FileReader.prototype.readAsDataURL = function(file) {
-- if (initRead(this, file)) {
-- return this._realReader.readAsDataURL(file);
-- }
--
-- var me = this;
-- var execArgs = [this._fileName, file.start, file.end];
--
-- // Read file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- // Save result
-- me._result = r;
--
-- // If onload callback
-- if (typeof me.onload === "function") {
-- me.onload(new ProgressEvent("load", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- me._result = null;
--
-- // Save error
-- me._error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- }, "File", "readAsDataURL", execArgs);
--};
--
--/**
-- * Read file and return data as a binary data.
-- *
-- * @param file {File} File object containing file properties
-- */
--FileReader.prototype.readAsBinaryString = function(file) {
-- if (initRead(this, file)) {
-- return this._realReader.readAsBinaryString(file);
-- }
--
-- var me = this;
-- var execArgs = [this._fileName, file.start, file.end];
--
-- // Read file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- me._result = r;
--
-- // If onload callback
-- if (typeof me.onload === "function") {
-- me.onload(new ProgressEvent("load", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- me._result = null;
--
-- // Save error
-- me._error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- }, "File", "readAsBinaryString", execArgs);
--};
--
--/**
-- * Read file and return data as a binary data.
-- *
-- * @param file {File} File object containing file properties
-- */
--FileReader.prototype.readAsArrayBuffer = function(file) {
-- if (initRead(this, file)) {
-- return this._realReader.readAsArrayBuffer(file);
-- }
--
-- var me = this;
-- var execArgs = [this._fileName, file.start, file.end];
--
-- // Read file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- me._result = r;
--
-- // If onload callback
-- if (typeof me.onload === "function") {
-- me.onload(new ProgressEvent("load", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me._readyState === FileReader.DONE) {
-- return;
-- }
--
-- // DONE state
-- me._readyState = FileReader.DONE;
--
-- me._result = null;
--
-- // Save error
-- me._error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {target:me}));
-- }
--
-- // If onloadend callback
-- if (typeof me.onloadend === "function") {
-- me.onloadend(new ProgressEvent("loadend", {target:me}));
-- }
-- }, "File", "readAsArrayBuffer", execArgs);
--};
--
--module.exports = FileReader;
--
--});
--
--// file: lib/common/plugin/FileSystem.js
--define("cordova/plugin/FileSystem", function(require, exports, module) {
--
--var DirectoryEntry = require('cordova/plugin/DirectoryEntry');
--
--/**
-- * An interface representing a file system
-- *
-- * @constructor
-- * {DOMString} name the unique name of the file system (readonly)
-- * {DirectoryEntry} root directory of the file system (readonly)
-- */
--var FileSystem = function(name, root) {
-- this.name = name || null;
-- if (root) {
-- this.root = new DirectoryEntry(root.name, root.fullPath);
-- }
--};
--
--module.exports = FileSystem;
--
--});
--
--// file: lib/common/plugin/FileTransfer.js
--define("cordova/plugin/FileTransfer", function(require, exports, module) {
--
--var argscheck = require('cordova/argscheck'),
-- exec = require('cordova/exec'),
-- FileTransferError = require('cordova/plugin/FileTransferError'),
-- ProgressEvent = require('cordova/plugin/ProgressEvent');
--
--function newProgressEvent(result) {
-- var pe = new ProgressEvent();
-- pe.lengthComputable = result.lengthComputable;
-- pe.loaded = result.loaded;
-- pe.total = result.total;
-- return pe;
--}
--
--function getBasicAuthHeader(urlString) {
-- var header = null;
--
-- if (window.btoa) {
-- // parse the url using the Location object
-- var url = document.createElement('a');
-- url.href = urlString;
--
-- var credentials = null;
-- var protocol = url.protocol + "//";
-- var origin = protocol + url.host;
--
-- // check whether there are the username:password credentials in the url
-- if (url.href.indexOf(origin) !== 0) { // credentials found
-- var atIndex = url.href.indexOf("@");
-- credentials = url.href.substring(protocol.length, atIndex);
-- }
--
-- if (credentials) {
-- var authHeader = "Authorization";
-- var authHeaderValue = "Basic " + window.btoa(credentials);
--
-- header = {
-- name : authHeader,
-- value : authHeaderValue
-- };
-- }
-- }
--
-- return header;
--}
--
--var idCounter = 0;
--
--/**
-- * FileTransfer uploads a file to a remote server.
-- * @constructor
-- */
--var FileTransfer = function() {
-- this._id = ++idCounter;
-- this.onprogress = null; // optional callback
--};
--
--/**
--* Given an absolute file path, uploads a file on the device to a remote server
--* using a multipart HTTP request.
--* @param filePath {String} Full path of the file on the device
--* @param server {String} URL of the server to receive the file
--* @param successCallback (Function} Callback to be invoked when upload has completed
--* @param errorCallback {Function} Callback to be invoked upon error
--* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
--* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
--*/
--FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
-- argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
-- // check for options
-- var fileKey = null;
-- var fileName = null;
-- var mimeType = null;
-- var params = null;
-- var chunkedMode = true;
-- var headers = null;
-- var httpMethod = null;
-- var basicAuthHeader = getBasicAuthHeader(server);
-- if (basicAuthHeader) {
-- options = options || {};
-- options.headers = options.headers || {};
-- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
-- }
--
-- if (options) {
-- fileKey = options.fileKey;
-- fileName = options.fileName;
-- mimeType = options.mimeType;
-- headers = options.headers;
-- httpMethod = options.httpMethod || "POST";
-- if (httpMethod.toUpperCase() == "PUT"){
-- httpMethod = "PUT";
-- } else {
-- httpMethod = "POST";
-- }
-- if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
-- chunkedMode = options.chunkedMode;
-- }
-- if (options.params) {
-- params = options.params;
-- }
-- else {
-- params = {};
-- }
-- }
--
-- var fail = errorCallback && function(e) {
-- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
-- errorCallback(error);
-- };
--
-- var self = this;
-- var win = function(result) {
-- if (typeof result.lengthComputable != "undefined") {
-- if (self.onprogress) {
-- self.onprogress(newProgressEvent(result));
-- }
-- } else {
-- successCallback && successCallback(result);
-- }
-- };
-- exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
--};
--
--/**
-- * Downloads a file form a given URL and saves it to the specified directory.
-- * @param source {String} URL of the server to receive the file
-- * @param target {String} Full path of the file on the device
-- * @param successCallback (Function} Callback to be invoked when upload has completed
-- * @param errorCallback {Function} Callback to be invoked upon error
-- * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
-- * @param options {FileDownloadOptions} Optional parameters such as headers
-- */
--FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
-- argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
-- var self = this;
--
-- var basicAuthHeader = getBasicAuthHeader(source);
-- if (basicAuthHeader) {
-- options = options || {};
-- options.headers = options.headers || {};
-- options.headers[basicAuthHeader.name] = basicAuthHeader.value;
-- }
--
-- var headers = null;
-- if (options) {
-- headers = options.headers || null;
-- }
--
-- var win = function(result) {
-- if (typeof result.lengthComputable != "undefined") {
-- if (self.onprogress) {
-- return self.onprogress(newProgressEvent(result));
-- }
-- } else if (successCallback) {
-- var entry = null;
-- if (result.isDirectory) {
-- entry = new (require('cordova/plugin/DirectoryEntry'))();
-- }
-- else if (result.isFile) {
-- entry = new (require('cordova/plugin/FileEntry'))();
-- }
-- entry.isDirectory = result.isDirectory;
-- entry.isFile = result.isFile;
-- entry.name = result.name;
-- entry.fullPath = result.fullPath;
-- successCallback(entry);
-- }
-- };
--
-- var fail = errorCallback && function(e) {
-- var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body);
-- errorCallback(error);
-- };
--
-- exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
--};
--
--/**
-- * Aborts the ongoing file transfer on this object. The original error
-- * callback for the file transfer will be called if necessary.
-- */
--FileTransfer.prototype.abort = function() {
-- exec(null, null, 'FileTransfer', 'abort', [this._id]);
--};
--
--module.exports = FileTransfer;
--
--});
--
--// file: lib/common/plugin/FileTransferError.js
--define("cordova/plugin/FileTransferError", function(require, exports, module) {
--
--/**
-- * FileTransferError
-- * @constructor
-- */
--var FileTransferError = function(code, source, target, status, body) {
-- this.code = code || null;
-- this.source = source || null;
-- this.target = target || null;
-- this.http_status = status || null;
-- this.body = body || null;
--};
--
--FileTransferError.FILE_NOT_FOUND_ERR = 1;
--FileTransferError.INVALID_URL_ERR = 2;
--FileTransferError.CONNECTION_ERR = 3;
--FileTransferError.ABORT_ERR = 4;
--
--module.exports = FileTransferError;
--
--});
--
--// file: lib/common/plugin/FileUploadOptions.js
--define("cordova/plugin/FileUploadOptions", function(require, exports, module) {
--
--/**
-- * Options to customize the HTTP request used to upload files.
-- * @constructor
-- * @param fileKey {String} Name of file request parameter.
-- * @param fileName {String} Filename to be used by the server. Defaults to image.jpg.
-- * @param mimeType {String} Mimetype of the uploaded file. Defaults to image/jpeg.
-- * @param params {Object} Object with key: value params to send to the server.
-- * @param headers {Object} Keys are header names, values are header values. Multiple
-- * headers of the same name are not supported.
-- */
--var FileUploadOptions = function(fileKey, fileName, mimeType, params, headers, httpMethod) {
-- this.fileKey = fileKey || null;
-- this.fileName = fileName || null;
-- this.mimeType = mimeType || null;
-- this.params = params || null;
-- this.headers = headers || null;
-- this.httpMethod = httpMethod || null;
--};
--
--module.exports = FileUploadOptions;
--
--});
--
--// file: lib/common/plugin/FileUploadResult.js
--define("cordova/plugin/FileUploadResult", function(require, exports, module) {
--
--/**
-- * FileUploadResult
-- * @constructor
-- */
--var FileUploadResult = function() {
-- this.bytesSent = 0;
-- this.responseCode = null;
-- this.response = null;
--};
--
--module.exports = FileUploadResult;
--
--});
--
--// file: lib/common/plugin/FileWriter.js
--define("cordova/plugin/FileWriter", function(require, exports, module) {
--
--var exec = require('cordova/exec'),
-- FileError = require('cordova/plugin/FileError'),
-- ProgressEvent = require('cordova/plugin/ProgressEvent');
--
--/**
-- * This class writes to the mobile device file system.
-- *
-- * For Android:
-- * The root directory is the root of the file system.
-- * To write to the SD card, the file name is "sdcard/my_file.txt"
-- *
-- * @constructor
-- * @param file {File} File object containing file properties
-- * @param append if true write to the end of the file, otherwise overwrite the file
-- */
--var FileWriter = function(file) {
-- this.fileName = "";
-- this.length = 0;
-- if (file) {
-- this.fileName = file.fullPath || file;
-- this.length = file.size || 0;
-- }
-- // default is to write at the beginning of the file
-- this.position = 0;
--
-- this.readyState = 0; // EMPTY
--
-- this.result = null;
--
-- // Error
-- this.error = null;
--
-- // Event handlers
-- this.onwritestart = null; // When writing starts
-- this.onprogress = null; // While writing the file, and reporting partial file data
-- this.onwrite = null; // When the write has successfully completed.
-- this.onwriteend = null; // When the request has completed (either in success or failure).
-- this.onabort = null; // When the write has been aborted. For instance, by invoking the abort() method.
-- this.onerror = null; // When the write has failed (see errors).
--};
--
--// States
--FileWriter.INIT = 0;
--FileWriter.WRITING = 1;
--FileWriter.DONE = 2;
--
--/**
-- * Abort writing file.
-- */
--FileWriter.prototype.abort = function() {
-- // check for invalid state
-- if (this.readyState === FileWriter.DONE || this.readyState === FileWriter.INIT) {
-- throw new FileError(FileError.INVALID_STATE_ERR);
-- }
--
-- // set error
-- this.error = new FileError(FileError.ABORT_ERR);
--
-- this.readyState = FileWriter.DONE;
--
-- // If abort callback
-- if (typeof this.onabort === "function") {
-- this.onabort(new ProgressEvent("abort", {"target":this}));
-- }
--
-- // If write end callback
-- if (typeof this.onwriteend === "function") {
-- this.onwriteend(new ProgressEvent("writeend", {"target":this}));
-- }
--};
--
--/**
-- * Writes data to the file
-- *
-- * @param data text or blob to be written
-- */
--FileWriter.prototype.write = function(data) {
--
-- var isBinary = false;
--
-- // If we don't have Blob or ArrayBuffer support, don't bother.
-- if (typeof window.Blob !== 'undefined' && typeof window.ArrayBuffer !== 'undefined') {
--
-- // Check to see if the incoming data is a blob
-- if (data instanceof Blob) {
-- var that=this;
-- var fileReader = new FileReader();
-- fileReader.onload = function() {
-- // Call this method again, with the arraybuffer as argument
-- FileWriter.prototype.write.call(that, this.result);
-- };
-- fileReader.readAsArrayBuffer(data);
-- return;
-- }
--
-- // Mark data type for safer transport over the binary bridge
-- isBinary = (data instanceof ArrayBuffer);
-- }
--
-- // Throw an exception if we are already writing a file
-- if (this.readyState === FileWriter.WRITING) {
-- throw new FileError(FileError.INVALID_STATE_ERR);
-- }
--
-- // WRITING state
-- this.readyState = FileWriter.WRITING;
--
-- var me = this;
--
-- // If onwritestart callback
-- if (typeof me.onwritestart === "function") {
-- me.onwritestart(new ProgressEvent("writestart", {"target":me}));
-- }
--
-- // Write file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me.readyState === FileWriter.DONE) {
-- return;
-- }
--
-- // position always increases by bytes written because file would be extended
-- me.position += r;
-- // The length of the file is now where we are done writing.
--
-- me.length = me.position;
--
-- // DONE state
-- me.readyState = FileWriter.DONE;
--
-- // If onwrite callback
-- if (typeof me.onwrite === "function") {
-- me.onwrite(new ProgressEvent("write", {"target":me}));
-- }
--
-- // If onwriteend callback
-- if (typeof me.onwriteend === "function") {
-- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me.readyState === FileWriter.DONE) {
-- return;
-- }
--
-- // DONE state
-- me.readyState = FileWriter.DONE;
--
-- // Save error
-- me.error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {"target":me}));
-- }
--
-- // If onwriteend callback
-- if (typeof me.onwriteend === "function") {
-- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
-- }
-- }, "File", "write", [this.fileName, data, this.position, isBinary]);
--};
--
--/**
-- * Moves the file pointer to the location specified.
-- *
-- * If the offset is a negative number the position of the file
-- * pointer is rewound. If the offset is greater than the file
-- * size the position is set to the end of the file.
-- *
-- * @param offset is the location to move the file pointer to.
-- */
--FileWriter.prototype.seek = function(offset) {
-- // Throw an exception if we are already writing a file
-- if (this.readyState === FileWriter.WRITING) {
-- throw new FileError(FileError.INVALID_STATE_ERR);
-- }
--
-- if (!offset && offset !== 0) {
-- return;
-- }
--
-- // See back from end of file.
-- if (offset < 0) {
-- this.position = Math.max(offset + this.length, 0);
-- }
-- // Offset is bigger than file size so set position
-- // to the end of the file.
-- else if (offset > this.length) {
-- this.position = this.length;
-- }
-- // Offset is between 0 and file size so set the position
-- // to start writing.
-- else {
-- this.position = offset;
-- }
--};
--
--/**
-- * Truncates the file to the size specified.
-- *
-- * @param size to chop the file at.
-- */
--FileWriter.prototype.truncate = function(size) {
-- // Throw an exception if we are already writing a file
-- if (this.readyState === FileWriter.WRITING) {
-- throw new FileError(FileError.INVALID_STATE_ERR);
-- }
--
-- // WRITING state
-- this.readyState = FileWriter.WRITING;
--
-- var me = this;
--
-- // If onwritestart callback
-- if (typeof me.onwritestart === "function") {
-- me.onwritestart(new ProgressEvent("writestart", {"target":this}));
-- }
--
-- // Write file
-- exec(
-- // Success callback
-- function(r) {
-- // If DONE (cancelled), then don't do anything
-- if (me.readyState === FileWriter.DONE) {
-- return;
-- }
--
-- // DONE state
-- me.readyState = FileWriter.DONE;
--
-- // Update the length of the file
-- me.length = r;
-- me.position = Math.min(me.position, r);
--
-- // If onwrite callback
-- if (typeof me.onwrite === "function") {
-- me.onwrite(new ProgressEvent("write", {"target":me}));
-- }
--
-- // If onwriteend callback
-- if (typeof me.onwriteend === "function") {
-- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
-- }
-- },
-- // Error callback
-- function(e) {
-- // If DONE (cancelled), then don't do anything
-- if (me.readyState === FileWriter.DONE) {
-- return;
-- }
--
-- // DONE state
-- me.readyState = FileWriter.DONE;
--
-- // Save error
-- me.error = new FileError(e);
--
-- // If onerror callback
-- if (typeof me.onerror === "function") {
-- me.onerror(new ProgressEvent("error", {"target":me}));
-- }
--
-- // If onwriteend callback
-- if (typeof me.onwriteend === "function") {
-- me.onwriteend(new ProgressEvent("writeend", {"target":me}));
-- }
-- }, "File", "truncate", [this.fileName, size]);
--};
--
--module.exports = FileWriter;
--
--});
--
--// file: lib/common/plugin/Flags.js
--define("cordova/plugin/Flags", function(require, exports, module) {
--
--/**
-- * Supplies arguments to methods that lookup or create files and directories.
-- *
-- * @param create
-- * {boolean} file or directory if it doesn't exist
-- * @param exclusive
-- * {boolean} used with create; if true the command will fail if
-- * target path exists
-- */
--function Flags(create, exclusive) {
-- this.create = create || false;
-- this.exclusive = exclusive || false;
--}
--
--module.exports = Flags;
--
--});
--
--// file: lib/common/plugin/GlobalizationError.js
--define("cordova/plugin/GlobalizationError", function(require, exports, module) {
--
--
--/**
-- * Globalization error object
-- *
-- * @constructor
-- * @param code
-- * @param message
-- */
--var GlobalizationError = function(code, message) {
-- this.code = code || null;
-- this.message = message || '';
--};
--
--// Globalization error codes
--GlobalizationError.UNKNOWN_ERROR = 0;
--GlobalizationError.FORMATTING_ERROR = 1;
--GlobalizationError.PARSING_ERROR = 2;
--GlobalizationError.PATTERN_ERROR = 3;
--
--module.exports = GlobalizationError;
--
--});
--
--// file: lib/common/plugin/InAppBrowser.js
--define("cordova/plugin/InAppBrowser", function(require, exports, module) {
--
--var exec = require('cordova/exec');
--var channel = require('cordova/channel');
--var modulemapper = require('cordova/modulemapper');
--
--function InAppBrowser() {
-- this.channels = {
-- 'loadstart': channel.create('loadstart'),
-- 'loadstop' : channel.create('loadstop'),
-- 'loaderror' : channel.create('loaderror'),
-- 'exit' : channel.create('exit')
-- };
--}
--
--InAppBrowser.prototype = {
-- _eventHandler: function (event) {
-- if (event.type in this.channels) {
-- this.channels[event.type].fire(event);
-- }
-- },
-- close: function (eventname) {
-- exec(null, null, "InAppBrowser", "close", []);
-- },
-- show: function (eventname) {
-- exec(null, null, "InAppBrowser", "show", []);
-- },
-- addEventListener: function (eventname,f) {
-- if (eventname in this.channels) {
-- this.channels[eventname].subscribe(f);
-- }
-- },
-- removeEventListener: function(eventname, f) {
-- if (eventname in this.channels) {
-- this.channels[eventname].unsubscribe(f);
-- }
-- },
--
-- executeScript: function(injectDetails, cb) {
-- if (injectDetails.code) {
-- exec(cb, null, "InAppBrowser", "injectScriptCode", [injectDetails.code, !!cb]);
-- } else if (injectDetails.file) {
-- exec(cb, null, "InAppBrowser", "injectScriptFile", [injectDetails.file, !!cb]);
-- } else {
-- throw new Error('executeScript requires exactly one of code or file to be specified');
-- }
-- },
--
-- insertCSS: function(injectDetails, cb) {
-- if (injectDetails.code) {
-- exec(cb, null, "InAppBrowser", "injectStyleCode", [injectDetails.code, !!cb]);
-- } else if (injectDetails.file) {
-- exec(cb, null, "InAppBrowser", "injectStyleFile", [injectDetails.file, !!cb]);
-- } else {
-- throw new Error('insertCSS requires exactly one of code or file to be specified');
-- }
-- }
--};
--
--module.exports = function(strUrl, strWindowName, strWindowFeatures) {
-- var iab = new InAppBrowser();
-- var cb = function(eventname) {
-- iab._eventHandler(eventname);
-- };
--
-- // Don't catch calls that write to existing frames (e.g. named iframes).
-- if (window.frames && window.frames[strWindowName]) {
-- var origOpenFunc = modulemapper.getOriginalSymbol(window, 'open');
-- return origOpenFunc.apply(window, arguments);
-- }
--
-- exec(cb, cb, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]);
-- return iab;
--};
--
--
--});
--
--// file: lib/common/plugin/LocalFileSystem.js
--define("cordova/plugin/LocalFileSystem", function(require, exports, module) {
--
--var exec = require('cordova/exec');
--
--/**
-- * Represents a local file system.
-- */
--var LocalFileSystem = function() {
--
--};
--
--LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence
--LocalFileSystem.PERSISTENT = 1; //persistent
--
--module.exports = LocalFileSystem;
--
--});
--
--// file
<TRUNCATED>