You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2012/03/01 02:24:57 UTC

[2/2] android commit: Updating the JS, even though it shouldn't be here. CB-290

Updating the JS, even though it shouldn't be here. CB-290


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/commit/adb871f9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/tree/adb871f9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/diff/adb871f9

Branch: refs/heads/master
Commit: adb871f9e10ac3b124f89e743b42833d0686b403
Parents: 79935d3
Author: Joe Bowser <bo...@apache.org>
Authored: Wed Feb 29 17:03:37 2012 -0800
Committer: Joe Bowser <bo...@apache.org>
Committed: Wed Feb 29 17:03:37 2012 -0800

----------------------------------------------------------------------
 framework/assets/js/cordova.android.js |  266 ++++++---------------------
 1 files changed, 59 insertions(+), 207 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/adb871f9/framework/assets/js/cordova.android.js
----------------------------------------------------------------------
diff --git a/framework/assets/js/cordova.android.js b/framework/assets/js/cordova.android.js
index b090ac4..5d0879a 100755
--- a/framework/assets/js/cordova.android.js
+++ b/framework/assets/js/cordova.android.js
@@ -188,7 +188,9 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright [yyyy] [name of copyright owner]
+   Copyright 2011 Adobe
+   Copyright 2011 IBM Corporation
+   Copyright 2011 RIM
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -202,98 +204,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 
-==============================================================
-This product also include the following software:
-==============================================================
 
---------------------------------------------------------------
-jasmine from GitHub
-
-   https://github.com/pivotal/jasmine
-
-MIT-style license
-
-license available from:
-
-   https://github.com/pivotal/jasmine/blob/master/MIT.LICENSE
-   
------------------------------
-
-Copyright (c) 2008-2011 Pivotal Labs
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
---------------------------------------------------------------
-commonjs tests from the commonjs organization at GitHub
-
-   https://github.com/commonjs/commonjs
-
-MIT-style license
-
-license available from:
-
-   https://github.com/commonjs/commonjs/blob/master/docs/license.html.markdown
-
-contributor list available from:
-
-   https://github.com/commonjs/commonjs/blob/master/docs/contributors.html.markdown
-
------------------------------
-
-Copyright 2009 Kevin Dangoor
-Copyright 2009 Ihab Awad
-Copyright 2009 Ash Berlin
-Copyright 2009 Aristid Breitkreuz
-Copyright 2009 Kevin Dangoor
-Copyright 2009 Daniel Friesen
-Copyright 2009 Wes Garland
-Copyright 2009 Kris Kowal
-Copyright 2009 Dean Landolt
-Copyright 2009 Peter Michaux
-Copyright 2009 George Moschovitis
-Copyright 2009 Michael O'Brien
-Copyright 2009 Tom Robinson
-Copyright 2009 Hannes Wallnoefer
-Copyright 2009 Mike Wilson
-Copyright 2009 Ondrej Zara
-Copyright 2009 Chris Zumbrunn
-Copyright 2009 Kris Zyp
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
 
 */
 var require,
@@ -356,8 +267,7 @@ define('cordova/channel', function(require, exports, module) {
  */
 var Channel = function(type, opts) {
         this.type = type;
-        this.handlers = {};
-        this.numHandlers = 0;
+        this.handlers = [];
         this.guid = 0;
         this.fired = false;
         this.enabled = true;
@@ -402,7 +312,7 @@ var Channel = function(type, opts) {
  */
 Channel.prototype.subscribe = function(f, c, g) {
     // need a function to call
-    if (f === null || f === undefined) { return; }
+    if (f === null) { return; }
 
     var func = f;
     if (typeof c == "object" && f instanceof Function) { func = utils.close(c, f); }
@@ -411,7 +321,6 @@ Channel.prototype.subscribe = function(f, c, g) {
     func.observer_guid = g;
     f.observer_guid = g;
     this.handlers[g] = func;
-    this.numHandlers++;
     if (this.events.onSubscribe) this.events.onSubscribe.call(this);
     return g;
 };
@@ -421,9 +330,6 @@ Channel.prototype.subscribe = function(f, c, g) {
  * auto-unsubscribes itself.
  */
 Channel.prototype.subscribeOnce = function(f, c) {
-    // need a function to call
-    if (f === null || f === undefined) { return; }
-
     var g = null;
     var _this = this;
     var m = function() {
@@ -443,13 +349,9 @@ Channel.prototype.subscribeOnce = function(f, c) {
  * Unsubscribes the function with the given guid from the channel.
  */
 Channel.prototype.unsubscribe = function(g) {
-    // need a function to unsubscribe
-    if (g === null || g === undefined) { return; }
-
     if (g instanceof Function) { g = g.observer_guid; }
     this.handlers[g] = null;
     delete this.handlers[g];
-    this.numHandlers--;
     if (this.events.onUnsubscribe) this.events.onUnsubscribe.call(this);
 };
 
@@ -984,13 +886,13 @@ module.exports = {
     var backButtonChannel = cordova.addDocumentEventHandler('backbutton', {
       onSubscribe:function() {
         // If we just attached the first handler, let native know we need to override the back button.
-        if (this.numHandlers === 1) {
+        if (this.handlers.length === 1) {
           exec(null, null, "App", "overrideBackbutton", [true]);
         }
       },
       onUnsubscribe:function() {
         // If we just detached the last handler, let native know we no longer override the back button.
-        if (this.numHandlers === 0) {
+        if (this.handlers.length === 0) {
           exec(null, null, "App", "overrideBackbutton", [false]);
         }
       }
@@ -1017,7 +919,7 @@ module.exports = {
     } else {
       // 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.
+      // because Google broke it in the name of security.
       var originalOpenDatabase = window.openDatabase;
       window.openDatabase = function(name, version, desc, size) {
           var db = null;
@@ -1187,7 +1089,7 @@ function include(parent, objects, clobber) {
           var result = obj.path ? require(obj.path) : {};
 
           if (clobber) {
-              // Clobber if it doesn't exist or if an override is specified.
+              // Set the value if it doesn't exist or if an override is specified.
               if (typeof parent[key] === 'undefined' || typeof obj.path !== 'undefined') {
                   parent[key] = result;
               }
@@ -1348,9 +1250,13 @@ var cordova = require('cordova'),
     exec = require('cordova/exec');
 
 function handlers() {
-  return battery.channels.batterystatus.numHandlers + 
-         battery.channels.batterylow.numHandlers +
-         battery.channels.batterycritical.numHandlers;
+  var count = function (a) {
+          return a.filter(function (v) {return !!v;}).length;
+      }; 
+
+  return count(module.exports.channels.batterystatus.handlers) + 
+         count(module.exports.channels.batterylow.handlers) +
+         count(module.exports.channels.batterycritical.handlers);
 }
 
 var Battery = function() {
@@ -1373,7 +1279,7 @@ var Battery = function() {
  * appropriately (and hopefully save on battery life!).
  */
 Battery.prototype.onSubscribe = function() {
-  var me = battery;
+  var me = module.exports; // TODO: i dont like this reference
   // If we just registered the first handler, make sure native listener is started.
   if (handlers() === 1) {
     exec(me._status, me._error, "Battery", "start", []);
@@ -1381,8 +1287,10 @@ Battery.prototype.onSubscribe = function() {
 };
 
 Battery.prototype.onUnsubscribe = function() {
-  var me = battery;
-
+  var me = module.exports,
+      empty = function (a) {
+          return a.filter(function (v, i) {return v && !!i;});
+      }; 
   // If we just unregistered the last handler, make sure native listener is stopped.
   if (handlers() === 0) {
       exec(null, null, "Battery", "stop", []);
@@ -1396,7 +1304,7 @@ Battery.prototype.onUnsubscribe = function() {
  */
 Battery.prototype._status = function(info) {
 	if (info) {
-		var me = battery;
+		var me = module.exports;//TODO: can we eliminate this global ref?
     var level = info.level;
 		if (me._level !== level || me._isPlugged !== info.isPlugged) {
 			// Fire batterystatus event
@@ -1424,9 +1332,7 @@ Battery.prototype._error = function(e) {
     console.log("Error initializing Battery: " + e);
 };
 
-var battery = new Battery();
-
-module.exports = battery;
+module.exports = new Battery();
 
 });
 
@@ -1547,16 +1453,16 @@ var exec = require('cordova/exec'),
  * @param {CaptureVideoOptions} options
  */
 function _capture(type, successCallback, errorCallback, options) {
-    var win = function(result) {
+    var win = function(pluginResult) {
         var mediaFiles = [];
         var i;
-        for (i = 0; i < pluginResult.message.length; i++) {
+        for (i = 0; i < pluginResult.length; i++) {
             var mediaFile = new MediaFile();
-            mediaFile.name = pluginResult.message[i].name;
-            mediaFile.fullPath = pluginResult.message[i].fullPath;
-            mediaFile.type = pluginResult.message[i].type;
-            mediaFile.lastModifiedDate = pluginResult.message[i].lastModifiedDate;
-            mediaFile.size = pluginResult.message[i].size;
+            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);
@@ -2262,10 +2168,7 @@ DirectoryEntry.prototype.getDirectory = function(path, options, successCallback,
  * @param {Function} errorCallback is called with a FileError
  */
 DirectoryEntry.prototype.removeRecursively = function(successCallback, errorCallback) {
-    var fail = function(code) {
-        errorCallback(new FileError(code));
-    };
-    exec(successCallback, fail, "File", "removeRecursively", [this.fullPath]);
+    exec(successCallback, errorCallback, "File", "removeRecursively", [this.fullPath]);
 };
 
 /**
@@ -2327,10 +2230,7 @@ DirectoryReader.prototype.readEntries = function(successCallback, errorCallback)
         }
         successCallback(retVal);
     };
-    var fail = function(code) {
-        errorCallback(new FileError(code));
-    };
-    exec(win, fail, "File", "readEntries", [this.path]);
+    exec(win, errorCallback, "File", "readEntries", [this.fullPath]);
 };
 
 module.exports = DirectoryReader;
@@ -2377,10 +2277,8 @@ Entry.prototype.getMetadata = function(successCallback, errorCallback) {
       var metadata = new Metadata(lastModified);
       successCallback(metadata);
   };
-  var fail = function(code) {
-      errorCallback(new FileError(code));
-  };
-  exec(success, fail, "File", "getMetadata", [this.fullPath]);
+
+  exec(success, errorCallback, "File", "getMetadata", [this.fullPath]);
 };
 
 /**
@@ -2486,25 +2384,21 @@ Entry.prototype.copyTo = function(parent, newName, successCallback, errorCallbac
 
 /**
  * Return a URL that can be used to identify this entry.
+ * 
+ * @param mimeType
+ *            {DOMString} for a FileEntry, the mime type to be used to
+ *            interpret the file, when loaded through this URI.
+ * @param successCallback
+ *            {Function} called with the new Entry object
+ * @param errorCallback
+ *            {Function} called with a FileError
  */
-Entry.prototype.toURL = function() {
+Entry.prototype.toURL = function(mimeType, successCallback, errorCallback) {
     // 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.fullPath;
-};
-
-/**
  * 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.
@@ -2526,10 +2420,7 @@ Entry.prototype.remove = function(successCallback, errorCallback) {
  * @param errorCallback {Function} called with a FileError
  */
 Entry.prototype.getParent = function(successCallback, errorCallback) {
-    var fail = function(code) {
-        errorCallback(new FileError(code));
-    };
-    exec(successCallback, fail, "File", "getParent", [this.fullPath]);
+    exec(successCallback, errorCallback, "File", "getParent", [this.fullPath]);
 };
 
 module.exports = Entry;
@@ -3417,6 +3308,11 @@ var LocalFileSystem = function() {
 
 };
 
+// Non-standard function
+LocalFileSystem.prototype.isFileSystemRoot = function(path) {
+    return exec(null, null, "File", "isFileSystemRoot", [path]);
+};
+
 LocalFileSystem.TEMPORARY = 0; //temporary, with no guarantee of persistence
 LocalFileSystem.PERSISTENT = 1; //persistent
 
@@ -3462,6 +3358,12 @@ var Media = function(src, successCallback, errorCallback, statusCallback) {
         return;
     }
 
+    // statusCallback optional
+    if (positionCallback && (typeof positionCallback !== "function")) {
+        console.log("Media Error: positionCallback is not a function");
+        return;
+    }
+
     this.id = utils.createUUID();
     mediaObjects[this.id] = this;
     this.src = src;
@@ -3576,40 +3478,6 @@ 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 status        The status code (int)
- * @param msg           The status message (string)
- */
-Media.onStatus = function(id, msg, value) {
-    var media = mediaObjects[id];
-    // If state update
-    if (msg === Media.MEDIA_STATE) {
-        if (value === Media.MEDIA_STOPPED) {
-            if (media.successCallback) {
-                media.successCallback();
-            }
-        }
-        if (media.statusCallback) {
-            media.statusCallback(value);
-        }
-    }
-    else if (msg === Media.MEDIA_DURATION) {
-        media._duration = value;
-    }
-    else if (msg === Media.MEDIA_ERROR) {
-        if (media.errorCallback) {
-            media.errorCallback({"code":value});
-        }
-    }
-    else if (msg === Media.MEDIA_POSITION) {
-        media._position = value;
-    }
-};
-
 module.exports = Media;
 
 });
@@ -3737,28 +3605,15 @@ var exec = require('cordova/exec'),
 var NetworkConnection = function () {
         this.type = null;
         this._firstRun = true;
-        this._timer = null;
-        this.timeout = 500;
 
         var me = this,
             channel = require('cordova/channel');
 
         this.getInfo(
             function (info) {
-                me.type = info;
-                if (info === "none") {
-                    // set a timer if still offline at the end of timer send the offline event
-                    me._timer = setTimeout(function(){
-                        cordova.fireWindowEvent("offline");
-                        me._timer = null;
-                        }, me.timeout);
-                } else {
-                    // If there is a current offline event pending clear it
-                    if (me._timer !== null) {
-                        clearTimeout(me._timer);
-                        me._timer = null;
-                    }
-                    cordova.fireWindowEvent("online");
+                me.type = info.type;
+                if (typeof info.event !== "undefined") {
+                    cordova.fireWindowEvent(info.event);
                 }
 
                 // should only fire this once
@@ -3965,10 +3820,7 @@ var requestFileSystem = function(type, size, successCallback, errorCallback) {
         errorCallback(new FileError(FileError.NOT_FOUND_ERR));
       }
     };
-    var fail = function(e) {
-        errorCallback(new FileError(e));
-    };   
-    exec(success, fail, "File", "requestFileSystem", [type, size]);
+    exec(success, errorCallback, "File", "requestFileSystem", [type, size]);
   }
 };