You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by na...@apache.org on 2014/08/28 21:03:15 UTC

[01/50] git commit: Fix broken compile due to previous commit :(

Repository: cordova-amazon-fireos
Updated Branches:
  refs/heads/master 6b79ea2fb -> b07daec77


Fix broken compile due to previous commit :(


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/b83d7abf
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/b83d7abf
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/b83d7abf

Branch: refs/heads/master
Commit: b83d7abf9fb08b3d0dffd03c64056081af4a5517
Parents: b28bc22
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Jul 10 15:14:39 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:05:40 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/App.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/b83d7abf/framework/src/org/apache/cordova/App.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/App.java b/framework/src/org/apache/cordova/App.java
index c488f10..160923c 100755
--- a/framework/src/org/apache/cordova/App.java
+++ b/framework/src/org/apache/cordova/App.java
@@ -49,7 +49,7 @@ public class App extends CordovaPlugin {
      * get file paths associated with the Activity.
      */
     @Override
-    public void initialize() {
+    public void pluginInitialize() {
         this.initTelephonyReceiver();
     }
 


[45/50] git commit: CB-7410 add whitelist entries to get iframe/GoogleMaps working

Posted by na...@apache.org.
CB-7410 add whitelist entries to get iframe/GoogleMaps working


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/8e947149
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/8e947149
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/8e947149

Branch: refs/heads/master
Commit: 8e947149ed817a23eb914cac34bf5dcd0a7959aa
Parents: f81ba6c
Author: Marcel Kinard <cm...@gmail.com>
Authored: Tue Aug 26 17:20:58 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:14:38 2014 -0700

----------------------------------------------------------------------
 test/res/xml/config.xml | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/8e947149/test/res/xml/config.xml
----------------------------------------------------------------------
diff --git a/test/res/xml/config.xml b/test/res/xml/config.xml
index 9de3604..60489a7 100644
--- a/test/res/xml/config.xml
+++ b/test/res/xml/config.xml
@@ -25,6 +25,10 @@
     <author email="dev@cordova.apache.org" href="http://cordova.io">
     </author>
     <access origin="*.apache.org" />
+    <access origin="http://*.google.com/*" />
+    <access origin="https://*.google.com/*" />
+    <access origin="https://*.googleapis.com/*" />
+    <access origin="https://*.gstatic.com/*" />
     <content src="index.html" />
     <log level="DEBUG" />
     <preference name="useBrowserHistory" value="true" />


[28/50] git commit: CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR

Posted by na...@apache.org.
CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/db0847e1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/db0847e1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/db0847e1

Branch: refs/heads/master
Commit: db0847e14959bcfd7f03a441c277e57ef514410a
Parents: f40e8e1
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Jun 19 16:12:40 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:40:02 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js                           |  18 ++
 bin/lib/create.js                               |  16 +-
 .../gradle/wrapper/gradle-wrapper.properties    |   6 -
 bin/templates/project/gradlew                   | 164 -------------------
 bin/templates/project/gradlew.bat               |  90 ----------
 5 files changed, 31 insertions(+), 263 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/db0847e1/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index dbbb353..87f3ea6 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -24,6 +24,7 @@ var shelljs = require('shelljs'),
     Q     = require('q'),
     path  = require('path'),
     fs    = require('fs'),
+    which = require('which'),
     ROOT  = path.join(__dirname, '..', '..');
 
 var isWindows = process.platform == 'win32';
@@ -55,6 +56,23 @@ module.exports.get_target = function() {
     }
 }
 
+// Returns a promise.
+module.exports.sdk_dir = function() {
+    var d = Q.defer();
+    which('android', function(err, path) {
+        if (err) {
+            d.reject(new Error('ERROR: Cannot find Android SDK. android command not found.'));
+        } else {
+            var toolsDir = path.substring(0, path.lastIndexOf('/'));
+            if (toolsDir.substring(toolsDir.length-6) != "/tools") {
+                d.reject(new Error('ERROR: Cannot find Android SDK. android command not found in tools dir.'));
+            }
+            d.resolve(toolsDir.substring(0, toolsDir.length-6));
+        }
+    });
+    return d.promise;
+};
+
 // Returns a promise. Called only by build and clean commands.
 module.exports.check_ant = function() {
     return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/db0847e1/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 2274fff..297b356 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -120,6 +120,13 @@ function copyScripts(projectPath) {
     shell.cp(path.join(ROOT, 'bin', 'lib', 'android_sdk_version.js'), path.join(projectPath, 'cordova', 'lib', 'android_sdk_version.js'));
 }
 
+function copyGradleWrapper(sdkPath, projectPath) {
+    var wrapperDir = path.join(sdkPath, 'tools', 'templates','gradle','wrapper');
+    shell.cp(path.join(wrapperDir, 'gradlew'), projectPath);
+    shell.cp(path.join(wrapperDir, 'gradlew.bat'), projectPath);
+    shell.cp('-r', path.join(wrapperDir, 'gradle'), projectPath);
+}
+
 /**
  * Test whether a package name is acceptable for use as an android project.
  * Returns a promise, fulfilled if the package name is acceptable; rejected
@@ -252,9 +259,12 @@ exports.createProject = function(project_path, package_name, project_name, proje
             shell.cp('-f', path.join(project_template_dir, 'build.gradle'), project_path);
             shell.cp('-f', path.join(project_template_dir, 'libraries.gradle'), project_path);
             shell.cp('-f', path.join(project_template_dir, 'settings.gradle'), project_path);
-            shell.cp('-f', path.join(project_template_dir, 'gradlew'), project_path);
-            shell.cp('-f', path.join(project_template_dir, 'gradlew.bat'), project_path);
-            shell.cp('-r', path.join(project_template_dir, 'gradle'), project_path);
+            check_reqs.sdk_dir().then(function(dir) {
+                console.log("Copying Gradle wrapper from " + dir);
+                copyGradleWrapper(dir, project_path);
+            }).catch(function(err) {
+                console.log("Cannot find Android SDK. Not installing Gradle wrapper.");
+            });
 
             // Manually create directories that would be empty within the template (since git doesn't track directories).
             shell.mkdir(path.join(project_path, 'libs'));

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/db0847e1/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradle/wrapper/gradle-wrapper.properties b/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 497dc9b..0000000
--- a/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Fri Jun 13 09:52:43 EDT 2014
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-bin.zip

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/db0847e1/bin/templates/project/gradlew
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradlew b/bin/templates/project/gradlew
deleted file mode 100755
index 91a7e26..0000000
--- a/bin/templates/project/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
-    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/db0847e1/bin/templates/project/gradlew.bat
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradlew.bat b/bin/templates/project/gradlew.bat
deleted file mode 100644
index aec9973..0000000
--- a/bin/templates/project/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega


[42/50] git commit: CB-7291: Only add file, content and data URLs to internal whitelist

Posted by na...@apache.org.
CB-7291: Only add file, content and data URLs to internal whitelist


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/8afa753c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/8afa753c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/8afa753c

Branch: refs/heads/master
Commit: 8afa753c64c980c630988e55ce79a48bc88e17c7
Parents: c8b00ec
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Aug 21 16:10:32 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:11:56 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/ConfigXmlParser.java | 5 +++++
 framework/src/org/apache/cordova/Whitelist.java       | 4 ----
 2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/8afa753c/framework/src/org/apache/cordova/ConfigXmlParser.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java
index a5958ef..57cf222 100644
--- a/framework/src/org/apache/cordova/ConfigXmlParser.java
+++ b/framework/src/org/apache/cordova/ConfigXmlParser.java
@@ -77,6 +77,11 @@ public class ConfigXmlParser {
         boolean insideFeature = false;
         ArrayList<String> urlMap = null;
 
+        // Add implicitly allowed URLs
+        internalWhitelist.addWhiteListEntry("file:///*", false);
+        internalWhitelist.addWhiteListEntry("content:///*", false);
+        internalWhitelist.addWhiteListEntry("data:*", false);
+
         while (eventType != XmlResourceParser.END_DOCUMENT) {
             if (eventType == XmlResourceParser.START_TAG) {
                 String strNode = xml.getName();

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/8afa753c/framework/src/org/apache/cordova/Whitelist.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Whitelist.java b/framework/src/org/apache/cordova/Whitelist.java
index 5101ec3..d0f823c 100644
--- a/framework/src/org/apache/cordova/Whitelist.java
+++ b/framework/src/org/apache/cordova/Whitelist.java
@@ -98,10 +98,6 @@ public class Whitelist {
 
     public Whitelist() {
         this.whiteList = new ArrayList<URLPattern>();
-        // Add implicitly allowed URLs
-        addWhiteListEntry("file:///*", false);
-        addWhiteListEntry("content:///*", false);
-        addWhiteListEntry("data:*", false);
     }
 
     /* Match patterns (from http://developer.chrome.com/extensions/match_patterns.html)


[44/50] git commit: CB-7291 propogate change in method signature to the native tests

Posted by na...@apache.org.
CB-7291 propogate change in method signature to the native tests


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/f81ba6c6
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/f81ba6c6
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/f81ba6c6

Branch: refs/heads/master
Commit: f81ba6c6ffb455995e2173db61ddd4cd1bd9eba2
Parents: 5f2ced5
Author: Marcel Kinard <cm...@gmail.com>
Authored: Tue Aug 26 16:38:04 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:14:17 2014 -0700

----------------------------------------------------------------------
 test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f81ba6c6/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
index 6ec1edf..1fe98c3 100644
--- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
@@ -72,7 +72,7 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
         cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
         factory.initializeWebView(cordovaWebView, 0xFFFFFF, false, null);
         cordovaWebView.init(this, new CordovaWebViewClient(this, cordovaWebView), new CordovaChromeClient(this, cordovaWebView),
-                Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
+                Config.getPluginEntries(), Config.getWhitelist(), Config.getExternalWhitelist(), Config.getPreferences());
 
         cordovaWebView.loadUrl("file:///android_asset/www/index.html");
 
@@ -130,4 +130,4 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
     public AmazonWebKitFactory getFactory() {
         return AmazonWebKitFactories.getDefaultFactory();
     }
-}
\ No newline at end of file
+}


[11/50] git commit: CB-7172 Force window to have focus after resume

Posted by na...@apache.org.
CB-7172 Force window to have focus after resume

Workaround for some devices (Samsung Galaxy Note 3 at least)

github: close #108


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/7cb244e4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/7cb244e4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/7cb244e4

Branch: refs/heads/master
Commit: 7cb244e4bdbbcd965ba7eb6733a49e1767533be4
Parents: b535a74
Author: Andrey Kurdyumov <ka...@gmail.com>
Authored: Sun Jul 20 00:28:44 2014 +0600
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:11:33 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaActivity.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/7cb244e4/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 7fdab2b..91c24d7 100755
--- a/framework/src/org/apache/cordova/CordovaActivity.java
+++ b/framework/src/org/apache/cordova/CordovaActivity.java
@@ -721,6 +721,9 @@ public class CordovaActivity extends Activity implements CordovaInterface {
         if (this.appView == null) {
             return;
         }
+        // Force window to have focus, so application always
+        // receive user input. Workaround for some devices (Samsung Galaxy Note 3 at least)
+        this.getWindow().getDecorView().requestFocus();
 
         this.appView.handleResume(this.keepRunning, this.activityResultKeepRunning);
 


[33/50] git commit: Fixed for AmazonWebView.

Posted by na...@apache.org.
Fixed for AmazonWebView.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/e59bf273
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/e59bf273
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/e59bf273

Branch: refs/heads/master
Commit: e59bf273b6a3c15a949ea0bc953dc74ca657d6ac
Parents: 2d71d89
Author: Archana Naik <na...@lab126.com>
Authored: Mon Aug 18 12:43:59 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:43:59 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaWebViewClient.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/e59bf273/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 0af891a..639fc32 100755
--- a/framework/src/org/apache/cordova/CordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java
@@ -235,7 +235,7 @@ public class CordovaWebViewClient extends AmazonWebViewClient {
         // If this is a "Protocol Not Supported" error, then revert to the previous
         // page. If there was no previous page, then punt. The application's config
         // is likely incorrect (start page set to sms: or something like that)
-        if (errorCode == WebViewClient.ERROR_UNSUPPORTED_SCHEME) {
+        if (errorCode == AmazonWebViewClient.ERROR_UNSUPPORTED_SCHEME) {
             if (view.canGoBack()) {
                 view.goBack();
                 return;


[29/50] git commit: CB-3445 Speed up gradle building (incremental builds go from 10s -> 1.5s for me)

Posted by na...@apache.org.
CB-3445 Speed up gradle building (incremental builds go from 10s -> 1.5s for me)

Biggest win is disabling the linter.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/c3eda01f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/c3eda01f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/c3eda01f

Branch: refs/heads/master
Commit: c3eda01f56f58a8a567057ad9175496657d413a1
Parents: db0847e
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 14:16:27 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:40:58 2014 -0700

----------------------------------------------------------------------
 bin/templates/cordova/lib/build.js | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c3eda01f/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 3d0ae87..1f0cd23 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -102,7 +102,22 @@ module.exports.builders = {
     },
     gradle: {
         getArgs: function(cmd) {
+            var lintSteps = [
+                'lint',
+                'lintVitalRelease',
+                'compileLint',
+                'copyReleaseLint',
+                'copyDebugLint'
+            ];
             var args = [cmd, '-b', path.join(ROOT, 'build.gradle')];
+            // 10 seconds -> 6 seconds
+            args.push('-Dorg.gradle.daemon=true');
+            // Excluding lint: 6s-> 1.6s
+            for (var i = 0; i < lintSteps.length; ++i) {
+                args.push('-x', lintSteps[i]);
+            }
+            // Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet):
+            // args.push('-Dorg.gradle.parallel=true');
             return args;
         },
 


[03/50] git commit: Fix for `android` not being in PATH check on Windows

Posted by na...@apache.org.
Fix for `android` not being in PATH check on Windows

close #103


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/7da43228
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/7da43228
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/7da43228

Branch: refs/heads/master
Commit: 7da432289dc3d01190a3c8c883a29fb5b6bcf36a
Parents: 6e830fc
Author: Eion Robb <ei...@robbmob.com>
Authored: Sun Jun 22 09:43:30 2014 +1200
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:06:18 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/7da43228/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 397283e..327e7e6 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -82,7 +82,7 @@ module.exports.check_android = function() {
         } 
         return Q();
     }, function(stderr) {
-        if (stderr.match(/command\snot\sfound/)) {
+        if (stderr.match(/command\snot\sfound/) || stderr.match(/is not recognized as an internal or external command/)) {
             return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
         } else {
             return Q.reject(new Error('An error occurred while listing Android targets. Error: ' + stderr ));


[50/50] git commit: updated cordova.js in tests.

Posted by na...@apache.org.
updated cordova.js in tests.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/b07daec7
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/b07daec7
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/b07daec7

Branch: refs/heads/master
Commit: b07daec774a228b284dc403c5b309268d7fb3a8f
Parents: bb2029d
Author: Archana Naik <na...@lab126.com>
Authored: Thu Aug 28 12:01:16 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 12:01:16 2014 -0700

----------------------------------------------------------------------
 test/assets/www/cordova.js | 47 ++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/b07daec7/test/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/test/assets/www/cordova.js b/test/assets/www/cordova.js
index 0a87e6c..b8627c9 100755
--- a/test/assets/www/cordova.js
+++ b/test/assets/www/cordova.js
@@ -1,5 +1,6 @@
-// Platform: android
-// 3.6.0-dev-70cdca3
+
+// Platform: amazon-fireos
+// 3.6.3
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,7 +20,7 @@
  under the License.
 */
 ;(function() {
-var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-70cdca3';
+var CORDOVA_JS_BUILD_LABEL = '3.6.3';
 // file: src/scripts/require.js
 
 /*jshint -W079 */
@@ -316,7 +317,7 @@ module.exports = cordova;
 
 });
 
-// file: src/android/android/nativeapiprovider.js
+// file: src/amazon-fireos/android/nativeapiprovider.js
 define("cordova/android/nativeapiprovider", function(require, exports, module) {
 
 /**
@@ -339,7 +340,7 @@ module.exports = {
 
 });
 
-// file: src/android/android/promptbasednativeapi.js
+// file: src/amazon-fireos/android/promptbasednativeapi.js
 define("cordova/android/promptbasednativeapi", function(require, exports, module) {
 
 /**
@@ -848,7 +849,7 @@ module.exports = channel;
 
 });
 
-// file: src/android/exec.js
+// file: src/amazon-fireos/exec.js
 define("cordova/exec", function(require, exports, module) {
 
 /**
@@ -1468,7 +1469,7 @@ exports.reset();
 
 });
 
-// file: src/android/platform.js
+// file: src/amazon-fireos/platform.js
 define("cordova/platform", function(require, exports, module) {
 
 module.exports = {
@@ -1497,6 +1498,17 @@ module.exports = {
         cordova.addDocumentEventHandler('menubutton');
         cordova.addDocumentEventHandler('searchbutton');
 
+        function bindButtonChannel(buttonName) {
+            // generic button bind used for volumeup/volumedown buttons
+            var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
+            volumeButtonChannel.onHasSubscribersChange = function() {
+                exec(null, null, "App", "overrideButton", [buttonName, this.numHandlers == 1]);
+            };
+        }
+        // Inject a listener for the volume buttons on the document.
+        bindButtonChannel('volumeup');
+        bindButtonChannel('volumedown');
+
         // Let native code know we are all done on the JS side.
         // Native code will then un-hide the WebView.
         channel.onCordovaReady.subscribe(function() {
@@ -1507,7 +1519,7 @@ module.exports = {
 
 });
 
-// file: src/android/plugin/android/app.js
+// file: src/amazon-fireos/plugin/android/app.js
 define("cordova/plugin/android/app", function(require, exports, module) {
 
 var exec = require('cordova/exec');
@@ -1575,6 +1587,21 @@ module.exports = {
     },
 
     /**
+    * Override the default behavior of the Android volume button.
+    * If overridden, when the volume button is pressed, the "volume[up|down]button"
+    * JavaScript event will be fired.
+    *
+    * Note: The user should not have to call this method.  Instead, when the user
+    *       registers for the "volume[up|down]button" event, this is automatically done.
+    *
+    * @param button          volumeup, volumedown
+    * @param override        T=override, F=cancel override
+    */
+    overrideButton:function(button, override) {
+        exec(null, null, "App", "overrideButton", [button, override]);
+    },
+
+    /**
     * Exit and terminate the application.
     */
     exitApp:function() {
@@ -1667,11 +1694,11 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) {
 function findCordovaPath() {
     var path = null;
     var scripts = document.getElementsByTagName('script');
-    var term = 'cordova.js';
+    var term = '/cordova.js';
     for (var n = scripts.length-1; n>-1; n--) {
         var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007).
         if (src.indexOf(term) == (src.length - term.length)) {
-            path = src.substring(0, src.length - term.length);
+            path = src.substring(0, src.length - term.length) + '/';
             break;
         }
     }


[22/50] git commit: Change in test's AndroidManifest.xml needed for the test to run properly. Forgot the manifest.

Posted by na...@apache.org.
Change in test's AndroidManifest.xml needed for the test to run properly. Forgot the manifest.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/0f76cc40
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/0f76cc40
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/0f76cc40

Branch: refs/heads/master
Commit: 0f76cc4048b83a5906d75837fae53a665f1ef875
Parents: 5037bdc
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Aug 14 14:30:31 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:35:01 2014 -0700

----------------------------------------------------------------------
 test/AndroidManifest.xml | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0f76cc40/test/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/test/AndroidManifest.xml b/test/AndroidManifest.xml
index b675ca4..bab4566 100755
--- a/test/AndroidManifest.xml
+++ b/test/AndroidManifest.xml
@@ -256,7 +256,8 @@
                 <category android:name="android.intent.category.SAMPLE_CODE" />
             </intent-filter>
         </activity>
-                <!-- This is required for the Tests to work with AmazonWebView -->
+
+        <!-- This is required for the Tests to work with AmazonWebView -->
         <amazon:enable-feature 
             android:name="com.amazon.webview" 
             amazon:required="false" />
@@ -300,4 +301,15 @@
             android:permission="org.chromium.content_shell.permission.SANDBOX"
             android:process=":sandboxed_process5" />
         </application>
-</manifest> 
+        <activity
+            android:windowSoftInputMode="adjustPan"
+            android:label="@string/app_name" 
+            android:configChanges="orientation|keyboardHidden"
+            android:name="org.apache.cordova.test.SabotagedActivity" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>


[14/50] git commit: CB-7238: I should have collapsed this, but Config.init() must go before the creation of CordovaWebView

Posted by na...@apache.org.
CB-7238: I should have collapsed this, but Config.init() must go before the creation of CordovaWebView


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/7d68405f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/7d68405f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/7d68405f

Branch: refs/heads/master
Commit: 7d68405f929a6813537ba08737fe153df342b2db
Parents: 9c4da7b
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jul 31 09:23:14 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Tue Aug 5 12:46:02 2014 -0700

----------------------------------------------------------------------
 test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/7d68405f/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
index 55ebfeb..0dd1c20 100644
--- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
@@ -70,7 +70,6 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
         Config.init(this);
         
         cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
-        Config.init(this);
         cordovaWebView.init(this, new CordovaWebViewClient(this, cordovaWebView), new CordovaChromeClient(this, cordovaWebView),
                 Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
 


[48/50] git commit: CB-3445: Ensure that JAR files in libs directory are included

Posted by na...@apache.org.
CB-3445: Ensure that JAR files in libs directory are included


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/e5e5c5e0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/e5e5c5e0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/e5e5c5e0

Branch: refs/heads/master
Commit: e5e5c5e04dd3953bdd6bff0070871561b19d7cb0
Parents: 58877a5
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Aug 28 11:26:35 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:22:05 2014 -0700

----------------------------------------------------------------------
 bin/templates/project/build.gradle | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/e5e5c5e0/bin/templates/project/build.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle
index dcebbc5..8bccc41 100644
--- a/bin/templates/project/build.gradle
+++ b/bin/templates/project/build.gradle
@@ -15,6 +15,7 @@ buildscript {
 ext.multiarch=false
 
 dependencies {
+    compile fileTree(dir: 'libs', include: '*.jar')
     for (subproject in getProjectList()) {
         compile project(subproject)
     }


[47/50] git commit: CB-7410 clarify the title

Posted by na...@apache.org.
CB-7410 clarify the title


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/58877a54
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/58877a54
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/58877a54

Branch: refs/heads/master
Commit: 58877a5440da33b1c04b01f84e0f8440f033b2fd
Parents: 64a0138
Author: Marcel Kinard <cm...@gmail.com>
Authored: Wed Aug 27 13:56:31 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:21:35 2014 -0700

----------------------------------------------------------------------
 test/assets/www/index.html  | 2 +-
 test/res/values/strings.xml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/58877a54/test/assets/www/index.html
----------------------------------------------------------------------
diff --git a/test/assets/www/index.html b/test/assets/www/index.html
index 53d402d..6727802 100755
--- a/test/assets/www/index.html
+++ b/test/assets/www/index.html
@@ -36,7 +36,7 @@
 
   </head>
   <body onload="init();" id="stage" class="theme">
-    <h1>Cordova Android Tests</h1>
+    <h1>Cordova Android Native Tests</h1>
     <div id="info">
         <h4>Cordova: <span id="cordova"> &nbsp;</span></h4>
         <h4>Deviceready: <span id="deviceready"> &nbsp;</span></h4>

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/58877a54/test/res/values/strings.xml
----------------------------------------------------------------------
diff --git a/test/res/values/strings.xml b/test/res/values/strings.xml
index 2eff663..59e22e6 100644
--- a/test/res/values/strings.xml
+++ b/test/res/values/strings.xml
@@ -18,5 +18,5 @@
  under the License.
 -->
 <resources>
-   <string name="app_name">CordovaTests</string>
+   <string name="app_name">CordovaNativeTests</string>
 </resources>


[36/50] git commit: CB-7330 Don't run "android update" during creation

Posted by na...@apache.org.
CB-7330 Don't run "android update" during creation

Instead, have the build script copy do the equivalent logic on each
build.

Advantages:
- Scripts run much faster
- No more duplicate CordovaLib entries in project.properties
- Building is more independent from create/update script (more robust)


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/303b0aac
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/303b0aac
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/303b0aac

Branch: refs/heads/master
Commit: 303b0aac0dd2339e55e25959e5f9ce6bf35ba200
Parents: 77d5ebf
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 23:21:26 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:09:54 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js                    | 68 ++++++++++++---------
 bin/lib/create.js                        | 51 ++++++++++++----
 bin/templates/cordova/lib/build.js       | 87 ++++++++++++++++++++-------
 bin/templates/project/project.properties | 15 +++++
 4 files changed, 159 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/303b0aac/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index df55c1e..201d9a9 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -67,7 +67,18 @@ module.exports.get_target = function() {
 // Returns a promise. Called only by build and clean commands.
 module.exports.check_ant = function() {
     return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');
-}
+};
+
+// Returns a promise. Called only by build and clean commands.
+module.exports.check_gradle = function() {
+    var sdkDir = process.env['ANDROID_HOME'];
+    var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
+    if (!fs.existsSync(wrapperDir)) {
+        return Q.reject(new Error('Could not find gradle wrapper within android sdk. Might need to update your Android SDK.\n' +
+            'Looked here: ' + wrapperDir));
+    }
+    return Q.when();
+};
 
 // Returns a promise.
 module.exports.check_java = function() {
@@ -126,41 +137,44 @@ module.exports.check_java = function() {
 
 // Returns a promise.
 module.exports.check_android = function() {
-    var androidCmdPath = forgivingWhichSync('android');
-    var adbInPath = !!forgivingWhichSync('adb');
-    var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
-    if (hasAndroidHome && !androidCmdPath) {
-        process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
-    }
-    if (androidCmdPath && !hasAndroidHome) {
-        var parentDir = path.dirname(androidCmdPath);
-        if (path.basename(parentDir) == 'tools') {
-            process.env['ANDROID_HOME'] = path.dirname(parentDir);
-            hasAndroidHome = true;
+    return Q().then(function() {
+        var androidCmdPath = forgivingWhichSync('android');
+        var adbInPath = !!forgivingWhichSync('adb');
+        var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
+        if (hasAndroidHome && !androidCmdPath) {
+            process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
         }
-    }
-    if (hasAndroidHome && !adbInPath) {
-        process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
-    }
-
-    var valid_target = this.get_target();
-    var msg = 'Failed to run "android". Make sure you have the latest Android SDK installed, and that the "android" command (inside the tools/ folder) is added to your PATH.';
-    return tryCommand('android list targets', msg)
-    .then(function(output) {
-        if (!output.match(valid_target)) {
-            return Q.reject(new Error('Please install Android target ' + valid_target.split('-')[1] +
-                ' (the Android newest SDK). Make sure you have the latest Android tools installed as well.' +
-                ' Run "android" from your command-line to install/update any missing SDKs or tools.'));
+        if (androidCmdPath && !hasAndroidHome) {
+            var parentDir = path.dirname(androidCmdPath);
+            if (path.basename(parentDir) == 'tools') {
+                process.env['ANDROID_HOME'] = path.dirname(parentDir);
+                hasAndroidHome = true;
+            }
+        }
+        if (hasAndroidHome && !adbInPath) {
+            process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
         }
-    }).then(function() {
         if (!process.env['ANDROID_HOME']) {
             throw new Error('ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.');
         }
         if (!fs.existsSync(process.env['ANDROID_HOME'])) {
             throw new Error('ANDROID_HOME is set to a non-existant path: ' + process.env['ANDROID_HOME']);
         }
+        // Check that the target sdk level is installed.
+        return module.exports.check_android_target(module.exports.get_target());
     });
-}
+};
+
+module.exports.check_android_target = function(valid_target) {
+    var msg = 'Failed to run "android". Make sure you have the latest Android SDK installed, and that the "android" command (inside the tools/ folder) is added to your PATH.';
+    return tryCommand('android list targets', msg)
+    .then(function(output) {
+        if (!output.match(valid_target)) {
+            throw new Error('Please install Android target "' + valid_target + '".\n' +
+                'Hint: Run "android" from your command-line to open the SDK manager.');
+        }
+    });
+};
 
 // Returns a promise.
 module.exports.run = function() {

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/303b0aac/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 54975fe..89c098a 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -85,9 +85,38 @@ function copyJsAndLibrary(projectPath, shared, projectName) {
     }
 }
 
-function runAndroidUpdate(projectPath, target_api, shared) {
-    var targetFrameworkDir = getFrameworkDir(projectPath, shared);
-    return exec('android update project --subprojects --path "' + projectPath + '" --target ' + target_api + ' --library "' + path.relative(projectPath, targetFrameworkDir) + '"');
+function extractSubProjectPaths(data) {
+    var ret = {};
+    var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg
+    var m;
+    while (m = r.exec(data)) {
+        ret[m[1]] = 1;
+    }
+    return Object.keys(ret);
+}
+
+function writeProjectProperties(projectPath, target_api, shared) {
+    var dstPath = path.join(projectPath, 'project.properties');
+    var templatePath = path.join(ROOT, 'bin', 'templates', 'project', 'project.properties');
+    var srcPath = fs.existsSync(dstPath) ? dstPath : templatePath;
+    var data = fs.readFileSync(srcPath, 'utf8');
+    data = data.replace(/^target=.*/m, 'target=' + target_api);
+    var subProjects = extractSubProjectPaths(data);
+    subProjects = subProjects.filter(function(p) {
+        return !(/^CordovaLib$/m.exec(p) ||
+                 /[\\\/]cordova-android[\\\/]framework$/m.exec(p) ||
+                 /^(\.\.[\\\/])+framework$/m.exec(p)
+                 );
+    });
+    subProjects.unshift(shared ? path.relative(projectPath, path.join(ROOT, 'framework')) : 'CordovaLib');
+    data = data.replace(/^\s*android\.library\.reference\.\d+=.*\n/mg, '');
+    if (!/\n$/.exec(data)) {
+        data += '\n';
+    }
+    for (var i = 0; i < subProjects.length; ++i) {
+        data += 'android.library.reference.' + (i+1) + '=' + subProjects[i] + '\n';
+    }
+    fs.writeFileSync(dstPath, data);
 }
 
 function copyBuildRules(projectPath) {
@@ -280,7 +309,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
             copyBuildRules(project_path);
         });
         // Link it to local android install.
-        return runAndroidUpdate(project_path, target_api, use_shared_project);
+        writeProjectProperties(project_path, target_api);
     }).then(function() {
         console.log('Project successfully created.');
     });
@@ -303,22 +332,20 @@ function extractProjectNameFromManifest(projectPath) {
 }
  
 // Returns a promise.
-exports.updateProject = function(projectPath) {
-    var version = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
+exports.updateProject = function(projectPath, shared) {
+    var newVersion = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
     // Check that requirements are met and proper targets are installed
     return check_reqs.run()
     .then(function() {
         var projectName = extractProjectNameFromManifest(projectPath);
         var target_api = check_reqs.get_target();
-        copyJsAndLibrary(projectPath, false, projectName);
+        copyJsAndLibrary(projectPath, shared, projectName);
         copyScripts(projectPath);
         copyBuildRules(projectPath);
         removeDebuggableFromManifest(projectPath);
-        return runAndroidUpdate(projectPath, target_api, false)
-        .then(function() {
-            console.log('amazon-fireos project is now at version ' + version);
-            console.log('If you updated from a pre-3.2.0 version and use an IDE, we now require that you import the "CordovaLib" library project.');
-        });
+        writeProjectProperties(projectPath, target_api, shared);
+        console.log('amazon-fireos project is now at version ' + newVersion);
+        console.log('If you updated from a pre-3.2.0 version and use an IDE, we now require that you import the "CordovaLib" library project.');
     });
 };
 

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/303b0aac/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 071990f..7830bd6 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -27,9 +27,9 @@ var shell   = require('shelljs'),
     ROOT    = path.join(__dirname, '..', '..');
 var check_reqs = require('./check_reqs');
 
-// Globals
-var build_type,
-    build_method;
+var LOCAL_PROPERTIES_TEMPLATE =
+    '# This file is automatically generated.\n' +
+    '# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n';
 
 function find_files(directory, predicate) {
     if (fs.existsSync(directory)) {
@@ -51,22 +51,25 @@ function hasCustomRules() {
     return fs.existsSync(path.join(ROOT, 'custom_rules.xml'));
 }
 
-// Copy the gradle wrapper files on each build so that:
-// A) We don't require the Android SDK at project creation time, and
-// B) So that they are always up-to-date.
-function copyGradleWrapper() {
-    var projectPath = ROOT;
-    // check_reqs ensures that this is set.
-    var sdkDir = process.env['ANDROID_HOME'];
-    var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
-    if (process.platform == 'win32') {
-        shell.cp('-f', path.join(wrapperDir, 'gradlew.bat'), projectPath);
-    } else {
-        shell.cp('-f', path.join(wrapperDir, 'gradlew'), projectPath);
+function extractProjectNameFromManifest(projectPath) {
+    var manifestPath = path.join(projectPath, 'AndroidManifest.xml');
+    var manifestData = fs.readFileSync(manifestPath, 'utf8');
+    var m = /<activity[\s\S]*?android:name\s*=\s*"(.*?)"/i.exec(manifestData);
+    if (!m) {
+        throw new Error('Could not find activity name in ' + manifestPath);
+    }
+    return m[1];
+}
+
+function extractSubProjectPaths() {
+    var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
+    var ret = {};
+    var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg
+    var m;
+    while (m = r.exec(data)) {
+        ret[m[1]] = 1;
     }
-    shell.rm('-rf', path.join(projectPath, 'gradle', 'wrapper'));
-    shell.mkdir('-p', path.join(projectPath, 'gradle'));
-    shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle'));
+    return Object.keys(ret);
 }
 
 var builders = {
@@ -83,6 +86,23 @@ var builders = {
         prepEnv: function() {
             return check_reqs.check_ant()
             .then(function() {
+                // Copy in build.xml on each build so that:
+                // A) we don't require the Android SDK at project creation time, and
+                // B) we always use the SDK's latest version of it.
+                var sdkDir = process.env['ANDROID_HOME'];
+                var buildTemplate = fs.readFileSync(path.join(sdkDir, 'tools', 'lib', 'build.template'), 'utf8');
+                function writeBuildXml(projectPath) {
+                    var newData = buildTemplate.replace('PROJECT_NAME', extractProjectNameFromManifest(ROOT));
+                    fs.writeFileSync(path.join(projectPath, 'build.xml'), newData);
+                    if (!fs.existsSync(path.join(projectPath, 'local.properties'))) {
+                        fs.writeFileSync(path.join(projectPath, 'local.properties'), LOCAL_PROPERTIES_TEMPLATE);
+                    }
+                }
+                var subProjects = extractSubProjectPaths();
+                writeBuildXml(ROOT);
+                for (var i = 0; i < subProjects.length; ++i) {
+                    writeBuildXml(path.join(ROOT, subProjects[i]));
+                }
             });
         },
 
@@ -156,7 +176,24 @@ var builders = {
         },
 
         prepEnv: function() {
-            return Q();
+            return check_reqs.check_gradle()
+            .then(function() {
+                // Copy the gradle wrapper on each build so that:
+                // A) we don't require the Android SDK at project creation time, and
+                // B) we always use the SDK's latest version of it.
+                var projectPath = ROOT;
+                // check_reqs ensures that this is set.
+                var sdkDir = process.env['ANDROID_HOME'];
+                var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
+                if (process.platform == 'win32') {
+                    shell.cp('-f', path.join(wrapperDir, 'gradlew.bat'), projectPath);
+                } else {
+                    shell.cp('-f', path.join(wrapperDir, 'gradlew'), projectPath);
+                }
+                shell.rm('-rf', path.join(projectPath, 'gradle', 'wrapper'));
+                shell.mkdir('-p', path.join(projectPath, 'gradle'));
+                shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle'));
+            });
         },
 
         /*
@@ -182,8 +219,6 @@ var builders = {
             copyGradleWrapper();
             return Q().then(function() {
                 return spawn(wrapper, args);
-            }).then(function() {
-                return builder.getOutputFiles(build_type);
             });
         },
 
@@ -261,9 +296,11 @@ function parseOpts(options) {
 module.exports.runClean = function(options) {
     var opts = parseOpts(options);
     var builder = builders[opts.buildMethod];
-    return builder.prepEnv(opts.buildType)
+    return builder.prepEnv()
     .then(function() {
         return builder.clean();
+    }).then(function() {
+        shell.rm('-rf', path.join(ROOT, 'out'));
     });
 };
 
@@ -275,10 +312,13 @@ module.exports.run = function(options) {
     var opts = parseOpts(options);
 
     var builder = builders[opts.buildMethod];
-    return builder.prepEnv(opts.buildType)
+    return builder.prepEnv()
     .then(function() {
         return builder.build(opts.buildType);
     }).then(function(apkFiles) {
+        // TODO: Rather than copy apks to out, it might be better to
+        // just write out what the last .apk build was. These files
+        // are used by get_apk().
         var outputDir = path.join(ROOT, 'out');
         shell.mkdir('-p', outputDir);
         for (var i=0; i < apkFiles.length; ++i) {
@@ -299,6 +339,7 @@ module.exports.get_apk = function(build_type) {
         console.error('ERROR : No .apk found in ' + outputDir + ' directory');
         process.exit(2);
     }
+    // TODO: Use build_type here.
     console.log('Using apk: ' + candidates[0]);
     return candidates[0];
 };

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/303b0aac/bin/templates/project/project.properties
----------------------------------------------------------------------
diff --git a/bin/templates/project/project.properties b/bin/templates/project/project.properties
new file mode 100644
index 0000000..ddd3a06
--- /dev/null
+++ b/bin/templates/project/project.properties
@@ -0,0 +1,15 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+android.library.reference.1=CordovaLib
+# Project target.
+target=This_gets_replaced


[20/50] git commit: Adding tests related to 3.5.1

Posted by na...@apache.org.
Adding tests related to 3.5.1


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/0a53a0c7
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/0a53a0c7
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/0a53a0c7

Branch: refs/heads/master
Commit: 0a53a0c7a923152829a0b05fa39228db41305590
Parents: 96c6c52
Author: Joe Bowser <bo...@apache.org>
Authored: Tue Aug 12 11:09:53 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:33:46 2014 -0700

----------------------------------------------------------------------
 .../apache/cordova/test/SabotagedActivity.java  | 73 ++++++++++++++++++++
 .../test/junit/IntentUriOverrideTest.java       | 73 ++++++++++++++++++++
 2 files changed, 146 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0a53a0c7/test/src/org/apache/cordova/test/SabotagedActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/SabotagedActivity.java b/test/src/org/apache/cordova/test/SabotagedActivity.java
new file mode 100644
index 0000000..e1170ba
--- /dev/null
+++ b/test/src/org/apache/cordova/test/SabotagedActivity.java
@@ -0,0 +1,73 @@
+package org.apache.cordova.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.FileOutputStream;
+
+import org.apache.cordova.Config;
+import org.apache.cordova.CordovaActivity;
+
+import android.content.res.AssetManager;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+
+public class SabotagedActivity extends CordovaActivity {
+
+    private String BAD_ASSET = "www/error.html";
+    private String LOG_TAG = "SabotagedActivity";
+    
+    
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);        
+        
+//        copyErrorAsset();
+        super.init();
+        super.loadUrl(Config.getStartUrl());
+    }
+
+    /* 
+     * Sometimes we need to move code around before we can do anything.  This will
+     * copy the bad code out of the assets before we initalize Cordova so that when Cordova actually
+     * initializes, we have something for it to navigate to.
+     */ 
+    
+    private void copyErrorAsset () {
+        AssetManager assetManager = getAssets();
+        String[] files = null;
+        try {
+            files = assetManager.list(BAD_ASSET);
+        } catch (IOException e) {
+            Log.e(LOG_TAG, e.getMessage());
+        }
+
+        for(String filename : files) {
+            InputStream in = null;
+            OutputStream out = null;
+            try {
+              in = assetManager.open(BAD_ASSET);
+              out = new FileOutputStream(Environment.getExternalStorageDirectory().toString() +"/" + filename);
+              copy(in, out);
+              in.close();
+              in = null;
+              out.flush();
+              out.close();
+              out = null;
+            } catch(Exception e) {
+                Log.e("tag", e.getMessage());
+            }
+        }
+    }
+    
+    
+    //Quick and Dirty Copy! 
+    private void copy(InputStream in, OutputStream out) throws IOException {
+        byte[] buffer = new byte[1024];
+        int read;
+        while((read = in.read(buffer)) != -1){
+          out.write(buffer, 0, read);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0a53a0c7/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java b/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
new file mode 100644
index 0000000..aea06af
--- /dev/null
+++ b/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
@@ -0,0 +1,73 @@
+package org.apache.cordova.test.junit;
+
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.test.SabotagedActivity;
+import org.apache.cordova.test.splashscreen;
+
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.AssetManager;
+import android.test.ActivityInstrumentationTestCase2;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+
+
+public class IntentUriOverrideTest extends ActivityInstrumentationTestCase2<SabotagedActivity> {
+    
+    private int TIMEOUT = 1000;
+    
+    private SabotagedActivity testActivity;
+    private FrameLayout containerView;
+    private LinearLayout innerContainer;
+    private CordovaWebView testView;
+    private Instrumentation mInstr;
+    private String BAD_URL = "file:///sdcard/download/wl-exploit.htm";
+
+
+    public IntentUriOverrideTest()
+    {
+        super("org.apache.cordova.test",SabotagedActivity.class);
+    }
+    
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+        mInstr = this.getInstrumentation();
+        Intent badIntent = new Intent();
+        badIntent.setClassName("org.apache.cordova.test", "org.apache.cordova.test.SabotagedActivity");
+        badIntent.putExtra("url", BAD_URL);
+        setActivityIntent(badIntent);
+        testActivity = getActivity();
+        containerView = (FrameLayout) testActivity.findViewById(android.R.id.content);
+        innerContainer = (LinearLayout) containerView.getChildAt(0);
+        testView = (CordovaWebView) innerContainer.getChildAt(0);
+    }
+    
+    
+    public void testPreconditions(){
+        assertNotNull(innerContainer);
+        assertNotNull(testView);
+    }
+    
+    public void testChangeStartUrl() throws Throwable
+    {
+        runTestOnUiThread(new Runnable() {
+            public void run()
+            {
+                boolean isBadUrl = testView.getUrl().equals(BAD_URL);
+                assertFalse(isBadUrl);
+            }
+        });
+    }
+
+    private void sleep() {
+        try {
+          Thread.sleep(TIMEOUT);
+        } catch (InterruptedException e) {
+          fail("Unexpected Timeout");
+        }
+    }
+    
+
+}


[02/50] git commit: Displaying error when regex does not match.

Posted by na...@apache.org.
Displaying error when regex does not match.

On my ubuntu when `android` is not found typical output is:

```
   /bin/sh: 1: android: not found
```
close #104


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/6e830fcc
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/6e830fcc
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/6e830fcc

Branch: refs/heads/master
Commit: 6e830fcc16d21f7dd0a2468d74a9e908ae4b4017
Parents: b83d7ab
Author: Ankit Jain <an...@gmail.com>
Authored: Mon Jun 30 23:59:53 2014 +0530
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:06:02 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/6e830fcc/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index b15a9b6..397283e 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -85,7 +85,7 @@ module.exports.check_android = function() {
         if (stderr.match(/command\snot\sfound/)) {
             return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
         } else {
-            return Q.reject(new Error('An error occurred while listing Android targets'));
+            return Q.reject(new Error('An error occurred while listing Android targets. Error: ' + stderr ));
         }
     });
 }


[10/50] git commit: CB-7159 Set background color of webView as well as its parent

Posted by na...@apache.org.
CB-7159 Set background color of webView as well as its parent

github: close #109, close #110


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/b535a74b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/b535a74b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/b535a74b

Branch: refs/heads/master
Commit: b535a74b8b6cdcbe94baeb59f1e677de01347e03
Parents: 519cd39
Author: Jan Velecký <VV...@seznam.cz>
Authored: Mon Jul 21 01:04:52 2014 +0200
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:11:16 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaActivity.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/b535a74b/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 eebf8f6..7fdab2b 100755
--- a/framework/src/org/apache/cordova/CordovaActivity.java
+++ b/framework/src/org/apache/cordova/CordovaActivity.java
@@ -265,6 +265,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
         // TODO: Setting this on the appView causes it to show when <html style="opacity:0">.
         int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
         root.setBackgroundColor(backgroundColor);
+        appView.setBackgroundColor(backgroundColor);
     }
 
     /**


[24/50] git commit: CB-7321 Don't require ant for create script

Posted by na...@apache.org.
CB-7321 Don't require ant for create script


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/99283e6b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/99283e6b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/99283e6b

Branch: refs/heads/master
Commit: 99283e6b88a5aa06b71265b6898766d7dadba4e0
Parents: 0053d3d
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Aug 15 13:58:53 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:37:43 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js              | 4 ++--
 bin/templates/cordova/lib/build.js | 6 +++++-
 bin/templates/cordova/lib/clean.js | 6 +++++-
 3 files changed, 12 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/99283e6b/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 6236836..dbbb353 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -55,7 +55,7 @@ module.exports.get_target = function() {
     }
 }
 
-// Returns a promise.
+// Returns a promise. Called only by build and clean commands.
 module.exports.check_ant = function() {
     return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');
 }
@@ -123,5 +123,5 @@ module.exports.check_android = function() {
 
 // Returns a promise.
 module.exports.run = function() {
-    return Q.all([this.check_ant(), this.check_java(), this.check_android()]);
+    return Q.all([this.check_java(), this.check_android()]);
 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/99283e6b/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 6336ecf..5134f41 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -25,6 +25,7 @@ var shell   = require('shelljs'),
     path    = require('path'),
     fs      = require('fs'),
     ROOT    = path.join(__dirname, '..', '..');
+var check_reqs = require('./check_reqs');
 
 
 function hasCustomRules() {
@@ -60,9 +61,12 @@ module.exports.run = function(build_type) {
             return Q.reject('Build option \'' + build_type + '\' not recognized.');
     }
     // Without our custom_rules.xml, we need to clean before building.
-    var ret = Q();
+    var ret;
     if (!hasCustomRules()) {
+        // clean will call check_ant() for us.
         ret = require('./clean').run();
+    } else {
+        ret = check_reqs.check_ant();
     }
     return ret.then(function() {
         return spawn('ant', args);

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/99283e6b/bin/templates/cordova/lib/clean.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/clean.js b/bin/templates/cordova/lib/clean.js
index 0a2e0ce..f215829 100644
--- a/bin/templates/cordova/lib/clean.js
+++ b/bin/templates/cordova/lib/clean.js
@@ -22,6 +22,7 @@
 var build = require('./build'),
     spawn = require('./spawn'),
     path  = require('path');
+var check_reqs = require('./check_reqs');
 
 /*
  * Cleans the project using ant
@@ -29,7 +30,10 @@ var build = require('./build'),
  */
 module.exports.run = function() {
     var args = build.getAntArgs('clean');
-    return spawn('ant', args);
+    return check_reqs.check_ant()
+    .then(function() {
+        return spawn('ant', args);
+    });
 }
 
 module.exports.help = function() {


[26/50] git commit: CB-3445: Add option to build and install with gradle

Posted by na...@apache.org.
CB-3445: Add option to build and install with gradle

This gives build/cordova two new command-line arguments: --ant and
--gradle, and will select the build type from those. As a fallback
for the Cordova CLI, the environment variable ANDROID_BUILD can also be
used, set to either "ant" or "gradle".

The default is currently "ant", but it is intended for this to change in
the future.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/7a0eb60a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/7a0eb60a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/7a0eb60a

Branch: refs/heads/master
Commit: 7a0eb60a72899977cdc3ac64dc0370192f8efcc5
Parents: 41cb49a
Author: Ian Clelland <ic...@chromium.org>
Authored: Mon Aug 18 09:44:00 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:39:27 2014 -0700

----------------------------------------------------------------------
 bin/templates/cordova/build        |  10 +-
 bin/templates/cordova/lib/build.js | 231 ++++++++++++++++++++++++--------
 2 files changed, 184 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/7a0eb60a/bin/templates/cordova/build
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/build b/bin/templates/cordova/build
index 2d58901..367bf7d 100755
--- a/bin/templates/cordova/build
+++ b/bin/templates/cordova/build
@@ -24,12 +24,16 @@ var build = require('./lib/build'),
     args  = process.argv;
 
 // Support basic help commands
-if(args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
-                    args[2] == 'help' || args[2] == '-help' || args[2] == '/help') {
+if(args[2] == '--help' ||
+   args[2] == '/?' ||
+   args[2] == '-h' ||
+   args[2] == 'help' ||
+   args[2] == '-help' ||
+   args[2] == '/help') {
     build.help();
 } else {
     reqs.run().done(function() {
-        return build.run(args[2]);
+        return build.run.call(build.run, args.slice(2));
     }, function(err) {
         console.error(err);
         process.exit(2);

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/7a0eb60a/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 5134f41..3d0ae87 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -27,39 +27,164 @@ var shell   = require('shelljs'),
     ROOT    = path.join(__dirname, '..', '..');
 var check_reqs = require('./check_reqs');
 
+// Globals
+var build_type,
+    build_method;
+
+function find_files(directory, predicate) {
+    if (fs.existsSync(directory)) {
+        var candidates = fs.readdirSync(directory).filter(predicate).map(function(p) {
+            p = path.join(directory, p);
+            return { p: p, t: fs.statSync(p).mtime };
+        }).sort(function(a,b) {
+            return a.t > b.t ? -1 :
+                   a.t < b.t ? 1 : 0;
+        }).map(function(p) { return p.p; });
+        return candidates;
+    } else {
+        console.error('ERROR : unable to find project ' + directory + ' directory, could not locate .apk');
+        process.exit(2);
+    }
+}
 
 function hasCustomRules() {
     return fs.existsSync(path.join(ROOT, 'custom_rules.xml'));
 }
-module.exports.getAntArgs = function(cmd) {
-    var args = [cmd, '-f', path.join(ROOT, 'build.xml')];
-    // custom_rules.xml is required for incremental builds.
-    if (hasCustomRules()) {
-        args.push('-Dout.dir=ant-build', '-Dgen.absolute.dir=ant-gen');
+
+module.exports.builders = {
+    ant: {
+        getArgs: function(cmd) {
+            var args = [cmd, '-f', path.join(ROOT, 'build.xml')];
+            // custom_rules.xml is required for incremental builds.
+            if (hasCustomRules()) {
+                args.push('-Dout.dir=ant-build', '-Dgen.absolute.dir=ant-gen');
+            }
+            try {
+              // Specify sdk dir in case local properties are missing
+              args.push('-Dsdk.dir='+path.join(which.sync('android'), '../..'));
+            } catch(e) {
+              // Can't find android; don't push arg: assume all is okay
+            }
+            return args;
+        },
+
+        /*
+         * Builds the project with ant.
+         * Returns a promise.
+         */
+        build: function(build_type) {
+            var builder = this;
+            var args = builder.getArgs(build_type == "debug" ? 'debug' : 'release');
+            return Q().then(function() {
+                return spawn('ant', args);
+            }).then(function() {
+                return builder.getOutputFiles();
+            });
+        },
+
+        // Find the recently-generated output APK files
+        // Ant only generates one output file; return it.
+        getOutputFiles: function() {
+            var binDir;
+            if(hasCustomRules()) {
+                binDir = path.join(ROOT, 'ant-build');
+            } else {
+                binDir = path.join(ROOT, 'bin');
+            }
+            var candidates = find_files(binDir, function(candidate) { return path.extname(candidate) == '.apk'; });
+            if (candidates.length === 0) {
+                console.error('ERROR : No .apk found in ' + binDir + ' directory');
+                process.exit(2);
+            }
+            console.log('Using apk: ' + candidates[0]);
+            return [candidates[0]];
+        }
+    },
+    gradle: {
+        getArgs: function(cmd) {
+            var args = [cmd, '-b', path.join(ROOT, 'build.gradle')];
+            return args;
+        },
+
+        /*
+         * Builds the project with gradle.
+         * Returns a promise.
+         */
+        build: function(build_type) {
+            var builder = this;
+            var wrapper = path.join(ROOT, 'gradlew');
+            var args = builder.getArgs('build');
+            return Q().then(function() {
+                return spawn(wrapper, args);
+            }).then(function() {
+                return builder.getOutputFiles(build_type);
+            });
+        },
+
+        // Find the recently-generated output APK files
+        // Gradle can generate multiple output files; return all of them.
+        getOutputFiles: function(build_type) {
+            var binDir = path.join(ROOT, 'build', 'apk');
+            var candidates = find_files(binDir, function(candidate) {
+                // Need to choose between release and debug .apk.
+                if (build_type === 'debug') {
+                    return (path.extname(candidate) == '.apk' && candidate.indexOf('-debug-') >= 0);
+                }
+                if (build_type === 'release') {
+                    return (path.extname(candidate) == '.apk' && candidate.indexOf('-release-') >= 0);
+                }
+                return path.extname(candidate) == '.apk';
+            });
+            return candidates;
+        }
     }
-    return args;
 };
 
 /*
- * Builds the project with ant.
+ * Builds the project with the specifed options
  * Returns a promise.
  */
-module.exports.run = function(build_type) {
-    //default build type
-    build_type = typeof build_type !== 'undefined' ? build_type : "--debug";
-    var args = module.exports.getAntArgs('debug');
-    switch(build_type) {
-        case '--debug' :
-            break;
-        case '--release' :
-            args[0] = 'release';
-            break;
-        case '--nobuild' :
-            console.log('Skipping build...');
-            return Q();
-        default :
-            return Q.reject('Build option \'' + build_type + '\' not recognized.');
+module.exports.run = function(options) {
+
+    // Backwards-compatibility: Allow a single string argument
+    if (typeof options == "string") options = [options];
+
+    // Iterate through command line options
+    for (var i=0; options && (i < options.length); ++i) {
+        if (options[i].substring && options[i].substring(0,2) == "--") {
+            var option = options[i].substring(2);
+            switch(option) {
+                case 'debug':
+                case 'release':
+                    if (build_type) {
+                        return Q.reject('Multiple build types (' + build_type + ' and ' + option + ') specified.');
+                    }
+                    build_type = option;
+                    break;
+                case 'ant':
+                case 'gradle':
+                    if (build_method) {
+                        return Q.reject('Multiple build methods (' + build_method + ' and ' + option + ') specified.');
+                    }
+                    build_method = option;
+                    break;
+                case 'nobuild' :
+                    console.log('Skipping build...');
+                    return Q();
+                default :
+                    return Q.reject('Build option \'' + options[i] + '\' not recognized.');
+            }
+        } else {
+            return Q.reject('Build option \'' + options[i] + '\' not recognized.');
+        }
     }
+    // Defaults
+    build_type = build_type || "debug";
+    build_method = build_method || process.env.ANDROID_BUILD || "ant";
+
+    // Get the builder
+    var builder = module.exports.builders[build_method];
+
     // Without our custom_rules.xml, we need to clean before building.
     var ret;
     if (!hasCustomRules()) {
@@ -68,50 +193,48 @@ module.exports.run = function(build_type) {
     } else {
         ret = check_reqs.check_ant();
     }
+
+    // Return a promise for the actual build
     return ret.then(function() {
-        return spawn('ant', args);
+        return builder.build.call(builder, build_type);
+    }).then(function(apkFiles) {
+        var outputDir = path.join(ROOT, 'out');
+        try {
+            fs.mkdirSync(outputDir);
+        } catch (e) {
+            if (e.code != "EEXIST") {
+                throw e;
+            }
+        }
+        for (var i=0; i < apkFiles.length; ++i) {
+            shell.cp('-f', apkFiles[i], path.join(outputDir, path.basename(apkFiles[i])));
+        }
     });
-}
+};
 
 /*
  * Gets the path to the apk file, if not such file exists then
  * the script will error out. (should we error or just return undefined?)
+ * This is called by the run script to install the apk to the device
  */
-module.exports.get_apk = function() {
-    var binDir = '';
-    if(!hasCustomRules()) {
-        binDir = path.join(ROOT, 'bin');
-    } else {
-        binDir = path.join(ROOT, 'ant-build');
-    }
-    if (fs.existsSync(binDir)) {
-        var candidates = fs.readdirSync(binDir).filter(function(p) {
-            // Need to choose between release and debug .apk.
-            return path.extname(p) == '.apk';
-        }).map(function(p) {
-            p = path.join(binDir, p);
-            return { p: p, t: fs.statSync(p).mtime };
-        }).sort(function(a,b) {
-            return a.t > b.t ? -1 :
-                   a.t < b.t ? 1 : 0;
-        });
-        if (candidates.length === 0) {
-            console.error('ERROR : No .apk found in ' + binDir + ' directory');
-            process.exit(2);
-        }
-        console.log('Using apk: ' + candidates[0].p);
-        return candidates[0].p;
-    } else {
-        console.error('ERROR : unable to find project ' + binDir + ' directory, could not locate .apk');
+module.exports.get_apk = function(build_type) {
+    var outputDir = path.join(ROOT, 'out');
+    var candidates = find_files(outputDir, function() { return true; });
+    if (candidates.length === 0) {
+        console.error('ERROR : No .apk found in ' + outputDir + ' directory');
         process.exit(2);
     }
-}
+    console.log('Using apk: ' + candidates[0]);
+    return candidates[0];
+};
 
 module.exports.help = function() {
     console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'cordova', 'build')) + ' [build_type]');
     console.log('Build Types : ');
-    console.log('    \'--debug\': Default build, will build project in using ant debug');
-    console.log('    \'--release\': will build project using ant release');
+    console.log('    \'--debug\': Default build, will build project in debug mode');
+    console.log('    \'--release\': will build project for release');
+    console.log('    \'--ant\': Default build, will build project with ant');
+    console.log('    \'--gradle\': will build project with gradle');
     console.log('    \'--nobuild\': will skip build process (can be used with run command)');
     process.exit(0);
-}
+};


[18/50] git commit: CB-7265 Fix crash when navigating to custom protocol (introduced in 3.5.1)

Posted by na...@apache.org.
CB-7265 Fix crash when navigating to custom protocol (introduced in 3.5.1)

Github: close #111


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/cdcf5f3f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/cdcf5f3f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/cdcf5f3f

Branch: refs/heads/master
Commit: cdcf5f3f1eab216568415ce2d4340b12c508177d
Parents: e8868eb
Author: Martin Bektchiev <ma...@telerik.com>
Authored: Wed Aug 6 15:24:51 2014 +0300
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:32:52 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaUriHelper.java | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/cdcf5f3f/framework/src/org/apache/cordova/CordovaUriHelper.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaUriHelper.java b/framework/src/org/apache/cordova/CordovaUriHelper.java
index f1c892c..66818cb 100644
--- a/framework/src/org/apache/cordova/CordovaUriHelper.java
+++ b/framework/src/org/apache/cordova/CordovaUriHelper.java
@@ -19,9 +19,11 @@
 
 package org.apache.cordova;
 
+import android.annotation.TargetApi;
 import android.content.Intent;
 import android.net.Uri;
 import com.amazon.android.webkit.AmazonWebView;
+import android.os.Build;
 
 class CordovaUriHelper {
     
@@ -44,8 +46,9 @@ class CordovaUriHelper {
      * @param url           The url to be loaded.
      * @return              true to override, false for default behavior
      */
+    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
     boolean shouldOverrideUrlLoading(AmazonWebView view, String url) {
-        // The WebView should support http and https when going on the Internet
+         // The WebView should support http and https when going on the Internet
         if(url.startsWith("http:") || url.startsWith("https:"))
         {
             // We only need to whitelist sites on the Internet! 
@@ -71,7 +74,9 @@ class CordovaUriHelper {
                 intent.setData(Uri.parse(url));
                 intent.addCategory(Intent.CATEGORY_BROWSABLE);
                 intent.setComponent(null);
-                intent.setSelector(null);
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+                    intent.setSelector(null);
+                }
                 this.cordova.getActivity().startActivity(intent);
             } catch (android.content.ActivityNotFoundException e) {
                 LOG.e(TAG, "Error loading url " + url, e);


[25/50] git commit: CB-3445: Add an initial set of Gradle build scripts

Posted by na...@apache.org.
CB-3445: Add an initial set of Gradle build scripts

These scripts will build an android project, in debug and release mode.
They also support additional library projects, such as Crosswalk, being
added to libraries.gradle (and settings.gradle). A flag can be set in
libraries.gradle to enable multi-architecture builds.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/41cb49ab
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/41cb49ab
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/41cb49ab

Branch: refs/heads/master
Commit: 41cb49ab6d0d038ccb0951342fbc5a15a0ee1fab
Parents: 99283e6
Author: Ian Clelland <ic...@chromium.org>
Authored: Mon Aug 18 09:40:33 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:39:00 2014 -0700

----------------------------------------------------------------------
 bin/lib/create.js                               |  15 +-
 bin/templates/project/build.gradle              |  81 +++++++++
 .../gradle/wrapper/gradle-wrapper.properties    |   6 +
 bin/templates/project/gradlew                   | 164 +++++++++++++++++++
 bin/templates/project/gradlew.bat               |  90 ++++++++++
 bin/templates/project/libraries.gradle          |   7 +
 bin/templates/project/settings.gradle           |   1 +
 framework/build.gradle                          |  33 ++++
 8 files changed, 395 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index d372fab..2274fff 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -72,6 +72,7 @@ function copyJsAndLibrary(projectPath, shared, projectName) {
         shell.mkdir('-p', path.join(ROOT, 'framework', 'libs'));
         shell.cp('-f', path.join(ROOT, 'framework', 'AndroidManifest.xml'), nestedCordovaLibPath);
         shell.cp('-f', path.join(ROOT, 'framework', 'project.properties'), nestedCordovaLibPath);
+        shell.cp('-f', path.join(ROOT, 'framework', 'build.gradle'), nestedCordovaLibPath);
         shell.cp('-r', path.join(ROOT, 'framework', 'src'), nestedCordovaLibPath);
         shell.cp('-r', path.join(ROOT, 'framework', 'libs'), nestedCordovaLibPath);
         // Create an eclipse project file and set the name of it to something unique.
@@ -91,7 +92,9 @@ function runAndroidUpdate(projectPath, target_api, shared) {
 
 function copyAntRules(projectPath) {
     var srcDir = path.join(ROOT, 'bin', 'templates', 'project');
-    shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath);
+    if (fs.existsSync(path.join(srcDir, 'custom_rules.xml'))) {
+        shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath);
+    }
 }
 
 function copyScripts(projectPath) {
@@ -244,7 +247,15 @@ exports.createProject = function(project_path, package_name, project_name, proje
         setShellFatal(true, function() {
             // copy project template
             shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
-            shell.cp('-r', path.join(project_template_dir, 'res'), project_path);
+            shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
+
+            shell.cp('-f', path.join(project_template_dir, 'build.gradle'), project_path);
+            shell.cp('-f', path.join(project_template_dir, 'libraries.gradle'), project_path);
+            shell.cp('-f', path.join(project_template_dir, 'settings.gradle'), project_path);
+            shell.cp('-f', path.join(project_template_dir, 'gradlew'), project_path);
+            shell.cp('-f', path.join(project_template_dir, 'gradlew.bat'), project_path);
+            shell.cp('-r', path.join(project_template_dir, 'gradle'), project_path);
+
             // Manually create directories that would be empty within the template (since git doesn't track directories).
             shell.mkdir(path.join(project_path, 'libs'));
             // Add in the proper eclipse project file.

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/build.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle
new file mode 100644
index 0000000..4b34e48
--- /dev/null
+++ b/bin/templates/project/build.gradle
@@ -0,0 +1,81 @@
+import java.util.regex.Pattern
+
+apply plugin: 'android'
+
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.10.+'
+    }
+}
+
+ext.multiarch=false
+
+dependencies {
+    compile project(':CordovaLib')
+}
+apply from: 'libraries.gradle'
+
+android {
+    sourceSets {
+        main {
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            resources.srcDirs = ['src']
+            aidl.srcDirs = ['src']
+            renderscript.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['assets']
+        }
+    }
+
+    defaultConfig {
+        versionCode Integer.parseInt("" + getVersionCodeFromManifest() + "0")
+    }
+
+    compileSdkVersion 19
+    buildToolsVersion "19.0.0"
+
+    if (multiarch) {
+        productFlavors {
+            armv7 {
+                versionCode defaultConfig.versionCode + 2
+                ndk {
+                    abiFilters "armeabi-v7a", ""
+                }
+            }
+            x86 {
+                versionCode defaultConfig.versionCode + 4
+                ndk {
+                    abiFilters "x86", ""
+                }
+            }
+            all {
+                ndk {
+                    abiFilters "all", ""
+                }
+            }
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+}
+
+task wrapper(type: Wrapper) {
+    gradleVersion = '1.12'
+}
+
+def getVersionCodeFromManifest() {
+    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
+    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
+    def matcher = pattern.matcher(manifestFile.getText())
+    matcher.find()
+    return Integer.parseInt(matcher.group(1))
+}

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradle/wrapper/gradle-wrapper.properties b/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..497dc9b
--- /dev/null
+++ b/bin/templates/project/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 13 09:52:43 EDT 2014
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-1.12-bin.zip

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/gradlew
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradlew b/bin/templates/project/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/bin/templates/project/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/gradlew.bat
----------------------------------------------------------------------
diff --git a/bin/templates/project/gradlew.bat b/bin/templates/project/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/bin/templates/project/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/libraries.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/libraries.gradle b/bin/templates/project/libraries.gradle
new file mode 100644
index 0000000..f497543
--- /dev/null
+++ b/bin/templates/project/libraries.gradle
@@ -0,0 +1,7 @@
+dependencies {
+// This file contains no plugins by default.
+// To add a third-party library project, add a line to this file like
+//    compile project(':library_dir_name')
+}
+// If multiple ndk architectures are provided, uncomment this line
+//ext.multiarch=true

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/bin/templates/project/settings.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/settings.gradle b/bin/templates/project/settings.gradle
new file mode 100644
index 0000000..b938ccc
--- /dev/null
+++ b/bin/templates/project/settings.gradle
@@ -0,0 +1 @@
+include ':CordovaLib', ':'

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/41cb49ab/framework/build.gradle
----------------------------------------------------------------------
diff --git a/framework/build.gradle b/framework/build.gradle
new file mode 100644
index 0000000..82c1ac2
--- /dev/null
+++ b/framework/build.gradle
@@ -0,0 +1,33 @@
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:0.10.+'
+    }
+}
+
+apply plugin: 'android-library'
+
+android {
+    compileSdkVersion 19
+    buildToolsVersion "19.0.0"
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+    sourceSets {
+        main {
+            manifest.srcFile 'AndroidManifest.xml'
+            java.srcDirs = ['src']
+            resources.srcDirs = ['src']
+            aidl.srcDirs = ['src']
+            renderscript.srcDirs = ['src']
+            res.srcDirs = ['res']
+            assets.srcDirs = ['assets']
+        }
+    }
+}


[16/50] git commit: Handle unsupported protocol errors in webview better

Posted by na...@apache.org.
Handle unsupported protocol errors in webview better


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/48ba0036
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/48ba0036
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/48ba0036

Branch: refs/heads/master
Commit: 48ba0036315bea01730e771ee3600e0dc5b6e65b
Parents: 5843c7e
Author: Ian Clelland <ic...@chromium.org>
Authored: Mon Jul 21 09:20:49 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:30:52 2014 -0700

----------------------------------------------------------------------
 .../src/org/apache/cordova/CordovaWebViewClient.java  | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/48ba0036/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 082ea25..0af891a 100755
--- a/framework/src/org/apache/cordova/CordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java
@@ -232,7 +232,19 @@ public class CordovaWebViewClient extends AmazonWebViewClient {
         // Clear timeout flag
         this.appView.loadUrlTimeout++;
 
-        // Handle error
+        // If this is a "Protocol Not Supported" error, then revert to the previous
+        // page. If there was no previous page, then punt. The application's config
+        // is likely incorrect (start page set to sms: or something like that)
+        if (errorCode == WebViewClient.ERROR_UNSUPPORTED_SCHEME) {
+            if (view.canGoBack()) {
+                view.goBack();
+                return;
+            } else {
+                super.onReceivedError(view, errorCode, description, failingUrl);
+            }
+        }
+
+        // Handle other errors by passing them to the webview in JS
         JSONObject data = new JSONObject();
         try {
             data.put("errorCode", errorCode);


[27/50] git commit: CB-3445: Add which to checked-in node_modules

Posted by na...@apache.org.
CB-3445: Add which to checked-in node_modules


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/f40e8e14
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/f40e8e14
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/f40e8e14

Branch: refs/heads/master
Commit: f40e8e14d8df03337e3293882fde7ddc09ea3905
Parents: 7a0eb60
Author: Ian Clelland <ic...@chromium.org>
Authored: Fri Aug 15 13:35:50 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:39:44 2014 -0700

----------------------------------------------------------------------
 bin/node_modules/which/LICENSE      |  23 +++++++
 bin/node_modules/which/README.md    |   5 ++
 bin/node_modules/which/bin/which    |  14 +++++
 bin/node_modules/which/package.json |  31 +++++++++
 bin/node_modules/which/which.js     | 104 +++++++++++++++++++++++++++++++
 5 files changed, 177 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f40e8e14/bin/node_modules/which/LICENSE
----------------------------------------------------------------------
diff --git a/bin/node_modules/which/LICENSE b/bin/node_modules/which/LICENSE
new file mode 100644
index 0000000..05a4010
--- /dev/null
+++ b/bin/node_modules/which/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f40e8e14/bin/node_modules/which/README.md
----------------------------------------------------------------------
diff --git a/bin/node_modules/which/README.md b/bin/node_modules/which/README.md
new file mode 100644
index 0000000..ff1eb53
--- /dev/null
+++ b/bin/node_modules/which/README.md
@@ -0,0 +1,5 @@
+The "which" util from npm's guts.
+
+Finds the first instance of a specified executable in the PATH
+environment variable.  Does not cache the results, so `hash -r` is not
+needed when the PATH changes.

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f40e8e14/bin/node_modules/which/bin/which
----------------------------------------------------------------------
diff --git a/bin/node_modules/which/bin/which b/bin/node_modules/which/bin/which
new file mode 100755
index 0000000..8432ce2
--- /dev/null
+++ b/bin/node_modules/which/bin/which
@@ -0,0 +1,14 @@
+#!/usr/bin/env node
+var which = require("../")
+if (process.argv.length < 3) {
+  console.error("Usage: which <thing>")
+  process.exit(1)
+}
+
+which(process.argv[2], function (er, thing) {
+  if (er) {
+    console.error(er.message)
+    process.exit(er.errno || 127)
+  }
+  console.log(thing)
+})

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f40e8e14/bin/node_modules/which/package.json
----------------------------------------------------------------------
diff --git a/bin/node_modules/which/package.json b/bin/node_modules/which/package.json
new file mode 100644
index 0000000..6c5ccb3
--- /dev/null
+++ b/bin/node_modules/which/package.json
@@ -0,0 +1,31 @@
+{
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me"
+  },
+  "name": "which",
+  "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
+  "version": "1.0.5",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/node-which.git"
+  },
+  "main": "which.js",
+  "bin": {
+    "which": "./bin/which"
+  },
+  "engines": {
+    "node": "*"
+  },
+  "dependencies": {},
+  "devDependencies": {},
+  "readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable.  Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n",
+  "readmeFilename": "README.md",
+  "bugs": {
+    "url": "https://github.com/isaacs/node-which/issues"
+  },
+  "homepage": "https://github.com/isaacs/node-which",
+  "_id": "which@1.0.5",
+  "_from": "which@"
+}

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/f40e8e14/bin/node_modules/which/which.js
----------------------------------------------------------------------
diff --git a/bin/node_modules/which/which.js b/bin/node_modules/which/which.js
new file mode 100644
index 0000000..db7e8f7
--- /dev/null
+++ b/bin/node_modules/which/which.js
@@ -0,0 +1,104 @@
+module.exports = which
+which.sync = whichSync
+
+var path = require("path")
+  , fs
+  , COLON = process.platform === "win32" ? ";" : ":"
+  , isExe
+
+try {
+  fs = require("graceful-fs")
+} catch (ex) {
+  fs = require("fs")
+}
+
+if (process.platform == "win32") {
+  // On windows, there is no good way to check that a file is executable
+  isExe = function isExe () { return true }
+} else {
+  isExe = function isExe (mod, uid, gid) {
+    //console.error(mod, uid, gid);
+    //console.error("isExe?", (mod & 0111).toString(8))
+    var ret = (mod & 0001)
+        || (mod & 0010) && process.getgid && gid === process.getgid()
+        || (mod & 0100) && process.getuid && uid === process.getuid()
+    //console.error("isExe?", ret)
+    return ret
+  }
+}
+
+
+
+function which (cmd, cb) {
+  if (isAbsolute(cmd)) return cb(null, cmd)
+  var pathEnv = (process.env.PATH || "").split(COLON)
+    , pathExt = [""]
+  if (process.platform === "win32") {
+    pathEnv.push(process.cwd())
+    pathExt = (process.env.PATHEXT || ".EXE").split(COLON)
+    if (cmd.indexOf(".") !== -1) pathExt.unshift("")
+  }
+  //console.error("pathEnv", pathEnv)
+  ;(function F (i, l) {
+    if (i === l) return cb(new Error("not found: "+cmd))
+    var p = path.resolve(pathEnv[i], cmd)
+    ;(function E (ii, ll) {
+      if (ii === ll) return F(i + 1, l)
+      var ext = pathExt[ii]
+      //console.error(p + ext)
+      fs.stat(p + ext, function (er, stat) {
+        if (!er &&
+            stat &&
+            stat.isFile() &&
+            isExe(stat.mode, stat.uid, stat.gid)) {
+          //console.error("yes, exe!", p + ext)
+          return cb(null, p + ext)
+        }
+        return E(ii + 1, ll)
+      })
+    })(0, pathExt.length)
+  })(0, pathEnv.length)
+}
+
+function whichSync (cmd) {
+  if (isAbsolute(cmd)) return cmd
+  var pathEnv = (process.env.PATH || "").split(COLON)
+    , pathExt = [""]
+  if (process.platform === "win32") {
+    pathEnv.push(process.cwd())
+    pathExt = (process.env.PATHEXT || ".EXE").split(COLON)
+    if (cmd.indexOf(".") !== -1) pathExt.unshift("")
+  }
+  for (var i = 0, l = pathEnv.length; i < l; i ++) {
+    var p = path.join(pathEnv[i], cmd)
+    for (var j = 0, ll = pathExt.length; j < ll; j ++) {
+      var cur = p + pathExt[j]
+      var stat
+      try { stat = fs.statSync(cur) } catch (ex) {}
+      if (stat &&
+          stat.isFile() &&
+          isExe(stat.mode, stat.uid, stat.gid)) return cur
+    }
+  }
+  throw new Error("not found: "+cmd)
+}
+
+var isAbsolute = process.platform === "win32" ? absWin : absUnix
+
+function absWin (p) {
+  if (absUnix(p)) return true
+  // pull off the device/UNC bit from a windows path.
+  // from node's lib/path.js
+  var splitDeviceRe =
+        /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/
+    , result = splitDeviceRe.exec(p)
+    , device = result[1] || ''
+    , isUnc = device && device.charAt(1) !== ':'
+    , isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
+
+  return isAbsolute
+}
+
+function absUnix (p) {
+  return p.charAt(0) === "/" || p === ""
+}


[31/50] git commit: CB-3445 Add .gradle template files for "update" as well as "create"

Posted by na...@apache.org.
CB-3445 Add .gradle template files for "update" as well as "create"


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/94650c0b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/94650c0b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/94650c0b

Branch: refs/heads/master
Commit: 94650c0bd629deac69f4a558b4cc3a71317794cf
Parents: cef7168
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 14:50:27 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:41:25 2014 -0700

----------------------------------------------------------------------
 bin/lib/create.js | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/94650c0b/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 297b356..cc36c67 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -90,11 +90,13 @@ function runAndroidUpdate(projectPath, target_api, shared) {
     return exec('android update project --subprojects --path "' + projectPath + '" --target ' + target_api + ' --library "' + path.relative(projectPath, targetFrameworkDir) + '"');
 }
 
-function copyAntRules(projectPath) {
+function copyBuildRules(projectPath) {
     var srcDir = path.join(ROOT, 'bin', 'templates', 'project');
-    if (fs.existsSync(path.join(srcDir, 'custom_rules.xml'))) {
-        shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath);
-    }
+    shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath);
+
+    shell.cp('-f', path.join(srcDir, 'build.gradle'), projectPath);
+    shell.cp('-f', path.join(srcDir, 'libraries.gradle'), projectPath);
+    shell.cp('-f', path.join(srcDir, 'settings.gradle'), projectPath);
 }
 
 function copyScripts(projectPath) {
@@ -292,7 +294,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
             shell.sed('-i', /__PACKAGE__/, package_name, manifest_path);
             shell.sed('-i', /__APILEVEL__/, target_api.split('-')[1], manifest_path);
             copyScripts(project_path);
-            copyAntRules(project_path);
+            copyBuildRules(project_path);
         });
         // Link it to local android install.
         return runAndroidUpdate(project_path, target_api, use_shared_project);
@@ -327,7 +329,7 @@ exports.updateProject = function(projectPath) {
         var target_api = check_reqs.get_target();
         copyJsAndLibrary(projectPath, false, projectName);
         copyScripts(projectPath);
-        copyAntRules(projectPath);
+        copyBuildRules(projectPath);
         removeDebuggableFromManifest(projectPath);
         return runAndroidUpdate(projectPath, target_api, false)
         .then(function() {


[08/50] git commit: Undeprecate some just-deprecated symbols in PluginManager.

Posted by na...@apache.org.
Undeprecate some just-deprecated symbols in PluginManager.

Forgot about custom engines again :(


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/5a610097
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/5a610097
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/5a610097

Branch: refs/heads/master
Commit: 5a6100979f56ac68274471a88531599c583c4b0f
Parents: 9d0cc2e
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Jul 14 14:28:27 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:10:32 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/PluginManager.java | 7 -------
 1 file changed, 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5a610097/framework/src/org/apache/cordova/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java
index 400426c..97988d8 100755
--- a/framework/src/org/apache/cordova/PluginManager.java
+++ b/framework/src/org/apache/cordova/PluginManager.java
@@ -86,7 +86,6 @@ public class PluginManager {
     /**
      * Init when loading a new HTML page into webview.
      */
-    @Deprecated // Should not be exposed as public.
     public void init() {
         LOG.d(TAG, "init()");
         this.onPause(false);
@@ -277,7 +276,6 @@ public class PluginManager {
      *
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
-    @Deprecated // Should not be public
     public void onPause(boolean multitasking) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onPause(multitasking);
@@ -289,7 +287,6 @@ public class PluginManager {
      *
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
-    @Deprecated // Should not be public
     public void onResume(boolean multitasking) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onResume(multitasking);
@@ -299,7 +296,6 @@ public class PluginManager {
     /**
      * The final call you receive before your activity is destroyed.
      */
-    @Deprecated // Should not be public
     public void onDestroy() {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onDestroy();
@@ -330,7 +326,6 @@ public class PluginManager {
     /**
      * Called when the activity receives a new intent.
      */
-    @Deprecated // Should not be public
     public void onNewIntent(Intent intent) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onNewIntent(intent);
@@ -343,7 +338,6 @@ public class PluginManager {
      * @param url               The URL that is being changed to.
      * @return                  Return false to allow the URL to load, return true to prevent the URL from loading.
      */
-    @Deprecated // Should not be public
     public boolean onOverrideUrlLoading(String url) {
         // Deprecated way to intercept URLs. (process <url-filter> tags).
         // Instead, plugins should not include <url-filter> and instead ensure
@@ -370,7 +364,6 @@ public class PluginManager {
     /**
      * Called when the app navigates or refreshes.
      */
-    @Deprecated // Should not be public
     public void onReset() {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onReset();


[17/50] git commit: Filter out non-launchable intents

Posted by na...@apache.org.
Filter out non-launchable intents


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/e8868ebe
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/e8868ebe
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/e8868ebe

Branch: refs/heads/master
Commit: e8868ebedd8d1af27bf47b91edd2a5bd61852fcb
Parents: 48ba003
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Jul 22 13:53:33 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:31:14 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaUriHelper.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/e8868ebe/framework/src/org/apache/cordova/CordovaUriHelper.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaUriHelper.java b/framework/src/org/apache/cordova/CordovaUriHelper.java
index 15c2370..f1c892c 100644
--- a/framework/src/org/apache/cordova/CordovaUriHelper.java
+++ b/framework/src/org/apache/cordova/CordovaUriHelper.java
@@ -69,6 +69,9 @@ class CordovaUriHelper {
             try {
                 Intent intent = new Intent(Intent.ACTION_VIEW);
                 intent.setData(Uri.parse(url));
+                intent.addCategory(Intent.CATEGORY_BROWSABLE);
+                intent.setComponent(null);
+                intent.setSelector(null);
                 this.cordova.getActivity().startActivity(intent);
             } catch (android.content.ActivityNotFoundException e) {
                 LOG.e(TAG, "Error loading url " + url, e);


[49/50] git commit: CB-7291: Add external-launch-whitelist and use it for filtering intent launches

Posted by na...@apache.org.
CB-7291: Add external-launch-whitelist and use it for filtering intent launches


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/bb2029db
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/bb2029db
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/bb2029db

Branch: refs/heads/master
Commit: bb2029db21e78bc307e9fefb4eb1e6761e3ba2b4
Parents: e5e5c5e
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Aug 12 11:02:55 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:38:47 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/Config.java    | 24 +++++++++++++++++---
 .../src/org/apache/cordova/ConfigXmlParser.java | 12 +++++++---
 .../src/org/apache/cordova/CordovaActivity.java | 12 ++++++----
 .../org/apache/cordova/CordovaUriHelper.java    | 15 ++++++++----
 .../src/org/apache/cordova/CordovaWebView.java  | 24 +++++++++++++-------
 5 files changed, 64 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/bb2029db/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 39108ed..caf3f44 100644
--- a/framework/src/org/apache/cordova/Config.java
+++ b/framework/src/org/apache/cordova/Config.java
@@ -58,7 +58,7 @@ public class Config {
             Log.e(TAG, "Config was not initialised. Did you forget to Config.init(this)?");
             return;
         }
-        parser.getWhitelist().addWhiteListEntry(origin, subdomains);
+        parser.getInternalWhitelist().addWhiteListEntry(origin, subdomains);
     }
 
     /**
@@ -72,7 +72,21 @@ public class Config {
             Log.e(TAG, "Config was not initialised. Did you forget to Config.init(this)?");
             return false;
         }
-        return parser.getWhitelist().isUrlWhiteListed(url);
+        return parser.getInternalWhitelist().isUrlWhiteListed(url);
+    }
+
+    /**
+     * Determine if URL is in approved list of URLs to launch external applications.
+     *
+     * @param url
+     * @return true if whitelisted
+     */
+    public static boolean isUrlExternallyWhiteListed(String url) {
+        if (parser == null) {
+            Log.e(TAG, "Config was not initialised. Did you forget to Config.init(this)?");
+            return false;
+        }
+        return parser.getExternalWhitelist().isUrlWhiteListed(url);
     }
 
     public static String getStartUrl() {
@@ -87,7 +101,11 @@ public class Config {
     }
 
     public static Whitelist getWhitelist() {
-        return parser.getWhitelist();
+        return parser.getInternalWhitelist();
+    }
+
+    public static Whitelist getExternalWhitelist() {
+        return parser.getExternalWhitelist();
     }
 
     public static List<PluginEntry> getPluginEntries() {

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/bb2029db/framework/src/org/apache/cordova/ConfigXmlParser.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java
index cc5b2fa..1ada1af 100644
--- a/framework/src/org/apache/cordova/ConfigXmlParser.java
+++ b/framework/src/org/apache/cordova/ConfigXmlParser.java
@@ -37,11 +37,16 @@ public class ConfigXmlParser {
 
     private String launchUrl = "file:///android_asset/www/index.html";
     private CordovaPreferences prefs = new CordovaPreferences();
-    private Whitelist whitelist = new Whitelist();
+    private Whitelist internalWhitelist = new Whitelist();
+    private Whitelist externalWhitelist = new Whitelist();
     private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20);
 
-    public Whitelist getWhitelist() {
-        return whitelist;
+    public Whitelist getInternalWhitelist() {
+        return internalWhitelist;
+    }
+
+    public Whitelist getExternalWhitelist() {
+        return externalWhitelist;
     }
 
     public CordovaPreferences getPreferences() {
@@ -109,6 +114,7 @@ public class ConfigXmlParser {
                 else if (strNode.equals("access")) {
                     String origin = xml.getAttributeValue(null, "origin");
                     String subdomains = xml.getAttributeValue(null, "subdomains");
+                    boolean external = (xml.getAttributeValue(null, "launch-external") != null);
                     if (origin != null) {
                         if (external) {
                             externalWhitelist.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/bb2029db/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 d3dc793..2da39cb 100755
--- a/framework/src/org/apache/cordova/CordovaActivity.java
+++ b/framework/src/org/apache/cordova/CordovaActivity.java
@@ -144,7 +144,8 @@ public class CordovaActivity extends Activity implements CordovaInterface {
     private static final String ERROR_DIALOG_OK_BUTTON = "OK";
     // Read from config.xml:
     protected CordovaPreferences preferences;
-    protected Whitelist whitelist;
+    protected Whitelist internalWhitelist;
+    protected Whitelist externalWhitelist;
     protected String launchUrl;
     protected ArrayList<PluginEntry> pluginEntries;
 
@@ -232,7 +233,8 @@ public class CordovaActivity extends Activity implements CordovaInterface {
         preferences = parser.getPreferences();
         preferences.setPreferencesBundle(getIntent().getExtras());
         preferences.copyIntoIntentExtras(this);
-        whitelist = parser.getWhitelist();
+        internalWhitelist = parser.getInternalWhitelist();
+        externalWhitelist = parser.getExternalWhitelist();
         launchUrl = parser.getLaunchUrl();
         pluginEntries = parser.getPluginEntries();
         Config.parser = parser;
@@ -415,7 +417,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
         if (appView.pluginManager == null) {
             appView.init(this, webViewClient != null ? webViewClient : makeWebViewClient(appView),
                     webChromeClient != null ? webChromeClient : makeChromeClient(appView),
-                    pluginEntries, whitelist, preferences);
+                    pluginEntries, internalWhitelist, externalWhitelist, preferences);
         }
 
         // TODO: Have the views set this themselves.
@@ -902,7 +904,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
 
         // If errorUrl specified, then load it
         final String errorUrl = preferences.getString("errorUrl", null);
-        if ((errorUrl != null) && (errorUrl.startsWith("file://") || whitelist.isUrlWhiteListed(errorUrl)) && (!failingUrl.equals(errorUrl))) {
+        if ((errorUrl != null) && (errorUrl.startsWith("file://") || internalWhitelist.isUrlWhiteListed(errorUrl)) && (!failingUrl.equals(errorUrl))) {
 
             // Load URL on UI thread
             me.runOnUiThread(new Runnable() {
@@ -962,7 +964,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
      */
     @Deprecated // Use whitelist object directly.
     public boolean isUrlWhiteListed(String url) {
-        return whitelist.isUrlWhiteListed(url);
+        return internalWhitelist.isUrlWhiteListed(url);
     }
 
     /*

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/bb2029db/framework/src/org/apache/cordova/CordovaUriHelper.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaUriHelper.java b/framework/src/org/apache/cordova/CordovaUriHelper.java
index 66818cb..340f03a 100644
--- a/framework/src/org/apache/cordova/CordovaUriHelper.java
+++ b/framework/src/org/apache/cordova/CordovaUriHelper.java
@@ -58,8 +58,10 @@ class CordovaUriHelper {
             }
         }
         // Give plugins the chance to handle the url
-        else if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
-            
+        if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
+            // Do nothing other than what the plugins wanted.
+            // If any returned true, then the request was handled.
+            return true;
         }
         else if(url.startsWith("file://") | url.startsWith("data:"))
         {
@@ -67,7 +69,11 @@ class CordovaUriHelper {
             //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
             return url.contains("app_webview");
         }
-        else
+        else if (appView.getWhitelist().isUrlWhiteListed(url)) {
+            // Allow internal navigation
+            return false;
+        }
+        else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
         {
             try {
                 Intent intent = new Intent(Intent.ACTION_VIEW);
@@ -78,11 +84,12 @@ class CordovaUriHelper {
                     intent.setSelector(null);
                 }
                 this.cordova.getActivity().startActivity(intent);
+                return true;
             } catch (android.content.ActivityNotFoundException e) {
                 LOG.e(TAG, "Error loading url " + url, e);
             }
         }
-        //Default behaviour should be to load the default intent, let's see what happens! 
+        // Intercept the request and do nothing with it -- block it
         return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/bb2029db/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 fbc1932..b15de97 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -89,7 +89,9 @@ public class CordovaWebView extends AmazonWebView {
     private AmazonWebChromeClient.CustomViewCallback mCustomViewCallback;
 
     private CordovaResourceApi resourceApi;
-    private Whitelist whitelist;
+    private Whitelist internalWhitelist;
+    private Whitelist externalWhitelist;
+
     // The URL passed to loadUrl(), not necessarily the URL of the current page.
     String loadedUrl;
     private CordovaPreferences preferences;
@@ -199,7 +201,8 @@ public class CordovaWebView extends AmazonWebView {
 */
     // Use two-phase init so that the control will work with XML layouts.
     public void init(CordovaInterface cordova, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient,
-            List<PluginEntry> pluginEntries, Whitelist whitelist, CordovaPreferences preferences) {
+            List<PluginEntry> pluginEntries, Whitelist internalWhitelist, Whitelist externalWhitelist,
+            CordovaPreferences preferences) {
         if (this.cordova != null) {
             throw new IllegalStateException();
         }
@@ -207,7 +210,8 @@ public class CordovaWebView extends AmazonWebView {
         //this.cordova.getFactory().initializeWebView(this, 0xFFFFFF, false, null);
         this.viewClient = webViewClient;
         this.chromeClient = webChromeClient;
-        this.whitelist = whitelist;
+        this.internalWhitelist = internalWhitelist;
+        this.externalWhitelist = externalWhitelist;
         this.preferences = preferences;
         super.setWebChromeClient(webChromeClient);
         super.setWebViewClient(webViewClient);
@@ -230,7 +234,7 @@ public class CordovaWebView extends AmazonWebView {
             if (!Config.isInitialized()) {
                 Config.init(cdv.getActivity());
             }
-            init(cdv, makeWebViewClient(cdv), makeWebChromeClient(cdv), Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
+            init(cdv, makeWebViewClient(cdv), makeWebChromeClient(cdv), Config.getPluginEntries(), Config.getWhitelist(), Config.getExternalWhitelist(), Config.getPreferences());
         }
     }
 
@@ -430,9 +434,13 @@ public class CordovaWebView extends AmazonWebView {
 
     
     public Whitelist getWhitelist() {
-        return this.whitelist;
+        return this.internalWhitelist;
     }
-    
+
+    public Whitelist getExternalWhitelist() {
+        return this.externalWhitelist;
+    }
+
     /**
      * Load the url into the webview.
      *
@@ -506,7 +514,7 @@ public class CordovaWebView extends AmazonWebView {
         if (LOG.isLoggable(LOG.DEBUG) && !url.startsWith("javascript:")) {
             LOG.d(TAG, ">>> loadUrlNow()");
         }
-        if (url.startsWith("file://") || url.startsWith("javascript:") || whitelist.isUrlWhiteListed(url)) {
+        if (url.startsWith("file://") || url.startsWith("javascript:") || internalWhitelist.isUrlWhiteListed(url)) {
             super.loadUrl(url);
         }
     }
@@ -641,7 +649,7 @@ public class CordovaWebView extends AmazonWebView {
         if (!openExternal) {
 
             // Make sure url is in whitelist
-            if (url.startsWith("file://") || whitelist.isUrlWhiteListed(url)) {
+            if (url.startsWith("file://") || internalWhitelist.isUrlWhiteListed(url)) {
                 // TODO: What about params?
                 // Load new URL
                 this.loadUrl(url);


[37/50] git commit: CB-7330 Fix dangling function call in last commit (broke gradle builds)

Posted by na...@apache.org.
CB-7330 Fix dangling function call in last commit (broke gradle builds)


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/aaf2f24a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/aaf2f24a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/aaf2f24a

Branch: refs/heads/master
Commit: aaf2f24af704afda84c3acb766a2eb13c13cc3f3
Parents: 303b0aa
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Aug 19 11:53:53 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:10:24 2014 -0700

----------------------------------------------------------------------
 bin/templates/cordova/lib/build.js | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/aaf2f24a/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 7830bd6..1f4810d 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -204,7 +204,6 @@ var builders = {
             var builder = this;
             var wrapper = path.join(ROOT, 'gradlew');
             var args = builder.getArgs('build');
-            copyGradleWrapper();
             return Q().then(function() {
                 return spawn(wrapper, args);
             }).then(function() {
@@ -216,7 +215,6 @@ var builders = {
             var builder = this;
             var wrapper = path.join(ROOT, 'gradlew');
             var args = builder.getArgs('clean');
-            copyGradleWrapper();
             return Q().then(function() {
                 return spawn(wrapper, args);
             });


[46/50] git commit: CB-7385 update cordova.js for testing prior to branch/tag

Posted by na...@apache.org.
CB-7385 update cordova.js for testing prior to branch/tag


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/64a01382
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/64a01382
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/64a01382

Branch: refs/heads/master
Commit: 64a01382f490724ddd45ed976ee9d8c129dfc63c
Parents: 8e94714
Author: Marcel Kinard <cm...@gmail.com>
Authored: Wed Aug 27 09:04:32 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:21:02 2014 -0700

----------------------------------------------------------------------
 framework/assets/www/cordova.js | 35 +++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/64a01382/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 8d5f259..b8627c9 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,6 @@
+
 // Platform: amazon-fireos
-// 3.6.0-dev-7e845f3
+// 3.6.3
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,7 +20,7 @@
  under the License.
 */
 ;(function() {
-var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-70cdca3';
+var CORDOVA_JS_BUILD_LABEL = '3.6.3';
 // file: src/scripts/require.js
 
 /*jshint -W079 */
@@ -1497,6 +1498,17 @@ module.exports = {
         cordova.addDocumentEventHandler('menubutton');
         cordova.addDocumentEventHandler('searchbutton');
 
+        function bindButtonChannel(buttonName) {
+            // generic button bind used for volumeup/volumedown buttons
+            var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
+            volumeButtonChannel.onHasSubscribersChange = function() {
+                exec(null, null, "App", "overrideButton", [buttonName, this.numHandlers == 1]);
+            };
+        }
+        // Inject a listener for the volume buttons on the document.
+        bindButtonChannel('volumeup');
+        bindButtonChannel('volumedown');
+
         // Let native code know we are all done on the JS side.
         // Native code will then un-hide the WebView.
         channel.onCordovaReady.subscribe(function() {
@@ -1575,6 +1587,21 @@ module.exports = {
     },
 
     /**
+    * Override the default behavior of the Android volume button.
+    * If overridden, when the volume button is pressed, the "volume[up|down]button"
+    * JavaScript event will be fired.
+    *
+    * Note: The user should not have to call this method.  Instead, when the user
+    *       registers for the "volume[up|down]button" event, this is automatically done.
+    *
+    * @param button          volumeup, volumedown
+    * @param override        T=override, F=cancel override
+    */
+    overrideButton:function(button, override) {
+        exec(null, null, "App", "overrideButton", [button, override]);
+    },
+
+    /**
     * Exit and terminate the application.
     */
     exitApp:function() {
@@ -1667,11 +1694,11 @@ function handlePluginsObject(path, moduleList, finishPluginLoading) {
 function findCordovaPath() {
     var path = null;
     var scripts = document.getElementsByTagName('script');
-    var term = 'cordova.js';
+    var term = '/cordova.js';
     for (var n = scripts.length-1; n>-1; n--) {
         var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007).
         if (src.indexOf(term) == (src.length - term.length)) {
-            path = src.substring(0, src.length - term.length);
+            path = src.substring(0, src.length - term.length) + '/';
             break;
         }
     }


[04/50] git commit: Update to check for Google Glass APIs

Posted by na...@apache.org.
Update to check for Google Glass APIs

This prevents the 'cordova build android' process from blowing up on this step if you assign the GDK as the target and want to rebuild via the CLI.

close #100


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/811724d4
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/811724d4
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/811724d4

Branch: refs/heads/master
Commit: 811724d41f0ba63a32715514367a5dff76ed97bd
Parents: 7da4322
Author: Matt Ray <th...@gmail.com>
Authored: Thu May 8 15:37:09 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:06:33 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/811724d4/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 327e7e6..e8df92a 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -37,6 +37,10 @@ module.exports.get_target = function() {
         // this is called on the project itself, and can support Google APIs AND Vanilla Android
         var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties')) ||
           shell.grep(/target=Google Inc.:Google APIs:[\d+]/, path.join(ROOT, 'project.properties'));
+        if(target == "" || !target) {
+          // Try Google Glass APIs
+          target = shell.grep(/target=Google Inc.:Glass Development Kit Preview:[\d+]/, path.join(ROOT, 'project.properties'));
+        }
         return target.split('=')[1].replace('\n', '').replace('\r', '');
     }
 }


[38/50] git commit: CB-7335 Add a .gitignore to android project template

Posted by na...@apache.org.
CB-7335 Add a .gitignore to android project template


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/0ad1ae4f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/0ad1ae4f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/0ad1ae4f

Branch: refs/heads/master
Commit: 0ad1ae4fcdb805f3d357fa4a454c750957298c3b
Parents: aaf2f24
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue Aug 19 11:59:18 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:10:56 2014 -0700

----------------------------------------------------------------------
 bin/lib/create.js               |  1 +
 bin/templates/project/gitignore | 14 ++++++++++++++
 2 files changed, 15 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0ad1ae4f/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 89c098a..0f0014c 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -280,6 +280,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
             shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
             shell.cp('-r', path.join(project_template_dir, 'res'), project_path);
             shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
+            shell.cp(path.join(project_template_dir, 'gitignore'), path.join(project_path, '.gitignore'));
 
             // Manually create directories that would be empty within the template (since git doesn't track directories).
             shell.mkdir(path.join(project_path, 'libs'));

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0ad1ae4f/bin/templates/project/gitignore
----------------------------------------------------------------------
diff --git a/bin/templates/project/gitignore b/bin/templates/project/gitignore
new file mode 100644
index 0000000..a1c8ff7
--- /dev/null
+++ b/bin/templates/project/gitignore
@@ -0,0 +1,14 @@
+# Non-project-specific build files:
+build.xml
+local.properties
+/gradlew
+/gradlew.bat
+/gradle
+# Ant builds
+ant-built
+ant-gen
+# Eclipse builds
+gen
+out
+# Gradle builds
+/build


[41/50] git commit: CB-7291: Add defaults to external whitelist

Posted by na...@apache.org.
CB-7291: Add defaults to external whitelist


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/c8b00ec2
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/c8b00ec2
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/c8b00ec2

Branch: refs/heads/master
Commit: c8b00ec240a564805fa6f2173e3a582dbca6e869
Parents: c6f47be
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Aug 21 15:59:05 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:11:37 2014 -0700

----------------------------------------------------------------------
 framework/res/xml/config.xml | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c8b00ec2/framework/res/xml/config.xml
----------------------------------------------------------------------
diff --git a/framework/res/xml/config.xml b/framework/res/xml/config.xml
index 50459b9..6f4a264 100644
--- a/framework/res/xml/config.xml
+++ b/framework/res/xml/config.xml
@@ -30,7 +30,20 @@
         Apache Cordova Team
     </author>
 
-    <access origin="*"/>
+    <!-- Allow access to arbitrary URLs in the Cordova WebView. This is a
+         development mode setting, and should be changed for production. -->
+    <access origin="http://*/*"/>
+    <access origin="https://*/*"/>
+
+    <!-- Grant certain URLs the ability to launch external applications. This
+         behaviour is set to match that of Cordova versions before 3.6.0, and
+         should be reviewed before launching an application in production. It
+         may be changed in the future. -->
+    <access origin="tel:*" launch-external="yes"/>
+    <access origin="geo:*" launch-external="yes"/>
+    <access origin="mailto:*" launch-external="yes"/>
+    <access origin="sms:*" launch-external="yes"/>
+    <access origin="market:*" launch-external="yes"/>
 
     <!-- <content src="http://mysite.com/myapp.html" /> for external pages -->
     <content src="index.html" />


[34/50] git commit: Fixing merge errors.

Posted by na...@apache.org.
Fixing merge errors.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/1b98e84c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/1b98e84c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/1b98e84c

Branch: refs/heads/master
Commit: 1b98e84ce2b39cd5b5ed7b9d5a2311fcb82ca3cd
Parents: e59bf27
Author: Archana Naik <na...@lab126.com>
Authored: Mon Aug 18 14:46:43 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 14:46:43 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js    | 2 +-
 bin/lib/create.js        | 2 +-
 test/AndroidManifest.xml | 1 -
 3 files changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/1b98e84c/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index ce71e1a..df55c1e 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -31,7 +31,7 @@ var isWindows = process.platform == 'win32';
 
 function forgivingWhichSync(cmd) {
     try {
-        return which.sync(path);
+        return which.sync(cmd);
     } catch (e) {
         return '';
     }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/1b98e84c/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index b588f60..54975fe 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -249,6 +249,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
         setShellFatal(true, function() {
             // copy project template
             shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
+            shell.cp('-r', path.join(project_template_dir, 'res'), project_path);
             shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
 
             // Manually create directories that would be empty within the template (since git doesn't track directories).
@@ -261,7 +262,6 @@ exports.createProject = function(project_path, package_name, project_name, proje
             }
 
             // copy cordova.js, cordova.jar and res/xml
-            shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
             copyJsAndLibrary(project_path, use_shared_project, safe_activity_name);
 
             // interpolate the activity name and package

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/1b98e84c/test/AndroidManifest.xml
----------------------------------------------------------------------
diff --git a/test/AndroidManifest.xml b/test/AndroidManifest.xml
index bab4566..6d6caa7 100755
--- a/test/AndroidManifest.xml
+++ b/test/AndroidManifest.xml
@@ -300,7 +300,6 @@
             android:exported="false"
             android:permission="org.chromium.content_shell.permission.SANDBOX"
             android:process=":sandboxed_process5" />
-        </application>
         <activity
             android:windowSoftInputMode="adjustPan"
             android:label="@string/app_name" 


[07/50] git commit: @Deprecate methods of PluginManager that were never meant to be public

Posted by na...@apache.org.
@Deprecate methods of PluginManager that were never meant to be public


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/9d0cc2ef
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/9d0cc2ef
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/9d0cc2ef

Branch: refs/heads/master
Commit: 9d0cc2ef92c6e886649a15ed63816197939c6903
Parents: 38586b5
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Jul 14 14:10:19 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:09:37 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/PluginManager.java | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/9d0cc2ef/framework/src/org/apache/cordova/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java
index 04ac200..400426c 100755
--- a/framework/src/org/apache/cordova/PluginManager.java
+++ b/framework/src/org/apache/cordova/PluginManager.java
@@ -86,6 +86,7 @@ public class PluginManager {
     /**
      * Init when loading a new HTML page into webview.
      */
+    @Deprecated // Should not be exposed as public.
     public void init() {
         LOG.d(TAG, "init()");
         this.onPause(false);
@@ -101,6 +102,7 @@ public class PluginManager {
     /**
      * Delete all plugin objects.
      */
+    @Deprecated // Should not be exposed as public.
     public void clearPluginObjects() {
         pluginMap.clear();
     }
@@ -108,6 +110,7 @@ public class PluginManager {
     /**
      * Create plugins objects that have onload set.
      */
+    @Deprecated // Should not be exposed as public.
     public void startupPlugins() {
         for (PluginEntry entry : entryMap.values()) {
             if (entry.onload) {
@@ -274,6 +277,7 @@ public class PluginManager {
      *
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
+    @Deprecated // Should not be public
     public void onPause(boolean multitasking) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onPause(multitasking);
@@ -285,6 +289,7 @@ public class PluginManager {
      *
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
+    @Deprecated // Should not be public
     public void onResume(boolean multitasking) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onResume(multitasking);
@@ -294,6 +299,7 @@ public class PluginManager {
     /**
      * The final call you receive before your activity is destroyed.
      */
+    @Deprecated // Should not be public
     public void onDestroy() {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onDestroy();
@@ -324,6 +330,7 @@ public class PluginManager {
     /**
      * Called when the activity receives a new intent.
      */
+    @Deprecated // Should not be public
     public void onNewIntent(Intent intent) {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onNewIntent(intent);
@@ -336,6 +343,7 @@ public class PluginManager {
      * @param url               The URL that is being changed to.
      * @return                  Return false to allow the URL to load, return true to prevent the URL from loading.
      */
+    @Deprecated // Should not be public
     public boolean onOverrideUrlLoading(String url) {
         // Deprecated way to intercept URLs. (process <url-filter> tags).
         // Instead, plugins should not include <url-filter> and instead ensure
@@ -362,6 +370,7 @@ public class PluginManager {
     /**
      * Called when the app navigates or refreshes.
      */
+    @Deprecated // Should not be public
     public void onReset() {
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             plugin.onReset();


[13/50] git commit: CB-7238: Minor band-aid to get tests running again, this has to go away before 3.6.0 is released, since this is an API change.

Posted by na...@apache.org.
CB-7238: Minor band-aid to get tests running again, this has to go away before 3.6.0 is released, since this is an API change.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/9c4da7b9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/9c4da7b9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/9c4da7b9

Branch: refs/heads/master
Commit: 9c4da7b93eadd31a05e2829dc7e8765aee62d99f
Parents: 2fdc675
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Jul 31 08:17:31 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Tue Aug 5 12:45:23 2014 -0700

----------------------------------------------------------------------
 test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/9c4da7b9/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
index 889bd5f..55ebfeb 100644
--- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
@@ -66,6 +66,9 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
 
         setContentView(R.layout.main);
 
+        //CB-7238: This has to be added now, because it got removed from somewhere else
+        Config.init(this);
+        
         cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
         Config.init(this);
         cordovaWebView.init(this, new CordovaWebViewClient(this, cordovaWebView), new CordovaChromeClient(this, cordovaWebView),


[30/50] git commit: CB-7044 Add JAVA_HOME when not set. Be stricter about ANDROID_HOME

Posted by na...@apache.org.
CB-7044 Add JAVA_HOME when not set. Be stricter about ANDROID_HOME

Also switches to using the which module over shelljs.which (better
support for .bat files)


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/cef71685
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/cef71685
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/cef71685

Branch: refs/heads/master
Commit: cef7168520bb25bdeeecd067ba2ec365db28eecc
Parents: c3eda01
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 14:45:23 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:41:13 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js | 102 +++++++++++++++++++++++++++++++--------------
 1 file changed, 71 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/cef71685/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 87f3ea6..844ce6e 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -29,6 +29,14 @@ var shelljs = require('shelljs'),
 
 var isWindows = process.platform == 'win32';
 
+function forgivingWhichSync(cmd) {
+    try {
+        return which.sync(path);
+    } catch (e) {
+        return '';
+    }
+}
+
 function tryCommand(cmd, errMsg) {
     var d = Q.defer();
     child_process.exec(cmd, function(err, stdout, stderr) {
@@ -80,32 +88,54 @@ module.exports.check_ant = function() {
 
 // Returns a promise.
 module.exports.check_java = function() {
-    var javacInPath = !!shelljs.which('javac');
-    var hasJavaHome = !!process.env.JAVA_HOME;
-    // Windows java installer doesn't add javac to PATH, nor set JAVA_HOME (ugh).
-    if (hasJavaHome && !javacInPath) {
-        process.env.PATH += path.delimiter + path.join(process.env.JAVA_HOME, 'bin');
-    } else if (isWindows && (!hasJavaHome || !javacInPath)) {
-        // Try to auto-detect java in the default install paths.
-        var firstJdkDir =
-            shelljs.ls(process.env.ProgramFiles + '\\java\\jdk*')[0] ||
-            shelljs.ls('C:\\Program Files\\java\\jdk*')[0] ||
-            shelljs.ls('C:\\Program Files (x86)\\java\\jdk*')[0];
-        if (firstJdkDir) {
-            // shelljs always uses / in paths.
-            firstJdkDir = firstJdkDir.replace(/\//g, path.sep);
-            if (!javacInPath) {
-                process.env.PATH += path.delimiter + path.join(firstJdkDir, 'bin');
+    var javacPath = forgivingWhichSync('javac');
+    var hasJavaHome = !!process.env['JAVA_HOME'];
+    return Q().then(function() {
+        if (hasJavaHome) {
+            // Windows java installer doesn't add javac to PATH, nor set JAVA_HOME (ugh).
+            if (!javacPath) {
+                process.env['PATH'] += path.delimiter + path.join(process.env['JAVA_HOME'], 'bin');
+            }
+        } else {
+            if (javacPath) {
+                // OS X has a command for finding JAVA_HOME.
+                if (fs.existsSync('/usr/libexec/java_home')) {
+                    return tryCommand('/usr/libexec/java_home', 'Failed to run: /usr/libexec/java_home')
+                    .then(function(stdout) {
+                        process.env['JAVA_HOME'] = stdout.trim();
+                    });
+                } else {
+                    // See if we can derive it from javac's location.
+                    var maybeJavaHome = path.dirname(path.dirname(javacPath));
+                    if (fs.existsSync(path.join(maybeJavaHome, 'lib', 'tools.jar'))) {
+                        process.env['JAVA_HOME'] = maybeJavaHome;
+                    } else {
+                        throw new Error('Could not find JAVA_HOME. Try setting the environment variable manually');
+                    }
+                }
+            } else if (isWindows) {
+                // Try to auto-detect java in the default install paths.
+                var firstJdkDir =
+                    shelljs.ls(process.env['ProgramFiles'] + '\\java\\jdk*')[0] ||
+                    shelljs.ls('C:\\Program Files\\java\\jdk*')[0] ||
+                    shelljs.ls('C:\\Program Files (x86)\\java\\jdk*')[0];
+                if (firstJdkDir) {
+                    // shelljs always uses / in paths.
+                    firstJdkDir = firstJdkDir.replace(/\//g, path.sep);
+                    if (!javacPath) {
+                        process.env['PATH'] += path.delimiter + path.join(firstJdkDir, 'bin');
+                    }
+                    process.env['JAVA_HOME'] = firstJdkDir;
+                }
             }
-            process.env.JAVA_HOME = firstJdkDir;
         }
-    }
-    var msg =
-        'Failed to run "java -version", make sure your java environment is set up\n' +
-        'including JDK and JRE.\n' +
-        'Your JAVA_HOME variable is: ' + process.env.JAVA_HOME;
-    return tryCommand('java -version', msg)
-    .then(function() {
+    }).then(function() {
+        var msg =
+            'Failed to run "java -version", make sure your java environment is set up\n' +
+            'including JDK and JRE.\n' +
+            'Your JAVA_HOME variable is: ' + process.env['JAVA_HOME'];
+        return tryCommand('java -version', msg)
+    }).then(function() {
         msg = 'Failed to run "javac -version", make sure you have a Java JDK (not just a JRE) installed.';
         return tryCommand('javac -version', msg)
     });
@@ -113,18 +143,21 @@ module.exports.check_java = function() {
 
 // Returns a promise.
 module.exports.check_android = function() {
-    var androidCmdPath = !!shelljs.which('android');
-    var adbInPath = !!shelljs.which('adb');
-    var hasAndroidHome = !!process.env.ANDROID_HOME;
+    var androidCmdPath = forgivingWhichSync('android');
+    var adbInPath = !!forgivingWhichSync('adb');
+    var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
     if (hasAndroidHome && !androidCmdPath) {
-        process.env.PATH += path.delimiter + path.join(process.env.ANDROID_HOME, 'tools');
+        process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
     }
     if (androidCmdPath && !hasAndroidHome) {
-        process.env.ANDROID_HOME = path.dirname(path.dirname(androidCmdPath));
-        hasAndroidHome = true;
+        var parentDir = path.dirname(androidCmdPath);
+        if (path.basename(parentDir) == 'tools') {
+            process.env['ANDROID_HOME'] = path.dirname(parentDir);
+            hasAndroidHome = true;
+        }
     }
     if (hasAndroidHome && !adbInPath) {
-        process.env.PATH += path.delimiter + path.join(process.env.ANDROID_HOME, 'platform-tools');
+        process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
     }
 
     var valid_target = this.get_target();
@@ -136,6 +169,13 @@ module.exports.check_android = function() {
                 ' (the Android newest SDK). Make sure you have the latest Android tools installed as well.' +
                 ' Run "android" from your command-line to install/update any missing SDKs or tools.'));
         }
+    }).then(function() {
+        if (!process.env['ANDROID_HOME']) {
+            throw new Error('ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.');
+        }
+        if (!fs.existsSync(process.env['ANDROID_HOME'])) {
+            throw new Error('ANDROID_HOME is set to a non-existant path: ' + process.env['ANDROID_HOME']);
+        }
     });
 }
 


[43/50] git commit: CB-7291: Restrict meaning of "*" in internal whitelist to just http and https

Posted by na...@apache.org.
CB-7291: Restrict meaning of "*" in internal whitelist to just http and https


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/5f2ced5b
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/5f2ced5b
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/5f2ced5b

Branch: refs/heads/master
Commit: 5f2ced5ba09c1b0f7080537d082e474b98b4e7cc
Parents: 8afa753
Author: Ian Clelland <ic...@chromium.org>
Authored: Tue Aug 26 14:58:00 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:12:58 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/ConfigXmlParser.java | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5f2ced5b/framework/src/org/apache/cordova/ConfigXmlParser.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/ConfigXmlParser.java b/framework/src/org/apache/cordova/ConfigXmlParser.java
index 57cf222..cc5b2fa 100644
--- a/framework/src/org/apache/cordova/ConfigXmlParser.java
+++ b/framework/src/org/apache/cordova/ConfigXmlParser.java
@@ -110,7 +110,19 @@ public class ConfigXmlParser {
                     String origin = xml.getAttributeValue(null, "origin");
                     String subdomains = xml.getAttributeValue(null, "subdomains");
                     if (origin != null) {
-                        whitelist.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
+                        if (external) {
+                            externalWhitelist.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
+                        } else {
+                            if ("*".equals(origin)) {
+                                // Special-case * origin to mean http and https when used for internal
+                                // whitelist. This prevents external urls like sms: and geo: from being
+                                // handled internally.
+                                internalWhitelist.addWhiteListEntry("http://*/*", false);
+                                internalWhitelist.addWhiteListEntry("https://*/*", false);
+                            } else {
+                                internalWhitelist.addWhiteListEntry(origin, (subdomains != null) && (subdomains.compareToIgnoreCase("true") == 0));
+                            }
+                        }
                     }
                 }
                 else if (strNode.equals("preference")) {


[32/50] git commit: CB-3445 Copy gradle wrapper in build instead of create

Posted by na...@apache.org.
CB-3445 Copy gradle wrapper in build instead of create

This should play nicer with updates to the android SDK.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/2d71d89c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/2d71d89c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/2d71d89c

Branch: refs/heads/master
Commit: 2d71d89c4d72b73dae8f6ad62036d7d80dd38b2d
Parents: 94650c0
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 14:51:10 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:41:39 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js              | 17 -----------------
 bin/lib/create.js                  | 17 -----------------
 bin/templates/cordova/lib/build.js | 19 +++++++++++++++++++
 3 files changed, 19 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/2d71d89c/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 844ce6e..ce71e1a 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -64,23 +64,6 @@ module.exports.get_target = function() {
     }
 }
 
-// Returns a promise.
-module.exports.sdk_dir = function() {
-    var d = Q.defer();
-    which('android', function(err, path) {
-        if (err) {
-            d.reject(new Error('ERROR: Cannot find Android SDK. android command not found.'));
-        } else {
-            var toolsDir = path.substring(0, path.lastIndexOf('/'));
-            if (toolsDir.substring(toolsDir.length-6) != "/tools") {
-                d.reject(new Error('ERROR: Cannot find Android SDK. android command not found in tools dir.'));
-            }
-            d.resolve(toolsDir.substring(0, toolsDir.length-6));
-        }
-    });
-    return d.promise;
-};
-
 // Returns a promise. Called only by build and clean commands.
 module.exports.check_ant = function() {
     return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/2d71d89c/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index cc36c67..b588f60 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -122,13 +122,6 @@ function copyScripts(projectPath) {
     shell.cp(path.join(ROOT, 'bin', 'lib', 'android_sdk_version.js'), path.join(projectPath, 'cordova', 'lib', 'android_sdk_version.js'));
 }
 
-function copyGradleWrapper(sdkPath, projectPath) {
-    var wrapperDir = path.join(sdkPath, 'tools', 'templates','gradle','wrapper');
-    shell.cp(path.join(wrapperDir, 'gradlew'), projectPath);
-    shell.cp(path.join(wrapperDir, 'gradlew.bat'), projectPath);
-    shell.cp('-r', path.join(wrapperDir, 'gradle'), projectPath);
-}
-
 /**
  * Test whether a package name is acceptable for use as an android project.
  * Returns a promise, fulfilled if the package name is acceptable; rejected
@@ -258,16 +251,6 @@ exports.createProject = function(project_path, package_name, project_name, proje
             shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
             shell.cp('-r', path.join(ROOT, 'framework', 'res', 'xml'), path.join(project_path, 'res'));
 
-            shell.cp('-f', path.join(project_template_dir, 'build.gradle'), project_path);
-            shell.cp('-f', path.join(project_template_dir, 'libraries.gradle'), project_path);
-            shell.cp('-f', path.join(project_template_dir, 'settings.gradle'), project_path);
-            check_reqs.sdk_dir().then(function(dir) {
-                console.log("Copying Gradle wrapper from " + dir);
-                copyGradleWrapper(dir, project_path);
-            }).catch(function(err) {
-                console.log("Cannot find Android SDK. Not installing Gradle wrapper.");
-            });
-
             // Manually create directories that would be empty within the template (since git doesn't track directories).
             shell.mkdir(path.join(project_path, 'libs'));
             // Add in the proper eclipse project file.

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/2d71d89c/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 1f0cd23..80e2282 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -51,6 +51,24 @@ function hasCustomRules() {
     return fs.existsSync(path.join(ROOT, 'custom_rules.xml'));
 }
 
+// Copy the gradle wrapper files on each build so that:
+// A) We don't require the Android SDK at project creation time, and
+// B) So that they are always up-to-date.
+function copyGradleWrapper() {
+    var projectPath = ROOT;
+    // check_reqs ensures that this is set.
+    var sdkDir = process.env['ANDROID_HOME'];
+    var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
+    if (process.platform == 'win32') {
+        shell.cp('-f', path.join(wrapperDir, 'gradlew.bat'), projectPath);
+    } else {
+        shell.cp('-f', path.join(wrapperDir, 'gradlew'), projectPath);
+    }
+    shell.rm('-rf', path.join(projectPath, 'gradle', 'wrapper'));
+    shell.mkdir('-p', path.join(projectPath, 'gradle'));
+    shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle'));
+}
+
 module.exports.builders = {
     ant: {
         getArgs: function(cmd) {
@@ -129,6 +147,7 @@ module.exports.builders = {
             var builder = this;
             var wrapper = path.join(ROOT, 'gradlew');
             var args = builder.getArgs('build');
+            copyGradleWrapper();
             return Q().then(function() {
                 return spawn(wrapper, args);
             }).then(function() {


[23/50] git commit: CB-7044, CB-7299 Fix up PATH problems when possible.

Posted by na...@apache.org.
CB-7044, CB-7299 Fix up PATH problems when possible.

Uses heuristics:
- Adds javac to PATH based on default install paths on Windows
- Adds javac to PATH based on JAVA_HOME
- Adds android and adb to PATH based on ANDROID_HOME
- Sets ANDROID_HOME based on location of "android"


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/0053d3dc
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/0053d3dc
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/0053d3dc

Branch: refs/heads/master
Commit: 0053d3dcade994c32dd8ddafa106fdf0e7e0f994
Parents: 0f76cc4
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Aug 15 13:42:43 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:37:13 2014 -0700

----------------------------------------------------------------------
 bin/lib/check_reqs.js       | 99 +++++++++++++++++++++++++---------------
 bin/lib/create.js           |  2 +-
 bin/templates/cordova/build |  4 +-
 3 files changed, 66 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0053d3dc/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index e8df92a..6236836 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -19,27 +19,37 @@
        under the License.
 */
 
-var shell = require('shelljs'),
+var shelljs = require('shelljs'),
     child_process = require('child_process'),
     Q     = require('q'),
     path  = require('path'),
     fs    = require('fs'),
     ROOT  = path.join(__dirname, '..', '..');
 
+var isWindows = process.platform == 'win32';
+
+function tryCommand(cmd, errMsg) {
+    var d = Q.defer();
+    child_process.exec(cmd, function(err, stdout, stderr) {
+        if (err) d.reject(new Error(errMsg));
+        else d.resolve(stdout);
+    });
+    return d.promise;
+}
 
 // Get valid target from framework/project.properties
 module.exports.get_target = function() {
     if(fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
-        var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'framework', 'project.properties'));
+        var target = shelljs.grep(/target=android-[\d+]/, path.join(ROOT, 'framework', 'project.properties'));
         return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', '');
     } else if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
         // if no target found, we're probably in a project and project.properties is in ROOT.
         // this is called on the project itself, and can support Google APIs AND Vanilla Android
-        var target = shell.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties')) ||
-          shell.grep(/target=Google Inc.:Google APIs:[\d+]/, path.join(ROOT, 'project.properties'));
+        var target = shelljs.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties')) ||
+          shelljs.grep(/target=Google Inc.:Google APIs:[\d+]/, path.join(ROOT, 'project.properties'));
         if(target == "" || !target) {
           // Try Google Glass APIs
-          target = shell.grep(/target=Google Inc.:Glass Development Kit Preview:[\d+]/, path.join(ROOT, 'project.properties'));
+          target = shelljs.grep(/target=Google Inc.:Glass Development Kit Preview:[\d+]/, path.join(ROOT, 'project.properties'));
         }
         return target.split('=')[1].replace('\n', '').replace('\r', '');
     }
@@ -47,49 +57,66 @@ module.exports.get_target = function() {
 
 // Returns a promise.
 module.exports.check_ant = function() {
-    var d = Q.defer();
-    child_process.exec('ant -version', function(err, stdout, stderr) {
-        if (err) d.reject(new Error('ERROR : executing command \'ant\', make sure you have ant installed and added to your path.'));
-        else d.resolve();
-    });
-    return d.promise;
+    return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');
 }
 
 // Returns a promise.
 module.exports.check_java = function() {
-    var d = Q.defer();
-    child_process.exec('java -version', function(err, stdout, stderr) {
-        if(err) {
-            var msg =
-                'Failed to run \'java -version\', make sure your java environment is set up\n' +
-                'including JDK and JRE.\n' +
-                'Your JAVA_HOME variable is ' + process.env.JAVA_HOME + '\n';
-            d.reject(new Error(msg + err));
+    var javacInPath = !!shelljs.which('javac');
+    var hasJavaHome = !!process.env.JAVA_HOME;
+    // Windows java installer doesn't add javac to PATH, nor set JAVA_HOME (ugh).
+    if (hasJavaHome && !javacInPath) {
+        process.env.PATH += path.delimiter + path.join(process.env.JAVA_HOME, 'bin');
+    } else if (isWindows && (!hasJavaHome || !javacInPath)) {
+        // Try to auto-detect java in the default install paths.
+        var firstJdkDir =
+            shelljs.ls(process.env.ProgramFiles + '\\java\\jdk*')[0] ||
+            shelljs.ls('C:\\Program Files\\java\\jdk*')[0] ||
+            shelljs.ls('C:\\Program Files (x86)\\java\\jdk*')[0];
+        if (firstJdkDir) {
+            // shelljs always uses / in paths.
+            firstJdkDir = firstJdkDir.replace(/\//g, path.sep);
+            if (!javacInPath) {
+                process.env.PATH += path.delimiter + path.join(firstJdkDir, 'bin');
+            }
+            process.env.JAVA_HOME = firstJdkDir;
         }
-        else d.resolve();
+    }
+    var msg =
+        'Failed to run "java -version", make sure your java environment is set up\n' +
+        'including JDK and JRE.\n' +
+        'Your JAVA_HOME variable is: ' + process.env.JAVA_HOME;
+    return tryCommand('java -version', msg)
+    .then(function() {
+        msg = 'Failed to run "javac -version", make sure you have a Java JDK (not just a JRE) installed.';
+        return tryCommand('javac -version', msg)
     });
-    return d.promise;
 }
 
 // Returns a promise.
 module.exports.check_android = function() {
-    var valid_target = this.get_target();
-    var d = Q.defer();
-    child_process.exec('android list targets', function(err, stdout, stderr) {
-        if (err) d.reject(stderr);
-        else d.resolve(stdout);
-    });
+    var androidCmdPath = !!shelljs.which('android');
+    var adbInPath = !!shelljs.which('adb');
+    var hasAndroidHome = !!process.env.ANDROID_HOME;
+    if (hasAndroidHome && !androidCmdPath) {
+        process.env.PATH += path.delimiter + path.join(process.env.ANDROID_HOME, 'tools');
+    }
+    if (androidCmdPath && !hasAndroidHome) {
+        process.env.ANDROID_HOME = path.dirname(path.dirname(androidCmdPath));
+        hasAndroidHome = true;
+    }
+    if (hasAndroidHome && !adbInPath) {
+        process.env.PATH += path.delimiter + path.join(process.env.ANDROID_HOME, 'platform-tools');
+    }
 
-    return d.promise.then(function(output) {
+    var valid_target = this.get_target();
+    var msg = 'Failed to run "android". Make sure you have the latest Android SDK installed, and that the "android" command (inside the tools/ folder) is added to your PATH.';
+    return tryCommand('android list targets', msg)
+    .then(function(output) {
         if (!output.match(valid_target)) {
-            return Q.reject(new Error('Please install Android target ' + valid_target.split('-')[1] + ' (the Android newest SDK). Make sure you have the latest Android tools installed as well. Run \"android\" from your command-line to install/update any missing SDKs or tools.'));
-        } 
-        return Q();
-    }, function(stderr) {
-        if (stderr.match(/command\snot\sfound/) || stderr.match(/is not recognized as an internal or external command/)) {
-            return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
-        } else {
-            return Q.reject(new Error('An error occurred while listing Android targets. Error: ' + stderr ));
+            return Q.reject(new Error('Please install Android target ' + valid_target.split('-')[1] +
+                ' (the Android newest SDK). Make sure you have the latest Android tools installed as well.' +
+                ' Run "android" from your command-line to install/update any missing SDKs or tools.'));
         }
     });
 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0053d3dc/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 105699a..d372fab 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -230,7 +230,7 @@ exports.createProject = function(project_path, package_name, project_name, proje
     })
     // Check that requirements are met and proper targets are installed
     .then(function() {
-        check_reqs.run();
+        return check_reqs.run();
     }).then(function() {
         // Log the given values for the project
         console.log('Creating Cordova project for the amazon-fireos platform:');

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/0053d3dc/bin/templates/cordova/build
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/build b/bin/templates/cordova/build
index a38f3b6..2d58901 100755
--- a/bin/templates/cordova/build
+++ b/bin/templates/cordova/build
@@ -28,9 +28,9 @@ if(args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
                     args[2] == 'help' || args[2] == '-help' || args[2] == '/help') {
     build.help();
 } else {
-    reqs.run().then(function() {
+    reqs.run().done(function() {
         return build.run(args[2]);
-    }).done(null, function(err) {
+    }, function(err) {
         console.error(err);
         process.exit(2);
     });


[15/50] git commit: Amazon related fixes after uplevel.

Posted by na...@apache.org.
Amazon related fixes after uplevel.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/5843c7e0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/5843c7e0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/5843c7e0

Branch: refs/heads/master
Commit: 5843c7e037d29c09549bb81e9095c98ed62032ce
Parents: 7d68405
Author: Archana Naik <na...@lab126.com>
Authored: Thu Aug 14 11:16:40 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 14 11:16:40 2014 -0700

----------------------------------------------------------------------
 bin/templates/cordova/version                   |    2 +-
 framework/src/org/apache/cordova/App.java       |   18 +-
 .../src/org/apache/cordova/CordovaActivity.java |   14 +-
 .../org/apache/cordova/CordovaChromeClient.java |    3 +-
 .../src/org/apache/cordova/CordovaWebView.java  |   48 +-
 .../src/org/apache/cordova/PluginManager.java   |   81 +-
 test/assets/www/cordova.js                      | 1388 ++++++++----------
 .../test/CordovaWebViewTestActivity.java        |    5 +-
 .../test/junit/BackButtonMultiPageTest.java     |    6 +-
 .../cordova/test/junit/PluginManagerTest.java   |   11 +-
 10 files changed, 688 insertions(+), 888 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/bin/templates/cordova/version
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/version b/bin/templates/cordova/version
index 61b62e6..0828627 100755
--- a/bin/templates/cordova/version
+++ b/bin/templates/cordova/version
@@ -20,6 +20,6 @@
 */
 
 // Coho updates this line:
-var VERSION = "3.4.0-dev";
+var VERSION = “3.6.0-dev";
 
 console.log(VERSION);

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/framework/src/org/apache/cordova/App.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/App.java b/framework/src/org/apache/cordova/App.java
index 160923c..7eaceea 100755
--- a/framework/src/org/apache/cordova/App.java
+++ b/framework/src/org/apache/cordova/App.java
@@ -33,6 +33,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.telephony.TelephonyManager;
 import android.view.KeyEvent;
+import android.util.Log;
 
 import java.util.HashMap;
 
@@ -131,7 +132,7 @@ public class App extends CordovaPlugin {
      * @throws JSONException
      */
     public void loadUrl(String url, JSONObject props) throws JSONException {
-        LOG.d("App", "App.loadUrl("+url+","+props+")");
+        Log.d(TAG, "App.loadUrl("+url+","+props+")");
         int wait = 0;
         boolean openExternal = false;
         boolean clearHistory = false;
@@ -213,7 +214,7 @@ public class App extends CordovaPlugin {
      * @param override		T=override, F=cancel override
      */
     public void overrideBackbutton(boolean override) {
-        LOG.i("App", "WARNING: Back Button Default Behavior will be overridden.  The backbutton event will be fired!");
+        Log.i("App", "WARNING: Back Button Default Behavior will be overridden.  The backbutton event will be fired!");
         webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override);
     }
 
@@ -225,7 +226,7 @@ public class App extends CordovaPlugin {
      * @param override      T=override, F=cancel override
      */
     public void overrideButton(String button, boolean override) {
-        LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden.  The volume event will be fired!");
+        Log.i(TAG, "WARNING: Volume Button Default Behavior will be overridden.  The volume event will be fired!");
         if (button.equals("volumeup")) {
             webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override);
         }
@@ -270,15 +271,15 @@ public class App extends CordovaPlugin {
                     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");
+                            Log.i(TAG, "Telephone RINGING");
                             webView.postMessage("telephone", "ringing");
                         }
                         else if (extraData.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
-                            LOG.i(TAG, "Telephone OFFHOOK");
+                            Log.i(TAG, "Telephone OFFHOOK");
                             webView.postMessage("telephone", "offhook");
                         }
                         else if (extraData.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
-                            LOG.i(TAG, "Telephone IDLE");
+                            Log.i(TAG, "Telephone IDLE");
                             webView.postMessage("telephone", "idle");
                         }
                     }
@@ -296,6 +297,9 @@ public class App extends CordovaPlugin {
      */
     public void onDestroy()
     {
-        this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
+        if (this.telephonyReceiver != null) {
+            this.cordova.getActivity().unregisterReceiver(this.telephonyReceiver);
+            this.telephonyReceiver = null;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/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 91c24d7..d3dc793 100755
--- a/framework/src/org/apache/cordova/CordovaActivity.java
+++ b/framework/src/org/apache/cordova/CordovaActivity.java
@@ -291,7 +291,9 @@ public class CordovaActivity extends Activity implements CordovaInterface {
      * require a more specialized web view.
      */
     protected CordovaWebView makeWebView() {
-        return new CordovaWebView(CordovaActivity.this);
+        CordovaWebView newWebView = new CordovaWebView(CordovaActivity.this);
+        this.getFactory().initializeWebView(newWebView, 0xFFFFFF, false, null);
+        return newWebView;
     }
 
     /**
@@ -318,7 +320,6 @@ public class CordovaActivity extends Activity implements CordovaInterface {
         return webView.makeWebChromeClient(this);
     }
 
-<<<<<<< HEAD
     /**
      * Construct the AmazonWebkitFactory
      * 
@@ -371,7 +372,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
             LOG.e(TAG, "WebKit factory initialization failed. Make sure you have android_interface.jar in libs folder.");
             displayError(ERROR_DIALOG_TITLE, ANDROID_WEBKIT_FACTORY_MISSING, ERROR_DIALOG_OK_BUTTON, true);
         } catch (Exception e) {
-            LOG.e(TAG, "WebKit factory initialization failed.");
+            LOG.e(TAG, "WebKit factory initialization failed. e - " + e.getMessage());
             displayError(ERROR_DIALOG_TITLE, ANDROID_WEBKIT_FACTORY_MISSING, ERROR_DIALOG_OK_BUTTON, true);
         }
         
@@ -380,14 +381,12 @@ public class CordovaActivity extends Activity implements CordovaInterface {
     /**
      * Create and initialize web container with default web view objects.
      */
-    @Deprecated // No need to call init() anymore.
-=======
->>>>>>> a14c794... Un-deprecate CordovaActivity.init() - it's needed to tweak prefs in onCreate
     public void init() {
     	if (factory != null) {
     		CordovaWebView webView = makeWebView();
     		this.init(webView, makeWebViewClient(webView), makeChromeClient(webView));
     	}
+    }
 
     @SuppressLint("NewApi")
     @Deprecated // Call init() instead and override makeWebView() to customize.
@@ -434,7 +433,6 @@ public class CordovaActivity extends Activity implements CordovaInterface {
      * Load the url into the webview.
      */
     public void loadUrl(String url) {
-<<<<<<< HEAD
         // Init web view if not already done
         if (this.appView == null) {
             this.init();
@@ -444,11 +442,9 @@ public class CordovaActivity extends Activity implements CordovaInterface {
             }
         }
 
-=======
         if (appView == null) {
             init();
         }
->>>>>>> a14c794... Un-deprecate CordovaActivity.init() - it's needed to tweak prefs in onCreate
         this.splashscreenTime = preferences.getInteger("SplashScreenDelay", this.splashscreenTime);
         String splash = preferences.getString("SplashScreen", null);
         if(this.splashscreenTime > 0 && splash != null)

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/framework/src/org/apache/cordova/CordovaChromeClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaChromeClient.java b/framework/src/org/apache/cordova/CordovaChromeClient.java
index 24c1aa1..73a765f 100755
--- a/framework/src/org/apache/cordova/CordovaChromeClient.java
+++ b/framework/src/org/apache/cordova/CordovaChromeClient.java
@@ -39,7 +39,8 @@ import com.amazon.android.webkit.AmazonWebView;
 import com.amazon.android.webkit.AmazonGeolocationPermissions;
 import com.amazon.android.webkit.AmazonMediaDeviceSettings;
 
-
+import org.json.JSONObject;
+import org.json.JSONException;
 import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/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 8171b18..fbc1932 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -62,7 +62,7 @@ public class CordovaWebView extends AmazonWebView {
 
 
     public static final String TAG = "CordovaWebView";
-    public static final String CORDOVA_VERSION = "3.4.0-dev";
+    public static final String CORDOVA_VERSION = "3.6.0-dev";
 
     private HashSet<Integer> boundKeyCodes = new HashSet<Integer>();
 
@@ -149,7 +149,7 @@ public class CordovaWebView extends AmazonWebView {
             Gravity.CENTER);
     
     public CordovaWebView(Context context) {
-        this(context, null);
+        this(context, (AttributeSet)null);
     }
 
 ////fireos_change ////
@@ -162,7 +162,7 @@ public class CordovaWebView extends AmazonWebView {
      * @param extraData 
      */
     public CordovaWebView(Context context, Bundle extraData) {
-        this(context, null);
+        this(context, (AttributeSet)null);
  
         if (CordovaInterface.class.isInstance(context))
         {
@@ -173,8 +173,6 @@ public class CordovaWebView extends AmazonWebView {
         {
             Log.d(TAG, "Your activity must implement CordovaInterface to work");
         }
-        this.loadConfiguration();
-        this.setup();
     }
 ////fireos_change ////
     
@@ -192,13 +190,13 @@ public class CordovaWebView extends AmazonWebView {
     public CordovaWebView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }
-
+/*
     @TargetApi(11)
     @Deprecated
     public CordovaWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
         super(context, attrs, defStyle, privateBrowsing);
     }
-
+*/
     // Use two-phase init so that the control will work with XML layouts.
     public void init(CordovaInterface cordova, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient,
             List<PluginEntry> pluginEntries, Whitelist whitelist, CordovaPreferences preferences) {
@@ -206,6 +204,7 @@ public class CordovaWebView extends AmazonWebView {
             throw new IllegalStateException();
         }
         this.cordova = cordova;
+        //this.cordova.getFactory().initializeWebView(this, 0xFFFFFF, false, null);
         this.viewClient = webViewClient;
         this.chromeClient = webChromeClient;
         this.whitelist = whitelist;
@@ -279,7 +278,8 @@ public class CordovaWebView extends AmazonWebView {
         if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
             || (getWebViewBackend(this.cordova.getFactory()) == WebViewBackend.CHROMIUM))
             Level16Apis.enableUniversalAccess(settings);
-
+        String databasePath = getContext().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
+        
         if (getWebViewBackend(this.cordova.getFactory()) == WebViewBackend.ANDROID) {
         	File appCacheDir = this.cordova.getActivity().getDir(APPCACHE_DIR, Context.MODE_PRIVATE);
             if (appCacheDir.exists()) {
@@ -292,7 +292,6 @@ public class CordovaWebView extends AmazonWebView {
             }
         // Enable database
         // We keep this disabled because we use or shim to get around DOM_EXCEPTION_ERROR_16
-        String databasePath = getContext().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
         settings.setDatabaseEnabled(true);
         settings.setDatabasePath(databasePath);
         
@@ -331,12 +330,15 @@ public class CordovaWebView extends AmazonWebView {
         }
         userAgent = userAgent.concat(" " + CORDOVA_AMAZON_FIREOS_UA); 
         settings.setUserAgentString(userAgent);
-
+        //__FireOS__
+        settings.setUseWideViewPort(true);
+        //__FireOS__
+        
         // Enable AppCache
         // Fix for CB-2282
-        settings.setAppCacheMaxSize(5 * 1048576);
-        settings.setAppCachePath(databasePath);
-        settings.setAppCacheEnabled(true);
+        //settings.setAppCacheMaxSize(5 * 1048576);
+        //settings.setAppCachePath(databasePath);
+        //settings.setAppCacheEnabled(true);
         
         // Fix for CB-1405
         // Google issue 4641
@@ -355,25 +357,17 @@ public class CordovaWebView extends AmazonWebView {
         }
         // end CB-1405
     }
-
-        settings.setUseWideViewPort(true);
-
-        pluginManager = new PluginManager(this, this.cordova);
-        jsMessageQueue = new NativeToJsMessageQueue(this, cordova);
-        exposedJsApi = new ExposedJsApi(pluginManager, jsMessageQueue);
-        resourceApi = new CordovaResourceApi(this.getContext(), pluginManager);
-        exposeJsInterface();
-
+/*
     @TargetApi(Build.VERSION_CODES.KITKAT)
     private void enableRemoteDebugging() {
         try {
-            WebView.setWebContentsDebuggingEnabled(true);
+            AmazonWebView.setWebContentsDebuggingEnabled(true);
         } catch (IllegalArgumentException e) {
             Log.d(TAG, "You have one job! To turn on Remote Web Debugging! YOU HAVE FAILED! ");
             e.printStackTrace();
         }
     }
-
+*/
     public CordovaChromeClient makeWebChromeClient(CordovaInterface cordova) {
         return new CordovaChromeClient(cordova, this);
     }
@@ -425,12 +419,6 @@ public class CordovaWebView extends AmazonWebView {
     }
 
     @Override
-    public void setWebViewClient(WebViewClient client) {
-        this.viewClient = (CordovaWebViewClient)client;
-        super.setWebViewClient(client);
-    }
-
-    @Override
     public void setWebChromeClient(AmazonWebChromeClient client) {
         this.chromeClient = (CordovaChromeClient)client;
         super.setWebChromeClient(client);

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/framework/src/org/apache/cordova/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java
index 97988d8..2af8f45 100755
--- a/framework/src/org/apache/cordova/PluginManager.java
+++ b/framework/src/org/apache/cordova/PluginManager.java
@@ -22,6 +22,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
 
 import org.apache.cordova.CordovaWebView;
 import org.apache.cordova.CallbackContext;
@@ -31,6 +33,7 @@ import org.apache.cordova.PluginEntry;
 import org.apache.cordova.PluginResult;
 import org.json.JSONException;
 
+
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Debug;
@@ -47,8 +50,8 @@ public class PluginManager {
     private static final int SLOW_EXEC_WARNING_THRESHOLD = Debug.isDebuggerConnected() ? 60 : 16;
 
     // List of service entries
-    private final HashMap<String, CordovaPlugin> pluginMap = new HashMap<String, CordovaPlugin>();
-    private final HashMap<String, PluginEntry> entryMap = new LinkedHashMap<String, PluginEntry>();
+    private HashMap<String, CordovaPlugin> pluginMap = new LinkedHashMap<String, CordovaPlugin>();
+    private HashMap<String, PluginEntry> entryMap = new LinkedHashMap<String, PluginEntry>();
 
     private final CordovaInterface ctx;
     private final CordovaWebView app;
@@ -90,7 +93,7 @@ public class PluginManager {
         LOG.d(TAG, "init()");
         this.onPause(false);
         this.onDestroy();
-        pluginMap.clear();
+        //pluginMap.clear();
         this.startupPlugins();
     }
 
@@ -179,6 +182,7 @@ public class PluginManager {
      * @return              CordovaPlugin or null
      */
     public CordovaPlugin getPlugin(String service) {
+        Log.d(TAG, "in getPlugin for service - " + service);
         CordovaPlugin ret = pluginMap.get(service);
         if (ret == null) {
             PluginEntry pe = entryMap.get(service);
@@ -188,10 +192,24 @@ public class PluginManager {
             if (pe.plugin != null) {
                 ret = pe.plugin;
             } else {
-                ret = instantiatePlugin(pe.pluginClass);
+                ret = instantiatePlugin(pe.pluginClass);   
             }
             ret.privateInitialize(ctx, app, app.getPreferences());
-            pluginMap.put(service, ret);
+            HashMap<String, CordovaPlugin> tmpPlugins = new LinkedHashMap<String, CordovaPlugin>();
+            List<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(entryMap.values());
+            for (PluginEntry pluginEntry : pluginEntries) {
+                if (pluginEntry.plugin != null) {
+                    tmpPlugins.put(pluginEntry.service, pluginEntry.plugin);
+                } else {
+                    CordovaPlugin plugin = pluginMap.get(pluginEntry.service);
+                    if (plugin != null) {
+                        tmpPlugins.put(pluginEntry.service, plugin);
+                    } else if (pluginEntry.service.equals(service)) {
+                        tmpPlugins.put(service, ret);
+                    }
+                }
+            }
+            this.pluginMap = tmpPlugins;
         }
         return ret;
     }
@@ -232,11 +250,21 @@ public class PluginManager {
 		 */
 
 		// create list from existing set of plugin entries, then add new item to list
-		List<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(entries.values());
+		List<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(entryMap.values());
 		pluginEntries.add(entry);
 
+        //Update PluginMap as well
+        if (entry.plugin != null) {
+            entry.plugin.privateInitialize(ctx, app, app.getPreferences());
+            pluginMap.put(entry.service, entry.plugin);
+        }
 		// recreate final set entries in priority order
 		this.addServices(pluginEntries);
+        
+        List<String> urlFilters = entry.getUrlFilters();
+        if (urlFilters != null) {
+            urlMap.put(entry.service, urlFilters);
+        }
 	}
 
     /**
@@ -251,26 +279,27 @@ public class PluginManager {
         Collections.sort(services);
 
         // create a new map from the prioritized list, and use it as the primary set of entries
+        // update pluginMap as well
+        
+        HashMap<String, CordovaPlugin> tmpPlugins = new LinkedHashMap<String, CordovaPlugin>();
         HashMap<String, PluginEntry> tmpEntries = new LinkedHashMap<String, PluginEntry>();
         for (PluginEntry pluginEntry : services) {
             tmpEntries.put(pluginEntry.service, pluginEntry);
+            if (pluginEntry.plugin != null) {
+                tmpPlugins.put(pluginEntry.service, pluginEntry.plugin);
+            } else {
+                CordovaPlugin plugin = pluginMap.get(pluginEntry.service);
+                if (plugin != null) {
+                    tmpPlugins.put(pluginEntry.service, plugin);
+                }
+            }
         }
-        this.entries = tmpEntries;
+        
+        this.entryMap = tmpEntries;
+        this.pluginMap = tmpPlugins;
+        
     }
     
-    public void addService(PluginEntry entry) {
-        this.entryMap.put(entry.service, entry);
-        List<String> urlFilters = entry.getUrlFilters();
-        if (urlFilters != null) {
-            urlMap.put(entry.service, urlFilters);
-        }
-        if (entry.plugin != null) {
-            entry.plugin.privateInitialize(ctx, app, app.getPreferences());
-            pluginMap.put(entry.service, entry.plugin);
-        }
-
-    }
-
     /**
      * Called when the system is about to start resuming a previous activity.
      *
@@ -297,9 +326,15 @@ public class PluginManager {
      * The final call you receive before your activity is destroyed.
      */
     public void onDestroy() {
-        for (CordovaPlugin plugin : this.pluginMap.values()) {
-            plugin.onDestroy();
+        try {
+            for (CordovaPlugin plugin : this.pluginMap.values()) {
+                Log.d(TAG, "In destroy");
+                plugin.onDestroy();
+            }
+        } catch (Exception e) {
+            Log.e(TAG, e.getMessage());
         }
+
     }
 
     /**
@@ -314,6 +349,7 @@ public class PluginManager {
         if (obj != null) {
             return obj;
         }
+
         for (CordovaPlugin plugin : this.pluginMap.values()) {
             obj = plugin.onMessage(id, data);
             if (obj != null) {
@@ -348,6 +384,7 @@ public class PluginManager {
             if (urlFilters != null) {
                 for (String s : urlFilters) {
                     if (url.startsWith(s)) {
+                        Log.d(TAG,"onOverrideUrlLoading()");
                         return getPlugin(entry.service).onOverrideUrlLoading(url);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/test/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/test/assets/www/cordova.js b/test/assets/www/cordova.js
index 4fc9746..0a87e6c 100755
--- a/test/assets/www/cordova.js
+++ b/test/assets/www/cordova.js
@@ -1,5 +1,5 @@
 // Platform: android
-// 2.7.0rc1-169-g87cc336
+// 3.6.0-dev-70cdca3
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,8 +19,11 @@
  under the License.
 */
 ;(function() {
-var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-169-g87cc336';
-// file: lib/scripts/require.js
+var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-70cdca3';
+// file: src/scripts/require.js
+
+/*jshint -W079 */
+/*jshint -W020 */
 
 var require,
     define;
@@ -31,7 +34,7 @@ var require,
         requireStack = [],
     // Map of module ID -> index into requireStack of modules currently being built.
         inProgressModules = {},
-        SEPERATOR = ".";
+        SEPARATOR = ".";
 
 
 
@@ -41,7 +44,7 @@ var require,
                 var resultantId = id;
                 //Its a relative path, so lop off the last portion and add the id (minus "./")
                 if (id.charAt(0) === ".") {
-                    resultantId = module.id.slice(0, module.id.lastIndexOf(SEPERATOR)) + SEPERATOR + id.slice(2);
+                    resultantId = module.id.slice(0, module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2);
                 }
                 return require(resultantId);
             };
@@ -95,21 +98,12 @@ if (typeof module === "object" && typeof require === "function") {
     module.exports.define = define;
 }
 
-// file: lib/cordova.js
+// file: src/cordova.js
 define("cordova", function(require, exports, module) {
 
 
 var channel = require('cordova/channel');
-
-/**
- * Listen for DOMContentLoaded and notify our channel subscribers.
- */
-document.addEventListener('DOMContentLoaded', function() {
-    channel.onDOMContentLoaded.fire();
-}, false);
-if (document.readyState == 'complete' || document.readyState == 'interactive') {
-    channel.onDOMContentLoaded.fire();
-}
+var platform = require('cordova/platform');
 
 /**
  * Intercept calls to addEventListener + removeEventListener and handle deviceready,
@@ -177,21 +171,12 @@ function createEvent(type, data) {
     return event;
 }
 
-if(typeof window.console === "undefined") {
-    window.console = {
-        log:function(){}
-    };
-}
-// there are places in the framework where we call `warn` also, so we should make sure it exists
-if(typeof window.console.warn === "undefined") {
-    window.console.warn = function(msg) {
-        this.log("warn: " + msg);
-    }
-}
 
 var cordova = {
     define:define,
     require:require,
+    version:CORDOVA_JS_BUILD_LABEL,
+    platformId:platform.id,
     /**
      * Methods to add/remove your own addEventListener hijacking on document + window.
      */
@@ -227,16 +212,16 @@ var cordova = {
         var evt = createEvent(type, data);
         if (typeof documentEventHandlers[type] != 'undefined') {
             if( bNoDetach ) {
-              documentEventHandlers[type].fire(evt);
+                documentEventHandlers[type].fire(evt);
             }
             else {
-              setTimeout(function() {
-                  // Fire deviceready on listeners that were registered before cordova.js was loaded.
-                  if (type == 'deviceready') {
-                      document.dispatchEvent(evt);
-                  }
-                  documentEventHandlers[type].fire(evt);
-              }, 0);
+                setTimeout(function() {
+                    // Fire deviceready on listeners that were registered before cordova.js was loaded.
+                    if (type == 'deviceready') {
+                        document.dispatchEvent(evt);
+                    }
+                    documentEventHandlers[type].fire(evt);
+                }, 0);
             }
         } else {
             document.dispatchEvent(evt);
@@ -280,7 +265,7 @@ var cordova = {
         try {
             cordova.callbackFromNative(callbackId, true, args.status, [args.message], args.keepCallback);
         } catch (e) {
-            console.log("Error in error callback: " + callbackId + " = "+e);
+            console.log("Error in success callback: " + callbackId + " = "+e);
         }
     },
 
@@ -326,16 +311,57 @@ var cordova = {
     }
 };
 
-// Register pause, resume and deviceready channels as events on document.
-channel.onPause = cordova.addDocumentEventHandler('pause');
-channel.onResume = cordova.addDocumentEventHandler('resume');
-channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');
 
 module.exports = cordova;
 
 });
 
-// file: lib/common/argscheck.js
+// file: src/android/android/nativeapiprovider.js
+define("cordova/android/nativeapiprovider", function(require, exports, module) {
+
+/**
+ * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
+ */
+
+var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi');
+var currentApi = nativeApi;
+
+module.exports = {
+    get: function() { return currentApi; },
+    setPreferPrompt: function(value) {
+        currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi;
+    },
+    // Used only by tests.
+    set: function(value) {
+        currentApi = value;
+    }
+};
+
+});
+
+// file: src/android/android/promptbasednativeapi.js
+define("cordova/android/promptbasednativeapi", function(require, exports, module) {
+
+/**
+ * Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
+ * This is used pre-JellyBean, where addJavascriptInterface() is disabled.
+ */
+
+module.exports = {
+    exec: function(bridgeSecret, service, action, callbackId, argsJson) {
+        return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
+    },
+    setNativeToJsBridgeMode: function(bridgeSecret, value) {
+        prompt(value, 'gap_bridge_mode:' + bridgeSecret);
+    },
+    retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
+        return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
+    }
+};
+
+});
+
+// file: src/common/argscheck.js
 define("cordova/argscheck", function(require, exports, module) {
 
 var exec = require('cordova/exec');
@@ -353,7 +379,7 @@ var typeMap = {
 };
 
 function extractParamName(callee, argIndex) {
-  return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex];
+    return (/.*?\((.*?)\)/).exec(callee)[1].split(', ')[argIndex];
 }
 
 function checkArgs(spec, functionName, args, opt_callee) {
@@ -401,14 +427,24 @@ moduleExports.enableChecks = true;
 
 });
 
-// file: lib/common/base64.js
+// file: src/common/base64.js
 define("cordova/base64", function(require, exports, module) {
 
 var base64 = exports;
 
 base64.fromArrayBuffer = function(arrayBuffer) {
-  var array = new Uint8Array(arrayBuffer);
-  return uint8ToBase64(array);
+    var array = new Uint8Array(arrayBuffer);
+    return uint8ToBase64(array);
+};
+
+base64.toArrayBuffer = function(str) {
+    var decodedStr = typeof atob != 'undefined' ? atob(str) : new Buffer(str,'base64').toString('binary');
+    var arrayBuffer = new ArrayBuffer(decodedStr.length);
+    var array = new Uint8Array(arrayBuffer);
+    for (var i=0, len=decodedStr.length; i < len; i++) {
+        array[i] = decodedStr.charCodeAt(i);
+    }
+    return arrayBuffer;
 };
 
 //------------------------------------------------------------------------------
@@ -430,7 +466,7 @@ var b64_12bitTable = function() {
     }
     b64_12bitTable = function() { return b64_12bit; };
     return b64_12bit;
-}
+};
 
 function uint8ToBase64(rawData) {
     var numBytes = rawData.byteLength;
@@ -457,7 +493,7 @@ function uint8ToBase64(rawData) {
 
 });
 
-// file: lib/common/builder.js
+// file: src/common/builder.js
 define("cordova/builder", function(require, exports, module) {
 
 var utils = require('cordova/utils');
@@ -497,36 +533,36 @@ function assignOrWrapInDeprecateGetter(obj, key, value, message) {
 function include(parent, objects, clobber, merge) {
     each(objects, function (obj, key) {
         try {
-          var result = obj.path ? require(obj.path) : {};
-
-          if (clobber) {
-              // Clobber if it doesn't exist.
-              if (typeof parent[key] === 'undefined') {
-                  assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
-              } else if (typeof obj.path !== 'undefined') {
-                  // If merging, merge properties onto parent, otherwise, clobber.
-                  if (merge) {
-                      recursiveMerge(parent[key], result);
-                  } else {
-                      assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
-                  }
-              }
-              result = parent[key];
-          } else {
-            // Overwrite if not currently defined.
-            if (typeof parent[key] == 'undefined') {
-              assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
+            var result = obj.path ? require(obj.path) : {};
+
+            if (clobber) {
+                // Clobber if it doesn't exist.
+                if (typeof parent[key] === 'undefined') {
+                    assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
+                } else if (typeof obj.path !== 'undefined') {
+                    // If merging, merge properties onto parent, otherwise, clobber.
+                    if (merge) {
+                        recursiveMerge(parent[key], result);
+                    } else {
+                        assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
+                    }
+                }
+                result = parent[key];
             } else {
-              // Set result to what already exists, so we can build children into it if they exist.
-              result = parent[key];
+                // Overwrite if not currently defined.
+                if (typeof parent[key] == 'undefined') {
+                    assignOrWrapInDeprecateGetter(parent, key, result, obj.deprecated);
+                } else {
+                    // Set result to what already exists, so we can build children into it if they exist.
+                    result = parent[key];
+                }
             }
-          }
 
-          if (obj.children) {
-            include(result, obj.children, clobber, merge);
-          }
+            if (obj.children) {
+                include(result, obj.children, clobber, merge);
+            }
         } catch(e) {
-          utils.alert('Exception building cordova JS globals: ' + e + ' for key "' + key + '"');
+            utils.alert('Exception building Cordova JS globals: ' + e + ' for key "' + key + '"');
         }
     });
 }
@@ -570,7 +606,7 @@ exports.replaceHookForTesting = function() {};
 
 });
 
-// file: lib/common/channel.js
+// file: src/common/channel.js
 define("cordova/channel", function(require, exports, module) {
 
 var utils = require('cordova/utils'),
@@ -789,6 +825,7 @@ channel.createSticky('onNativeReady');
 channel.createSticky('onCordovaReady');
 
 // Event to indicate that all automatically loaded JS plugins are loaded and ready.
+// FIXME remove this
 channel.createSticky('onPluginsReady');
 
 // Event to indicate that Cordova is ready
@@ -811,37 +848,7 @@ module.exports = channel;
 
 });
 
-// file: lib/common/commandProxy.js
-define("cordova/commandProxy", function(require, exports, module) {
-
-
-// internal map of proxy function
-var CommandProxyMap = {};
-
-module.exports = {
-
-    // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...);
-    add:function(id,proxyObj) {
-        console.log("adding proxy for " + id);
-        CommandProxyMap[id] = proxyObj;
-        return proxyObj;
-    },
-
-    // cordova.commandProxy.remove("Accelerometer");
-    remove:function(id) {
-        var proxy = CommandProxyMap[id];
-        delete CommandProxyMap[id];
-        CommandProxyMap[id] = null;
-        return proxy;
-    },
-
-    get:function(service,action) {
-        return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null );
-    }
-};
-});
-
-// file: lib/android/exec.js
+// file: src/android/exec.js
 define("cordova/exec", function(require, exports, module) {
 
 /**
@@ -859,16 +866,13 @@ define("cordova/exec", function(require, exports, module) {
  * @param {String[]} [args]     Zero or more arguments to pass to the method
  */
 var cordova = require('cordova'),
-    nativeApiProvider = require('cordova/plugin/android/nativeapiprovider'),
+    nativeApiProvider = require('cordova/android/nativeapiprovider'),
     utils = require('cordova/utils'),
     base64 = require('cordova/base64'),
+    channel = require('cordova/channel'),
     jsToNativeModes = {
         PROMPT: 0,
-        JS_OBJECT: 1,
-        // This mode is currently for benchmarking purposes only. It must be enabled
-        // on the native side through the ENABLE_LOCATION_CHANGE_EXEC_MODE
-        // constant within CordovaWebViewClient.java before it will work.
-        LOCATION_CHANGE: 2
+        JS_OBJECT: 1
     },
     nativeToJsModes = {
         // Polls for messages using the JS->Native bridge.
@@ -888,9 +892,17 @@ var cordova = require('cordova'),
     jsToNativeBridgeMode,  // Set lazily.
     nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT,
     pollEnabled = false,
-    messagesFromNative = [];
+    messagesFromNative = [],
+    bridgeSecret = -1;
 
 function androidExec(success, fail, service, action, args) {
+    if (bridgeSecret < 0) {
+        // If we ever catch this firing, we'll need to queue up exec()s
+        // and fire them once we get a secret. For now, I don't think
+        // it's possible for exec() to be called since plugins are parsed but
+        // not run until until after onNativeReady.
+        throw new Error('exec() called without bridgeSecret');
+    }
     // Set default bridge modes if they have not already been set.
     // By default, we use the failsafe, since addJavascriptInterface breaks too often
     if (jsToNativeBridgeMode === undefined) {
@@ -900,7 +912,7 @@ function androidExec(success, fail, service, action, args) {
     // Process any ArrayBuffers in the args into a string.
     for (var i = 0; i < args.length; i++) {
         if (utils.typeName(args[i]) == 'ArrayBuffer') {
-            args[i] = utils.encodeBase64(args[i]);
+            args[i] = base64.fromArrayBuffer(args[i]);
         }
     }
 
@@ -911,25 +923,35 @@ function androidExec(success, fail, service, action, args) {
         cordova.callbacks[callbackId] = {success:success, fail:fail};
     }
 
-    if (jsToNativeBridgeMode == jsToNativeModes.LOCATION_CHANGE) {
-        window.location = 'http://cdv_exec/' + service + '#' + action + '#' + callbackId + '#' + argsJson;
+    var messages = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson);
+    // If argsJson was received by Java as null, try again with the PROMPT bridge mode.
+    // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2.  See CB-2666.
+    if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") {
+        androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
+        androidExec(success, fail, service, action, args);
+        androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
+        return;
     } else {
-        var messages = nativeApiProvider.get().exec(service, action, callbackId, argsJson);
-        // If argsJson was received by Java as null, try again with the PROMPT bridge mode.
-        // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2.  See CB-2666.
-        if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && messages === "@Null arguments.") {
-            androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
-            androidExec(success, fail, service, action, args);
-            androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
-            return;
-        } else {
-            androidExec.processMessages(messages);
-        }
+        androidExec.processMessages(messages, true);
     }
 }
 
-function pollOnce() {
-    var msg = nativeApiProvider.get().retrieveJsMessages();
+androidExec.init = function() {
+    bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
+    channel.onNativeReady.fire();
+};
+
+function pollOnceFromOnlineEvent() {
+    pollOnce(true);
+}
+
+function pollOnce(opt_fromOnlineEvent) {
+    if (bridgeSecret < 0) {
+        // This can happen when the NativeToJsMessageQueue resets the online state on page transitions.
+        // We know there's nothing to retrieve, so no need to poll.
+        return;
+    }
+    var msg = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent);
     androidExec.processMessages(msg);
 }
 
@@ -948,8 +970,8 @@ function hookOnlineApis() {
     // It currently fires them only on document though, so we bridge them
     // to window here (while first listening for exec()-releated online/offline
     // events).
-    window.addEventListener('online', pollOnce, false);
-    window.addEventListener('offline', pollOnce, false);
+    window.addEventListener('online', pollOnceFromOnlineEvent, false);
+    window.addEventListener('offline', pollOnceFromOnlineEvent, false);
     cordova.addWindowEventHandler('online');
     cordova.addWindowEventHandler('offline');
     document.addEventListener('online', proxyEvent, false);
@@ -963,7 +985,6 @@ androidExec.nativeToJsModes = nativeToJsModes;
 
 androidExec.setJsToNativeBridgeMode = function(mode) {
     if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
-        console.log('Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only.');
         mode = jsToNativeModes.PROMPT;
     }
     nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT);
@@ -980,7 +1001,10 @@ androidExec.setNativeToJsBridgeMode = function(mode) {
 
     nativeToJsBridgeMode = mode;
     // Tell the native side to switch modes.
-    nativeApiProvider.get().setNativeToJsBridgeMode(mode);
+    // Otherwise, it will be set by androidExec.init()
+    if (bridgeSecret >= 0) {
+        nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode);
+    }
 
     if (mode == nativeToJsModes.POLLING) {
         pollEnabled = true;
@@ -1028,53 +1052,322 @@ function processMessage(message) {
             }
             cordova.callbackFromNative(callbackId, success, status, [payload], keepCallback);
         } else {
-            console.log("processMessage failed: invalid message:" + message);
+            console.log("processMessage failed: invalid message: " + JSON.stringify(message));
         }
     } catch (e) {
-        console.log("processMessage failed: Message: " + message);
         console.log("processMessage failed: Error: " + e);
         console.log("processMessage failed: Stack: " + e.stack);
+        console.log("processMessage failed: Message: " + message);
     }
 }
 
+var isProcessing = false;
+
 // This is called from the NativeToJsMessageQueue.java.
-androidExec.processMessages = function(messages) {
+androidExec.processMessages = function(messages, opt_useTimeout) {
     if (messages) {
         messagesFromNative.push(messages);
-        // Check for the reentrant case, and enqueue the message if that's the case.
-        if (messagesFromNative.length > 1) {
-            return;
-        }
+    }
+    // Check for the reentrant case.
+    if (isProcessing) {
+        return;
+    }
+    if (opt_useTimeout) {
+        window.setTimeout(androidExec.processMessages, 0);
+        return;
+    }
+    isProcessing = true;
+    try {
+        // TODO: add setImmediate polyfill and process only one message at a time.
         while (messagesFromNative.length) {
-            // Don't unshift until the end so that reentrancy can be detected.
-            messages = messagesFromNative[0];
+            var msg = popMessageFromQueue();
             // The Java side can send a * message to indicate that it
             // still has messages waiting to be retrieved.
-            if (messages == '*') {
-                messagesFromNative.shift();
-                window.setTimeout(pollOnce, 0);
+            if (msg == '*' && messagesFromNative.length === 0) {
+                setTimeout(pollOnce, 0);
                 return;
             }
-
-            var spaceIdx = messages.indexOf(' ');
-            var msgLen = +messages.slice(0, spaceIdx);
-            var message = messages.substr(spaceIdx + 1, msgLen);
-            messages = messages.slice(spaceIdx + msgLen + 1);
-            processMessage(message);
-            if (messages) {
-                messagesFromNative[0] = messages;
-            } else {
-                messagesFromNative.shift();
-            }
+            processMessage(msg);
         }
+    } finally {
+        isProcessing = false;
     }
 };
 
+function popMessageFromQueue() {
+    var messageBatch = messagesFromNative.shift();
+    if (messageBatch == '*') {
+        return '*';
+    }
+
+    var spaceIdx = messageBatch.indexOf(' ');
+    var msgLen = +messageBatch.slice(0, spaceIdx);
+    var message = messageBatch.substr(spaceIdx + 1, msgLen);
+    messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
+    if (messageBatch) {
+        messagesFromNative.unshift(messageBatch);
+    }
+    return message;
+}
+
 module.exports = androidExec;
 
 });
 
-// file: lib/common/modulemapper.js
+// file: src/common/exec/proxy.js
+define("cordova/exec/proxy", function(require, exports, module) {
+
+
+// internal map of proxy function
+var CommandProxyMap = {};
+
+module.exports = {
+
+    // example: cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: function(successCallback, errorCallback, options) {...},...);
+    add:function(id,proxyObj) {
+        console.log("adding proxy for " + id);
+        CommandProxyMap[id] = proxyObj;
+        return proxyObj;
+    },
+
+    // cordova.commandProxy.remove("Accelerometer");
+    remove:function(id) {
+        var proxy = CommandProxyMap[id];
+        delete CommandProxyMap[id];
+        CommandProxyMap[id] = null;
+        return proxy;
+    },
+
+    get:function(service,action) {
+        return ( CommandProxyMap[service] ? CommandProxyMap[service][action] : null );
+    }
+};
+});
+
+// file: src/common/init.js
+define("cordova/init", function(require, exports, module) {
+
+var channel = require('cordova/channel');
+var cordova = require('cordova');
+var modulemapper = require('cordova/modulemapper');
+var platform = require('cordova/platform');
+var pluginloader = require('cordova/pluginloader');
+
+var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady];
+
+function logUnfiredChannels(arr) {
+    for (var i = 0; i < arr.length; ++i) {
+        if (arr[i].state != 2) {
+            console.log('Channel not fired: ' + arr[i].type);
+        }
+    }
+}
+
+window.setTimeout(function() {
+    if (channel.onDeviceReady.state != 2) {
+        console.log('deviceready has not fired after 5 seconds.');
+        logUnfiredChannels(platformInitChannelsArray);
+        logUnfiredChannels(channel.deviceReadyChannelsArray);
+    }
+}, 5000);
+
+// Replace navigator before any modules are required(), to ensure it happens as soon as possible.
+// We replace it so that properties that can't be clobbered can instead be overridden.
+function replaceNavigator(origNavigator) {
+    var CordovaNavigator = function() {};
+    CordovaNavigator.prototype = origNavigator;
+    var newNavigator = new CordovaNavigator();
+    // This work-around really only applies to new APIs that are newer than Function.bind.
+    // Without it, APIs such as getGamepads() break.
+    if (CordovaNavigator.bind) {
+        for (var key in origNavigator) {
+            if (typeof origNavigator[key] == 'function') {
+                newNavigator[key] = origNavigator[key].bind(origNavigator);
+            }
+        }
+    }
+    return newNavigator;
+}
+if (window.navigator) {
+    window.navigator = replaceNavigator(window.navigator);
+}
+
+if (!window.console) {
+    window.console = {
+        log: function(){}
+    };
+}
+if (!window.console.warn) {
+    window.console.warn = function(msg) {
+        this.log("warn: " + msg);
+    };
+}
+
+// Register pause, resume and deviceready channels as events on document.
+channel.onPause = cordova.addDocumentEventHandler('pause');
+channel.onResume = cordova.addDocumentEventHandler('resume');
+channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');
+
+// Listen for DOMContentLoaded and notify our channel subscribers.
+if (document.readyState == 'complete' || document.readyState == 'interactive') {
+    channel.onDOMContentLoaded.fire();
+} else {
+    document.addEventListener('DOMContentLoaded', function() {
+        channel.onDOMContentLoaded.fire();
+    }, false);
+}
+
+// _nativeReady is global variable that the native side can set
+// to signify that the native code is ready. It is a global since
+// it may be called before any cordova JS is ready.
+if (window._nativeReady) {
+    channel.onNativeReady.fire();
+}
+
+modulemapper.clobbers('cordova', 'cordova');
+modulemapper.clobbers('cordova/exec', 'cordova.exec');
+modulemapper.clobbers('cordova/exec', 'Cordova.exec');
+
+// Call the platform-specific initialization.
+platform.bootstrap && platform.bootstrap();
+
+// Wrap in a setTimeout to support the use-case of having plugin JS appended to cordova.js.
+// The delay allows the attached modules to be defined before the plugin loader looks for them.
+setTimeout(function() {
+    pluginloader.load(function() {
+        channel.onPluginsReady.fire();
+    });
+}, 0);
+
+/**
+ * Create all cordova objects once native side is ready.
+ */
+channel.join(function() {
+    modulemapper.mapModules(window);
+
+    platform.initialize && platform.initialize();
+
+    // Fire event to notify that all objects are created
+    channel.onCordovaReady.fire();
+
+    // Fire onDeviceReady event once page has fully loaded, all
+    // constructors have run and cordova info has been received from native
+    // side.
+    channel.join(function() {
+        require('cordova').fireDocumentEvent('deviceready');
+    }, channel.deviceReadyChannelsArray);
+
+}, platformInitChannelsArray);
+
+
+});
+
+// file: src/common/init_b.js
+define("cordova/init_b", function(require, exports, module) {
+
+var channel = require('cordova/channel');
+var cordova = require('cordova');
+var platform = require('cordova/platform');
+
+var platformInitChannelsArray = [channel.onDOMContentLoaded, channel.onNativeReady];
+
+// setting exec
+cordova.exec = require('cordova/exec');
+
+function logUnfiredChannels(arr) {
+    for (var i = 0; i < arr.length; ++i) {
+        if (arr[i].state != 2) {
+            console.log('Channel not fired: ' + arr[i].type);
+        }
+    }
+}
+
+window.setTimeout(function() {
+    if (channel.onDeviceReady.state != 2) {
+        console.log('deviceready has not fired after 5 seconds.');
+        logUnfiredChannels(platformInitChannelsArray);
+        logUnfiredChannels(channel.deviceReadyChannelsArray);
+    }
+}, 5000);
+
+// Replace navigator before any modules are required(), to ensure it happens as soon as possible.
+// We replace it so that properties that can't be clobbered can instead be overridden.
+function replaceNavigator(origNavigator) {
+    var CordovaNavigator = function() {};
+    CordovaNavigator.prototype = origNavigator;
+    var newNavigator = new CordovaNavigator();
+    // This work-around really only applies to new APIs that are newer than Function.bind.
+    // Without it, APIs such as getGamepads() break.
+    if (CordovaNavigator.bind) {
+        for (var key in origNavigator) {
+            if (typeof origNavigator[key] == 'function') {
+                newNavigator[key] = origNavigator[key].bind(origNavigator);
+            }
+        }
+    }
+    return newNavigator;
+}
+if (window.navigator) {
+    window.navigator = replaceNavigator(window.navigator);
+}
+
+if (!window.console) {
+    window.console = {
+        log: function(){}
+    };
+}
+if (!window.console.warn) {
+    window.console.warn = function(msg) {
+        this.log("warn: " + msg);
+    };
+}
+
+// Register pause, resume and deviceready channels as events on document.
+channel.onPause = cordova.addDocumentEventHandler('pause');
+channel.onResume = cordova.addDocumentEventHandler('resume');
+channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');
+
+// Listen for DOMContentLoaded and notify our channel subscribers.
+if (document.readyState == 'complete' || document.readyState == 'interactive') {
+    channel.onDOMContentLoaded.fire();
+} else {
+    document.addEventListener('DOMContentLoaded', function() {
+        channel.onDOMContentLoaded.fire();
+    }, false);
+}
+
+// _nativeReady is global variable that the native side can set
+// to signify that the native code is ready. It is a global since
+// it may be called before any cordova JS is ready.
+if (window._nativeReady) {
+    channel.onNativeReady.fire();
+}
+
+// Call the platform-specific initialization.
+platform.bootstrap && platform.bootstrap();
+
+/**
+ * Create all cordova objects once native side is ready.
+ */
+channel.join(function() {
+    
+    platform.initialize && platform.initialize();
+
+    // Fire event to notify that all objects are created
+    channel.onCordovaReady.fire();
+
+    // Fire onDeviceReady event once page has fully loaded, all
+    // constructors have run and cordova info has been received from native
+    // side.
+    channel.join(function() {
+        require('cordova').fireDocumentEvent('deviceready');
+    }, channel.deviceReadyChannelsArray);
+
+}, platformInitChannelsArray);
+
+});
+
+// file: src/common/modulemapper.js
 define("cordova/modulemapper", function(require, exports, module) {
 
 var builder = require('cordova/builder'),
@@ -1170,34 +1463,27 @@ exports.getOriginalSymbol = function(context, symbolPath) {
     return obj;
 };
 
-exports.loadMatchingModules = function(matchingRegExp) {
-    for (var k in moduleMap) {
-        if (matchingRegExp.exec(k)) {
-            require(k);
-        }
-    }
-};
-
 exports.reset();
 
 
 });
 
-// file: lib/android/platform.js
+// file: src/android/platform.js
 define("cordova/platform", function(require, exports, module) {
 
 module.exports = {
-    id: "android",
-    initialize:function() {
-        var channel = require("cordova/channel"),
+    id: 'amazon-fireos',
+    bootstrap: function() {
+        var channel = require('cordova/channel'),
             cordova = require('cordova'),
             exec = require('cordova/exec'),
             modulemapper = require('cordova/modulemapper');
 
-        modulemapper.loadMatchingModules(/cordova.*\/symbols$/);
-        modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
+        // Get the shared secret needed to use the bridge.
+        exec.init();
 
-        modulemapper.mapModules(window);
+        // TODO: Extract this as a proper plugin.
+        modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
 
         // Inject a listener for the backbutton on the document.
         var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
@@ -1213,607 +1499,177 @@ module.exports = {
 
         // Let native code know we are all done on the JS side.
         // Native code will then un-hide the WebView.
-        channel.join(function() {
+        channel.onCordovaReady.subscribe(function() {
             exec(null, null, "App", "show", []);
-        }, [channel.onCordovaReady]);
+        });
     }
 };
 
 });
 
-// file: lib/android/plugin/android/app.js
+// file: src/android/plugin/android/app.js
 define("cordova/plugin/android/app", function(require, exports, module) {
 
 var exec = require('cordova/exec');
 
 module.exports = {
-  /**
-   * Clear the resource cache.
-   */
-  clearCache:function() {
-    exec(null, null, "App", "clearCache", []);
-  },
-
-  /**
-   * 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]);
-  },
-
-  /**
-   * Cancel loadUrl that is waiting to be loaded.
-   */
-  cancelLoadUrl:function() {
-    exec(null, null, "App", "cancelLoadUrl", []);
-  },
-
-  /**
-   * 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", []);
-  },
-
-  /**
-   * Go to previous page displayed.
-   * This is the same as pressing the backbutton on Android device.
-   */
-  backHistory:function() {
-    exec(null, null, "App", "backHistory", []);
-  },
-
-  /**
-   * 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]);
-  },
-
-  /**
-   * Exit and terminate the application.
-   */
-  exitApp:function() {
-    return exec(null, null, "App", "exitApp", []);
-  }
-};
-
-});
-
-// 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;
-
-module.exports = {
-    get: function() { return currentApi; },
-    setPreferPrompt: function(value) {
-        currentApi = value ? require('cordova/plugin/android/promptbasednativeapi') : nativeApi;
+    /**
+    * Clear the resource cache.
+    */
+    clearCache:function() {
+        exec(null, null, "App", "clearCache", []);
     },
-    // Used only by tests.
-    set: function(value) {
-        currentApi = value;
-    }
-};
 
-});
-
-// 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]));
-    },
-    setNativeToJsBridgeMode: function(value) {
-        prompt(value, 'gap_bridge_mode:');
+    /**
+    * 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]);
     },
-    retrieveJsMessages: function() {
-        return prompt('', 'gap_poll:');
-    }
-};
-
-});
-
-// 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 queryQueue = {};
-
-/**
- * SQL result set object
- * PRIVATE METHOD
- * @constructor
- */
-var DroidDB_Rows = function() {
-    this.resultSet = [];    // results array
-    this.length = 0;        // number of rows
-};
-
-/**
- * Get item from SQL result set
- *
- * @param row           The row number to return
- * @return              The row object
- */
-DroidDB_Rows.prototype.item = function(row) {
-    return this.resultSet[row];
-};
-
-/**
- * SQL result set that is returned to user.
- * PRIVATE METHOD
- * @constructor
- */
-var DroidDB_Result = function() {
-    this.rows = new DroidDB_Rows();
-};
-
-/**
- * Callback from native code when query is complete.
- * PRIVATE METHOD
- *
- * @param id   Query id
- */
-function completeQuery(id, data) {
-    var query = queryQueue[id];
-    if (query) {
-        try {
-            delete queryQueue[id];
-
-            // 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);
-                }
-
-                tx.queryComplete(id);
-            }
-        } catch (e) {
-            console.log("executeSql error: "+e);
-        }
-    }
-}
-
-/**
- * Callback from native code when query fails
- * PRIVATE METHOD
- *
- * @param reason            Error message
- * @param id                Query id
- */
-function failQuery(reason, id) {
-    var query = queryQueue[id];
-    if (query) {
-        try {
-            delete queryQueue[id];
-
-            // 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);
-            }
-
-        } catch (e) {
-            console.log("executeSql error: "+e);
-        }
-    }
-}
-
-/**
- * SQL query object
- * PRIVATE METHOD
- *
- * @constructor
- * @param tx                The transaction object that this query belongs to
- */
-var DroidDB_Query = function(tx) {
-
-    // Set the id of the query
-    this.id = utils.createUUID();
-
-    // Add this query to the queue
-    queryQueue[this.id] = this;
-
-    // Init result
-    this.resultSet = [];
-
-    // Set transaction that this query belongs to
-    this.tx = tx;
-
-    // Add this query to transaction list
-    this.tx.queryList[this.id] = this;
-
-    // Callbacks
-    this.successCallback = null;
-    this.errorCallback = null;
-
-};
-
-/**
- * Transaction object
- * PRIVATE METHOD
- * @constructor
- */
-var DroidDB_Tx = function() {
-
-    // Set the id of the transaction
-    this.id = utils.createUUID();
-
-    // Callbacks
-    this.successCallback = null;
-    this.errorCallback = null;
-
-    // Query list
-    this.queryList = {};
-};
-
-/**
- * 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];
-
-    // 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 (count === 0) {
-            try {
-                this.successCallback();
-            } catch(e) {
-                console.log("Transaction error calling user success callback: " + e);
-            }
-        }
-    }
-};
-
-/**
- * Mark query in transaction as failed.
- *
- * @param id                Query id
- * @param reason            Error message
- */
-DroidDB_Tx.prototype.queryFailed = function(id, reason) {
-
-    // 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);
-        }
-    }
-};
-
-/**
- * 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 = [];
-    }
-
-    // Create query and add to queue
-    var query = new DroidDB_Query(this);
-    queryQueue[query.id] = query;
-
-    // Save callbacks
-    query.successCallback = successCallback;
-    query.errorCallback = errorCallback;
-
-    // Call native code
-    exec(null, null, "Storage", "executeSql", [sql, params, query.id]);
-};
-
-var DatabaseShell = function() {
-};
-
-/**
- * Start a transaction.
- * Does not support rollback in event of failure.
- *
- * @param process {Function}            The transaction function
- * @param successCallback {Function}
- * @param errorCallback {Function}
- */
-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);
-            }
-        }
-    }
-};
-
-/**
- * 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
- */
-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;
-};
-
-
-module.exports = {
-  openDatabase:DroidDB_openDatabase,
-  failQuery:failQuery,
-  completeQuery:completeQuery
-};
-
-});
-
-// file: lib/android/plugin/android/storage/openDatabase.js
-define("cordova/plugin/android/storage/openDatabase", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper'),
-    storage = require('cordova/plugin/android/storage');
-
-var originalOpenDatabase = modulemapper.getOriginalSymbol(window, 'openDatabase');
-
-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);
-    }
-
-    // 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);
-};
-
-
-
-});
-
-// file: lib/android/plugin/android/storage/symbols.js
-define("cordova/plugin/android/storage/symbols", function(require, exports, module) {
-
-
-var modulemapper = require('cordova/modulemapper');
-
-modulemapper.clobbers('cordova/plugin/android/storage/openDatabase', 'openDatabase');
 
+    /**
+    * Cancel loadUrl that is waiting to be loaded.
+    */
+    cancelLoadUrl:function() {
+        exec(null, null, "App", "cancelLoadUrl", []);
+    },
 
-});
+    /**
+    * 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", []);
+    },
 
-// file: lib/common/plugin/echo.js
-define("cordova/plugin/echo", function(require, exports, module) {
+    /**
+    * Go to previous page displayed.
+    * This is the same as pressing the backbutton on Android device.
+    */
+    backHistory:function() {
+        exec(null, null, "App", "backHistory", []);
+    },
 
-var exec = require('cordova/exec'),
-    utils = require('cordova/utils');
+    /**
+    * 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]);
+    },
 
-/**
- * Sends the given message through exec() to the Echo plugin, which sends it back to the successCallback.
- * @param successCallback  invoked with a FileSystem object
- * @param errorCallback  invoked if error occurs retrieving file system
- * @param message  The string to be echoed.
- * @param forceAsync  Whether to force an async return value (for testing native->js bridge).
- */
-module.exports = function(successCallback, errorCallback, message, forceAsync) {
-    var action = 'echo';
-    var messageIsMultipart = (utils.typeName(message) == "Array");
-    var args = messageIsMultipart ? message : [message];
-
-    if (utils.typeName(message) == 'ArrayBuffer') {
-        if (forceAsync) {
-            console.warn('Cannot echo ArrayBuffer with forced async, falling back to sync.');
-        }
-        action += 'ArrayBuffer';
-    } else if (messageIsMultipart) {
-        if (forceAsync) {
-            console.warn('Cannot echo MultiPart Array with forced async, falling back to sync.');
-        }
-        action += 'MultiPart';
-    } else if (forceAsync) {
-        action += 'Async';
+    /**
+    * Exit and terminate the application.
+    */
+    exitApp:function() {
+        return exec(null, null, "App", "exitApp", []);
     }
-
-    exec(successCallback, errorCallback, "Echo", action, args);
 };
 
-
 });
 
-// file: lib/common/pluginloader.js
+// file: src/common/pluginloader.js
 define("cordova/pluginloader", function(require, exports, module) {
 
-var channel = require('cordova/channel');
 var modulemapper = require('cordova/modulemapper');
+var urlutil = require('cordova/urlutil');
 
 // Helper function to inject a <script> tag.
-function injectScript(url, onload, onerror) {
+// Exported for testing.
+exports.injectScript = function(url, onload, onerror) {
     var script = document.createElement("script");
     // onload fires even when script fails loads with an error.
     script.onload = onload;
-    script.onerror = onerror || onload;
+    // onerror fires for malformed URLs.
+    script.onerror = onerror;
     script.src = url;
     document.head.appendChild(script);
+};
+
+function injectIfNecessary(id, url, onload, onerror) {
+    onerror = onerror || onload;
+    if (id in define.moduleMap) {
+        onload();
+    } else {
+        exports.injectScript(url, function() {
+            if (id in define.moduleMap) {
+                onload();
+            } else {
+                onerror();
+            }
+        }, onerror);
+    }
 }
 
-function onScriptLoadingComplete(moduleList) {
+function onScriptLoadingComplete(moduleList, finishPluginLoading) {
     // Loop through all the plugins and then through their clobbers and merges.
     for (var i = 0, module; module = moduleList[i]; i++) {
-        if (module) {
-            try {
-                if (module.clobbers && module.clobbers.length) {
-                    for (var j = 0; j < module.clobbers.length; j++) {
-                        modulemapper.clobbers(module.id, module.clobbers[j]);
-                    }
-                }
-
-                if (module.merges && module.merges.length) {
-                    for (var k = 0; k < module.merges.length; k++) {
-                        modulemapper.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)) {
-                    modulemapper.runs(module.id);
-                }
+        if (module.clobbers && module.clobbers.length) {
+            for (var j = 0; j < module.clobbers.length; j++) {
+                modulemapper.clobbers(module.id, module.clobbers[j]);
             }
-            catch(err) {
-                // error with module, most likely clobbers, should we continue?
+        }
+
+        if (module.merges && module.merges.length) {
+            for (var k = 0; k < module.merges.length; k++) {
+                modulemapper.merges(module.id, module.merges[k]);
             }
         }
+
+        // Finally, if runs is truthy we want to simply require() the module.
+        if (module.runs) {
+            modulemapper.runs(module.id);
+        }
     }
 
     finishPluginLoading();
 }
 
-// Called when:
-// * There are plugins defined and all plugins are finished loading.
-// * There are no plugins to load.
-function finishPluginLoading() {
-    channel.onPluginsReady.fire();
-}
-
 // 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 onerror response handler will just call finishPluginLoading().
-function handlePluginsObject(path, moduleList) {
+function handlePluginsObject(path, moduleList, finishPluginLoading) {
     // Now inject the scripts.
     var scriptCounter = moduleList.length;
+
+    if (!scriptCounter) {
+        finishPluginLoading();
+        return;
+    }
     function scriptLoadedCallback() {
         if (!--scriptCounter) {
-            onScriptLoadingComplete(moduleList);
+            onScriptLoadingComplete(moduleList, finishPluginLoading);
         }
     }
 
     for (var i = 0; i < moduleList.length; i++) {
-        injectScript(path + moduleList[i].file, scriptLoadedCallback);
+        injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback);
     }
 }
 
-function injectPluginScript(pathPrefix) {
-    injectScript(pathPrefix + 'cordova_plugins.js', function(){
-        try {
-            var moduleList = require("cordova/plugin_list");
-            handlePluginsObject(pathPrefix, moduleList);
-        } catch (e) {
-            // 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();
-        }
-    },finishPluginLoading); // also, add script load error handler for file not found
-}
-
 function findCordovaPath() {
     var path = null;
     var scripts = document.getElementsByTagName('script');
     var term = 'cordova.js';
     for (var n = scripts.length-1; n>-1; n--) {
-        var src = scripts[n].src;
+        var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query param (CB-6007).
         if (src.indexOf(term) == (src.length - term.length)) {
             path = src.substring(0, src.length - term.length);
             break;
@@ -1825,32 +1681,39 @@ function findCordovaPath() {
 // Tries to load all plugins' js-modules.
 // This is an async process, but onDeviceReady is blocked on onPluginsReady.
 // onPluginsReady is fired when there are no plugins to load, or they are all done.
-exports.load = function() {
+exports.load = function(callback) {
     var pathPrefix = findCordovaPath();
     if (pathPrefix === null) {
         console.log('Could not find cordova.js script tag. Plugin loading may fail.');
         pathPrefix = '';
     }
-    injectPluginScript(pathPrefix);
+    injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() {
+        var moduleList = require("cordova/plugin_list");
+        handlePluginsObject(pathPrefix, moduleList, callback);
+    }, callback);
 };
 
 
 });
 
-// file: lib/common/symbols.js
-define("cordova/symbols", function(require, exports, module) {
+// file: src/common/urlutil.js
+define("cordova/urlutil", function(require, exports, module) {
 
-var modulemapper = require('cordova/modulemapper');
 
-// Use merges here in case others symbols files depend on this running first,
-// but fail to declare the dependency with a require().
-modulemapper.merges('cordova', 'cordova');
-modulemapper.clobbers('cordova/exec', 'cordova.exec');
-modulemapper.clobbers('cordova/exec', 'Cordova.exec');
+/**
+ * For already absolute URLs, returns what is passed in.
+ * For relative URLs, converts them to absolute ones.
+ */
+exports.makeAbsolute = function makeAbsolute(url) {
+    var anchorEl = document.createElement('a');
+    anchorEl.href = url;
+    return anchorEl.href;
+};
+
 
 });
 
-// file: lib/common/utils.js
+// file: src/common/utils.js
 define("cordova/utils", function(require, exports, module) {
 
 var utils = exports;
@@ -2021,95 +1884,8 @@ function UUIDcreatePart(length) {
 });
 
 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 pluginloader = require('cordova/pluginloader');
-
-    var platformInitChannelsArray = [channel.onNativeReady, channel.onPluginsReady];
-
-    function logUnfiredChannels(arr) {
-        for (var i = 0; i < arr.length; ++i) {
-            if (arr[i].state != 2) {
-                console.log('Channel not fired: ' + arr[i].type);
-            }
-        }
-    }
-
-    window.setTimeout(function() {
-        if (channel.onDeviceReady.state != 2) {
-            console.log('deviceready has not fired after 5 seconds.');
-            logUnfiredChannels(platformInitChannelsArray);
-            logUnfiredChannels(channel.deviceReadyChannelsArray);
-        }
-    }, 5000);
-
-    // Replace navigator before any modules are required(), to ensure it happens as soon as possible.
-    // We replace it so that properties that can't be clobbered can instead be overridden.
-    function replaceNavigator(origNavigator) {
-        var CordovaNavigator = function() {};
-        CordovaNavigator.prototype = origNavigator;
-        var newNavigator = new CordovaNavigator();
-        // This work-around really only applies to new APIs that are newer than Function.bind.
-        // Without it, APIs such as getGamepads() break.
-        if (CordovaNavigator.bind) {
-            for (var key in origNavigator) {
-                if (typeof origNavigator[key] == 'function') {
-                    newNavigator[key] = origNavigator[key].bind(origNavigator);
-                }
-            }
-        }
-        return newNavigator;
-    }
-    if (context.navigator) {
-        context.navigator = replaceNavigator(context.navigator);
-    }
-
-    // _nativeReady is global variable that the native side can set
-    // to signify that the native code is ready. It is a global since
-    // it may be called before any cordova JS is ready.
-    if (window._nativeReady) {
-        channel.onNativeReady.fire();
-    }
-
-    /**
-     * Create all cordova objects once native side is ready.
-     */
-    channel.join(function() {
-        // Call the platform-specific initialization
-        require('cordova/platform').initialize();
-
-        // Fire event to notify that all objects are created
-        channel.onCordovaReady.fire();
-
-        // Fire onDeviceReady event once page has fully loaded, all
-        // constructors have run and cordova info has been received from native
-        // side.
-        // This join call is deliberately made after platform.initialize() in
-        // order that plugins may manipulate channel.deviceReadyChannelsArray
-        // if necessary.
-        channel.join(function() {
-            require('cordova').fireDocumentEvent('deviceready');
-        }, channel.deviceReadyChannelsArray);
-
-    }, platformInitChannelsArray);
-
-    // Don't attempt to load when running unit tests.
-    if (typeof XMLHttpRequest != 'undefined') {
-        pluginloader.load();
-    }
-}(window));
-
-// file: lib/scripts/bootstrap-android.js
+// file: src/scripts/bootstrap.js
 
-// Tell the native code that a page change has occurred.
-require('cordova/exec')(null, null, 'PluginManager', 'startup', []);
-require('cordova/channel').onNativeReady.fire();
+require('cordova/init');
 
 })();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
index 0dd1c20..6ec1edf 100644
--- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
@@ -45,7 +45,7 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
     private final ExecutorService threadPool = Executors.newCachedThreadPool();
     private static boolean sFactoryInit = false;
     private AmazonWebKitFactory factory = null;
-    
+      
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -57,7 +57,7 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
            if (factory.isRenderProcess(this)) {
                return; // Do nothing if this is on render process
            }
-           factory.initialize(this);
+          factory.initialize(this);
            
            sFactoryInit = true;
        } else {
@@ -70,6 +70,7 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
         Config.init(this);
         
         cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
+        factory.initializeWebView(cordovaWebView, 0xFFFFFF, false, null);
         cordovaWebView.init(this, new CordovaWebViewClient(this, cordovaWebView), new CordovaChromeClient(this, cordovaWebView),
                 Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
 

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/test/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java b/test/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java
index f481e6b..1e56894 100644
--- a/test/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java
+++ b/test/src/org/apache/cordova/test/junit/BackButtonMultiPageTest.java
@@ -21,11 +21,13 @@ package org.apache.cordova.test.junit;
  *
  */
 
+import org.apache.cordova.Config;
+import org.apache.cordova.CordovaChromeClient;
 import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.CordovaWebViewClient;
 import org.apache.cordova.test.backbuttonmultipage;
 
 import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
 import android.test.UiThreadTest;
 import android.view.KeyEvent;
 import android.view.inputmethod.BaseInputConnection;
@@ -207,7 +209,7 @@ public class BackButtonMultiPageTest extends
       });
       
   }
-  
+
   public void testViaBackButtonOnLayout() throws Throwable {
       runTestOnUiThread(new Runnable() {
           public void run()

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5843c7e0/test/src/org/apache/cordova/test/junit/PluginManagerTest.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/junit/PluginManagerTest.java b/test/src/org/apache/cordova/test/junit/PluginManagerTest.java
index 721487b..cf6ed0d 100644
--- a/test/src/org/apache/cordova/test/junit/PluginManagerTest.java
+++ b/test/src/org/apache/cordova/test/junit/PluginManagerTest.java
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.FutureTask;
 
-import org.apache.cordova.CordovaInterface;
 import org.apache.cordova.CordovaWebView;
 import org.apache.cordova.PluginEntry;
 import org.apache.cordova.PluginManager;
@@ -50,12 +49,9 @@ public class PluginManagerTest extends ActivityInstrumentationTestCase2<CordovaW
     private static final String PLUGIN4_CLASS = PLUGIN_PACKAGE + PLUGIN4_SERVICE;
     private static final String PLUGIN5_SERVICE = "Plugin5";
     private static final String PLUGIN5_CLASS = PLUGIN_PACKAGE + PLUGIN5_SERVICE;
-    private static final String TAG = "PluginManagerTest";
     private static final String TEST_URL = "file:///android_asset/www/plugins/%s.html";
     private static final String PLUGIN1_URL = String.format(TEST_URL, PLUGIN1_SERVICE);
-    private static final String PLUGIN2_URL = String.format(TEST_URL, PLUGIN2_SERVICE);
     private static final String PLUGIN3_URL = String.format(TEST_URL, PLUGIN3_SERVICE);
-    private static final String PLUGIN4_URL = String.format(TEST_URL, PLUGIN4_SERVICE);
     private static final String PLUGIN5_URL = String.format(TEST_URL, PLUGIN5_SERVICE);
 
     private CordovaWebViewTestActivity testActivity;
@@ -65,8 +61,6 @@ public class PluginManagerTest extends ActivityInstrumentationTestCase2<CordovaW
     private PluginManager pluginMgr;
     private CordovaWebView mWebView;
 
-    private CordovaInterface cordova;
-    private PluginManager testPluginManager;
 
     public PluginManagerTest() {
         super("org.apache.cordova.test.activities", CordovaWebViewTestActivity.class);
@@ -167,8 +161,9 @@ public class PluginManagerTest extends ActivityInstrumentationTestCase2<CordovaW
         addTestPlugin(PLUGIN2_SERVICE, PLUGIN2_CLASS, true, -99f);
         addTestPlugin(PLUGIN3_SERVICE, PLUGIN3_CLASS, true, -98f);
         
-        Field entries = pluginMgr.getClass().getDeclaredField("entries");
+        Field entries = pluginMgr.getClass().getDeclaredField("entryMap");
         entries.setAccessible(true);
+        @SuppressWarnings("unchecked")
         LinkedHashMap<String, PluginEntry> testEntries = (LinkedHashMap<String, PluginEntry>) entries.get(pluginMgr);
         List<PluginEntry> pluginList = new ArrayList<PluginEntry>();
         for (PluginEntry entry : testEntries.values())
@@ -193,8 +188,8 @@ public class PluginManagerTest extends ActivityInstrumentationTestCase2<CordovaW
      */
     private void addTestPlugin(String service, String cls, boolean onload, final float priority) {
         PluginEntry pEntry = new PluginEntry(service, cls, onload, priority);
-        pEntry.createPlugin(mWebView, testActivity);
         pluginMgr.addService(pEntry);
+        pluginMgr.getPlugin(service);
     }
 
     /**


[09/50] git commit: CB-7018 Fix setButtonPlumbedToJs never un-listening

Posted by na...@apache.org.
CB-7018 Fix setButtonPlumbedToJs never un-listening


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/519cd39e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/519cd39e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/519cd39e

Branch: refs/heads/master
Commit: 519cd39e3841f595ca4887d561f45cc7a35d0602
Parents: 5a61009
Author: Andrew Grieve <ag...@chromium.org>
Authored: Fri Jul 18 13:46:29 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:10:48 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/CordovaWebView.java | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/519cd39e/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 042c5c2..8171b18 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -824,13 +824,17 @@ public class CordovaWebView extends AmazonWebView {
         return super.onKeyUp(keyCode, event);
     }
 
-    public void setButtonPlumbedToJs(int keyCode, boolean value) {
+    public void setButtonPlumbedToJs(int keyCode, boolean override) {
         switch (keyCode) {
             case KeyEvent.KEYCODE_VOLUME_DOWN:
             case KeyEvent.KEYCODE_VOLUME_UP:
             case KeyEvent.KEYCODE_BACK:
                 // TODO: Why are search and menu buttons handled separately?
-                boundKeyCodes.add(keyCode);
+                if (override) {
+                    boundKeyCodes.add(keyCode);
+                } else {
+                    boundKeyCodes.remove(keyCode);
+                }
                 return;
             default:
                 throw new IllegalArgumentException("Unsupported keycode: " + keyCode);


[05/50] git commit: Fix broken unit test due to missing Config.init() call

Posted by na...@apache.org.
Fix broken unit test due to missing Config.init() call


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/340d6581
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/340d6581
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/340d6581

Branch: refs/heads/master
Commit: 340d6581a5898b0451abc11cb336a022028f7c0b
Parents: 811724d
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Jul 14 14:06:47 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:06:53 2014 -0700

----------------------------------------------------------------------
 test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/340d6581/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
index 430b344..889bd5f 100644
--- a/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
+++ b/test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
@@ -67,6 +67,7 @@ public class CordovaWebViewTestActivity extends Activity implements CordovaInter
         setContentView(R.layout.main);
 
         cordovaWebView = (CordovaWebView) findViewById(R.id.cordovaWebView);
+        Config.init(this);
         cordovaWebView.init(this, new CordovaWebViewClient(this, cordovaWebView), new CordovaChromeClient(this, cordovaWebView),
                 Config.getPluginEntries(), Config.getWhitelist(), Config.getPreferences());
 


[12/50] git commit: Extend whitelist to handle URLs without // chars

Posted by na...@apache.org.
Extend whitelist to handle URLs without // chars


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/2fdc6757
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/2fdc6757
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/2fdc6757

Branch: refs/heads/master
Commit: 2fdc6757a795c2345eb00948e66a8fb257f30aa4
Parents: 7cb244e
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu Jun 26 15:48:50 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Tue Aug 5 12:44:44 2014 -0700

----------------------------------------------------------------------
 framework/src/org/apache/cordova/Whitelist.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/2fdc6757/framework/src/org/apache/cordova/Whitelist.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Whitelist.java b/framework/src/org/apache/cordova/Whitelist.java
index ecbb7f6..5101ec3 100644
--- a/framework/src/org/apache/cordova/Whitelist.java
+++ b/framework/src/org/apache/cordova/Whitelist.java
@@ -124,15 +124,15 @@ public class Whitelist {
                     whiteList = null;
                 }
                 else { // specific access
-                    Pattern parts = Pattern.compile("^((\\*|[A-Za-z-]+)://)?(\\*|((\\*\\.)?[^*/:]+))?(:(\\d+))?(/.*)?");
+                    Pattern parts = Pattern.compile("^((\\*|[A-Za-z-]+):(//)?)?(\\*|((\\*\\.)?[^*/:]+))?(:(\\d+))?(/.*)?");
                     Matcher m = parts.matcher(origin);
                     if (m.matches()) {
                         String scheme = m.group(2);
-                        String host = m.group(3);
+                        String host = m.group(4);
                         // Special case for two urls which are allowed to have empty hosts
                         if (("file".equals(scheme) || "content".equals(scheme)) && host == null) host = "*";
-                        String port = m.group(7);
-                        String path = m.group(8);
+                        String port = m.group(8);
+                        String path = m.group(9);
                         if (scheme == null) {
                             // XXX making it stupid friendly for people who forget to include protocol/SSL
                             whiteList.add(new URLPattern("http", host, port, path));


[19/50] git commit: CB-7261 Fix setNativeToJsBridgeMode sometimes crashing when switching to ONLINE_EVENT

Posted by na...@apache.org.
CB-7261 Fix setNativeToJsBridgeMode sometimes crashing when switching to ONLINE_EVENT


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/96c6c52a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/96c6c52a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/96c6c52a

Branch: refs/heads/master
Commit: 96c6c52ac3bcff837696efbbffea54fe4430002b
Parents: cdcf5f3
Author: Andrew Grieve <ag...@chromium.org>
Authored: Thu Aug 7 16:18:56 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:33:33 2014 -0700

----------------------------------------------------------------------
 .../src/org/apache/cordova/NativeToJsMessageQueue.java | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/96c6c52a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
index c306d8d..ebc93cb 100755
--- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
+++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java
@@ -321,11 +321,16 @@ public class NativeToJsMessageQueue {
                 }
             }
         };
+        final Runnable resetNetworkRunnable = new Runnable() {
+            public void run() {
+                online = false;
+                // If the following call triggers a notifyOfFlush, then ignore it.
+                ignoreNextFlush = true;
+                webView.setNetworkAvailable(true);
+            }
+        };
         @Override void reset() {
-            online = false;
-            // If the following call triggers a notifyOfFlush, then ignore it.
-            ignoreNextFlush = true;
-            webView.setNetworkAvailable(true);
+            cordova.getActivity().runOnUiThread(resetNetworkRunnable);
         }
         @Override void onNativeToJsMessageAvailable() {
             cordova.getActivity().runOnUiThread(toggleNetworkRunnable);


[39/50] git commit: CB-7325 Fix error message in android_sdk_version.js when missing SDK on windows

Posted by na...@apache.org.
CB-7325 Fix error message in android_sdk_version.js when missing SDK on windows

github: close #113


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/12ec1b36
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/12ec1b36
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/12ec1b36

Branch: refs/heads/master
Commit: 12ec1b36d8d4d453fc30e858df26636ae294c763
Parents: 0ad1ae4
Author: Refael Ackermann <re...@empeeric.com>
Authored: Mon Aug 18 14:53:07 2014 +0300
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:11:10 2014 -0700

----------------------------------------------------------------------
 bin/lib/android_sdk_version.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/12ec1b36/bin/lib/android_sdk_version.js
----------------------------------------------------------------------
diff --git a/bin/lib/android_sdk_version.js b/bin/lib/android_sdk_version.js
index d03e1e7..e592378 100755
--- a/bin/lib/android_sdk_version.js
+++ b/bin/lib/android_sdk_version.js
@@ -51,7 +51,7 @@ get_sdks = function() {
 
         return Q();
     }, function(stderr) {
-        if (stderr.match(/command\snot\sfound/)) {
+        if (stderr.match(/command\snot\sfound/) || stderr.match(/'android' is not recognized/)) {
             return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
         } else {
             return Q.reject(new Error('An error occurred while listing Android targets'));


[35/50] git commit: CB-3445 Add gradle support clean command (plus some code cleanup)

Posted by na...@apache.org.
CB-3445 Add gradle support clean command (plus some code cleanup)

* Don't run ant clean for gradle ever
* Don't set sdk.dir since ANDROID_HOME is not always set
* Don't export builders


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/77d5ebf8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/77d5ebf8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/77d5ebf8

Branch: refs/heads/master
Commit: 77d5ebf89610aa6e81cbdeeae9d4287bd01b4419
Parents: 1b98e84
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Aug 18 16:19:40 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:08:23 2014 -0700

----------------------------------------------------------------------
 bin/templates/cordova/build        |   2 +-
 bin/templates/cordova/clean        |  20 +++--
 bin/templates/cordova/lib/build.js | 137 +++++++++++++++++++++-----------
 bin/templates/cordova/lib/clean.js |  43 ----------
 4 files changed, 104 insertions(+), 98 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/77d5ebf8/bin/templates/cordova/build
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/build b/bin/templates/cordova/build
index 367bf7d..3c3aee4 100755
--- a/bin/templates/cordova/build
+++ b/bin/templates/cordova/build
@@ -33,7 +33,7 @@ if(args[2] == '--help' ||
     build.help();
 } else {
     reqs.run().done(function() {
-        return build.run.call(build.run, args.slice(2));
+        return build.run(args.slice(2));
     }, function(err) {
         console.error(err);
         process.exit(2);

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/77d5ebf8/bin/templates/cordova/clean
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/clean b/bin/templates/cordova/clean
index 4e0808b..d9a7d49 100755
--- a/bin/templates/cordova/clean
+++ b/bin/templates/cordova/clean
@@ -19,18 +19,26 @@
        under the License.
 */
 
-var clean = require('./lib/clean'),
+var build = require('./lib/build'),
     reqs  = require('./lib/check_reqs'),
     args  = process.argv;
+var path  = require('path');
 
-// Usage support for when args are given
-if(args.length > 2) {
-    clean.help();
+// Support basic help commands
+if(args[2] == '--help' ||
+   args[2] == '/?' ||
+   args[2] == '-h' ||
+   args[2] == 'help' ||
+   args[2] == '-help' ||
+   args[2] == '/help') {
+    console.log('Usage: ' + path.relative(process.cwd(), process.argv[1]));
+    console.log('Cleans the project directory.');
+    process.exit(0);
 } else {
     reqs.run().done(function() {
-        return clean.run();
+        return build.runClean(args.slice(2));
     }, function(err) {
-        console.error('ERROR: ' + err);
+        console.error(err);
         process.exit(2);
     });
 }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/77d5ebf8/bin/templates/cordova/lib/build.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js
index 80e2282..071990f 100644
--- a/bin/templates/cordova/lib/build.js
+++ b/bin/templates/cordova/lib/build.js
@@ -69,7 +69,7 @@ function copyGradleWrapper() {
     shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle'));
 }
 
-module.exports.builders = {
+var builders = {
     ant: {
         getArgs: function(cmd) {
             var args = [cmd, '-f', path.join(ROOT, 'build.xml')];
@@ -77,29 +77,45 @@ module.exports.builders = {
             if (hasCustomRules()) {
                 args.push('-Dout.dir=ant-build', '-Dgen.absolute.dir=ant-gen');
             }
-            try {
-              // Specify sdk dir in case local properties are missing
-              args.push('-Dsdk.dir='+path.join(which.sync('android'), '../..'));
-            } catch(e) {
-              // Can't find android; don't push arg: assume all is okay
-            }
             return args;
         },
 
+        prepEnv: function() {
+            return check_reqs.check_ant()
+            .then(function() {
+            });
+        },
+
         /*
          * Builds the project with ant.
          * Returns a promise.
          */
         build: function(build_type) {
+            // Without our custom_rules.xml, we need to clean before building.
+            var ret = Q();
+            if (!hasCustomRules()) {
+                // clean will call check_ant() for us.
+                ret = this.clean();
+            }
+
             var builder = this;
-            var args = builder.getArgs(build_type == "debug" ? 'debug' : 'release');
-            return Q().then(function() {
+            var args = this.getArgs(build_type == 'debug' ? 'debug' : 'release');
+            return check_reqs.check_ant()
+            .then(function() {
                 return spawn('ant', args);
             }).then(function() {
                 return builder.getOutputFiles();
             });
         },
 
+        clean: function() {
+            var args = this.getArgs('clean');
+            return check_reqs.check_ant()
+            .then(function() {
+                return spawn('ant', args);
+            });
+        },
+
         // Find the recently-generated output APK files
         // Ant only generates one output file; return it.
         getOutputFiles: function() {
@@ -139,6 +155,10 @@ module.exports.builders = {
             return args;
         },
 
+        prepEnv: function() {
+            return Q();
+        },
+
         /*
          * Builds the project with gradle.
          * Returns a promise.
@@ -155,6 +175,18 @@ module.exports.builders = {
             });
         },
 
+        clean: function() {
+            var builder = this;
+            var wrapper = path.join(ROOT, 'gradlew');
+            var args = builder.getArgs('clean');
+            copyGradleWrapper();
+            return Q().then(function() {
+                return spawn(wrapper, args);
+            }).then(function() {
+                return builder.getOutputFiles(build_type);
+            });
+        },
+
         // Find the recently-generated output APK files
         // Gradle can generate multiple output files; return all of them.
         getOutputFiles: function(build_type) {
@@ -171,18 +203,31 @@ module.exports.builders = {
             });
             return candidates;
         }
+    },
+
+    none: {
+        prepEnv: function() {
+            return Q();
+        },
+        build: function() {
+            console.log('Skipping build...');
+            return Q();
+        },
+        clean: function() {
+            return Q();
+        },
     }
 };
 
-/*
- * Builds the project with the specifed options
- * Returns a promise.
- */
-module.exports.run = function(options) {
-
+function parseOpts(options) {
     // Backwards-compatibility: Allow a single string argument
     if (typeof options == "string") options = [options];
 
+    var ret = {
+        buildType: 'debug',
+        buildMethod: process.env['ANDROID_BUILD'] || 'ant'
+    };
+
     // Iterate through command line options
     for (var i=0; options && (i < options.length); ++i) {
         if (options[i].substring && options[i].substring(0,2) == "--") {
@@ -190,21 +235,15 @@ module.exports.run = function(options) {
             switch(option) {
                 case 'debug':
                 case 'release':
-                    if (build_type) {
-                        return Q.reject('Multiple build types (' + build_type + ' and ' + option + ') specified.');
-                    }
-                    build_type = option;
+                    ret.buildType = option;
                     break;
                 case 'ant':
                 case 'gradle':
-                    if (build_method) {
-                        return Q.reject('Multiple build methods (' + build_method + ' and ' + option + ') specified.');
-                    }
-                    build_method = option;
+                    ret.buildMethod = option;
                     break;
                 case 'nobuild' :
-                    console.log('Skipping build...');
-                    return Q();
+                    ret.buildMethod = 'none';
+                    break;
                 default :
                     return Q.reject('Build option \'' + options[i] + '\' not recognized.');
             }
@@ -212,34 +251,36 @@ module.exports.run = function(options) {
             return Q.reject('Build option \'' + options[i] + '\' not recognized.');
         }
     }
-    // Defaults
-    build_type = build_type || "debug";
-    build_method = build_method || process.env.ANDROID_BUILD || "ant";
+    return ret;
+}
 
-    // Get the builder
-    var builder = module.exports.builders[build_method];
+/*
+ * Builds the project with the specifed options
+ * Returns a promise.
+ */
+module.exports.runClean = function(options) {
+    var opts = parseOpts(options);
+    var builder = builders[opts.buildMethod];
+    return builder.prepEnv(opts.buildType)
+    .then(function() {
+        return builder.clean();
+    });
+};
 
-    // Without our custom_rules.xml, we need to clean before building.
-    var ret;
-    if (!hasCustomRules()) {
-        // clean will call check_ant() for us.
-        ret = require('./clean').run();
-    } else {
-        ret = check_reqs.check_ant();
-    }
+/*
+ * Builds the project with the specifed options
+ * Returns a promise.
+ */
+module.exports.run = function(options) {
+    var opts = parseOpts(options);
 
-    // Return a promise for the actual build
-    return ret.then(function() {
-        return builder.build.call(builder, build_type);
+    var builder = builders[opts.buildMethod];
+    return builder.prepEnv(opts.buildType)
+    .then(function() {
+        return builder.build(opts.buildType);
     }).then(function(apkFiles) {
         var outputDir = path.join(ROOT, 'out');
-        try {
-            fs.mkdirSync(outputDir);
-        } catch (e) {
-            if (e.code != "EEXIST") {
-                throw e;
-            }
-        }
+        shell.mkdir('-p', outputDir);
         for (var i=0; i < apkFiles.length; ++i) {
             shell.cp('-f', apkFiles[i], path.join(outputDir, path.basename(apkFiles[i])));
         }

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/77d5ebf8/bin/templates/cordova/lib/clean.js
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/lib/clean.js b/bin/templates/cordova/lib/clean.js
deleted file mode 100644
index f215829..0000000
--- a/bin/templates/cordova/lib/clean.js
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env node
-
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not use this file except in compliance
-       with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
-*/
-
-var build = require('./build'),
-    spawn = require('./spawn'),
-    path  = require('path');
-var check_reqs = require('./check_reqs');
-
-/*
- * Cleans the project using ant
- * Returns a promise.
- */
-module.exports.run = function() {
-    var args = build.getAntArgs('clean');
-    return check_reqs.check_ant()
-    .then(function() {
-        return spawn('ant', args);
-    });
-}
-
-module.exports.help = function() {
-    console.log('Usage: ' + path.relative(process.cwd(), process.argv[1]));
-    console.log('Cleans the project directory.');
-    process.exit(0);
-}


[06/50] git commit: Move plugin instantiation and instance storing logic PluginEntry->PluginManager

Posted by na...@apache.org.
Move plugin instantiation and instance storing logic PluginEntry->PluginManager

Instantiation and storing of the instance should be owned privately by
PluginManager, not exposed via an unprotected public API. That said,
this refactoring does not make any breaking changes to the public API,
except for removing the createPlugin call in PluginEntry, which should
not be called by anyone other than PluginManager anyway.


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/38586b57
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/38586b57
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/38586b57

Branch: refs/heads/master
Commit: 38586b5730029c81ce1b9423e8d51f448724079f
Parents: 340d658
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Jul 14 14:08:27 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Wed Jul 30 18:09:11 2014 -0700

----------------------------------------------------------------------
 .../src/org/apache/cordova/PluginEntry.java     |  85 +++----------
 .../src/org/apache/cordova/PluginManager.java   | 124 +++++++++++--------
 2 files changed, 90 insertions(+), 119 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/38586b57/framework/src/org/apache/cordova/PluginEntry.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginEntry.java b/framework/src/org/apache/cordova/PluginEntry.java
index 43bc610..e7d4fe5 100755
--- a/framework/src/org/apache/cordova/PluginEntry.java
+++ b/framework/src/org/apache/cordova/PluginEntry.java
@@ -20,11 +20,8 @@ package org.apache.cordova;
 
 import java.util.List;
 
-import org.apache.cordova.CordovaWebView;
-import org.apache.cordova.CordovaInterface;
 import org.apache.cordova.CordovaPlugin;
 
-
 /**
  * This class represents a service entry object.
  */
@@ -33,24 +30,22 @@ public class PluginEntry implements Comparable<PluginEntry> {
     /**
      * The name of the service that this plugin implements
      */
-    public String service = "";
+    public String service;
 
     /**
      * The plugin class name that implements the service.
      */
-    public String pluginClass = "";
+    public String pluginClass;
 
     /**
-     * The plugin object.
-     * Plugin objects are only created when they are called from JavaScript.  (see PluginManager.exec)
-     * The exception is if the onload flag is set, then they are created when PluginManager is initialized.
+     * The pre-instantiated plugin to use for this entry.
      */
-    public CordovaPlugin plugin = null;
+    public CordovaPlugin plugin;
 
     /**
      * Flag that indicates the plugin object should be created when PluginManager is initialized.
      */
-    public boolean onload = false;
+    public boolean onload;
 
 	/**
 	 * The numerical priority used to determine which plugin takes precendence
@@ -62,13 +57,12 @@ public class PluginEntry implements Comparable<PluginEntry> {
 	public float priority = 0;
     private List<String> urlFilters;
 
+
     /**
-     * @param service               The name of the service
-     * @param plugin                The plugin associated with this entry
+     * Constructs with a CordovaPlugin already instantiated.
      */
     public PluginEntry(String service, CordovaPlugin plugin) {
-        this(service, plugin.getClass().getName(), true, null);
-        this.plugin = plugin;
+        this(service, plugin.getClass().getName(), true, plugin, null);
     }
 
     /**
@@ -82,69 +76,30 @@ public class PluginEntry implements Comparable<PluginEntry> {
     }
     
     public PluginEntry(String service, String pluginClass, boolean onload) {
-        this(service, pluginClass, onload, null);
+        this(service, pluginClass, onload, null, null);
     }
     
-
+    @Deprecated // urlFilters are going away
     public PluginEntry(String service, String pluginClass, boolean onload, List<String> urlFilters) {
         this.service = service;
         this.pluginClass = pluginClass;
         this.onload = onload;
         this.urlFilters = urlFilters;
         this.priority = 0;
+        
+        plugin = null;
     }
 
-    public List<String> getUrlFilters() {
-        return urlFilters;
-    }
-
-    /**
-     * Create plugin object.
-     * If plugin is already created, then just return it.
-     *
-     * @return                      The plugin object
-     */
-    public CordovaPlugin createPlugin(CordovaWebView webView, CordovaInterface ctx) {
-        if (this.plugin != null) {
-            return this.plugin;
-        }
-        try {
-            Class<?> c = getClassByName(this.pluginClass);
-            if (isCordovaPlugin(c)) {
-                this.plugin = (CordovaPlugin) c.newInstance();
-                this.plugin.privateInitialize(ctx, webView, webView.getPreferences());
-                return plugin;
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.out.println("Error adding plugin " + this.pluginClass + ".");
-        }
-        return null;
-    }
-
-    /**
-     * Get the class.
-     *
-     * @param clazz
-     * @return a reference to the named class
-     * @throws ClassNotFoundException
-     */
-    private Class<?> getClassByName(final String clazz) throws ClassNotFoundException {
-        Class<?> c = null;
-        if ((clazz != null) && !("".equals(clazz))) {
-            c = Class.forName(clazz);
-        }
-        return c;
+    private PluginEntry(String service, String pluginClass, boolean onload, CordovaPlugin plugin, List<String> urlFilters) {
+        this.service = service;
+        this.pluginClass = pluginClass;
+        this.onload = onload;
+        this.urlFilters = urlFilters;
+        this.plugin = plugin;
     }
 
-    /**
-     * Returns whether the given class extends CordovaPlugin.
-     */
-    private boolean isCordovaPlugin(Class<?> c) {
-        if (c != null) {
-            return CordovaPlugin.class.isAssignableFrom(c);
-        }
-        return false;
+    public List<String> getUrlFilters() {
+        return urlFilters;
     }
 
 	/**

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/38586b57/framework/src/org/apache/cordova/PluginManager.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/PluginManager.java b/framework/src/org/apache/cordova/PluginManager.java
index f54e075..04ac200 100755
--- a/framework/src/org/apache/cordova/PluginManager.java
+++ b/framework/src/org/apache/cordova/PluginManager.java
@@ -46,8 +46,9 @@ public class PluginManager {
     private static String TAG = "PluginManager";
     private static final int SLOW_EXEC_WARNING_THRESHOLD = Debug.isDebuggerConnected() ? 60 : 16;
 
-    // List of service entries, sorted by priority
-    private HashMap<String, PluginEntry> entries = new LinkedHashMap<String, PluginEntry>();
+    // List of service entries
+    private final HashMap<String, CordovaPlugin> pluginMap = new HashMap<String, CordovaPlugin>();
+    private final HashMap<String, PluginEntry> entryMap = new LinkedHashMap<String, PluginEntry>();
 
     private final CordovaInterface ctx;
     private final CordovaWebView app;
@@ -75,8 +76,7 @@ public class PluginManager {
     public void setPluginEntries(List<PluginEntry> pluginEntries) {
         this.onPause(false);
         this.onDestroy();
-        this.clearPluginObjects();
-        entries.clear();
+        pluginMap.clear();
         urlMap.clear();
         for (PluginEntry entry : pluginEntries) {
             addService(entry);
@@ -90,7 +90,7 @@ public class PluginManager {
         LOG.d(TAG, "init()");
         this.onPause(false);
         this.onDestroy();
-        this.clearPluginObjects();
+        pluginMap.clear();
         this.startupPlugins();
     }
 
@@ -102,18 +102,16 @@ public class PluginManager {
      * Delete all plugin objects.
      */
     public void clearPluginObjects() {
-        for (PluginEntry entry : this.entries.values()) {
-            entry.plugin = null;
-        }
+        pluginMap.clear();
     }
 
     /**
      * Create plugins objects that have onload set.
      */
     public void startupPlugins() {
-        for (PluginEntry entry : this.entries.values()) {
+        for (PluginEntry entry : entryMap.values()) {
             if (entry.onload) {
-                entry.createPlugin(this.app, this.ctx);
+                getPlugin(entry.service);
             }
         }
     }
@@ -179,15 +177,21 @@ public class PluginManager {
      * @return              CordovaPlugin or null
      */
     public CordovaPlugin getPlugin(String service) {
-        PluginEntry entry = this.entries.get(service);
-        if (entry == null) {
-            return null;
-        }
-        CordovaPlugin plugin = entry.plugin;
-        if (plugin == null) {
-            plugin = entry.createPlugin(this.app, this.ctx);
+        CordovaPlugin ret = pluginMap.get(service);
+        if (ret == null) {
+            PluginEntry pe = entryMap.get(service);
+            if (pe == null) {
+                return null;
+            }
+            if (pe.plugin != null) {
+                ret = pe.plugin;
+            } else {
+                ret = instantiatePlugin(pe.pluginClass);
+            }
+            ret.privateInitialize(ctx, app, app.getPreferences());
+            pluginMap.put(service, ret);
         }
-        return plugin;
+        return ret;
     }
 
     /**
@@ -253,11 +257,16 @@ public class PluginManager {
     }
     
     public void addService(PluginEntry entry) {
-        this.entries.put(entry.service, entry);
+        this.entryMap.put(entry.service, entry);
         List<String> urlFilters = entry.getUrlFilters();
         if (urlFilters != null) {
             urlMap.put(entry.service, urlFilters);
         }
+        if (entry.plugin != null) {
+            entry.plugin.privateInitialize(ctx, app, app.getPreferences());
+            pluginMap.put(entry.service, entry.plugin);
+        }
+
     }
 
     /**
@@ -266,10 +275,8 @@ public class PluginManager {
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
     public void onPause(boolean multitasking) {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                entry.plugin.onPause(multitasking);
-            }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            plugin.onPause(multitasking);
         }
     }
 
@@ -279,10 +286,8 @@ public class PluginManager {
      * @param multitasking      Flag indicating if multitasking is turned on for app
      */
     public void onResume(boolean multitasking) {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                entry.plugin.onResume(multitasking);
-            }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            plugin.onResume(multitasking);
         }
     }
 
@@ -290,10 +295,8 @@ public class PluginManager {
      * The final call you receive before your activity is destroyed.
      */
     public void onDestroy() {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                entry.plugin.onDestroy();
-            }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            plugin.onDestroy();
         }
     }
 
@@ -309,12 +312,10 @@ public class PluginManager {
         if (obj != null) {
             return obj;
         }
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                obj = entry.plugin.onMessage(id, data);
-                if (obj != null) {
-                    return obj;
-                }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            obj = plugin.onMessage(id, data);
+            if (obj != null) {
+                return obj;
             }
         }
         return null;
@@ -324,10 +325,8 @@ public class PluginManager {
      * Called when the activity receives a new intent.
      */
     public void onNewIntent(Intent intent) {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                entry.plugin.onNewIntent(intent);
-            }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            plugin.onNewIntent(intent);
         }
     }
 
@@ -342,7 +341,7 @@ public class PluginManager {
         // Instead, plugins should not include <url-filter> and instead ensure
         // that they are loaded before this function is called (either by setting
         // the onload <param> or by making an exec() call to them)
-        for (PluginEntry entry : this.entries.values()) {
+        for (PluginEntry entry : this.entryMap.values()) {
             List<String> urlFilters = urlMap.get(entry.service);
             if (urlFilters != null) {
                 for (String s : urlFilters) {
@@ -350,8 +349,9 @@ public class PluginManager {
                         return getPlugin(entry.service).onOverrideUrlLoading(url);
                     }
                 }
-            } else if (entry.plugin != null) {
-                if (entry.plugin.onOverrideUrlLoading(url)) {
+            } else {
+                CordovaPlugin plugin = pluginMap.get(entry.service);
+                if (plugin != null && plugin.onOverrideUrlLoading(url)) {
                     return true;
                 }
             }
@@ -363,22 +363,38 @@ public class PluginManager {
      * Called when the app navigates or refreshes.
      */
     public void onReset() {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                entry.plugin.onReset();
-            }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            plugin.onReset();
         }
     }
 
     Uri remapUri(Uri uri) {
-        for (PluginEntry entry : this.entries.values()) {
-            if (entry.plugin != null) {
-                Uri ret = entry.plugin.remapUri(uri);
-                if (ret != null) {
-                    return ret;
-                }
+        for (CordovaPlugin plugin : this.pluginMap.values()) {
+            Uri ret = plugin.remapUri(uri);
+            if (ret != null) {
+                return ret;
             }
         }
         return null;
     }
+
+    /**
+     * Create a plugin based on class name.
+     */
+    private CordovaPlugin instantiatePlugin(String className) {
+        CordovaPlugin ret = null;
+        try {
+            Class<?> c = null;
+            if ((className != null) && !("".equals(className))) {
+                c = Class.forName(className);
+            }
+            if (c != null & CordovaPlugin.class.isAssignableFrom(c)) {
+                ret = (CordovaPlugin) c.newInstance();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("Error adding plugin " + className + ".");
+        }
+        return ret;
+    }
 }


[40/50] git commit: CB-3445: Read project.properties to configure gradle libraries

Posted by na...@apache.org.
CB-3445: Read project.properties to configure gradle libraries


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/c6f47be9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/c6f47be9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/c6f47be9

Branch: refs/heads/master
Commit: c6f47be9cb35e8c597ba2a47e568a95d0149a980
Parents: 12ec1b3
Author: Ian Clelland <ic...@chromium.org>
Authored: Wed Aug 20 10:44:48 2014 -0400
Committer: Archana Naik <na...@lab126.com>
Committed: Thu Aug 28 11:11:24 2014 -0700

----------------------------------------------------------------------
 bin/lib/create.js                      |  1 -
 bin/templates/project/build.gradle     | 16 ++++++++++++++--
 bin/templates/project/libraries.gradle |  7 -------
 bin/templates/project/settings.gradle  | 19 ++++++++++++++++++-
 4 files changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c6f47be9/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 0f0014c..870f76c 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -124,7 +124,6 @@ function copyBuildRules(projectPath) {
     shell.cp('-f', path.join(srcDir, 'custom_rules.xml'), projectPath);
 
     shell.cp('-f', path.join(srcDir, 'build.gradle'), projectPath);
-    shell.cp('-f', path.join(srcDir, 'libraries.gradle'), projectPath);
     shell.cp('-f', path.join(srcDir, 'settings.gradle'), projectPath);
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c6f47be9/bin/templates/project/build.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/build.gradle b/bin/templates/project/build.gradle
index 4b34e48..dcebbc5 100644
--- a/bin/templates/project/build.gradle
+++ b/bin/templates/project/build.gradle
@@ -15,9 +15,10 @@ buildscript {
 ext.multiarch=false
 
 dependencies {
-    compile project(':CordovaLib')
+    for (subproject in getProjectList()) {
+        compile project(subproject)
+    }
 }
-apply from: 'libraries.gradle'
 
 android {
     sourceSets {
@@ -79,3 +80,14 @@ def getVersionCodeFromManifest() {
     matcher.find()
     return Integer.parseInt(matcher.group(1))
 }
+
+def getProjectList() {
+    def manifestFile = file("project.properties")
+    def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)")
+    def matcher = pattern.matcher(manifestFile.getText())
+    def projects = []
+    while (matcher.find()) {
+      projects.add(":" + matcher.group(2).replace("/",":"))
+    }
+    return projects
+}

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c6f47be9/bin/templates/project/libraries.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/libraries.gradle b/bin/templates/project/libraries.gradle
deleted file mode 100644
index f497543..0000000
--- a/bin/templates/project/libraries.gradle
+++ /dev/null
@@ -1,7 +0,0 @@
-dependencies {
-// This file contains no plugins by default.
-// To add a third-party library project, add a line to this file like
-//    compile project(':library_dir_name')
-}
-// If multiple ndk architectures are provided, uncomment this line
-//ext.multiarch=true

http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/c6f47be9/bin/templates/project/settings.gradle
----------------------------------------------------------------------
diff --git a/bin/templates/project/settings.gradle b/bin/templates/project/settings.gradle
index b938ccc..baa1714 100644
--- a/bin/templates/project/settings.gradle
+++ b/bin/templates/project/settings.gradle
@@ -1 +1,18 @@
-include ':CordovaLib', ':'
+import java.util.regex.Pattern
+
+def getProjectList() {
+    def manifestFile = file("project.properties")
+    def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)")
+    def matcher = pattern.matcher(manifestFile.getText())
+    def projects = []
+    while (matcher.find()) {
+      projects.add(":" + matcher.group(2).replace("/",":"))
+    }
+    return projects
+}
+
+for (subproject in getProjectList()) {
+    include subproject
+}
+
+include ':'


[21/50] git commit: Change in test's AndroidManifest.xml needed for the test to run properly

Posted by na...@apache.org.
Change in test's AndroidManifest.xml needed for the test to run properly


Project: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/commit/5037bdc7
Tree: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/tree/5037bdc7
Diff: http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/diff/5037bdc7

Branch: refs/heads/master
Commit: 5037bdc77ae05f524096b8aaf54f5abf747e011a
Parents: 0a53a0c
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Aug 14 14:29:54 2014 -0700
Committer: Archana Naik <na...@lab126.com>
Committed: Mon Aug 18 12:33:59 2014 -0700

----------------------------------------------------------------------
 test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-amazon-fireos/blob/5037bdc7/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
----------------------------------------------------------------------
diff --git a/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java b/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
index aea06af..381e0ed 100644
--- a/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
+++ b/test/src/org/apache/cordova/test/junit/IntentUriOverrideTest.java
@@ -25,6 +25,7 @@ public class IntentUriOverrideTest extends ActivityInstrumentationTestCase2<Sabo
     private String BAD_URL = "file:///sdcard/download/wl-exploit.htm";
 
 
+    @SuppressWarnings("deprecation")
     public IntentUriOverrideTest()
     {
         super("org.apache.cordova.test",SabotagedActivity.class);